From 931e41ca13629bbfe7211c8a4a1f7a5547a9d680 Mon Sep 17 00:00:00 2001 From: zhousq Date: Wed, 7 Aug 2024 13:51:37 +0800 Subject: [PATCH] =?UTF-8?q?2024-08-07=20=E6=A1=86=E6=9E=B6=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .image/Java监控.jpg | Bin 0 -> 115185 bytes .image/MySQL.jpg | Bin 0 -> 145623 bytes .image/OA请假-列表.jpg | Bin 0 -> 156000 bytes .image/OA请假-发起.jpg | Bin 0 -> 69719 bytes .image/OA请假-详情.jpg | Bin 0 -> 66212 bytes .image/Redis.jpg | Bin 0 -> 97707 bytes .image/admin-uniapp/01.png | Bin 0 -> 15405 bytes .image/admin-uniapp/02.png | Bin 0 -> 33367 bytes .image/admin-uniapp/03.png | Bin 0 -> 14902 bytes .image/admin-uniapp/04.png | Bin 0 -> 9908 bytes .image/admin-uniapp/05.png | Bin 0 -> 57697 bytes .image/admin-uniapp/06.png | Bin 0 -> 8780 bytes .image/admin-uniapp/07.png | Bin 0 -> 26306 bytes .image/admin-uniapp/08.png | Bin 0 -> 26380 bytes .image/admin-uniapp/09.png | Bin 0 -> 7171 bytes .image/common/bpm-feature.png | Bin 0 -> 16260 bytes .image/common/crm-feature.png | Bin 0 -> 15610 bytes .image/common/erp-feature.png | Bin 0 -> 47016 bytes .image/common/infra-feature.png | Bin 0 -> 16920 bytes .image/common/mall-feature.png | Bin 0 -> 27721 bytes .image/common/mall-preview.png | Bin 0 -> 209292 bytes .image/common/project-vs.png | Bin 0 -> 142512 bytes .image/common/ruoyi-vue-pro-architecture.png | Bin 0 -> 70208 bytes .image/common/ruoyi-vue-pro-biz.png | Bin 0 -> 32992 bytes .image/common/system-feature.png | Bin 0 -> 13584 bytes .image/common/win-cloud-architecture.png | Bin 0 -> 206171 bytes .image/common/win-roadmap.png | Bin 0 -> 61359 bytes .image/个人中心.jpg | Bin 0 -> 38162 bytes .image/代码生成.jpg | Bin 0 -> 132874 bytes .image/令牌管理.jpg | Bin 0 -> 91169 bytes .image/任务列表-审批.jpg | Bin 0 -> 91095 bytes .image/任务列表-已办.jpg | Bin 0 -> 163712 bytes .image/任务列表-待办.jpg | Bin 0 -> 153465 bytes .image/任务日志.jpg | Bin 0 -> 126637 bytes .image/商户信息.jpg | Bin 0 -> 84643 bytes .image/在线用户.jpg | Bin 0 -> 74629 bytes .image/大屏设计器-列表.jpg | Bin 0 -> 54718 bytes .image/大屏设计器-编辑.jpg | Bin 0 -> 111729 bytes .image/大屏设计器-预览.jpg | Bin 0 -> 70694 bytes .image/字典数据.jpg | Bin 0 -> 79736 bytes .image/字典类型.jpg | Bin 0 -> 129528 bytes .image/定时任务.jpg | Bin 0 -> 75691 bytes .image/岗位管理.jpg | Bin 0 -> 82156 bytes .image/应用信息-列表.jpg | Bin 0 -> 95662 bytes .image/应用信息-编辑.jpg | Bin 0 -> 95215 bytes .image/应用管理.jpg | Bin 0 -> 56424 bytes .image/我的流程-列表.jpg | Bin 0 -> 180098 bytes .image/我的流程-发起.jpg | Bin 0 -> 93105 bytes .image/我的流程-详情.jpg | Bin 0 -> 89150 bytes .image/报表设计器-图形报表.jpg | Bin 0 -> 33448 bytes .image/报表设计器-打印设计.jpg | Bin 0 -> 37781 bytes .image/报表设计器-数据报表.jpg | Bin 0 -> 42204 bytes .image/操作日志.jpg | Bin 0 -> 100911 bytes .image/支付订单.jpg | Bin 0 -> 212798 bytes .image/敏感词.jpg | Bin 0 -> 48020 bytes .image/数据库文档.jpg | Bin 0 -> 99417 bytes .image/文件管理.jpg | Bin 0 -> 75214 bytes .image/文件管理2.jpg | Bin 0 -> 117005 bytes .image/文件配置.jpg | Bin 0 -> 118462 bytes .image/日志中心.jpg | Bin 0 -> 85863 bytes .image/流程模型-列表.jpg | Bin 0 -> 176724 bytes .image/流程模型-定义.jpg | Bin 0 -> 127838 bytes .image/流程模型-设计.jpg | Bin 0 -> 128095 bytes .image/流程表单.jpg | Bin 0 -> 151328 bytes .image/生成效果.jpg | Bin 0 -> 131324 bytes .image/用户分组.jpg | Bin 0 -> 84261 bytes .image/用户管理.jpg | Bin 0 -> 114780 bytes .image/登录.jpg | Bin 0 -> 95521 bytes .image/登录日志.jpg | Bin 0 -> 79281 bytes .image/短信日志.jpg | Bin 0 -> 41611 bytes .image/短信模板.jpg | Bin 0 -> 253765 bytes .image/短信渠道.jpg | Bin 0 -> 82323 bytes .image/租户套餐.png | Bin 0 -> 98375 bytes .image/租户管理.jpg | Bin 0 -> 117448 bytes .image/系统接口.jpg | Bin 0 -> 92922 bytes .image/菜单管理.jpg | Bin 0 -> 132511 bytes .image/表单构建.jpg | Bin 0 -> 104178 bytes .image/角色管理.jpg | Bin 0 -> 86970 bytes .image/访问日志.jpg | Bin 0 -> 74777 bytes .image/退款订单.jpg | Bin 0 -> 94456 bytes .image/通知公告.jpg | Bin 0 -> 78637 bytes .image/部门管理.jpg | Bin 0 -> 111242 bytes .image/配置管理.jpg | Bin 0 -> 90883 bytes .image/链路追踪.jpg | Bin 0 -> 82434 bytes .image/错误日志.jpg | Bin 0 -> 112243 bytes .image/错误码管理.jpg | Bin 0 -> 134270 bytes .image/首页.jpg | Bin 0 -> 63389 bytes LICENSE | 93 +- README.md | 359 +- lombok.config | 4 + pom.xml | 149 + script/docker/docker-compose.yml | 162 + script/idea/http-client.env.json | 28 + sql/db2/README.md | 3 + .../liquibase/database/core/DmDatabase.java | 598 + .../liquibase/datatype/core/BooleanType.java | 165 + .../impl/AbstractEngineConfiguration.java | 2068 +++ .../main/resources/META-INF/package-info.md | 1 + .../services/liquibase.database.Database | 21 + sql/dm/ruoyi-vue-pro-dm8.sql | 4349 ++++++ sql/mysql/ruoyi-vue-pro.sql | 3913 ++++++ sql/oracle/ruoyi-vue-pro.sql | 4582 +++++++ sql/postgresql/ruoyi-vue-pro.sql | 4714 +++++++ sql/postgresql/win-initdb-20240806.sql | 5202 +++++++ sql/sqlserver/ruoyi-vue-pro.sql | 11255 ++++++++++++++++ sql/tools/.gitignore | 8 + sql/tools/README.md | 101 + sql/tools/convertor.py | 781 ++ sql/tools/docker-compose.yaml | 94 + sql/tools/oracle/1_create_user.sql | 3 + sql/tools/oracle/2_create_schema.sh | 1 + sql/tools/sqlserver/create_schema.sh | 5 + win-dependencies/pom.xml | 687 + win-framework/pom.xml | 48 + win-framework/win-common/pom.xml | 149 + .../com/fhs/trans/service/AutoTransable.java | 59 + .../common/core/IntArrayValuable.java | 15 + .../win/framework/common/core/KeyValue.java | 22 + .../common/enums/CommonStatusEnum.java | 46 + .../common/enums/DateIntervalEnum.java | 46 + .../framework/common/enums/DocumentEnum.java | 21 + .../framework/common/enums/RpcConstants.java | 17 + .../framework/common/enums/TerminalEnum.java | 40 + .../framework/common/enums/UserTypeEnum.java | 39 + .../common/enums/WebFilterOrderEnum.java | 36 + .../framework/common/exception/ErrorCode.java | 32 + .../common/exception/ServerException.java | 60 + .../common/exception/ServiceException.java | 60 + .../enums/GlobalErrorCodeConstants.java | 41 + .../enums/ServiceErrorCodeRange.java | 46 + .../exception/util/ServiceExceptionUtil.java | 77 + .../win/framework/common/package-info.java | 6 + .../framework/common/pojo/CommonResult.java | 112 + .../win/framework/common/pojo/PageParam.java | 36 + .../win/framework/common/pojo/PageResult.java | 41 + .../common/pojo/SortablePageParam.java | 19 + .../framework/common/pojo/SortingField.java | 37 + .../common/util/cache/CacheUtils.java | 49 + .../common/util/collection/ArrayUtils.java | 58 + .../util/collection/CollectionUtils.java | 322 + .../common/util/collection/MapUtils.java | 68 + .../common/util/collection/SetUtils.java | 19 + .../framework/common/util/date/DateUtils.java | 149 + .../common/util/date/LocalDateTimeUtils.java | 309 + .../framework/common/util/http/HttpUtils.java | 126 + .../framework/common/util/io/FileUtils.java | 84 + .../win/framework/common/util/io/IoUtils.java | 28 + .../framework/common/util/json/JsonUtils.java | 202 + .../common/util/monitor/TracerUtils.java | 30 + .../common/util/number/MoneyUtils.java | 131 + .../common/util/number/NumberUtils.java | 64 + .../common/util/object/BeanUtils.java | 62 + .../common/util/object/ObjectUtils.java | 63 + .../common/util/object/PageUtils.java | 67 + .../framework/common/util/package-info.java | 7 + .../common/util/servlet/ServletUtils.java | 101 + .../util/spring/SpringExpressionUtils.java | 89 + .../common/util/spring/SpringUtils.java | 24 + .../common/util/string/StrUtils.java | 80 + .../util/validation/ValidationUtils.java | 55 + .../framework/common/validation/InEnum.java | 35 + .../validation/InEnumCollectionValidator.java | 42 + .../common/validation/InEnumValidator.java | 44 + .../framework/common/validation/Mobile.java | 28 + .../common/validation/MobileValidator.java | 25 + .../common/validation/Telephone.java | 28 + .../common/validation/TelephoneValidator.java | 25 + .../common/validation/package-info.java | 4 + ... Boot 参数校验 Validation 入门》.md | 1 + .../pom.xml | 45 + .../WinDataPermissionAutoConfiguration.java | 44 + ...inDeptDataPermissionAutoConfiguration.java | 44 + .../core/annotation/DataPermission.java | 35 + .../aop/DataPermissionAnnotationAdvisor.java | 36 + .../DataPermissionAnnotationInterceptor.java | 72 + .../core/aop/DataPermissionContextHolder.java | 72 + .../db/DataPermissionDatabaseInterceptor.java | 641 + .../core/rule/DataPermissionRule.java | 36 + .../core/rule/DataPermissionRuleFactory.java | 28 + .../rule/DataPermissionRuleFactoryImpl.java | 62 + .../rule/dept/DeptDataPermissionRule.java | 205 + .../DeptDataPermissionRuleCustomizer.java | 20 + .../core/rule/dept/package-info.java | 6 + .../core/util/DataPermissionUtils.java | 63 + .../datapermission/package-info.java | 4 + ...ot.autoconfigure.AutoConfiguration.imports | 2 + .../win-spring-boot-starter-biz-ip/pom.xml | 47 + .../java/com/win/framework/ip/core/Area.java | 55 + .../framework/ip/core/enums/AreaTypeEnum.java | 39 + .../framework/ip/core/utils/AreaUtils.java | 214 + .../win/framework/ip/core/utils/IPUtils.java | 87 + .../com/win/framework/ip/package-info.java | 11 + .../src/main/resources/area.csv | 3662 +++++ .../src/main/resources/ip2region.xdb | Bin 0 -> 6428681 bytes .../pom.xml | 92 + .../tenant/config/TenantProperties.java | 42 + .../config/WinTenantAutoConfiguration.java | 144 + .../config/WinTenantRpcAutoConfiguration.java | 21 + .../tenant/core/aop/TenantIgnore.java | 18 + .../tenant/core/aop/TenantIgnoreAspect.java | 35 + .../core/context/TenantContextHolder.java | 69 + .../tenant/core/db/TenantBaseDO.java | 21 + .../core/db/TenantDatabaseInterceptor.java | 43 + .../framework/tenant/core/job/TenantJob.java | 14 + .../tenant/core/job/TenantJobAspect.java | 65 + .../TenantKafkaEnvironmentPostProcessor.java | 37 + .../kafka/TenantKafkaProducerInterceptor.java | 47 + .../rabbitmq/TenantRabbitMQInitializer.java | 23 + .../TenantRabbitMQMessagePostProcessor.java | 31 + .../redis/TenantRedisMessageInterceptor.java | 42 + .../TenantRocketMQConsumeMessageHook.java | 46 + .../rocketmq/TenantRocketMQInitializer.java | 53 + .../TenantRocketMQSendMessageHook.java | 36 + .../core/redis/TenantRedisCacheManager.java | 38 + .../core/rpc/TenantRequestInterceptor.java | 25 + .../security/TenantSecurityWebFilter.java | 117 + .../core/service/TenantFrameworkService.java | 26 + .../service/TenantFrameworkServiceImpl.java | 66 + .../tenant/core/util/TenantUtils.java | 93 + .../core/web/TenantContextWebFilter.java | 37 + .../win/framework/tenant/package-info.java | 17 + .../invocation/InvocableHandlerMethod.java | 275 + .../main/resources/META-INF/spring.factories | 2 + ...ot.autoconfigure.AutoConfiguration.imports | 2 + .../win-spring-boot-starter-env/pom.xml | 66 + .../config/EnvEnvironmentPostProcessor.java | 50 + .../framework/env/config/EnvProperties.java | 22 + .../config/WinEnvRpcAutoConfiguration.java | 46 + .../config/WinEnvWebAutoConfiguration.java | 32 + .../env/core/context/EnvContextHolder.java | 39 + .../env/core/fegin/EnvLoadBalancerClient.java | 83 + .../fegin/EnvLoadBalancerClientFactory.java | 30 + .../env/core/fegin/EnvRequestInterceptor.java | 24 + .../win/framework/env/core/package-info.java | 1 + .../win/framework/env/core/util/EnvUtils.java | 56 + .../framework/env/core/web/EnvWebFilter.java | 41 + .../com/win/framework/env/package-info.java | 7 + .../main/resources/META-INF/spring.factories | 2 + ...ot.autoconfigure.AutoConfiguration.imports | 2 + .../win-spring-boot-starter-excel/pom.xml | 75 + .../dict/config/WinDictAutoConfiguration.java | 18 + .../config/WinDictRpcAutoConfiguration.java | 15 + .../dict/core/DictFrameworkUtils.java | 96 + .../com/win/framework/dict/package-info.java | 6 + .../excel/core/annotations/DictFormat.java | 22 + .../core/annotations/ExcelColumnSelect.java | 27 + .../excel/core/convert/AreaConvert.java | 46 + .../excel/core/convert/DictConvert.java | 72 + .../excel/core/convert/JsonConvert.java | 34 + .../excel/core/convert/MoneyConvert.java | 39 + .../function/ExcelColumnSelectFunction.java | 28 + .../core/handler/SelectSheetWriteHandler.java | 165 + .../framework/excel/core/util/ExcelUtils.java | 53 + .../com/win/framework/excel/package-info.java | 4 + ...ot.autoconfigure.AutoConfiguration.imports | 2 + .../win-spring-boot-starter-job/pom.xml | 50 + .../config/WinAsyncAutoConfiguration.java | 37 + .../config/WinXxlJobAutoConfiguration.java | 47 + .../quartz/config/XxlJobProperties.java | 99 + .../win/framework/quartz/package-info.java | 5 + ...ot.autoconfigure.AutoConfiguration.imports | 2 + ...道 Spring Boot 定时任务入门》.md | 1 + ...道 Spring Boot 异步任务入门》.md | 1 + .../win-spring-boot-starter-monitor/pom.xml | 73 + .../tracer/config/TracerProperties.java | 14 + .../config/WinMetricsAutoConfiguration.java | 28 + .../config/WinTracerAutoConfiguration.java | 55 + .../tracer/core/annotation/BizTrace.java | 42 + .../tracer/core/aop/BizTraceAspect.java | 77 + .../tracer/core/filter/TraceFilter.java | 33 + .../core/util/TracerFrameworkUtils.java | 46 + .../win/framework/tracer/package-info.java | 6 + ...ot.autoconfigure.AutoConfiguration.imports | 2 + ...pring Boot 监控工具 Admin 入门》.md | 1 + ...ng Boot 监控端点 Actuator 入门》.md | 1 + ... Boot 链路追踪 SkyWalking 入门》.md | 1 + .../win-spring-boot-starter-mq/pom.xml | 43 + .../com/win/framework/mq/package-info.java | 4 + .../config/WinRabbitMQAutoConfiguration.java | 28 + .../mq/rabbitmq/core/package-info.java | 4 + .../framework/mq/rabbitmq/package-info.java | 4 + .../WinRedisMQConsumerAutoConfiguration.java | 151 + .../WinRedisMQProducerAutoConfiguration.java | 31 + .../mq/redis/core/RedisMQTemplate.java | 87 + .../interceptor/RedisMessageInterceptor.java | 26 + .../job/RedisPendingMessageResendJob.java | 100 + .../core/message/AbstractRedisMessage.java | 29 + .../pubsub/AbstractRedisChannelMessage.java | 23 + .../AbstractRedisChannelMessageListener.java | 103 + .../stream/AbstractRedisStreamMessage.java | 23 + .../AbstractRedisStreamMessageListener.java | 113 + .../win/framework/mq/redis/package-info.java | 6 + ...ot.autoconfigure.AutoConfiguration.imports | 3 + ...pring Boot 事件机制 Event 入门》.md | 1 + ...pring Boot 消息队列 Kafka 入门》.md | 1 + ...ng Boot 消息队列 RabbitMQ 入门》.md | 1 + ...ng Boot 消息队列 RocketMQ 入门》.md | 1 + .../win-spring-boot-starter-mybatis/pom.xml | 91 + .../WinDataSourceAutoConfiguration.java | 40 + .../datasource/core/enums/DataSourceEnum.java | 22 + .../core/filter/DruidAdRemoveFilter.java | 38 + .../framework/datasource/package-info.java | 5 + .../IdTypeEnvironmentPostProcessor.java | 108 + .../config/WinMybatisAutoConfiguration.java | 64 + .../mybatis/core/dataobject/BaseDO.java | 56 + .../mybatis/core/enums/SqlConstants.java | 21 + .../core/handler/DefaultDBFieldHandler.java | 62 + .../mybatis/core/mapper/BaseMapperX.java | 204 + .../core/query/LambdaQueryWrapperX.java | 135 + .../mybatis/core/query/MPJLambdaWrapperX.java | 313 + .../mybatis/core/query/QueryWrapperX.java | 166 + .../mybatis/core/type/EncryptTypeHandler.java | 75 + .../core/type/IntegerListTypeHandler.java | 56 + .../core/type/JsonLongSetTypeHandler.java | 31 + .../core/type/LongListTypeHandler.java | 57 + .../core/type/StringListTypeHandler.java | 58 + .../mybatis/core/util/JdbcUtils.java | 42 + .../mybatis/core/util/MyBatisUtils.java | 88 + .../win/framework/mybatis/package-info.java | 4 + .../config/WinTranslateAutoConfiguration.java | 18 + .../translate/core/TranslateUtils.java | 37 + .../win/framework/translate/package-info.java | 4 + .../main/resources/META-INF/spring.factories | 2 + ...ot.autoconfigure.AutoConfiguration.imports | 3 + ...《芋道 Spring Boot MyBatis 入门》.md | 1 + ...多数据源(读写分离)入门》.md | 1 + ...Spring Boot 数据库连接池入门》.md | 1 + .../pom.xml | 40 + .../config/WinIdempotentConfiguration.java | 46 + .../core/annotation/Idempotent.java | 63 + .../idempotent/core/aop/IdempotentAspect.java | 68 + .../keyresolver/IdempotentKeyResolver.java | 22 + .../impl/DefaultIdempotentKeyResolver.java | 25 + .../impl/ExpressionIdempotentKeyResolver.java | 64 + .../impl/UserIdempotentKeyResolver.java | 28 + .../core/redis/IdempotentRedisDAO.java | 41 + .../framework/idempotent/package-info.java | 12 + .../lock4j/config/WinLock4jConfiguration.java | 18 + .../core/DefaultLockFailureStrategy.java | 21 + .../lock4j/core/Lock4jRedisKeyConstants.java | 19 + .../win/framework/lock4j/package-info.java | 4 + .../config/WinRateLimiterConfiguration.java | 55 + .../core/annotation/RateLimiter.java | 62 + .../core/aop/RateLimiterAspect.java | 60 + .../keyresolver/RateLimiterKeyResolver.java | 22 + .../impl/ClientIpRateLimiterKeyResolver.java | 27 + .../impl/DefaultRateLimiterKeyResolver.java | 25 + .../ExpressionRateLimiterKeyResolver.java | 64 + .../ServerNodeRateLimiterKeyResolver.java | 27 + .../impl/UserRateLimiterKeyResolver.java | 28 + .../core/redis/RateLimiterRedisDAO.java | 60 + .../framework/ratelimiter/package-info.java | 4 + ...ot.autoconfigure.AutoConfiguration.imports | 3 + .../win-spring-boot-starter-redis/pom.xml | 41 + .../config/WinCacheAutoConfiguration.java | 82 + .../redis/config/WinCacheProperties.java | 27 + .../config/WinRedisAutoConfiguration.java | 45 + .../redis/core/TimeoutRedisCacheManager.java | 86 + .../com/win/framework/redis/package-info.java | 4 + ...ot.autoconfigure.AutoConfiguration.imports | 2 + .../《芋道 Spring Boot Cache 入门》.md | 1 + .../《芋道 Spring Boot Redis 入门》.md | 1 + .../win-spring-boot-starter-rpc/pom.xml | 46 + .../framework/rpc/config/package-info.java | 4 + .../win/framework/rpc/core/package-info.java | 4 + .../com/win/framework/rpc/package-info.java | 6 + ...ng Boot 声明式调用 Feign 入门》.md | 1 + ...g Cloud 声明式调用 Feign 入门》.md | 1 + .../win-spring-boot-starter-security/pom.xml | 85 + .../config/WinOperateLogConfiguration.java | 27 + .../WinOperateLogRpcAutoConfiguration.java | 15 + .../operatelog/core/package-info.java | 4 + .../core/service/LogRecordServiceImpl.java | 87 + .../framework/operatelog/package-info.java | 7 + .../config/AuthorizeRequestsCustomizer.java | 35 + .../security/config/SecurityProperties.java | 51 + .../config/WinSecurityAutoConfiguration.java | 104 + .../WinSecurityRpcAutoConfiguration.java | 25 + .../WinWebSecurityConfigurerAdapter.java | 208 + .../framework/security/core/LoginUser.java | 66 + .../core/annotations/PreAuthenticated.java | 17 + .../core/aop/PreAuthenticatedAspect.java | 25 + ...eadLocalSecurityContextHolderStrategy.java | 48 + .../filter/TokenAuthenticationFilter.java | 144 + .../core/handler/AccessDeniedHandlerImpl.java | 41 + .../handler/AuthenticationEntryPointImpl.java | 35 + .../core/rpc/LoginUserRequestInterceptor.java | 37 + .../service/SecurityFrameworkService.java | 59 + .../service/SecurityFrameworkServiceImpl.java | 101 + .../core/util/SecurityFrameworkUtils.java | 142 + .../win/framework/security/package-info.java | 7 + ...ot.autoconfigure.AutoConfiguration.imports | 5 + ... 安全框架 Spring Security 入门》.md | 2 + .../win-spring-boot-starter-web/pom.xml | 100 + .../config/WinApiLogAutoConfiguration.java | 61 + .../config/WinApiLogRpcAutoConfiguration.java | 18 + .../apilog/core/annotation/ApiAccessLog.java | 65 + .../apilog/core/enums/OperateTypeEnum.java | 51 + .../core/filter/ApiAccessLogFilter.java | 250 + .../interceptor/ApiAccessLogInterceptor.java | 67 + .../service/ApiAccessLogFrameworkService.java | 19 + .../ApiAccessLogFrameworkServiceImpl.java | 26 + .../service/ApiErrorLogFrameworkService.java | 19 + .../ApiErrorLogFrameworkServiceImpl.java | 26 + .../win/framework/apilog/package-info.java | 8 + .../config/WinBannerAutoConfiguration.java | 20 + .../banner/core/BannerApplicationRunner.java | 50 + .../win/framework/banner/package-info.java | 6 + .../core/base/annotation/DesensitizeBy.java | 32 + .../base/handler/DesensitizationHandler.java | 21 + .../StringDesensitizeSerializer.java | 92 + .../regex/annotation/EmailDesensitize.java | 36 + .../regex/annotation/RegexDesensitize.java | 38 + .../AbstractRegexDesensitizationHandler.java | 38 + .../DefaultRegexDesensitizationHandler.java | 21 + .../handler/EmailDesensitizationHandler.java | 22 + .../annotation/BankCardDesensitize.java | 40 + .../annotation/CarLicenseDesensitize.java | 40 + .../annotation/ChineseNameDesensitize.java | 40 + .../annotation/FixedPhoneDesensitize.java | 40 + .../slider/annotation/IdCardDesensitize.java | 40 + .../slider/annotation/MobileDesensitize.java | 40 + .../annotation/PasswordDesensitize.java | 42 + .../slider/annotation/SliderDesensitize.java | 43 + .../AbstractSliderDesensitizationHandler.java | 78 + .../handler/BankCardDesensitization.java | 27 + .../handler/CarLicenseDesensitization.java | 25 + .../handler/ChineseNameDesensitization.java | 27 + .../DefaultDesensitizationHandler.java | 25 + .../handler/FixedPhoneDesensitization.java | 25 + .../slider/handler/IdCardDesensitization.java | 25 + .../slider/handler/MobileDesensitization.java | 26 + .../handler/PasswordDesensitization.java | 25 + .../framework/desensitize/package-info.java | 4 + .../config/WinJacksonAutoConfiguration.java | 52 + .../core/databind/NumberSerializer.java | 37 + .../TimestampLocalDateTimeDeserializer.java | 27 + .../TimestampLocalDateTimeSerializer.java | 26 + .../framework/jackson/core/package-info.java | 1 + .../java/com/win/framework/package-info.java | 4 + .../swagger/config/SwaggerProperties.java | 60 + .../config/WinSwaggerAutoConfiguration.java | 161 + .../win/framework/swagger/package-info.java | 6 + .../framework/web/config/WebProperties.java | 66 + .../web/config/WinWebAutoConfiguration.java | 131 + .../web/core/filter/ApiRequestFilter.java | 27 + .../core/filter/CacheRequestBodyFilter.java | 31 + .../core/filter/CacheRequestBodyWrapper.java | 68 + .../framework/web/core/filter/DemoFilter.java | 35 + .../core/handler/GlobalExceptionHandler.java | 334 + .../handler/GlobalResponseBodyHandler.java | 45 + .../web/core/util/WebFrameworkUtils.java | 169 + .../com/win/framework/web/package-info.java | 4 + .../xss/config/WinXssAutoConfiguration.java | 63 + .../framework/xss/config/XssProperties.java | 29 + .../xss/core/clean/JsoupXssCleaner.java | 64 + .../framework/xss/core/clean/XssCleaner.java | 16 + .../framework/xss/core/filter/XssFilter.java | 52 + .../xss/core/filter/XssRequestWrapper.java | 92 + .../core/json/XssStringJsonDeserializer.java | 82 + .../com/win/framework/xss/package-info.java | 6 + ...ot.autoconfigure.AutoConfiguration.imports | 6 + .../src/main/resources/banner.txt | 17 + ...Boot API 接口文档 Swagger 入门》.md | 1 + ...芋道 Spring Boot SpringMVC 入门》.md | 1 + .../win-spring-boot-starter-websocket/pom.xml | 73 + .../websocket/config/WebSocketProperties.java | 34 + .../config/WinWebSocketAutoConfiguration.java | 177 + .../handler/JsonWebSocketMessageHandler.java | 83 + .../listener/WebSocketMessageListener.java | 31 + .../core/message/JsonWebSocketMessage.java | 29 + .../LoginUserHandshakeInterceptor.java | 42 + .../WebSocketAuthorizeRequestsCustomizer.java | 24 + .../AbstractWebSocketMessageSender.java | 104 + .../core/sender/WebSocketMessageSender.java | 52 + .../sender/kafka/KafkaWebSocketMessage.java | 35 + .../kafka/KafkaWebSocketMessageConsumer.java | 28 + .../kafka/KafkaWebSocketMessageSender.java | 67 + .../local/LocalWebSocketMessageSender.java | 20 + .../rabbitmq/RabbitMQWebSocketMessage.java | 37 + .../RabbitMQWebSocketMessageConsumer.java | 39 + .../RabbitMQWebSocketMessageSender.java | 62 + .../sender/redis/RedisWebSocketMessage.java | 34 + .../redis/RedisWebSocketMessageConsumer.java | 23 + .../redis/RedisWebSocketMessageSender.java | 57 + .../rocketmq/RocketMQWebSocketMessage.java | 35 + .../RocketMQWebSocketMessageConsumer.java | 30 + .../RocketMQWebSocketMessageSender.java | 61 + .../WebSocketSessionHandlerDecorator.java | 49 + .../core/session/WebSocketSessionManager.java | 53 + .../session/WebSocketSessionManagerImpl.java | 125 + .../core/util/WebSocketFrameworkUtils.java | 67 + .../win/framework/websocket/package-info.java | 4 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + ...芋道 Spring Boot WebSocket 入门》.md | 1 + win-gateway/Dockerfile | 19 + win-gateway/pom.xml | 101 + .../win/gateway/GatewayServerApplication.java | 14 + .../win/gateway/filter/cors/CorsFilter.java | 48 + .../filter/cors/CorsResponseHeaderFilter.java | 45 + .../gateway/filter/grey/GrayLoadBalancer.java | 111 + .../GrayReactiveLoadBalancerClientFilter.java | 138 + .../win/gateway/filter/logging/AccessLog.java | 92 + .../filter/logging/AccessLogFilter.java | 263 + .../gateway/filter/security/LoginUser.java | 39 + .../security/TokenAuthenticationFilter.java | 164 + .../handler/GlobalExceptionHandler.java | 74 + .../gateway/route/dynamic/package-info.java | 10 + .../com/win/gateway/route/package-info.java | 4 + .../gateway/util/BannerApplicationRunner.java | 51 + .../java/com/win/gateway/util/EnvUtils.java | 39 + .../gateway/util/SecurityFrameworkUtils.java | 118 + .../win/gateway/util/WebFrameworkUtils.java | 116 + .../src/main/resources/application-local.yaml | 0 .../src/main/resources/application.yaml | 107 + win-gateway/src/main/resources/banner.txt | 17 + .../src/main/resources/bootstrap-local.yaml | 21 + win-gateway/src/main/resources/bootstrap.yaml | 14 + .../src/main/resources/logback-spring.xml | 76 + .../src/main/resources/static/favicon.ico | Bin 0 -> 3708 bytes .../src/test/java/com/win/ProjectReactor.java | 147 + win-module-bpm/pom.xml | 27 + win-module-bpm/win-module-bpm-api/pom.xml | 47 + .../com/win/module/bpm/api/package-info.java | 4 + .../bpm/api/task/BpmProcessInstanceApi.java | 28 + .../dto/BpmProcessInstanceCreateReqDTO.java | 36 + .../win/module/bpm/enums/ApiConstants.java | 23 + .../module/bpm/enums/DictTypeConstants.java | 13 + .../module/bpm/enums/ErrorCodeConstants.java | 78 + .../definition/BpmModelFormTypeEnum.java | 32 + .../definition/BpmProcessListenerType.java | 21 + .../BpmProcessListenerValueType.java | 22 + .../bpm/enums/message/BpmMessageEnum.java | 26 + .../bpm/enums/task/BpmCommentTypeEnum.java | 46 + .../bpm/enums/task/BpmDeleteReasonEnum.java | 45 + .../task/BpmProcessInstanceStatusEnum.java | 39 + .../bpm/enums/task/BpmTaskSignTypeEnum.java | 47 + .../bpm/enums/task/BpmTaskStatusEnum.java | 61 + .../event/BpmProcessInstanceStatusEvent.java | 41 + ...BpmProcessInstanceStatusEventListener.java | 34 + win-module-bpm/win-module-bpm-biz/Dockerfile | 19 + win-module-bpm/win-module-bpm-biz/pom.xml | 139 + .../win/module/bpm/BpmServerApplication.java | 30 + .../com/win/module/bpm/api/package-info.java | 4 + .../api/task/BpmProcessInstanceApiImpl.java | 32 + .../definition/BpmCategoryController.java | 86 + .../admin/definition/BpmFormController.java | 83 + .../admin/definition/BpmModelController.java | 148 + .../BpmProcessDefinitionController.java | 114 + .../BpmProcessExpressionController.java | 73 + .../BpmProcessListenerController.java | 73 + .../definition/BpmUserGroupController.java | 83 + .../vo/category/BpmCategoryPageReqVO.java | 32 + .../vo/category/BpmCategoryRespVO.java | 33 + .../vo/category/BpmCategorySaveReqVO.java | 37 + .../BpmProcessExpressionPageReqVO.java | 33 + .../BpmProcessExpressionRespVO.java | 30 + .../BpmProcessExpressionSaveReqVO.java | 27 + .../definition/vo/form/BpmFormPageReqVO.java | 14 + .../definition/vo/form/BpmFormRespVO.java | 39 + .../definition/vo/form/BpmFormSaveReqVO.java | 35 + .../vo/group/BpmUserGroupPageReqVO.java | 28 + .../vo/group/BpmUserGroupRespVO.java | 31 + .../vo/group/BpmUserGroupSaveReqVO.java | 31 + .../listener/BpmProcessListenerPageReqVO.java | 30 + .../vo/listener/BpmProcessListenerRespVO.java | 36 + .../listener/BpmProcessListenerSaveReqVO.java | 39 + .../vo/model/BpmModeImportReqVO.java | 16 + .../vo/model/BpmModelCreateReqVO.java | 22 + .../vo/model/BpmModelPageReqVO.java | 21 + .../definition/vo/model/BpmModelRespVO.java | 57 + .../vo/model/BpmModelUpdateReqVO.java | 46 + .../vo/model/BpmModelUpdateStateReqVO.java | 19 + .../BpmProcessDefinitionPageReqVO.java | 14 + .../process/BpmProcessDefinitionRespVO.java | 77 + .../admin/oa/BpmOALeaveController.http | 12 + .../admin/oa/BpmOALeaveController.java | 62 + .../bpm/controller/admin/oa/package-info.java | 5 + .../admin/oa/vo/BpmOALeaveCreateReqVO.java | 43 + .../admin/oa/vo/BpmOALeavePageReqVO.java | 29 + .../admin/oa/vo/BpmOALeaveRespVO.java | 36 + .../admin/task/BpmActivityController.java | 39 + .../task/BpmProcessInstanceController.java | 163 + .../BpmProcessInstanceCopyController.java | 79 + .../admin/task/BpmTaskController.java | 224 + .../task/vo/activity/BpmActivityRespVO.java | 25 + .../vo/cc/BpmProcessInstanceCopyRespVO.java | 40 + .../BpmProcessInstanceCancelReqVO.java | 19 + .../BpmProcessInstanceCopyPageReqVO.java | 23 + .../BpmProcessInstanceCreateReqVO.java | 24 + .../instance/BpmProcessInstancePageReqVO.java | 38 + .../vo/instance/BpmProcessInstanceRespVO.java | 89 + .../task/vo/task/BpmTaskApproveReqVO.java | 28 + .../task/vo/task/BpmTaskDelegateReqVO.java | 24 + .../admin/task/vo/task/BpmTaskPageReqVO.java | 22 + .../task/vo/task/BpmTaskRejectReqVO.java | 19 + .../admin/task/vo/task/BpmTaskRespVO.java | 94 + .../task/vo/task/BpmTaskReturnReqVO.java | 23 + .../task/vo/task/BpmTaskSignCreateReqVO.java | 29 + .../task/vo/task/BpmTaskSignDeleteReqVO.java | 19 + .../task/vo/task/BpmTaskTransferReqVO.java | 24 + .../bpm/controller/app/package-info.java | 4 + .../module/bpm/controller/package-info.java | 6 + .../convert/definition/BpmModelConvert.java | 137 + .../BpmProcessDefinitionConvert.java | 98 + .../convert/message/BpmMessageConvert.java | 21 + .../win/module/bpm/convert/package-info.java | 6 + .../bpm/convert/task/BpmActivityConvert.java | 30 + .../task/BpmProcessInstanceConvert.java | 116 + .../bpm/convert/task/BpmTaskConvert.java | 176 + ...g Boot 对象转换 MapStruct 入门》.md | 1 + .../dataobject/definition/BpmCategoryDO.java | 53 + .../dal/dataobject/definition/BpmFormDO.java | 58 + .../BpmProcessDefinitionInfoDO.java | 95 + .../definition/BpmProcessExpressionDO.java | 44 + .../definition/BpmProcessListenerDO.java | 70 + .../dataobject/definition/BpmUserGroupDO.java | 53 + .../bpm/dal/dataobject/oa/BpmOALeaveDO.java | 75 + .../task/BpmProcessInstanceCopyDO.java | 75 + .../dal/mysql/category/BpmCategoryMapper.java | 46 + .../dal/mysql/definition/BpmFormMapper.java | 25 + .../BpmProcessDefinitionInfoMapper.java | 21 + .../BpmProcessExpressionMapper.java | 26 + .../definition/BpmProcessListenerMapper.java | 27 + .../mysql/definition/BpmUserGroupMapper.java | 32 + .../bpm/dal/mysql/oa/BpmOALeaveMapper.java | 29 + .../task/BpmProcessInstanceCopyMapper.java | 21 + .../config/BpmFlowableConfiguration.java | 91 + .../behavior/BpmActivityBehaviorFactory.java | 44 + .../BpmParallelMultiInstanceBehavior.java | 56 + .../BpmSequentialMultiInstanceBehavior.java | 50 + .../behavior/BpmUserTaskActivityBehavior.java | 67 + .../candidate/BpmTaskCandidateInvoker.java | 119 + .../candidate/BpmTaskCandidateStrategy.java | 48 + .../BpmTaskAssignLeaderExpression.java | 77 + .../BpmTaskAssignStartUserExpression.java | 36 + .../BpmTaskCandidateDeptLeaderStrategy.java | 46 + .../BpmTaskCandidateDeptMemberStrategy.java | 49 + .../BpmTaskCandidateExpressionStrategy.java | 36 + .../BpmTaskCandidateGroupStrategy.java | 47 + .../BpmTaskCandidatePostStrategy.java | 49 + .../BpmTaskCandidateRoleStrategy.java | 44 + ...mTaskCandidateStartUserSelectStrategy.java | 76 + .../BpmTaskCandidateUserStrategy.java | 39 + .../flowable/core/enums/BpmConstants.java | 40 + .../enums/BpmTaskCandidateStrategyEnum.java | 41 + .../core/enums/BpmnModelConstants.java | 26 + .../BpmProcessInstanceEventPublisher.java | 24 + .../BpmProcessInstanceEventListener.java | 47 + .../core/listener/BpmTaskEventListener.java | 75 + .../DemoDelegateClassExecutionListener.java | 21 + ...moDelegateExpressionExecutionListener.java | 23 + ...DemoSpringExpressionExecutionListener.java | 21 + .../task/DemoDelegateClassTaskListener.java | 20 + .../DemoDelegateExpressionTaskListener.java | 22 + .../DemoSpringExpressionTaskListener.java | 20 + .../flowable/core/util/BpmnModelUtils.java | 332 + .../flowable/core/util/FlowableUtils.java | 180 + .../module/bpm/framework/package-info.java | 6 + .../rpc/config/RpcConfiguration.java | 15 + .../bpm/framework/rpc/package-info.java | 4 + .../config/SecurityConfiguration.java | 36 + .../framework/security/core/package-info.java | 4 + .../web/config/BpmWebConfiguration.java | 30 + .../framework/web/core/FlowableWebFilter.java | 36 + .../bpm/framework/web/package-info.java | 4 + .../java/com/win/module/bpm/package-info.java | 12 + .../definition/BpmCategoryService.java | 85 + .../definition/BpmCategoryServiceImpl.java | 111 + .../service/definition/BpmFormService.java | 85 + .../definition/BpmFormServiceImpl.java | 114 + .../service/definition/BpmModelService.java | 88 + .../definition/BpmModelServiceImpl.java | 278 + .../BpmProcessDefinitionService.java | 162 + .../BpmProcessDefinitionServiceImpl.java | 202 + .../BpmProcessExpressionService.java | 54 + .../BpmProcessExpressionServiceImpl.java | 70 + .../definition/BpmProcessListenerService.java | 54 + .../BpmProcessListenerServiceImpl.java | 102 + .../definition/BpmUserGroupService.java | 82 + .../definition/BpmUserGroupServiceImpl.java | 107 + .../definition/dto/BpmFormFieldRespDTO.java | 25 + .../dto/BpmModelMetaInfoRespDTO.java | 46 + .../dto/BpmProcessDefinitionCreateReqDTO.java | 81 + .../service/message/BpmMessageService.java | 38 + .../message/BpmMessageServiceImpl.java | 68 + ...eSendWhenProcessInstanceApproveReqDTO.java | 26 + ...geSendWhenProcessInstanceRejectReqDTO.java | 32 + .../BpmMessageSendWhenTaskCreatedReqDTO.java | 45 + .../bpm/service/oa/BpmOALeaveService.java | 52 + .../bpm/service/oa/BpmOALeaveServiceImpl.java | 89 + .../oa/listener/BpmOALeaveStatusListener.java | 31 + .../bpm/service/task/BpmActivityService.java | 31 + .../service/task/BpmActivityServiceImpl.java | 40 + .../task/BpmProcessInstanceCopyService.java | 34 + .../BpmProcessInstanceCopyServiceImpl.java | 83 + .../task/BpmProcessInstanceService.java | 144 + .../task/BpmProcessInstanceServiceImpl.java | 1 + .../bpm/service/task/BpmTaskService.java | 186 + .../bpm/service/task/BpmTaskServiceImpl.java | 822 ++ .../src/main/resources/application-dev.yaml | 101 + .../src/main/resources/application-local.yaml | 201 + .../src/main/resources/application.yaml | 123 + .../src/main/resources/bootstrap-local.yaml | 23 + .../src/main/resources/bootstrap.yaml | 14 + .../src/main/resources/i18n/bpm.properties | 1 + .../main/resources/i18n/bpm_en_US.properties | 0 .../main/resources/i18n/bpm_zh_CN.properties | 0 .../src/main/resources/logback-spring.xml | 76 + win-module-infra/pom.xml | 25 + win-module-infra/win-module-infra-api/pom.xml | 47 + .../win/module/infra/api/file/FileApi.java | 60 + .../infra/api/file/dto/FileCreateReqDTO.java | 22 + .../infra/api/logger/ApiAccessLogApi.java | 24 + .../infra/api/logger/ApiErrorLogApi.java | 24 + .../logger/dto/ApiAccessLogCreateReqDTO.java | 63 + .../logger/dto/ApiErrorLogCreateReqDTO.java | 68 + .../win/module/infra/api/package-info.java | 4 + .../api/websocket/WebSocketSenderApi.java | 74 + .../websocket/dto/WebSocketSendReqDTO.java | 26 + .../win/module/infra/enums/ApiConstants.java | 23 + .../module/infra/enums/DictTypeConstants.java | 20 + .../infra/enums/ErrorCodeConstants.java | 61 + .../win-module-infra-biz/Dockerfile | 19 + win-module-infra/win-module-infra-biz/pom.xml | 167 + .../module/infra/InfraServerApplication.java | 30 + .../module/infra/api/file/FileApiImpl.java | 26 + .../infra/api/logger/ApiAccessLogApiImpl.java | 26 + .../infra/api/logger/ApiErrorLogApiImpl.java | 26 + .../win/module/infra/api/package-info.java | 1 + .../api/websocket/WebSocketSenderApiImpl.java | 36 + .../admin/codegen/CodegenController.java | 151 + .../codegen/vo/CodegenCreateListReqVO.java | 21 + .../admin/codegen/vo/CodegenDetailRespVO.java | 20 + .../codegen/vo/CodegenPreviewRespVO.java | 16 + .../admin/codegen/vo/CodegenUpdateReqVO.java | 24 + .../vo/column/CodegenColumnRespVO.java | 69 + .../vo/column/CodegenColumnSaveReqVO.java | 81 + .../vo/table/CodegenTablePageReqVO.java | 33 + .../codegen/vo/table/CodegenTableRespVO.java | 72 + .../vo/table/CodegenTableSaveReqVO.java | 100 + .../codegen/vo/table/DatabaseTableRespVO.java | 16 + .../admin/config/ConfigController.java | 108 + .../admin/config/vo/ConfigPageReqVO.java | 33 + .../admin/config/vo/ConfigRespVO.java | 56 + .../admin/config/vo/ConfigSaveReqVO.java | 45 + .../admin/db/DataSourceConfigController.java | 72 + .../admin/db/vo/DataSourceConfigRespVO.java | 27 + .../db/vo/DataSourceConfigSaveReqVO.java | 31 + .../demo/demo01/Demo01ContactController.java | 93 + .../demo01/vo/Demo01ContactPageReqVO.java | 30 + .../demo/demo01/vo/Demo01ContactRespVO.java | 46 + .../demo01/vo/Demo01ContactSaveReqVO.java | 36 + .../demo/demo02/Demo02CategoryController.java | 90 + .../demo02/vo/Demo02CategoryListReqVO.java | 25 + .../demo/demo02/vo/Demo02CategoryRespVO.java | 31 + .../demo02/vo/Demo02CategorySaveReqVO.java | 24 + .../demo/demo03/Demo03StudentController.java | 197 + .../admin/demo/demo03/package-info.java | 1 + .../demo03/vo/Demo03StudentPageReqVO.java | 33 + .../demo/demo03/vo/Demo03StudentRespVO.java | 42 + .../demo03/vo/Demo03StudentSaveReqVO.java | 41 + .../controller/admin/demo/package-info.java | 8 + .../admin/file/FileConfigController.http | 45 + .../admin/file/FileConfigController.java | 88 + .../controller/admin/file/FileController.java | 102 + .../file/vo/config/FileConfigPageReqVO.java | 30 + .../file/vo/config/FileConfigRespVO.java | 34 + .../file/vo/config/FileConfigSaveReqVO.java | 31 + .../admin/file/vo/file/FileCreateReqVO.java | 33 + .../admin/file/vo/file/FilePageReqVO.java | 30 + .../file/vo/file/FilePresignedUrlRespVO.java | 29 + .../admin/file/vo/file/FileRespVO.java | 36 + .../admin/file/vo/file/FileUploadReqVO.java | 20 + .../controller/admin/job/JobController.java | 27 + .../admin/logger/ApiAccessLogController.java | 60 + .../admin/logger/ApiErrorLogController.java | 74 + .../apiaccesslog/ApiAccessLogPageReqVO.java | 42 + .../vo/apiaccesslog/ApiAccessLogRespVO.java | 99 + .../vo/apierrorlog/ApiErrorLogPageReqVO.java | 39 + .../vo/apierrorlog/ApiErrorLogRespVO.java | 112 + .../admin/redis/RedisController.http | 4 + .../admin/redis/RedisController.java | 43 + .../admin/redis/vo/RedisMonitorRespVO.java | 43 + .../app/file/AppFileController.java | 38 + .../app/file/vo/AppFileUploadReqVO.java | 20 + .../infra/controller/app/package-info.java | 4 + .../module/infra/controller/package-info.java | 6 + .../infra/convert/codegen/CodegenConvert.java | 68 + .../infra/convert/config/ConfigConvert.java | 28 + .../infra/convert/file/FileConfigConvert.java | 22 + .../module/infra/convert/package-info.java | 6 + .../infra/convert/redis/RedisConvert.java | 29 + ...g Boot 对象转换 MapStruct 入门》.md | 1 + .../dataobject/codegen/CodegenColumnDO.java | 136 + .../dataobject/codegen/CodegenTableDO.java | 158 + .../infra/dal/dataobject/config/ConfigDO.java | 64 + .../dal/dataobject/db/DataSourceConfigDO.java | 48 + .../demo/demo01/Demo01ContactDO.java | 54 + .../demo/demo02/Demo02CategoryDO.java | 40 + .../demo/demo03/Demo03CourseDO.java | 42 + .../dataobject/demo/demo03/Demo03GradeDO.java | 42 + .../demo/demo03/Demo03StudentDO.java | 50 + .../dal/dataobject/file/FileConfigDO.java | 101 + .../dal/dataobject/file/FileContentDO.java | 48 + .../infra/dal/dataobject/file/FileDO.java | 55 + .../dal/dataobject/logger/ApiAccessLogDO.java | 130 + .../dal/dataobject/logger/ApiErrorLogDO.java | 156 + .../mysql/codegen/CodegenColumnMapper.java | 24 + .../dal/mysql/codegen/CodegenTableMapper.java | 39 + .../infra/dal/mysql/config/ConfigMapper.java | 25 + .../dal/mysql/db/DataSourceConfigMapper.java | 14 + .../demo/demo01/Demo01ContactMapper.java | 26 + .../demo/demo02/Demo02CategoryMapper.java | 35 + .../mysql/demo/demo03/Demo03CourseMapper.java | 34 + .../mysql/demo/demo03/Demo03GradeMapper.java | 32 + .../demo/demo03/Demo03StudentMapper.java | 27 + .../dal/mysql/file/FileConfigMapper.java | 25 + .../dal/mysql/file/FileContentMapper.java | 25 + .../infra/dal/mysql/file/FileMapper.java | 26 + .../dal/mysql/logger/ApiAccessLogMapper.java | 45 + .../dal/mysql/logger/ApiErrorLogMapper.java | 44 + .../codegen/CodegenColumnHtmlTypeEnum.java | 29 + .../CodegenColumnListConditionEnum.java | 27 + .../enums/codegen/CodegenFrontTypeEnum.java | 26 + .../infra/enums/codegen/CodegenSceneEnum.java | 41 + .../codegen/CodegenTemplateTypeEnum.java | 53 + .../infra/enums/config/ConfigTypeEnum.java | 21 + .../logger/ApiErrorLogProcessStatusEnum.java | 28 + .../win/module/infra/enums/package-info.java | 4 + .../codegen/config/CodegenConfiguration.java | 9 + .../codegen/config/CodegenProperties.java | 37 + .../infra/framework/codegen/package-info.java | 4 + .../file/config/WinFileAutoConfiguration.java | 21 + .../file/core/client/AbstractFileClient.java | 69 + .../file/core/client/FileClient.java | 55 + .../file/core/client/FileClientConfig.java | 16 + .../file/core/client/FileClientFactory.java | 24 + .../core/client/FileClientFactoryImpl.java | 56 + .../file/core/client/db/DBFileClient.java | 55 + .../core/client/db/DBFileClientConfig.java | 23 + .../file/core/client/ftp/FtpFileClient.java | 77 + .../core/client/ftp/FtpFileClientConfig.java | 58 + .../core/client/local/LocalFileClient.java | 52 + .../client/local/LocalFileClientConfig.java | 29 + .../client/s3/FilePresignedUrlRespDTO.java | 29 + .../file/core/client/s3/S3FileClient.java | 131 + .../core/client/s3/S3FileClientConfig.java | 76 + .../file/core/client/sftp/SftpFileClient.java | 61 + .../client/sftp/SftpFileClientConfig.java | 51 + .../file/core/enums/FileStorageEnum.java | 55 + .../file/core/utils/FileTypeUtils.java | 76 + .../infra/framework/file/package-info.java | 12 + .../config/AdminServerConfiguration.java | 9 + .../infra/framework/monitor/package-info.java | 4 + ...pring Boot 监控工具 Admin 入门》.md | 1 + .../module/infra/framework/package-info.java | 6 + .../rpc/config/RpcConfiguration.java | 10 + .../infra/framework/rpc/package-info.java | 4 + .../config/SecurityConfiguration.java | 48 + .../framework/security/core/package-info.java | 4 + .../infra/job/logger/AccessLogCleanJob.java | 40 + .../infra/job/logger/ErrorLogCleanJob.java | 40 + .../win/module/infra/job/package-info.java | 4 + .../infra/mq/consumer/package-info.java | 4 + .../module/infra/mq/message/package-info.java | 4 + .../infra/mq/producer/package-info.java | 4 + .../com/win/module/infra/package-info.java | 9 + .../infra/service/codegen/CodegenService.java | 101 + .../service/codegen/CodegenServiceImpl.java | 288 + .../service/codegen/inner/CodegenBuilder.java | 221 + .../service/codegen/inner/CodegenEngine.java | 518 + .../infra/service/config/ConfigService.java | 63 + .../service/config/ConfigServiceImpl.java | 109 + .../service/db/DataSourceConfigService.java | 53 + .../db/DataSourceConfigServiceImpl.java | 106 + .../service/db/DatabaseTableService.java | 33 + .../service/db/DatabaseTableServiceImpl.java | 80 + .../demo/demo01/Demo01ContactService.java | 55 + .../demo/demo01/Demo01ContactServiceImpl.java | 71 + .../demo/demo02/Demo02CategoryService.java | 55 + .../demo02/Demo02CategoryServiceImpl.java | 134 + .../demo/demo03/Demo03StudentService.java | 158 + .../demo/demo03/Demo03StudentServiceImpl.java | 217 + .../infra/service/file/FileConfigService.java | 86 + .../service/file/FileConfigServiceImpl.java | 189 + .../infra/service/file/FileService.java | 66 + .../infra/service/file/FileServiceImpl.java | 116 + .../service/logger/ApiAccessLogService.java | 38 + .../logger/ApiAccessLogServiceImpl.java | 57 + .../service/logger/ApiErrorLogService.java | 47 + .../logger/ApiErrorLogServiceImpl.java | 77 + .../DemoWebSocketMessageListener.java | 48 + .../websocket/message/DemoReceiveMessage.java | 27 + .../websocket/message/DemoSendMessage.java | 24 + .../src/main/resources/application.yaml | 162 + .../src/main/resources/bootstrap-local.yaml | 23 + .../src/main/resources/bootstrap.yaml | 14 + .../codegen/java/controller/controller.vm | 233 + .../codegen/java/controller/vo/listReqVO.vm | 45 + .../codegen/java/controller/vo/pageReqVO.vm | 47 + .../codegen/java/controller/vo/respVO.vm | 54 + .../codegen/java/controller/vo/saveReqVO.vm | 64 + .../src/main/resources/codegen/java/dal/do.vm | 52 + .../main/resources/codegen/java/dal/do_sub.vm | 49 + .../main/resources/codegen/java/dal/mapper.vm | 82 + .../resources/codegen/java/dal/mapper.xml.vm | 12 + .../resources/codegen/java/dal/mapper_sub.vm | 51 + .../resources/codegen/java/enums/errorcode.vm | 22 + .../resources/codegen/java/service/service.vm | 147 + .../codegen/java/service/serviceImpl.vm | 350 + .../codegen/java/test/serviceTest.vm | 168 + .../src/main/resources/codegen/sql/h2.vm | 37 + .../src/main/resources/codegen/sql/sql.vm | 28 + .../main/resources/codegen/vue/api/api.js.vm | 141 + .../vue/views/components/form_sub_erp.vue.vm | 205 + .../views/components/form_sub_inner.vue.vm | 2 + .../views/components/form_sub_normal.vue.vm | 347 + .../vue/views/components/list_sub_erp.vue.vm | 165 + .../views/components/list_sub_inner.vue.vm | 4 + .../resources/codegen/vue/views/form.vue.vm | 320 + .../resources/codegen/vue/views/index.vue.vm | 340 + .../main/resources/codegen/vue3/api/api.ts.vm | 115 + .../vue3/views/components/form_sub_erp.vue.vm | 205 + .../views/components/form_sub_inner.vue.vm | 2 + .../views/components/form_sub_normal.vue.vm | 362 + .../vue3/views/components/list_sub_erp.vue.vm | 184 + .../views/components/list_sub_inner.vue.vm | 4 + .../resources/codegen/vue3/views/form.vue.vm | 301 + .../resources/codegen/vue3/views/index.vue.vm | 374 + .../codegen/vue3_schema/api/api.ts.vm | 46 + .../codegen/vue3_schema/views/data.ts.vm | 124 + .../codegen/vue3_schema/views/form.vue.vm | 65 + .../codegen/vue3_schema/views/index.vue.vm | 85 + .../resources/codegen/vue3_vben/api/api.ts.vm | 32 + .../codegen/vue3_vben/views/data.ts.vm | 236 + .../codegen/vue3_vben/views/form.vue.vm | 58 + .../codegen/vue3_vben/views/index.vue.vm | 91 + .../src/main/resources/file/erweima.jpg | Bin 0 -> 18385 bytes .../src/main/resources/logback-spring.xml | 76 + win-module-mes/pom.xml | 24 + win-module-mes/win-module-mes-api/pom.xml | 48 + .../com/win/module/mes/api/package-info.java | 4 + .../win/module/mes/enums/ApiConstants.java | 23 + .../module/mes/enums/DictTypeConstants.java | 34 + .../module/mes/enums/ErrorCodeConstants.java | 184 + .../module/mes/enums/LogRecordConstants.java | 12 + win-module-mes/win-module-mes-biz/Dockerfile | 19 + win-module-mes/win-module-mes-biz/pom.xml | 218 + .../win/module/mes/MesServerApplication.java | 11 + .../admin/demo/DemoGenController.java | 98 + .../admin/demo/vo/DemoGenPageReqVO.java | 34 + .../admin/demo/vo/DemoGenRespVO.java | 40 + .../admin/demo/vo/DemoGenSaveReqVO.java | 33 + .../SchedulingcalendarController.java | 217 + .../vo/SchedulingcalendarBaseVO.java | 61 + .../vo/SchedulingcalendarCreateReqVO.java | 24 + .../vo/SchedulingcalendarExcelVO.java | 60 + .../vo/SchedulingcalendarExportReqVO.java | 57 + .../vo/SchedulingcalendarPageReqVO.java | 59 + .../vo/SchedulingcalendarRespVO.java | 15 + .../vo/SchedulingcalendarUpdateReqVO.java | 18 + .../SchedulingcalendarConvert.java | 38 + .../mes/dal/dataobject/demo/DemoGenDO.java | 48 + .../SchedulingcalendarDO.java | 99 + .../mes/dal/mysql/demo/DemoGenMapper.java | 31 + .../SchedulingcalendarMapper.java | 67 + .../config/DataPermissionConfiguration.java | 34 + .../framework/config/MesConfiguration.java | 18 + .../rpc/config/RpcConfiguration.java | 10 + .../mes/framework/rpc/package-info.java | 4 + .../rule/CustomDataPermissionRule.java | 40 + .../config/SecurityConfiguration.java | 41 + .../framework/security/core/package-info.java | 4 + .../mes/service/demo/DemoGenService.java | 55 + .../mes/service/demo/DemoGenServiceImpl.java | 75 + .../SchedulingcalendarService.java | 87 + .../SchedulingcalendarServiceImpl.java | 131 + .../src/main/resources/application-local.yaml | 197 + .../src/main/resources/application-test.yaml | 196 + .../src/main/resources/application.yaml | 168 + .../src/main/resources/bootstrap-local.yaml | 23 + .../src/main/resources/bootstrap-test.yaml | 23 + .../src/main/resources/bootstrap.yaml | 13 + .../src/main/resources/demo/DemoGenMapper.xml | 12 + .../SchedulingcalendarMapper.xml | 22 + win-module-report/pom.xml | 23 + .../win-module-report-api/pom.xml | 26 + .../win/module/report/api/package-info.java | 4 + .../report/enums/ErrorCodeConstants.java | 15 + .../win-module-report-biz/Dockerfile | 19 + .../win-module-report-biz/pom.xml | 144 + .../report/ReportServerApplication.java | 30 + .../admin/ajreport/package-info.java | 1 + .../admin/goview/GoViewDataController.java | 63 + .../admin/goview/GoViewProjectController.java | 76 + .../vo/data/GoViewDataGetBySqlReqVO.java | 16 + .../goview/vo/data/GoViewDataRespVO.java | 19 + .../vo/project/GoViewProjectCreateReqVO.java | 15 + .../vo/project/GoViewProjectRespVO.java | 36 + .../vo/project/GoViewProjectUpdateReqVO.java | 34 + .../report/controller/package-info.java | 6 + .../report/convert/ajreport/package-info.java | 4 + .../convert/goview/GoViewProjectConvert.java | 24 + .../dal/dataobject/ajreport/package-info.java | 4 + .../dataobject/goview/GoViewProjectDO.java | 57 + .../dal/mysql/ajreport/package-info.java | 4 + .../dal/mysql/goview/GoViewProjectMapper.java | 19 + .../config/JmReportConfiguration.java | 29 + .../service/JmReportTokenServiceImpl.java | 153 + .../jmreport/core/web/package-info.java | 4 + .../module/report/framework/package-info.java | 6 + .../config/SecurityConfiguration.java | 37 + .../framework/security/core/package-info.java | 4 + .../com/win/module/report/package-info.java | 9 + .../report/service/ajreport/package-info.java | 4 + .../service/goview/GoViewDataService.java | 20 + .../service/goview/GoViewDataServiceImpl.java | 55 + .../service/goview/GoViewProjectService.java | 57 + .../goview/GoViewProjectServiceImpl.java | 74 + .../src/main/resources/application-dev.yaml | 97 + .../src/main/resources/application-local.yaml | 198 + .../src/main/resources/application.yaml | 105 + .../src/main/resources/bootstrap-local.yaml | 23 + .../src/main/resources/bootstrap.yaml | 14 + .../src/main/resources/logback-spring.xml | 76 + win-module-scp/pom.xml | 24 + win-module-scp/win-module-scp-api/pom.xml | 48 + .../com/win/module/scp/api/package-info.java | 4 + .../win/module/scp/enums/ApiConstants.java | 23 + .../module/scp/enums/DictTypeConstants.java | 5 + .../module/scp/enums/ErrorCodeConstants.java | 12 + .../module/scp/enums/LogRecordConstants.java | 12 + win-module-scp/win-module-scp-biz/pom.xml | 211 + .../win/module/scp/ScpServerApplication.java | 11 + .../module/scp/controller/package-info.java | 4 + .../win/module/scp/convert/package-info.java | 4 + .../scp/dal/dataobject/package-info.java | 4 + .../module/scp/dal/mysql/package-info.java | 4 + .../config/DataPermissionConfiguration.java | 31 + .../framework/config/ScpConfiguration.java | 18 + .../rpc/config/RpcConfiguration.java | 8 + .../scp/framework/rpc/package-info.java | 4 + .../rule/CustomDataPermissionRule.java | 39 + .../config/SecurityConfiguration.java | 40 + .../framework/security/core/package-info.java | 4 + .../win/module/scp/service/package-info.java | 4 + .../com/win/module/scp/util/package-info.java | 4 + .../src/main/resources/application-local.yaml | 196 + .../src/main/resources/application-test.yaml | 196 + .../src/main/resources/application.yaml | 168 + .../src/main/resources/bootstrap-local.yaml | 23 + .../src/main/resources/bootstrap-test.yaml | 23 + .../src/main/resources/bootstrap.yaml | 13 + .../src/main/resources/i18n/scp.properties | 1 + .../main/resources/i18n/scp_en_US.properties | 0 .../main/resources/i18n/scp_zh_CN.properties | 0 win-module-system/pom.xml | 24 + .../win-module-system-api/pom.xml | 48 + .../win/module/system/api/dept/DeptApi.java | 56 + .../win/module/system/api/dept/PostApi.java | 45 + .../system/api/dept/dto/DeptRespDTO.java | 25 + .../system/api/dept/dto/PostRespDTO.java | 30 + .../module/system/api/dict/DictDataApi.java | 68 + .../system/api/dict/dto/DictDataRespDTO.java | 22 + .../module/system/api/logger/LoginLogApi.java | 24 + .../system/api/logger/OperateLogApi.java | 32 + .../api/logger/dto/LoginLogCreateReqDTO.java | 43 + .../logger/dto/OperateLogCreateReqDTO.java | 50 + .../api/logger/dto/OperateLogPageReqDTO.java | 20 + .../api/logger/dto/OperateLogRespDTO.java | 52 + .../module/system/api/mail/MailSendApi.java | 28 + .../mail/dto/MailSendSingleToUserReqDTO.java | 27 + .../api/notify/NotifyMessageSendApi.java | 28 + .../dto/NotifySendSingleToUserReqDTO.java | 23 + .../system/api/oauth2/OAuth2TokenApi.java | 52 + .../dto/OAuth2AccessTokenCheckRespDTO.java | 29 + .../dto/OAuth2AccessTokenCreateReqDTO.java | 32 + .../oauth2/dto/OAuth2AccessTokenRespDTO.java | 30 + .../win/module/system/api/package-info.java | 4 + .../system/api/permission/PermissionApi.java | 51 + .../module/system/api/permission/RoleApi.java | 25 + .../dto/DeptDataPermissionRespDTO.java | 28 + .../win/module/system/api/sms/SmsCodeApi.java | 36 + .../win/module/system/api/sms/SmsSendApi.java | 28 + .../api/sms/dto/code/SmsCodeSendReqDTO.java | 30 + .../api/sms/dto/code/SmsCodeUseReqDTO.java | 34 + .../sms/dto/code/SmsCodeValidateReqDTO.java | 30 + .../dto/send/SmsSendSingleToUserReqDTO.java | 26 + .../system/api/social/SocialClientApi.java | 50 + .../system/api/social/SocialUserApi.java | 56 + .../api/social/dto/SocialUserBindReqDTO.java | 39 + .../api/social/dto/SocialUserRespDTO.java | 26 + .../social/dto/SocialUserUnbindReqDTO.java | 36 + .../dto/SocialWxJsapiSignatureRespDTO.java | 25 + .../dto/SocialWxPhoneNumberInfoRespDTO.java | 18 + .../module/system/api/tenant/TenantApi.java | 29 + .../module/system/api/user/AdminUserApi.java | 93 + .../system/api/user/dto/AdminUserRespDTO.java | 31 + .../win/module/system/enums/ApiConstants.java | 23 + .../system/enums/DictTypeConstants.java | 27 + .../system/enums/ErrorCodeConstants.java | 166 + .../system/enums/LogRecordConstants.java | 33 + .../module/system/enums/common/SexEnum.java | 27 + .../system/enums/logger/LoginLogTypeEnum.java | 27 + .../system/enums/logger/LoginResultEnum.java | 26 + .../system/enums/mail/MailSendStatusEnum.java | 24 + .../system/enums/notice/NoticeTypeEnum.java | 23 + .../enums/notify/NotifyTemplateTypeEnum.java | 26 + .../enums/oauth2/OAuth2ClientConstants.java | 12 + .../enums/oauth2/OAuth2GrantTypeEnum.java | 29 + .../enums/permission/DataScopeEnum.java | 40 + .../system/enums/permission/MenuTypeEnum.java | 25 + .../system/enums/permission/RoleCodeEnum.java | 32 + .../system/enums/permission/RoleTypeEnum.java | 21 + .../enums/sms/SmsReceiveStatusEnum.java | 23 + .../module/system/enums/sms/SmsSceneEnum.java | 51 + .../system/enums/sms/SmsSendStatusEnum.java | 24 + .../system/enums/sms/SmsTemplateTypeEnum.java | 25 + .../system/enums/social/SocialTypeEnum.java | 78 + .../win-module-system-biz/Dockerfile | 19 + .../win-module-system-biz/pom.xml | 191 + .../system/SystemServerApplication.java | 30 + .../module/system/api/dept/DeptApiImpl.java | 49 + .../module/system/api/dept/PostApiImpl.java | 36 + .../system/api/dict/DictDataApiImpl.java | 48 + .../system/api/logger/LoginLogApiImpl.java | 26 + .../system/api/logger/OperateLogApiImpl.java | 36 + .../system/api/mail/MailSendApiImpl.java | 32 + .../api/notify/NotifyMessageSendApiImpl.java | 32 + .../system/api/oauth2/OAuth2TokenApiImpl.java | 51 + .../api/permission/PermissionApiImpl.java | 42 + .../system/api/permission/RoleApiImpl.java | 25 + .../module/system/api/sms/SmsCodeApiImpl.java | 40 + .../module/system/api/sms/SmsSendApiImpl.java | 32 + .../api/social/SocialClientApiImpl.java | 46 + .../system/api/social/SocialUserApiImpl.java | 44 + .../system/api/tenant/TenantApiImpl.java | 31 + .../system/api/user/AdminUserApiImpl.java | 89 + .../controller/admin/auth/AuthController.http | 33 + .../controller/admin/auth/AuthController.java | 157 + .../admin/auth/vo/AuthLoginReqVO.java | 69 + .../admin/auth/vo/AuthLoginRespVO.java | 30 + .../admin/auth/vo/AuthMenuRespVO.java | 53 + .../auth/vo/AuthPermissionInfoRespVO.java | 96 + .../admin/auth/vo/AuthSmsLoginReqVO.java | 28 + .../admin/auth/vo/AuthSmsSendReqVO.java | 32 + .../admin/auth/vo/AuthSocialLoginReqVO.java | 34 + .../admin/captcha/CaptchaController.java | 53 + .../controller/admin/dept/DeptController.java | 84 + .../controller/admin/dept/PostController.java | 106 + .../admin/dept/vo/dept/DeptListReqVO.java | 16 + .../admin/dept/vo/dept/DeptRespVO.java | 39 + .../admin/dept/vo/dept/DeptSaveReqVO.java | 48 + .../admin/dept/vo/dept/DeptSimpleRespVO.java | 23 + .../admin/dept/vo/post/PostPageReqVO.java | 22 + .../admin/dept/vo/post/PostRespVO.java | 45 + .../admin/dept/vo/post/PostSaveReqVO.java | 39 + .../admin/dept/vo/post/PostSimpleRespVO.java | 19 + .../admin/dict/DictDataController.http | 4 + .../admin/dict/DictDataController.java | 104 + .../admin/dict/DictTypeController.java | 102 + .../admin/dict/vo/data/DictDataPageReqVO.java | 28 + .../admin/dict/vo/data/DictDataRespVO.java | 55 + .../admin/dict/vo/data/DictDataSaveReqVO.java | 51 + .../dict/vo/data/DictDataSimpleRespVO.java | 25 + .../admin/dict/vo/type/DictTypePageReqVO.java | 33 + .../admin/dict/vo/type/DictTypeRespVO.java | 41 + .../admin/dict/vo/type/DictTypeSaveReqVO.java | 34 + .../dict/vo/type/DictTypeSimpleRespVO.java | 19 + .../controller/admin/ip/AreaController.http | 5 + .../controller/admin/ip/AreaController.java | 50 + .../admin/ip/vo/AreaNodeRespVO.java | 23 + .../admin/logger/LoginLogController.java | 59 + .../admin/logger/OperateLogController.http | 4 + .../admin/logger/OperateLogController.java | 59 + .../logger/vo/loginlog/LoginLogPageReqVO.java | 31 + .../logger/vo/loginlog/LoginLogRespVO.java | 57 + .../vo/operatelog/OperateLogPageReqVO.java | 35 + .../vo/operatelog/OperateLogRespVO.java | 68 + .../admin/mail/MailAccountController.java | 81 + .../admin/mail/MailLogController.java | 49 + .../admin/mail/MailTemplateController.http | 14 + .../admin/mail/MailTemplateController.java | 89 + .../mail/vo/account/MailAccountPageReqVO.java | 21 + .../mail/vo/account/MailAccountRespVO.java | 39 + .../mail/vo/account/MailAccountSaveReqVO.java | 44 + .../vo/account/MailAccountSimpleRespVO.java | 16 + .../admin/mail/vo/log/MailLogPageReqVO.java | 42 + .../admin/mail/vo/log/MailLogRespVO.java | 64 + .../vo/template/MailTemplatePageReqVO.java | 36 + .../mail/vo/template/MailTemplateRespVO.java | 46 + .../vo/template/MailTemplateSaveReqVO.java | 46 + .../vo/template/MailTemplateSendReqVO.java | 25 + .../vo/template/MailTemplateSimpleRespVO.java | 16 + .../admin/notice/NoticeController.java | 92 + .../admin/notice/vo/NoticePageReqVO.java | 19 + .../admin/notice/vo/NoticeRespVO.java | 30 + .../admin/notice/vo/NoticeSaveReqVO.java | 32 + .../admin/notify/NotifyMessageController.java | 98 + .../notify/NotifyTemplateController.java | 91 + .../vo/message/NotifyMessageMyPageReqVO.java | 27 + .../vo/message/NotifyMessagePageReqVO.java | 36 + .../vo/message/NotifyMessageRespVO.java | 49 + .../vo/template/NotifyTemplatePageReqVO.java | 33 + .../vo/template/NotifyTemplateRespVO.java | 43 + .../vo/template/NotifyTemplateSaveReqVO.java | 46 + .../vo/template/NotifyTemplateSendReqVO.java | 29 + .../admin/oauth2/OAuth2ClientController.http | 23 + .../admin/oauth2/OAuth2ClientController.java | 73 + .../admin/oauth2/OAuth2OpenController.http | 54 + .../admin/oauth2/OAuth2OpenController.java | 297 + .../admin/oauth2/OAuth2TokenController.java | 50 + .../admin/oauth2/OAuth2UserController.http | 14 + .../admin/oauth2/OAuth2UserController.java | 81 + .../vo/client/OAuth2ClientPageReqVO.java | 21 + .../oauth2/vo/client/OAuth2ClientRespVO.java | 64 + .../vo/client/OAuth2ClientSaveReqVO.java | 81 + .../vo/open/OAuth2OpenAccessTokenRespVO.java | 34 + .../open/OAuth2OpenAuthorizeInfoRespVO.java | 38 + .../vo/open/OAuth2OpenCheckTokenRespVO.java | 40 + .../vo/token/OAuth2AccessTokenPageReqVO.java | 22 + .../vo/token/OAuth2AccessTokenRespVO.java | 40 + .../oauth2/vo/user/OAuth2UserInfoRespVO.java | 70 + .../oauth2/vo/user/OAuth2UserUpdateReqVO.java | 34 + .../admin/permission/MenuController.http | 4 + .../admin/permission/MenuController.java | 87 + .../permission/PermissionController.java | 82 + .../admin/permission/RoleController.http | 42 + .../admin/permission/RoleController.java | 100 + .../permission/vo/menu/MenuListReqVO.java | 16 + .../admin/permission/vo/menu/MenuRespVO.java | 69 + .../admin/permission/vo/menu/MenuSaveVO.java | 64 + .../permission/vo/menu/MenuSimpleRespVO.java | 22 + .../PermissionAssignRoleDataScopeReqVO.java | 28 + .../PermissionAssignRoleMenuReqVO.java | 21 + .../PermissionAssignUserRoleReqVO.java | 21 + .../permission/vo/role/RolePageReqVO.java | 31 + .../admin/permission/vo/role/RoleRespVO.java | 58 + .../permission/vo/role/RoleSaveReqVO.java | 38 + .../permission/vo/role/RoleSimpleRespVO.java | 16 + .../admin/sms/SmsCallbackController.java | 45 + .../admin/sms/SmsChannelController.java | 82 + .../admin/sms/SmsLogController.java | 60 + .../admin/sms/SmsTemplateController.http | 14 + .../admin/sms/SmsTemplateController.java | 103 + .../sms/vo/channel/SmsChannelPageReqVO.java | 30 + .../sms/vo/channel/SmsChannelRespVO.java | 45 + .../sms/vo/channel/SmsChannelSaveReqVO.java | 42 + .../vo/channel/SmsChannelSimpleRespVO.java | 19 + .../admin/sms/vo/log/SmsLogPageReqVO.java | 43 + .../admin/sms/vo/log/SmsLogRespVO.java | 116 + .../sms/vo/template/SmsTemplatePageReqVO.java | 42 + .../sms/vo/template/SmsTemplateRespVO.java | 69 + .../sms/vo/template/SmsTemplateSaveReqVO.java | 46 + .../sms/vo/template/SmsTemplateSendReqVO.java | 24 + .../admin/socail/SocialClientController.java | 73 + .../admin/socail/SocialUserController.java | 70 + .../vo/client/SocialClientPageReqVO.java | 30 + .../socail/vo/client/SocialClientRespVO.java | 39 + .../vo/client/SocialClientSaveReqVO.java | 61 + .../socail/vo/user/SocialUserBindReqVO.java | 34 + .../socail/vo/user/SocialUserPageReqVO.java | 33 + .../socail/vo/user/SocialUserRespVO.java | 48 + .../socail/vo/user/SocialUserUnbindReqVO.java | 30 + .../admin/tenant/TenantController.http | 21 + .../admin/tenant/TenantController.java | 111 + .../admin/tenant/TenantPackageController.java | 83 + .../vo/packages/TenantPackagePageReqVO.java | 32 + .../vo/packages/TenantPackageRespVO.java | 31 + .../vo/packages/TenantPackageSaveReqVO.java | 35 + .../packages/TenantPackageSimpleRespVO.java | 20 + .../tenant/vo/tenant/TenantPageReqVO.java | 36 + .../admin/tenant/vo/tenant/TenantRespVO.java | 55 + .../tenant/vo/tenant/TenantSaveReqVO.java | 70 + .../tenant/vo/tenant/TenantSimpleRespVO.java | 16 + .../controller/admin/user/UserController.http | 4 + .../controller/admin/user/UserController.java | 169 + .../admin/user/UserProfileController.http | 4 + .../admin/user/UserProfileController.java | 100 + .../user/vo/profile/UserProfileRespVO.java | 75 + .../UserProfileUpdatePasswordReqVO.java | 23 + .../vo/profile/UserProfileUpdateReqVO.java | 31 + .../admin/user/vo/user/UserImportExcelVO.java | 46 + .../admin/user/vo/user/UserImportRespVO.java | 24 + .../admin/user/vo/user/UserPageReqVO.java | 38 + .../admin/user/vo/user/UserRespVO.java | 75 + .../admin/user/vo/user/UserSaveReqVO.java | 80 + .../admin/user/vo/user/UserSimpleRespVO.java | 25 + .../user/vo/user/UserUpdatePasswordReqVO.java | 23 + .../user/vo/user/UserUpdateStatusReqVO.java | 23 + .../app/dict/AppDictDataController.java | 41 + .../app/dict/vo/AppDictDataRespVO.java | 26 + .../controller/app/ip/AppAreaController.java | 34 + .../app/ip/vo/AppAreaNodeRespVO.java | 23 + .../system/controller/app/package-info.java | 4 + .../system/controller/package-info.java | 6 + .../system/convert/auth/AuthConvert.java | 88 + .../convert/oauth2/OAuth2OpenConvert.java | 56 + .../module/system/convert/package-info.java | 6 + .../convert/social/SocialUserConvert.java | 17 + .../system/convert/tenant/TenantConvert.java | 26 + .../system/convert/user/UserConvert.java | 58 + ...g Boot 对象转换 MapStruct 入门》.md | 1 + .../system/dal/dataobject/dept/DeptDO.java | 66 + .../system/dal/dataobject/dept/PostDO.java | 50 + .../dal/dataobject/dept/UserPostDO.java | 40 + .../dal/dataobject/dict/DictDataDO.java | 65 + .../dal/dataobject/dict/DictTypeDO.java | 56 + .../dal/dataobject/logger/LoginLogDO.java | 72 + .../dal/dataobject/logger/OperateLogDO.java | 85 + .../dal/dataobject/mail/MailAccountDO.java | 57 + .../system/dal/dataobject/mail/MailLogDO.java | 122 + .../dal/dataobject/mail/MailTemplateDO.java | 71 + .../dal/dataobject/notice/NoticeDO.java | 47 + .../dataobject/notify/NotifyMessageDO.java | 99 + .../dataobject/notify/NotifyTemplateDO.java | 72 + .../oauth2/OAuth2AccessTokenDO.java | 75 + .../dataobject/oauth2/OAuth2ApproveDO.java | 63 + .../dal/dataobject/oauth2/OAuth2ClientDO.java | 107 + .../dal/dataobject/oauth2/OAuth2CodeDO.java | 68 + .../oauth2/OAuth2RefreshTokenDO.java | 63 + .../dal/dataobject/permission/MenuDO.java | 107 + .../dal/dataobject/permission/RoleDO.java | 78 + .../dal/dataobject/permission/RoleMenuDO.java | 35 + .../dal/dataobject/permission/UserRoleDO.java | 35 + .../dal/dataobject/sms/SmsChannelDO.java | 62 + .../system/dal/dataobject/sms/SmsCodeDO.java | 65 + .../system/dal/dataobject/sms/SmsLogDO.java | 161 + .../dal/dataobject/sms/SmsTemplateDO.java | 91 + .../dal/dataobject/social/SocialClientDO.java | 76 + .../dataobject/social/SocialUserBindDO.java | 56 + .../dal/dataobject/social/SocialUserDO.java | 73 + .../dal/dataobject/tenant/TenantDO.java | 80 + .../dataobject/tenant/TenantPackageDO.java | 52 + .../dal/dataobject/user/AdminUserDO.java | 96 + .../system/dal/mysql/dept/DeptMapper.java | 33 + .../system/dal/mysql/dept/PostMapper.java | 38 + .../system/dal/mysql/dept/UserPostMapper.java | 32 + .../system/dal/mysql/dict/DictDataMapper.java | 49 + .../system/dal/mysql/dict/DictTypeMapper.java | 37 + .../dal/mysql/logger/LoginLogMapper.java | 28 + .../dal/mysql/logger/OperateLogMapper.java | 33 + .../dal/mysql/mail/MailAccountMapper.java | 19 + .../system/dal/mysql/mail/MailLogMapper.java | 25 + .../dal/mysql/mail/MailTemplateMapper.java | 30 + .../system/dal/mysql/notice/NoticeMapper.java | 20 + .../dal/mysql/notify/NotifyMessageMapper.java | 70 + .../mysql/notify/NotifyTemplateMapper.java | 26 + .../mysql/oauth2/OAuth2AccessTokenMapper.java | 35 + .../dal/mysql/oauth2/OAuth2ApproveMapper.java | 28 + .../dal/mysql/oauth2/OAuth2ClientMapper.java | 30 + .../dal/mysql/oauth2/OAuth2CodeMapper.java | 14 + .../oauth2/OAuth2RefreshTokenMapper.java | 20 + .../module/system/dal/mysql/package-info.java | 9 + .../dal/mysql/permission/MenuMapper.java | 31 + .../dal/mysql/permission/RoleMapper.java | 39 + .../dal/mysql/permission/RoleMenuMapper.java | 40 + .../dal/mysql/permission/UserRoleMapper.java | 36 + .../dal/mysql/sms/SmsChannelMapper.java | 25 + .../system/dal/mysql/sms/SmsCodeMapper.java | 28 + .../system/dal/mysql/sms/SmsLogMapper.java | 25 + .../dal/mysql/sms/SmsTemplateMapper.java | 33 + .../dal/mysql/social/SocialClientMapper.java | 28 + .../mysql/social/SocialUserBindMapper.java | 44 + .../dal/mysql/social/SocialUserMapper.java | 36 + .../system/dal/mysql/tenant/TenantMapper.java | 46 + .../dal/mysql/tenant/TenantPackageMapper.java | 32 + .../dal/mysql/user/AdminUserMapper.java | 50 + .../system/dal/redis/RedisKeyConstants.java | 101 + .../oauth2/OAuth2AccessTokenRedisDAO.java | 59 + .../config/WinCaptchaConfiguration.java | 29 + .../captcha/core/RedisCaptchaServiceImpl.java | 49 + .../framework/captcha/package-info.java | 8 + .../config/DataPermissionConfiguration.java | 28 + .../datapermission/package-info.java | 4 + .../core/AdminUserParseFunction.java | 51 + .../operatelog/core/AreaParseFunction.java | 39 + .../operatelog/core/BooleanParseFunction.java | 39 + .../operatelog/core/DeptParseFunction.java | 46 + .../operatelog/core/PostParseFunction.java | 46 + .../operatelog/core/SexParseFunction.java | 39 + .../framework/operatelog/package-info.java | 4 + .../module/system/framework/package-info.java | 6 + .../rpc/config/RpcConfiguration.java | 11 + .../system/framework/rpc/package-info.java | 4 + .../config/SecurityConfiguration.java | 39 + .../framework/security/core/package-info.java | 4 + .../sms/config/SmsCodeProperties.java | 41 + .../sms/config/SmsConfiguration.java | 23 + .../framework/sms/core/client/SmsClient.java | 54 + .../sms/core/client/SmsClientFactory.java | 36 + .../core/client/dto/SmsReceiveRespDTO.java | 48 + .../sms/core/client/dto/SmsSendRespDTO.java | 43 + .../core/client/dto/SmsTemplateRespDTO.java | 33 + .../core/client/impl/AbstractSmsClient.java | 54 + .../sms/core/client/impl/AliyunSmsClient.java | 183 + .../client/impl/DebugDingTalkSmsClient.java | 96 + .../client/impl/SmsClientFactoryImpl.java | 87 + .../core/client/impl/TencentSmsClient.java | 219 + .../sms/core/enums/SmsChannelEnum.java | 36 + .../enums/SmsTemplateAuditStatusEnum.java | 21 + .../core/property/SmsChannelProperties.java | 52 + .../win/module/system/job/demo/DemoJob.java | 16 + .../win/module/system/job/package-info.java | 1 + .../mq/consumer/mail/MailSendConsumer.java | 31 + .../mq/consumer/sms/SmsSendConsumer.java | 31 + .../mq/message/mail/MailSendMessage.java | 47 + .../system/mq/message/sms/SmsSendMessage.java | 42 + .../system/mq/producer/mail/MailProducer.java | 41 + .../system/mq/producer/sms/SmsProducer.java | 41 + .../com/win/module/system/package-info.java | 8 + .../system/service/auth/AdminAuthService.java | 73 + .../service/auth/AdminAuthServiceImpl.java | 250 + .../system/service/dept/DeptService.java | 102 + .../system/service/dept/DeptServiceImpl.java | 218 + .../system/service/dept/PostService.java | 84 + .../system/service/dept/PostServiceImpl.java | 153 + .../system/service/dict/DictDataService.java | 110 + .../service/dict/DictDataServiceImpl.java | 179 + .../system/service/dict/DictTypeService.java | 70 + .../service/dict/DictTypeServiceImpl.java | 140 + .../service/logger/LoginLogService.java | 30 + .../service/logger/LoginLogServiceImpl.java | 35 + .../service/logger/OperateLogService.java | 39 + .../service/logger/OperateLogServiceImpl.java | 44 + .../service/mail/MailAccountService.java | 72 + .../service/mail/MailAccountServiceImpl.java | 99 + .../system/service/mail/MailLogService.java | 61 + .../service/mail/MailLogServiceImpl.java | 78 + .../system/service/mail/MailSendService.java | 60 + .../service/mail/MailSendServiceImpl.java | 173 + .../service/mail/MailTemplateService.java | 90 + .../service/mail/MailTemplateServiceImpl.java | 138 + .../system/service/member/MemberService.java | 26 + .../service/member/MemberServiceImpl.java | 54 + .../system/service/member/package-info.java | 4 + .../system/service/notice/NoticeService.java | 51 + .../service/notice/NoticeServiceImpl.java | 73 + .../service/notify/NotifyMessageService.java | 97 + .../notify/NotifyMessageServiceImpl.java | 75 + .../service/notify/NotifySendService.java | 55 + .../service/notify/NotifySendServiceImpl.java | 87 + .../service/notify/NotifyTemplateService.java | 73 + .../notify/NotifyTemplateServiceImpl.java | 138 + .../service/oauth2/OAuth2ApproveService.java | 52 + .../oauth2/OAuth2ApproveServiceImpl.java | 103 + .../service/oauth2/OAuth2ClientService.java | 90 + .../oauth2/OAuth2ClientServiceImpl.java | 153 + .../service/oauth2/OAuth2CodeService.java | 39 + .../service/oauth2/OAuth2CodeServiceImpl.java | 64 + .../service/oauth2/OAuth2GrantService.java | 113 + .../oauth2/OAuth2GrantServiceImpl.java | 104 + .../service/oauth2/OAuth2TokenService.java | 80 + .../oauth2/OAuth2TokenServiceImpl.java | 197 + .../service/permission/MenuService.java | 87 + .../service/permission/MenuServiceImpl.java | 213 + .../service/permission/PermissionService.java | 146 + .../permission/PermissionServiceImpl.java | 337 + .../service/permission/RoleService.java | 124 + .../service/permission/RoleServiceImpl.java | 259 + .../system/service/sms/SmsChannelService.java | 81 + .../service/sms/SmsChannelServiceImpl.java | 166 + .../system/service/sms/SmsCodeService.java | 40 + .../service/sms/SmsCodeServiceImpl.java | 111 + .../system/service/sms/SmsLogService.java | 68 + .../system/service/sms/SmsLogServiceImpl.java | 79 + .../system/service/sms/SmsSendService.java | 78 + .../service/sms/SmsSendServiceImpl.java | 191 + .../service/sms/SmsTemplateService.java | 82 + .../service/sms/SmsTemplateServiceImpl.java | 199 + .../service/social/SocialClientService.java | 104 + .../social/SocialClientServiceImpl.java | 340 + .../service/social/SocialUserService.java | 89 + .../service/social/SocialUserServiceImpl.java | 173 + .../service/tenant/TenantPackageService.java | 72 + .../tenant/TenantPackageServiceImpl.java | 114 + .../system/service/tenant/TenantService.java | 130 + .../service/tenant/TenantServiceImpl.java | 306 + .../tenant/handler/TenantInfoHandler.java | 21 + .../tenant/handler/TenantMenuHandler.java | 21 + .../system/service/user/AdminUserService.java | 210 + .../service/user/AdminUserServiceImpl.java | 486 + .../system/util/oauth2/OAuth2Utils.java | 103 + .../win/module/system/util/package-info.java | 4 + ...ingyuv.captcha.service.CaptchaCacheService | 1 + .../src/main/resources/application-dev.yaml | 171 + .../src/main/resources/application-local.yaml | 195 + .../src/main/resources/application.yaml | 184 + .../src/main/resources/bootstrap-local.yaml | 23 + .../src/main/resources/bootstrap.yaml | 14 + .../resources/images/jigsaw/original/bg1.png | Bin 0 -> 17827 bytes .../resources/images/jigsaw/original/bg2.png | Bin 0 -> 28732 bytes .../resources/images/jigsaw/original/bg3.png | Bin 0 -> 25814 bytes .../resources/images/jigsaw/original/bg4.png | Bin 0 -> 27859 bytes .../resources/images/jigsaw/original/bg5.png | Bin 0 -> 24036 bytes .../resources/images/jigsaw/original/bg6.png | Bin 0 -> 19160 bytes .../resources/images/jigsaw/original/bg7.png | Bin 0 -> 21445 bytes .../resources/images/jigsaw/original/bg8.png | Bin 0 -> 30332 bytes .../resources/images/jigsaw/original/bg9.png | Bin 0 -> 26977 bytes .../images/jigsaw/slidingBlock/1.png | Bin 0 -> 2158 bytes .../images/jigsaw/slidingBlock/11/10.png | Bin 0 -> 1657 bytes .../images/jigsaw/slidingBlock/11/11.png | Bin 0 -> 1657 bytes .../images/jigsaw/slidingBlock/11/12.png | Bin 0 -> 1657 bytes .../images/jigsaw/slidingBlock/11/13.png | Bin 0 -> 1873 bytes .../images/jigsaw/slidingBlock/11/14.png | Bin 0 -> 1872 bytes .../images/jigsaw/slidingBlock/11/15.png | Bin 0 -> 1872 bytes .../images/jigsaw/slidingBlock/11/16.png | Bin 0 -> 1838 bytes .../images/jigsaw/slidingBlock/11/17.png | Bin 0 -> 1839 bytes .../images/jigsaw/slidingBlock/11/18.png | Bin 0 -> 1836 bytes .../images/jigsaw/slidingBlock/11/19.png | Bin 0 -> 1838 bytes .../images/jigsaw/slidingBlock/11/8.png | Bin 0 -> 1657 bytes .../images/jigsaw/slidingBlock/11/9.png | Bin 0 -> 1657 bytes .../images/jigsaw/slidingBlock/2.png | Bin 0 -> 2297 bytes .../images/jigsaw/slidingBlock/3.png | Bin 0 -> 2241 bytes .../images/jigsaw/slidingBlock/4.png | Bin 0 -> 2255 bytes .../main/resources/images/pic-click/bg1.png | Bin 0 -> 24041 bytes .../main/resources/images/pic-click/bg10.png | Bin 0 -> 27872 bytes .../main/resources/images/pic-click/bg2.png | Bin 0 -> 28394 bytes .../main/resources/images/pic-click/bg3.png | Bin 0 -> 23407 bytes .../main/resources/images/pic-click/bg4.png | Bin 0 -> 25379 bytes .../main/resources/images/pic-click/bg5.png | Bin 0 -> 16422 bytes .../main/resources/images/pic-click/bg6.png | Bin 0 -> 23607 bytes .../main/resources/images/pic-click/bg7.png | Bin 0 -> 26113 bytes .../main/resources/images/pic-click/bg8.png | Bin 0 -> 27260 bytes .../main/resources/images/pic-click/bg9.png | Bin 0 -> 29878 bytes .../src/main/resources/logback-spring.xml | 76 + win-ui/win-ui-admin-uniapp/README.md | 4 + win-ui/win-ui-admin-vben/README.md | 4 + win-ui/win-ui-admin-vue2/README.md | 4 + win-ui/win-ui-admin-vue3/README.md | 4 + win-ui/win-ui-mall-uniapp/README.md | 8 + 1532 files changed, 120752 insertions(+), 75 deletions(-) create mode 100644 .image/Java监控.jpg create mode 100644 .image/MySQL.jpg create mode 100644 .image/OA请假-列表.jpg create mode 100644 .image/OA请假-发起.jpg create mode 100644 .image/OA请假-详情.jpg create mode 100644 .image/Redis.jpg create mode 100644 .image/admin-uniapp/01.png create mode 100644 .image/admin-uniapp/02.png create mode 100644 .image/admin-uniapp/03.png create mode 100644 .image/admin-uniapp/04.png create mode 100644 .image/admin-uniapp/05.png create mode 100644 .image/admin-uniapp/06.png create mode 100644 .image/admin-uniapp/07.png create mode 100644 .image/admin-uniapp/08.png create mode 100644 .image/admin-uniapp/09.png create mode 100644 .image/common/bpm-feature.png create mode 100644 .image/common/crm-feature.png create mode 100644 .image/common/erp-feature.png create mode 100644 .image/common/infra-feature.png create mode 100644 .image/common/mall-feature.png create mode 100644 .image/common/mall-preview.png create mode 100644 .image/common/project-vs.png create mode 100644 .image/common/ruoyi-vue-pro-architecture.png create mode 100644 .image/common/ruoyi-vue-pro-biz.png create mode 100644 .image/common/system-feature.png create mode 100644 .image/common/win-cloud-architecture.png create mode 100644 .image/common/win-roadmap.png create mode 100644 .image/个人中心.jpg create mode 100644 .image/代码生成.jpg create mode 100644 .image/令牌管理.jpg create mode 100644 .image/任务列表-审批.jpg create mode 100644 .image/任务列表-已办.jpg create mode 100644 .image/任务列表-待办.jpg create mode 100644 .image/任务日志.jpg create mode 100644 .image/商户信息.jpg create mode 100644 .image/在线用户.jpg create mode 100644 .image/大屏设计器-列表.jpg create mode 100644 .image/大屏设计器-编辑.jpg create mode 100644 .image/大屏设计器-预览.jpg create mode 100644 .image/字典数据.jpg create mode 100644 .image/字典类型.jpg create mode 100644 .image/定时任务.jpg create mode 100644 .image/岗位管理.jpg create mode 100644 .image/应用信息-列表.jpg create mode 100644 .image/应用信息-编辑.jpg create mode 100644 .image/应用管理.jpg create mode 100644 .image/我的流程-列表.jpg create mode 100644 .image/我的流程-发起.jpg create mode 100644 .image/我的流程-详情.jpg create mode 100644 .image/报表设计器-图形报表.jpg create mode 100644 .image/报表设计器-打印设计.jpg create mode 100644 .image/报表设计器-数据报表.jpg create mode 100644 .image/操作日志.jpg create mode 100644 .image/支付订单.jpg create mode 100644 .image/敏感词.jpg create mode 100644 .image/数据库文档.jpg create mode 100644 .image/文件管理.jpg create mode 100644 .image/文件管理2.jpg create mode 100644 .image/文件配置.jpg create mode 100644 .image/日志中心.jpg create mode 100644 .image/流程模型-列表.jpg create mode 100644 .image/流程模型-定义.jpg create mode 100644 .image/流程模型-设计.jpg create mode 100644 .image/流程表单.jpg create mode 100644 .image/生成效果.jpg create mode 100644 .image/用户分组.jpg create mode 100644 .image/用户管理.jpg create mode 100644 .image/登录.jpg create mode 100644 .image/登录日志.jpg create mode 100644 .image/短信日志.jpg create mode 100644 .image/短信模板.jpg create mode 100644 .image/短信渠道.jpg create mode 100644 .image/租户套餐.png create mode 100644 .image/租户管理.jpg create mode 100644 .image/系统接口.jpg create mode 100644 .image/菜单管理.jpg create mode 100644 .image/表单构建.jpg create mode 100644 .image/角色管理.jpg create mode 100644 .image/访问日志.jpg create mode 100644 .image/退款订单.jpg create mode 100644 .image/通知公告.jpg create mode 100644 .image/部门管理.jpg create mode 100644 .image/配置管理.jpg create mode 100644 .image/链路追踪.jpg create mode 100644 .image/错误日志.jpg create mode 100644 .image/错误码管理.jpg create mode 100644 .image/首页.jpg create mode 100644 lombok.config create mode 100644 pom.xml create mode 100644 script/docker/docker-compose.yml create mode 100644 script/idea/http-client.env.json create mode 100644 sql/db2/README.md create mode 100644 sql/dm/flowable-patch/src/main/java/liquibase/database/core/DmDatabase.java create mode 100644 sql/dm/flowable-patch/src/main/java/liquibase/datatype/core/BooleanType.java create mode 100644 sql/dm/flowable-patch/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfiguration.java create mode 100644 sql/dm/flowable-patch/src/main/resources/META-INF/package-info.md create mode 100644 sql/dm/flowable-patch/src/main/resources/META-INF/services/liquibase.database.Database create mode 100644 sql/dm/ruoyi-vue-pro-dm8.sql create mode 100644 sql/mysql/ruoyi-vue-pro.sql create mode 100644 sql/oracle/ruoyi-vue-pro.sql create mode 100644 sql/postgresql/ruoyi-vue-pro.sql create mode 100644 sql/postgresql/win-initdb-20240806.sql create mode 100644 sql/sqlserver/ruoyi-vue-pro.sql create mode 100644 sql/tools/.gitignore create mode 100644 sql/tools/README.md create mode 100644 sql/tools/convertor.py create mode 100644 sql/tools/docker-compose.yaml create mode 100644 sql/tools/oracle/1_create_user.sql create mode 100644 sql/tools/oracle/2_create_schema.sh create mode 100644 sql/tools/sqlserver/create_schema.sh create mode 100644 win-dependencies/pom.xml create mode 100644 win-framework/pom.xml create mode 100644 win-framework/win-common/pom.xml create mode 100644 win-framework/win-common/src/main/java/com/fhs/trans/service/AutoTransable.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/core/IntArrayValuable.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/core/KeyValue.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/enums/CommonStatusEnum.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/enums/DateIntervalEnum.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/enums/DocumentEnum.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/enums/RpcConstants.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/enums/TerminalEnum.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/enums/UserTypeEnum.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/enums/WebFilterOrderEnum.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/exception/ErrorCode.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/exception/ServerException.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/exception/ServiceException.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/exception/enums/GlobalErrorCodeConstants.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/exception/enums/ServiceErrorCodeRange.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/exception/util/ServiceExceptionUtil.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/package-info.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/pojo/CommonResult.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/pojo/PageParam.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/pojo/PageResult.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/pojo/SortablePageParam.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/pojo/SortingField.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/cache/CacheUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/collection/ArrayUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/collection/CollectionUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/collection/MapUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/collection/SetUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/date/DateUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/date/LocalDateTimeUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/http/HttpUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/io/FileUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/io/IoUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/json/JsonUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/monitor/TracerUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/number/MoneyUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/number/NumberUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/object/BeanUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/object/ObjectUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/object/PageUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/package-info.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/servlet/ServletUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/spring/SpringExpressionUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/spring/SpringUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/string/StrUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/util/validation/ValidationUtils.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/validation/InEnum.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/validation/InEnumCollectionValidator.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/validation/InEnumValidator.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/validation/Mobile.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/validation/MobileValidator.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/validation/Telephone.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/validation/TelephoneValidator.java create mode 100644 win-framework/win-common/src/main/java/com/win/framework/common/validation/package-info.java create mode 100644 win-framework/win-common/《芋道 Spring Boot 参数校验 Validation 入门》.md create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/pom.xml create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/config/WinDataPermissionAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/config/WinDeptDataPermissionAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/annotation/DataPermission.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/aop/DataPermissionAnnotationAdvisor.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/aop/DataPermissionAnnotationInterceptor.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/aop/DataPermissionContextHolder.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/db/DataPermissionDatabaseInterceptor.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/DataPermissionRule.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/DataPermissionRuleFactory.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/DataPermissionRuleFactoryImpl.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/dept/DeptDataPermissionRuleCustomizer.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/dept/package-info.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/util/DataPermissionUtils.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/package-info.java create mode 100644 win-framework/win-spring-boot-starter-biz-data-permission/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 win-framework/win-spring-boot-starter-biz-ip/pom.xml create mode 100644 win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/Area.java create mode 100644 win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/enums/AreaTypeEnum.java create mode 100644 win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/utils/AreaUtils.java create mode 100644 win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/utils/IPUtils.java create mode 100644 win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/package-info.java create mode 100644 win-framework/win-spring-boot-starter-biz-ip/src/main/resources/area.csv create mode 100644 win-framework/win-spring-boot-starter-biz-ip/src/main/resources/ip2region.xdb create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/pom.xml create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/config/TenantProperties.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/config/WinTenantAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/config/WinTenantRpcAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/aop/TenantIgnore.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/aop/TenantIgnoreAspect.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/context/TenantContextHolder.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/db/TenantBaseDO.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/db/TenantDatabaseInterceptor.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/job/TenantJob.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/job/TenantJobAspect.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/kafka/TenantKafkaEnvironmentPostProcessor.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/kafka/TenantKafkaProducerInterceptor.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rabbitmq/TenantRabbitMQInitializer.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rabbitmq/TenantRabbitMQMessagePostProcessor.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/redis/TenantRedisMessageInterceptor.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rocketmq/TenantRocketMQConsumeMessageHook.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rocketmq/TenantRocketMQInitializer.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rocketmq/TenantRocketMQSendMessageHook.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/redis/TenantRedisCacheManager.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/rpc/TenantRequestInterceptor.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/security/TenantSecurityWebFilter.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/service/TenantFrameworkService.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/service/TenantFrameworkServiceImpl.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/util/TenantUtils.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/web/TenantContextWebFilter.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/package-info.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/resources/META-INF/spring.factories create mode 100644 win-framework/win-spring-boot-starter-biz-tenant/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 win-framework/win-spring-boot-starter-env/pom.xml create mode 100644 win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/EnvEnvironmentPostProcessor.java create mode 100644 win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/EnvProperties.java create mode 100644 win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/WinEnvRpcAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/WinEnvWebAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/context/EnvContextHolder.java create mode 100644 win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/fegin/EnvLoadBalancerClient.java create mode 100644 win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/fegin/EnvLoadBalancerClientFactory.java create mode 100644 win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/fegin/EnvRequestInterceptor.java create mode 100644 win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/package-info.java create mode 100644 win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/util/EnvUtils.java create mode 100644 win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/web/EnvWebFilter.java create mode 100644 win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/package-info.java create mode 100644 win-framework/win-spring-boot-starter-env/src/main/resources/META-INF/spring.factories create mode 100644 win-framework/win-spring-boot-starter-env/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 win-framework/win-spring-boot-starter-excel/pom.xml create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/config/WinDictAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/config/WinDictRpcAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/core/DictFrameworkUtils.java create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/package-info.java create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/annotations/DictFormat.java create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/annotations/ExcelColumnSelect.java create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/AreaConvert.java create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/DictConvert.java create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/JsonConvert.java create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/MoneyConvert.java create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/function/ExcelColumnSelectFunction.java create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/handler/SelectSheetWriteHandler.java create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/util/ExcelUtils.java create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/package-info.java create mode 100644 win-framework/win-spring-boot-starter-excel/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 win-framework/win-spring-boot-starter-job/pom.xml create mode 100644 win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/config/WinAsyncAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/config/WinXxlJobAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/config/XxlJobProperties.java create mode 100644 win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/package-info.java create mode 100644 win-framework/win-spring-boot-starter-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 win-framework/win-spring-boot-starter-job/《芋道 Spring Boot 定时任务入门》.md create mode 100644 win-framework/win-spring-boot-starter-job/《芋道 Spring Boot 异步任务入门》.md create mode 100644 win-framework/win-spring-boot-starter-monitor/pom.xml create mode 100644 win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/config/TracerProperties.java create mode 100644 win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/config/WinMetricsAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/config/WinTracerAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/annotation/BizTrace.java create mode 100644 win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/aop/BizTraceAspect.java create mode 100644 win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/filter/TraceFilter.java create mode 100644 win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/util/TracerFrameworkUtils.java create mode 100644 win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/package-info.java create mode 100644 win-framework/win-spring-boot-starter-monitor/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 win-framework/win-spring-boot-starter-monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md create mode 100644 win-framework/win-spring-boot-starter-monitor/《芋道 Spring Boot 监控端点 Actuator 入门》.md create mode 100644 win-framework/win-spring-boot-starter-monitor/《芋道 Spring Boot 链路追踪 SkyWalking 入门》.md create mode 100644 win-framework/win-spring-boot-starter-mq/pom.xml create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/package-info.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/rabbitmq/config/WinRabbitMQAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/rabbitmq/core/package-info.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/rabbitmq/package-info.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/config/WinRedisMQConsumerAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/config/WinRedisMQProducerAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/RedisMQTemplate.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/interceptor/RedisMessageInterceptor.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/job/RedisPendingMessageResendJob.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/message/AbstractRedisMessage.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/pubsub/AbstractRedisChannelMessage.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/pubsub/AbstractRedisChannelMessageListener.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/stream/AbstractRedisStreamMessage.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/stream/AbstractRedisStreamMessageListener.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/package-info.java create mode 100644 win-framework/win-spring-boot-starter-mq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 事件机制 Event 入门》.md create mode 100644 win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 Kafka 入门》.md create mode 100644 win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 RabbitMQ 入门》.md create mode 100644 win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 RocketMQ 入门》.md create mode 100644 win-framework/win-spring-boot-starter-mybatis/pom.xml create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/config/WinDataSourceAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/core/enums/DataSourceEnum.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/core/filter/DruidAdRemoveFilter.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/package-info.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/config/WinMybatisAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/dataobject/BaseDO.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/enums/SqlConstants.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/handler/DefaultDBFieldHandler.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/mapper/BaseMapperX.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/query/LambdaQueryWrapperX.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/query/MPJLambdaWrapperX.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/query/QueryWrapperX.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/EncryptTypeHandler.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/IntegerListTypeHandler.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/JsonLongSetTypeHandler.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/LongListTypeHandler.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/StringListTypeHandler.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/JdbcUtils.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/MyBatisUtils.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/package-info.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/translate/config/WinTranslateAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/translate/core/TranslateUtils.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/translate/package-info.java create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/resources/META-INF/spring.factories create mode 100644 win-framework/win-spring-boot-starter-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 win-framework/win-spring-boot-starter-mybatis/《芋道 Spring Boot MyBatis 入门》.md create mode 100644 win-framework/win-spring-boot-starter-mybatis/《芋道 Spring Boot 多数据源(读写分离)入门》.md create mode 100644 win-framework/win-spring-boot-starter-mybatis/《芋道 Spring Boot 数据库连接池入门》.md create mode 100644 win-framework/win-spring-boot-starter-protection/pom.xml create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/config/WinIdempotentConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/annotation/Idempotent.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/aop/IdempotentAspect.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/IdempotentKeyResolver.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/impl/DefaultIdempotentKeyResolver.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/impl/ExpressionIdempotentKeyResolver.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/impl/UserIdempotentKeyResolver.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/redis/IdempotentRedisDAO.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/package-info.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/config/WinLock4jConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/core/DefaultLockFailureStrategy.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/core/Lock4jRedisKeyConstants.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/package-info.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/config/WinRateLimiterConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/annotation/RateLimiter.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/aop/RateLimiterAspect.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/RateLimiterKeyResolver.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/ClientIpRateLimiterKeyResolver.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/DefaultRateLimiterKeyResolver.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/ExpressionRateLimiterKeyResolver.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/ServerNodeRateLimiterKeyResolver.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/UserRateLimiterKeyResolver.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/redis/RateLimiterRedisDAO.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/package-info.java create mode 100644 win-framework/win-spring-boot-starter-protection/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 win-framework/win-spring-boot-starter-redis/pom.xml create mode 100644 win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/config/WinCacheAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/config/WinCacheProperties.java create mode 100644 win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/config/WinRedisAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/core/TimeoutRedisCacheManager.java create mode 100644 win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/package-info.java create mode 100644 win-framework/win-spring-boot-starter-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 win-framework/win-spring-boot-starter-redis/《芋道 Spring Boot Cache 入门》.md create mode 100644 win-framework/win-spring-boot-starter-redis/《芋道 Spring Boot Redis 入门》.md create mode 100644 win-framework/win-spring-boot-starter-rpc/pom.xml create mode 100644 win-framework/win-spring-boot-starter-rpc/src/main/java/com/win/framework/rpc/config/package-info.java create mode 100644 win-framework/win-spring-boot-starter-rpc/src/main/java/com/win/framework/rpc/core/package-info.java create mode 100644 win-framework/win-spring-boot-starter-rpc/src/main/java/com/win/framework/rpc/package-info.java create mode 100644 win-framework/win-spring-boot-starter-rpc/《芋道 Spring Boot 声明式调用 Feign 入门》.md create mode 100644 win-framework/win-spring-boot-starter-rpc/《芋道 Spring Cloud 声明式调用 Feign 入门》.md create mode 100644 win-framework/win-spring-boot-starter-security/pom.xml create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/config/WinOperateLogConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/config/WinOperateLogRpcAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/core/package-info.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/core/service/LogRecordServiceImpl.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/package-info.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/AuthorizeRequestsCustomizer.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/SecurityProperties.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/WinSecurityAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/WinSecurityRpcAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/WinWebSecurityConfigurerAdapter.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/LoginUser.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/annotations/PreAuthenticated.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/aop/PreAuthenticatedAspect.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/context/TransmittableThreadLocalSecurityContextHolderStrategy.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/filter/TokenAuthenticationFilter.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/handler/AccessDeniedHandlerImpl.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/handler/AuthenticationEntryPointImpl.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/rpc/LoginUserRequestInterceptor.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/service/SecurityFrameworkService.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/service/SecurityFrameworkServiceImpl.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/util/SecurityFrameworkUtils.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/package-info.java create mode 100644 win-framework/win-spring-boot-starter-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 win-framework/win-spring-boot-starter-security/《芋道 Spring Boot 安全框架 Spring Security 入门》.md create mode 100644 win-framework/win-spring-boot-starter-web/pom.xml create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/config/WinApiLogAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/config/WinApiLogRpcAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/annotation/ApiAccessLog.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/enums/OperateTypeEnum.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/filter/ApiAccessLogFilter.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/interceptor/ApiAccessLogInterceptor.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiAccessLogFrameworkService.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiAccessLogFrameworkServiceImpl.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiErrorLogFrameworkService.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiErrorLogFrameworkServiceImpl.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/package-info.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/banner/config/WinBannerAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/banner/core/BannerApplicationRunner.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/banner/package-info.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/base/annotation/DesensitizeBy.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/base/handler/DesensitizationHandler.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/base/serializer/StringDesensitizeSerializer.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/annotation/EmailDesensitize.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/annotation/RegexDesensitize.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/handler/AbstractRegexDesensitizationHandler.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/handler/DefaultRegexDesensitizationHandler.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/handler/EmailDesensitizationHandler.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/BankCardDesensitize.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/CarLicenseDesensitize.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/ChineseNameDesensitize.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/FixedPhoneDesensitize.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/IdCardDesensitize.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/MobileDesensitize.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/PasswordDesensitize.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/SliderDesensitize.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/AbstractSliderDesensitizationHandler.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/BankCardDesensitization.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/CarLicenseDesensitization.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/ChineseNameDesensitization.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/DefaultDesensitizationHandler.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/FixedPhoneDesensitization.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/IdCardDesensitization.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/MobileDesensitization.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/PasswordDesensitization.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/package-info.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/config/WinJacksonAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/databind/NumberSerializer.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/databind/TimestampLocalDateTimeDeserializer.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/databind/TimestampLocalDateTimeSerializer.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/package-info.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/package-info.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/swagger/config/SwaggerProperties.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/swagger/config/WinSwaggerAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/swagger/package-info.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/config/WebProperties.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/config/WinWebAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/ApiRequestFilter.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/CacheRequestBodyFilter.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/CacheRequestBodyWrapper.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/DemoFilter.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/handler/GlobalExceptionHandler.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/handler/GlobalResponseBodyHandler.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/util/WebFrameworkUtils.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/package-info.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/config/WinXssAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/config/XssProperties.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/clean/JsoupXssCleaner.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/clean/XssCleaner.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/filter/XssFilter.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/filter/XssRequestWrapper.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/json/XssStringJsonDeserializer.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/package-info.java create mode 100644 win-framework/win-spring-boot-starter-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 win-framework/win-spring-boot-starter-web/src/main/resources/banner.txt create mode 100644 win-framework/win-spring-boot-starter-web/《芋道 Spring Boot API 接口文档 Swagger 入门》.md create mode 100644 win-framework/win-spring-boot-starter-web/《芋道 Spring Boot SpringMVC 入门》.md create mode 100644 win-framework/win-spring-boot-starter-websocket/pom.xml create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/config/WebSocketProperties.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/config/WinWebSocketAutoConfiguration.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/handler/JsonWebSocketMessageHandler.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/listener/WebSocketMessageListener.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/message/JsonWebSocketMessage.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/security/LoginUserHandshakeInterceptor.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/security/WebSocketAuthorizeRequestsCustomizer.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/AbstractWebSocketMessageSender.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/WebSocketMessageSender.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/kafka/KafkaWebSocketMessage.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/kafka/KafkaWebSocketMessageConsumer.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/kafka/KafkaWebSocketMessageSender.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/local/LocalWebSocketMessageSender.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessage.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessageConsumer.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessageSender.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/redis/RedisWebSocketMessage.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/redis/RedisWebSocketMessageConsumer.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/redis/RedisWebSocketMessageSender.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessage.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessageConsumer.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessageSender.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/session/WebSocketSessionHandlerDecorator.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/session/WebSocketSessionManager.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/session/WebSocketSessionManagerImpl.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/util/WebSocketFrameworkUtils.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/package-info.java create mode 100644 win-framework/win-spring-boot-starter-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 win-framework/win-spring-boot-starter-websocket/《芋道 Spring Boot WebSocket 入门》.md create mode 100644 win-gateway/Dockerfile create mode 100644 win-gateway/pom.xml create mode 100644 win-gateway/src/main/java/com/win/gateway/GatewayServerApplication.java create mode 100644 win-gateway/src/main/java/com/win/gateway/filter/cors/CorsFilter.java create mode 100644 win-gateway/src/main/java/com/win/gateway/filter/cors/CorsResponseHeaderFilter.java create mode 100644 win-gateway/src/main/java/com/win/gateway/filter/grey/GrayLoadBalancer.java create mode 100644 win-gateway/src/main/java/com/win/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java create mode 100644 win-gateway/src/main/java/com/win/gateway/filter/logging/AccessLog.java create mode 100644 win-gateway/src/main/java/com/win/gateway/filter/logging/AccessLogFilter.java create mode 100644 win-gateway/src/main/java/com/win/gateway/filter/security/LoginUser.java create mode 100644 win-gateway/src/main/java/com/win/gateway/filter/security/TokenAuthenticationFilter.java create mode 100644 win-gateway/src/main/java/com/win/gateway/handler/GlobalExceptionHandler.java create mode 100644 win-gateway/src/main/java/com/win/gateway/route/dynamic/package-info.java create mode 100644 win-gateway/src/main/java/com/win/gateway/route/package-info.java create mode 100644 win-gateway/src/main/java/com/win/gateway/util/BannerApplicationRunner.java create mode 100644 win-gateway/src/main/java/com/win/gateway/util/EnvUtils.java create mode 100644 win-gateway/src/main/java/com/win/gateway/util/SecurityFrameworkUtils.java create mode 100644 win-gateway/src/main/java/com/win/gateway/util/WebFrameworkUtils.java create mode 100644 win-gateway/src/main/resources/application-local.yaml create mode 100644 win-gateway/src/main/resources/application.yaml create mode 100644 win-gateway/src/main/resources/banner.txt create mode 100644 win-gateway/src/main/resources/bootstrap-local.yaml create mode 100644 win-gateway/src/main/resources/bootstrap.yaml create mode 100644 win-gateway/src/main/resources/logback-spring.xml create mode 100644 win-gateway/src/main/resources/static/favicon.ico create mode 100644 win-gateway/src/test/java/com/win/ProjectReactor.java create mode 100644 win-module-bpm/pom.xml create mode 100644 win-module-bpm/win-module-bpm-api/pom.xml create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/api/package-info.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/api/task/BpmProcessInstanceApi.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/api/task/dto/BpmProcessInstanceCreateReqDTO.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/ApiConstants.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/DictTypeConstants.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/ErrorCodeConstants.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/definition/BpmModelFormTypeEnum.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/definition/BpmProcessListenerType.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/definition/BpmProcessListenerValueType.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/message/BpmMessageEnum.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmCommentTypeEnum.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmDeleteReasonEnum.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmProcessInstanceStatusEnum.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmTaskSignTypeEnum.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmTaskStatusEnum.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/event/BpmProcessInstanceStatusEvent.java create mode 100644 win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/event/BpmProcessInstanceStatusEventListener.java create mode 100644 win-module-bpm/win-module-bpm-biz/Dockerfile create mode 100644 win-module-bpm/win-module-bpm-biz/pom.xml create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/BpmServerApplication.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/api/package-info.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/api/task/BpmProcessInstanceApiImpl.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmCategoryController.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmFormController.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmModelController.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmProcessDefinitionController.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmProcessExpressionController.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmProcessListenerController.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmUserGroupController.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/category/BpmCategoryPageReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/category/BpmCategoryRespVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/category/BpmCategorySaveReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/expression/BpmProcessExpressionPageReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/expression/BpmProcessExpressionRespVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/expression/BpmProcessExpressionSaveReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/form/BpmFormPageReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/form/BpmFormRespVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/form/BpmFormSaveReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/group/BpmUserGroupPageReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/group/BpmUserGroupRespVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/group/BpmUserGroupSaveReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/listener/BpmProcessListenerPageReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/listener/BpmProcessListenerRespVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/listener/BpmProcessListenerSaveReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModeImportReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelCreateReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelPageReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelRespVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateStateReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionPageReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionRespVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/BpmOALeaveController.http create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/BpmOALeaveController.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/package-info.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/vo/BpmOALeaveCreateReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/vo/BpmOALeavePageReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/vo/BpmOALeaveRespVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmActivityController.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmProcessInstanceController.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmProcessInstanceCopyController.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmTaskController.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/activity/BpmActivityRespVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/cc/BpmProcessInstanceCopyRespVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCancelReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCopyPageReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCreateReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceRespVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskApproveReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskDelegateReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskPageReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskRejectReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskReturnReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskSignCreateReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskSignDeleteReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskTransferReqVO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/app/package-info.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/package-info.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/definition/BpmModelConvert.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/definition/BpmProcessDefinitionConvert.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/message/BpmMessageConvert.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/package-info.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/task/BpmActivityConvert.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/task/BpmProcessInstanceConvert.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/task/BpmTaskConvert.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmCategoryDO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmFormDO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmProcessExpressionDO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmProcessListenerDO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmUserGroupDO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/task/BpmProcessInstanceCopyDO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/category/BpmCategoryMapper.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmFormMapper.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmProcessDefinitionInfoMapper.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmProcessExpressionMapper.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmProcessListenerMapper.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmUserGroupMapper.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/oa/BpmOALeaveMapper.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/task/BpmProcessInstanceCopyMapper.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/config/BpmFlowableConfiguration.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmActivityBehaviorFactory.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmParallelMultiInstanceBehavior.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmUserTaskActivityBehavior.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateInvoker.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateStrategy.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/expression/BpmTaskAssignLeaderExpression.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/expression/BpmTaskAssignStartUserExpression.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateDeptLeaderStrategy.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateDeptMemberStrategy.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateExpressionStrategy.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateGroupStrategy.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidatePostStrategy.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateRoleStrategy.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateStartUserSelectStrategy.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateUserStrategy.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/enums/BpmConstants.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/enums/BpmTaskCandidateStrategyEnum.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/enums/BpmnModelConstants.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/event/BpmProcessInstanceEventPublisher.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/BpmProcessInstanceEventListener.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/BpmTaskEventListener.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/exection/DemoDelegateClassExecutionListener.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/exection/DemoDelegateExpressionExecutionListener.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/exection/DemoSpringExpressionExecutionListener.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/task/DemoDelegateClassTaskListener.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/task/DemoDelegateExpressionTaskListener.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/task/DemoSpringExpressionTaskListener.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/util/BpmnModelUtils.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/util/FlowableUtils.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/package-info.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/rpc/config/RpcConfiguration.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/rpc/package-info.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/security/config/SecurityConfiguration.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/security/core/package-info.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/web/config/BpmWebConfiguration.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/web/core/FlowableWebFilter.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/web/package-info.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/package-info.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmCategoryService.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmCategoryServiceImpl.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmFormService.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmFormServiceImpl.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmModelService.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmModelServiceImpl.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessDefinitionService.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessExpressionService.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessExpressionServiceImpl.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessListenerService.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessListenerServiceImpl.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmUserGroupService.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmUserGroupServiceImpl.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/dto/BpmFormFieldRespDTO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/BpmMessageService.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/BpmMessageServiceImpl.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/oa/BpmOALeaveService.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/oa/BpmOALeaveServiceImpl.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/oa/listener/BpmOALeaveStatusListener.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmActivityService.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmActivityServiceImpl.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceCopyService.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceCopyServiceImpl.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceService.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceServiceImpl.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmTaskService.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmTaskServiceImpl.java create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/resources/application-dev.yaml create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/resources/application-local.yaml create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/resources/application.yaml create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/resources/bootstrap-local.yaml create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/resources/bootstrap.yaml create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/resources/i18n/bpm.properties create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/resources/i18n/bpm_en_US.properties create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/resources/i18n/bpm_zh_CN.properties create mode 100644 win-module-bpm/win-module-bpm-biz/src/main/resources/logback-spring.xml create mode 100644 win-module-infra/pom.xml create mode 100644 win-module-infra/win-module-infra-api/pom.xml create mode 100644 win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/file/FileApi.java create mode 100644 win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/file/dto/FileCreateReqDTO.java create mode 100644 win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/ApiAccessLogApi.java create mode 100644 win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/ApiErrorLogApi.java create mode 100644 win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/dto/ApiAccessLogCreateReqDTO.java create mode 100644 win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/dto/ApiErrorLogCreateReqDTO.java create mode 100644 win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/package-info.java create mode 100644 win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/websocket/WebSocketSenderApi.java create mode 100644 win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/websocket/dto/WebSocketSendReqDTO.java create mode 100644 win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/enums/ApiConstants.java create mode 100644 win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/enums/DictTypeConstants.java create mode 100644 win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/enums/ErrorCodeConstants.java create mode 100644 win-module-infra/win-module-infra-biz/Dockerfile create mode 100644 win-module-infra/win-module-infra-biz/pom.xml create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/InfraServerApplication.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/file/FileApiImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/logger/ApiAccessLogApiImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/logger/ApiErrorLogApiImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/websocket/WebSocketSenderApiImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/CodegenController.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenCreateListReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenDetailRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenPreviewRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenUpdateReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/column/CodegenColumnRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/column/CodegenColumnSaveReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/CodegenTableRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/CodegenTableSaveReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/DatabaseTableRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/ConfigController.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/vo/ConfigPageReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/vo/ConfigRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/vo/ConfigSaveReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/db/DataSourceConfigController.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/db/vo/DataSourceConfigRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/db/vo/DataSourceConfigSaveReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/Demo01ContactController.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/vo/Demo01ContactPageReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/vo/Demo01ContactRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/vo/Demo01ContactSaveReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/Demo02CategoryController.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/vo/Demo02CategoryListReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/vo/Demo02CategoryRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/vo/Demo02CategorySaveReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/Demo03StudentController.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/vo/Demo03StudentPageReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/vo/Demo03StudentRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/vo/Demo03StudentSaveReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/FileConfigController.http create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/FileConfigController.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/FileController.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/config/FileConfigPageReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/config/FileConfigRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/config/FileConfigSaveReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FileCreateReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FilePageReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FilePresignedUrlRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FileRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FileUploadReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/job/JobController.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/ApiAccessLogController.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/ApiErrorLogController.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogPageReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogPageReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/redis/RedisController.http create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/redis/RedisController.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/redis/vo/RedisMonitorRespVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/app/file/AppFileController.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/app/file/vo/AppFileUploadReqVO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/app/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/codegen/CodegenConvert.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/config/ConfigConvert.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/file/FileConfigConvert.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/redis/RedisConvert.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/codegen/CodegenColumnDO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/codegen/CodegenTableDO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/config/ConfigDO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/db/DataSourceConfigDO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo01/Demo01ContactDO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo02/Demo02CategoryDO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo03/Demo03CourseDO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo03/Demo03GradeDO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo03/Demo03StudentDO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/file/FileConfigDO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/file/FileContentDO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/file/FileDO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/logger/ApiAccessLogDO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/logger/ApiErrorLogDO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/codegen/CodegenColumnMapper.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/codegen/CodegenTableMapper.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/config/ConfigMapper.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/db/DataSourceConfigMapper.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo01/Demo01ContactMapper.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo02/Demo02CategoryMapper.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo03/Demo03CourseMapper.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo03/Demo03GradeMapper.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo03/Demo03StudentMapper.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/file/FileConfigMapper.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/file/FileContentMapper.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/file/FileMapper.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/logger/ApiAccessLogMapper.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/logger/ApiErrorLogMapper.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenColumnHtmlTypeEnum.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenColumnListConditionEnum.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenFrontTypeEnum.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenSceneEnum.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenTemplateTypeEnum.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/config/ConfigTypeEnum.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/logger/ApiErrorLogProcessStatusEnum.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/codegen/config/CodegenConfiguration.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/codegen/config/CodegenProperties.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/codegen/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/config/WinFileAutoConfiguration.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/AbstractFileClient.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClient.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClientConfig.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClientFactory.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClientFactoryImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/db/DBFileClient.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/db/DBFileClientConfig.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/ftp/FtpFileClient.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/ftp/FtpFileClientConfig.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/local/LocalFileClient.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/local/LocalFileClientConfig.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/s3/FilePresignedUrlRespDTO.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/s3/S3FileClient.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/s3/S3FileClientConfig.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/sftp/SftpFileClient.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/sftp/SftpFileClientConfig.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/enums/FileStorageEnum.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/utils/FileTypeUtils.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/monitor/config/AdminServerConfiguration.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/monitor/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/rpc/config/RpcConfiguration.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/rpc/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/security/config/SecurityConfiguration.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/security/core/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/job/logger/AccessLogCleanJob.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/job/logger/ErrorLogCleanJob.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/job/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/mq/consumer/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/mq/message/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/mq/producer/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/package-info.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/CodegenService.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/CodegenServiceImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/inner/CodegenBuilder.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/inner/CodegenEngine.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/config/ConfigService.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/config/ConfigServiceImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DataSourceConfigService.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DataSourceConfigServiceImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DatabaseTableService.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DatabaseTableServiceImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo01/Demo01ContactService.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo01/Demo01ContactServiceImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo02/Demo02CategoryService.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo02/Demo02CategoryServiceImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo03/Demo03StudentService.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo03/Demo03StudentServiceImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileConfigService.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileConfigServiceImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileService.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileServiceImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiAccessLogService.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiAccessLogServiceImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiErrorLogService.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiErrorLogServiceImpl.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/websocket/DemoWebSocketMessageListener.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/websocket/message/DemoReceiveMessage.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/websocket/message/DemoSendMessage.java create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/application.yaml create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/bootstrap-local.yaml create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/bootstrap.yaml create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/controller.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/listReqVO.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/pageReqVO.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/respVO.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/saveReqVO.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/do.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/do_sub.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/mapper.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/mapper.xml.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/mapper_sub.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/enums/errorcode.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/service/service.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/service/serviceImpl.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/test/serviceTest.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/sql/h2.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/sql/sql.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/api/api.js.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/form_sub_erp.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/form_sub_inner.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/form_sub_normal.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/list_sub_erp.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/list_sub_inner.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/form.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/index.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_erp.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_inner.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_normal.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/list_sub_erp.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/list_sub_inner.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/form.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/api/api.ts.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/views/data.ts.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/views/form.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/views/index.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/api/api.ts.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/views/data.ts.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/views/form.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/views/index.vue.vm create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/file/erweima.jpg create mode 100644 win-module-infra/win-module-infra-biz/src/main/resources/logback-spring.xml create mode 100644 win-module-mes/pom.xml create mode 100644 win-module-mes/win-module-mes-api/pom.xml create mode 100644 win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/api/package-info.java create mode 100644 win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/ApiConstants.java create mode 100644 win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/DictTypeConstants.java create mode 100644 win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/ErrorCodeConstants.java create mode 100644 win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/LogRecordConstants.java create mode 100644 win-module-mes/win-module-mes-biz/Dockerfile create mode 100644 win-module-mes/win-module-mes-biz/pom.xml create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/MesServerApplication.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/DemoGenController.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/vo/DemoGenPageReqVO.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/vo/DemoGenRespVO.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/vo/DemoGenSaveReqVO.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/SchedulingcalendarController.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarBaseVO.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarCreateReqVO.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarExcelVO.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarExportReqVO.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarPageReqVO.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarRespVO.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarUpdateReqVO.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/convert/schedulingcalendar/SchedulingcalendarConvert.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/dataobject/demo/DemoGenDO.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/dataobject/schedulingcalendar/SchedulingcalendarDO.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/mysql/demo/DemoGenMapper.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/mysql/schedulingcalendar/SchedulingcalendarMapper.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/config/DataPermissionConfiguration.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/config/MesConfiguration.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/rpc/config/RpcConfiguration.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/rpc/package-info.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/rule/CustomDataPermissionRule.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/security/config/SecurityConfiguration.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/security/core/package-info.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/demo/DemoGenService.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/demo/DemoGenServiceImpl.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/schedulingcalendar/SchedulingcalendarService.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/schedulingcalendar/SchedulingcalendarServiceImpl.java create mode 100644 win-module-mes/win-module-mes-biz/src/main/resources/application-local.yaml create mode 100644 win-module-mes/win-module-mes-biz/src/main/resources/application-test.yaml create mode 100644 win-module-mes/win-module-mes-biz/src/main/resources/application.yaml create mode 100644 win-module-mes/win-module-mes-biz/src/main/resources/bootstrap-local.yaml create mode 100644 win-module-mes/win-module-mes-biz/src/main/resources/bootstrap-test.yaml create mode 100644 win-module-mes/win-module-mes-biz/src/main/resources/bootstrap.yaml create mode 100644 win-module-mes/win-module-mes-biz/src/main/resources/demo/DemoGenMapper.xml create mode 100644 win-module-mes/win-module-mes-biz/src/main/resources/schedulingcalendar/SchedulingcalendarMapper.xml create mode 100644 win-module-report/pom.xml create mode 100644 win-module-report/win-module-report-api/pom.xml create mode 100644 win-module-report/win-module-report-api/src/main/java/com/win/module/report/api/package-info.java create mode 100644 win-module-report/win-module-report-api/src/main/java/com/win/module/report/enums/ErrorCodeConstants.java create mode 100644 win-module-report/win-module-report-biz/Dockerfile create mode 100644 win-module-report/win-module-report-biz/pom.xml create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/ReportServerApplication.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/ajreport/package-info.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/GoViewDataController.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/GoViewProjectController.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/data/GoViewDataGetBySqlReqVO.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/data/GoViewDataRespVO.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/project/GoViewProjectCreateReqVO.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/project/GoViewProjectRespVO.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/project/GoViewProjectUpdateReqVO.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/package-info.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/convert/ajreport/package-info.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/convert/goview/GoViewProjectConvert.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/dataobject/ajreport/package-info.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/dataobject/goview/GoViewProjectDO.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/mysql/ajreport/package-info.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/mysql/goview/GoViewProjectMapper.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/jmreport/config/JmReportConfiguration.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/jmreport/core/service/JmReportTokenServiceImpl.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/jmreport/core/web/package-info.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/package-info.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/security/config/SecurityConfiguration.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/security/core/package-info.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/package-info.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/ajreport/package-info.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewDataService.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewDataServiceImpl.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewProjectService.java create mode 100644 win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewProjectServiceImpl.java create mode 100644 win-module-report/win-module-report-biz/src/main/resources/application-dev.yaml create mode 100644 win-module-report/win-module-report-biz/src/main/resources/application-local.yaml create mode 100644 win-module-report/win-module-report-biz/src/main/resources/application.yaml create mode 100644 win-module-report/win-module-report-biz/src/main/resources/bootstrap-local.yaml create mode 100644 win-module-report/win-module-report-biz/src/main/resources/bootstrap.yaml create mode 100644 win-module-report/win-module-report-biz/src/main/resources/logback-spring.xml create mode 100644 win-module-scp/pom.xml create mode 100644 win-module-scp/win-module-scp-api/pom.xml create mode 100644 win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/api/package-info.java create mode 100644 win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/ApiConstants.java create mode 100644 win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/DictTypeConstants.java create mode 100644 win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/ErrorCodeConstants.java create mode 100644 win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/LogRecordConstants.java create mode 100644 win-module-scp/win-module-scp-biz/pom.xml create mode 100644 win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/ScpServerApplication.java create mode 100644 win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/controller/package-info.java create mode 100644 win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/convert/package-info.java create mode 100644 win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/dal/dataobject/package-info.java create mode 100644 win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/dal/mysql/package-info.java create mode 100644 win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/config/DataPermissionConfiguration.java create mode 100644 win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/config/ScpConfiguration.java create mode 100644 win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/rpc/config/RpcConfiguration.java create mode 100644 win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/rpc/package-info.java create mode 100644 win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/rule/CustomDataPermissionRule.java create mode 100644 win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/security/config/SecurityConfiguration.java create mode 100644 win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/security/core/package-info.java create mode 100644 win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/service/package-info.java create mode 100644 win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/util/package-info.java create mode 100644 win-module-scp/win-module-scp-biz/src/main/resources/application-local.yaml create mode 100644 win-module-scp/win-module-scp-biz/src/main/resources/application-test.yaml create mode 100644 win-module-scp/win-module-scp-biz/src/main/resources/application.yaml create mode 100644 win-module-scp/win-module-scp-biz/src/main/resources/bootstrap-local.yaml create mode 100644 win-module-scp/win-module-scp-biz/src/main/resources/bootstrap-test.yaml create mode 100644 win-module-scp/win-module-scp-biz/src/main/resources/bootstrap.yaml create mode 100644 win-module-scp/win-module-scp-biz/src/main/resources/i18n/scp.properties create mode 100644 win-module-scp/win-module-scp-biz/src/main/resources/i18n/scp_en_US.properties create mode 100644 win-module-scp/win-module-scp-biz/src/main/resources/i18n/scp_zh_CN.properties create mode 100644 win-module-system/pom.xml create mode 100644 win-module-system/win-module-system-api/pom.xml create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/DeptApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/PostApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/dto/DeptRespDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/dto/PostRespDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dict/DictDataApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dict/dto/DictDataRespDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/LoginLogApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/OperateLogApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/LoginLogCreateReqDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/OperateLogCreateReqDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/OperateLogPageReqDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/OperateLogRespDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/mail/MailSendApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/mail/dto/MailSendSingleToUserReqDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/notify/NotifyMessageSendApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/notify/dto/NotifySendSingleToUserReqDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/OAuth2TokenApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/dto/OAuth2AccessTokenCheckRespDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/dto/OAuth2AccessTokenRespDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/package-info.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/PermissionApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/RoleApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/dto/DeptDataPermissionRespDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/SmsCodeApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/SmsSendApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/code/SmsCodeUseReqDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/code/SmsCodeValidateReqDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/send/SmsSendSingleToUserReqDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/SocialClientApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/SocialUserApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialUserBindReqDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialUserRespDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialUserUnbindReqDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialWxJsapiSignatureRespDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialWxPhoneNumberInfoRespDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/tenant/TenantApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/user/AdminUserApi.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/user/dto/AdminUserRespDTO.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/ApiConstants.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/DictTypeConstants.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/ErrorCodeConstants.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/LogRecordConstants.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/common/SexEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/logger/LoginLogTypeEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/logger/LoginResultEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/mail/MailSendStatusEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/notice/NoticeTypeEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/notify/NotifyTemplateTypeEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/oauth2/OAuth2ClientConstants.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/oauth2/OAuth2GrantTypeEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/DataScopeEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/MenuTypeEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/RoleCodeEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/RoleTypeEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsReceiveStatusEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsSceneEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsSendStatusEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsTemplateTypeEnum.java create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/social/SocialTypeEnum.java create mode 100644 win-module-system/win-module-system-biz/Dockerfile create mode 100644 win-module-system/win-module-system-biz/pom.xml create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/SystemServerApplication.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/dept/DeptApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/dept/PostApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/dict/DictDataApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/logger/LoginLogApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/logger/OperateLogApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/mail/MailSendApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/notify/NotifyMessageSendApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/oauth2/OAuth2TokenApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/permission/PermissionApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/permission/RoleApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/sms/SmsCodeApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/sms/SmsSendApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/social/SocialClientApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/social/SocialUserApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/tenant/TenantApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/user/AdminUserApiImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/AuthController.http create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/AuthController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthLoginReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthLoginRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthMenuRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthSmsLoginReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthSmsSendReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthSocialLoginReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/captcha/CaptchaController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/DeptController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/PostController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptSimpleRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostSimpleRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/DictDataController.http create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/DictDataController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/DictTypeController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataSimpleRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypeRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypeSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypeSimpleRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/ip/AreaController.http create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/ip/AreaController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/ip/vo/AreaNodeRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/LoginLogController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/OperateLogController.http create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/OperateLogController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/loginlog/LoginLogPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/loginlog/LoginLogRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/operatelog/OperateLogPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/operatelog/OperateLogRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailAccountController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailLogController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailTemplateController.http create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailTemplateController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountSimpleRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/log/MailLogPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/log/MailLogRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplatePageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateSendReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateSimpleRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/NoticeController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/vo/NoticePageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/vo/NoticeRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/vo/NoticeSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/NotifyMessageController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/NotifyTemplateController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/message/NotifyMessageMyPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/message/NotifyMessagePageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/message/NotifyMessageRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplatePageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplateRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplateSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplateSendReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2ClientController.http create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2ClientController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2OpenController.http create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2OpenController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2TokenController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2UserController.http create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2UserController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/client/OAuth2ClientPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/client/OAuth2ClientRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/client/OAuth2ClientSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/open/OAuth2OpenAccessTokenRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/open/OAuth2OpenAuthorizeInfoRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/open/OAuth2OpenCheckTokenRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/token/OAuth2AccessTokenPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/token/OAuth2AccessTokenRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/user/OAuth2UserInfoRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/user/OAuth2UserUpdateReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/MenuController.http create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/MenuController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/PermissionController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/RoleController.http create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/RoleController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuListReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuSaveVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuSimpleRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RolePageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RoleRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RoleSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RoleSimpleRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsCallbackController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsChannelController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsLogController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsTemplateController.http create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsTemplateController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelSimpleRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/log/SmsLogPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/log/SmsLogRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplatePageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplateRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplateSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplateSendReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/SocialClientController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/SocialUserController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/client/SocialClientPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/client/SocialClientRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/client/SocialClientSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserBindReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserUnbindReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/TenantController.http create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/TenantController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/TenantPackageController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackagePageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackageRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackageSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackageSimpleRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantSimpleRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserController.http create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserProfileController.http create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserProfileController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserImportExcelVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserImportRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserPageReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserSaveReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserSimpleRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserUpdateStatusReqVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/dict/AppDictDataController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/dict/vo/AppDictDataRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/ip/AppAreaController.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/ip/vo/AppAreaNodeRespVO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/package-info.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/package-info.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/auth/AuthConvert.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/oauth2/OAuth2OpenConvert.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/package-info.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/social/SocialUserConvert.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/tenant/TenantConvert.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/user/UserConvert.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dept/DeptDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dept/PostDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dept/UserPostDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dict/DictDataDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dict/DictTypeDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/logger/LoginLogDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/logger/OperateLogDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/mail/MailAccountDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/mail/MailLogDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/mail/MailTemplateDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/notice/NoticeDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/notify/NotifyMessageDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/notify/NotifyTemplateDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2ApproveDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2ClientDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2CodeDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2RefreshTokenDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/MenuDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/RoleDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/RoleMenuDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/UserRoleDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsChannelDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsCodeDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsLogDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsTemplateDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/social/SocialClientDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/social/SocialUserBindDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/social/SocialUserDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/tenant/TenantDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/tenant/TenantPackageDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/user/AdminUserDO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dept/DeptMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dept/PostMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dept/UserPostMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dict/DictDataMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dict/DictTypeMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/logger/LoginLogMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/logger/OperateLogMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/mail/MailAccountMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/mail/MailLogMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/mail/MailTemplateMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/notice/NoticeMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/notify/NotifyMessageMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/notify/NotifyTemplateMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2AccessTokenMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2ApproveMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2ClientMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2CodeMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2RefreshTokenMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/package-info.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/MenuMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/RoleMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/RoleMenuMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/UserRoleMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsChannelMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsCodeMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsLogMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsTemplateMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/social/SocialClientMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/social/SocialUserBindMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/social/SocialUserMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/tenant/TenantMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/tenant/TenantPackageMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/user/AdminUserMapper.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/redis/RedisKeyConstants.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/redis/oauth2/OAuth2AccessTokenRedisDAO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/captcha/config/WinCaptchaConfiguration.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/captcha/core/RedisCaptchaServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/captcha/package-info.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/datapermission/config/DataPermissionConfiguration.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/datapermission/package-info.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/AdminUserParseFunction.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/AreaParseFunction.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/BooleanParseFunction.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/DeptParseFunction.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/PostParseFunction.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/SexParseFunction.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/package-info.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/package-info.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/rpc/config/RpcConfiguration.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/rpc/package-info.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/security/config/SecurityConfiguration.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/security/core/package-info.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/config/SmsCodeProperties.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/config/SmsConfiguration.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/SmsClient.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/SmsClientFactory.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/dto/SmsReceiveRespDTO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/dto/SmsSendRespDTO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/dto/SmsTemplateRespDTO.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/AbstractSmsClient.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/AliyunSmsClient.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/DebugDingTalkSmsClient.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/SmsClientFactoryImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/TencentSmsClient.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/enums/SmsChannelEnum.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/enums/SmsTemplateAuditStatusEnum.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/property/SmsChannelProperties.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/job/demo/DemoJob.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/job/package-info.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/consumer/mail/MailSendConsumer.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/consumer/sms/SmsSendConsumer.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/message/mail/MailSendMessage.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/message/sms/SmsSendMessage.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/producer/mail/MailProducer.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/producer/sms/SmsProducer.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/package-info.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/auth/AdminAuthService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/auth/AdminAuthServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/DeptService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/DeptServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/PostService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/PostServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictDataService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictDataServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictTypeService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictTypeServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/LoginLogService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/LoginLogServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/OperateLogService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/OperateLogServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailAccountService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailAccountServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailLogService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailLogServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailSendService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailSendServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailTemplateService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailTemplateServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/member/MemberService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/member/MemberServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/member/package-info.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notice/NoticeService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notice/NoticeServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyMessageService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyMessageServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifySendService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifySendServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyTemplateService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyTemplateServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ApproveService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ApproveServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ClientService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ClientServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2CodeService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2CodeServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2GrantService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2GrantServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2TokenService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2TokenServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/MenuService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/MenuServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/PermissionService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/PermissionServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/RoleService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/RoleServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsChannelService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsChannelServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsCodeService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsCodeServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsLogService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsLogServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsSendService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsSendServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsTemplateService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsTemplateServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialClientService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialClientServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialUserService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialUserServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantPackageService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantPackageServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/handler/TenantInfoHandler.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/handler/TenantMenuHandler.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserService.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserServiceImpl.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/util/oauth2/OAuth2Utils.java create mode 100644 win-module-system/win-module-system-biz/src/main/java/com/win/module/system/util/package-info.java create mode 100644 win-module-system/win-module-system-biz/src/main/resources/META-INF/services/com.xingyuv.captcha.service.CaptchaCacheService create mode 100644 win-module-system/win-module-system-biz/src/main/resources/application-dev.yaml create mode 100644 win-module-system/win-module-system-biz/src/main/resources/application-local.yaml create mode 100644 win-module-system/win-module-system-biz/src/main/resources/application.yaml create mode 100644 win-module-system/win-module-system-biz/src/main/resources/bootstrap-local.yaml create mode 100644 win-module-system/win-module-system-biz/src/main/resources/bootstrap.yaml create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg1.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg2.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg3.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg4.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg5.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg6.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg7.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg8.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg9.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/1.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/10.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/11.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/12.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/13.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/14.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/15.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/16.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/17.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/18.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/19.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/8.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/9.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/2.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/3.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/4.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg1.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg10.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg2.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg3.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg4.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg5.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg6.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg7.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg8.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg9.png create mode 100644 win-module-system/win-module-system-biz/src/main/resources/logback-spring.xml create mode 100644 win-ui/win-ui-admin-uniapp/README.md create mode 100644 win-ui/win-ui-admin-vben/README.md create mode 100644 win-ui/win-ui-admin-vue2/README.md create mode 100644 win-ui/win-ui-admin-vue3/README.md create mode 100644 win-ui/win-ui-mall-uniapp/README.md diff --git a/.image/Java监控.jpg b/.image/Java监控.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ad522ab058e02cdffa9c770e846df2514d1a29b GIT binary patch literal 115185 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

yN;~^+XJ4>gCTM@P^R;nQdr57PhK_qt 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 QT|!Cg5PjXI`F;BT0IfwqM*si- literal 0 HcmV?d00001 diff --git a/.image/MySQL.jpg b/.image/MySQL.jpg new file mode 100644 index 0000000000000000000000000000000000000000..64a1940c2236f7aa41eba6aae5f7c6e69ff44453 GIT binary patch literal 145623 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 literal 0 HcmV?d00001 diff --git a/.image/OA请假-列表.jpg b/.image/OA请假-列表.jpg new file mode 100644 index 0000000000000000000000000000000000000000..787bb73fadc943777a33af6aa4690160b3ab70c8 GIT binary patch literal 156000 zcmY(qbyQp5^934;6)zMh6n6p?cc+B{A;E$dcPs8z3dMpH2^OqS5}-JxSb+jXgG+ID zid*sW=;!-;Z>_gh{zy*Fy)$Re%${@4+BZg1U6}~~IX(aYAW~IP)CK?uQ2+pL*<;Ly z5j?k8M*!f_ohDdE>HhwnUqSEu;`;LPis6L}BNMBLsN~Y--tFC;xuq?2;{Eyg`PJ3+ z>FL?c&CSKd#oW@SxrO!g{D#mAel|9sLhk+M?)i`YnWLj4O(U1x-M!7tO-pOLw$6dQ z{e#o<%afCn!=sbU?cLS&E%ea%@c2|`-_X>|!u;augC{>a(Q9k#re@|wrnU=mwB_dIySjUOc={Tfm~QXvEHAGd92|bFtqTf%Ush2i zFaN5zq;zg>zN@=8Z}`5l>T67FLR55YZ!bE(0O{iDiO9;GnE0hqaNqH>tFFE=1)e@R zIh~%7H99)xR)3$6m~wG*|0?g^>8<MvtnSxbFYCFZ$ZCar{@`!026EHbh-3w(H(KBq1W@ zb7M;vGbL4Z>wt)o;hXaNq`V3tc}*4}C1=lYTi17$Uz^`YCWW`%+qu67a=oCWcqSz+ z7nhui8oU46&}MIAYvvprn_1lT>qK1DgqNN!H4F7ItswiYAy?+Ty-$=w?LD`+3aYgB zOJ#$TKTKN1ARkrTy?m2wsXMfEMJH>PT~Pk|wW(mlL9BbUyr=XYetx6dU8 z6;kRVK!cYr?LbPBq7u}hOW83AYjg zKXgwp13WUNS5;Kd@tfUSc#*s+PZhc%(y0`D9BM4$^2L@8CZ)JZnH_}?5|#kaM?^o? z>FQ)GZf)}s)3oj|GiN&MxWOVrbt|4sPSJ&6KV&puIp+BC!dj3C`tOHylFpL#zak7R zN;WFwhhRK>9TA+#=8?F?9fxN{Yir>?jPP-2gTm&J4w6T4jmTxn9ZS7!@3eWty2&o* zYH1PmneNysv5kNN$%mrF|l2#qt%A1a1+BM(nyHA(}&T0p?)Ed8TNb?oV)`5~3a*7&CS-{X}@`sz=7FNW= zb)>oBGHeGpmC@uTyc_S+kV7>l#VWxXut0*?*5@h25Azlyjh_PF*T>i7hehTK3MC2V z^#2?zV%M=%NX_{C(%`I%^B)4ZI%^z2ex9Lw z2V^8I5HFDr6PM|8l3loMnllT%#Ky@z8@|ePnI)NpL2sbwA|2Q+{6sm|885R#sP$p4 z8%$Ck=wKZjA(O@W`iB#riLZbw3;pX5)sMcQ#Z6e{byMZ-vOYbVIpTzDZc9$~zi47f zoW}7{P_s;NSS-auxyIoKn<;iV1qpJ8Y8(;LeZu3Z`R*-l@4qF|nA|o!%dQG0 zJ01~@=_d>P_UtBo)bnX-u4@i+PhHVK@;B-DioZjjr=N|(ade8<+Al6<;y(U&>5sh} z4GkJ)^0vGWwn|-j`1`a^6y63zQu2#-jim81?sY44vel5QRXfg~(Dh>L-T~$l1M2?J z=omFl)m_l)(TcOCHLQsJYR)-M=y7VEhS#BQpZ_@=7;^psy1m|PX?X`a&rb_3 zVKW;9VmGOtf7mN*(nDgKuk+nEhMCFqx7znjy}2-3d-3AtH$IAx6e5wwCB-tz!y7PE z<(zW}hS1T%?}ogxzk7uATz!pNts32~RHTXTu6+NCJhscS+JGnRrdvXahBuq+#nlNX zU&LR9qh{4SpEFJbbIITO-@(`|EAY}Nqm%RN>+5r+j+#ntnG8W47j*l?M1m06n=T6( z8*E&C+DmOj_E|4|wVjM6e}q0)YF=Q-lOZoee7E%O&sdz3EGrQtN$U$w^9O^Ju{J6o zJ3Ay(2k;Ae3Xw?u=z^p9Ctfahuzz!R)TY~4M`OeJ{;|bCAI_oNRDZs0(-%W#wSLSA zQ@`<0#tpt3gXhT6oqcmPiI=9|*`HCVQv(q%(*zxbZK}l!i?Rtg;>&CI#*tET>j|!H zI43|F`4N@KFbSE@xa8J+0bTFy)S0<^!$?2oZ86FLp2@g>xw!!~kBb}C&nzO~+W&k_9rsk~a z)KB3)dL5-PLG-k8=2aV!BjEK`QI+ZqG=t(frl+a~Wy_bUM8Rwi@3W|^wk};}*Y$lh z8LaWYr|e4Q{BU@GAy39sy1q;au;ih0px+BIXRb&`yaaA-yjU_cl$g#Bg}D)LshfZN z?hot7SrH5JkqT19w6RicF9{TEo%}IkZ;k0VL#qv?1WYq>0iwX4v5#KRkUsaL0<>C} zIAFG^AOtY0x(^8C(g_R%(rtdG3{#Ag=%P3Nl5}l9grv*zs&X}(iDu7dzBLo*RLJB3 z-5{f|WqLxW^I>xWszD=H+MhV3;f_+a^X(v54kKel4WOZI zQ&fA61zn_LJ5is1>2jpGY-(agPbzi*s8A|(5(8$BrFk&BpI43))x)DM$e#z=A)W4~ zhR8ka)bd?6Zr+^!vez+ABSQ=HQKgNGD~8AwmS2B%g55ZMcIS#?SJW`9LnOChwc*pW zg*%`fE4p7#z@1$r&NcO*|E+*J{+e1)ku131(}sUT0Es3zG5*ZBu;G61hVFQQNPcfR zDTP>75HmY*p$#S6`p!jWwd&)9&I`U>9ZX%tp-}vYGNyHCsBLNX4;Gjx;9LEDk^@6# zjKZZ1(LV!0GhPJE^7pfc6_T?4u*1SIqE)C@l!l?vBjf2`DM_oK7tyZb2$Z#3Xmj%| z4f|M>9yGws6CxTKHU8kFjUvQh!^3nozYO)S0J;R96Z2lp(zC}bo<2%_e`25nm9AKU z^c~8Kxx`;^keI7XS~P;29J%O#&IAEBd*r@2c}1Y)kSfwoBeMe8>c1z zdcB5e`xxfuAe!~Crc=S#`|~G<5rcmBvb~=lY>~q zFyVZi)sV(Ynj?)c)A{8pvz>r~L;wCH-1aT|w)A8d>>^^V3X(LeTr?4JQgASwdY7E~+B`!x>{>sX=x zSavax^IeFWIGakvX==~CYeF)!8X3*YP%*sbk78NPe1=q8CYJ#JF?b%OrL3p;2^RC8 z5d)vR)reG+)OR&_F|;IQ=jV0r)Kzbaqr}F{5_mt~e0IWj_q>`MRWVC6_?MqBd{o() z0lwjG&WjE8T(YY6cKF!}T#sdpyye^doU3qjl*7rf)w`P)oeLhAhUed>Iitrq%i)NV zbMa50LtHc^m1)Bzo9Xf!{qgILwu!N?Qp%N37MH!Ncoi5gUr#GE#x zd?xK_9znw2&in@hRz{epi)>>2^z5E8vCngi+zQLmi4aRSYG?V4yJtw}7}n$5`gN>= zi@V|y_A^pOs2Ux_y_7K{c3_VbT&HOJCbO&I=EPOA#iIeQ_Y9aa;Zdp$wXJD1uFzif zpi5`q(LH)8s+06&iEq`Plwu3}o6c8!4-cX_X47usSUSvpJp5Kscm>enJ;IegEPw?G z_;}2pNSW4eJroerOB` zvV;2cn{-^`{lx}e9JRh|IQAHvM1h6%VrD51Fuk-iixDr{2QjsJ9+IqF{=N@b`SEXq z612jUMZZ>A5;4Xu<{w|nhrWeMJ=x$b(?L*I}-5l~$!Xz6u$mt^pWP%7}M3{sSysrT2D<8Uy!ecAu$xDFGD$T4cEE?NiziWI$BE_Q*fVh}45eo@Xv!PO77^D+F&D(#9^P_!>?9D8s z(z0Jxq8sff@r$#ekz^G*rP-kj&H=R5e`A9=hi0_1w#{$FvXMTqUjdrF3)!>V0?;R+ z80F~f)Q?W=3W2?6e;gGW0wS1}Fxp7eN;~Ls*BqdiYCfM6?(C>vULWyX2=n74Nc8+2 z4eARbgyhpTOUo`I6V*E&8@ihYx`!PKv=c!DwxT8gpNypcx;!_>*LbzU7nNC)NX;;e z*(@7egXmh+hO!?u&QJ@?d&wih_UP%aO$tO>T3TNmkZ*7gQ|NI`y9;WL!a{|y4e?&B zaIw{p6;7W8S&+Q&wph%{kDRgXugurL|I?1SpWc{k0Zmc9&5Tyf1>)XCP=&{ZZrxX`bRYVQI ztnlxXJEAYjg0;oFL?@J(?5$y*VEC zq(!KY{ovGN+B2$nxzujx^uA6Zst^d;Gk?N*7-J8MRsQkiPke~mWQ10)csvSgT+ne< z<8@sX#*qzUx-p$l9hc{NjsVqG5^5p?j#&bHO8@E)pxe(YIO!#RF$0aYLZy9nOfQ+@ z8LJAd!Dt7^7ZJ1F7DUbCnyMo*2bjbohe@VEKg#9K33AVniJ+{=u2bo9p1CbQbRGc- zivz-5U>!LDF9Kv4t8bO6K-pzbr#g43+4;GOmCc_Q{RApV!StFA0wpZ!wNjg7vI!gB zX5YM!k#6k0V>LXul~QLlexF}tfAaucj6z?&eTWCPA$=J|Nsl9P_3O64H+#7JmqF&Y zA2(R|>#Y9mj{9#^8Ww28W)jnqwV~EHGNbFk4(Q}gU6&IU)|VyhvDA&*PTC3lqoeRj z40A4dNM=R~s{`88Z@~4{6nyt{?DtJna|`LGw8xrIUefB8=O{)2cXxjou&|ACdDGJ? zxoejm)h@kik~ivHy#lX4N&lkpQ$-pAPqy6i*kfhM9oXZ9BVrX^Mdkp!b(?R5I3 zXQTBJE+e*;2Vz6PU=>t;q&9-=wLp6D=V41n9Z_ekifc(!x5(_5W!V4diLE79``Kt} z;({s^W$gm`CU;!K0Qtk1RFvJzzK(kG(E*!qX|E4rcrO_F|7Iu1%c*LS6h1)MG{^ z$~zoG*aUgE2C~RL4~j=s{mZ_WhQ$f357*7tR>=mUz}SLR#YBFbDIq8?$djMQ7Scn9Uh{lMEL!Sm~6dL%02^z&vEk8N&R z7}NSI>h7}(76?|Q?Xwnw9O08h{no#fOWs#|#h2|2h z*$t{-j$k%dln?fXWa_^HLYPSKh~k;VdH0fsqkSnzEtp{98UKThgV-PTlibDvNc{aX zs(1-@b85i$@T6Q%k%S@s7Sa(TO(afMh5;sk%-k?Ce-^gELs_^G!m>1lD1$c`BlQ9E zwTQ5gBuTM{&2Xda%WDVpNF&f@sZry^9(Z+zsNRT^_urCMg%bPV$auT)M+nQ{2hN-4@J_%N+J-)=)=fgk{1}_9n7JFuw%2dHZK=bBy(m z4uNI} z2@OvO6xq;5?zU;L8T^gf;(SYpVNbu|Ba#!sW3?h|X$AOsar-03(&xAX|2;HbJlz2z zkZ@{`9wjsFmmi9CG}I?il6Fqm(t+R$Ine?jPGAQoJ5!GpWf8y}WRKo5{lF)}cKM_= zZ16>BPt_5KS%htXnc*cxz4s!P!4G9fdp6uB9cA2aW7?Zq0er=G%?xorm#aoemlbiU zsph?ud#;LDCA9trXM~$89+FWOiYRdWKnJ6LEwIY=b$JTyfrVP?|IA;Gl74iww)FeF z!|@Th*qwb3Q>@3g*XUI#k)=jK7wZ%NfyMju!m;0$G z+Aiai{zO#aJ^tPHD121L#!F2LI|fomT=&-jvVsXCeHsoU%Ud0M*=7l0!uQjf3H+?( zqK%oy>xdOkuQ%?9_7p1C!VH}W=a@l0%?B#(L_uK1^YoAs%%DoXT4t6{<^vrh8nIWw zub^@7y#+0QO>woQutKPX3LX%e^>lcjo)7H4Rfz%dpkDePchbve`iq+hAp}$Rm)Y$> zZ+wz69%6!(H42B;BtI)D0O}+d@Y0MI0KH`N`-ShSVq|`4f}r-_x4DhrA=-Uw6dJNo z`W`(68m6{|mvqi0|Lfm9pR%^|{B;WXRKTgN1q>gbO@84pT?abNOO@ym%*P()9m#$G zm|fVT6+Iv2rl3XyKf1r?&!d!w+QXKd(-MO-xbebFA(;^$amZQeWh3bQW1FQUub=up zb5+q)fkrAJN1#+)0}$0MAc+gG6F*^}Blz?*w0phK61k#r2{LdVWAo=rzGD_?Q;~W_<4JP3y2#ihO9&tdvuc1yPwa)+0GKh#gvGUTc}H(?sglKRnaS$Bc*WH zh)Ngx(3^h=#_U#@B|dQZB>4BR6s6=SJc!(|Bp`QsC2h#hR0&$8z~F;18;KJC?n1My zNy!?5RVjXQqC9_D)fRygm#qeTmnHpUkM4hy0yVA_se0(N$A5l5YHz+Eh~Z)kI^DvS z>?dMJG)pznnm~>EIrgO8)5ZH!zU;%yFQ87~O3wLfe5Vw)OfM+mQIc1Uc)-U+9qr z&7(4%=Jx5}4HUVQ#Jgr55>Gugh=6jj?@+oM78E*gWx;}^o0*v@8rX+#IQnu0 z|N3=P0y5){dmJpM1#QLZ_2vpbHiZ~!H|}()pRq2Loc&4&(Cg((7EwxNd7UQptwZpV zCxBUBY;!HY7G(A&=YHmACSM?w9<=rKqNlM;`&mhEh1HK&t`FOocVB&FWgu8ufOj!F zg{lrjGZIt+FuM^Wo_DZEylmvbUeai)v2mzDw=qVahEv`$sy(X#@sebuoX&Hjn**0>+)zIpg8s zZDq9rq5O=sAGxKX)-h0x7nI8h_QlB@5Q#8#%V)w}7%H$= z7ygC~e-d=q&7>&I!qvV#=j5Fb+?cp-ekWRn+WwP(If1H`-r(Yi7z1|2W)XgWX9O*i zJwJs&cHSs4Ou!izF?VD_mTwb-p}8^dQvfZVx~84qMz)Wh^U5qW@m3}R&V4u>-c;(k=ccq5pM!m?WyI}0%qFtoE| zkj@@OkOj$=*myds_m1$8$Pl)a@d%UvI)iN9daa1cXP2B?RI5W~G7SE7D%>ZL>ny=T zQO)e(n)`IY3sQ^82oKKOHU{X93JGL%j=|H#4VbR!`mO+_xb%y;bg+MwF392Mu_D9}uW1>!fZ1Tf28)4^RcZ3Q%f#;FvNcY{pNcI#DPCf?fKL3Y2RQ z|2I!+%P7tM$e9(8Gz^uFe)^q4?0AzGfy%a0R=yQ!Mg^4wbEs0YW);Y6xW2*HDl7>< zJn2!}Hq5*BM*^Qa$wQcEQ&WzkCdmh-0n)*S0ho_U7)Ha#qF8iazKf3fJZ8CpCm-fJ zMIPPCH>|N-UG^jAovai$F)r02cJy1e@uyEF;LDw?gn{L$Iuj7>9Qsl?cRiq*e+Y&* z_BAV%$2&70JiK6_UTlpfUaS;hI||`?gZcDyC+9;gG0o3QM+aT-Rw*mUt5o_PD^X&> zsx^6LvEA?cD`*fSUx8Sd7}9$tLbezf@X>rBLiVu9Us`$$vNb+l0qtPfEeF=pRj(&C z{POOy&=1L8^uBB6$)AFH`{WNd{LLZyZ96P*y?jaB66NwEtZH)?NjGQMCZyi^FBFkZ zYNU6H^`D2M7Pq+#UTN$dXVZVGTtBnzrn$yln+%8syLwIAk$X}klW z&A3Vfqi8D!2wp3LN7>p3zK);832NF{WRef(PV;~+BfGcg3QB4*Vyp-SNWM(iH(c7G z0g$ZU80bU-UzISx3IDA!_-MV1xlgGfzd)%83PFlQ9OxHP%jkJzOdu>{IGHU@OnUPP zal+fp8(M=NPT3vXIx4Tmx`4!z(Z=H&y|=0fhd_tS!h?Ok%O-DO91UUDxhu{11MYsOcWpe_7RxiGEJi=X-$s%=?|JNxwPQhNMux13He9ZA$eRq;#q z9T<(pH$rht0RyljI&?`rk{ujD5;dHi%sDW7?&@R*>1vBz^tF2np#RqlF?&7Bq&VwS z3Ga^n=;HM^UUp7jOiY{(Q+k_2SXsn4Y=@7)LNZX7K+)kMRm=J4_Wwxc*=rZ=vl6zJ zHj|ivO8n%R4xYSN{_^4IdY3(+76`m5gO=~u% z>=^ILu`aaEx>Se?a-HD(C20ICfD1z1AgUAyN+aq*%cs4B)?a$Rf%(3VV4Sz@L`0ZP z!h0&~wY0Fl)8|wrvvS4B6572g1j?8T(LD`_ElJ4QUCWe}8oL&v6Z2bJGv&4{QKEOW zEcH)WXw0MRms;4|mBIA2{as$4?-ba|VA8tmD;+X*cwzD2&EijITR&+jziDUEl9IZI zEv!48yAmz%ZFJT|?!R0r4z>!ngGR6I;nTo&QmI9$N*>t^Z}(UChXjvK2mi+ZLd+E0 zA4~Ys58|#fPEjO6dXo=fJtaU0ay66rN8LXy@>TO4gFlfbHXJ+1I5_@Sqx`oCV{qni zjHg=LB4z=Ve4rvuioO_5Wwjq8P(|yl?G#f8bQ5Dzh7PO|woZ++$Vzu96xum)E&i;5 z1Y=QH#D>J2ZMhw6nyfF2I2fPsa~>+D8` z{B0_69Kgk|{$dHGblOQTX=A&c)p7%NPAE&Z#*}O)O+DqiWqmh~Su-;%TT^o5%O`6z9@OAu zD%u8G@uBxIKL}Ane`RK&yEra4w$r7#Q|CBc0yc^HuUy{|O=8Z~i6_UDu0Bepcs`~= z#C|WLR_&aH?XV|S#=S1Y2IaXfVe7JnUJH=DZF*PZ+tYxDsX!k2eaE;wFbKa84n_9j ztukLMTTjx5E`E#EEX>c34tj6R;l%jZN}1X3#XZC0H}mFaoBKmHV1NI>oUZ8yHHX`J zVO0G$KJLN~k8LQdQje{Ok@2B8Dm{zp)1GY!MJu#6R-};SB?#M)UjrX*8k^Gp z*!0&%lC0~bjb7R=BtQt3qqw&b84%V|`D%QEj82*SXNDm0R`7!+h6l{{*^fXcS>HcP z8)p+va-lhwh*Uh->#9Bzd5%r-pnOnr7fjaIRSnWCQN%4G-z^F{nE$yq3+3yY(FpQr zVR?@aSdMM^uB=7%7?XeA|NWt2U~0=cKWg(BI@^On8UohF+l7qybr%dcWK2u&^kfZ;`#WmxtPTkfr{g~;ki(2UD!jOd&; ziw!Mefz!@iS_G2GsC}}?2M8tc%9aJEZ%uJEs=@=z|B>*Ia(GqRSL-Ge62HS7S&!%05W<90}r5t(1EtKh4Iqm!YBpo;KEQ+Nux?L4Sx zF6F|1`{(L^c?){5=>{=O+cY$=@vkno?CPXGIqA2;ckSJD z!3O11f8?clnhm%S`Fe70=4@@HdhURu#kAD>L75o;OLCmsOFfx&=h>|C!sk)@Bs$YB zxY10DqI%<;qPnW25|~s60I*Ngv*C>ergUApJ%Kvf&`WHD1e8IUQN<6&?5mb~;2~_N zLMs8J>7UaD$%6WA2TQPoM5HqO|SjLzi=3GY!Sl(y^Hyu7{# zG=NWn0&hV=Poe0sB1xM-Lv_kia%k;C5lrkAiP|h4*wz6fcAz;PKfsk+w9vS13_!7} zV%FFJ;x!o9e|`0v`y({_`Vruh3vcjUtarebA zRkhet@m>()yd=r>p_STaH|_WNs=u?%=KAUQD0H2UeDcZTU^4u^Z$)YJkZZ4}k}co* zsFpMs4_Es6-i2LhT4-GtF_0KQAJh#_4-Nu0HEhuPuRptspHG;<=__oSP^_69X4{pN zlMjvo3gvCk3$yLDMlDs^vv1HY5UqO%6SU(0{#395-PEjg%+AiCL230sA!DfX9I@i? z>7v*hgo6WJ58elw#-A%A1ioLS*vzi)R(nS1y5~934r%^F>ZY;g|5SJKMmnfl7c)J+ z&a0ymKko4d0Rf><*JKuRy^TG}cG{#Tsh~)b4gX^T^UBTLVX7+X0|R0cJJ6Z5>>rn1 z=A8*{G*msmxwerh6|o8Kc7i!j2lUtQK*yy_lv~NKT6g2O;O(QI_%>c6zX*0o0rMba z5nzk|EdSOqfOBMexW4nhs+!b0c&7LCmv5zzA#}oQn<0kU29{|Jb1>wBp0y=OxCb^OT4rv~YqjHbP=uoOf7OB3`2RtuEt~`V7SS29fBU%-S>57VS<&+rlnt!DL{dk# zZm8{u*Bmyj?ZWqm2Wg7B9L2$kD_Q2+z}CZU_RNldgc3RdwnJCo$K|DnAcL4vM3ih` z85Sr`#9Nwj`RlQyv1b+O*#mNXvi&(RPtQlwX(F!VbwNEBcf3yjvp*)71B~Cmwz>GU zK=0dc?huu(Cb=nN&-!^4ZU5-8b zFLwda`ia26Eb!Htzc_gkS@Y!6W`Y*_U=*0@#;>EHqKG1EmzYjHUu0w8RLI5xryepx zp?@WK3+%ebsQ2yspLqd%K^rQMyPn;j22f!K85F;43m1j8Be{!b*H_w}LcU<^Ou;OP z$^I|B#NG517y}Aw8sBGw?96P{rqDJ?rv`=0kVh0h(ce_YA=~*%WzBc`Ht=I z*1ug4pxgCWu>&EmCJ}?+3+eA)TN_zK&|@rZ|L65%JG7qHRL_S=I0tDi#E_n!$wSSe zEM*scSlXCET;I4@1J>6CLh*;v3HncY>JdpIOwknopZ(Nc_`3%6BXmxGIUUBcd77_|2$ zV!t7r*wWS_IfQVc4EYOXoxeKzo#4#3l9hwWNdx96>Am-bEAO2iJqf`RjFIAkIg|Ec`kcb~4Hs*xPWPsV(zj>ZV!Df(43-C5ulcC)o} zGU!hMpHy3-@bgDio)#>=;(hiOF&TV+6B>_xdd?iK{!E^uyWw*`o~`IRcgLSS2&B9i z_F$^-zkVg>BlPUR)80uR%C)ql$;MCk^Wo#HmVr|pw-? z*FrK{bqgxN;3~y?0C;r^(7^=Kex6b$uqqiSzRWTPLSxRSd*sh)T5#9*!ATy=d|V*< zBH&DZ&31y!0EUbh<1NXkWiiv3C#IaOG~A~}@Ah}yAO$AT@qa(5-6$NeD=%DmTX=c7 zb^Z|c{XR0&hl!-#WIa=S_H&r{l=d5TDNxl8#9i248ib@a!}!nHTZSFxbcamo{AxT= zwPI~;s~N9tsx@BbQ+aJsdmg4&nFYarq6Wt8#-%mSe^DDjBu+v?LYn@dz?LX-aMN(M zuN`Fd+^kmTH$8(B+1bYR2}VnMq#4dDew_hjr+1y;eDBr3l|^`x`WH<31)w&jS9CaO zkQ;udBz4`K>rrB0ze|r)w$JyLkFUNyDcHPba+d2!eK``XjWUiDN4yVF_aOO{wZ@yE z%>oEiR(d*T;R+g$T6#6|%sYw^lk1NGfKe*3GMsZp@A29~C%(I|9(S|RZxdyv*_9@O z#4rw}Co9Htcpkq+IGTHZDQhrx4~ zWpk&+v3TT|G+C|o{D=|lS^Mg+VVlby`JS@iT+*jo4`x-)lEF{>;$Q9#I58h|aG5~x zZ$KZueBe#HbIEJ`|AXT(N*+13V0Lc6WFHmIW)5#8XvUPsXJ!No=4TUUJ3 zj?~l*ntqQgW8Y($A2kO}8uv~vE{fMDCm!J#Ki)DQ*WFB)=q{b0(fDaFaxP=$a2q%g z<99He$owg8IPEWzX(CYOnEoSvFBaUkA5}-(wq1b)CIBb_0fA4#cMywUSN~r)9HE zd0F+e2>T?ISA}0i#|Hg1zfM2nH?e8VrAyA$x1bsgPZ@`Q+Qr24O1P!XW}D zU;Cd{J5$1b>h6W6zS0=~n95(~u`c|{yZuxSnbhQh$n2bMr@Pdp?{G6IZ&`$QRCeg9%+juC6LVRaw-Na^!{0qs4^VSDEA)sBi zb%iLsi36&196EW2NjjwrAf1vDT?SAJHlhxMO47n+6~Ci7Q8v1@O&P|5CIv#**d;d=c4BN}ON?Q~DPv>chGkA~HP$|H3M_7_Z+x z&zZ+LJY%!PKM*tgqx-H3q_S+R=4tiyO6n^kd{mg){wlv~mf8Fp;c^qm%F2H{Q%?V7 zS}yXEnFAXzxhPoLiW8FCj6ki2ea^$*EiGrbswG^#(=N_wojeJR-+ ztn{0a+9bx*qjZp|d|lozn}AGKUiKMHxNz^0ya>+ovmz4}rTL1c<*E8mi)&(eIv>bM zW`~uc364!(fU0H=PioEaB0-e|ZlB>X!yhcoe6Xs6wlI6{hZHsv>ys)~ey9(inUpJ$ z7zp(d&lz&L-Wt6|V6Jro=?=pfi++ycjT|J-{nr&v@u5L@E;H*MFdYs_ceZZp+Q(sC z_9xL%eTSaMin&_RCQ$-xA~XW^);VOsf*5OdYC>!%?J~xIYv*iR(B>ah;eJkQH>Wd2 z-r+JwL-60@rO0mEz2y2`?z0WiH&*Es`np)9jm`imWYDK-E%CF@SXpn08 z`p4yp5HXxY+u%QRom0?P&O`cR=Yt6U4uUUU+CtmOS<&i$_fCM@$wun=sbo9kYR*W2 z51P^zzx8RgF}7x-cmS#k+&8fZuMKIontZpnU_%^cI2L#WA$?zItke=m>^kLYn`{KiCdx8mmieabp(#ZARnv$=ZUp zArT&2kXPjs(YuWyHCbpK?z-991?l}CkCQZ23`au@?H+dhTf@>pcnEDS^{NCodWpEk z=>3PdCwd^Cr%WWt?irUDSE?~$w&i;vT%$*nj?m5Ee1 zl?@qx*5gi_K4cu2$oBUv8s4ciZDYB!xah|!xU*`0%9(~g2xZ|mVbg*=4^c>HF6{))RyP+;$#tN&qgaHp-mjc-#t=ljcst4GcAW=ExN&m{%_F$%>rrw zz7(MqU1Sxr`N8uFDuq4ScQ?Pgm`Tm2BnMF2{cx7bauMkBKGNvw7)4+>mikKNyyZ!z zwrVs{8%ttl`!oj=#22BaI1d8JZ+d-S2=SQRud_m7E!sSa5!_gJfW49WP|JV{x*S`vnqj&(Dkq^&xy z3L!jwUN12NmA#8p&_BxFpl&JbSS&w!46JRwx*wY*H-0IHm<9Xq_dwpax9^~_11nk< ztzPUkov*HGc)V#|TmOC@M+*pk0iikmRysf^zqEh zM~-_emkwHeLAD(Q3g^NqrPXqX!+C^|k`H;p7oTggytk%jgByyXtV43)OJnIjydY1_ zN4z4=`!X%D64t~M)XXT3wv>WL)z2kHrIrXGW9W!S16B@o& zW@FIUoXHObUvm3ujb$?9d7zpVKAs7Kigd``3$2>PNYjRL_NiuH{vQfH^nITUD z+TV^A3QaklHtpZNO7CZXCarGgzIDqWV|Fk3;U-vB8(O{or>;Km_aBJW_=vjUThy7b zm{?v|*rgK`AHS~47G3wKDR~{FrNu7qq%~@=M;3tE;$2uNosz#R2$_4zOir?vpW^p> z?aC>=d%cEJGKp9!c>f(yITQ5Jp#zqs5Lz4(zj zO}Sf;>?|}@apLmMy1s#&TyLb@bFMDuiN1>Gk2h%^Q|WJ7oAdTCiFQ$JAMa%Q#VK@wnhMof)H$6kZm2!+;h@qlL<8`@1ZupND5?>(RIo`?x@wVjcYsvLcB@SFQ@{ar2TWm) zU-Q|)Vpm{0J^?P_pjD(-21KI9;%%nK6Jg>CLFhCdW1lVBaCNv7>>vBBN1&kiQKo_F z(}LRClT$G?-Oa);TmP#b2b;omD%p%O$2Vkqw{y4x(;8c2di@;oE!-rlGGt^H)ar3h zzOj>ej6Rc6B_ggxTq^Xzt#OepquhVIuC6XK!v+Aa&EOTiwr0T~R0hVU7ui7D2h(73(X?6|qAA6BPEmYy}dAN=Z+ItchzU___6Pt2G z_I#fH;<-RzS~R%nwTcDn*-gqmnI(TvbOi^0Ut??!*W=eFvqhIsDly6H#jfh;pp2Ub zyqttKCWh5~y8Gb$zML%4Cu{!?U2h!~^%MOM14>E=tQa&>Z|S8=kY?FMVM#%dSUMyH z6hul&a*18K-hdL)DcwkSBOxUsAtDmb;^+JQo%5XM_x!^-%X{YDnLBr8?%a9ZJA`yB zoSD!H76tOh$@4j#qx=23jd-7D1)t%?^KXFPmtrU}ZJK!MV#x1Vb}jIkl_5e&BmoEf zzTh`kVWmIczmJl=WMcsHa*pvkUgEveuZ26r{Cd>jX*-+(bYsu?bQ2*&!v_#bSxS|QS|Hw@rMo7tX ze;qQ9C%>t0vHAVkAGj`kd5@JzoHhSZ9vZQp${9d7Jn1EOR{VN{^_kGHwFxyw8KnTH z#JDl(yxn#ngtUZ#U$h(rE4c}hZ*M#YkV*;fU4(}fM2oQMNC`fVO!oLRmN2dZXtnX5;q;f382 zPoNz8q%6P?#6s}-^`Er%a1ed-)vdDGpnEy#@ZPr2zK|0;k$2xC2y8pvT~j!L_difz zD3enTvlHtCt{>`P%9TmpD?_Xd!aD^@TrCkoCb zO3wdTWK(74v|^VfKVzWTIcDzsS=N}9VRBo>q~Uk{4;B)K^EV-<#f7t5_D|9gGx8Cu z`^Z=PpKJP&&Hf-KSN<@$pHv`S0cI@UHh)}?CRH_-2eqrQ`PWJKcO^#qlSYnF0-z#z zPhL?ZNObOfQac9P7{RnZ&G69Xpru5bu`kb53z}Es{mdE})lvSo?U z;>NA}%*ypmCYm^;kPkUa`}2pB-elT~<=uRzkGHQIi@3>3eE`nWQ>VylkjHxJf-M_s zw7(o+Vb@w{**fwDA?JbNpSN}j%rS7_$Rj{v!``S5-N~Pj)nSkPlKkkOUJOnHySL~N zY@4a@5q`PY6%&)okdCNZ&`w-@Ki#g~*+i;0kT)07u~jX$o=0(z1tc>}^%mUL&sFBXH@WYaoyTJI(po)Igeh|;>ANIrXbdcPP_&$Az>YYl6@r~)=i-fpLF3SWcX z)9h2axvq-Z&Z{BGv`I$6oNxGR6{cu>FV`pD?C5jkKstp=zq>q7YZB4U0C@4yaP>yU z{aIm-pLB z#!!)#bvdk%Z^L_UkRd+6CGmP5kR%3SvdLkpAUTlO3vuyVOhq(<&W_* z*UtMA;Jtq<>QVvBH5Ws@A{#>dx!{Yax z1SP}wNdlhrqC2|die!-x-2PDdoYPGh!%* zu02u(DV9?H^&&^^GPOz0i*aiBmCM)HpHl(kW53IDQau}2bsNk*2EZ!xGh3^j(eo;k*yKIs-U6B89n^$f&Z!5Sm*J?#J zrgLK5^PiIlMy;0^)nTC#F!1%SLqVRn6mn0dziSVgLPFH~ImBKCVibIN2*{T;{P6m` z4(Za`>rnD+$(rtsWQ1EUoM79|r`rA8toS*#DJMhN=ibEAo*jiIDKsn|2Wh6xABETN zNWRZ_8wdDIf{o$r{r>BgL?koMqJu5uI6nz*cE;G5d=plfWhJO67CN0r`{u$^fRr}5 ze9*IM9~zw3GeMy`Ez7sTg)AKs5Mw1j5^dZP4dYv)gx#4H|<{9??614 zl4U56Bbg<)NpHN3eXgv1L~s{zxLHp`Uz+Rtn1Ox=LdS3=ygA?~FfbVy8yll?aUtW+ z&PcfZWym}~vll>sUsi}UD`oaA(t0ofRKF?0JZvTtxl2N0_7k$|?qu((HHs;ZT+@P| zXx_!6wV1vEX7l=|5KRJj-)Ikx!l%9SX9PdF=Q*;>)s<|3?8ifvu(S*kCPCjPiao0} zSUf#9f}Z10s@|+!Y93U$>O+F2wCjiC80|ro0%_#*V6*gdZx9+l@aT-k>&}zUK1Nn< z@2w1&pI0ke!>U*eCNSmE*URPKV&cv+4PKqNZsLyn;nP*Xmo8=F7W3v480y?O$@>5{<%xw2zYbN-X_1^?T4my$}82a<h4c09^+K#A;-2blZSA$*>G72*VoOoK}2iGFPPlOW!A7TrxO zghXo!6)g`=eAMT9!KV085z}SUZscs5^(rH&(QlkUp+hC zuHzglcinqcC-rFhbfBH=B-TshvBtW%(|RQ~Zt+i2?@_9(!)-HV#06A-uUX&7NcqA2 zp{8au&=sh3V&L60cxXuBIq-l8Wt?gstcHs{GVM7Y=*0N~;n4#>+q9OF~I)9T} zx<$~Nsb6#{_ynB`|1D?FV0 z+n+&n)c~05M=JaIjYbLNECn8|_Ym_mIStF(?E!Ri?&Dvg`wIh@-#_M2J*Og>jC_4v z)?)c+5FBUMX_|$T>e>aN;eYUQEO+KGnJWv3Pz%v!*NFZz^;F4eO^Y3wQBi%MGl zbF1%OBkY&ir2m=AlzYU_q+}|;zgET7+RyTvVV*>$C{|wa=B%;y&rP|xIt9KE=EGM~Uj z_xENWt7f)c5V$bA)qB*fu7NKGelY#c=bwA{A%Pt3fm`Sr+EjFA`8av!y z#fi`}5vl5zHgduSu^>U*T`gPr%Jmq``j4|$i37=)GhDJkJX@L?WXI_rS8o|4>{s#) zOW3+;lhQk7XrZ>62PKpv*0%4m7ro1vMrBI*PIkuboXdIC>WIAn#1-$ zoLu+xwc_l@0efuL59{ztdJL3m>agTsUu2-7y*4f!$s)Jf8h3ti^BP?zV(zz}X#a3IoEq~wq?s@txapa_gzS2m{ z=MTMj;1zTY?`Jfa0hn)-O z8wqdMIu84Nx8({xii5twG{8tWa`Fc2j*I6hj324=B1qx~OQ%Sn3rw++%p=^mao?W` zP5l4_lK)At1%EUSFq`?l+LoTLH3g;)rb#DE&qCI3U;81D#?_Thp~x>*`db0R_TvJF zTKy+4JPG-yP?UostZbP_#WW=@C#8v|A7V#wxi$5!9r4Dt&o6(Re6@nN`177^)GN|` zx35YoRKvUop)P@B=xo^6Xk>oj^u3}p$Hf}c1)$uP6~X8K0i&pMIgoy`;;3g1 z2e+)Tam%yl5sv+EY0i;atLgjqJae=RO=96u@YesNY_6sO2BBo5nY*QfA0{m$Oh0r} zCA9whHldoL=ro)Zwy-A*;fj#(n;LsRe*AEvwM*D7E-qd* zZ7!PC5zwpoxKoeXV$+{*Y2A7n3LFw{nKTRyj=C+wb@ziUKR~}! z+~Jl`V=24oNhSR3wG2O%S9Twqv;f#$Ko?-jqv8i1A2!%2qINlJP?(J!-%{g^W5Vf5 z2d9sh(YW*%IQ*Nx^@lI$&^dH5*tmppt51D`n>k*EeekeCfO!YbN_|x%{ekeh7s5Lg zh{wc5;QAx~H~~{$10I=X$vw7$J+Q+eQ)P9nU|VyLaopTJE`TBl>|iN?9gP2fKeaf9 zW8$K5Ra>NAzauNTA{2Q=NEL&L`+m#ks#>VGcxOgaoEDCM0UU8R?y4~N@i>I*sIU+> z1$8_t!4p;&yDN%05(dbJ3t(;zZniuzlt;KIWc;JeO*w@Y;5zCpxGGO~Kz2Uk2!sBs z@YAVJa2(<A$GyP+kVSJ<{>q57v2CKAl3+q|p z_UU`?y_>D8JK^~8!d@t)E`=s(YP~e+UH+$hoh_BIT8?Mswjf75FuOpVlvTc*bM6g)rSW z^t+*tyf9fBjCcaX_e$d7v41e-J@?J4D6%Z>{F2hdM(Z?u`O5g2-f!;$^x-Tiu7J5| zS)+ZzV0pRs^`aw%l}!=x%?$k|fgdSC%DFfOC5%;2CkMU+P;VX)HYkN`6E=hT^N;br?nASG_+v}`}X~i5z0GILCO&pb61VDo?zc2LL z(`rGw_pdpHq*S&lx9Cwb7yr@{FX`wWG^|yB#C`v%3w7(PQlz<3rAwB%2>65S7%T6> z>OP{(a7O3g0iOWi)LU2s2K|B{B=nEfw9YHa&h8^t?c z3L+l;+ZE2*PhG?aF)MP(Aj`k)?SkGUA6Q*|6$>;4*pfl7_L^np$&8xe44eSSLEtLX z;fm1IZ!lF_JPN*l3yzGzbpsFY^3y{E@|Z~;JPF5fIkyQ#2Yxfi5Jvf9C&M4x#t)m# z@(QZ;9a5XOPVkIB5zs<9?(U&r29-sPxA`&7E5vMJGmC#Wc~y7AS9;2FIyJs>;BHOB`q!4x^3DrkZb8ENkxeF{bL;gw>El#5u zzro18&Kby?eK7U*v3$kxn+dW?HEDpxp<=hqGIv9UCZn!`(uDq~82Tg9kS@Y{ zH@cF6qniH^-$d2&eNyRGj5HFy<+>$c36s!3Dr~OB-Qras-H#z}&y?(c-oZ#?;-bS{ zwh}7wx5KM=IG0w|T;rcer>h!q(o36;NNIX)H8+NirQzwJFtICtVt!xg=`eLn=kxgL zU3k_iVE6&{Z7_l>*cE|od}bJ@y$(04vD{}Xy>SpO{MH54H?7VYVJBG|k1;nidhHkG z?&2GVvK~Kp`iXsknkql|W`tY7XRv#FmTzpH%hr^_PMzdm7F_v^MTIwbdx-rc$Hz$c zOrW}>v*m70)UX_1q%_TIM@?xO)B>*jszx@id9?g9&s!xPreYRwWW0HuL7G>YAOPgc{0QTWG!D zZ}%hyUWkgckwsbe1GV zUAGLXFB5QM&5nbcnmmo*UkkSd1YR^HTba-yDqyPJSONwXhfHatD<^Z7K)>d!re&XN zcgbw|3ydAQpVuRlbU!l|5D>0zV9N;#u62sZGHUazg7!z`4aK-Td(Ae7Fhls}bVf7F z-3$6p@=GG?+2^?esfhjC0%PbuZPH0?-{9WA`d)!QIfE75pFSuhTb~W#wdsK0&EwY) zcUpUeg4v}Bum60fO}y>e`p5V@a|1q77|3tThJi=An{`Slb+F57W1xIu>K#SB;YM&v z8oP{0PbA6y`^DKQ>j%gO*>e-gW2$uj)-ca^ezIFPFe?J-ARy`5`%4^YbDuezi!0-e z1Pu$SYQOPoOCv+QygPK(Gu!}yg2AfMk_L$qNQbPqbnoj4-8_Ct(}@gW;_@gBM|#k-X!_{~4PNarw4=S-xD9%MRf~UMXN? z{gDT@E#UYv-Xl9tH2dW*d2Y2L_ov{PY7g2`z!*a#>IfZ}qR}c4+_ntg`Kwy^PIewJ z226xIp#_0vIM9v3#*U`d{V83L_hCh_Ty=Biy^gBD{XqCgr(Rk%*Nd^+I352^cb*LX z++mCbF3PW2BS#CDhS0CE1%gVItV8iogQ9*LNe_eb_v>rQCIxB0g6g^vrhNRlD|qw+ zQi5h2La$i{BJaP4v(lM@mNI_t;&85v2m#Y35w*~tbQp74>?o~7%GJzmfTSP&YW^vL z_#?A&;Ee>ydk&mYeN|Z&N}Vep-0*U6@w`Edy32*(GE~FsX$oKi={TkRa6#&1^`ejk zhp1#=yMw5Fs&P{^Pi?oVte$jh>N{VJdUWRg+q7# zrT|DD$|+F5w{bOl5M5;FY!`R`NJ&X)T<$d%@io55C-Sla*jW4h7K%cq6R0$aBI(w) z)x*pz7hZw6jw<=^KZc`+z(v$>gD?s;IT;7I1I$#)}6Yot&xOE%F# zI4c`l_QQ#F2Qp^0dAIr$MBRerZ->6>MqH+K2Fg<#3ZFD}0e^11|57hWdM9WN2t; zf$2#(wrvKTzWUdpPg$LqDh~LaOVXJ1)E>NJ{SwMiYblg#`Pt6{iu#*lR#$Y`i9^6{ zX$<9UYVKcpsd6FN(!_j~t@$iqh`~Yr6irZPgRvNMaHe(Z?wANy<~UE}%MWOue8GRL z1U$r3Tq9GOd^Ghx0>Os}GEI=2@a;0Tv1{}jK_x$wgR5O0F(?Yn(<3M`=R(dpp3WxP zUrrzCeyUnJs(M1%;#%uo{})b*Xc3}z#l@-wSQ5m$7-@hqa6^>@EHO=AFWPDV6Zfck z`z%tI9X)5DZ2MC23xti0ZJX+%2sAbakM3MrAuD4gXF9e5)Uxh;e}IhApd`8X_4$2d zHKF_l9EfmeO8|DoegF88eWnY)o=M2|LrRcZS&u`Ix~yvM2&H+=aKowB>OH**Gn-Qg zR4fnbHHh2{!wIq$dyuhhC(7}rQGKx&{Wdl=DB{yR|C^gRbl=&Kc2I(j+z=IzHyGzU zc#+4?Wxeg({)s$qJ^vk-@1JyF*3MGs-m}P}2Q?33HcxU(Ykg%SPS~}<(Sb z>18aZnS(c}sj2^XI)(p+|M|5#Q(-ME+|0zxrXf%S=0+e!nKRefO=ZGDk~FlBQ-N!F z(3=`N)4h3bdFa{77kkhjabc$gMlBDaCQJ6YKCb_@sd+Yh)^zV8~C(yqRZCw2r zXMYNM{_*N?18v?W&Pobjcl_Cj{Qh;vP$cygRe$hKfwar2$XP#RPvI_7y#HfvIcBNo zV~VrKn`GGBo0rKoDu}AvR%Fy8%*Q_rsvdEZx4*d1*gSfTLEe{{fa#raOMgDe^AMs^K;RL^++mDMeT`CuAXS8BV?!}% z)L`A)$@yFls(Nh_{k0wgCDX@1Npaz`{)JvG*n@kxFv#uX<2!drZ`!g|!GtAwj-tGO z@GXc2!~bpNDt15hHs{;otk_dA61Sf1q+Py|9ppr6a#yYmJnsTVtoENp@x6t9+j^%@W^^P^v`voL_EsV43N=`q6ef>b;QvA#oP+ zCb(%28~0)8bS4f)rLk+^gNYlT`c>bQiVGL~uS1dPpFx9Pd4AQ?ewc&)#q$b~x(lCS zgH+%(gKmOEGB^&7Vfbiu^XHP+N9A3T^y?nj>71mF;>YH~%w4Coo*U zp?rim8WG;tykB6Ijc|_WmFJ+2@&`+@vHzH=L<%7=FK&DW5*>|3 z6JC^e{uyB4L)!J_sDOgF&Rv<&f);1VU}QXyJ{F2dc#)wF2jPy`73s&|b)qX7-Xw`f zAQddWBZQviQ(Mz4Jl{GK+ZO3`@JhDqv%zusXC;!5n}UFaWjM#Tc7!QrG4XWJ88kK8 z6yWHmJAHc<#f^9KNxUY~Q*}{cX;a!?Lg<^KreCxG0%IwM^Vm3y3J z`uQ`X9P)b;y!WI^Jda)csxP>2U&1dh=OGOO8ob`zR}lII@c= zU*x;=lsNKzA~54F^=yluPdWy;9XAk*dvX9*Uyz401?+gKr}r=t3sjSvMJEHcWA}Ia z(32htg?3scy4jh{-=NLojsK$6{qa)VvDx05r}re0I_ESXJb6j^$T)A`v8f|yC(Nssirr~3 zEh3pPPj`=xx^Td;V0>pidSqxRnlhT|*j%VxkWJh%LkE(|1?~kui-g#LYq&T<;k-0x|9M;h-r^&W7sj#!FU}$23D~U&7K4YQQ zB{4s-f~oEJg)p`3J6s`0n(rM?Etc#k8IGG=om243BqF6Ph(2~oThGjJAk#6MlM^#$ z2kbOaJ21oHu!Af6>vFom0*&+EMYRXN&z#{{V2N-rw`l2m`0hX^y|bYXbb-gjm__^! z+3N=`&JH})>`pu+4Yymhe#0icWsQ^mPiGU*YbD1KZH@w`%lEB_pgTgoWc zRT-zs3G_?@@b${e#$Mfp^X$=FdEey4pW62&VQBvO^~~+(K}gMiW!!WAEI>?8$y9Je zS%gIM9{*!nn*~Z_Q6aAWSN09N64-%D%!!BRo>TmP>aka=;5>WG|A%%8?dfw|Lr$#r zC^gwb-g1*sM#_->N^&d_jvXh5Ws{K1A8x<}+QvPet-9<#9 z!arWOYH)r@nX4wCzD%H(DqhwAW&ibLTf@`}#{2IJd;*(X zE8iry#j%FzkXs6n^+j&S|BTp%!m|-vFnM5#q~MP$J>DMZu_0_{1-OGw~Ds z8U7hwT>on>P5+zhrDfuJuRRwfbwAj+TNj<6j(_a*n4o8jh{sq5#<7$$yL?C0fJFTy z7%7`4c<1Z;7w-Uw&(AN5M9Gx4V3&K(;7g@SN}R}Cm}R|EWwHWv_P zW+`l8nzii^^49`=-yK7?Vyu{W8I#7Cg0?2e&XZqu>@THMKT26qG_`R+vX78fOR0M% z74tJ6pUrF^*ka|r#kdYA+v2&YnKg+y@;HV&pSJy@_-R7Dyurca&!>$cy`;zOX97Ol zAPTS;mR{+)=IJ<7jo3$+%KU#R8a}-I$Q0RM9wfvg)3|ZF#=|+B%D3zjB36lOdYgUb zS#|yE=|k&}{nmmlat9s*mDm1W{^a|V=onrzeE5GU_2=xBM12e+HvQN!T!3B0;;OIz zua-r3qwUJ)OA!0P9sifs>?hNtuJ6t(T#hb4?pz7+x=|W?L%&`U)vF6!-@M?3oc)U_ zaRH9u>{6|IT)jWaC)V53<&2&^WI_g1e0PFz{{K|kokb&GB412{YT2|79&z9KaaF$m zshC(_#a;CF8`&adz~$+uDNy74imzV%bzzRQ^S0rljPBXC}r5eck%u{(g;XQcbDcuZ;5*o6Fx+?Q$-XZ%pY@85vR&2$`1}c?KG# zBqf`dh%K~#{PguRxHvdD))C!KI#}IW%g`CJ;`7@G*#BNBa?tqZuwmoyoE|@(3q>f< zgf98{hRd(~rC+lntqa~I%zOXq^dki|WQw!SWhkw!js0v?wOxZQU*%D^O-(C|cvs9e zZ5Zz@SG9IP!MEMFc>RlXxoUJPX{za7r6(1&(sQ?^J+Reo5z+^k#D=r_nZuf6U!UKy zrIFF5KbRELw&vy;2${W|wo1^$lb;Og-N_rykGdZT7Ofr9SJqZ^8nENQ32u~k;)8e{ zsiOygW+)X?N-lI_6n(=RO2G73E!3ljlHAhlt>1QnpP++#IbVY3lj8^T1fS@ViMH{o z#1M}xGaf(`$Lp)r3(X{rjs#muHTOcAl_ZCgo|0UXF^2!iZOCB=qfoG-WK!2`DYtw8(@-SyhESY7|4 zA4&&FstH|Fd_OU)mV{4@S^rMMU3WzCR;7b;m>``otO4lvuP-m+viEHx#fYots%xG&zbe$vz5GUF5G-1=?$Fso3biUWby1r|g8AT)F zGT+j~pF%6$GLs{Mx@hidvcK^*eqQG3gUuGz(MoC?VG|F0;Yx@{fxbO1YGn(x@_D+>DFMRp z`QXaoQ7;>-#^dzY@;yEANu;)91s>lZ6P(>`ar&{1w31Tk;kET8x62BVAG8p$I>h-p znxwlw90Ni)Er)Z3N-b!ipR$<{phA zv0b=eDvzCw2qC9gI@@1@Rt(*y1w@pkqlm6ia?A}GANFE-gm-z-nK zowa_+;o!C5)qB6$MLq4vUht8&NhC*1p{1&|0;hs#htX$^LlUw#2!E+RMtW|{P2a-C zy>NfBy+XixYowKiwcL7KlSb6;4G+}e6_|4j~%@%pTj>Q&m}*@-~u{40ySk#~QW zE_Q3gwLt)OS-f|9^f3P0SU+NGpNz-XSBEvhaM_s4lKAP7)|@|u!Vi3%9;=^m!|2}q z^Pu%+lE~ciO^j$WZi*&EgxdcQzGaVq=ht zV9pnj!&{3bsKDy=5K7j*p7et^m!hNS+w38?7tBNL`c96HxIL);G!8K;@Tbek;p0`@ zxN*=z!@8#sF|%qzCdX?)^>Xs$*VDlEk&bhb0R8})jyqKJ`|%yJ)sxw8H3c6L)8Fgt z0*Rz19mBmJV6|`0-6O5D6V41())L5d=Avnq(Hz~3x2aQN`$CL`-W)7WQF}hBPr*k> zb|-|HwlK&lk*cTeW+`xYPB{gsA}(lYPZr79-4UYSOQ6_FTQA3d?OaIT4g%R37$N=FGl*u7oN3w6BVi-xxW|kOnGX&>3GFy0EXo2wV|vm%oR$VMb)L98 zWe$4zio5(`-gmzz+lk>hxc5V7cZxo}h04nXsxc==Kw@!+{t$WCwONCdw{>kAH^R-qHjP>?aI{Dd`Zoojf)t)4*RNx&Hl#C|3Ffc!s9fVP?LJ% zr`d!tJwc_~Z9#f>ji&d zSGSm3I_}c(7vz?q;P}G(WZXp|-E$c2LDOGfqp*+1`cfF9yUm4(#D;<- zba>fyfXc~1dKMdjRJL!j*vCx;VuXtz9aj~Wt+Uac98u>L?-FbWlp5z^NBKhP?a4Uq z;zGPc)`ycH35u58yq*Bo71+uwh;}PJ^5CnA0Pl#pJHSYHjtlKz80VVp7dJm^6ZKGB z7byd_>yCDnMw3+Y6hd@sRXv^4OvpZ)0hxAaN0Iw~WDrFPL_+QkuDl;aiX%A?{a($t zzfPJfv{X}m-=0%yZ#WxmZt3yK5Ml_4;1}q}>2L^Wd|#`{c?@k7Bok%>I~dVYU{>by zDKEqt#Iw!WnSnVV+C|y~xt+Xa3)623DgAx6E!SM?JFSjPztogd7F~b;`Ez$Vcy{_l zG48Cdl&b)Uut19U4p((z{;;}MP_-$gxu3Bq)#_wXeGJGpsfN z@jU1x9Rf~PZsw8YYxaHGi-Cd%0UUTIp-Rc>ddOVfcBSB?o92BV z6dOS9)-&Q;+~pCRzMjcq9H(0Te zK#rgLCfxg=I)$FFAv=FCfxc$Joeflozjhk+s&}zavFV#HSpK|f7j6{U>We}Em5B=e zM4I@@-B!eiFpV7v1fus7MGV8=7j=N`d|0kPw21tkzm%r%rj!i~71~B*Xke(Wgp?;t z4hL_X48yK@({uhvakB9;EAk&;%I02t)H`X9mqjwM^ z+3e||V2A<2!$1?%9ZD%f60J^^NYK)lD0|(N%n_@tRG1GeoZM})k)3&U;!qk7%Df7+ zC;NEea~j`7$FmbC;3}`BPyCKwp8i}KUvVdUcJDpt;NW1)=0;ENw#Hd}5v_{!iEq;G z%2GwDNbI$(-58{u{di=zhi}~}uN{P+I3vI_FgYHqRS%465 zq=5WE(>mxP%8{-=37K)qv`8wuo@v2%V!$6Pd$znJD5!~a4JZEP*qr#6*`}}fQMt5> z$Gc$rNRT}vh3$zbk<{+ToWc^GDqC2VaY+u6-@fVA?GXw}#6+nYC*{x4M~o7ZMXz=| zJM3U(t@3NZV`JzNZ27*(vWfvxOy!P#05CwWfQ*Z#oWc)>r)jH3JIy*;efa)sJs5mMI3C}5ybQIqNcB*> zhQMK}4S&r2n#Rxg?jF3B;bZ#jsYy>j_u9dM3~PITf919My2i#BTu5$DkNmAUZi0f= zr;+uoE}yzIWIq6QRZ*c7H%7{8CY&6fHi5N7ir3mLSY-V79#rnqoHv$)OuZD<(uYv+ zJ=Gn{0<@`@B1_&FqT|NUgF@~Gh`TFK5b86z0?ucw?@&*Mbq#YJcRYAKcE9Fml$|M; z^OB`Ef<4nW8NYfW3eBWB)V^x6zw(A$G_bc1P?H%Ah9yh|fvFkUjqGb2Jl3YVxO|4; z3>9ld^165{xLoX##MBgk1YROhbf*cpMhgVG*+aA6yfw1*&v9S#o>2w+4$x8>_*N*qJ8oaJMjx{x%eoI-J zYWicfCyDo3MRdKNMI1$OT;}PDEpO*6HYSV?%k$psIO)_Zy)4x~l@cE|+T!u(hy>kn z&mqva#~9tlx>A{MW*D+ro=fed@oQGRO==x6{D}dV)J1|9LE!@4FaDD@?UV=FAOB9; zRJLK;+_aua--t6~%kz7Yf)bHM2(hMr2-8fgDK00{AiJ(+^Qg}iDeo~HH4h+VHOYMa zLbXUAcz*zhyKhdR&z6@nH<*5-y%2Y=cPZTy&3k*T(p&M7$PO6H1gl|cGRjXjp<43b z{t;#$ZfXAc2ivwz_g%UJh2y_fdC;6tWs}5Y@XCy7k{P@ieM>-zaEA+>vci@}gnJe! zaD>+%2(-x3hnWrZY$_{NytSEdpSfYm^iEWyD!@rxLpi=l0AG%QqT77eP8UW&U&NiN zjtJ|=N;@L%LUbszfL>MN>Es+N&4Qa`eH_Q+GYzRqko(Rf+#;^ZR9Vc~NNnn!eDte( zanVFV9JM=Ro!U+1{m9!h01K@utNP_c`MSD?z0$?6%fe=%^yu39y!p#Lm40i$Eo3Uyw@674~dAP_z{fZ&Wx zS$WR6cÐ*?>^cX3&{2!eMLtUhzFvMDGW1ZXBMyKv(qk^3F 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�yhrB!xL$cTB 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 literal 0 HcmV?d00001 diff --git a/.image/OA请假-详情.jpg b/.image/OA请假-详情.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a83e7c148f42a300775d6f0d9e84a12db470c798 GIT binary patch literal 66212 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 literal 0 HcmV?d00001 diff --git a/.image/admin-uniapp/01.png b/.image/admin-uniapp/01.png new file mode 100644 index 0000000000000000000000000000000000000000..0f65d99e35efcfbad8b4801886eb0ad445305426 GIT binary patch literal 15405 zcmdVBWl$YYzb(9R4Hn$pEx3nlAh<(tch}$!8+Q-x?k>SL?(Xg`!GrDlf9`$Xx6V0V z-c$9QFSlx@dwO-vYMJV;H8blMp`;-B37HTX004ZFmJ(M10HDAC0E`ME%s)uqR}m5b z0J=d*PE7&=fjmAv0sJAix3}*fA1^O2S5J_^!9ffR3-b9kz+}ypry@!WK7;%uRtE;W;?VOyPhK7cT$w|l%+}H_ZcW>{< zj~}{vdP$fTKyQ2&DP7eJt)p;J>+ z#Y!O(5)z`KqTYRw;NalLcL-=0V$}w*u&{`mfTYhuoVp>cI}l@I-x8Zt!zPVZJ9f7PX-aTL6Hi+C^LCl!mm(~kD z<|GFg@yh=|OgC*$&bMEdS0DRDR+Bg{clHBRKRn0Z9`|-P_u66v4XVG9zCYbPzivMK z9XNeR{`-pp;)InB0EAsYwhoqd9(;nCRENHCRwqC%|JJwkmwpr`7t}{%tU@jpW^TuZ z_D=`j;{(9jaz_Q6(PogJVjt(-U9i?IV-Jh=+2D^{#lNK$gvHXAAa|!*!z?>6P1;Phh^)Q*jzyk zweBNj?zQbYW6Qbf7z<@SZ&@DzfS*TN{F|D`+Qss;O{FMC?;lL})lmuduQJd`&G`e8 zw=a1qXOsOxSk5<;A(J#85XkrClW+7*8gz}h{4~4-p|#M2H{WGHod)(I3HpHwOFB+Z z+_Lhrf8amk#BNP%oD9`EUike6&lpg^^yub0>^}d+Z8+8$$#J0Y?gm}_*8*J&$Z41P zgO{CqCUU9kFWHWSEsBGbcuPs7NZvyTNddM;!Wy`4jhIzUNQW_P5ZL~;pmRF1O}J_S z_d701=RAgqXTCO6nYDY^+YkC?5Q3~}+%OeZ3UU^u%_2WdZ`2I#nLqc@!xBGt_@MqT zK5ln{YLmi1%zTzNaRFhPa+3+#Qr;M@019@>CeRs8y9%35x24&UMN*9;QR)0VnBGv_ z7G?MQ{6MCW^7{#RZW*wPlOdyPjahZy95bVuaCxg71du^_cMyrRdg8 z8DJ^V;D(6=%+5`DA-_b@RHb9I8iYM+4|j83zigz1wJrm%JXsEM{!>PZ&T?_@)rAJA zM?%kKxoFm|775rL2?-m=6`;~}C0~;zVj6f`3k=J|^|Sh-hnglk4l5e^^yp!}x|MKH z3VJ6O1nF(Cu$-1C~gGiZ!0T-05*xj4cJo69}bMrP_^s@4d% zSi*Wk$_wZ@(>EC56UxxVz<(NsGDu#!*Oo6K43Lp`FB8cVkK-};DFR){Ov!AKP=dr> zEJ{wLeggHUvce!(v=>8OTXqbK=dlU|S>X;|Zp!D2g-|15p%Vz;NYFff$@!);2%Dti zhL6O5fE9mK5WSaAs*MnQwd3|@DF~>wTHQRH601JurOPIG(X{zUc0so4%{JR%kL~9A zC)js-ZB0ewz3ckA)Ch4qqN?xo^mO!;U^fJJx9o}D(0|PW9-fgE(X^6W5bma%Z!SdCHYxeGTKUDO<8MZPB}mnw-}i<76I;j z3R4;7NSp(u9PEA3P|SP2O?tN*#Sn!x!acp&U zY>D}NVL2Kl`a(6DF?WNI~`B5v|Al%Qhdw_aG}Ug z9)3iUM=6)j9G$QpKRq4US4e(S=z_PU*P$oM-8%_W!@)Iu7+rbZYNw~|#S~wd2Gn`1 z)ZSVm-de6LJj!;Q^VrSJ^J2Ae!h{x^PS1owsd*ZatO6;2wsMl|@W7m|v}k2kB4J>3 zG5^j|(M!7SjH8|3+{Q+;-#tu6q<$&`e|gKMRBg+PE(11?*Fl3kqm`AVn#Z9B?COW$ zOahO@dT~?B!1y;cV$O>2k(Q!>v||tSLX3-`c;)~lC2e&rR;dyC`0AWwl-_Vd+}qZ! z9RN)M+GBsPt3{gn(aGOeq*XD{6F9zB8p`fo(|ExnRY%Uq?35g?@9r{sB^C-h@`VRW zBI?NKvxBI}=vn$ukr9e(Nmw$@=iAi_&MtYPj2(}Ifg0=rE1&cM<7~e{)>(CR6AX+# zW}&Q4?rB8IE$9Y4v~iE$y|3M`vA2l99N^y^H$ECB?#SwCMvaWj5jbjoRXm@qbQ~-= ze?7XT%Dc#)Xz~NL)Imx{qajUWF1T3rEN7;RKoDAp>oKwp>(UN?y`$8Xo%`I6dmX=$I=PUWVyH#U3(`GU-zpTEy2x++^oC177+yUn4dFf#9} zL2HQ4xo&s@b5FH6a7t$rzKSu80szBUC-=R7MI3*G-Vsl6wms_Rw_s9E;RNlF7u%n8 zVB$^E1SgDxj|&OP+bX{oIyDQnws96AhY22#3lo3N-+xLoh(ix ziTR*_b0p4=V(=JI{k?Z_@migai+ zfyt#PCUmd5{B*;z7WsV7HA%qjBsQiDg7-iH`BbY-t0T2n7ofTv@W>oqB$`(IY@>44 zdbZ{w;=$Fugwyq*EnXSZffQsG9Jk)zKnDh1nk)8=1#vsbYE z3e23(CfRd#d%eAtjEjDzh9v`Q{wNDKpLIiaj8ihQQ(f#D4wTioYfJ?EQNiOb$DBu4 zQL@u>9oy()q+WoTo{oo&*3@4(tsTV#VaS@;GyXJMAbXjJ|tS0l629Z@3frCzo~^{oene$Hh|jwGDhECQf@L%Oy-)3T&V z`fwv9KP(>SH`F>IIQZcrOp2UQQ9-z*4n1_A6bs<4T7i--RD?=KtTHPFjt)j)Y?c$C-XnH%y;Rc|tb_~jAlr4!+F^>LAa~Xp;mhD*of7f$ zlJ$J~V~Rmf?XWRTo4flBRzlgiPMo!=7ln(J{+ld=Q!f+r8;BTzd}Pcy2f3ON5gPIL z2G$Nmk!dkp&*wg7SPuo(dUACSFg76_nIf&+ZqwJZ%cmjCZc-<+28_q4(qlZle6S)N z*)*#rrh+ zwJdhW8mGW17TF-CX#o`f{~{&-2Sw`t5xgd~Xj1=@s<7|=o3Wyb{}bx>KPl;RZVZ{7p03DEAE0aEQeNQ9{8;#orx zb>rSeD5c?5p!4On?lRr{Qi{U^W?$l7ZH5_%^aNP3C4=Os_8&AcCcN{D59eDI`!x(n zw1>JdfSqH^P3^lqMp&@(`iLx~=cBqlzlfwIpN8aY$)pug@E?Kky7MTO--te7mKLMq zvCX??3Mz0apoA?ow0152Byl8QD+v^sEuc`)W(izcVBB=BmAv_>qI{{xR+buvP13ha zIl~7#o^=?75ZxqqnshQ3eps;t>su<1A}0kNPYZorp!z!bu6E<;ZGZh1z$`jI+^y`_gH-JBLB4XCM#rTA{rn;P!@p*--Y3d3vqN{}k6UQr-RWZ|bz zvWO+OQW)xsY&3)7^s8z3{jU|QYApU76Q!k7G7VO@k>^c*u?Kso%2IiX7v zUpP@W=P9`t`-6PO^&rG^4DD%SL1rWVi|(J9-SYDtt3)drLG{fNKQ^CVaOBW2Z-^=) zaNl_iSb14J(#RU#OGifC!kCGO(bj7aVhdX5bn@KdI|#1`$rSG1Z3$`-e{ck79{#o~)ka2?Vv5r0oM*J_dK)8;7jakPuy{&37)U) zC=A>hk;Jrj`enRDF4MUWz7Fgxr7)l?XGqIisI56BSjd@&X~%aNO!-y1P1=xzX5oBG zGEAY&t(jY!efbRJ=+l!uN->)cD?O-Xt3Kq0BM6KK_MLbmSrdT#>%}TVgs6! z=fJC}0%L%XHXXhH7uZ*yc8GvyUz&Vsm%mz3yIfJJ(iE`S{N+!76+*Pqyf)f9bf@=Up8sW#5<3ULa?k4ja6_Atfg-jb|Rk%_@=5a|3XE)oP(j$sh zC@<^yN)*^!Elf@Tg?_q|m}k-C0$)g4Ri*M=q~dePiC&y1D?hFTa52(e`q9uPzOt$5 zw2l`A&P2&PoRNv@rV#I~*VR=Hbf7T8RS}zfc;;t?Za7JipA0Ud5shQEM?vA{TW%vk zmcuqZ-?Fngbz{gw0&hqQKUSaox95;|O|aI0S`I8kd@BS(?uF7^1qHr{w=z@3-WCFQ zqAY`k?CcsUvw=0Dh{Nt!f+isv_|_{7k^0^4CGGEO6oKEmQ#(GFQ!t{WJPl$p1UtV! zui#!#rMTyT6j*6JQ;BlV>;>lBj5Cf*TL;Y-#c<7TJpPKzE!j2nDKx2_Sg;k<4OIz; zjlS1qzC`Efu74kG*^vWngxzLg6^Sl4rd51*?ucM|htlXbSvA*oEZIAG3&(yAUtIZv*%rW&zld$ z`;6e1={$-Z$#m134RvU=;)A=Tn7Zc&X_v-LmrX72zH;Y@+Tkaq@Lu4pJ8fUV8vL@z z=rh;fW{XP#Sp+bRh#z?;xngCosKrtHMv;5c&xUQ|?M6EhZAf$NZ}*a)2KFQR^trB! zaqFx@;6KtGt8eVFYW%2*jB%;Tx^ZhaIww7HYuJ}aR_Hspv4<3ZV^YZe922@ z@M_`R=zG+%%0?U0+SV{yl{!tc?`uMwt+|egl0a!c8^1Oz96*VMFJCo8D+oTkvE?p! ztMU`sfLL5&Y6FCy5yc>-~srdMk|SL5a(P=WyC!Fo8H;K zn(1+%|KH@g9kd^KE7K|Xm6`aC){ z-F#Uhog+h;joppkj9lyINAZLsB1_n4ZsUG7qG;*yoy!-}JkZJ62?h}c+j*?&MRn%x z=71WWbz&4duG9|Jdy8yv*X){T7-J<#4L;Rqg}=wFR9k){2_Jae==*|VbWO#Un0lf` zVnVFK{~ajUW|rR+R^|)sCOsYEjfOY)fr`XuMlrFuASGD{>XkNpHBokC@1sE}ZgBCUj;!Sng#;JB{?$rGu3ioTy=HKQQ zs^Aze{D~Aobk+r0*f4Rwlb~qU{xkq?&XP{KgQr?Mi z;J8!wz`b&CA!0Zy5%P>Svx=bY72?yV(|8xqUuiTiRwdH}LN!{+!njE{D6ImtW*N_9<&AB`@38+vw1m+60-cy6H;^5X;NEU&A$Caz~mDa6;nl%Q01w&O2~)eV@x< zuozAYm3CoDK)P%ByIo*%W>#84aaER24E^RA9tWsaIXR67X#~LOoytAL6@)71%6Lrq z{Rb1xBYW1CVB@ghjG2|1@toy*GaqxcXTDS`zo2RHo9fx~76HT7kBPG1Q+g(}{G)Gg zZuHxw)UUc&8lf}v_fBM1KLZ)nznvM5=tRd18kOEcF7#&6g4j__SJ&`9ApY{M>Ekt_ z2&PwZY?N*R^y^+E9a}r1HpI{?n=Xu1YPM=^b#Z{~>gRSC9g1iS?}QFtY^6mgJD^K0 zXDMaQX?Oz&X0uC!`NwqMDKg2CH;>KM7lK{;%a6aH$HxR8KQuEB&PHG6ndoZZ^7ou; z8{8Z5aq~$wY8FA#fuJ~m^}sTh_-+4NyXgVmRai|Hkn|bL$Gq&RG#2G~e72 ze3h-(4#7K+kIOPsa5<;8JIPv4^y((#aE>0oG!xF4hfkT-H}cp{e~W-<50|p-#Kh|f z_d@J5&eTa3%B;SM@A$e|mJ>)kh^S9Fjrg9#V--C5b{NzHU-8wie2Jr1frHtF_ z2gJ6MsKF+`TQ4`ubD}~DHvev!NF1N7J&t()B&OAV^+ju8*DjHv{8I<`0&B*wzSfq4lIzeAaJ3DR$VYbA0lslQeO23Q;UV3~-gH=3!ymHCzFSg> zuUc~gG7rlz2Vot`j!AIQvbu;}x0ln}sh`p|OIRD>*s*0OB)buUQl<4Y9x9mDlqA@O zihKhN_{cQZ3cKm)LeX%(TdPW6$@A||m zw!GEC&TWo?$a$OaSU1~(%{nn3uTpdo8!W)3*99cZ>ts^9Ye(E2bk6yB5|Dijd2i&v zCik5q(QEw?(EYCc3e~cp7nla=Cj~V;0>bAStw(6E-YBRH_njiQk}w7?pDUVo?m>dw!o)Z}5Y= z$NR%_KMM%?6c0w+4xdv^^ZvB$a=9ZU@0N@s=D+2!^JXmy&%scmgk8BQKW_2YEui>l zy&^W+&O{*S{JYz}>-qh5Co_FF|2%7Bo?Is#jCrCT?AT={@+gsEj0+jQle z)fNqj@Pc@kQv;2|QTFToY`3f|0)M{+JJ^J(Rgo2K^j2y5(j;qF`U2dFPRxf9>9{{- ze+bS)l9pf~r1>a3B5I%M8HlCvu=(9<|82kSvehfw-^(}a{f6P2d+bf4(NSM_ z4)D$WU_6VSOU5~|xM(FMlUW!0eC6c{5_2K4wfMdEsy6{K4=<-zH?zyo-Pk>85aIZf522 z9r=(vw6F>yyo9kZFF+!%R?w=Ip?w@L1pSNbyjyx}H(bzbNrXb`XWc$tpYzm*? zUl>5}NzA7X?{dKuK4?fUL7Nmq{dmvaLO#3#k79RH=o zzl#xg@3aH?E=K8##o*9&sv-w6VJ|Lbyd!(t3kB8zR%&P?sB6Vgc0(Wma%cgg)vyva zjgeVW2W|pM*d}7zPP1{LR8@s~A#}TT$xu0vLTgHbGogTVRFj&dF-59En;zSmapz#E z{t&BCOy~Iu78ss$Zfki2<|hN!d_+xCW?x?e5sy8H4}aaHW%7EjdLRv|=Q3kTkrh+Y zMEtYhRzO8K6co@#qVcMCG^OdLJVD7hT(T1hhf=HII>wzt5&`*D0d@&(lnnK-BY+e} zc7EhT(QFR5g5v;uhQG>-w)-$s1JfO_7P@YmGEZPWk0vU{Z=XXBTu4f9 z2H#(MYA|=lrh%2=ai07x!f}|Sd;u87vwG7Yar=LkEU_y2{b8PXzG0v`i=|t>HbuOX znk<9aMB?Y!IdJF~u?u5%oXQb=CMz0(@y_*8YbaOVDy;PaLmC$IIamSNBe&L65sc;5 z>N`;IhWjyPh>YmjCZ|XU(=mSwC!5=suUENzS1&h4!UEH0%BjdkE{6NVuU~66+Z)U{ zF8D7ML9R9-b>r+dPK?QP)_#s5B7f|11o7TP>NOkb{2|T<2nz`ez z3=XF<^HvfoUuhhkgV&K{BA%|dlTUh&vYRV?1`jcG9;#e|$f9}#1&+=DlK9=3?t*w& zexDIpgg*t5kAa?bO%C~}Ijl;YC8p>mGiug~(@P|bk?@R`qK5`Zn^8_Zz==#a8If4s z*{H?Le51w_K`XM_EF|1x%EKe^bvCrm9leJB+Z}|{cylkP7PJntc#keYm26z0Bo?{_ zTZpVK#v0BxPY52FPlL_fm0=(j-=L&Y;h@5O-J}{c$IyM%ductX4;(zK?}`|x2f#jl zLWFTgF4abE^2lG&7Lkipr>1+X!11!g3}kziCYx96#;OypN|W6FVJp}|VuwDS-S#gLy2#74{FFa+Pd;JGm;KsGioq(H`Wc*b9Gk{%2$SVi@J z7)oZplbdA_=4J(vgEuEZuN%`S!1voJ$r&SGO$C@C(PJlN9f*zJXD{U1XWTB&tU&ooq@IW zU`!E78_V0@(2XF+Ej+2yy`Miui95TchD(Md-w&f<3sv_`x)dq!un3U3;eHE^IH_4{ z-RJ}sk~4^@VuL8C7o8_(jBy5CD8!TaYSwUKm8R(?s^~3x8zRar zi&aJ^R+ro)4INJ|dZD;3TuU27-6*grm~(|+1*zPeB&^Q{?|dW*`E_>=C#HFe;DK$F zX!S;;`WTb4T~D;z@nFWedhdO^2~e9Td(;G$VfogG0#pmA&Uz@;B0908UQ`BU&_iW> zT|$hL3Y9`FNqOfY$;_~$i{RII@_>NoV6LTPUS&pZp*hI_4t_Tt?(uHRhJwJv*Dcg0xgyIes>= z4Yxg!bN+Hm=GEMI^aMN9w->X?iWK$c3L8e$}ngaQQ`FWC{*Zq3r2H zEZV!=iMTnsg_%~NaKG2Bh|hGS8{Rk8_(0b0t#-Z?tO%lC=63QcupfSF zM(ORkUHq5~5^p*Buogldlw;PL-FF_`A;m`hgmYlK@x!jrocfa(loDrAx*XwKNgz&R zGNNeTY?4;Iue`pbrOd$d%w3=-eYwUxwu%_+A<*lru-W1lJFqn?-=pDXXHjsjmzHxk zbeT>?{Dz0_`SgNo`RRH}fo+~W#3ZRO?h2f3(1X!BQIbEhL&))?su$M@cJn5>pej8WMRb@QtNNXfY!a8mzfn&(gty_>VsXYA)g*C@jLJXb)x!e*xRwuOb| zxi^140quIF=U}WlRL^!j5v-{j9q!KiGe`p@Ya2Ro)QaoJ>IkKW?NyIr)%96IrOd!m zSm16?0#n+FSh#0SU|-PZXAG*(pFuWOC0n2tv07&K<4~c=zNEP?VzH`$@84s|+SWgf zoI9MNYc>4l6ZD6@c=)NBBU<$J+i2* zd%;DW3Op3PL2Apwxqn0U3lJlUeT>__c9pb|r zEAoN-yXQ05%rCmaSE1@$zg*AM&Bcap7?*F1wy+CKhiT7#eP8l_eQBKs_V_Lc4pO5{ z6B{A+yzL0*z#9m^;@GVpO9l7EXe9L^liCP|>&8KSX>y?3J$lsqnv5>IJ)hu`EuXE* zN*)8?B0q+kW7PLwS0~%rK!jC{@Eg(_CbwJc(WSRwBO&IyXirUq!kcWlV zJt!dMXg2N%^Kt6GIVe7xP9a{{-Q68)k?Jq-fUn@uGjUN|)d>840JPkHLNUth9lD0* zgnh;hXftC+>nzh|k1-C{?3-Z_HMWsaWPIWEwwRb>#|Yi6J-8w!)`KNsL zI$`MQCiYDNN9O#M=v~KD=$EUHb1l>46j*EK79qQf9{1y2Gqj(a&OUodyR@U+Uv9o~ z-(SHO&RSwb60cWlGt$$qSqxW}c<}hY7Snxr`cP=Zpn!4@%-Qa#B_1$zF%TCXUu@#Z zw2jPk`8YLwSe)T`T256x4^H{3`2>6+b#l$Idu_3JOQahIDmbF|b)zV&wRZT8(8b8# zXxB1>Ji-?d-UB2|R4F-a>*6PsT7?@ZEQfxH?Jq=|) zjSW8NsXUxxka|c|iBf?_$DZFV1l^KuJ{Y7EJ7p+a1W0ye>6;^9NhUPE8x1?K;K$@c8Fj>7^T44thCrwv#}vq={BC`y2@+U4H+G zQIdXmWPzsb;lG?NA9%=~w~UiCV><;eY_fMGKX zUU@e5sH?{Df+#;YZ0NpJta5CbYybGtvfqO`e_f5gAGt$cx*i!=QFzY*AB#X2(kQD* zxD9kHri$7lIZg4x|FI%!9&AgepXl2JTEyPaXZi!(p;9n2-r}-yd{b#tYMmJ&peaFhLXp)18f%Jdg4y)I-=XUM*84BT*MUU- z(kv|Lu9WDr3+cCYbGo~skBTX-f=yt`Rma&;OS2z;=4S5>eR6+)1f1H$Dz@B=UzI%t zbljFr4CQAK>+Xov@3RBV5Ow%y{3ZJqU5pe1G@E=y+~IUjth(w^rw{=OAuOn;aTrmo z>(OF}{T=1DXc~;qnO{u4fJIk;X>W*_V{5USDSxWlwBg?zNe0ic)rXxhcqUWDS z&;#W~+yVmV12H1*3MCW`bcChjZk?)#4hp(p2=AJ%a~soL8!Vx?c(MmxUGCe7b{qb% zW1;iPPI~@?qRGrFYxEAf^)9AG5z5c0sY>Sgn|Qfn;0c$Dkr}$0?_&oBx%Idu%`qZR zh@Li$m8$;+&F5kBnm@b#D8 z3WX&$fI2g))DuMrqhcl^vxRHiLZhDu=PR%%hc2W{u^i(Ab;dUZc9iP{QFNuWh3!(> zi_BMFlXiR5AE8Gt^{K94Ps zn{pheD{LXo)=eHZq*j-W2Ic&5_al6n>z-MYmqJrVZlue=V<#5Z|1SggTx7ggG-zUn zX$)5b&6TtkOn+b``x@=+mNC#H#e_0|Fg6Eur@UJmAD5;iIZ^NaQHC%UHZAK2K3m(` zS6g@YzrA+n@6JGq)0KE4!nOL(|6PFW0SMeNP~C-k!MWYXLV%3KhxOFqgv;(YP}sxr z!UpQq=Y?Qv6tBxs+U`26%FHecwtU*gKxFU!5qY)LTCo0NxEi;G!rS$|@QXI@jvjS@ zV@#qIT>M9Jj)svGI*UNC!*U>V<%3f`NU22L4bbbkt+{itYsp|^(W}osFRhXLmnGR)qb^3z4l7WfvPj4*fZI%fbRg2+57_m#Ewe;RNVBG!^Z2LUf}ql(<9YYZ1^=m}YffwIH>1`)n}ijJO;z1KSbc`mI+ zK!MWIHX0qu*DOH492EawC5%fO4Pz;-Nf@2!o6EZ&Po$lAw_O6RDen01B7r}G>tsVX zG>}1d#1&Uc?Ilyh1M<1%arGkK%ko&j-yw7QoSJz0~lTKh1KCmT+W^)}_d*!q8)i*2XfxkWl+ zp5>HAL}NAs($0$#y*zS)lyk_MY;thEDZW+bik-=ZMo$TEie$!ZqKt}Tt_#1BR30J9 zQ=Xe;HoT>Cg2p-)33-2kk<{CiUKa|bp0CWmgV0~!{c3~z>!4lHmQQdT%i^P*7=A{K zmwU_|{`OgPKFk6@`0!>zYS8U**|fYj|+Yb4Io zaIpK@CL=VKdHBz^&(}ah^kfryn|#TFfjHDv_?4q}$=*V4JTP`V6Ykr6f;Yvlr{tgR z-*&}+Y6nW#s8s)`r;imGkj@?k$^f*pRVXMb6fLP@PZOeN+~oOlAt0qJ>u|_R6R`;{Xc&;CawFOimV#$i||LQ znEGQq$B%yP3l!O*Wgsu(^?ngd7JiY{iR+a%w z>p!M^D%B8kQvF0!a;(&U@1Mx_bxTn^mvV6>0KNtm7;istLZrCy1baumeqY1c9`%i2 zFePCh%;OAltt3L<_{ZEEM_L@nVCtHgc{(g0jN@Oyv3dEpySqj>31^=Nwm|8Q5{eaza%1|PO^P-|+Mg!PgH zxd~gTe_+iYuD{Girmr--7UCg$x#a@a1F&h@8)zghbka1T$2|q{wjQCpYuXXmUe$mY z$Ie+E`N!TE9fq)pbSM~tAmS3ob1*;b2$wW@nG&Zlv<~DF5FHgk;eX;wLHU?od8?d= z=T3PE+N+USF;gi=cYEvLJTLq7tTytgqW3z~r&b}u#s{f@g9+ycEmhIr7m!OcL}cf6 z43S6u=OY!Zt%3U-sJ7a7h*aSUXRb&O>ZBUsYz001lCRw@c13_cYF)V15x(5zkE`N3 zZ3(E03u{Hd2$dZFrQC;-+xo&N4bZU2{kcWkBL)4yCHtSb+Vg7Ei`svI!PKBtB5T3} z#C(}F=u{9@8}1BTA#D~&ITM5wW1NjSwp0P;FzF_t!Z-)VrsXAEkYPK|I>CMBOX|n- z-wrM0u)^Osv611{`-!B%FmDq1*zmAY6%qmX4kalzu`y0gr~w0MS;8BtEhAZWmlU7u zw8OKLLhHpqiOMK!Q1*&wAYk7YsDehAcZp-KF~>`CwV#zD zAPK;)8?m1mNSl=o*2W(1qv>9&|DFzRbdbR7`H>Fh@G8Hws@W8EhkFnCxm({ub$E2= z*%}4&N+HopNQr>$GnzCfg@fF2(q_nGWZ~nB2KN@)TPHCFlBkcpo@cldxSi@#RH#W2 zAApOb4mc!$j-1?yeM8QHil%QP)UC zsz6}M+KWTC)t1UxSV>Nu=)Pf_T99Gc`OkaIUg&woGq>3=ek>iG#AN}{ z^uZspP=kq|m$cfviXh?$OBRWBpxYIor)|DaixR00eH=^jFz%QM%3=L~gv+KmCvew$jb$>0yq{O)g~psTXiHuA~c z4O#qzbF~zY%)OG!E5=ym@FpW5l%!(h`S>~+&w`DCb2MF)jf}G*B<7!&4?bhIXj5O| z&j)0hTYgnUL$cc`tO uw+LN-X?g2S(O>xOyc7#7C_U(QK`H(4vmO&O@&A|eS6V_ryas3(^uGX|TWl2o literal 0 HcmV?d00001 diff --git a/.image/admin-uniapp/02.png b/.image/admin-uniapp/02.png new file mode 100644 index 0000000000000000000000000000000000000000..05ec781c7d9b128a53208f71f613f3e440a4f13d GIT binary patch literal 33367 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 aIU|T9f0%lvyTJ?i{78!{h*gRh2K;~U{Wk#s literal 0 HcmV?d00001 diff --git a/.image/admin-uniapp/03.png b/.image/admin-uniapp/03.png new file mode 100644 index 0000000000000000000000000000000000000000..f400c68840f8f7436b30270e5b23c77e1652131b GIT binary patch literal 14902 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 literal 0 HcmV?d00001 diff --git a/.image/admin-uniapp/04.png b/.image/admin-uniapp/04.png new file mode 100644 index 0000000000000000000000000000000000000000..d5d5ea072ae594ef57f3749b2bf4f1be9284d86c GIT binary patch literal 9908 zcmeHtRZyH=)9t_v3=o*Xf(1<=5Zv7+I0Q?uU>SlF9D+jz26qXrfdtne!NWiZ?(Q1g z-8sB@>-^uT`mfIYcd@H?_p_f>wYyfY?u#9wrXq)jLxBST0Pqy#rC$R8Xea;xsE!4E zh!m%tmp_m?;6?d|Oi zjg1?do2#p}H8nr_`unS@s=j}({9x~}xVThaUe3eAQ(Ie`o1YH^ z0tW{No11_3^!C0pHRs~us;h6Xb$03K=rpskPD#%g8yiC)1M>6pr>CbE78Y1oSY(xy zKPMzw*w`6ce9(oz|Jl;Q&cWe{@bmEY`T8yQOU_sSpx}@09#T?LnVFf9v2j6R;Vz!u zDzD#Y=;{j!3PK=|j4wF}DXF4jVvLN8#>U1P8X9bDY~fK+baZqS6cmn*j(U1}Z{ztX z0RRRs1!F+Ix7g#zz;O9VUAJ_WcLmuS_^!H?H3LeO6D-B5RI{4#?lhBE!NeA3{a% zWYIPkWbI@{V+HSIwU~h08P~HWO~5j8tCYm)vtW!L9pXv0l2_L*nMl07m!W=C>x-U- z=J>eZo(zyT!?6gw+N}xZmrAJ`m)@YG(ny#wGmM(ZQM%{zpx!gQ1T5pP1p1YAoj(T* z)@V16iaLK*D6c(R2R?o`)P;b{B)>A;sOL{3t1o3ih+9;9iCg07VL)SQ-he}TuJI$L zSL{X_%_UUJ<;orV%zgK-)2^NN0Z3@>$V`Czck^77dFQUwRy9$#7y3fZY!nb_(Jl zAe{Aql*(ZS==28~#MT}oZe6aDu%Mp)n z2MZ&be#o`iVAm`NPkfhH;~V);vpYUMYIbu{tUKIUSekVUE!`}c<}l_qcRv;? zw>a@F(OOphBgE?On2bwLeMV!sE7fCgXKf#T_K09}uWP5B3_r`djS3pB*(X~^X` zCpGKu|JP*4U1uGviZj*j3d=KaF@4CjEM%#%nWB9?S}`bly}_(J#16Urd9$qZxm$?I zFOxz3&)f@{L(!L0Ff;;uNf$M^BP3L{A6C)zKSpH_+4=yw_)se69qY8fk(|3fG+%Z{ zV1D~LfnO?v8f<@fo=bNrWINCPifIh{lPTRC;%Hg~@i;vsY7e{%@HA>-9ZS1F1t?#w z@1BrT8wy9hA=)M39m;vpQh<#p02~op5yGDbTg?<&O&R@3vU;1K+(kn5szxudjnUe| zEdKbF7!Z*$18{oG#4$Hx{3AW6Dkz+Y!*u2FHG4*OaejptS4>DdPj7EVfn`U?pESWS z=zF34eBENh^?z`xZ~}U`W?q#m4#bu1U)|n~f#WsHBzRv#l_xtJz9T)=V_n9}ceBmk z;ufcseG4snT|kV%mias>{+LxU$?$9V8up9lKQ`b)Qu^ z%`_{zvK|TV^V01G=;|6)S2rqi%4u+TZnzUaXV7YuCzBlmgcH%e1N9}(I7f?W>e@h` z*ou!z&=2rn6Mbpxc!nQuXkq?z9?1Oqw*PF#qgmSVQ9Y_5$oUN` z(NZ!8YUT@N_+!qk?aZB8MczW5$u>&Ih9`A8@8SI1&~Ar=h;lYz#W`Y>Z_wbERKljqEXtOmVm1ZO<2$)M>H1!swLvKaPFXtUoogGZ)c zR^#oeVvx9`S+=J?VuKh8G#Hxc1SC7qM|jDmF%{BKhSlFSSs{Y1_#21YcOAWM9nq6m zph>gV#?e0fS9!%P=d|tQEW!%-Ace&0mpl$7`L-x7&MK=HwL}+US8;XN#!QB{R@JhA zA_~cU_w1GHM^9(y<-^f>!&g^$-iPzh)(H9r$Bce|FD8*sl6?!inHxGrGSlIoP&Rcx ztRpOsl9XwzuM=T~ug;NMBOhwUawn{dRHJ0ZazChjyb@{beimH{i{GTsNZ$jGozH<7 zn#xiX!@>Gpqt}H60Sm^IQVdJ3B}Q(uwoY!cj!w=u9_Q_YHS?}vr<*=%Huace z58LX0Aew13G9Ff1DQxVv$R}EqJt{%>XMb7tLJ_RqLwnJ)_RTiK?b!-r5ex?r@6?-- zmYJD{f8pRn%g2VeP7QOA@N{6;$hr;auo9t1Kqla4OS_r70Qf)YL++$v`5Xp5$y zBQ~*(#W48HVC*(6N zO&X0n!Hvms;136z%R|et2f(#p*n85bcZOz50G(YT{TccQbgUITLpGYrQ(IK{Qygf$pnuLw&fW227AizN+v z5WMTQ%Iy(|w%&*Vj}vZI_itsp5PJ(|HCc99cx zZ-nE*UPErIyn{2u&NOBr0~o@Y4D`ci-aqu3RU4W&?aP z?U4#){foDF+1@T^#VtSNQ_7yk;-_)Mtw-ctgX&iNx4$q51qdzJzV%rOUmZO8hPON4 zSV2?gCbWH_zbbQ%ExXGOhJTHq4xnakFEvOx4pg=O6{akPf6U^rNHaeY5=m-45V*RI z3zb2RS@1HeD!TVhItr##{=Q^~Su!cAl;gJ83iS2i(NpwgiM@(;KwPg`0%C9)lm?H? z0oItmnqA{f-Nj>eb;j^m5F)187z8`a!MXfYUeDW7!YT!Fa@s{6K@aNK=(jUO${z%f{ad1n*Q zJ(_tK;V-!Z&NyN7mO*#8qc;9yBxl%KrQbco=tlOP3%UG_&@w_W`Q0WrwBJNapb?~N zwOJl14ai(x^et~#9QI!GqlSM`vy3?Jc2Vr;FUP4X`&1b=%}O3=T?P3_tY89;bQ|7$ z{(k+TH$1zOzPzfPmJ3sjbsnE7mXTXXA!FC!s(L+p{IDzaJnuqLP~4Dfr{bfBr$WoA zhh9gdtCNF%eFMcq|H8L3Oic6`DV31Sx*oCH*)$2=`N{9)ZM*`pds0mXU}0^IRHs^h z0XmWdB?+vQHYZ;wsn(p{WTjwv_^4TWq=#>vq}YrRJSfRu8LG$B%zIEH57t6aZ;5-!vg7EIZtxys#IS+7q9`ffIW*Ms z3>;Vuh{}}-IjP9HnnAV(dSOk;|6}?op;iMA>%ngAjjhve6ZtS$YY3bD8KAispoR() zK?I>t=)S??S~(5$V#-E>I*60{mQP;3Qmi6+0+#!D^MR?>&F7e|^BPwG#3p?uTpMdD9ZZGEcTT=?{an z<_=rP3bgz)zbU0$Mgv(O;FmkPTXVM_Wk^{H;|Z9?Y@FYvyh1e7Zr9qzX7^KXv#6+& znum>k8r0Qc1f8#woxubt1U&wFsy#~tYO%6cTi3_WH$wYWfNBvnyjR~q57$8g9ec0U zncnn|T_V9-XRv1FIk9p&sR(xxEc&faQ4SL;qxn8|8(BKd1<#6sqIdSEtSF!FiU-3f zZh-Yf=r22{Tuu&{jDyI2%fd_X2Y&q4Og77ml<1+)A*fz1XyezAYdYrC!EqUUbi9D6<^ zZ|2a}&W&7!74GWk?nj6HnwC*5pxqs%rMbsI?D96+5y!Fn(Vn5{=;qtTqeQCNsr$DVi7E$e z{b8Ue*`Ar}HG5JpDS|Q4{7bdBrxQ<|e?_a*Tfn=>-(HloivkAl&<(h#$l@O9enI`PcKb*J*l zo|=&|RBIpylXM+D;<<>rf3xbPfa`&yRXPTje;fyt^2;j?WhwrQw);_gkbRG~o|7F=I-x`pm})BART)fk$hrCo zA>9h#ge`uNTO?^AZxPgyi-v~-!_nYNtTEorGoBdIHER$Zf}pX!vXfu&ZnC1dh|A1giwl2#cjFeF45~iJd-6Vc zGmHAJ7&+^#Mg&5<0`vWY=i%|O)mcp{7g^8aq~`h`b1krz6@Ag|2(V2xhczk1!iH7MZB`Kj{WsP!U{vqD)KpY1#P!WX+_q&ZE^{LLgvsq1Vh-+;V2Ds?eWLL6=n zL_`sil?D6~j7(LW#s-Qm93S}@kGBh>Xw9e&OcxGBCOf<_L$-2ZUzWQQ&1&*dM-oe;8`WhEgzrPi(~mnCpZZPjFZD} z!;49602a(XBMNRma;kn~V}8Fo)zEP3B&s^tU=7|i*uI?r?ecd?9V?vh)vdTK7Qtp2 z4+d*U@7(CTVO5IwZ&8+Sz(|^f5(9(u$0uG8NMsp#accW@kfz@_>-LmHlffi)_{4j# z!z|@*hedRS@x)Wg&y6aaq{F#c+csOY$IY#e!dz-48B(ZO03+KM`C?Xfs?%}Q;o49A z6ty)u$icMS?*Oz<{k1Le3A;*9e+-1xhpL6;71=EZPd;ZNnc?G|&T8h;oCEBZkq<>Bi%3R# z{H?QI%F)z1b3NC!DTdvc&8&H>e~#>OtYtlvR@~3oqP2&zs^|0^t1>w&-0a)Y97%up zAo5Q`UrP)BTaag68~x5||Md6&$ACQk2z7ScOo<#%PCdH6giy2Qpt62mT)-llIuJqRfL{&;;puKk zFt#5_x!fqgrA>yCwrV)Dr@kb#CpPO7Jpuz#1@sEz_#2qlV)nr>iqqfCzys0H6+tVb z01_9T@1`8(Qugr&=^GzURV`5kyM^wv?@z~d z-5zZmOoAH>RDw3k&-a9>e9p;TRMtw8VhLaS;TWm!(AN06jWZQn_Xe^vQk#fwl#?tA zqcrUMn>s-560v;_r6zS?HQE+GCPIL;xN*YDzAx6(M8k~}>%lch{Wi$*EMN(nf>-XP z$xI~v1bFe!iI3~~uH(6xEBQ);>oDM3(c})|F{`emJ4kNYVLZ;|9Y4bN*CYqK#sC^q z=>$mvuvlGzAubZD+>u*D+lq{K)8Mm}+ft$>*7{2!mAnJ0prJJ(x3`RLlIujRJXYMP z1-lh#2I7E?Il#O>+AdeKlgbVYIhfa??lXy4$kV5P2C@{BO>bG_O#OeC6Z@{LiP{5< z%IfmpM#dTx_`wIi&?hvOpF7&+!r64gBf#PD{QhZR-~A}0QxyLIs>xMEM9HDzldM~= zenv)Qf}N`B{zE5iknWG6P4PO%#>oqR8ACt3wn&9x^)cirm|Go2+2M<09<96p>9!W% z7M9d7sU8PZbB1=n7$EQWriEC#;nXY`waqr9QZxOe2yK8j_SXlcp3Zcssc~t>9SwtF zeIk{Iu)(Vd^6O^j#SN+L>^OM5)@Pe3IT@k9=O8*(BH6)IisUU`GY)CV18BHr_Eb~) zg1EuLS>bSKxf%3(wyCSE1#+k7PRsQES>N7E z(U10@yqi2-oxGcxwia!Y{0)=n=UqSPFNB!;u$s5DpeCVTomw?00gFD*S@_4W&)()3 zUn_KAJO!8D>-jbQam$#%+WMhi@w7jMTT5~yXi0%MP$nJDp+m0sL?r*rRck){up%l? z7OZ$0*`PRAO4#@-=R?STs#uiuq-iWMBse&o6<@VP(@$MZ9n#5?;w{27fXuH{RLdwP za>i&m=FVUB28fz=FL!sV0A`?mwgOlwk7!xTU-Hk?&e(4U#h0MdwGmZ%qWK5mx_we( zbPMHkxo=`518H-G&_;Inr8%gt%^rruqOqR)3%h-oO!|6ZbIC&aB0S(z zbK!h}hY96V>yGC2r~jp+$COQbK1S=kE+d%PoHv=|QLZgy9E%_{%pm`7rjL|{{l98X zD@Keq-;azUEBOjO%a<_MT{M(0a-Lyi-X$OMw|j8A=XJv8UyR3fiO66ct8hWq(w`#T z^T@!*Dlw?WuRpvvGl8 zI<5y5wB_$E_DdkO>#E;mOr4A!U$-%EtV5sN@^<9=DK2amNqR`_JTf|{4A9qn3|N+4 zk$>@|w#`kwYnm)2H@TA&PtxMW<7ox5g3#ivX>Wk~3!*n~WV=6*`BnzWrb!xamGEQc-n)Cd=(J7;Z_e#=OlzI57E+6t|hA+o*csvMaYAEe*spl=zKnY;xdWDGqmUb<2hef|dh9RMY8 zGql(LqRn0F;c72;9u_D!>DV6p*<;h}L3n_y{Cg*}>Cac>kmH1s#(RN1Z2beXUDPIn z`c9uGRy`30Pd|XZ^G>#PrE}ouTFL~BJhVsVFOgML?wH(6x5`L=4?a!|4=iU$ohI4` z9K!J6A0^}cCLOsG+!wccTkLpWW((cEy10v{su-K6ncCmp<^J+e_kMiBCXalspl_*` zsu~$L3U?Hm1R`I8!}%meeM5WnaDz4M*ET0nY-p1zy4V^!@Y3Q*(bujj&bt84 zm1lf1shzly5{7tddi1^} zs9+g7K2t(<4LZHKoq8KQhaQsaCWSeZmp2z)=6zR$Vn*z8(Jtduxryg<`$GV+Jjr8k zyZNaBWF2NgT6RBL+@QZ}En27r-{sFkwp`1imoB$}2lN3xB zxNwNwxsEmXbU3^*Qx^99`!C{?#(5!OVXG{ofCu>jgiZ~*3j5X~ zjmq2vK0XIK;rfPNBi(Z!6fov4)YZ)i&o>lzje?mw$u4wV<{0vim-3Gsx*78B6R$sP z9!_3%^;6AAVu4`zjR7}Kzd`HemKyQs6nz6oE$H|qo9=lmOuJ4||Iby>@tIdmsiXH) zZMWu+PXZ2Zei#i!`a!r_qCdY!qi7!nem*748M6r7z%FA^?!7Do`VX=RGRcK8Y zJY6iw9Qr%m^WgI4#R(EE5v%@^(CH>CmE#5Xq`-$RcoOb-1a)!hZWnxT110#s|C~a8 z^eF#}^!HA}o}2^J;s0M(8bSWO;`Pa5j}KM!!($3gtnGzqO5ns2rH!4MEA(g&HY=8Y z4fejz+QqxNgUvh{okKQy;=4k(?qCZN7M{rFPlIQeAJ1v`sejEO>pu;iL#OAn_Gzk` zU~^)f4Pb}!tUa2OTV##E#x?lAkpIc$`=1c`hkTRypW4|#jJE9~eGd9C_fHlxsMAJ} zu096?(B`SdOd79Bl!#bu9(es^F`ee-7-`3Uu?}9aK2U+~ZK8z4+}6SOH;buwcb6!E zCygUWPY-()==>#0LgK;<`RTuq|H&nMX95lTA>qjKyOKUGd#e7Szf9euUY$eMda9j6 z|FZipQ}Y|Z?&q|7)T6imvimRjxAtK3V!;jIkN5ww`!D(HJ)>Qr%X_dniNEarm;C>Q z{3n-syNT*JZECn}Tg}%C?#Pzbgl`M{^4}Qo3!hN*22u3}Vva0PhX;9bQtqLgCsAIL zC~FH&8W+wd6t5nF)DJ-`OiNA@gDXol-lTR5wK=#i>_Y~HDA_Bx&A}{LFPt}@LC+QMoHVa^51MoTagaeC%3{ u4zq8Hg&6O7)}fTH7xPz`Ydy;5(K`*^WUNP}MoACE0w~C+NSD5Z`~4qq_m>0! literal 0 HcmV?d00001 diff --git a/.image/admin-uniapp/05.png b/.image/admin-uniapp/05.png new file mode 100644 index 0000000000000000000000000000000000000000..1de6d8ae146a3195f5a7709e4e5637b951727083 GIT binary patch literal 57697 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 F{{x(J;bs5; literal 0 HcmV?d00001 diff --git a/.image/admin-uniapp/07.png b/.image/admin-uniapp/07.png new file mode 100644 index 0000000000000000000000000000000000000000..2ed8c0ff6e16b1bbc887058b3f6a71e6334db105 GIT binary patch literal 26306 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 S7W|hP3LOnY^-{5-L({&;!>bMffgt? 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

    q~Ca=b6E|K8q_s99j!u!_! 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 literal 0 HcmV?d00001 diff --git a/.image/common/win-roadmap.png b/.image/common/win-roadmap.png new file mode 100644 index 0000000000000000000000000000000000000000..f4becc98cf0ab865c9a6ba7782ce4c676c5aef8b GIT binary patch literal 61359 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

    L=$+q^GApRDhOxN3+>{Wig#8xq5CsHni;$%kGcS zA11N^>yiByWhYcO<-~^+;#ZO}=#~cZ$WZ>_SXeoJ_h2|S%i0>27dx6pL|^{Ofam&1 zbkqELIqpu0vh?oD&=liz^z4mZ)e%o0wK9JNf)8UQlM}m#iXrs3#W;Gw`@)b&PMUnr9>4pT(uO zb?ae1e5_+Az&1H>?_l=Svz93_0dPzEhn$PKQEhVI`G|nOPAm^*Dq`kM7G({l$qUSC z=OwRjUUwuJWq$A&&@8Q>Wb|wT`jA^{^0j4tC-de?Z(CQJ2P2`Tp{XK%(9YvA*s=jM|%*%2g^qz_=X_#WwN&)lrwO;*uL-7d9k z_*~Fj4(+&udu7FA{^rjcs}|}G{A>o^RBlfa>GMhCI#-c~nuZ1r{KF;cLQ4h#(;OW% zZ{gmdWUXI#?L9smj{WLF1MB z^^lfVW)fUqzgUVz0l<|R6B7~~wXKqDJMd16e)R20=v8f%06=-3tT(~u$0Qj@u62<0 zwDu9MaYCBPXfFNucinpaO!F;z*DpLtj-QP{_Nb^my^n2U^Ys>3j&4M@FH74ElJ8nF zbyu0aXhFhs9nY3la$?1))@!#O52HGtJP4o zp64mW2u=V7WI}WN6YIPW{Fc2x`(5~D)JR}U7w3nZ`7LLzCs}ipV!3B;&5(hCmli+w z-iT@UkR(YM39Oj6AzAz+1PEuhs$NieO3qI;?~z-bnY`cCkx-Xmwk6uA1wLsKd*%2rwFHz{b0UyC|4P|q50GaDrL=0|O1H(mHD z6Ep|yy{ZPeAx z-dKr5$XHvXa^ic+^hi0}?gL|oa^klCBdg;#K4nx~0@=+#;`vGun)6?) z`^aY{Qy(bN0Rm;hNo8WqV6TwXI@Okjxo6aU&HK!PvWO61!2aLN1o78fKNLI}-HYwcg6Y@lis$Yg4my9a!{xU`bAv}(-cY5XNz0G+_cy)=*nazAy!<+$VhgAGQA)>UmNHV8v zHJP11xzkN)KhdxZXY{MgaQ_e&kPP%|An^;=JEO81K8+eIN(rf788GAsY5*axk;~kw z#a!|d`q8%wiYAmJm~M3}JJWTXT#()VlU?XUur`WBkHNAhVK-5M8O)2ljJ}GI6ARNT z9bL1}=R8L#CAaMDi>$y9F0E&L>I5kvS34Ntlz#J$}4+_;`4>8T_TZz!vHA(A{6q%uP^6HH%$aU#921vI#sCoPt{=2I)Wn3{Nyz9Q#skRu7-zKvkN1b(DJQ7E#iN3)f5r66jlEvXRb_c zPR0xmh0QO5jksphCb#rvUV(#1zA&Swl>t?k+~l4xH)fCpkfHKB46LzBGW}?mm5FHn zxc9m1MrQ*KM9&|R7-dtWGo8UM2pX?TePsL-ZF->rHAJf0C}4k# z^I$s95`;|IY*vLyI0$L?fX9Jm3OFp;Mu=R9u>-$m%5Hv7Jo%%oh$g^F<5Wg9l?iRm zYviYgv%qRW-r72fxA(~bqd9frk(O1Qvx9HK%jw4S0c}N)+GDT_Xpo?Kba$qF>gJQc zhPb`tw~`dE4S+%Si zivS13wRdbZoKR}SJzncNdo}0bz*7cg0oVxBxEKcp`7;6be^z_tblyDjMmj8T^R zi;QJ%$<$x)^|ytbwgoGu3CLCfXpz7uar7bd$?^NnZ^7wxGxk-hx+mY5(Ut3N^2W?! zq>F6Xg|B07t$ci#gQ&zAOx0vdDPib}MKteIt7ZaHSgF>_!|nw|uaR)S0r)M0P@ya- z+^~v@RAL!%v<qND*^MtNK_ z?>7u!Xy;IuNYj*hBC2Htlt;bLxSu2B8%0Awm~=yp@_RxNat@k!mJh1Go)$bsV#*_GRjj{0ApX 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 literal 0 HcmV?d00001 diff --git a/.image/代码生成.jpg b/.image/代码生成.jpg new file mode 100644 index 0000000000000000000000000000000000000000..751603efbdceb0e6a318781cc64f0327672c2738 GIT binary patch literal 132874 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 z

    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

    WwQ5kV_tq| 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

    k8#-b5dc|p2=v_`Eg*wcm}7NACe`eT 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

    %B_-Nf)Qb&csKSxT5Qvs$B7L zYOe#Cmo%LJf9-Cauq|TI_Nm)dgpe;WkIo7|!YX-*(tykIt ztJ7x0PY~4ZCl)PH7g=5aKAre39zI>f&?FGdvn7OES;jjAjp2RdM##%l6206i!>xpa zOTZ@%%*WkWRhbQc$u|RYW*v9_vjJKs1B2jj7)(e+LNc!>qpSK`U7z~2_5A>hg zLrfPx*O`B=hb|s%ttgxF*LnVHk%zfof2sF%ORCbyF7w>1tp8jq^fxe3lGph|zjB99 zzT(w4VV%DQbzIJR^h@(&s_BqgzWVb$H-7LCIk57P{A!=r-B*VizYBEv>JRDtOy=2F z=Hn~y-*>Sp9zXgMT640xy8N%x7j_LaD_%3XvhAt<$qM2(i`I#+LTe8x4Ldk~aXj?W zu27#L`A)Z+1ONGERY1U&U)5gc<^5}v(!V?6PpF`CBZuz8p(k+YrW`t#pF=<1HE{5r zc>nM6{~C7Rg+y&B`u&R*`Y#9RkEz*1&A1e`uNFLM@D{bZc6{+|*!R@?k_Q7cw7mmv z#b%w<)Ye{n^o{@Cc$*u4h++@KGhJTkm5**TG+b%tK+N5GTz^T({X>xHsBk~}--#XM z{e*L&cbreWeWS7X=6#=E*DqLoXKiO~!=I3a=ARI)zRh>x>y=jMYlW|3T$su=Ykz~< z9PKE$Xxl@NGHa?k)agPl8>(e-E3Krj*B*;JasIKauWrhM1%|7e{d#`J?_If9v}d`Y z^Rb%f=vwLQAJ=SsWPW>v7OI&pi%VIcga|6S=`D#py=5HArX3GhJ=W5Ip<$P2zNr~I zu$>t6K+;&be09B1@4~mag;3=4izl8h$X&HWRjFZWoX ztsoPLvnS5Ts9JV5tFvTNa0?zU8QS%Dx2JP$($I6( z_HLED=KBA9;kCO7CS+-~+rHz-V5#!>v%=GegdZv{tX}z*Teyn;?{B}ap^m=ZoauPG z_#8F{x6bdtq381Id$S&2%eK6i;3pD{+GT%v<9D{bqs{qWE8IJMqulvm;utFtgDQy3)5S5&8__GxYkElv|NnL<0)jYUyPJ+IMYMKw*v;5U#_+#fT zv_r3rM&nD5t>0MboI~D$hn!LL9~2(^*&ryS#*)@Z-+d_G^8^J-AF{%V zSS;J}{GKw*472cUgOceQW9Z-Xu?8i%v8NB$;hMk~nDShkR=tr%*I!ao6V`H8W1<_v zj)2;KI_Asz6$?*&A3oarW_NMUceoqRPf)I1Eea^pc z8be?Iw#v48v-6zj{ zdzu{$3YY%X=o@v-1Bal8j~?&4bwK;<#Ve zR8sL|g?edN_@!GHO^W{Y&l}7(Lq}o=iWF2->Tyz0>IWx)Rwx zA@kdoueUU>qg7n10#g;wO(;Le8Yud zXnF;GqtIl#H|+e9a3OD)sQlBDb$6g}__1!9wcqcl{y(n!`r?&9h25h+vwn97b-KOf z_ZuQz^1@=OYaL`9^>a6CHpjx;kH1{F@`v^7Z72#OgF3>rj{C=C6b-*RzUaP}2W<1p zVCKO;7Oh9UIJxVoq|7>rF8MU^6%WjIUftDY@#@RSw~N30rfp%<5&gJdo;#cy`S;zI z4qG-@8DknP4<#N}K6hc$1}m}tJLCiZ+1Am%`OM8PqsB+2jt7k&tL3h;a zfs8E1F?cIIig9`TLm9r}L%^u^A%ZJdXGev-XA;ps7#{e3U@1TXvr@#xC71D+Az zJTx!Z-Invm-hmMN6C&L?o0}c)T^;>0=G)O%R@&b!^O66huev&PQ}~nbqp}8>y-M)Y zO2OyP^_6eQa1Gr0#sYC#`S$AHqfC#fJ;}+0L^kPH^sC zetVA{?8dgxKMbwohPF^{E_nX>(7wSpmj}MM_l0b^&%-k&UladOy8ZZas_cUcfx)$- zx4t~Wh`9OPqVWx#o;#c+H^04n<$4k9!3BlyzVhDlb5=*k8;4ft`EBDT2M*|dAH~RD z=6um*pH&UL_FiGIh{PGMWu1RQr&JGk-oDgX9fTaPUF4yD`N%V~Rmy`~9$X3!@VR@p zUzM>Jre6F?vg;YW?uK#y%?_z=*O}=WAISI<8m`)Q>qg=3Wjcqvzd?K-bY&aH^tZ12 zj5EOwM?Lf)s@A*6;Z})b4xtjEaeMp!bz}3tdhY(K zX8_!q_Mh@o67lQ%NzJn~wp96aMBl>Q9k}8v8IS+SIrAsP{1@yO+=1_2uzXPp8^1lL z{qzFsk7a*Cw`RS99?)H4FuvQ~Gro}0f6r?F?a|Inhm^;6oL;s4RY2vH_}AZdpS$jhxxZJzPkRqV)e8AdGc-n+d?yzCEl+s*=<={CStMb=bYc{ z-y+60;@aDP6*>4DBJN9!|839Ptd(9P&pp0`eY@8CmwVZVsNIh7BMI$VF3=l!ApD_}VBLcy3^V4!oj+Zpy^(xwUZ63&nJ#;57tHdxdFb8F zfV;2v;hZimD@_}HvMLpQDn8z-^2^j;jrVMSq4%5FPg_oDd%s-p;@{^i6Uy%eRxK@1 z8us$*-|DWpV%_k)r2Qe%r+4kWuw}!#-~OpD#Ri-2{~vqr z0TorVt&29OpdcWUB?%}XNy)S%MS>!NNKO(OXi}4!oDn1km7EbIXBwKELnF{lPTeFy za+aK5tN;G@zt7p@+;QJN@18r}*n=92wN@2t)tWWutU2d5t7r@O1`n6M;g_f-dY`@G zknW3K#R{E*f(8%w&L!Z>;x{sNz2iA?(ixh%mhZqE#CKQh2d_vqBOj7W?5~As*IPDS zDG6D;1USYQxsXyIU!=Qnk_FefPj%WK5DfweK(}E^OJXN7){yPpq{gkySDw7bN+mzd zkDtb^JDzbLuWtZ*qsXS_d)+iES`m@>VRo+vTUz`arr?ReSs>@EOC{S@a7{}dO2X&>;APZi$)^pRX4zJb-If>NvE6z4PypWrB^}OU^z$~BZ*2_l)x*Ol$ zenU@3W3CE!(G4#d?3{~azf>V>Z%5H?I2=VG?^H$7nt$Iit{?<9mn7m~cXeQ&8mMWOV%|Me8nM9#gAB zVybjJ+*-%g!)>=r3X8~9ttOX!Xs+mz6`G#CL`R25{COm!+*qiMDf)(Wu1hY=Y3dn_ zH)~2V+yGNx{Ym&S(>9lmqxo=WoYRG1+(4Z&(Ey?82HNwDApSPk3e8aTgtN?Y$z+m! zA99Fi<{2lGzu`?mX%*&e(ng&j|3+7(ra}Ct#QCs^i#!Xa=2RdT=FH9h=fT^yoWri{hSDqH$11a$)4qAP*3;s#Eu1ohYRk4cvLc;6XFFOr zH+7amM(SSBrcfVI5~1;;@dtAo)`zOaAF7WjzK)w;ZBa-2~QR(=>^ox_ra74Ew}P0UzSoz2^qmJM^SoC}#G^4hXW@EE${5FZQF zsbngZJTw#AHFSUN3cPyyc%%P8_>4(zLxI;K{rX^GZ)K|UkdPpBB zF<-Vc>BPlQkl*E==USG5k;^xIB>wUh?f1gd2t=CQ`0l1CgD2u=b1jT0PyCSQv%_tZ zYTg-pT3_-y`Fj<{VQTN`;5gRge z)ay?A1g*A*#j$s`$LNgL6pll35vTew$_%3F^oTf>9IU;AhdQ`g8W=;X&+NopV*@GyMoT*KRE`5~>`Ba+cIBe^b0Y4Lxx21s$ zYO$7(w_6W?{7?scu0#cy?jUPNFTP1g*z>{oD0C;UH~1mygf{Q0sH#_ItD>Q>GI^$? z*SKn23ihzEIw7}1QzSctip4J}p7a^1)qUYj1c&WVxj&ZO58z{E)ROlTC8=Fu8~PnI z*bnL}GD*|!k*JLIw3O)DnZwSH(29!}$KsNp`C*J%*lBnQ&7tUH{!J$b@Z|b(U-iVm zC*vBzMz-LVyfWKAZ`Vu=q(NbsEV8Ju4bz5@w5In=QvB`hyVOY*U$t!oR9VCnj35Q~ z&G)XDbW#`EtzWy3t?s1nI!v0I922ByPgH+97^KWAqQD3)-*nSEV-ULzq2xeNnG)ig z;LoeKK9^)6O@UQT^}C4sj7Q+Mqa$v&jz=&VLC!4EL(}!uIDl-c#K?p~MfxXIAm|I@ zc_xc$fr4yFztz27C>hP&IUK`B3XH}=a8 z{XF%A_Q9i^w5P!;?FOW|_Zo#9w=Kzx`1S*_9)yjT z+=~Ai9C;CNz%A)@VE{HWjw*D4!h+oSH-w7i$_^BN8nB|^?+qp8&6(IfLm1{09mNa2 z^CiYT-k=0l=@1HRJ)5#Kj4WT>V4lY}8p)io5!$M{E29WFs7-#U52A8ya-Upph;KRO z8aQf0rdeFDA2cF5cA5m1%+I2JxH&-FQrh}XlKxsy2=wS$h$%aG#2gUC zB)?NS&~Wy70e(2VMoGXtJRb>aOwl!`L?Yosl?}On8!B@z>`?XmmR+0gX=OP&LypO>^6!b(#QQIwtTU;eJHLpie z+kPlExnd!Q8)*LPVgzV@kYOsCgE#8pvpXuZkF_hog^;yN!1JFo?#0K{vZ|7E7IBb` z{)wzx=XBFv*nW6}_X^D#t=lDFkpCb4qNAqxFgS;w!!_Z62%b${gx)q#PFHHo$In|fcaG*j2T z)VhUfnb6)!1g-ZTzS<37{3=V_k8{m*W#uU6G2HfEG=8>+4;kC;XdfvYtcB zeYKu6hf0|eD|_H6iLkksbD&zN+&4xO^U=kwrGnMvK8=xq)RKZsacm6Lt+6<4-&2of z^`w@6WZwb&N43vw3-1$Nw7b%z`U6Yw`Af;wafzW0G?IrX1KxL%YKEbeS<_$HJY!qX z!btG1BTAErfe~lVuNZCS)Q^Jjd5lDgiF@fZoA!_msWFF}Z+Q@MI+uWKYtp>I!!D1b zN1{hA^9PJD4{ybrkxN6Q5)l*Ibn9shkZU1@`%hDI`A6{F(%TILyk3UU$KR!NOYc*q zS@jdNz`5s1_}ZHkPXEN2&X06OMTL`mqDf#e>NRLQitrZUoQNP!H)~@jmLgi2JAp}@ zG@9L=>U?D}VNrC7l343ez>D-?dX_@n0_}vZ&hZmDmEwplf~o{CxxIM@5pnX**WkPa zWJ+4h*-sh_-{MFS@gX{LA>&Qd1-$FnkrY@mIIG$_^dkFFxREkH5oy?W%a&Fo?9PX4 zNBWXGiF7iZ*4O+zFgx+6@sdh|C&6TX4Hs<(HjyhWA1?v@#J@g~vAmJyr)jiU;&W>0 z&P@w0lBmZ5kgjV=C6ou@Z+af6x1nhS;clb7zwU}Y-W|mTbe+aw2kvsSVn5B+j~h)L zUgk(fe^38>Q#*)Ze*Fla?@LiIA|({DyuqBmB+8PXvA0Qe{hNZ-4};e&-sjY(I?T|Q z78x^KPkH%r8u?#Cy0#OLtx43VmSdaWgNSYvIRK4IbzK6I2hE+{qx33oF~1XyaMI&0 zsQ%oM`$(!IH$QWl8CnrQ3#ZY_H?>*8sRYnIXqmV}G+5a(AtWrXLYd-|?LRy_JYG!~ zHk7r|K+@s|6QX6A?IIp7M1#ZhA`MD#k3=~&$PWW4J0=c%9UeJB3Uvu@(#Kg=Dz&73 zZn|aI_3V9MIb^wQ9KPpWgPclPEvk3Te2Jc5xXF|^8@x3ybl`-ePrpM>j)nZZ<<@5y zhx}OjC$0(QE4p1o)bF3uyRMx)-gatur7F2hK>!Tn%3>Am%S>KklD-7I&Q=&EYVu{7A~Xt&Je zoK{-gZ1xR(Em*Jsx6zLJBU{XSa##LdusOLCaQxti>IZTvclA&~3p{-gLnVnnl<2Nq zsnzOKI%ydnk@sEBKFDuoa)^%zFS>MQV7$EYl)A8l>`Cv={&jcj-p`7HYO zv@k3JWU@sUT~QM|7*YI%rkuL%v>33}7DKN)t%u~20HmYfi%B;}A!Wk>gPQlARhA+7@x?e5oWjrrHqn;`Bcg%d zJ|nNVP~mnQL(Ad&T92>9mCr(o>cSu0J2kAB0AFwQ->?|9{L!8fP0L;{UxSu^T7Ev% z5zb#G9wrfqXZ|9*%2P-)Z&PbuLlnH2Hk3%ljGS_LWk+xiUN=)cT2qx&oh2bBU=D&w z>c&+C^jOC>e9%8jwFmN-m z1aiJGqNaFt?;T-{Q!!2{e5=Q?Vr(H=Ni{rmzl`V_v($6v(=~x`2Mq$R%EU?wk4N59 zZmOfKPUZm<0d!S7>k+}BdM0CBv2o>(F<|3*r#k(uxNSl~r zflUMlJyQpcNCYl`T?aE*8!u7v`YC;xyZ@3gmDBQ`Q(vSgRpj95{gfgVpIc_oiu_en zcg$MS`~5;<#qrb_-)D~+?a0pZ^8FiS!J_PFGO5rh`KM zY3go4Ylw*_H(b7=Ix6Gj)&&7sLu9}&=bNK5zR!UTb@ZSqr4HZqk&1vqeG1f2@!Whp z7_2d@QC0<$9Wxoy)t*ktP8FtTE+kNHjSo&nJ3*$TIUXHI-Q$Tf**Mth0Oo85MxT0H z8YcLqBv0yy}5dWgr%@HucJ**_8rHB|yLVdY5qM!{^3o~Obu)nu$jn7(mI!4ji*J#h2!k|8AE z;pR<3Z=Sh>qU`qhxTmk2S3{*WgtMzeL-uJ6v~jApR+B(?Lb+vz785YH3}Bm$-=XCM z=C#-a7XBB!l|Gy9lS4c+CN`Ze87F0Mw6)dPo);1u(B~5;s8Bz$_f(R+AiU-^=e4wg z>Y(+6%wRTBuNPh9FGyZ!obTKj^;%kM*glkX@(w-+PE5Vi9bW<+QDx=F`1H5CS-cdC zOnopny$`MC(|F{9IC^=9qG&bDNQUP2C1C7ov=!9+#hqf&ACV>Jpt~8!lrn{g!Usbm?vzpXSeWx`Ugc8GNXfNKU0CQHRivTloRo4=%WQPU~WV4hON{g?-^kaa6ljQ-DKq}S z2_2C}Z(2RQvs3Hsm#BUa;*CF)Qn#aMamKqKF@qkzVuWS(^mZR1WuIq6$s3aRE!$%2 zjIn>?vwC;lb@t#WvWO^c1R2eQGwXGIn$9b?DG7ptf_tQ8ttSC0Ug|;^r2>2hL|Hn% zd#y_3)xwR!$37b`-2@IUnb12s{$FouaC< zST1aN2|%DG+lutIosd4SZTVl`)Y~ZVrpXqsjb{}aO*;!E9TAmRThn;o*I4EB18n|H&)#9o!oaE)JJ*(IlhD`XHV`l9SuIMM_sW+ufx+}~n zUxs3V%fZ&S>E={hWhhj~2iDM>!NuM*!-QCHPJ_XXcQyI##xdO$#bP4o^Y{g~Ig#{3 zTJ4`$N%NXRB5uwnl*w{;l&@u;mwrhoEf(eIlxO;q^DcvzNmVL|3qPRNl;v-#Z2;}W zm#+uiI&fT?S^wqg1Ce41H#2_&$2RR{MfusX188;$?~W3&*8Ap8Ea! zW2s+ickWa?28Us1lyEQ`u75T zZdrhWE;Q=O^>kmU7w$^ zv0 zj7x$9xE{JP4S{F_Nd5|(JJM-L|4PX0;#CT<+@K}lhD7+3B(x>4GS-KIO>O<)Z0Lxk z8(QVXj?@nj%fX!L3;5naSv;cqj*B2m_9aL4Ul|@amj92o9FBzL$E?NJW@dQX&a@&c z-{|)~hq=KkNp#`Qa;Savmv<#||CkydX+7--`D?g{xF?s>ccY6lI3C6KLT`uclOY4! z4Zr2Q#gPb4flwWEp;CIhL=Z2HWs9zFFQp7j|~pLd*YC+ zWUPd#xFwVX$>Q^H`*!f!w=a&c=tfkdnk_RYHpF9h?RJ*H!;U0i=Wmi6SYs~DRNQA) z=c6Tfh9P+$E`yWTj&auFK72NhH%g+eIK~6UTePcj{63oeH}B*;_dMJ7>QS@=9mDec z!}|tMwx9^R(9k85vxk59c%ldxBm6vR{>0YU+d@1OCcFA$O?RJ39z$YuT)%${Hr&uX zLt>g+bS8+ryGFtPSFZx=9%J1+d>R7&77R`NQzMP=sV$FS%zu)|`_U|X(@*@<5@F~@>?rm}XevzK* zns)8(Xr<#)k;Ph{_Q+UjWkHF!rN-NTt@^5F#j6ba8r@sP!++T-P!_se$gzH|@X6Xoqrrx_nl{k-)wAMf(FL&uOtwNT5|e{Ah$Nd5)k zVO*|Dqfg~vB%Q=nv)Yqd$OQu}?=bEzGv3(CmVXy_1FE|;#MR!i8Pmr&->+=iVQ=4l zLim7*Fxmw!6@1}~!fZ1Zj7Na`<((3DNqq!d{i5|~Zk1jgyW0CbTKx)-3ys`Rv=KKO zGaJB6KUV-RVx!6Q=pvbhA?PUXXpiq>JO?be^+9;tTZL+g zlZng_5-q$(rc(F?DIo<)s#T=jcn$qq$jmBI!&Xx1dIgX z(Gefb)l|ps$8EoYy;hZe9N(#HP1jhvWH#~irTwU4ikS>HOULN_Sb-2ahNDSvC>kdn z8K?GT$rNw!TnynP6`T-humm|G8Ckx@b`|l!a2?$hO1osXz9+;G&U6OCO(dp(aFVN- z-~R!wU(72SDVW+adj2k=FF!uXL3#enV1FXu$8CWhnuY8jTMHyp?Sa+SP?@D-z%K=hl1Y2Ai?**OEUhDY^D0 z#20e|)pZ0G+SK7C_y15JCP#>uk4!9IMSQsr+AJ=-c1vDe@9p3CNowpyY`xgF-O2+^ zj>7DjGyT1=6dC5Y`bf!Le=;*(9mC-*hYcNd&Rt~2$-pAKoxVnt!_AUfpwz+%L}VwY zl+8w*LBMPg=hih`a-&WoF%hx%n}883aH8Hj*Mh$k#x&rRex}n=$?`-)F99M#QLR#4 z-%O*QMfGBc=OoDV^T*-WX6shr7PfScci-AOa~h%JpVD!E)W7+CgV4WHYyYjC)sfi) zMav6&_oXF?2vc#=mA??~CkzZO^TBvhU!ygdY!neuOS&?7CG-*y-;pbuQzTj#KW8c) zPGU(;>|@|SjN!@&LGqn4I`y2B2E(%|!6AY^Ry;EjKxCorjK(R-1|ahJ^SSqLpC&`% z{)J@Loa9o!1ob)l5lGagS)!zW=bZTK5&r4@4apeH@3jH$^z>~zV}SJZE#QP=Gsa8I z0Pnz=OP~Cd{u8%b=mMkMX(ym#{lR|w_cPa89ssb`#n{1gpXj3LcK~tVO?e=@{ol)V zUNJ<*-!K1K_2>BwRuPdF4^4E>csaF_KXodWL4VR2o7=%F z#@^TH>3UdFLT05b$_Rc2s5_M4JE@giFmUTA=xV_c3CQQ0^}y{Zz+2>=e^@`S9bZH4 zDOs}4x^XUoM;hI2!k3_st@7aCC;#(AK>Zrn(1}RQA9g;R=g*-wm4y7(DHr2)|5;_9 z8vUL7f5K0{rsa*$iVF>!k4Ar=ddG`s%z9+C`37RcDoirD|FsLl*O~F>Axj1S;$!}K zKS=e-;x-| z$%lK-GH*)DZBBKwEs1%xO*h%{w)ZXnlWF*X@f5L1Hp5t&dI{KJtV`Y6l`K_q`0lmd zv>!R{eQ<%D#H#khbAHr$g#KI$(d&izjVzr%)GQtwpeVM+cv4YQ_@*VBj#Y@PXcn`p zbkp7h0z$BF7E3)p>cZKKtWyrmsq}NNzgc$u`#R(k#q*<4$;OHS_cTT74F;wzQJjPDP{DqGU=n+5MF^zyLP-TzeZJ{p8&f;oATduaPz`~(rT@;AXj#qxS0 zx0SmEyL2nOl!NW=o&D&q2~*MH-A$Ii(fZlwwL&3h6iUlsA^T=`*n9qtNV)8d0}pG{L*h8g0K7}?K`i8;mrac+w_ zA{*k~+fbRgv9D9**3IAj%S9DyY4h{vH<%YAEY0AG18<7j9~7GAO>9LJE4%8QV;jTZ zNkrO>37g50Qi%!40a&-@AFbg=Lf`xK4b>R&}nef>#Z?KZ6;R{)NmNu;S;Ec zu>@;GCZ@97W(!hzpIRt?1I~8K6m*4;*)~@$nP;$3`9p?kTC^MYmd0&mF|y?16*26G zC$|5R)NQ0N`j|~ zTBvDjjN{~SCgq{~o63;Eac78{>Y>=u)$#U2g?5D#?}JkUQ)Wv#l(yw=d@37Hk@oDH zupgH1PYdFU>~+22QtxBGJ^d=r79{c};TxTb3V&Q;`&c8eHTsYNv}Cotu&CM+7Kb2x zdpys53o=Cqja>vS@RCJX>I=w9Rpfp({w}iUW?QYFeF?yvF#N}-jQ8&?g4QDtszqmc~zUfo9E<+;Y7GhoFZ#a7RT7vIZ?pE zTBV0Z*!q~@A#>w>D=XsRL2;Vg@Hq9^kRP_C`$EJ{_7ZcCT{WkD*!46<{6I$G{jU7a z#^kRd?aXfo>62tkbV0T>=ya^786*8Il2h%5;oMLD&^MhEh?RePjWu32=oQvNrFG zV63h{ViLMOk3JwTY42G4G3F-mE2WOU&rtJ{zzf&5N7#P}lFfV_xTf19lF;#SD-Z+Tt}g_^N>f= z`Ja(S$9ZtI4w6JR_FFccWB6x^OmdF!{G1l6ClxLj@V5{Rq5hR5hfecxyc~hbM`})x z5`j@iT96?uSLRiA4`oU!QKbmp=y+2L;vIj*c#+y+Ossh=dK0KBu~AyOe_#IdG_;)b zj(nS#1txan=py3iA$ooNAJ(<;YadMtj zXfB4wI=L?N2X zNT$(^$xJfsg%qJ-&8Z2)*MJJm+9ZrH*n5g=y^;!t zigKTw6&Y?yJ1ew8D!n@aH_^t2g~lCTFJxJ+#)~TlznbG#d23HTA>GIO*4Cwd z=tS)jQ0V1XiI(1rFGq?R<36xDU9;v%>12i@b)p=z?1YB0bE{e`Wo2VAH%3GnY`J~Z zV;Mj}=bQPtMG@vW8&ad`AFU<|iP|ZKtcG$Ul-0{R4@7TqxPFR>u(+8`UFuPw!wFMr zp`sTTp$Oy2B-2;Am@!1dbQdje$I;w+=x(eqYAU||o&!+}VvGyox4s0#UX8Yoqz>Yz z{2Hu0gkNjho_g)^KAc}#XrsS@|#-fM}W3_>1Sec+#2%iobvB%B%hn zL-!k>!jw>U9H%*R$*ec#nbg$Xb879FiDGZ$Cn)O}2A8L$QD>LEV};$ej3OB5KK}N; z9SwcY?LKMODcy%Bnx!y%y*o(DNPB64T11X?mOV@wM%nr*me~L$Z4Y`tO%y5A>T*$k zh}hG)E3Y*{@M8U~*ajm*313%GR3|gu_vUJ{?jB3MysAN{#h9I99^3|pkOe7Hj3;NZ zyQ{FTZDBEaKP3%v-i@vfrrp17Ntv7wgp^Fc>@8V7SH>|hNhEVmGz!U~zFVO|6?6zK z_rhs@Gu#*KEH@H^kv|_B0fn)ANnJ1r{3ba+=za-kcT;L_>XZ|y$#0ulmM0LEVTCZzI1q%My_Ck1xR zIo225U!zQ{q%(VyC5d@<7dy5KgUw~a?aR!SXL$WO7L!?x*^hgd2x3ae5b6rHk-yc* z=R$Z=WxYW1Yg$&Ak`uq#@QWM`q>+KeLWxsZkZk`)asU#lm`@mGkynO%s6#=jpU@82 zV9jZeh2VRwI@npsZPGYZsB?zY$@FiA(ye=6*+n^}HM{0)%f<4o6MYHwABiai>;Y;) zG;G$e0o@JB>$@PH1z(Vg|GN82qc4A|3=jUm#I!ilv%s#hay&MF%e zR6>nybIx%I7?pfl^)sagEWIMsjwp(ADFP94#&fU<6FEU17Y=0{T3EOT+{Npcub5oi z9uQQkXy+QlE9(0$i(`*I8VN?B)*s9zmA=&ET!Cm9~9X5?V95YqT;}73^-=e<_shuaR6FSGr|N(sOZi zCSlgWtJOBQYxF2HOm>o5Gb2lp!JJWo|$7(zc?~ci4Gw$2!tPOjd%|=2=E})H^$pgb~`*B zpjpLm8cR;|IrRUS;t$h~$8VnrT<9d?o}OO3+Z-E+$FG=EA>=__v5vcJYv=ST)gxSS z?~6W?y21)~UG;dLrM&LV^aVH9)s3%zgDfvXulcLmtKWK>$BR#8I=t9ruwLs|BM~^! zreWG6uA(9P6XFA|Cf4#g*%p8-7K@(T3kJy%P!n_9i~#+%GW&+FJ_DjaIy z9Mbo6imzwyG2FDH4r8CQ56rpF>dN~GyYOYql`uDAk2Ne%ktY=>HBR;Za4v8d(EwG+&#LV1@x;{_eDk5j_O%iz|h z`fPS%iqYVgZ_>pthI+j~l6_MuCK~uGh}?)O1A7|6L=(n((~gFfD*Y44FGeWFKXvz$ z{Og>?NAV&*zo`sCjqNjE!06uB;8p_!sejAf6W$Zh)CKs2kYq{2$7%tU&c0N2~Lh8{HMFYvdP=Gv zF&%C`5So+l6v=x`FXR1$TFl>-@Ycr;&)G(r)+dy9-D#G;1F8p%ShPg4TFJw!ZBBpw z5PFKcnJhkVTK-cX8e+Yf)40m8%|(J03Yq6+Ur zOq6}CeNPV8|KWpeJ9e)m_n&@#oZ|oJ!M+w66Ce^fZglT|x+hu=OPo13QeD%=jdyut z^?)Wr|ECWk3J8Aj-9J3;pHX)+r+{mOEodPU`ZD+wy8J-4|Ej9($?i)4YYKV`yJ~w} z@2Q6z57TrUy-+f(%!)j5vW|-LChw#juX^u9?P37l;Fuj;Utbo#P`|~ubW=?o-$})Z znxS;lj$2iAapsRKoPQ%D08K_>^|bz%2iFOq04q?#paTR&Z`VVP+eeXrem-VHM1t^3Fr-P9{!&b58!!QTUO#&;4qVcmkhuP3nnF zmbTS)i!X(|CP4(mYSnP2t1!iz>NOP~q*(LhTRAD*3hR$r5_gJc-dYJ36v>}7L?Dlr zhJK-=ZO{E92-hij()cx72NIjI9KD0~fYQBwCc*0&s+RzlW(=kF*8V~at8)G^)aq48 zh4>J^2T?(W_}9633V)@tpATW2K$xEu&-_~LirtoLiVTQdWT|yt@LOpPVLTW*{SA{} z`{yPPzLC4*KPd7lnkE&9cykqM6H)*KRC}(n2*z#*BAH;xhtHTKFGK2oP!7l5wp}V_cAo6Q5 z_Q!LUKe~pOwRUz}uscBY&mvYOerLvtSGBCuL<#YC%JzrpYPl8!+DQ;FBpJyFKF>?$ zC6i?Dkj80hv*h^Z*39&3ZL$_>@}|t`gq5#3B%w-z%ZieuQ)wvawWADl7s!y>^S3c; zy_UcM4DOb^lJ}$i+fXYvC(E)^eqQZL750BBmld4P0}Rw1z3UCFBK@XUDhx!G{4NyP z(UC2e0Jf`nyim0tRTAw#6CJ?xf5zNVCC!*U1N3z!;;XwJ3Klo<9WDeDy$Njw)>jg0 zI&m#ioKF_{?TRy%l}Z4R53co#8}2+)BFxoStY94qTu;Llc=mY{{g}UPqwoOMhc?xV z0oU3b9(HIo=N=PZ0`4nJ!ly=TC6ZxQBewJf7yP#9E9J8nJ~!lVM1X;~?C)nnZ~0M? zfh5NM5JUKpL}6tAfek_;9-Gc^PW~Tz8~3D@iiD7!aSK@EGtP3pL^&XPJ?lJ$^oceF zy?QGxq)e%pjcY}gy`I!1$z&XzNdDFgfjl^;2GAG!`rrvw?u4j_N=6C@(ceyYArp4j zRduzspE%Cznb`DFAR5x}srv!7V#+r>Z0g5nrto_3H6dZqRsa~WE55Vg`72Y*&Hc3k zxd%|jVh5-;^uJdoDhp;>J;g`0{tE!Bjehs9V*d<^>uY=v9*PL=elzBA%0ythEpD{8 z<64exI$tnS<`~#TREzdwBMW8Lqx4;MtMzk+76u_~`g8?$i9*eFSwFtn&NQBQ(d~!+ zpsv}q(b&si~jnLn$6pM>KErw z{XKKeO7Blz`a6D8_D?j|LC1eqgp3%fU;3jXj>a(dzo#5n!d&l;qm##rkWMl@kw{R;DS;&oe!`-szoDUuSo`ywJ z#$nk$6HhM3+3w(JxnIzL+j9!Sg6m{qBQM%H2s&RBv#9ACcz{oVDlN&pn(gTcFKby6 zda|Rb^Y}Ypu@Vnm_MJ5d0<6HFGUN9cl{`*pSwdZ+=>o=_>KFwKY>$uAq#{_Se{1ND ze|Q&R$oyUObWn56Rdlt{P>V}JyR>&g5A{9X@atIt_f0Hz$kr{7A`k4bIGyZFo0nG0 zHsb?C2URRosbzUbDQ*xO3)p*{9}OV@;oKcgC4RAF2wu>~q9Eb}D}SQ67pdu(&)8K_ z<5XW%Fg`0h`1elCW}oHMh+MIFP8q+4)u*8FST+T8fVyx4$8)K(8; zB4J-F97*Pz_t&a(5FHUJY7Z4jMuPBbeNGE*9d?!g;5bF_p2|}sZ}=0q(3Ha)Me~~B z*Me0-p1MY~w9X+B$&ITbIo)X_b;0YjrhS1)@H$eLf~^o)!t=GmxdwsFLnx#{Z(`;W zuzAk-Cx2W--zQy8NM5uz1&=e*T%f|XznpSd28c++yvMHpn%H{#_lbC~;?W%fGyTwe z;)=^M9s@}_29e=nI4eX=j*aY|AHL)&&rk;zhDJsrlHwEB#M=bm^qmlhkj=|>)9@$4 z!c7CAuW{-y%Sht&Yukk1zXr$G&r1nPlsF}bYEO7m+Mt)^T(zNXa3y zhU<>8nz}E7C+K z$=7Tj^{qVv1JTdWA&aG%hQfEbZ_TZE-eMTr) zd%As9WW32Js6>(?RPqlh{Kf2*wEs<*gMY|9{dcXEuREp@}% z9*EY_e+g3XzNFUQXpPNjI`R;hW7_6Mcy5>YcDUMY+0N<`FfTCmr2PO=L#-mn)uAB{ zM3X(%=2!F8)v_rW@P$?5Zt4pia-MuiPf+oNCp}!aI`3X6vl1~l0f4U(36q|g3MIUO_i_XxPiivaq>ewpi}z zHyy49@OM&?9wURtg(Mb4Ihza~Y?NaZ^ERE?lrCNL5|FWVBSVcyVi#TOX&urVg1vk@t%R{-W0thB_}ldoVueJebJHk1(sHwC*td zzGQ|oI#B@`ekcmrGf=*XtO^Hx5sO~g5~vVt|brJ~GhKA3eb zKfT1&W0CC^#`;B889{745!gNU2beH_fp-YO0K8pUSzUfX_Z);I4b#&*mXskuk6-Fg41Qc-sF06ntO z*EnHMP~IUhoZ>2tIcqmrf47}sLN|$guMvh3$TC$O?_)2tG?&kb+MC6cALe)rUBS%L zG4h@pVRJK1zpe2OXaZ|$yw=h`CerF?DlXRie4&NihAqy{JKB~eBi7oc8No09tQOfU zCp+u^2>W5JjgxEJh3iWYaYRzY`0(bg(zj&iOF(DQ@fQ_A3nydiUH62H0ekqAE2r)g z`ilBt52${s?w9q4`(4dG-hT4V$R%O=kdY&PRUxMKmR2Ehi@Awn@++gH#t8Foa|>oV5SW{epp&QJ$TcFNL+ z$nJcw+H;ecl0SDC$7D%acTf-z;#8G%HG!0EPcK*a4Kcn0&K5~vn7-q){HtR((0&ip z5Q18{6*N3kXQ_FeTGB;c4@w%ytorqmjN-&?%Ql?So#e4t5^+QN7yY3YRB!St8yVNK zY*vK1S?CXvh?-noVMR^*0xNXedQp@v8W*>9vrMyM7Uuy)?aHE2wGY&;C#Ta^)m#-D zyYPsteVJtImRp8LGvS`R{?TAeMgPlW@aQL@M|Ok(sA3YeZM^m|z0>p4PNydU`7kvr z?<62bk`SL|dWeUuU=_Yz+Qs%w9VC9c*;c9DP zlU>(F*V+>Cr>AQ2u@aE|?%NW0?3tx@r=$j2lPNXR7nYR)lyGTo9a5rSc+nm__(mu% zxY&Zf5`H2=Q}+~yZ?Sy|JfiIW<6}ELEl>7Vl$q1cS`;VfAXPKbbmMr5EUqHtbs%*eyQP3dowN6q zR(=&z{N4K2$GC(y~-p0}I8e;AjZa2gAGyX5Bv-wT6YSe^$$1MLgQAJq}wB@BJP zJ;cBHFUwS|FxZB{YeG-gDoevy_Qxe3p*f$d%C6#74YrykdMDV*5~*hZ$`Pl1}_iU zr*k6<-8OQy%Z0~-DpB)Zl>uU`w^!UCJol~~$|4@$`Wz%CQ0>qT=&D-81=WnwHlsoUug2pHzNqSrHDf^%voFEIWn#}W zYX(;>?oqpFCfj>`@apN_l_s&8C#Q8zpswfgot}8OhDgR-OP9wM29y+=ERYa@8j}Q) z@1}^p+~K#|#4@=8`S!5G<6sx(<^ko%#IP)~F}TSnsF_N8Lw70yKi|ehN~tBb*QF-0 zmTS?n#l%Cn?t1G)CFb#fwv82B)n$Hj2S??We6t{YNxri1=oSK1OY*ov65kR@XPP$# z9_U-%2Qfo7gz)~I(&|4=aRwHlS52C!ZeBN;iC`n8g4fF{qF~6)u)q6r#m7&E%aE)Z7k zs8?=Xp*VX(*-;Fs`jE-st219LAo(Z=^NKAu5(=jY8^x-0-r>3YZDda;mIs&n-jo?7 z9Ptz`SGa;9YSFp7r$}wLDdFgs`UsuQE&SFu??oJ&e{iHypli_*3}FYlLPzzW8h%_L zrqY2PaB*MB0MdG^Yt(-GG{m=5dRZR*o^rn=3=g6C_=5|6eSfCpr`Mxyhb?s9){W0* z=eYd~NA8SaXK}t1v&~<11?L?DS%VVDM07sz(>}E| zkjWQL4e)M=VeyO#FhdaB@v=d{dPMkN;b9f!vK8;80N^V-YgkkeSyH6_0q`+)vL(kr z5=AGbKmb)upd|nx@~&U?8~%7xIr4boT{Jm=lK2c+FgelfF4HUfI?Hcy&LLX4m^Pi4 z26_UO31q_Z{Ctjqo~j;iKN46cnn9(d<;cGNf@G!mJ47_#USwRJDLC`P!p`vU4_DGz z1Xx&ar=a9~mIyRCW32e&V+rrSiU+{^14Zes?we+IiqfaI$@{y!SXdsZ1K%LBrM*ga*fCK|3ZDq&3Jo0BB|TnN$ygwSEvIBJ1VgWx_$ z^s4)aJSLO7Vndmiq8Hx6;ec0`5Gz~B9QguJNm-llGG@w>?ZjpL&Y1s7t$;-8A~~aX z`&6(hvboxf-NlFiiKaX_EC^9{i|sL1Mo_$H+5NmNBfy(hz2{PSVevyJrM~AP zAu@#K!Nk&#N-}6BE0SmS3Hv~ahpkBFMqAVNyM!osPEPY$?nUgMiR77Kto2`ohEu(| z7K6;S^hQ9gk<<$Z2sH|Suh(y$m}1NdkUHXwtf`~X@Lt-w)0}0!im5Z|8f>X_Aimji z*InitBqsJK)jNpmedw6a;Hv(EHwB>_HIh+`r6?Hz&1ox+DAK6L$cd})Cw8*;2Lma7 z*PQYdmH$wg`ae{I|2Lr5e=QpS=WYL6eDMFVp(2+1_e#e<%KpDYxZj8Vpj-mE*N?y9 zg5QVEO`C4R;r*w0uO`bWmoIz^YIQ*mVtw=)AX92cUT{l(ZW23B&XrtGS@fhntpTH( z1T=~L%KJwX1XYa8Mq?_z;cCD<39Me?or6!3z7%r{8QnnD7 z6|h45H^>Iaw?d4zQYp%v(Hhs}qR|knH#1cGnx|r0ww{u^(P(n&(j#J-3VXXm*E95$ zToGCHQ0?IPa5^btaaX0jlWuKg6-l!18NU^mXgLi#S(~QxvIWH(r;oEAs~AYpmRR1! z((0Y*6%sc_Xw-NgL|DyWg4IPmjJh}hE(^2WH#IJ!vfH}Nl~VOVjh%Xc#Yuqhc>|_^ z1HQu=H|9fJZJyA`t!j{d=!I(u?wWWH&R9+Rjkqv3{sN`=Ed0rvymeaO7$wK(SNB>@ zDb2x%x+3`dH`di0{@!Sije%YL2pOtX!p|}e*~VYp>j)XH>n%gBB$q0&y>O($Cij-J z8%mJOgt(}}O55@qwTo($dONC(#=Sxy36G1(F!^obBqX`hK)+5o&9rx%LhhbUIb;<~ zg|IYVY@hGDyPj=zdxCxWd3BXUAHAGfd3R$_By`ZuP1lnZvI&=e0;`OEWpr^86NXh@ zDA}CnnT<1R7-?jI+aE?i2;|+~9h_HE(V`4EQFPsa>C;aT8Neg5#(SpH(8J{-ui-w1 zb*c8b?lX;{*kU_O5tia)@z4lOLzOP@V*n)*)Z;r%XJe^@4Wo#-8ds}%sv#V=5DMm} zi{W%L&Tn99CyX{)lW=;O%sV$0Y6Hu&?wPh7!nd|PzuV+EcF8`z+U;X8MUer@D*G9` zs5$MuF?v~hX+owWN)9j~?9Rd2RP8{ux(FD1Ma!|&mDA)3WzPWAR&h4YUJnW|m5`=% zIVdT-If;$yylUKyG}zoUO-X|*1KIvtI#Gm3cey9JnR|twG-Y8&?)-;dlIKQseJPIj zcNAU7&R73h-;a2KhBsN_*d@dUlwQfDYUa&Qmo}Lkd}7hZ9C;&E+SMrxcN;AIcAAu9r{$}2*-Lk~E%frJl7SX8gzFS7t^OGbJ0_L02^gB$UV3Uj z92$h;u^=g}G&_zo)f?e2oWYgy8%$%0YDSNtHpkPXtJfeR+R*qvv}V@2)JMr6 za;b)ytZESW`zQ@5VPISLsRRVNR;~6{ZFW5isBy}Vx<_!j)8Zn`U78(&!gV3X_L=T< zpM0!JUryrhE|@D=VxOx=w3pWk?n*8E1chVIVjtGth}I_9^25J~6aoZ825iLFi$9Et z3VOz2quUaxX8e&86Api{*zIQ~Rp-yS(&LrFN##!Zl^6^;!ip#4_jEj#@Z zQcu-`Fd5x9x_`mS^uvzD>LbIT+5~m?Kt(!ing``#IY+6JR+}raDUs`uq^)eT4KLyp zzC*98hXB8CNbEb(%5Oxcp%QkXjnn=&)_d~`JG8W-OqGjgl9fpo2+N}|@PJRVRcCX_ zB=2>luxeNilw_IhN|&j0x9?!Fga-Hd0Lf#e@E;EgMF=^DY`VfB8eOI-YUIonIzK^J zUxCb@pts9Mt$%j7{JytCh}kt0t{ai`0pz;f>v}&yO3Ea88?7{x!I9-3MscCM#=I$H;knjrX76h){HAo5as7wP1Vhg!XYKf-PWr7YbpErB~w37LG9TodeUAIviRkP>{l zH6R6s$V>IveFYe}0r>{%W6v>US^>0%KbxA8o>eT~yE znQv1Oo+?m+cim#+l-IgeujQ70T(W8?xxanBflD1t(u#IwRM6N@5zdzv^pBPcT@9T5 zsPH-GFXZueDgMB)dbhgPk4o-++M5O4W&}$<&x8|}1(c7Nxy)sTb!QkUeyQJLm3t_o zR!ai`Ub_1g3sp~CedEEKJ8HKrh$dY=(H5%=7eRu5)#HeTHsky#qY z=IPi&z#nJZeB`>d78Fb|yxUPS029=<|B~+yVmA}-q^7#nHvv2+D03JyklzaKR8M`CFdlP3lD!@cbcYuSd zzh*YYF*u+xk6rp;sN&GDDCNk;ag+scGWh~ z$S*u~(@x6TS}~VIYc(;+con%t7Vn_K*Z~XU3FruSJJp3AD=ip>ri)n66=Vm$xMPQaI zKrfA&fjP>w7USk#K=N4TJV3Xziw+cVxo!mBAK!{licNfo^49pW9_cfo3>$kAj{?uP z8Ek%!`xa)5;}DUW^C?!=GJ@oMi#SNVj(AX3Y0DwGptq%uZ}%pEE~9{+UY7tNt-bMu z7G-)B%l|dEfRop~fQIWG(+c_PXW=Dg576@^PU1|goX#o=!OY8-wB=vyk)KNb#RFI) zob9BFNzHV4bC1@45}U7yZ}|w=;I(MQ#Y zv$F<&Rq9?67arp8)oSk*PqMo&`(6BQDo+`#@j|Tf!%Y=0EfJwnyR=VXqp8YGJNx{6 zE}!$tKdu#hm>S5vkmIhTr#6l&!YWV48<8q}m>%I*NX!{dK-^qciKwVx*Bi(6MN&pT z{L1J%sU!P|sgIfSK(RwmaE?ZQjw|97r-VVjRmiaEQL23HT~Vn$C>6nbw01qER?t@j z#}l-MMMWK@UZa5)loX-db;I?+;hV{u&F|QZQtiS7C3?*ST~tY|icEir(~qvaCbO+t zYUAb^ot`b>X}BoMOy!g2vFc%`ke@bc}BAO2*iUbj0Apu%OpY85{={+Ksr7q3%z`kT59u4-=k z_-%vmm(Fjn8!f~6jchl+JGoPB#~{*@Ad_|Xl_Nfhao}!@y{s>=^&>R9wB8U=xd(VN zy=R8nBGyfhxeaarK2RmIhe_`z{LAsKCxUmq97MY37dV*}x*;K7PiPx&vn+?4rCk{R zPKt$9z3Hvy23-_5U`0iqg(OAwRGp-yV~n5PBPE3rPNHsm^+g<K&dK;%&udeDg zj^AVXh)V!DExoP6wnd2dK$<)dFXy{!Q$&9KU#E@chj7r@2EK-laA^^}7**!-lokfj zFTDtutmy^;@4;V9%^2_%UX(|EA|eSH5tE5uNcyT67{8Ry_hfRj_0ms}AWdU&Ii_2T zLL)LhXN59V@LK0?zjU_)XM*y#oSPOpn^pXhv(^(HMEUSmGMgmh?-n?z3)Vema$`TNu`j! zY~NLm>NcVdL$S!`3z&C&7;Z1z>$wfox)jw4k-pfYj{2`1xqOCer~rE)tj)hUk_GKh zGCFnll@P|8&cl7Vc3W)t^Ix|jXngqciaSaQt3Is0R5_C5HT+nQI%Lq1V78ueO~mkJ zE`IOw7e|7+Il5HK=z0Q-dD_cKddeP-0x%U)QTq#m=%#5te#DOOa~CU4qh%YN$mowL zl|`pjJqT92$-?6 z^SvokyF9MmF-pX=yw;FPx+#w{x_~s_w^HCVApdq-SDD5x$_ZH1oFhb5hCrI1>DFJ0iv3+vdfJ}{NS-4~AO zb7oXY=2PzRgN#=XJI55fF)AwYo-*?Y|Fzj?JJY^R38uPWtG#VWZaHgCVaGC2A5kmp z*0tVBpJTS}!(Q-kvqIj3UE#yoTpeogSOwoIInMEdbwHwbDL+s2q~a4h$KbTGYp@*WwTAr||7=GC)8y<>@G9+-lKe-Du;-1^RuhIw=_nI1Rjv!B zgw#^KVc1xdkQrw5ScL#Vn>UMgPhvB%{2WV|l6rqTN#+SfdYP4=@@V{xcbLlh$`6FK zJ38c~(Ry=zC#!!E)ei!aKZGw$*22iO>wj?E9FxzVDMKntC^|Xm`)h;`a2zrNEi_TI z%w1D#HJHGq;z^Kc01izsZKLF#nk{r#F0@JXb0STz1v*_PruFGH{Hw0G^vGF>KD-F6hcJz5V?U;|u(4^Q@O5EPVt za9XeRa#IJ7asI79!qQT*AVd<}U~~SFIPNos$vlGMZOLw>PPL1v`jD7bsq)!BjsX0m-om~ZpVjR4zq*O_RbUC?~BUse$k9h#P* zikQ+&#nV8B%6-v!n9~FT4jf^S^W5_kiB}&z+pA64rcetGQak) zqc)qzQMtPWb5(_}G~A9HOwD9Y*-odFBi(SqQ#V;JTK)|x48D_>eozTZyuK}mT=rI5 zN;*L^c#Xnt%T&I79e#`^Lq55Tes~38j;VH1NP>jDtz#*$HSjK=kzbc%GUscEvND#BEnm{Uxh4J9Y_f#k$!6*l_(08$(n4=jOr_>TOIPi9g1V7nV zsSVpp&du0NT;^~x)=OE~a#kkRSvYbEh-}b64oFP19X2qiS9G}tZ&H}QxM0BPJu++F zm3yl?SfnJkK}EE^VM>>$@NW*%fr_u5F((nKFrM70JLDO3d@?M_j#z&_!xD>=TVVg+uS3O8Q=p6K9Kc z1Ru4s8ARuxiSA97yK^}5M0)p;-vtyPqV8>{tRAkztehdpnJ?(zCw#FldiYb9EPg07 zSW)<42&s?LIS9Flc#)sPRmguS!3_V!MDl;G85o_WY;$R=ty|XqHv3GIkLsc}Nm2EY zMEVDA-!um8d!MaLZ+JMVe5s8E_as+H+d@gBgUBN9_t zZYy|LsUV^KywOOR0A#YZ_Rg5MG*n5m!0R1g8v)vkFQQ4UrHlyLP37U20jtecnNR)6 zRQ*AyywwhY6oiJKRG-WMXwPg{e%#dxj^`f9f{`Lr@}cKUu;2l)m*iKmkIFuqNmJ?zxNK(t=4G(!B&n^}VUw5Aw4SFJtN56XOa7q4 z%GV)y;t3a~ulMmkKaP7;W*>SVQtqV&JLrCr0A7o9`rL0~NpBfgB_SAtk)B!7YFFi2 z?`9>6XrnA?O?|A%drOvL+VK`0yYQpGt4kNjp-RC^^xKon%x@(09puhZfi4(+=?!B` zk+H&nA4hOp^p>cQ$w{3}rk(LE^#XvRwfQwVuVi-7&Snuit?w=@Cdm889m2b`&PZLy z9db;4BStCb66n=C_r|Vkc9aflJqN$Kh-d^J$pEY*F_lIAJJOLJ9s_;5Y$!c@*Vv*L z3soIhb$pWtZqL@rK1;9dQ>&eEC* zluM>OqY3`!uO`;Rf4F@!R6Imk!0?=IPt1Mts4Xw*Gt%w2smPQP*7vgI?mOCABiFcb z?Ge|(e^*WOv7%^4&B4o2vy(&oK~D^# zvm5`(x-8!Ms-7Uv-qUaz* z+V(JF7kB?`Qr{7(oUFCdYG^SwzUte=cj_X&#UWlatNNF^9pi%Ug=$Izo=+C9*uOODe`?1!J4um9i z$b9;8fmcU`9WIiHlf`@BIh!`=%F(75HI7swQ_06r7!vx1wWg*?nWUr1op-r}qpEzN zOm%(w@wSf+ZWMKSZ2LJ=b$+3eQugF#2S=l#exFFa>L?M@x^TQn$Br6Rdb+uoh-uYa z3w;uvFT0~HvEe!FzTM!at{*iAh;*wA7Xt%*3w1s~Xb}~gnJf(7tdEu{Me3Oz;&a@v ze$eO8T3zjdEl~jKy=Lr{{R<=T(l|@oGMh>}z4p~PL$>N-n2V-{Gl3nq-TgTV4?fS} zs5ecq4Kz9r*B>mu!>zmk$5K;$TOI{#-EeDkRexFAfE~z8|1wJK^_cn*Eu_v+7Ui)p zvEGr(Z@E`kTU}if$=#U?RN($jR{urqKE@?(4^bJ}v@>ibN4r#G;-6D!*C0Jw0q4zF zj(y=r56=tkNcVU1Vj0G$rYGJoXt))f7r5r#qV4taB5iGYyR*x(;5^{m{VUdEGe1GAZvcml6_KfTex4Vu|Hf_K>-lpIf#JnU z=m*6U9O^54U*C)&UDeeUKDrlAP~};?&ud<)>&P!#(={J0HTn83xu=NDalIPa#6DAH z-~o@-!*z_gLZ{H0Np9QkYJ2jr0>upx3!^3a?&U9_Z9Q&lh}k9+dg7_AI>Z=h@tAd^ z>1aG>vql64j;bvUh~Ef;4sy8xRUIO!Folr-wR(HR*C!P6YW???T(%i>LRH^^qeib$ z3fE-DlLotE?jvi5dncX`c34u*=7fK0a4qs7MaqKY^JVi9N=X1ERJ6zmpVc)fbOR*Ry#%X1bwTc`74Tp%QIcf9e4crsLNM5p~4_|d>$ z0-3+78^4=Mc>mRB_TO~4{Wpgs1O;h(*9Nqee|5u;q?Vp9)60S9eC;DL}5qhfzYe?vsX{8Y$=I*GnPv*}EnqmAhe;``z}N14nqXhPdNe zzQRx_VIov5U0JH0BgbFx?dK{`&^)--l%A)TtqV4V#T*HN| zyoTBXcI4v2G+TEc-ME+qNyO}ZU@)PZe8F%h=o|XnA2;xkYTC)o)fRc!gcu2jVW7oKuEV z&x6k3wO}G36q{Nd`LuuW7bdsyl?}m0A0=iphmW^R@6e*xGGxH~#$T>_>atP-(p3Wv zUtngkMQm|ju7|g`Pi__)16mf0h9ey(S{IM@tb-{jgIrpfrqk-@3wlJA&59wf_A9-jEk=49IS<7=) zu%Eeg;?fpqGQ+EZ)@sGs$t^C@hQ+W^*!@blH;2BEnrn&l3hIZE-RWn@iIr0NVr7vOapcZ7kS$*mdy z(VdR>V`x>WU3CkgvWiAbw`-`;9Wlpkw2y;Ahllb*aQFfEN8sj^W7e#oCQuxw8u}j)D$9sNH$v!g&739k9A&#kBr|U3}ui6ZgHY^i~ zls46PmIS!4)e5<3J^l$wqL~(b;AKt_5S%y#gkVoKoX@$;FDp!d7nK~Z%?|r^$a8>o z5N5N;$tA&->{h(RlYV7CA_-EHi50=~{eK~K4K~779%||J_2n0&Uh{uYB@3EL>9mDO@;JH$uy<*B?m=d>kB{qrKak;>@9ktt=Up^NJLp!@f)!2dh zk78?o9OX%>KS5P(Ew?AOAg$?LpO_pK zjd#v*gsPd9lS}RB`PCn-PAKe)6Gv9j-k+daGa#%jyFge0ndOe*M!ulxZOv8Nor%>R zFFHUPcNwc8+keQ0YUPtu#Lby*3i&JBgVcgFp}MLQ`5a&)gwN)_e)xtC?kwzUF@{Y? zKfKE*SIbZ{jK)(;17;;gXSHN~qoV<=T6#t_eYG2nth>4^=J(dt?U|_lyKySpvCF+$ z@jJRt&XjtBBCXnW5;7dm?ce7&bXY~QLVHKI7ET0>D)5zkM_$q5AF^M38#zOw%J}38UM^r)WF6q_Vl8Q)kx)8l>UAx@axS z{E{~e#S^R=;&D|4`Ej9YqH)}9Ef(v%h7>bjs<)Y4rc6f+yrKdlRi%|1Xui>dS0R}8p#?^nQzo864` za9i5NT!lwGqIxnMX5P{8HLv^$(#Sr$vEpQT-LgXiuVL+9f6~Rv)O#JtaDSaEs#9|< zBhgp!o1H1fv5(0$TF-&E>rF>=KCoAK_e)D#&;%Jw--*y`e9DqAVh}BMtf{Z>x9kzZf%;1C5?_~Q%4ii@|VJmIHW4Yb9;vL~Ad<{q5ps;wXE zz8^bRxF^%{^}}=%Ur|XeJjhugQy*7KGj}PKxcZjALEP0OaanegeLH&J@g|0he7@>u zzCBTgX@(wi@`ehm=gPpNd(x${F~UK_Jw%+xu@Vdjw9sZ8ca{zqU|Z$Vo!w&I5x2rh z|3Lxy9iq#$>7rqFEz`@In;#iQ3Zpg4-29}T7DSDe1s2;Cpm+v-zkdQ6dPWK(xq(YT z`cuOsMhv8HC8iGBrO&r=pAmwzw~bmF)Pr#R*$I44rCbFJ-` zM(_JwK&ktJ?xi8np~-7|t)xCy#VQD zv9roK@+2D(KMwG>6*bE}_$}>?W+fZmaYV=qHnq=(CZOn2BDG>1QZ1668X?2N!7wDj3RsKE-oBoXbn$b??;9#m9IiCS@x_9}DA9$`Yu07e=c7om$dMieZU=)YE=Lya#}g$POg(yX{r5z+sZz<`BHK z#NMswk|xt(z|GrC%P2jVYp_usGMwN#c1`iMkH;l~>oF{kOdApS^G@-Q2=Ai)nSWHf zwzY^>`T1!xNA=4PU#*G+?1oAa(G}QWp3@}+jVe(hr$Yon#MtHKa!1J=Gp%@Uw-lLc z7sIe!xdd3!=s07-0dCrNw5&-vu*SgEv_mDL% z?tX0|KV0|*pa{P&W_3F?rh@RJJjyyUJTc@WL6N%o)s)40atHU7xrp3quJILULtNoL z!?j$1=l|!v_1E=3qp~Pld6hsJWtgE3eG0lgx{8Jav^m!xRjRDgYCx~gWcYFg_`_v} z;Y*qk;WEpIcgZHp*6Z4U{|EFCGqCa{+emtGL;ymVPcVoe= z`vXLwfM8+lN!?wk#DX9iAvi40Ox4U9@4+Bt?kRN3R85kK@>-{0zoH9G^J7jT?;bo} zB-)EjD*Wvyoe8fQ!dIqdTXdbpI%L4|c*?Y8s>O4y+N_l32vj`gD1d!6GYkodluGbPKv@0h6bgLw6fCvf`)lUotaiXE8Is2RFE# z(8U1ga+3jO1!unvDE`W?h3j$$3C5QC9&Rb!#;SdsPIyeD-J%ah$g4$^i~^6v4chy% zy`~Q1%#9|iUl4D=LzA`cCPVf6vd9z=GS&1 zrj>wot;9fbL~E9qXI>sHu_((=Z)-V>PRm7J_T!djkP=WZpu@ztIpUePGs~_R!de88 z0eN0gY)BvLJT6=^$Ssn)WH^Y5DQ56^LSqTJILe{LJ?|nt$v^yhfFL`hWQc|7*wO?S0gEACT=-U@}C@+@-is?b9zjus^s)dJh{ zewoT~_p$TrR=cgcH;uzoID{S4(Af#Jjhc9)nI(@0inSXSpO0nqPvQdnzNY7pr=`PP zhR6KV+C?S0b(^DH9LWLEK8p7UfUH%MnRS8miJj2%jgYu-v zm(z%G6RQKOpi)_OSMm#DhCvba;T2xl*e;L5yYVef5o@yJ3Ad`B3l^3o&}Q=(9DV#VF$ z%a5~wkbTBwFrP18XwWBHt*^*tBFG3~w`@5R4P8SqTtCIWF3y$Vjfs%=TTkakJ!7e_ z_FEXx8HGK_?6zM4HL2;mjaJ`UY_}duJ=Db|TdNtf(q`_v?!!+e{=%QPe@Qd~_;L?Z zCa!-5#EN79rt;f5kW^vB@<=H<%Q94zt82G%okW-3d=zqS4c@>*(k+iNcO!ySnJ<+o zXU0GKmMG0b_ZUjh)}w7bJ~ma=F;z>YE6y54#T6Yxa+{kxR@I-T&MUtxiv3a`u-kXZ z-c)#YRIY-CDU7w>{#9vakT%;qovxy}bUAnQ6zFOrPcJQ=$S1!t4oH+@rfO?p3s>k8 zGyu6#?H4`d=|$)qf~@jH5~nqiIR?6RTu3XD-Wa2|jE^hQFh*?GFA9pc8e!?ElMx{)e#N>8X@rFvHtb@=-EC`%^dPccaO%Pvs9^r4XGLhFU$=wK8QH5w-0h$x_ttW$Xt~d!%t>xwV?P z_7%gnsF@X!;7f{W;QS(2D8k`|6up_?e_CO?EsS2_ItlXa1{+o!hpCE&!X|l&~^f~~&>HizU z>7q3NbvLpMrTvf)fxyu0;w42W;%#R({sR0zHB72hUlDm2MGzGWl14~6)e5&+rBgf zP26Shb_+1vWPUM-TdfS7X@r(H{&4t{Gpg7%;Mi0hJeK;PWYN`{2rX==+qn)%T>aq`MUe&V-$(|ZHll|vs6A|AT0 zySC2(y>352fVuaQ+dD-**I3`f7fa@6Zms0Ijry^IFAUG)LZ2J0MuzuA^(V6lf9V2CaF)%!8B)_}Outi-8`1X)J%@|^JV zC$T@`#lOIp@Y2#;5Uyo?C={NfsKr2B=_95IQ({h2rmoq2{pBPFV1`|kM2(z8r>lj+ z-5!5)Y|K_1Z*beR`r_Sc^Kot<_v5kH0Bm|ri;GVHg2repp|6opY3eLbXQ>kLQZW`E zSk)anyP-2l(3oU`q%7nF>G)>Ak+WM{qY_=tywheG`cCf}rrt#8>D<07Vn)fG%ue5p z90r{HJ@n25O4iL$-A#Dz=G}eURPWc)aTZnX0)?O6wKAmj3+OJCt=0J7ntlL>r5~a` zit3by28FXuh41AcJJPh)`H`MdvGLL+pn%fO)wj<9vCK{lEo@Vm*Jm$fo{A$cF#Wbe zK^zJO2@$s^#P%m6W<7KuuRfM)XKP9;;sVuSUaz}srxn&0mI(GMUo1&whrX0jC{a$g&6Cz4sqT1SCsKf+xU0( z9iFZ6jH_X3L>EhpnX7G#)SU{F1im4pm@GPv%O62O==WPmGwFRU}2BFn>nONdTM1J}dV`s3S%GaTGY zAKA=`RdTu+pN$sRgNqb#SIn)EK}t*riq>EB6-=eI3dX+1+r9qQV@Nc9cbuQ%#jU0S z=7mqmf^v%tKqurc*510@Eh@u*8^N7ADPr<+ z^GjUSH94w2(1|J*>hxP`LuN=!^FecP;Fianom^CC^Q%0=3;Kdo#A}? zqt8XJn`X_JXak+J#Fge5 zJ{k9jNYUEhO=6udTLziB{KB z_3dUbD=p8M9J`~NFVOQ2h*{*Mq#hbVYx&|y6dlc}t;WaV01*|ApvY>N!iOdN>$iMo z*)J{e1I_@cbRp#d%j3F>D3j5v?cA}dE>?&jU4qOBz_4NLbuZns^5!Hy_~IvRM&|9x z%NVuFU)l?E{N0!3i@;GJl=e;Da5b!RC`x-i%A`hJJV!j$r0hP`@)2fQN|RvHs+;4W zgbEfN^DA%%T~hZDSwD@h6$q&Xu;KOT(?@ewEsuQ&8eY04F^t>!@~ZmN*1>_F0gs}B zVJmFMDZ>w1q=0N8kVL9XLh9UV^5F)#nePqdy0YM8rhdXo;3owFKM6<`D9wEDCBvd~ zt^ryXFXU*N`IN`nuTioW3?34c41lDH#DRn)=3gg2HEg!k&VLSgrkx$U_j^*MGq zRJHOk(EHJ0WuFc@D(O(?u^l0YZ)=;J&*<~kwr4skn+O!DS+uG(DjA4HE6n@pm{<2VK`NBjn2X}d!@a4*bm=+XJsnw?A~7PE+;`E zR#V7|4^B{{r69FU$WV~~!klUfjPx!xBc54BP8)O~`{n*Ulm9_&1A-NT2Zjr_(POX8 z@O{Lst=M2vW=~a5Xa)wz$o;AAf=T0D9!o=(imXD`9#TV5+_JVaRzZ~h6}vL2OzKOM zy50&#>kOlZF3f#HudD=Z*m;PH4?rfv@X(xk>@u#i$TA|;zGF01$4N%M|Gu@&W$t}@K^u10lTRD<54gM%WgYd(Lx}H1 z1wNO1&ptw1_CfI5+ptus$S2Sx4oGjs7mpka(|0Ddlu|1*GXZpPUnRTwdUu+%MkB-Z zyLoh2f4M(-8o%@P(+3mBA`L>t1rj#Cz9N|erBDxdxc!z7V|Rnl6?N`-XGqBQ+_P

    ^4A*xO@)L9w^~dnQRE5|t2;g>e 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 literal 0 HcmV?d00001 diff --git a/.image/商户信息.jpg b/.image/商户信息.jpg new file mode 100644 index 0000000000000000000000000000000000000000..483eace148288de75d33c60e4fd10f7df3792df0 GIT binary patch literal 84643 zcmXt8WmJ?=*Bzw0hX&~ykPd02I~0ZxW(WxZ0qK@*kQhoj1SE!#t{F;NK)O>(I;B2* z-}n17>#n=*J@@Q=_c_mbo;guETFUr1)HnbD0AE!_K@R}Hg98AV6}#ijR+vd~ycY*EbA2QqLJ#ghgK7-Q8VWT%MkuQYAhvEN{z)okO73hexM7=Z}xq z+Xn}SE87R#`xkt_q>?oZ>b6vf|kLS;pmzTG=`sRdzX-y#4jM+(a~8u`)K*jPE`j|R{m{bdU0-UzG&j{aWmtU-n-1)(#WV- zWOvU=OmJ{WcwSzi;|JFZd69sCPgT`5nOQk+EZx~URK0xsZCpM%yLv+3`yN$kiYOU7 z`$n5uyB8Fd%jG_%rl!Ru=M_|UO-)XD2F5V}DT>SMB-PEDTUy_HM)VDi*Vi|EO31DG z-VqR*kY3i=(l_;`tSK@+{TsY#YIfPq-l@60M@m}G!^7Jv9QMZSLw(m+RqH@`LvK`i zX>xiItf;QPe;_Cdrd9ShJTzizYPKH{psA(HC8oknN7K3X__({hc=Y(#-Rj-(ILAt> zsHpM?R!GdPdLlop`_ZKOanG~(@()nU(B^w#>DbO=;*UqirblMjW0UupO0&cn&P4i`cYym^s<7&xh|&4JS>l`&uGQL zk7c=FeFI?leno2LV_ZV~4U5^Nwau74QV|yGs&HcRFjIVohqWArP-0~z_kE>&f8*@Jw z{a6o3+U*Bwo7=ZgzD_uwgl&D3djx8p!{0I64`$G>LGNG7F@DY9>^%5&I0922v`tcD zSSzA>%t`7?VH@{J_MOT;?)dN?!XOj2Bh(u8c;mV=S(VpYbUuNJS#jN@Eus4(b1q!> z@k$pu^BB-GwMViH2cRf7sVd05_L@Ifl6t=fq3k>H+H;JU;IuidsG*f-4AIfEOXEeC z39;h+l{Wrib#*mQOkBm8e34eb>Ie7>TIX0zM@q`{bx+RUq=!I4$)EX!-COP}37Joq z0_Y+h2qOaj8`0|Ut`mXD#Haa=ZR&6VfFM$#tQ*8nS2Qu>=Hq;56z9~*i>GB;IV-Bz z&Ze$I`}a?iy*Rv2b0kb~w8#&9d%hcL4?|o>aqSPb&p!%*TI)Cr0RY*8YXxA>Mw8hc zq;~f;@M%pKR`VB&^bk$hMX&wZ~qp1HY^WiyQAqOaOW&cb?VOisb(7T2?+~Vd;@QlI4#s=v>57#T0V#a9t z%lDLYeZSiN+Oo0rzVQnrbg`y0YJ>fR_l$983;hG)rUK%Bt@)=g*4tP(Mqj`wH+s(D zWOtfFykKzTcR#BC2Mn{~^(t;4HE^nJeP-f`8EpMCRZuz3{BHqtaVl0p8V^TUNYqjhUz9}wl@_0qr1l^J23YIH;EWeQ{tk>!it%aB>(%7H{9964jX^S z0MSc(d-?A?dtW-7kDKr>wT@&Ob&y$W*H-y*w)i z{4~3|B4?-m_p;RF+M(grxG`6;C;-`Kkq-V#vq`gG-qo?4Owoged`bsK_u5^X4c$Hd z8ZO|~>=)$G;;^MnwkGacb9kq)1~-KD==cjg1{9k&n=MDv4ROd!6ZUv_S?V-Jv7YqgP)Xs?OP zbq-chL_PRl&W1Ztv^2*wztuR#kEq=p=@IpldnDB!RrmaxbY65~y>nCl)^$RttXnxJ zVddZrIr&pIiUZ}3KQswR8q|l^33rUm$(`S_j>GEES zH>v;-FrNewq|&o~9iQOB>(5$JBYAnkAo^@DZmi?twht;*ReRm?ZWw4o9PZesVMM#I z({<<_rP}o);9eHf+yf;7g0$x4rATvAPjAY8sYhk9UVh_FTmni`R>Fo}GUu_Gx@iO2RWXzR!b-4Sc

    1(f;^Hn*sTzdc{2FV+N*ohp73Bi1$5A; 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

    OkiU1?30lJdVh1ZEI831| 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 z zc#viJX%Lg?2Foi7InSVYkv)R-2kzW~FDA?eGd+Ii*FwAPRsQTo*rMpcdw`+fP+n** zc}6;-DXe_gtKK z)@Zl_h=|13RcLC_HY9$@g*<98ENWU<-vvX5{GOj7N5`I)MGr-sWK4OTqi)kuQ$go9 zFp|kypMYXZ&@=S5WdoV#9bJ2*^S_=gB2XyiFGd0YB~SIH!c&Zd9ks#PVu=R|%g?Y4 zw0G^<70%@_&to{^5k_QXV;GqDx?`$fW3WErB4bvfV0kg=G{|_J(0Y>p zh8^qIw@nJ{x=4cV7ZK2(o=d$vl)y+X&`MSE-wraGP?%Z7v0}DS$XWDy=-w9g>62F2 z8U$jV+m)lp7!&1`6N^Ksejb-i4d?Z{EJAu@1(#4`Ch!NwXRCh)f%x({TrrNBHi?)y zgALUJH_hZQ_sU}a?y$NRCgdMyh5*+-qcc16-v}Z-GB0aI5;rdGr*g4QwLajfRefra zE#Kav@8}RYp?8e}d;70#RWJN!8R1Pw=rd!=Pyn$Vo4bf`4b`}KAx{*e_Vq_Ox`OPK zq_i`|=%0>yhhgWTj^9NVC9gC|vef={8vH?#t4a4Nuu=*+^4n95UX+a#D6V3I-v4&I z;DHiYG!_#8YF`g1pYf|_ex_X&f6iJYB@5jx>cj16s(tHJj_f_`y| z>i7&16MqCiH6^fx%1S;=7RQK-V4~KE*qy-k_ZKW+5%I@l*;*yf1_A{H2v9k1d>oO; zc3MNWII+4NgAwC`&FPX~V!l6%5#Mo*VQT^Cf2QC*#}cWmz3I9N?Df;RXp$ON<9dY*?t?|qw6TS`?hDo zh;TT$B%C{g`!VhJi1?Nt7IWsL(RM%IuHP_?=S6igc|A_Hc5$4Wij-qii}>Sd-*N|m z$O9Ai+@1uer8)XC;)j69w4`oUw7Xz$gr|*D_O){x%}%^4ER+2~1dOcE6~i zJNWzOTo0^kc4D=KC6M%br#0QKO-w(X7yoj#X36n)&>54WEIm@G;Zad{pH}?{Y1Zl~ zJ<2iYl8iJ%73*yjRJe-CLofZ1OgwAuK#H05uPf~fXa|d^b$E2X>w`^^;VmVKA5-6+ zbY|^2wm?iw+c)CAbcrB?;s?dzieOP(j>N7ryGBr}yPusp?a~9C7sVmowt`uf^8=ho; z(*83x|4&_MfpEI^ZnH9VXL+=Jdv5frZ^l8e&qKYgnH{IxzVFaihN*CEBvY|TEZb5< z>+DFy@Rf>mSqa4|yQ#$Hp09k*>7@-FP-2-IO6>e?ZN6omvSQv}BX{ocKAZJ2aPIH# zcDym`>uVt~<_{OAC#ze(e_vl;7xy!hO0p*~*V5f3ar?O_E zRb&v1U35Ttv|G(4Y0HEX)#R`WwZa^q{tW=gfPUtqOTLw*S|2H@$mblGqWw!47?O_& z4MDrp=9;S|$M*N~wXWpG_^)vQfkhn$~YIVDLUrh4!BRp7b)35_f_*{#o^y>}C0V69q0 zg-fNs!A;rcBG8aA0t3C3XGUt{GDDdeuLV zy7Re+OCHhJL$wCnX!RC}H@1 zy7DS4Z{oi-e|Z~2b~|sV>o3F&VuywMhaLO{X2KI8PfO_`pH;$(eDrU;Jwc;hc<#`g zKR&!!|CJ@{4?<<__ahqPWfkLCUoCo0c%6v84vpO(UAG-PAorHmO_#_xHTEGDdQfj` z-VN|YDH|~KpLy6^S;pUqLe?-JJP_tJ!67&7HC#zaE-kM4K5Ny!J>%smVf$vq?+GVI zW15frM|Dh$N8E)3-~c*=WK|CD@;1btdu*Xa34GLCW+PScH)Auzjpn_%W_>0uiRW*ejD9TRa3`tTUyF_ZY?JJhL8qKO&A z{7GQ}huNR--rJtDVVHsFRg8L5c`gI7W7Ph_zU7_tOsGt(i3aqy2GsuGG!cBpac@_b zJQIxYDRrbs<~azijTh}z=;Lp~+h~*5tjTIwMAJ=?az_Y<(rdT~?LNJ?84S79$=|Y3?ym|tTy+zt19bcfbh*vuWG+zZ(gPEXzP{ByGYN3Y2B8xus{62VK@JE?Qe_bc z*31t6-{RYTeV?4DIsg7(xg!5tw)BQhN-H_2VPg3WqHTLp4&C7R8(tj<2=MY0PZf%% zYv^G4b$k1aRpU#_4?_6ciVN&+3Qf55ePk*OZ({Vogpx;hx_^Vbt2J+)H=6mS`?}mH zwo~iBf=-9_eNJt=+9`c3D}2Xux% zpu%qw{ag(yGe?+2DhquaOgW-malyQfv)xCPGC%)UL66A{1cL+U$o}_;1w1@_gelSg z#RhwAi83OFZsvJynGLPrSi#!-xZ$)H@`&52=(h960SQwULUwE|HuX&BPkHO_N$?T7 z44nW+1xoQ{ke&L<%v;F=x_QlKGuQx!5SNDO1^F$ff9kq9y9rZ&3z{7{#plU z=I{K1@V*f6c~?xoCt%G5(Ewhfsd2hw53qP5*Z@ugB(jj8_y;)ci+4JT@d|9-F+IM` zI1Rz}=OB!(CmHaiy7N0K_|g(|9tE=>nO%WMS*#zv?feiteC^>AL%cCNl&X5O_xM!z zo;LAf0nt*m+kv=WmB|u7=o}^(7*yhq|Glg5{D+aD`WQrhzm^gc{)a=6KnxB=FI5WY zuub=r3w^sDihrDnoc~ZCsOAyqnrI5f|L^Lu^NrXPXuV=6-dUfqAFI{fH~)GSnto3J z@z#gH?-?B*WkHnpXh;cB_l%CNgmC-&jG!)({!q^%(=JrJVxc5p$}_TZqy<3_E=Y+kHPAH9Zvn za=e5fDgMz~5*XoR_xNb3;2QVuk!a57y_kbJ2$g#|H0;7T|7rOFjPoCJg-r&;dXH3u z2b6ICPB9N9xR)ee5gK_9mB?%Vit;VwmKQBX<^Eae7Lk2vYC~OPhY!j$^=S2z^N-W! zo{kFaQ3)+4RB?7GG7${L4BVlYL4ZyU-pphx`?^_O{AtS4!P#;7!6^)e0$qS zJ6Rl&VBjF>h?!^ew~6S)QVQa*3x2lvaBXvZ*SQ?!01k&IEvmeW76U}mkn4^K`$cL4Zv5aD82Tx2WmD28_eN&MF@IBvWc5_SFZb)4rpn7wt#5!wmD4LYl4zj zit*&O7#0Uh1E`|XYdW*TRQKG3L^8VQ;K2U^al;4oM^&im`pH5H2r+Yb z2Fm_~?mFg=rZPQz>d(a}J)Hd0`_sCT-VM!L+&dT3cqYkPATi*_K`s0RWC8!4Q>Jib z3;->2Tx#6uD+^Y?Bmrge81fd*p=_9(j5aj|b1A~TetcN2+1d!xLAUIBR?r`|_WSVg zP)~;#vUqRh`{HfAs!8=6$59diMbn{gDas5&!jE_w>TEIfDvUavh*8p2 zev>b+QW4oyWz}eAR+40O+nF!qfg#C?dmsJoY_@NlZ0P5LDppW7zYbyjz#U8zA!mp$k~vh zLdkBYNA@`KxI2|g=Wb^-y_v@Go0sbFpv{=$6v?uy_%r6~^$kXR)>VPQH3ygQ(6_!z z7c)$X#7n0FAj^^y2>(OSVaDf{z47f6=keHz(`PqyMsHW7A=~3NFHGeO;`dzoDX0ev z9vD6bt-q5Jp>0p^~LZO1>{Zkg26?Z17=f6 zVMSXtR=4k#kX1u#G;quF7>TO#Ln5%j>prr~XB~(sM;VQ~k3-aFGKh=WhdrW|el6!8 z)oBDk=)eJk>%O<>onyKr00+RwaWc+k|6yinJMIV=y(5n~XJ1KZM4Qo{-cueNY954J zz|v#kGXHl-;gLB2taLK$3tltaxVmL z-Yq@&ESXWAetp37TRq}o|8;^;m~uyse{R5z-TIrc4K5|zXhsHC-QMb;v7aBp z`1|YUp2m%ik-qnwK%%1?gud$72mWL)C)S=n%R`z<@YnL)>kQm?NncShe0KXVg;n6w~DYzge4rOGrZ zLXet@EE>>oLz`GC5j+Qdr#=~!tZiO`dx?R{7)5yYKbR%zj$I_N);=`UiI!f584iZz{g!o}2{K|e47o~sh_selP^lF~c-G7*rJBm!S?RsQG z{{4qvMiz^*$QMvFY^BFbhTW5>R5c8J-qr-$la_P%D{&=!xS-L=AFN5ca*GNLjP!Zv zAgGl-uDtj}C)ShqfpG?IGuZvWhnzSQImZFs-3a}fNp)BKY2L>r3_be>zL579&jz1&EBX!X@|foMe# zYE`Y`2X*)5EEfe0J9gW`6>Je4Wjxpwd>Lx!``#nyJQx&2K)aX=B+=C&EzmAMy=ed- z(R(hpjem#dBLcboseGpNeLuHTf)~PLhMperI!Q84>;&}f=>08X2#Egun-5~OtmgNwYQzX}4O(}&*7B5;Cc}%yL6ru;TXoSG&GIN#PW-lf;~mqj+c*Zyjy$Kuz~2x*Z!~`%ePYAgeNnQ#o7+2($!ESVE=& z>dPypvOR|KH8l@G4p=Flw*2YIaJ2zekB@eOI{c?b*XlUHe=2c7vwnM1Hf z5t6;a8v`5P-TBAg>EWTYmt;m-M<4%>$ioL5;Xmsg0XWe`V+aTli~`h3VMJiLy>b>L z3W9$)(ZmTUB#gBW!5v#%8M;CM;c0yEdO?uh2cIWf{`bR=CM`VxAZ;Q?ERiEXs>fGE zsC08XrfjHULoRge^)rj6JIT?op5Jo>aEbSuS&9GbO-yQxdV2Km(f~Qs+84}eJa5u% z>!9^47Y8t`kebUF|4dsmb(s%BQPEZkQ2v$<@816ar~x(}wBJlV_LZ8l1J%J)T|nfP zkbu{|oV_sI0)E@>BLsqD+Za_tr(a_W&o_(eM~bw0QPZG9s*hd@n{*#-Iadx^isr^# zbceoC9y#}Q?@ReT8*D%JR%)!}^ndixW?2~0zAU{IzVMZ;yT&r4g9I)({T4|GXKIqs z^uW<6N?t3;2`MBwN&fP1P_(m`^LurFNy}F_a2**;50=gYph%sq39g91y}_zI&hAvJ zJkXSdSW5u(OZko$#1r8eR@oPV>(yq{{Y(EVbo0i(#5=)*hwJ)y>RpFTuIT*}4L>sY z^GXr%-aDzaAKdZG=$KVU_?M)O;-eu9q2!cxU6T#WEsd~Z8shvdt|3NWWbLRya zrubrl-yK{djuCHZ%-9YtY0lTwVw|r0qE{$alh!cf*3GlCuG5UAzw?RQ0%A+v0ZwZP zYei7ye3?aP;6w)xC3s`_dT57 z>uH|zobU5H->2vF$8Y}OzGtrMzOK*pxv$UXdVjX$d)kpDtP0BJ7(9L269!8`HQ!_R z2_*L!=F-OYc;`CMxT@i~fEY`(zRZd{%Y)>?M@4wRB_5wv@nx3H2O~>q<+hbIec4*J zNB#ye#=fLm#-XH?;=>?Wh<_YqjyQ1HT=YYazHKmp*NotFQA;q9H(B(Bab{>j(+yRDo+njpE7KuyCGp*O9tQDbWF*B zDX~uSJA$@Uwx821eZ%*-)8fmM7p;=>{1QpGK0p>{DLD^tZ4&AWbEQr3ge z3iR^F17M{NhTjmw-!J`C5?CRR^?8j{&P0=}Bfag81aso_6xu)9uMCLKeRzCluO+5y zS!>8OTTH*F7A?EOf&-^_In*`+1|p7$1O$<^G5jY%VHYy@-L%oTF|E|&1v5)W!dpw- z2TI8LI|L#jsoRm=rw~?OX1-MS>7|1(DqRG)e8x~=tfGMr&U==i&d3%NM4Ewen_2SW zLRMQV=#zT)-`zyAI2}n}7@KlsHLc!K2^@+py^(X%S=3>u@j`~;mM8%TuaIF580OrD zWTiy=lvWvm%M~*d92C7`Z4bg}0ZQDlUk-BNZfyBzu5Xj-ASxN3Ik`NQ_ygBmKZ zBU#y?^fCB|vEbpG>CY1cPoo?&_RnU#Oc*p5l^Ljs`&@J^`Ln+HR7Rnv)T{WGZs{?Z zR&9uMP|Q)A3@8pIZqE(E+A0AaY=v$ui#8?|Uv^o=Jh@jecqHn?A(b8j3D(Cv&*ER% z;bkD?IbjENjtAxiaAg-A4zdl%WQ}=sxeVL@%fizL<`f^5z46vIjgjHYkD>{%aYW_@ zG(d_QD`jk8X;fEL`sVAIU)z7iT=n|r1g?+c*`K3!!tydfAq z1X(*Ein*ZY^Y(FMo?T-=-<`9Z4&sW>Ov2VA3QUMWnnpK|_%2$p1G1A*uZK+c0Uo?a z1(R!ZO0f~^2At^XMn9cw15dk~P_m@k*iJ&4I51!*6>lQ9CIZfkQy-@3Eysj>W+(N~ z{HQI-5;6xd~;~hvkgbzLIDRk%Qrwf>+{VjNPoK{rf zf_Hk(Y+-G2pv4hZ6@VXRgV4*9)w``GIy~BxGWQGJy3LD}Y$=$mJMf{iV{$e*RcIus zKGQNIr6E`dcYhrPOR@Sb-6!kfILb5I)|-+o9bxz~G;ijsd>-eC%Dj)&_YFxtWh@KD^1&$}H z{vpkG&QE-xM{Ei8+d1D?Aj!O}9G@sf;@(*ovJsTF5yM7%J+ey9SMno#V>-l8&CaVZ_ypT$q6f(v0c#s^X8)P%B${H+h%Y|_H4)#fC9bn9Kmeg7 z9_oLGP7;h*Sx8fo+PudKE!SH6+6D?Iba4V*;f1&5+m1872tJ2F&@Cf{_`Bv#;5__Z zMq^Atr;YpRX3)Rucl$js_I|a*JZfB^ax&?_YDgLb(vXCt(i>w1np-DsLo!jQQHcW) zY!pxO%zcT}l)z-m4nK&KplHU}?nCShClktimDoM_ciRN8OxCMzVdTkbikLg{Hk#M- z-D`W%ejL5Uy%!f<)wyQQ_fPkK++6)?FHiy^8N$ozc>t>I!*{9+vy|^m8W?(%g2q5y zBM{zwoRmQHl57Gre#D1;a}!t-W6g_vQ`O$Q2ykBY#P~S6VDu zr*%$b?o84}Q1xtUi{Y^G;93ASt@aFRHVW;R%#)sv!Z$j-AnpnMifCM%I4_ZDEt`;# zs*#n#y=OP{k-qSagQA+Rv};JO-Bkx)vr?IObKnq|#kL55NcW|1{_BER!RQEfq$Y9m z!fswli-ea!LMZepFV0p3UW_2v4=1VjXReAl4Xwta8)j-YKf&7H>Aa1N7~Bs!y}u_d#YZGI9Ju0Hkz1Lw ztL(X?3BKmB&9MWGUOT+UJAS)PchcqQt(5Wkl^%LFC(E-vZqo2G^SXku6BPJ)s-L7~ zR21qCfd)kbW*tR*oTIO%9}q4~?FIK7!fb^;ceWSK1&b}lb}q-x$3Q39fzEhcHOoZ4 z2mPzB(fc&mkvX2njw(Vq=WpoZg3fO$sIh5ffyWoBntWUlNG%Zu7g^}&&*RY3yEGV3 zeXCo6rxy5x``n|EH(7BItkCnTcO}{=4{lNaOSdOECiiZmne#3acYcK9CfgkOgmx8x z*y60p5YCo~*585DYnqMsSJ`PJUzKqMudJ$=jHfnj?Xo84z2#neO&>p4eNb>nim!1T zOEfOY*^H*U(zv7YIC1m+fHW>or;S;SI0tZ0IG`H4hbjjJ0luy!)>w)^LrMUHsmBmk zCciSV@Dm~DD~SFqR`o0OfQURm|l z*nOaO-@@&cO>}$sM|(G&($Q5s-6PwEWO{C+fJJeDIAyQvUwFg+aW03&G@8*bS`v!( zfuE2l{Lnau%u!t&KZ2(rN4EMl-OQWT#L+P}xo6iue)r5_FT$GdIgPi)nQxqHNDPhT z$6cVZ0F5(#<9_w*uZ-1F_HwOS*ie_S{<8aI=Mg`|tw-Wjq1iU9GOf;-t;ZDQPmWj7 zVKkjIYf4gDUks{W@H|YOk)j;PoW&|}#jjoK?z_46adf0KsY}ET2LUGS({7f@w*{(L z@?p_4>mMA%1v%6q9$?OLK#A88h{|@x9Y{DEv3J}_vOjEVl;J>yz<(JzP%-dd!5@14 zp{Y_R8s7eym)A-~9xCmIoO=F?n$q{O9iqn{K3#kK-6j@jjJ^-na=&f$`eif1^UJ!S zcH9$Ghjmn8)pfhBiZG4~CK?mhx*7O($S|x$eISylhFkm~W{GMw{*N~&TxNm`LLvND zt0r|nMP7idxj&UoihxRo=^=bEh+r3;R=2f1oN_MWVUfnJsx*lcxW3P`Q1`o{xse%R znkJFL@6G#!aV3tNC`>=$itavEZOpd1CFHI?POpl2J`%P$omt9XZ|-BKp5q0Ei`S2p z#fI{z2M!LcF|}6|`jbbQp`~4N0!i&p2+P~rsEIw`>&BzzWxtl21M8`H-X*${XZQ^$ z!86v=tJ}i$T;dphr3&`z2{*~smz*w`mwnSZ8k)Vm_)#bCT;_^%i*oAjtt?+fci;JZ z;%Mom>#II*sW!gqcZs%SYcukTZBP*E%M0-(W)h!|h_;8fjax}f$ISX_Pa03?V;KjE zebTA@4;-t&bb- zo(vv{sgI4tM^2KNt1dO=PVKefV61;NxBZ+Wda0#;O*V@+dGn~r)t30r{l5;% zL{;y0x#_k#e!Ikm`g0wDGRzVsSgiGHQMI+3kAz_s&d;Mvg9VuF#mk4)>X8L!6Vd}W zA-=qVG$CbH9Sq+`;L)Ocb8C|Qmd9`2=xo_VXOdqdVi6!w|NLDiq5IV7QVx2RdkYV_ zUuxDb4ttg(teP8DfI&11xw%IGu$nZ*+b*Awy-4DYP^AP8dl1+wNG2p`%3lWTdZ7|M zPKrq?0ksY9veEkYtfcxP3Vc{_BfXe|;V~W_lX0R0g3z0bD1Y4L0X`Q|bQiP?Qq;<_ z><-Hbz&7qPoOn5bzBZX2cw-x-#7sE^c5jltoFat#;(5o7n5V`G6%Bl(U9s$r7i{Z{ zW0=BQ+)5kcJyFU8se0kdJ}LlaJK)jF?H+yW$#h2cyt>(Nh4g7p4Trl1F3WXo=x3b2 zw97Gs>zqNlP#v9QzHw6A^DCsm7K@oGk&ELBrrkT6K}WmrUJO6A2p`mG)CfKh<5?~N zx_5ICV-Ah*Dvxlt_mpv%KkGbqH-iO9)w{v)bd8X-#-1%evhirV5Kd{|>yUF_Sf4PW ztRjXo*^x2uL{Rc%P72vyEc{m^ym*l`vE`}yh07J-w+7S#R?avFhA0reL1ouNu&c3? zy2OD~H&}3*Iu2G$W5wEjE~xbigFyE$9-tiuF4aMU2{pua_O z-Tk%=@Y~jzC?PiSt3Hu?EVvUFL9Iz>dLAc)j4$^YQ&s@)k4=4G9iBJ@T0EPd>9aDP z*aN9VUVBBDD(plU)y|_{KsnbDh%p&xrgS==+mUgsxdFAO;~yH7QsO##97lpLr}^kf zt!(MiF@5@3+G3Z2pQJFga$;5!*#i`oHa7A&pi=+tH2!g%w}ai}Nxf`2Gt@Pq&Mqw_ z!7Pt%)K!NHc`31~MO*3-$@gjkCS=&}QIr62n*|f<-GV{0LB?j4>yDzQ^&OD$eHkxn z8XslFyo_C$&X4KF_HEr5-s~44TwS=gW3s%NT?di-)U(9XEvvS4MG|*azLg~p9WLV* zD{+5*VS`GPZVW$tnC1QX#JQH$jGOrc@$dJ#}n$veM#lKQz z{$Q>@5@XS%YEClj)iOC3?oIa9VD@l|5sX;>ZyKe4SG@n8R%t^!AQy#TC-0FV=O)Al z!W9Szpo0Yd!Eok2PN%xFw`43{>}Ni#DcU`pvCGk!p=-WXbXop2Nqfe1ZcT#pIBDKl zSuTZx;&#CC*v&v5YC<=(ssK{S#IdBk*}CoBx>$e556OGE(-gxw?abW<`{z+TNlcbl z)6sKHW64zCl@Ds{RT!7^H$R(GCLfrEmb?<1cr|vrsBLujc;l$){qw`bthdw7SKFqJ zQiWrYTzzn@p>Wb?e#jR}dwbAD(RLhDj|r#^D zHeXD|;RhZ8m+H>4vFPBn^_asLY(t2la?YD`EEywE?+bFa86ejBthrVC5mhOvkPt2} zj`IM^MbcaCOVDAt4gs|$6{?KkM#pP!9geg;^+`ckSBl3>JK0GTtcmK4oQSI*5nk5@ z+C9J~kG&<0RyPzt^FpHa%T-Tyr2c`6byf|LV+=YyfpHF!6*>0z3@EE^H7-+vU5sae z=Vrwl3PQ3Fa>|uwj_6u>tnv^>U*54W?kL3*Dt;|cYh7}p@AA5H|GXQRU^3+OYs^NmO9mXR+=b?U%e2Mr}XXC2p0z{JDTxwWISq9S8Qqr^RWR zSwE-1R8e)M9*C@n%qjeR!;xYCG%3+Hrv6`X(ihcSZHG!{#1)ECGj=S`KRno_K-CJA zgD;nd)XtVutcljP%(x`uNN>{JNIfI5-S+Jbk*PuV;v=Q6wo()v8S@;evc_5YdR549 zE|L44lEuX%4jkie8jjx)GxuoCKZ-ht*yyv?9jsh?@~w&yWhb{}uiUbuEgoiSV_!zMtCbI^u~tpN^rP&0Q5!P@ZPo(o?+Q2eP-gH2L6 zAg$S5uzYc#5vtWOD~X{F#COgeY?5H0h{k9+nCR@7fPVC{aSNbkcAj%PK=pZ_zW`-o zTrl~XxFC|}gct3p4;_wo@F9!O z5bU*}Rjp}JFv5-ynvPZF!hy5b@CkmIY5X;L=hrF7E-{V=_B>U;n*C@m(YUk9EyM2^ zF~(um)KQHMc}~Lt`+6Ntbw<9!oau{2+ZX2R?q5K=w0R{Nf}|+pF1Zadt4-ilr{^UO z%*fylc5I(!loQ{rd-Q}rJ#k$*?032u!k_^;D(^rb_!u#(mgnluI0nG((@=FQ zG89FFsLq+xE-wUlr|Mi3NA4$^c?~m#0LhB!n z`+o=u{Ffyut?7tX`u}{81d0{)Pq@j?1xa*<(HNZmF7)Qln39T{K>N~$!Ex)~Vp04b z6luud=t~ccQL}liV}-e5>!u$Ebp08r{v2kbCFIX`=JWc#xnm|M33);nTO$oPmD|ocp_1f(AwS`Xf)WwDR}g z-918SM9iPF1p@JRSQMZDvhO0?=>I!zD*taxNxM1zJ*0vn{{EHihGyHT|A`!eey238 zX6yems^9;l+5Uv;_y4yD!r0sYQu@;>WHk8ZPq9<}lV}dgwDFif6{FKoGt#IosyQ2fAy&G$IeUt37k@lh8-p0I{K)Cl509Mz3`(Gpxf*#+Rz@bW=vJ7Gh*ay}lIhw^p+ zPC40lx7v zq1f#lbtIwo82j_29Bydlk<^h{flUGwduv(HfI4y)aez{cXTL=7R#zj8Gor*`vbt~v z4LcGVxhWL%J~&_1&YE(((^&Rl3?ph6^?P&7D2^$&%x9vEXiQz$PztFfD^^!Pi4jH3 zvgMMp9XC~^y91!oKQLh%Zd4K(l(w5X__N=O%?htY?}I7#AY2b{vE-ptLha3A zjHR33B|B_*p8Rdi27ed!{%@{L!;4-KO9eJ&K5+zd%?_P7QWQe6f&wVv=}6^~xDOAf zfYt;)$e0B!cY)k|DnV7>CNXn3AG$~7L%(FYgxl;lHzzw)V_OB;FD3X_iwm%FJ9{nVp zl(!A%LA8<@O9EVXYSH!v)Gv&|$=H-uh(EpH1y0z%9rtZTzytJxr_2Xz$N4Bge8dYs zf?z#Nat*Vs{m6+r49_V5y1W1+5?gLVj9z^q4d3>{ST~&50>1~N?P|p!I1iP)Cp=uURiKsL&<{1iAcD&U2QW@ z&A?m4nEHao+0iWl*j#8hcuZl1a7v2=)U09fO5*Fa0Qel00jI4US9$90fN@r4Qo{i8}J((Z3*9nwopR1ZVi1}R+rTB`s*B+3B=aXG1NEo zE`@UU>(YF{brulf<|^T@L&ic6W-OCI0CncUu>-Q?}Iv;Sd#T{mCimY>$#%yWc7d&Oh{4)bd5X0kv+ zN_r#omfm=VPi#b-L$++V^$3Co4hhVwViIZ`P|T|o8HQN6W4+x$*^U#CA{Y{YHq_Ao z=qMkQ!J)4@Y77(t_YUgZ!l`dOq7yk3go!ZhXhl^Jg5@a!=5bI{F${@#rE9Ryvsmkrixg0< ze!OiffQl+qHU&6oq(&d$o+j$LJl_&lGd9s8=)u~?gQy5SZWwhnyp7sbr1#WQ;%G;o zUo}|?S{;|xZ${ezZC3zWT3jB0w~1lE3+Tf@x=#stbX7tE@6w2O9JECYZy(q!Duyv( z9Wl=1R?$KMKE#IJ#dKKNC2rrA_EC@!V+uLF_b3LWKwn@kClQoIYm#@ zR+%VVPRULE02AntY!Hr3O+y0^FQf^I?VoXcIo`Rm{@J@gswV}2cj`?tgpF6~Tw0BB+OTOBdA=XAW29`v%OUpun zjyg{E>#$r(gGT$ep_6%(xlzId%Ba~bhwhZkhx&_)HAs#)u^5?rti6M>S2wf`hh~=# zb{xP295fV&7kI6(ZcJ4+<};ue&&VdVm^|YH02AQEMQ~c1O7@2Mo=11=E_U-;e|8dG z?~;D|wI$)%1DU0rah-Nuy6FH%FgVr#Kurw?0E;#_-!i=`eSplSyzgL%;MgU>Wvfcn zSS7bgY7zko4(!z?hrF@<$DAF#At(d@{G?XOJLXl|Oo1ljfXgktjnL+OmcbHLUK(re zkx2++6o6BgchX@LBaCx#D5$HUi(;YP*hWABn37?tLNX*k0#kvc{f4Gy(KNA1anm=2Q##bJc<; zM8{Z*8?>)`;(nqL0JvR3`~<1AiM;blw+uM+kE~GYwC!L$x_KOGS(ihWRn*ZNo+Jb2%7JW2-*+(bOn7D$QcdLUo~GoAP2IUsfY<;7 z^zt|kh@-?+Zv(>9@o%ph%2m8?Lto{C$6Rn!2hxh z(;WSnTI(GywtSFfI7%Q{Ciay{0)EH423^z*dEzY7PnZG_&q$zlli7KluPW|6CNjWo zCGLm=J?#7Yj-yhO+VDQ<%b`v;{POLYTbmD}06>_Il1?d2$)C&_)hcaZj*L6_rx7*= zC|w2uPnu_HC34VrM4u=_z{Tl1ht4?x(mi>Ox9f2Lz-gIEzsvUgLC2qm#Bx`;f~oj_ zT+M1=0NlbPiYWl%`o=9usvLY1_-aqkiA`EPq0R{JzU12gR7A5p^F)AD0roCmX|q}p zaIwqG!85fS7|o16md>GYqUO{H5W#aL=V2cpJ(=fthg}n{wL?;Wrb_r*W_lyZgeN75 zps=1{(Ns79l(5v}nZ50aA|-|I)WFE?Pt=S<_H4-D zpSY; zWhqQ|x}Yz!7&l_#?qZ;LSh9?~xm_+dAw3qrfqGwvloEsc!?E`HV!>_| zQngMzGm+cH=ccmm?;xyPy4Bz=M)EvPyH$smMvssgjg#JFWs`mz zEe)>VQxJH1Ly8yx!UN}`#u-g6#PXXS1hTV}KrKu_0PkoRn_AhJXrecY!xEDplRqgf zG%oV)h7)Cc45*;V&um-(Zgf-0CYOw}qr4?%DY^0#V)6xxTb>+ggP!B{Wa*w<4Y0N4 z>#I&1vKzm^JX4mPcV+M}>XT*6L~tm|pGaS6UI}QIP`GvS%Hg~Y@B>{mTtsrGxX);n zehvX{eAIKCdJVvjnQ@ufMb^JOf5ejvt}H7$)XPEL$bI0_4{6JltJhR!dg&YA=9G($ zls-?=wrHbjTb_;PGQkCQ1Ax$F|JraG4c?XscFA2uK9|qt4q|y7d_AQ{?2=3=X3az; zV3SibBky3Ut%BZN1Lz}DVICBVFeBuLH)!z%ow2@@{D)CzgMk_c6C4^G!=f&}>|Vr$ zo)8eWF7+GTjiuZMq>r*Pm2rZ;EXgSjho7egJvfhzPfcG+>{0u97u273lioR64wJSE zX_phjUzA^LcQKPU!+^{yhAIczsw~7|_fpwir#!e5FGQ`n?SKMvY?&0m@&XVMn}b^j z6&m_KDsIMbUoO(mE!VbW6{uuq%W+1T($la(NCp5|65Z}2L5pzbBLmv)NKKU@jW{UP z#mYto(}+}dSzWXWL25e|M*&IJSVJn6lAkhT)yna4#+I z0C#BTWvHNU?+%x3n>2Rs$J&M!Y>hi_kTcnJ;;MfG2Q`E_03fYA0leXOeK3v-JE71M zHYd|h1dA?s(v}2X1-1{I7}hT79VDn0H<_jPKLpwe>FsHo#et#=n+)n}LrekaBAtzr z-RZQjrwPBJ!Q3R4y5)uAfW>_Y6knoB8?wX@f}$9hIHuDnJcuF`!Z?Nj04vG|ws5Ri zEg*mcBoa-~6h2B`I01(yo8U~cY1X4{lm=uu094nM%YwI0IbLOvqnA>ZManF$Z-el) z>TU_U*8o5|bv(yI+|0aptx`lqjbzr;KlRAkQT)ADR09|Ko&^@zgw-f*fEFFPdok3H zENF6N!_NAKPnGZSWZls?y*DUF98Zz-U#zi<8bM z0O86|p0vZ(9C(^_g$5vuXCYBo@V}LbxC} zW*+w?eqCA9T--1+1W1OUpggEV_P{t%I$Gi2Tk_nw1#amC&N8!uBVS$F%d}3yA*dho zPH%?l3Q)WMNO4oVttBhL3Gy0LJb7xpWYd@fFo~K@T?ftjnoVN&=#}#IJ+;ph3W2fA z%wFINc=_#K;r$Lsx*|8R*@3GlZ_UDdu~GPf#Q-)X=(d2xCA*OKSZz8K`R zaMO7*EDj**Q)(|w87^#H+qTC0-zseZ>q^?Vc)Wfedg6%gum?~5Mx6(Iz??~LG}CR@ z1H>1L`6vUIOdd_qUQVl*-Rv_;%^b!hNfo}hIkYbZB{U-M_JsCZlg*cGZKk3y4j1J; z$4%U_74n)7=#x78iq-O()s7zB(upWetw8NT{FM(2+fMj6JV2Bg%xZm zQ=)ybxX&@nD4=s#IF4$`5!f^#*V!0Y+pO=?cZr${I!}k!R+Y#@!L4G)Qx{w9TbtEF zR(Z9o4$x-VI9>2|ZR$}t?o`ne#y@zL-QCEL$Z>Fumps%{=L+gTX^BByHJkGvvhn`& zPHpWuvngZOdszs!3~Yf`lfgO>Ew{dz!XRbqp4@VMkMUyx2z^v%OBjhAWefnk@+Sb! z&2~pSyYYtLPF^n=ZwNI*Nfd(qzv6Pf+K2e94EqN8J@()x3R2bk(p9K_;41)6}}Li4Na*{^xPtKTE~Q z);1F#Yg&~TLG74vIgvm>jB{?^5zQ#mYQ!< z{);}YCEJ?&;Q~jj`8#}gG~$pYojLqW##;f{>JGHV2P71kWo^A0jt6*%df|%vWB~ZD zg%*tIF0#oYOBskbP{U0@fo9#*ICaE9F0#Z0T zuN%C5Y{_Qa6017QtpC5fYg;ZJY+%flfcu`N19>j-KL|rwKRHdz3-LZZi!F%v#qRQ% zHQ;{(Jvi=zI`Yj>KAdr2$^7?Cr(%W8Iw4b<9RM}?AcH?j_%euavk&roL&Brx#zA1T ztCPdHDKbadx;(!rg$rB+T<3EB;jnb@IVqCp++ z(fnulVZxg>t-Ar#_gUK=)3InfYpd?J-;6B$vac5l_z4d_3x{xxj(-# z12ihvpc{z|6ihcNcDCwMjY~5%Yys-v822#^xe8ZeIZQ~;9d2Oa&LHR|LK8)mW|%>F zI+Am#SY8^TAA=8UKp4aE$k0+Cj(y6F%vJ%CaWkA0^Lw}IaUvrACP?2(fX4|iyQI_B zTMiV#+fw1Nl%@vo;P$V&8C@@@p(q~Eic1%EuG?P+6IC{$#ZTodY;K4H-Z>LMf&*oa zn$T-P-w$+2>C8?$`3)ORdKB;iYW?*Mm7=~2_lGEot60Mc^RA| z{<6Dy6jZFTRSH#Q$Wl0@ItDKro)n}n^5)!)-JAY$A%8;#@62SdL;#JL%@R}rop7^( z|METsBx9}w3*ya1esEu5oG7f3SB(5#S%u|}j@{LGqzW|26^wwu2znGW__$Fyo2#%~mQYQg8;C2~ zk=fxdIEW)RuLu+l%qkG?utT{SF>H$`Wuu0+u%kS@xRps1Zd8RH{>0Sd z4{aTgB5MKj7A!tnKWtW!o5}=X7iE3dpt27YVaRmOMk6&o9JE0L={o!|8mizETq!w( zcZ;6#L(Ej<{R!C>)r@zdK;glyg5+h8q#Luw1dya+ynXOC*4!B9$II#WR zI1WWMbazKlHcfBzK>HFtpEnU~kC!)^PD5&`p}IRNZ1Nr0q_Z7y$^KP~2jCX`?MNN3 zM3BT^(wN+c@F8Xg;yE9;u$g9^B8gFi7A7&kwndY7C^2T~vv=)#MRL(FIuc82NpAkg zX*#dHssJ}SB@8#40K9`{U{JHx0J{p*k{px>Xkm#RiTG@^1f4^bJk9q(9d*?>+hci9 z6pPWkRISu^G6MkBDpj*obUBLBP{f>SwdOX;Xuk~A1SSTzuDPQVO_A=T}l$st6ll);UDH_@N>+eI<{bYf73?U(pByG~o?DR?x%1CU9S z>HHvdP2bJSU-VoqvZ zfqwQ1^2c0@IL2`EVj|s8z=0+pHWe|KOf_?N#F{LyL<53`TSZ*{0he~EY7&7fJBeOG6~bFoOJ#D&q$vX<1>%Z>QFz#fRJMJFoySyS2rSWfMim1eIZ5UL z&5)=>upm50pAOCxHgm%h69LgU`S*zI9XZu7Ycq^KsqgkD2q$N=VLK9zx#&uaP48`vzL*FT zL)Gb-po+5fMop>cx+HWeh>7H(zKhaNs{v&2#qzCE!p3QK<>B6tLCj>gW`ka0aTCTpEif+>}lQ&LP~&~G7MTTY<#)6%YH@4a?5h)}aYnLP!9Lhi^SEE=e*?~nR@2>;U{f_A=D&EPg z#uH)$F!5VAv-uM+LwJKW@MKeQ6cn##mWr9?U~f`E+*J953CTQY3dWsJ7;oKVhD1}Y zQF0Rnc%gZ5qUa)b0G0>|i~@gGLJ}s_>5Zge3Ek}U{QFVK#%N*uHg-ToE+6jaZmejx zUmfg=Y|5<5hNTt7_T}&)!Czb8IrCi;iNeI=Fk!n=Bs#gK#2Xw9;InaH33Ac6I=yQM z=WJQNG;{?DfY_)u3geXdL@~~wO3F)Ba5Ml_(Bo>##N@^_xCL%D|EasEVGI_H&Gv3Q zMtG0@>CNwZY+o0E?02U+Zp6(p<3Sl=|zIeL*C}| zxA^{E9IbgH-fyPAEaU8aI47g&0Y8WM9|Zqa`2KeJ|7XGbvp;D18xa)#oPq6cEay*W zHQTtolu>i?R4#bb)NRTLH0}FuuQP@mNRf?uK7iN(xcitSRltzSCi<(V1)FC(9Qc`T zZ&yIs1n8BJ6vopSYBQ?Y^lJLwV#zLjw#CbJI=WoBb@-5~%Dm!OVv+lpEN)7=DT~0A z@4vmUPwq;|voa)d!(&j>0k(N^mi%AdXHAUn%kZzj2gl78$_GF|FM9DEyAc3hRhowY zb!Hq$0TApfoD2Z(;|LO`-M@n3+vg-eBN<*4fV$&bd(yNL0m-0Cb~-UK;7=os+2YLX ze8_Lr^l2gAT>qrH^Ctb5JVap=ScIw>89Z?Y_1h*>Dh!FPa0O8`1}O3XtT7^`026>> zP+na6Zha0n0}uf>g5XY(1gdu6?u}TX2MNS|<}Bq)#s8J~#e{mFpiJ;_2n+WH@Q_^< zRGt|ufW2FWLGj?;RVGpxqJkP3Z_8-u$(kTNfX>tbmB_~44KIeYA&CJ<)zWJa>t-*^ z#lkmRr8!dl!)*XQ!J{NelT1}DmNX=Tpn5tp;C|icSjh%}Crs8egY=}~ zCyh%N3Muk9G`let_lgLUx@y8*0dS**#CqG6g4@R#`}mxC%Bgwn&-%zumjM)-l$p8w3I%0|GRWeW;T%7|( zOwTdgY?gBH|7^F|$`6`IV5!RBpr_zxrqq80T(%%zaI>?v7?u|SXu(ZWIiniX)ZzRM zQ|acLlv0VttAU6>(?oB+gXkjb=4jdJ>diMfCCU6`)MX^6SKNn&jxRLGzYsmEn$0Qd z-xxo0iu`DBVVn9w1YT zjerlSNMFyq(->70X!`zP%GWiGOw7jI|!?FQ^(8?vHofO{A=4_7Em@ncsKzg z6uI+CafsmfJ0bJ*)Pl>wLro0@3DQ?JqeSh;5G%6x*)QJ|mnS7d(3Hr7 z^2BK={}pTYhpqepm@2!3FR>3d`3K7r^^EoIc9+zX2X3 zdmEu+`k5yRZn_@xZOa)V%zKE8@bTeqN8m7|2!$b1E?3Y?^b#Tj+Un0QqQeq33-Rmaikuf|uOHw)MYt^KAuICiE8JxHZrea)sVC zq%wF0Kjr4z00w_z z@tkkZ2MCjpC;;!COKCEr@E)8I5}0Rt*EDo*uJdi^yb)~LvjE;4Kt39L_pIq1h6V86 z0ppY21@Jxz&6gtrpX8VY50!{V0Ty;>5i610Tx2IZH09=*M$N-&!Bix2SQw*( zO|AV}dd+OBR*Tg!rbL}@%Lu$?xjOO5SKp*yH%5>>gm zSX_n-i993bJZt?Ksb+8UO_!aOYXQ7DNPI3hyPulFv(WSA0P@k`0(c*VR^C^!rQ=Cfc=@5kAP|aZa4e06K7F?L$4v*JvSMAlLb9}o<5!l)}EXF z$`L4T_Vp(7>`9P0%`@N58s~_&0NxxxJ{p{TDbJk91@Pto^3mV|cpru3>xlnD;DK+W z0^bS+L9r_~?+oZBvc~L30#ww|MQCC0wNq3qX%sylB^5_engA|5(2+dm-Nd7&$tf2p z95k(k&9mJT`@scuWqynOs_OEj#&L|Nv)F1jqVw*M2NX$|8(oAF15bFsr&gw9oNvn4 zlu&Oj^Udh>MzCqm0(f%(`Dk#)2n$EOA3LAgcJs%-WcR+n|4oRE-bch^f4u9z5$OF= z7sPuXk3SZgMlWjr>{~70q@G{jju4MQr|1BF#A>@-3XdF$NIh_e!4?&Q1}!7+d{*R* z`2U56ts#P+yF=j=*dG!xM%87S_#lf74=~AWX&^q(>UkzApQNEF5ilts6**QDW9x~@ zH9pBT=~K}0#4zTWuxuqq*#vF|>a}E25n)P7@V!8P>hrlXiT}3n0os4`cZ6`b1#BkDIP7Ed4T;H=qb6UDF5As{nM?fuT(=DpvK@EBv8qW8DZY}>fC=P9=l}l;{sb; zXBDnDqAZB_28z#m7SQ`FJYR@hK<^6xeKvXlz0bn)g~$c;z5vi?qZiQoEIeO`TtM#& z0DU%k0lm+{^M%L-^u7SlXQSskdWYotXMeW#wjT4wguc9CK5sPwr8yVCd)sUNn2!yf z{0B+qQ_piJ&lPXpY;r;H24k$}TCwKO5e+zQ-4hve;hRs5J8e*VSHk(zxc0Cu3*x=o zG=Id;9vb8i5-droocc)d2NC}=feRcNAGR%IKuU@6FH7>#;^_J5h^ z8TQopbt9mKfPjxPLZRGn7zYFbK;YmfZG@m4R?Agj2oX_~ntQnLY8-*AYVDSd-*(1T z#ztLF-@xPbAi&M${swro%#mS8ZQn_Kpfv1Me=Kb43?9lYv*BD|DPKs*Zq!v8fRepOZYXeh8SML(C)pb!uN3OS;nnspyFa+ zFcx}dAm&ix!*O5jhVxLJ^hBeSARC;!%zl#_aP0a}MZA!9mX61LEJZa#YUxH?q4ec^*`@bve>px9p9HH)>9|rlw)+L1AhS4z zddetHRJeUb{C4g2SbU9-Yy|#?dmPJiXot1LPoTH+k>n0 zI8!20Pc0fyukIM52z1_%U91?bTSU+6_7ffBvw?!WPW>l-ODo``I4Lj@x)WO zDr4z0^yBGckv&|i!_@3Wq`OD#39FXxDjK+x4?PEA1rDA*#!R+RkX6)besn>uxd}NjFI$VXYjgTBX8zHK_l-Csl zGq4&n-Bom#KB>W$=NQ5lj(3H$eDos9s5l~p*utNaGkL^S$X2o^@x+U zI_p*RGw_{cm7KU38QBAU=dO1OGDOApWhe@~2J$%M3@DZ+Gmh=1c?F+kzFGsU(!?-3q=c|EQO1j<0VE9UvHE`2j#rY7W*X8P z6{v}a#Zp;%O~r+hySDYP+Ah))lmRV!g9jp9(oruk#bH;%H>j;WkjDI};K|b8z&_aT zeKU^~*=PA+wLapU)X)j~aRCjpovOMhet(M24GRk!X_i-vUku^rCl(uR_*s7A0?YM- z)|RtM^!z9iQ36+00hP0@MP$EJLZ@?wJtEe}UC8p@Sx>?6)FUUm5`_fs8L9((q=FFd zXpKr}C)Y)KV0m!)(<=)~c-tRb*)i}+Ll+kf$hm0HZ@FMt0Imh(zZ+H&$u_UrW zeZS$h*tH`jI*n7a>N^Pk*iq8BVU1sYy6^a&?Y%v{XDA*Qn>C7aYfNm+vqOr=)=^bx zQ&W?4)S-+RVC|LT4}Gx1WAfe?&(O5eY;~KXDV_J%P?n!LeLI%duK%hHXT+gi2;!FN zwWZHBaHcc}x&INrUYu6l1_!e3Rf11*=Y4`-hL);c!}H^=_4}h`dOBjoWTmb)C|KWN zLK62oX{n#3mTHTO8kp`qw@p!qYII8XF7kbXluyfwj_}|CESE#e-3C#b zyaLjj9v`3v+p}iWkf`CqQ&jkq;E!V|n&l3Z_(oNWIC_kzga*&z=ewOv?jGf zDHK8u^-#9XcLYZxA-lT=d81MB9Z9VwaXuR-uM==qCw|w8eYN6L2XJO6JqB*-E6<+x z`tn|$U3#cDf12#kyKu2xVTmu8389l_Zp#extNLCa2Kq`ni+|A-acu z*iW#6vYhK00&yYbF`g@0Y3?_Ublj0N@-1TC`sVkNp5ATl%=*5%*gNE#(w3d)O=4nY z)lAwUdcI@FNAhfm!DbrkvTC3N`>WUJ~nsG(Th+Y{1Uy)?d4n95K?XV?qCRN{Txs+L5R!U)=h4}%5RPpJsqP)S=qJ133oM&&0ChC}9LU8Fiu&(EYYMXP| zr0nj9>}aQn z$W~Ou)1X7n7dpPrFTv~YrX5SEu)#Vf$uR)IhpLzinP`uitLFWUrMLId`GQq{^HU=PjJ179UBMj{Cj! z@LlgRwfk#)y^`EKcWB6f{bF+anN~*anl;s_FXFMRvpNn@xdzdK_J+L%RtoFukwA2G zi4jsbWnysGmdX7~JfX`sowl}qp&V5lhwE)bSX)(d z_-^?5ig4;(2;OHaMmPz$`lI)}jlw-uQ-R@++ubS5_l2JQJ$r@EY3W+QqRKRfUWSkvth;tH6%`h?iS^ol%Tc zMLt-ID5>RzNv&Z&EjK%AKC$@DdeN$q3#jazkh-o*YnX#qu1ze9xPAxh;C4E7tF44` zX?}I&^1hDDn|3?nNlfP8Q>7c?jVJGlA_(qf8mh?w3yu^=-1X>*wW`SFxv0Q_tu{aTj;G9`Rtao7&}o*%ipjyt%To zp3PrMG`7AE{6{%sX=-TK=T%=?sG!I^lPQ74e1rac*;#g+6wG&)> zonF*;QN+AEwiHl=a%;>}N95ihKK+m|N1VRx;Euy9$DV9EXDWHb-C`qlw-$DfBycA} zwRgLZoMdgE(UF9lir(`GsGl#rDM`p6_aTKLR&~O1TsQZA$_F>K?rp!IDxjRJBD?l2+p>)k7V*zKjiQ3t@H{{-SId&WsSSP zh`m+sLkV3&VhE^0*xH{nXdrNpOXI7fX?mmfYE4aMCw|l_MGB273|r^aE)~kWP91s; z(1w?Ba?3vs>%sIB%ku@pvEOuv64_A% zMf_&T^OD;2FUvQaPx%fU8+TOk+|0pq>Lcf6H;k`H4sVeubqYrMy;^)!sVUI*PD6I< zSYVvrsc+SO9$Ds?VesvfV@AzSy^FVOQEzX_Ts7tvm&~Q<$AC3f^RVdrdzLKgq)(bX zO{vkf=k)VEvPmJ@Qt43sQCg{xsOh&{Mw8x0eHgtHs>30)0A2HAnfXp#JxaHHsgu?1 zVS`@vb0WsJJlQ$wvo1f`z)&L3!S$x9G|}|idP>8hTu}pGxh0s8mqGO&8XC^Ohh!K} zY}+or{FtA60vx8Uo>Z8g{=dFP^Fxpb|U5dKkRzsQcn=Do}6nx)Macn@0Me3 zqPI-}xnr;9=FV09mPun(X2fs9>FGA(bW?RPwY;0tAYXhnUi@+(LD^!XWkcrv`g<0) zT+JW7@Hv@Ijl9QmIiss_I7IFdE9btf!m{Pl4Rf9Yt(8DcQq;4HEah=T+}lo%sa3Pc zAGT7bISNH~#goBF>sxX&oF=aO#0(VgEq-_NQWS{HO;*R35-yT

    kpEFk+%Epk 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 I(eG3L2YDeuMgRZ+ literal 0 HcmV?d00001 diff --git a/.image/大屏设计器-列表.jpg b/.image/大屏设计器-列表.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a45c3bd1c7e3a333994b85a97ff2bda605378dd GIT binary patch literal 54718 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 literal 0 HcmV?d00001 diff --git a/.image/大屏设计器-编辑.jpg b/.image/大屏设计器-编辑.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63298a0c14690f698dc3d93bb92fb668e1ade8c0 GIT binary patch literal 111729 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%0At>gr)1c0%&iH5&SbW6aPv~@J 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%0DujT{vHoTFHzwu%v!K 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 JDs}Eg{s#v}Ol<%F literal 0 HcmV?d00001 diff --git a/.image/字典数据.jpg b/.image/字典数据.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8298c893f7294bf47b0b4ceb9f32bd732a09a509 GIT binary patch literal 79736 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 owKw7NklFymm0A^6s%I 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

    OO@*I%9ht>@V{Wjk}l=yO_B= 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

    -Ydouxjs0H$?nM&0awQBS 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 A0ssI2 literal 0 HcmV?d00001 diff --git a/.image/任务日志.jpg b/.image/任务日志.jpg new file mode 100644 index 0000000000000000000000000000000000000000..599e50a9c08e49a8ac8115eb12fa9ce2f302a1db GIT binary patch literal 126637 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

    YReVv!-_%pOx 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%0A&I9TR@ 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
    s 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 LbX6;qEkgbec$c*+ literal 0 HcmV?d00001 diff --git a/.image/我的流程-列表.jpg b/.image/我的流程-列表.jpg new file mode 100644 index 0000000000000000000000000000000000000000..223d17afac065c5282dc96e4b7052c03f02260aa GIT binary patch literal 180098 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 LQ-o{UDwPWco8Xns|!x&xufsU3n$2#1Em0 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 j&B)0|I_92a2mT=y(b%*G5g3iJ<=l`o~(L literal 0 HcmV?d00001 diff --git a/.image/报表设计器-图形报表.jpg b/.image/报表设计器-图形报表.jpg new file mode 100644 index 0000000000000000000000000000000000000000..681b3185289d600a06876cbf91aa7b2bdf9aac38 GIT binary patch literal 33448 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 PhsP~H6iv(5e4 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 W<$BoP<2(N(k>`r)3T02sL;gP@qFG@8 literal 0 HcmV?d00001 diff --git a/.image/报表设计器-打印设计.jpg b/.image/报表设计器-打印设计.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bb86da64ef9e4cc5a822a9859710b4bdca8d026b GIT binary patch literal 37781 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 O$I!q;{}$my_}>AME@#64 literal 0 HcmV?d00001 diff --git a/.image/报表设计器-数据报表.jpg b/.image/报表设计器-数据报表.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ca5b9b646db07ee9da67a2524071bd3e0ef2746 GIT binary patch literal 42204 zcmXVW1yoes_ck%$&_hVa3@P0m!i*p&B_*9hh=4GFq!JEYgOqeBE!`agLxZ$5j38Z7 zQXlW{|E+b`UH6`K?sN7&cklh|ea?x{)_hJvNKc4`g+-#K`b-B43lD{bg$n@UKD1De zA3fZ0o@lG0bJ#eZ|-qCBu9pacXoC* zFk6S0_h)yv<=?+=Zf&istjy2PPfbmCcX#7>%NG|Ew6?a+%r8FI&>_*1;NTZ0wo@1y zo2;v?CG>S)qAr>%?k5Mc47xai1 zj~qnS{@(1}U40BooVeT~wUs6_m(u?DW@h_#?e<{v?>Xvoe0WThu(YE8(jBeSQzJ7g zT1VC8oqhR{`;p%_AEHC{?oM>$J^oz&H81?D@!DqoX6N?ws%-0y%}GtjQ7bvSWcKzL zmHJf%_QEiwB0nvKH-Ah$+}Y06FC;eYiJgkm`{2lgZ1XoBK`mLVVMnr_#ye*>ih*!L zYiCkd34R}gqpPFE(@naLoBXo+(wes4=R5r;Yg`EJ_Jz^xiDvZ8er7>sWakBS#hKXC5-6s1BWDSsM=V+9ztw8TSFTA z=BrdZjqR(UTMiVqz~cpH#Pz1hh?OaxNatBz!t8SxKCQs7fGEMH%ur&XpFXfr33%W{ zECXT%74^^n{ToZt5S~ElA39eRPL-DL-H@BqFMyD`WuM-zLMIQt|!OFoK9> zXa#o{bZQ<}`xMH`%eADMk}iU3mWN@QSjzjiX!bxU8Y7k}U6^OKl_QH8Xa%^iOA2B_BhBghyQh*Ee^ zkAEx0TO5h|p*K5^?HpV~BGwZVgV|QM?uVte^tot4X;LFf`mU17_UiKP+$Gv*3#AHp zP3N^WP7Q{Z=VI`?6n+*=X?dFdUC5;DmF=HrYUmuz+)WeZ+EBu)&XX%CWj>+#j;g>( zUBnmR%le{9Yy655tL{&;)gPHxxHa{*MNz~KVUE;O{9K+{uVGnRi~*{W#5Qaz`xs~9 z+sz-beab98pEoUCCiM)^V#&#YhrPOTzS~rOvZyEBb}#bVUk8;vA=~vOzIuC(I>fnZ z4|C!mv2jYqPK9qKrK%zIm6dm}DBh_Xa4cQp8dZ}4yz^uis|r;Qx0Mh~in9f`gWo1* zwBk_jT{=v39{sd>;TG=vPVWITE-Hfsbd$i0aLv+LJrQ<$Rqs75u~qkjp<61YgYMvi zHJHYXEfPWwBdMXt;|)zfH4{7V9$`W(u?9&GU5r4`*vZ(|?z&IZF*dDB|Jrx4UdHr& zY%av|#9EjOiKlMb_=tBYpV{(g{2L)$*~gScIP4|{?~Cxz=Y>q8W0EDG7r7tOb!ai4 zB^BS(HVY`*BL(_%UKEd-G( zKd86Zp_u|(aB!A8#1tKZZNP*|tFu<2CoLZBimYc&ySaaj&hvHWar?wUO<_kEk877n z%oONfgrn;GSV%07-!4UQ^wJ`_jqVs{{QB&6tBFQH_XStVPmkYaq*RcQ14sAOH-A;$ zrExklwy||7aDXSM^XdJryOx&bhpu*?nM>Pl0gu0ZepZuvBgK-xKs($Cxhl&t#Qp6xrU!Yir>{Ad;G1YCU)gr!MoJ- zLvy3%FG|C@{`7Cqa-%vj)m^k)1T{B5tu0NjY^AclRyUk@W2xk>JF8+6NSLmo&C z`w_8?D?xnXu}*xL7%l9r+%tQr?JRorJ}`2x&@2O0W7$YhV39P-3q-3*S8y`zAh&uH4A^DINq=_CvysXg>A&LkKm z0e-B8GEuQcgDwtcl5cMXzniPkxwmFY?bm1Eq=Kp&=CbQ<35=3>t9UYBvPHG$k-(8Z zaYglM36kARY6MW3T8ZivH7|rlW6GrZOaDCDA%KL%a?JG-&ll4K4I?#!_Ue8H;T{cv zZASCOT3OIdtARp&{4v6G{~ino(jSCGk0uF-Y#rvIKC^L zzBRvbYqCT<^9L$461CAue`#?smHzlPxtsfW;gY?>G2LCvgOCWuKUuy=(1}_le(X+` z@Ad6D0pwBHQy4R27lHI(oIwx>x*T~{#&v>?cT#=h@bvjZU*?tjMkoJl7IknGnIt7`$4h3FWmYJoy4gW!^10fyrvNlUo@lS|Zm`Hw-8t1)R$?t=TDf z^v~JI<}+NLY|YUrq|r=PsiE;db-9Y~bHT+3<}HP2jdL=`rbPeuDA3IgXM=z0I)Vjr z3F*QlXo*7)ad-MB*Lm6DTlHb@glIonmKQm2zPge6W}Q>*O17wu)B}Fi-OWwHk5A+{f4K|C%!X zX#%Rloa8F$wUplhw18on`JHs&^Xts>H^8`-zXvMl{hp?Jf~Q;}L9;|nes(qF)oUaW zn?7~uT_19|EC4*71NQD7#PU(0Yl=1CA>V-3)xAwsbp0Ay8}-dhreL~0r5>|Nr}_(Sx#Aqyzs~~XYNU$m#ac(7;&%DZth#Gx8-uAFkc$Fp zMc@7T;MBIRInA%%#dwQYXRD!&kgkA%G8KOIexi`*MNa~7e8}qxw*$l0&^lIlxyq@S zfXz-+i2Cv(4Q5PEkjYl@4v4tH>>8ajm&exT4H4tg?FGVD1`H1Rv!)R%PZ%g*?R zq76YB-&YIs35n!ba8fKs#t3>W%T%yl%K$OiPG8^LFtABkNCWpN|4*>0F8-s<4j=6v zJIW3$Q2V2bAhq|)t==l=H=gmR0h!B~EJ=-n4L3%XGW9p~4hJ8WLQ@Fm(|&vef?mJE z2Fe}b24G5cFF$&YR>RE%;2Dny@7rB;g-oBoi#rmGRtIrD@WY9!uN@>xEhR+7F;SG& zMA2e(s9o)7fVhL2(xSWCXDVR%`;tO>yu2M(!-6=9UwE+&6xFWefm6baXDUgR z5}~*ko{xLe8If{PpjReoyG+MFKjV>gMg>?;Xj!F=U`L>{69_4vdG}S*4hzyCL_ZI{ z9{E1Tb1t)QF?HHU3x6{OOpS^cL}q6Yrkaim&9Y-?LWVIy^Tb|3BYEAVU zoW|m;O6qlb&Z?x33R=qVa+@EbOMW9!K{QXt%Pi%vsP_3s`QtHiu|F>Ztr;JYZFn9wVPK4#{^C-jh0O68SOqv>3a-B62{Cj053|%C!36qU?1d6>OzKlc3Kgx-$8|4X3Q48Q*%|J~Co0E$G$Y#>TF;W1_ ze5zVcr6Bewu`>afop#AA*f~p2|wAL=kUK-*<97vE$ovMSQii6io_gRmqAdWI=SnL@nPG&KJ)w+MyZx|Ga;U0gaB+P?KQ*K`O+z z?B1Np;A7LAvOtE@H4P#R{Y9&(p4x3KB zrMZ>iZ~V7KA*>B=U$;sO#II2wOcm^X+u$N>izy9Ryrf-qgs@#uRaMX{6%nn*pi%|n zkY&+~G4kHZXc6_B;L^w!w0MujigX=*Q6eOSq3xPz(ossq>YGlsDQMqR&DXLA9t0AN z5~Z%;5nO$r^KEC%@WPKeC@4%z8<}YzdW%2l($Mkc{dH5p0w|Y_aIwzhDZB5nO zMh(vz88Wk)uH!dDab`cc)TQj0CCVgm7ja$R{ux#-IyrAGnqf zt=-|x^%x41nN(5R1a4V%wfVK7h<Wuv{3ZY8!4lu*e^ zwhTIHB#i8g(Rm#qadxKR*qqw%1*OZeF*t>)XfC4REJ^L%Ae5Sfmgl*dN(o(?UqBYL zZr*Ox55K+|T`pJjT5U#-Y`hR&yl`gZD{M3_sk@yy*d*$8tyma&&H*1N3YET3+8lC&y_8z#j;M(rDSanFw2}pYNEFM@FBjpS$W*4RrrPRh~md_}8A4Q-8 zc)}x(!wjS2`k9pt4Vcx$x0I1j;03Y2)>@LekV#6UF0t8liq1mOAA;dn>&!S0zLu_c z0r^DlW+68eB|aon`Gka(Dc=S;+teQFACKz)Wxot#?bA9=xyEBBXQ#xbm9$YQQ}Jik z0~BV^oXAD!s#=HZ0Qrgts$cUnm~y}^`G}tYzg^Xy^M(wsM+7#pXoPFrD2kE>Umqr* z_Rmf_OWbR(%1z}J4h(Mfo6M5EGN;R8Yns(aHM#-gfmoXqAz$zVXh_9pVSBt*pl)nYvUiq!l{kCnjWV;hWVC zbgw%pjqnRWIB}Z>rr=90C=+`@;y}2GniBeB3UNaxxrq|`>9*^x5FboVk zWSvz$6Sn)qwn17$&jNv*kFmn3jC2`+ga#MiDBX%tQAVLT0c7V>6RRO=s3hk*w>vmhPdYWt8PaCW!wS1C2`_|Xjc`fu};+Xx)r*r)HpJE4p^t3Fy%A?O- zROC16a*)*h(HikbOG-|$1bStghP%m#+Vl1dA^lrrt%qvbGD!z78y`agE}hoqXMS%pf;E^P{_BaQK0#C&(43uLPrKS|Sa$p>Y3_Bcvsg8go?4iW%)4(VxU!41 z+3aClUhP9V6|CGSUEUBhEsVXDnUl9`oj&?s!+ec7_W&2n*N9b{PkYQVS3-&8B? zil={R=3r?_LvpCqRO|5M<1O9_KP17EEe(cnfq#99uYwL8Qq=sOReDQb-R503|7*$S zfO_b+bwfwb{vkulf<+2P;=;bQw5gNx2i!iYu&eq#K7IDSZQs-l%Xy>HIxh{h!?8)% zq>0Gk^*p=D<3by;>yi{{9iGq2`htE$TVn+wxo z`k8O?i$&GF^^81trS#SE!-b_*#jzG-7rcAx>u!bqH(3NmL3^A+lPn*F(mN!s0_N_L zEV4We7siVPOjx2kc{_wY^8C^TI{vDFyz>$-?TRR*DP60y*Lq#LHZ?eZR@WG}u#*1&5BoU{g#5>l{`37QY5#-b1YQoOXrM3Ia0RXID2D^OSN1aH zwH6c^`)q~;i#-h6E|uLL-hJ9WdF8p|nK;&`vB3nioP^55-1c2QSYW#=xauW!=ki)w%7{KG5h%W;54b|bSy zmBc~XUr?@;!yFBJ9Dz{IM=QOA;Yg=#(Y9HwM$yA2nvm$~R|@pLVw`>2?0{&neD*jx_!sh|ug1bXiQuCs#b(xRGq>8W!MshL zpb@$2vlfvqJ+RjcGy@-2wGhts`j*RcQe1Ck{GRvPKN`w31hG$?AIH}yy|l;Xgws~% zZe@}&P#O!)h!W4EEV$s-ZfuC0c0GDC-}ARBYR$F|_Q$@dsCz$_lLbk&4whC4gk7Fj&!!^Cl;+8GI-CL1p= zLi)JK*0VA|jIz(sV2wq}&6E=-$}>BRSW)6C)=`7RKSG%i{SRW~@+58gb8pN#J=)(f z(~A6YMVeTU+$)@`s2v0od6YSmkQ8rSLm@F<)Ra9(ku#}0fIe<;(GdLB6HSdRO~8!n zvvoy4N4qFQXNUbm=yj9}&>&Jz-YC^7Wk=riBSH}o|D4!PthXAySa4@*t!!+} z6gC|>>TwEzf(V$>CMa4Kf{S|XKxR-PyTtnCM>A9tT@u*3Olp*jiy%U6^MG}y6#J4< zBX}a~q)jAfKi1G`h;*`KfA@1}Sea(mnv5)b{MpXuLQ*s-S^)Bn78PP|)QBuQBSFoO z{XjClWry2_F?#NxxT>JKkKm8sDJV%G`d)ia25!dl9BYvyXe}hC^neMmSOtr{uzDlr znG}Ls{SwUpgwI0mtqvE>Gw{2gD9}aPMVtK4AtdL+Hmb9%r5Bv0nRt|>FSgkm6T`~O z6H{)i&8EXrRs`;o^@b_`cy#|_Yv`*CUHbQlT1|0_!fkeEuX)&3|9rv#RbWP4a^VGb zAO9#Mjxb(1%oL7ZDa8``-u=6J@t&|#d1Q3L`_r7*?+K|Qxa^N-RLQje{dw!$`(H!wdpGDI;; z%J5fMO|IyB9MsjjOaT!%_764@qINg+O;LC`ZKlzXEKGCjKH?^+;@AHJ!TwK_cu2$LBl2EW-z&ci{mS*3>QyN|kJAy<1+Y&l zoA<1?fLfB{n^;U;L4m4yYEXt5K-rgEMHX|f2q+G^Ve0Em@_pGy&Hs@<*UEv~I{Jq% zx~#`5H{n7KBR`JtMAI{cxxM7(cR7jcw!k_G0Czit-LQm%#Zg>okkWq_JZz@l4R)tX zV#x_h{|=Mxb*KXB=5z^4{hvs3^~7|grGCvv#tVN z%gF*O#yd55?hPN#%~>$;Q)M&n*}zm*Dcx)j@;~A(N64G0B(A<&J4|b20i7Htb70 z)(RWtg;BqKI(wB*oJxG66f*u#nApfh9;e^&*-3(R2O0byP4)9v04a)<0gv$igrLH% zpRi(W1M1-VFqXDi@z(OUOp-ZQ7mdPd}`OT zKaYVah5^m^NtFK;%cSIQQHw~p|NuK%Q9hWmjHaBF_!Iy zvx#zMxsu3ZntnxI{)MO7gUXjY=lXBkrreSTCqBjl5NCISP*7fHDc*>NmG!cs^vH{3zY2XeMe>nKw*dXv$cg8b|C@-^u*H2pst-ImBb{nen2)PQ zR6h+QYqiHBHFuiYG#A3Sc%6A&M|_5yyxmj#6mcc_xZ6@MozTMtxx+N(udH zi|#hhqC3f2oUL{cv;0e8feAm`4RYGe36O(a)$`k44;7YRq9V@f#4}c<|x>?Guij71|fs0Qm#P8 z9r?nFQ6%IUwF?#@<9uEogLY4QvGjV0E|ySv&3YWo!3$PTGz zXp}PJ)>ASc$%V~Tl=%BkwRscap$6aaapPEN`j~rMYMMU%%jMr+}!CN5j#aJq7J}$su4*5%x5~$VIA+V zun`VX0+73~w4PmlyIb$RRkr>=6<&ri4ojCvOKznqAp8ix`4k4X0(NxOMvuUgr1d@1 znSspJe>)9E=&(Erzvo9b{R(SS!Cn7qqbbKy{~WPlXfi{4iy50&Fel`?RTp_Bkm`j|f5fP%Ei z&kyoh`7#>4{`DmZ;*tw2WpRXJSij0(#K5PlQ^}yUpH`gROYSF858D>q7O`W; zprOQ>Pcy^hs_=G{sksToswGNDt~*KFeJ@W=quz$iIxoCm?F>4lWs$D_cpXv4kaF`> zKlnHm4^9788x9Uu`hvfr?0vHS>j1Y3_`C?1LOtUm_9x1g8WIJYnIj<-vt)g8%oUV( z`J=609dNE@$P(eYwWzTDpE2Jg`8L_2rM^V%>@60bt0R6f=$yqaD9aOKk~m`n%Y2g~ z@fB6>(ooDh$-C6u@_WAD2C$3(m2*~pZj|nXZrG!xm1fCbtHUvTr>N)8sr|qe=r_#O zGnmb$3G7B2u8~Jt?FyIYOWV9&ho-;UugCwLZp~IiDsWNt3lYbOf}bC1CZ8C<|I!EN`e_UT#%ao>Nht zlh6Z%^CeTS9cJ$h{z3VWcT$RyCw~IoaOEO5jH|8=Sg*lozW-cy(rd@c+oox;^!zeq z!9cP^bGBwY8a6+7Xju`P)4VUBV&1=#8~F`pZ1vCf=pa{IR4r`LI-Nsp*w5OHy4w32 zv)BZL=nJ!1LNs4E#mIWzePWi0_w~--m|d^;7OjoUJ#USex@b9G)moo^qrA4W_u5-* ztZy<<(?gyy$=at2|KQ*260Tn)*`CdXV zRg~}~1rG3WAZVAMi&n02ZI!&PC^-TbIdw0FG?9iQQ89Z;S%jxQ+8}d94E-?;5G5~Q(>f( zos{PilFtgLCq<_rWKv;HOouzDrC&P2QZP;2bnd^ReScqOBwTeKpR;dG$x|^ghM8;) z!<{6VlfNkSui~YKRu-}Xz8>KRW`Roj_c@`JlUU85JuIsicYz?6Llk*;qH*J6pKj0JMwUVR8wZQ9=S1-Tup@eU4JWIx= zg9ORrKn?|w0MUVp;j93AF=>tfDPV&adM=AqEU6GO_YXR!z`ToV#R8VQc?WBh4PM+o zf8SxP>h(*^CDfPq2*lCKiCs{QE?}%yZfH>Yjry+NbR-Z=4CAOx%$|~uZ}W38T*a&w z5Fr=<^IVaXl<#RnJLo)RUL~y&uw*^(V5-)sOMcW<3u)oPJ>xYqH<5(c<8*8+$6z*H#p`30U9x$ql7YNKD1As6!I}4CNu;~2dKUqBX0ec0k>qUq1b*t`wTE9z9qd35-G%*~ zHh2?+H;>vlc)ZdO5nqH~U7;6k*hOkc1iET%9~c{!tIh}WdJRKF<%GkS_;<*1lhw?A zEF)22<10xjuTZkYcm05?E)%>fJA0fk&`y6mFEGwmX>JF2(gtfEgLFi}?s7x;59Tp3 zGJBKz&YjYjprp23@aeS@!l%4L`bSD;m-UMQJ6%vv)hFm_O_d@TFKk{BEL1OAEQ|3O z&tr&%h0?3A2-$XNy#lSy&_MYa4iycbI0Z<|96+Ub$Nqq3Z10`vR`0^x(M}F2q2m|o zM|iub6pC}tfGa#s+2lZMrf!L#N@Zz`iQ;7dImRz+ksOnor7$Pw{;RpVJKP8{SFym* zx9V%8PF%|(GIZG6+%s4r z66zg(P!s7I?nAH%3|43RLzJ5}=^deH7@o-n@OlJIRh+9qcDCYm-^YMgwonmZli?YL z>M45}eWf9ht0sk|Wqk86r{v%E7Ukec7E?Fc5-^$zhga3gR-Rz;+)&B&Pg~H{&tTf$ zQlqaUPSxYwRGYw)bMB~HG7QQODDq9ApwwTY(Ot^ZIDr^=I$&H+6tw0p3+QfMxAXPx z$+~yxUd5Gx6HAm4oqS4%6>WinaUo?KyL5s?#6aY45vXF=o}DMYWQgk_>i(Ybq)^iF zQspV>q=`(}B7cpLSx>(EVB>Z+tRRZ_pFJ=B3|Z>FAiDO=R2byFA0=&n1eHsfpBwdvz71RAJhPK=ldc6vYh1Z{*HyjbKNX+#Kh z8Qq%1n-#zYd>y~fp{VjuUH%>pufm^DpO#|e|}VL z7#~#L=j3O%{-W#r0iuG(i34I4!CmCSJa)D?R(KCQ;JQfhL1nNzQ1OxHwobsqTky7z zDDuKcSBr3LH+a|x*2%P^US!)0dasCj1AH);g%TqBK~o)XA2pK!Uv=i1WyJE*#v7l+n*By?^~0%)u)=P!28LxcI2sc=LprPKT8xpATTd_V2GyKQi+Ub+!AgGFaRhPc7F z7A^9C$yC?E0!^>p%Z~+F19W6YWi-%{nS5svGrQb?iEY9tQ{{Vbu==jB0_=U(2emf7 za-wQcdfn;${%L<~*?4!;%GR@!-}c!b&XuWRvnjLT0aR#H&V&J4Q*4C7_0)!%?=#X+ zLAl>+iYQ3AG<=YPk|eZZluKV_1;}1FmnkRZvKXP8SN_k`q9AK&aq;g9xr3_1*`Z)+ zc-fn%VtpnY&5PBHE+(9{F-=)0c;@(RzY$Y#I7klIH5&q&exM{1MN173AQSNE5jDtA z6zPI%qZGEv30kg5!6OvGQ_?RT;RROBykzQT!G_L0z2BD7-&3TO0IQoT(S8Fw98CsS z{&ztZ<&_>{`X{i7*)&6Ql^S!w0W~Sz`+v2oU;V49M4eJ$A44B;PMYRe^jBPXpe496 zC`A{p<5gFsYV?({vr_q(d17jRN(s2LE%jl}IjPknNFq1zHx4xCKWGZ^XwsmL z;MGTk{%?Ut4^-jrdBwAS_M&;7F&f4RdhY?;k7*@=T<&l);fPW0K)p$WGwOncu$}ia zo534?La%Pp6)jgDcXL8J3lBg47pJf5R%#FIlmgF^-emDL;jY(swhM*}*!&;kVEhcQNa&_i2d9Kc=SOInCRmYaZu+x46f0FZ?At8$+ zJ)*0nXGf3LP~<(saM2TaqvX21D`IH)eljSyn)xf(b=u||d;bPU;L(Tc=htguMwaF;`MWRQ9>iiXizxX8bK;=mCb z4oxs)K>ywG7X%(en|T_N15RhGc4Ji?yb}k$JduSRJr|fZriOH$UPxo^*Zy#!XT%3! z$+qZCR*cmk+M zFA+}GKZK2$-dJ~Zr>54Y_sy5jhS*|b^T4O1gN#t^;5~Qh`rR|%@AYkF9YvU%e@-|- zC$M4fS!(I%HDwO6HS8hdSEw;AqUTbw(NCtpj3Ur4fGGcPkZF9{q>G^53miqXesID$ zFEDGpn)HE#A6W}yfeH!>S#SUWb`Sg#>=fGBX{KYWV1Gy0?K1Ek241$f4=U%m_=GCa z*kns{0-h*7u)P(&sJO_krD>slAZq1o2Q&i&j7m}NaNt-O8yH)E-)9BUcKsfENTTK; zx?QTu!pn6!zP11oo(+=LE^dWnVn9N=#(1oo&cB2uyxegY)L zS%U48Y;F?0%O$U=aVBWfkb0_s~5_r)6^11GRQ?~JnXV;!yyV_j&joc zkdqN>mO8{yO`a#wcPR`T(V+M*|N@V(%cVsbH-~8AoyIP3THF+^yS`)@` zy9&rlH0$Z+VjzdtNKcJKedUvKUNMeen*2!T_`EQ6+YO(&Acofy!vzpip>-jqCNp~E zhHB--kj1OBXUnt1l#B3*7RkWryBP(>wgpD|t;vn7%}(^9TY>{u^qjrGa2`itox$Fh zomh~sqXbBjUL2euURlkBi`Ve?zYY%-Emzm}L35-?Hzatw<7aQ7WBz|e24<|rwkpsM zW=G1tjwt4)yGs^MCs+OvI6jP&10`01y#Z zlz*kMNlN%o3*HrnkWP;M{r?V_ge{>B0qZZv;IDK~OBnbP$#_Nea6sSXBnV zowTKhN^RjnKX7Qav7nRVEr8r&r!qy;L>7*ivxt6|0uwOxbHkE`ix4|2Xz@QzHk@f` zkvXtj9Mt=1Punxvr0dWiIA!>gZB#DcZc$+kfR-rKqEcP~mgV=&mobU}c6B!8^S=Ye zy2bsxNthLo>)vbFZnQiX z%}c)vLfEFi)1O`I8ku4PF+Y>vGD4yjmYxBReVA|-Ta5qKZA@`MfuqreigVg!VAW&s zu|G=2VMj-V(7r&BxiXLY%78cyu2(h zi)Eyc_GTi`;!T9f5Hk}N((#ND(iu_APP*j@l+_)2qx>lmQQ|oCZU=Pm1-v4QIZ$r9 z>wWz9v3!k?*OunJD|H+n0!?l0#62Q83VABZL^24;XYTU;rRrzY)t1WORVhLxBV9pM zT?10((@=71^RC+0-I}#fbc)}wo9dtU)iYA9g`Ee1iAa;@Sd!=c9}_VrYDXJB#mL#w zxTi7BT5?AYsKs$npR(I)`6w((nQO~iYZK#t$Qmks9Ab;)<3QuOqg}(WfP#rayRO;3 zbb+o#kr@QgGpW;Gf#VM;#as~u5R6U+&0tj{n4pzd`)i=!6bv;mwM~jFFpmeW>lvmH#5|lR!QdjRh`rp=BoDHvWKS!L+H_J_~4@oon}364%G?b^XtoO3L$sY^L}^i?&9h;$CJ zfWi){TuL@#!eJOx+#w7|iU}ScrUlXSe#eyl765c4b4N`udp@|m*FVz?ZzY(e*~@9D zcwT0wbd#xCiS9RiMZ?!NU7JCqYwOlV1{5|6Oh8$zwIXcps2;h(Wi_RCFSNW4^=%7L zY7MoS*J9Ps%tK_jyMC8Vy0i=-Ys>Ai@D(IVe>E;X7&B+`MzBY{NBcPYcRq%1HC*Y( zH~y;I0)}d`Wp5j^wrF6iCa?)F?zx!Vj?q^wTM*`icB+NnJ~mEt$b3BS(x6>?$kCj; z)mU%HzPhZ8u|#;Rd+r4+=t-u_V8pqSxRh68-q$3g$T$2_`(FfP+q!O@q^XLukEH`E zb2C7|lb5(S_Ws7tfz!le3?QDJUQRqKpGRPjQhhMUoHAb)n?6|2c)C9oVE^PL&w$ONpembm75 zsT3#!j~mkqbJ8?2?KC-k44_d&Gf@S*6D)J|Ug&uil7J{ostjH8mx55ZKv^c>_78t2 zM9WC_QG5%}Ls0#HJbiaOn_u*Q5X6pITVmH9ZH*ckt(Mx&cV*+~?kV&U2oV^FH@|P@f?;Sid{!($6r?gRG;B zWpTXnqx`M$kej{kJhNi)w}<-Vsn=M{MgNDOeNLH373!R9n$mARa96sTSrPf&p_f*j z?ht$?6*=3xMHd)FWj{zlE@s6_%~SYf!>(OpPQxr{ekDtoCC2-BdgW0<-|c_EZW}2h z^}aLHR^LY61GB~1WM?~e4_4f^hq{g36Y&Xs8q$Q;KB{v>8UN#qB5_3+Mia^UMVY6k z*vANi%@K8b%LvsqdjM%feM~AR^>Mo(Lpx`{0PuP=Ag~Y<)78g|zz>N(5hBhr1^t*{ zHoad#-Y_(hR0J%^dGBdIolzF&@W2HXbxS_);pNgQ0Dq$f$EM~?0i z&tV}qvJuBppu<00%&V6!u3lV+x(g|Y{%tfXx$;Q`rwpaX0%>-nxCj10^rg^kGFgKJ zO+<_>>DDTfWHnBn&v}9}TLM2z@|+bX{{YTX{oc^%UZ+wlhcPJT@En^>K)jW`F9zsJ z#pt~8D)bV-sI#HIM|VOK>zu`T?mK^=8@n(vv!6SB*KI&03}qpCl4Ef|^)yG{+N8;% zl5tl|b#!+1WB)xlY2E);l#M>k=WJz#ZhF-A9mh{7Yl`4hd~IeTeHb#ym?dC5M9i0n zm;}t8Ap?`z!iq!ClhmNXvwbJ~yP;{{()5oUKh)^!ZC_HtLVkDV9^E4i9U32>4kT{( zf8Q#`RG((biw}Q|2jYZbph{xk>ufvYaXILjBLy4dH!;}M!QB}^s2rpYj@6=_rf$Ea zRPwrodrdZk-hVh2AU*uJ|I;y_06JoqyRo+9F)++>+r%K|(KC>F1kNJ9b%pj^1>;OP z8ts?5z4^0OQ)2sP(-jLQ_GdSA^oe{TpIJ;E&GjumQ|u~~9p%s159Oeg)_f_)^JTju z;f$A-RDow0V!V+?*c-k?0{?vg`doa$TRfPnfQpTWJZhjT%D3CQAhRIqJ%c-2EOnIn z1)U(`xP-4LR=O#I$teb2+$EU--w_oiV-m0=er~A$BU84<;PHeD-G7c>HsSRTSV$}L zf=o5JYC!OcXe^lmYM3`9pA8)UCIHaxQN&G;a(~}aLry@megwro0v+%@&Ec5QeQqFw zFsbzK^zItMs)J#?K-oK6uO8l}2Vut9ypze{^)&NPKA^LS+;X}C|Sg9*(b2|))wea3NL_xWWe5L|m#Zx#V^CdVaG zX5>hq)6O$^KU5m{&df2bUUJr&Vh2VvIW{b#P)GA(YuEvUV%6)vqZHs(3ZETwSDRgI zg~K+f|KA}0JQ1pAo;#d(9?mDVGcN(D<@)cx{pAhaqeeEC+lRi(1heC0hm(j(!_^XSb48`4^B+_?&dqEQXvj9}q`tNK5PQ%_ zEPc1h3(8F9IjVBwi$2~$9Z}-6ZS-%g7QOnK1Ixv9t{Zkn+%_)CI#F6|XNOqu6?u&09AT3vd zp|Eji7PNC+t&4^$j0)OFN^C;}foX_9q3A*rulF>Z^u*y-2P7fY!=cqu#_40EU;Q4D z5;Rs5cy1u_(B@Ymo%j*s=f9ke9pa-8yDxT&RU^;3_y0xF1vdvu#;9bhw4c^4DpL7e z^iouPZ_;pqTd$bgjzvjgCI3E@J%9b1*93&1epEP|qLk1q{dUP_9go(!g_>`oHDxl7 z-UeFTZHkv|u~LY1jL%3=F@Om4yht>u1GI7$gr3)_C`^b~-J%={cu(%~ek1%63@Z-pEZEtFF)D)7 zY0)gOvmdOX)$FkNJ?jv#V0OaAICR_2^;Z-d!e9F@^EWmaX!O@N)(UPuV0O-s44{A%tVRUC zg>X+^>)tDcEWGjO3)8G{_*DhTn6ULzRz70jt&kl);70YgWX$f)j`P^9k6Bd5 zXZe($^uVYj8}7VF8m0Z^CsE#Xa))vEXp!xC8h%L-{1g*Wuo`ytSY7Yg_mcjh{k=gR zPB9ls2CvxDa$7%lU0OEi6g6nr00a>u0iHS75786DtzjkHRXt3Anqd=M8@?r3eJ0WYM3rLg}tzp5!)Bpb4P{_OMZM z<%n5^w)2ZlBC!4!If%0m@2zJbMnTXAp4xsBV^f%R5ghq_lrPZ~09xP$*9jyP`-xE* zgGVaVYtG2fH4a#$8t9D{cHiIhuevF9Mm^F#Mibqbh8m@yxL({>jW|2l|94c4EvVFnjsrYc4XPVXjL^d_>Gu~1TVX95Z(%A%JumM4XNDpq&J*9%2|SxHIp zGD}=3(7l}#X|>p^AEpE%ypi5k6q|;)T{s$Gs;e@ghBIVnSpLp!ZcFLMT=xPCLG8bw zN4=Q|=DMhQDxzk6*ll%vQV_Z56l#D+@1afz%nbrmGr!e!1cd2=5lXp_`)DytC4{c4 z?;cZw3;@uvh-&6$hE;M!^e^{cAyP(1V=qCEo)R#QdJlYn?O^w-I|yPLq9^KJAW0B< z{6o5{=nCC^u#az$zJ)o|fjD%L9Q4KryYGolH7Is3c8#d@W!sw8{%1S2idCm&+e=4s zUwAbJ*M@PX8?dbY>wmv86XJ=Nr`{d3Ru(|wWLo8$vpm~5w1vL+sp`=zZLWPUge z_{rX^ds2k2rA}+`DQBNMh&yq|3*+rJ>_WRQEs*UQXbwyjRoKGd6aM1zUX=~hpl z>Rg*dVdh-8Au#hZcV0Y+H~tR#D>V$u==8ZtC!d+4KcN6Jl?^CJ9cCql@1NMizRMQ0 zzG6T%o-&}gaCJmP3n_!qxh#k&W1j}|m=fDRYp2v8pX6f0AzuV0#34)#^5C%Wjlq9w zirT765kAc=m2(#H=c6O+nc_2~ovz&((0J#+igjJaQrT+--EhiuQcv*?bWxh+Z`{t+ zpuSIgT>Y(5c3C&62ClqS^2Ej2XH1q=;g5fHU)5D4q@&_dudOx()rIsWxGEcIZ>{x| z&RBn4+FLb;wr7(>+C;@@6}%0(PPiUk0vT0f1*XVXyl|LVDTFM^Yr<3oxNvMObPpim z+mqTc0Qe(HYHNb)#ZMAe3t=ItZKi@6sF6(&o_biXE!=(czktzz!k2V2g|hCkLN6tt zqA=MTqZgo0nL_nd03d-lDd6pO5+Q~Je?|(D*p=G+gbX_=urhzD1$O*Mi%v;3DTLNF zPynA`G%uj87H~H(Xx&k~+QTG*6 zVR1Nj<(ul%DYj#G*Ee|Gli#KtL;~tACgjoWwlO=E>@!+@hlY9;ITd&h5@-E?4~f4# z^7z{QEGbn5gkyl$^2FrLmM;$Y+OXC)yjl+7lA$EHJfcvv43ZL!Ot!BPha4|-sQ`mo z$WDP`W-@7{Am>}et60@qQavpBGrQ1FW%4jA!+pIMfVbe~gJ=qbxRCUZjOvcNGfY4Y zECGDc#q5|)@)Hx>(eifxTH?>D(KQ|bXp3Rj))O>@2&f9f*M%il#Hv9WsX@;ZUNu1$ zzQ*`j>C;aC(^6KEp*j>w;J*5|xenG*4f=B+l&5sPTqxA$bMZI1_@2)uT|N22)$w}X z&GPA4oQ~?F&3_w=vq95gR})Rq(6Z-dY0}0A_6aBh)dCJhl&2(>Czp)N#gEVMicgsO z4dERRDP2cbj;IOVpvH0`hwb-OGaE!f>W{Fk(H{9a)IXUs5|=4KGGdL+Ygp;(omX|U zgWm&8->$7$DCG{8BX?hF&>p#`GtD{nd6H4K=_H1q@kTj6d=f{G?^W!Y1{A(-)`uGlAo9s6-uwYosp*&*BfPk>o+mRsHQ{6Ov zg6jhrQx#BL!~x&QK{LkSlYED8_OeG_pieRBO|0agY2OgtQRt4Pg#-z@kX`pDRCCvI z(CGUIr_fg=L407cHA4Sasl?#)*=$Bg=Lrb?X^Mb&#uCA`7sp;^OhRAOj=Yc~3QHk4 zj`44HhIlr?ncnE?5B%18=$LoEk2TCba2pomWMC!yM7T)WrNgHZVxpHI8*T`v)_~RE z;5qNM1@ zkHK{YDM+{x-$FR;p&7e|ZlT|+ig{`Yx?MRdq?q`t0RfvAJG+uxyGZ9(tuHPj0|`sU z8Tl`TCSCV?6t_FmJ?_RkBQ=@2$<}Oh9Xg-|J>-u_pKz3)5QzmqndIOva#-WSTN5BZ%Jxb#4P>2HveO=*E z+xQq+!V7f5#DZC}U$f&ZpYO|;~9<`uMLO{Af2>}k;4>@TpB1AScEQrFm=KF%+N$VjW$^{WW_R{zG2n7f}!yiauP zl|`PFCD0j8;JyPDVO9HJ|`AbD~3;dq% zBuWC97&hDiz0ZHhs;byXYvb$w=8bAUFB+RYA5M0xAYP7~`Uy46cT(+Zv@m=5G7eVK zGFU{9lj%n+@P{dV7ol3mKO&^w-6BJOB5S$bv&nZ?1O9@WrxXN@0tbz~2&~~)E_H%2=Xr7{Dc=HIp8~*--vC+L)8@&5# zLih>w+T8AKPL)di^i9*}`g_I`D=pc1QmJmsRqQ#^J6{0pQ5Xn{dSj~VNNVFd^X3u@ zP%X*AZ5^7D-BVQCS2FGsm9yS@U?E7Q<5Qrhu@BuzYLTdwI=ECorEb}Ug1=QEee|jm zrqlq4BQbGN-Ag|=($E!aTl^JmsMLF8de(h82y5%~B(oUlW+F0m3QP*$Bnq|TzXikk zm`eW#6D=tMfv7{VL?8u{utE~J@ydMxyp={n!@|vK zLlb*Phve>LuSn4O`DkJ#B>3>4d*RAV$S#yEHX-<&qEoVsLNbV2C;06B z=u*n%FWS13PLE_#F;n0;Hp;{0Ab%$zvrRa#b7Y8%D-_-8bhR(!P|byylI{jS#x{rQ z=DX$-LmIt7CN*ElK&cdnE08JB6r(F4i$;2$<|+Fh9IcNPC<5=?iiTucZJxRsLYxCS z2$zzBh*`Zt7V9y(FTz5sDrpNQfeO={wV=bLQL&1+uxxG)Mb$4B`YdL&Y|Vp)w{wEr z4vA<_m;Tr)jg68=q$jgnlz@Go_(PQuzaLH()D-Y|h_s7PeTMKj$i)^hNYw5vFTdCV zv3^O4qQ1r+Wn6J9trDa)26Y{(UOU>rXr5k(KET@KZlRA^e;g@MY~!mM^Moio<~&xz zJ=PcV8!hJ=HYXmC5<-}+Xt!f$piSf!R_+xBfd*GzHcm?-u;#Fk51kPJl5kq^@*}(i zMJ;{Uvv7a`M3V|=XsS81-asHB1HbP7*~$c^0uJdzuBL?w@)4}V(8n6(r$B|J|K^%b zvONhr*IO7aolrm(7Yz;S-Xwi8I6+W(d_K#3Iz3Ee>YLgvm%)d!%o@vhV6i%tPDpl? zAHVmkM)DhEpFytkVdl9r-1<`Qv|#yO|6Zs(*`~JPy376annh|O|NA{zS#$K%dz)A$IUk;r3N=7hwNql32~VuB3YK3)ll1-1uj4a0F-Doy)FTK@7(8)k`RpR;TSs3Tz%Yosm-&LF3Tu$g5h)3f7pCx9 znv^(j`~ledE{NB{i8RbE1T2bRfzJz&Ag6lCK(9eI7X<8E_JYdJ6=)Lzp>A3)q6p)~ zOAUdD0*ww5O5tud)Hp!B-#vtO-AvYQe=S5+7`krHv}(SN(RjY?@Z==w;Q5E4738*F zY|EZe1=crUV;)CUYiV3irGGK}(wmek&9m+{d-*3RS0PJG_E`BSi?Jyuh1d0gosj-* ziu`M_t?%*`8GWk3ZEWW;;%roE=W|XQJf@5&?(Sc_^3*FlI36jZCS$>ZK?jbKs;I@o&=xtzk%UXZH9l)M`8 zknZ)AXbtwW<*rwZn=BjrH55;56Gb1^s29R{C>SPX@hQOP{-OPIJFjIkkWIIDBsMUU z9DPrrdv7KdqVxHN;6gsd`||*fD)AeHrxfa zn87!+;QyZR9cLdq)3GPaFWW#9H123*YH{x-o>iJzDv~nS@6!w*x6Gp8KgwK zsNm)~GS}S3lskH)9ij1nt*%WwXxPr=^V>J}iL4&h?G8@R7!SRwwWE-5i~% zkI}_F--|ESn%$7@c`V#3uWZuvTXZd%jvsGTFY#yX`KeQQr~$tc5gQGFt;c*1XXkXN zZLS?1?n0EJApOrM0?5IGtWXnY^A>h8=?J27K6Ew_g0NHl4IOYA2nUydD+_l9K<%#| zW0Nr<4Md3jlveQ7H!~^}0N(=E=9C0Ff`X+8oiUDNfS27 z9tLdLq9X>T;=aEsyd(3h#QxyXmMIuzGt5Q|^xf;|F0%*O!F+C!5C`8`hMig29aNd0 zk|1BJ^}VYZK`@z&Iy|p$?0cE@-Yeo0t-`n+mq!4+@}-^+CeApSY9vXAV0b%@zgy{1 z6CWxFfdY7%ZA2Sov>M#sq+g49+%^6z#qSvHEFWW{sxORwGooREwRDc6^!WF(5ONtO zN6C)(4wjNa{SpENF#<7Ah+TVdAS193L?o#I0R3ER0h5t|-1$)SC`RCP!x{K#% z7K)CV{L&C_+-Q_UU%O^Ap%Mx(fZ{)k+rYpkG5ui9JWssK2-xe%9fX8tOPerwgO?F_ z&JRJ50gGwSlesd9nxtCt+qWpV}qFh$qx8d`->ci;co(u z%{5dg_&jCryEKIAW-I-3`3b!m4J(fyyHqWncRd+g{1OGBTzSyn`6X?(MI4m$BLwZN z{(itFMpL&yGp0BUqfeC*@@co7#T;KSHWB_FO!uDKPk6ABcBegf_|*Qj(DsKc!J3a8 z{WDF?&vpMi`hB#ryCbLJc`VN6p4fFlqQt08`VserB<)G)apS^a`Zjr`j=Lu3!Yip> z))gi$FC*O&madrMfrDXR{H=xB5-0e?$4eF|3ilFGy83krXO9b#<>!0-?V)!u$DnO( zw(jxWy^&{Y*hlGajYaUXUE`l2u!rE~N-~HN?pZN8OxU;~!4^CsfTy6Hj%-DJL25_l zEBwym6sxKu!ddX5PkK7SUgHhmxr(cyVa|SbvX|mtwQ9I@s^73RE|+hszIiM5s8NfS zmMz#C{}6m;0WNNT2Xm+)j+|`dr1LY_KlH<&Ikz^0KE0Z{k!_*3IPB%$mZm;B8ozwf zX3Xg5>iuPAZsB_;#a(itcIflLt9d2h^$EOjf)4&t@7($o9~-gM2KOs9u)QD-%7>mi zpXQJp#N?AruJ>a4ay%ho)1*&`(iK-<()nT`LK-zM^9KOhVw-V=Q(DG&o`s&?f{xn< z7H;@6lIIB&?dcFL__fq$6%V|aoF@078`tWAKmOx&z2?w64z<(Y(0?*Ui@p1U7GGN} z+sq|d{>$jK3@tq_b(t)1=4e@Zps?DHXb_3x+M_7xdaT+JgT#x1Fga!gwA28^K#1<= z#L!4LQtBVi>}nL5fMTRe-9=pR5?1g|9qjQJNcYJ6KL(9qz%0)!) z_Ujilm4|0i-IRaaIGXm$(EHb~!+W?rUT?@9_baW&m||k>Oh3kTF9ZiFt2j%hu8rJX zc^G1%9-b}P0HxyOm3b1O-}vK>C5xJ1@6(rs?5kx2TYwuafXs^B>^ufVe1@0+h}cXD zWg8VSu~FPy=xR@shoEyH$S<87J`V$ZL_m|NZM?#-cqk6*FwXL;iAH9tfA7BLowmQX zINS)<%JbWJ+s@`WjePx;X*F`+lN%&Px0-rxA|C3Hdta3LIz_tH?@Ax$2NCV+;9bKae&n57g}x>k?@}KY=}&^|S?oxDTr z`i*kmd;ax;XJ*2mKw%LBgP7#&@rs<$@ZvR@%Coeb*y&-hPr&dka`PdC*ov}fd84X! z8)Sw(ECL*zm6MWu-MTV5`kD?gA2Pg09Vx|#NPoxev6H2X0MT7S`ZK^Th}4HR>8`lH z1@m*XCc4o#nTQt)ba+F~)GDbGE@ z6YPQ1$yoC{F{)-DAxl0xM8M#O44BjsrmlEF{P`gNnRua1Zcghw)w6dmUD-s3KyJcuFEQy=P`!t^JE_yo>@&x3=3Km)NZ_8{4{>2VO0-9PX zA$2n`fdt&&=6+fzxcpC5w#pbs_Q{FWDVB%d@lW{1gMRMXZ<}+jD-kHJLE$%C?Hn4| zC`t6X2&R7+%E&{?HW>DVeBeQhoJaOWSi!&e&&9c>E2r2(YSSTV4apRkddSJWSI=1N#{ctG4L94e}VI%cMaJT4A!A`?-+)*_L9n56F9a z@iea;Pl#U|wFS=3`5yZn&~DW-ty*Td4u5>FMvp4v!M&nsCnlpu7mkb5EFE8T%%oPn zyDGbBhjLJ3iDh)bGVHi$^q<>kx9Zd&&?gpx1$;DMJ13jNPu;No@DRol`+BJSk?&x!^Q;o;vjhUmr^-Rb)ECGq!kogdTgq%B z+v{-J7I<@bJieZjg4;E}ofo-6A%oCmN`f$@5#hS!s#JKYig|FtwC7bNiJs7M2wI2S zJg4~+2I~mVJ;BB)p^_jt^#kVXhi(+4o&l2-q#5MgjPLZJz~i;jm=HPEW0KzyREb$| zh{X`pW%2iqA!Lv*)RZM~y3Va;OsI*9GOtH#NaNuY#l`&0+82RsqhG~K>0#v!?+}#k zAlX1LcM%URoe+(%Mx-l{;KIC}wy-zVZ+3>rV295f(ty`6o+DKX{DO@iKpa%)5q&ZwRE} z_k@?MMSn)Sy)ONIz{-(Rq6diAwx*>eP4(4_oyWdj2LO z=}&)XGnzl39*bs(Xu+aAlhsSu@uk?WLHHK?A0yH7gQL>Z_yd7ENESpT@}E1T__*Tp z16tW+>Mqt~L{n4qryHk6F1#@9wSrLlBaf%_k0+ZmlC4Fw!^*KSNsF0}5#z8QDSnUs zU_0_8C3EV(TdQ+3t_aL1!^l8K-uRP8{-%vP!6R?2C(q3fC`BjTXeRuLeOWLz%T1_) zVtyFQZ{-9Lho3GHvFcKBLIsWx9xdoi+?wL5Wxm@yy#lEnc|$RGc9MkUOkY^BM-5^y z<}}&m2gs^pkj>z-Fnf+tp)5T|ebk>eFq4e;DDNc-l+XRz2Ij?2@r z!aEEGnEtAMQYeA%*jy0$JMW+7M`o{k{w~Z0|nG>(>7RL`a!ju2E5-ORP zo#)3$<-T9H-l>JfWRKLnFn#EP%&vgY z&6PdjL+Q_}xwCcucX>;YPT6(nlP>(jYi#gs!qiH!=KpE=FrBHy=kNNf5szb#yg9xR z{frs;)EO1X|JM2?S1qwAvqw0gpB584n^p;-+I@|x# z+X4f=QGfprcdc>-r4cV*X@ft$1lxBBT^Os?g_I#&XbE>De{BlVK7{;D@}&C86Qi_x z7=)KQ{@<|x31g}DQlyG8tatNZU~^hT(V2!xFVLC#n+ju}LfeF}UuHPQpt9okeE*EJ zVGQjOPv@1SQ@egEAA{Qog--}=h`w1exrl+ zFoJTkHsmdI`ZzKWf1%wq<_vh=-75CKh%agLu4WA zGT2kS6YP18AJ}3@jOxKreR<0uG9C^yU4=f0bB1sbX46ev%j_}k@0Sz&;oZP&Z21v3 z4QM}(u{cv#&at!kpC%X*50y`HpD|ZM`Pnp7C=cp`MCVmCCXe5>CsT}B2)U>$YRtm+-G;()B#2F7Yi2_m+QKls=^2>J@ zknt)D$oUHbxfJLJlmsQXS_}ID%@U)!zU%#?jPA`9m2*$K{Z*Z6Ry!hW29}CA zqpqPZI1f3bA!gPxjWW@ot%7-eumS405MStn0?vZ*%UcNUs~m(HbpNuK zkrYt!amzfazB_R+-c%oDj~+HFRrY>B{nI9)wD%_KV^=e@gdt1;xtQ$+Ju|?j>*JA) z#fU+${&o~Ez^FhHa@NTQd^ub<|A7&`=uB#n#|B`V0^)c_wZW05co8H>3yPBK6k<5^ zr#WA-x4O_DFxFTtUp+b_41GWMQ^N$^IZ>;a1!ZwVkru73Odu5J z&=?$5goZS2ZW+?t6AFl|mPE&vf0;Fg&QQZe0OMg%R^Tb{7d8a7+U-x;V0JsF{K~yi z6wbbZ2-s#(`koJ6x_>G!Gzg~6F{NaCW7fS+f7px|oSApYbIR=A-W5F@b&LquTy^bi z+e7~Q@>G&)bQ3f@>?1(h_~y@|bCVS;!DLPFa zhM}dR!BA1_ZpND`?GNvJe##OZx6Red8^-eX^$vNMG3e zLH_)-8%=riyNvADy_*N7>PA2BNFI(r5ZXKa1+w)< z^Spgb%Z~X@)yT?>H@;bQp%3vXU6CY({{^s;DZqJ^I#cG4?_(*T>bb_flec}a-=$V5 z+e)Yc+7F+e3~;48=ZJ|ZGD~&dqv_XWLiFBi944BM6pF+a&`hsB6&}H=hs)FX{&gkx z7BeHOEx8=8?nSDFDxgG0I}Fs4wdje))B*WVIpJHlS0b?25`SSug~TJ_Aiub0i9r65 z{Gsq~ilV0GPpb*Vxwec)3jw};SgUcUs-#cvbISd7GxMubow_7QM92GbVUx$P`uAhh%^`F4cw(rKy5Uzv zc_M5&tzNa%vq;Sci=^+YCB-VO^{gNBdksTosa{fHUyXm~#h%|0E}VR7DlhtdO*=kY z32y{sdaKX_ds>q79MG+A-j1t>-3#S>5XpduZY0BhP^1TLczGMu*3|dGSi0fB17R4q z)hB`(95wkCK3bu6+(E^nwEB@f=6ZF>nd>mEq1xvzR@$&>rlb-W;A}l20!|#EeRSXZ z+dIPvCh0@=KjZi#t5HRgBnSKaKdsg);{V3C94a(<9$;l{70(79Bjsf)unC3-;W}_BA zrhEgiiCb$bN47>biaey9jgq=obr!|W;nW5~-Dw3etH#>Z*x?x=`z#H|y^X^cuUeYr z)}fM$EXl+%>X89A{#)WCY!$|VcFFu_8~EGg8k-`0%3VKZdcV^^f)moHM_xQo$_18_ z)c)1aG|R;hqe3T;L+=^hy??SRCSR2vx5&%*6!cza;0xS3+{t<@8k@si#bw7Bxa&%E zPX0{haT&cK{HF+=>A5y=pCUB-d*q*oz;`{(vwcg6(@ZYi5Dq}#m@e-lK#ex~ojz!i z_fN8Ox#~|E$R*F-;S2#h33eS@ao&2xeW*p}+tAY3#yNU*Hgi;c#ZBj{xwf#6xjN2m z6$@aeOpSi_Rx6B-?xVrTR@0w$Gq$obc6>KKxd*x9QA6auE~Z>FWybp!pd6r2rUwa$ zHZ|o(0Pf&y4O97udr;t!L`6|^08Dt*kQlR~%xlpK(wTqY`+gFpBA@_!61g{H{H6r? zyXfZ>{MN7(!zpj|IA_hZes6RMA@`a7qbAvR?|W$_KEiKp45B$H&@mQE9HFk9%bqtJ#W}!z6|;n(2ZRS!gGbBT|gx#p}}8cFtJbV zG?O95HHkMrzVH=QX8sm-1!PF}|D4OWCMa44fybd9CP)l({-xDA_QIM9Ry5~M8TH+E zi8;UBTAm@S#H(8^3aca8{pVeM(D&##n-+5&2y+&3+**Da_ z-z-h_FfBZhgi!~N)xvx(j!k->a8gD55P)tBXB{<58b?<&0V#eBpsTR*Jn*&Ve+7i4%C?lT-;!nsYWMSW2C8^#;8q!1kfW7Lxuy}gi0ui0J zQ%0TncFQEmq!X{~_XLQ|ieonxx{EKP7a#e1GeT6oJPQVpxul0KepRCxEO^;~+_G99 zC$7Vw0$ShGHPv0a(9+Jo?i4Mm*sf|EsQ+z6Xh`9DvmOy~zR|TvnF^dI@b{xAw|y5^ z1A4_2-_>TwjTZf%R8ZchnVH{E$xfFa^;0^OOW$aQh8*yo54cZfv#XHvH&v}-^(R^8 zs;fiuL7v+u6BE!O3z}N)oYF|tb?0UZd(CsF z@3x)v7cmLJt|Qit$ve3dU!O^k`EpCP7Set_6};%tR9%&0HVZg^m)fOsGPvHL#TvcB zP+~*=_5lzi>c>#pDPBBRWN)bVrpH(BR8H)d-DQH`mf+LqF_J6)&!(FC-3edgOD`UM zd)cnu_=hIo%10@S3d;-w@+N&>0kM%W?f?!2FtNX}4_OQ8+>;V$f0iPR;<4SH_&1fm zu|vd%FWgK_K`2^wfzU#F898_ls}wgrXdQc0uoEY1{47yk=#V};IA|oR4}q4}$Hc~t zT^8I;Bi&Bfd7h|!F{S{?`$PVZToh))w4+rG#=oTqTeR!tm1DtkKfTUNk(T2P?9?Z86-L2-h^nx{x>;A zDose>+iDBRNFT<$O1A zW-hNRp~~Qa)unf5>UB&^!-hj?)7OGvi}Jv46We#Mi{I~d?{oE>(+js+NIIS(SMA~0 z`wB!urgsV|!gRH=nigMjykt-iV!1U7z*&K{gg;S4&W|3+69}v`N!3s@L0`R1b($-q zKeN%I>~T16Ue{DK8D2gno#M&5mdRg1ph?x8KHJ0Tc^7r9qs$EJ7a=>x&aPKr&E}J= zX2)jn^@Ay26P5DcdydDt3@rvt=~5O#x{O;64O)*gD2nXGlm?+ZgB|ZR`VQx{#_i0Q z-PM8>f`GPy;NOVd_ZnM7=MD%dTih5GBWtuS#NQQnxh?7crixt-9AV>gw*+fb2N{U1 zR)o9JKVFh~IC8;0TRbGNYDDZZx5^-U@jNAB#~vA$FzB0i*W6!4JdbWAapEuc;Z@Zd zIC;Oxvbgd{CF1pH_d0>YYLW}l0>-@y%>d7)fRpyX`qW{UQ-|D#ifm7Jr8`-Z)ug+? zzx*nB-$`6KJ()rds`}(7S6bdGW${z$eU%cyz8olyB|LKM{%H2G?nRGH^ zgK~aom^?>2JJGQLfC_ooC&`R50MKInn=NT5$#+ zgep&PEs25+FyCqRgFKnQ7!QD_3g-Gx@8tLaAR*@trhpJ8r9NT++U<3l0UZFPpoPz_ z1%za|7jpxIy)Lws``&CR4A25zhf(-iwCt%Fz3Bo}^yk%@OqQQww8>6zX9}x!KYR6h zzN<{-V%P8GrkONQTAlaW*{So9_*-9a*7o(bG~GjkQz)0xB_VOtJE5DNcmtkEsNjCH zdeu&fZ=UUolxOm=+kM4iMZ3}W_!sE3JgW>wsRP&f{%gJDiSG;8XZBVdqw20J#l8j8}V7ntG2sG92eF8T0`*KMkIdh))!LRP!%m17T7UqgoxTZe? zKF9{p`iiZNsVcFM1#l~6;X{00>zFov#j5J!0qE)g+OOsDFRS(NIy4c~cn4p^V8qUC z6u@>$+0H#5ON6&Q<&+_a$R-_2IIB8+zj?B#Kq}Th`c^KP07Soq0v+)o?%loAB7OQ^ z;3)3H2o=2_^l8)1`%#hd=akLh8A_3$@WBG!<%qD2;0=FmhFi@OlDZrxSK6tBiWik% z&vut~vz)c3`U3G_8Gv==|384Gk)o*q>5L~nJTm_s@L;h}6ySSyhy)dg4Im|yPsfHJ z1N2io{-5i#VLXRoP|ZD+D*1}*1#LgL?J;tgaj6crK6sV%FEyG^7LNjL}Gs7+77 zaz#Wuw}%z2uiE~Lqb5`m01jiW!jnkVGst4-6%^BNdyo)r2}AsArcj{l)^Er@I{Q7` zvGiI1d2~*OAcIik_brnPP-*i$#w+o6P(<`0NX3t{2hwww2y*}g;%|7N7{tUHM2OJ> z`naphY~b~W#P!)8!jI|zigO`~3^Zp9J~qr<&`{>pmpQWm0qN}{7Zivsgg-=ObrWIa zJR?Ze_cV-jn;)gUVLR~2uy%JahN{r+87R~GX#4*fF2CcZ#85jw>9&`N<(1ZI;{J^q zaGy1+X$-g-NWPyip?zv3ncl=5SmBV_yv=>&wgf^`!x&&`gu*B=0sU`?ZvNHB_4Y0Y zy@$UeE>7YO7EiX4mVWl=ntO|jm`pia{@)Txpahvk1uH37BBHnDBweU;D=Q3Jlh%B5 z^E7glof5I07R9X&wl~2BNIZa_h<|k-y@Mttld#VGZ6uO%^_5YwfoGPhJhiXFvEwlC z$;Z)T-a!WbRgL(4!>s4kt~KXv!7JqdBLh2nMj3}_>MpbIDFc1SyW|`R+_^3$=+a)_ zt^0;ZK@=~8Ojbzlk{Ah;1V9kjeF{?}VQ0CS7LRk>N!PK%{si?gSxjYrI6fYl?AcBs|gNm%R2ERM?>u?C~`> z*wfRHXJ9obar=LT*=9_rR%7thRKhUOmuy35q&j;!@7YInF+*278+l6^>Ow~!hUb`4 z>&=tohevXO1a+zwg7X}nBJ5LsI&M7A>;m1meH4thId6?vdMarbb%*QG)2F_QfmOd; zB{Fv!La;&vkaD*ikYJR&DEWDUr9z1cQuxQW~KBL8MHU+wmCF;v;>7%h9TmGP##78o;{3f(LRXWsD}tkGoQOJ z?ocxvhE@+lTQp5dgBM}ZXeAfN0&E8He~WK-5OWtL5ur4#FU`>>+_wAIm~`z6$t4}9 zN=t41$=}Uindzrj;g=*(zW)_f^Bez_y%#;v$BjK*n!*&ueaAb8hk`$S58Mf5uVS>< zJ%kp!B6;{%>wg4^L%Vl-38lzR*dODY8EaF1#Rb405U9P?zFPk5pUi$aeG=|*{%ZcN zrT}CG;jB5Nd)5 zDm@fwA_>JpuhNSIPat|J=uW&*yWV zn{P9F)>^+=v&ziglNl%=fZp5WG!OltO)?Tym}Z{KDjnf>AB*f6TDf15+*2_UtCxyK zhNBeH&;lKSW;XW;vQ+yc>Ix78dY@hWiYv!ifsdse>nZlpNy$@2Q6{{1IfIzt4Jq+# zQ!Yt`-_nD8d*8t0vU!>$mbA)J2Sm&xuR??Jr}O%t=4`}Do-lakp`Iu+Cf(?1e1h&5 zJ-@O|^|Q{5pC|Qg9fRNQW#i6bE0;xzOAbyrI5@Ope^q^ND2MHy;BXufh2aksqEJF) z%hOJ8R(oQAiYzBv-SJ@xQlx@S?wrZgNipiVMEChtFs~?0BCjJLhyqhfi~8eTh!peS zP2J(unVs#r+K!$RaBh$Au&hy(Wf z!mL}+)pA76V1m)d=?5Oo55jS&#mbv%_l7sWSAT!|wR!?bh_I3G>5-;zejz!*^Okj{ z6!{h}(Ja$%i!UnWI*ooG1(X!$)Bdpyp~L$gF0{?J->#^LD4cF~P+Y3@?ur+Di~}3@Su%0VIV$me{&2BFBHpPILO7=+|%OWa`$mwi`ZE zq6lLws>#89JjG1~=vX{Uv#Xg}zeP3Dv!vE^Kld|Qq720eEAZWa+_8FxJrJo)bTnXn z>OZ)?`c1Uj)KNweyO?(W+jJ*(x1uTbPLH#L4nEUi(iDtH5(3-@6O!+1^q>9ou zqE&Ju{y%TtC{1;UkK#b&{0403J1G*hKB|aqr`AUmbO`Ex4oL zkaDoH+2Xe(4B-+?+l!gZgWl4$fbLOUUi3CcjEg_$kH@R>5tY?G_QEg z%YJuF!VilSvh|AUg4K7IKAbA(sh}Q)CVntDm=%CwGcrJ$j4`(+q8QSrM2x4~c)^I{ zkKvqI4ESQZEN=^#nE7o=g9mS{@F#vq_iLHo1!lOqY3v(gzA+h>uOC)M9}TDLFyRrn^Lcd2xuSlrdk zX}wdeDFKEv$CfZbi6R zBeSDhoAyH!6L75Zewu?M4@R`Ei8DZ7P=a9g%o^B1CJe<7=Obtqf5KLAatxF3AbL0j zZZyIYYIu^bjGotu;C z{7p+n;v1~0xH+Yy-(?gFzV57fVhdM8r;(kYbNLWrP$$Re$bo7%JSDFI%xmM!$cVH2 zN30$+!~F)PQMJ{%A zs076)GPnb0_Ue~R#_}VR4fg5w$CI_*+sF2T!!?`fsuFG+vU%kKo5@2;|7akmNhG?G z3ECJ&BNb7-_C}Dh`+a$r)Jok<78^j+di=V;{2z_VglSP=uM(5@q%|wf^gLm5CKgr5 z@FF9zy#D#gz|zuE#8~yps!{mV!-qREhHi^eZi~6rPW^^o9wAGqQWhJMe?66Zt&{Z4 zcSCaj(XqW8?MaX2bC>!e+|k~vm`f{QUsKLZMjz?a6|$#gnEn2Yx^D=3R!I+!3%^P& zf-t02!k&K6Oh*dkZfIH@ShO(Q7_O0@nIFxdOtV|n!B&`$3SoHz!;E?S6O`(glxsE__i8d4hRr)s+*3$#e7-Y!zA}}a)SL+z-_YDQ^I5%LuY<)uaN8W& z*(tC+6e(R}eDHHHTA=BC%R!(@e9{aurts~tJThKej_=Coahg`X$8^taryl#S$yPEZ z>Rd0-W#KX4uXMg98aT{MGcc<{H8M~Gu;e61ANXvkWcX8zzm z#m9w{lW*;BY|L11?QRQrIWFwozY`7}u)AU=n(OnBw)Jyy0h4D&_E|1`c8)i|llE@P z?yYxH+b4=)^6s%rP4zX#XRgodhmZf{MzGZVdIZBt21iK|LXt-*VTzEVddRFFa3`zb z`m-K1ID>AiJL8ilkc1e&`Wt?pGQ{Yl(3?NzCM@{koxv?T6P8`RzB3;l%mj4LEGV7J zR>Y^rwGZ>?Zo~%NirT(Wh)@jK?)=X7wv57ozsq`Up>tDnX>xMNoycTuamY1nOeiIC zl}VX55b=tO<~i&`q?Hrn1EUQ2n*nnjxoaP^_QFobf^rA`I9qf_n&b{XF$Zw@y96Q} zKA=wJAlh0YKTvg+yGLV=SEb#}b9(~&7?%~T#ICLki`|N|i$y7j0utsdgvY`%uDyTs zTlkG{K>bho2cjj>I?CZ3mo8@lB)DAskeQ`roDh%$c_(jS>df;!HC(UDJNfXBu7;7J zPhQY;NjYc{AG=5+IC9lkRxr1MiwfE4>}KD`qFuud*?DhkZ!YbU>q_@-CcDA++4=+2 z;d;0by{2Yrd}tyJ`-3BAp)G)^U%_g}tM#KmYZ_Wu1fhYYfEHNu;D^|u6tej_@4vsK zXsE8O9{BY@$|jjO0D;)>miqWhVrqrb|C`k42WoJ!!tDWuDvUME8ApZxf9OSj$Cy#4fdFRIBA}dQ*uLb z&%0HSn_S(DWH8K1l}1_nTLxcooz+F-)ZnFw(GX1RSYq$}=N`~fqle_Y%Ez&`mu5vq zXZBqfff!CZ!q;6EF4Wr)R5$$A(6cw+#_D72a`_Q)AIlP2;Xq?VhOh7=p)A>68&&mO zDK_T%2J}wUlE*c7E%MFioTp3U->06Qc@}Vc_l{@gJ~b`2kSk!AvkayoQT8TUR#rog z0c(YF_z+tj-ahO6B`>Fcj_;czM0`ef^B-7sc?Sh!Z?c(K)E>CHjU85hLv}l1hYo0! z2bD5Y%G`2?(8ysE#wQ2ME1tW9(OR~+!J@YF`FRuZyWSyf?{cSaxw^Da(v4ecb!FYA ziu3v%I&f_~K3*(EHTcRZNQ;`zeBD*S_52$=^5mSkX4;$UUp)V08L5xO#lJpGYNXV~ zTvJOKPLepSG1Yu#-`CmP&7^@XRH1o}U9PR|4>DRUSM;PiGOHNGaaoK`+vi?Kh#*Ez zky3I3rpb2gh^|}CnR^G^)UkK+UzFw<9d(Q;6d)=4I637o&R1XbwAZ3$9R6{glJq;c%i56-8iqH@v3{4^7)!}g>jL^KRPdx~D->kYc(_8l#Q2kD9%9?Qra7+pNQ5m$v*=<1_&C`T){qw$}((JdBUgZ6R zxd6ZA&sNjblJ6vT4({QKB8;4DH@OO!ru9SzYZ0IJ=qe9xsnVX~duESH{GyaDfpmvF z$0kyyQBbi$$$NtXy}bjaPLBq$oZgLNzGpYBgnVl!bEOzCGWn3`F~Wv}CC1Ss{LcN| zjCUEav0Ybk%_hc09RirJeBqmp4NDxwI3)MyKaxOW#W)Fv_{`c|Tohc2wzGYmJ>V@f z?hlwsGdrW)v?xsr7e&XN>>ai`tDkpisTu?nlr{+uAffJGeOEsnnqlsk$iMp_8GHIM$)3BeGl6Af~i({t^6S~3x4b=eH7x5P;F&>@~KE|5Y zfITX%%GAJ~hhiq=pZ&-qrl6XBNXkZTyN`0bob%lpwc93#klRAOs;iJqzcl1bi6xR^ z{7428URQ40llm&aN|sZ=Mg_27JmTX1(AuJdbxzwA*S~Qh(RX-f9IwAU08C{2${#^0sq|Ur+7uk5P(8PmWu1vNp}VYfM6+g*n@ud2d08YCeQ^V^Cku&Z zuuAcP+qB#Sp$g+sYq2OHic%8vQh4{=x96jQ@(_vXkl3b9&hzH%uB$ymonEEHDMV|l z+c&K_3n__$zfvpDa8VJa7%XcT|C@+r)TwFn+=AAZ$D{5Lc~E>!5~C{aK(DDjIosg< z+lg4`c*3>Fj~dd@W0cm4h}}#sx;rPFua}ki`?@3G$%n+&9fW&HuC6Hu4M(gsTwhq8 z+?uD_Y~uEGtoShg!9?);UDN#Fi-uo?O+iKGB37H&k8D85@)srlj*wvv%a&kap+r=> zwQg0#(bB=!o%z9F1BFX$APubO2|7#%JL`uGY$>+y;w$Y6TN6sElz(@2*4x_ZFi>3- z-P@u#j`P+M`89-vQXolC-Kw4bUGF-Okee|Su^b{>B&A#ee<(rmhoLB4LaON^q?#@i zCsmpRa&Mt_ODKTk)6rDrf>40#7}EK}=2VX!X3x5&e69~^xz%uZ5LGI6W#NsDi424BF4sk_o>b4_|jZn~4j}~0ZwQxvG$#O7h!)%wt<>KdQY1iBvbiK{Hr;;d28NNb< zhMJwo!k%H(m?z>$>XSS+A}81Vdw9ZP-TtQcIi8A`+WFt~wKxr$E0DvU;uC4gnHl*pJ`)serj#J*FuPg*p`kK_GulGc-dwOdb8g3umrGHBy z2-eri&v{w1EH)csZSHNIN+jZGEog9e zZET$bl+hOeLgavBRbEjmtoAZRYRftUBrOUGIp1b+DJpS=(l+Z4KS9Ji*%_NME>fm+ zh@=Pg=v>K%7D8-OfFWSQO7k`&)JBjY-plDBqkQAAMxOd$&wl4tUF87fjMH7it3+a+ z=nu#K6Pym`$OlvpX8RgNs7YajWx6^Rk>LMiUWO#b%ublOfqrqZyR^~+iFxxdFQ0uv zpR$-1c_(BeD*`3We>o^FgcWuaTEN~gw5BEdDQ(NvbIrldw3DX36kG~Om6#`j;^LtW z_IsIMdyNZR7Z4t{;k`h)5-92 zF?Mj`gE6t13W#GLA0L_*WZe*L((1@EH_vh7?ahpc@1HEZ+9rjM_xtuXv+joM(S&p- z1K;xqE>u3k_Q2u-6GnPF>n*GMrrq4WyNYlkWPha=)DzW+M<~?8H_|6qO%cKyUb(TD zQ_u8IOy<1U=44j3QUqNPB^{)D&{NbkzXKFgJuBpl?ow1Dg3fco^^y0cTorw#&PdIr@nM~3)jL_a9 zcyU(}M&|vv6Yhi#%Xmwy-olCb1 zpg(RetYhfu(nc5qLWw6wNRrG%t68umu@FsEL}cPK|O0E5SLNBj(Lich^x&xcIq zNJ0HCWEXIvS&dd9G&dTPR2>zG2*?^a3F;AJDnwI4U!+-ghJZ;@DVP2&glV9Ox=FpT zq@YF(v50>P`YeAH1QDt*t-+xfm3yQhV?d5jFPSV!F6ZbuizD! zgsKc4baeqQ^1%1xhlh!J=K|WmC;g-?$IiqkVzizm2mAGz!+HZIt)s9bdiTT1K3#Lf z+~gT;QIFb1`tvF2%%VTc9&i0U{)8yty?L$>w7Z110wNv07E-vdZBQp}d=&C9q1%j> z#u{31=gWyiSM=Ici{h|DZ#o9oZccN}NoPhPvr13fd$~SU(UI72iZwWIrF#mj@>p74z+R_@Onw8ZTzMH)o2A@sk{q?L&eUP&l8_ z>OPpgX~Yi}gsoQl5*kPzdlT3Z)8 zRJIKJ8@0AXIwW47o0;CmzbcRlQ{__?=?s%za(3>7yQ}bpK}q`6Ro7eHV3t%bexj?c z0w9i}Q}VZOn!<#Y@41gAEo_CHlX-Hw+Y4e$v3>0znrQn?87f#3xj zA}#B7=sG%9mSY@3O?Sha)tnY0cH<=JlPj#@LuG&NQ^(m@z%NEM9M3szW zJS&R-lb4pVt-^MCGUxm$;fgk&)co%>f@AWRipdco&Dvfu-!7=VqQeqHtzg*NyLY?< zx;=^1>v;J>yvC%dpoL4ACJx2gKiUS3BjV8zU-~9A4Lo8m8~ngXf-97^v*|t><;2Vg z7ANXY=#Y8d8_ZuJz3;*)%Lhb%d1$1a+0Uh_n)L~QzV2+u@N26W}t5&E^1zcZ5i(>GNm z{dNm0=9+U0(E^-8Ps*_-nvz~)wDftNLpO+UcF9a*D=(l*6^QJi(TOFtmjudCg1JO? z-p)C$nXH|+%xd729E&3l^ z%+|K-wP^)NEcun*jAnYbZ{P05zEeBKiRanhxS?vp7S$}KVHx;^q(W1ihBa!&Eam;n z4V&bdHhb!?&3Pa)PP7>f>Cc6W{(T5@ zeB9NXA@h;*bM+H}W-Re&L;3-F+PBCjF}~;Vb#|uLE3Cn>q)_ztbPi97g|G2n$_x0K zuJ>ybBk{V$q|j0#sZEIJ%L)2>B{_weRbyw1iKn&EM_wNL@07?qA8iu;B2l|>GP`9n zXP3}fkjNO!?OZFkTuDM@xS6bK{B?!>;B4+KOo0Dtq#NFzJHu5QMxff^#xr7z3~zY` zNlWmhe1!lap95ddYv%XXD-9rkm#zK`mM8;Y9&IPLx~XoY+tj^v^~!V2 z#WhJiSBH@Wjh2TRlG}i(-mBL5Q$K${pyzjf@krY6&utCpvI^h0n0s1ltf(9Pk>%?Y zOzeqA_fGA-9R;3~f+Y{D#854}DRhZSW@k<8Jg(wkS3Y*!bU|Da;znQ1o`2l@^rl@= zh07i7+m+9()Q_yrS0`%NIlXTYn5AI*aFK(Uq0OOzqPXI=GKFw{K39{#N$rgZaQp|# z$N+50EPidDW{%DDb)fP&`|$z56kTKY`dSi?(lzJ-nh0J7At8NT6G6l9V1pZ~1U6*> zz_K?XBq}z_WEAi&Vlc%W#0#)9764lzH2gqlhe`%2F+9Wa_^zV?gr8FX#mJOcBULDX zi3()hY)2$Et4x+k*w?|Nhxf?{9jgZ3G&i7{=)vZ6udGTEzAG!d^i_TTC^ zKqV9%2;2-Od!=InP+1{75+bzbg8ozeH^twK2;P6m=x>U@81)mP#wDY_DgL|YsOnf& zYS2v1bI8T=VJi!?(PcU8RFMVWJ~f%GLPKi9MyFa4awBBLek+sPzIcZ6-FF>HJ5ha) zZ3QBbLSwu7xCg*=NO(%5!H(DJU=&PZKpSR$Ug&@(+Gl-QWlsn)&+K@YIRz0fuKnP5 zI0}j(%y!v_;k{}`SU^25ZK47{-VsfdKS_<$K!nlsUn5iR#fxDH!NXaiens?2$uZ;Cehes#0od($2~2HU4gO)U&w7-U!9tM6uG(p6$#a(ms+8iq zFrMoPIx53@9E)QC@*I|f1s4u0OVCU1etT@P)MH>0@2E&2#61?k9p0>@us|C$k?D|H z?=&0Yh1QPkf)s&EZYuN=Xchqi9bxa=dGzv6Ebh*0TBuTGsu&iq?s(0LJCvs1%@i9A zBYR@VAxrQr$j6|sQ*Q`G*5J%*@)*DhYgtDh8R)%k?80@t2nI$b17{`!&9Ln;AZ6bX zIMx2fR>Fb^JzZ~uPmvvsgGs&#hMk_5*VQ)=kocDU=D)cC+~WKRG?C8y1@qYCdX0rzcUlK>-u=_Jwq86Mi}Z#qbRCRZGw@OJEMePV;nP5?Eoo~Rpzx%npO(%Nx!@9`|3 zy_-pV1)Fn5o1kK%7=Y*_)#pv(&TEG_l;mq1*I4N=_3p@eQ7l3NE-I1N3y%qHd(nf3 z@|xg*#U0tsh~rgg$GlV zGB=vLvm;v=tADSrCCM1+OTbeIQCHB)R=vSyqS&A))9f_IB0+(Jf3tSLXwovPsOHvu z%8*ma*9OAdZodzH{ZOW9k;k#~4r65auhL^#w zi=c5?Hz zk70Yf>z3(?5d%w1p9M-4N4q?8>Jl_JOXH3vMstr)Au+DYdlZ99tY0lbq-)11L}e^5 z*7lur>JsRRjl60ZQQYQJ5S%ThOvFb#66OVxAl9vdiNS>h9WLIm?Bj0o5&i0DMcc2c zKnUUsWDwV)Ky{rYlWjtY&hhoJK1;(!2%pRE~TUf0S9S!LROr9K;TB@?zW8+}w&WEAu32R(ihvB#Lf!ma1 zio7|bT5>!ozc<)bBdtb%steHSx@6@;*4hUSv#PRG08mE*fHzDW;2`j#0jY?~MXQw1 zF+g7=n&OY`_IDaH2YVi+ry*M^U5z`6DoE`TfaNL}d3d$u@+VWW@?)xF5HgZ7nb}z~ zl7}U;5yk#mhoJ1Ya8D_Bs4z&9DIvv*VR-Uxttz>W~8WAo_!cA7+a8U)=-b zQ1YsPaa}Am80!02PiT+M%j;{xWv8ATQhVfSqCjlPlt2+At^_qa?#LFL++TKEez6W_ ziPVjCHJY7z_lT!3(ET85GY(pWDWrR$OpzyQV#P!PG+70Jm=seIDAqv7hhjs{ka1nz zq<8L&gcae}fSQk+d z?KHr(F3a2AQ%=8K%?+k82vKOWP6%xDR;1xpry4gX_=Et8ppa%dE|7`8=OCQ@5BqYT zXk9v?DG@H!w_%ILlvSibcDTm*0OfmtUfA^`;p*r8&5ksT*Cij9B0=~r5_qb0r@B7~ zZS({dNu52hv@z%2^Xz^M^h(<6r(xIb!-24OQl!tAfws)RAZ1rlFf_D4*Ay9>wRw`} z2OyiwgfTRas6an(#?^}EN2Jtmc2Ux(BZ<3!p&7>sKuG|gV9yNyU*1b2##e3j(I~o~ zYo~M+EU12rrPt%3>ECZr^K#9O?{QFVJ-(zCzhR@b1qsr-b9z(K(u(o;r<=oeCgt(z zt$ll}M7c3j@r^>mSTRPptRB@4EcQ6;?E7aNVCby}qrX5pjI|hzT0colSS%0p2t!t; zj0ZuJXnuC5c?jod24{zSrN8yO$vDa6#_ploD{I6c3h$y10vAEh^YdmUGUpWDuNI>D zt$?%|NL-2f)4RL#03N0K6_&R~z*^A#|@O0E zqoAoFc&tDDRlD{<&RmeABy}}-sx_7~V!xQCq6uL?8HLriAR+N$icTqzplFxd5z!! z8@$9#5s*{T-R^#?@rw1U>CDr1XM#CSDqFQY)^bKnDkwQ!Hd&#Q)fbd4y;w)c8yuRw z6P;mhvQZXh*(5+!d*ZUK6}9g%(A_03B}?v=&LLa78mNS1N!r)E#YCigDL$&`JZvbC z(5|VXsqp0)|>l5jqY@!XJ;iy+6V8!xtbWvd!6oAv&T%>z@=ZfOVx6VLd z_mESF$``X>2f`oJo^jZ;Dz_m|$VW}L$o`UZx+h1VGvvt<_KHMb-C#RhX7R&M0>~Xyp__f}V{5MH2wKFOTO=f+36Eq) zTN6dW;xf9O4(zb(fdXSdGLs{Smj{Ey)$Pl=>~Ppf+%st_PWM=5$0^-=xMY_gDZ9j* zO_9M+^X^n({B5a0FJCN~YSm~uMoj6K--@a?TN%J!l39P6_u|}Z3TFe3Cfr)t7gZLw z43YNid>A%vx6SqOEr>k2Aj;^1qiW0H0!wsC0`#XbfY8t0mbu`-ymDM>{B=M^`i`_G zjcPv8;b)(x8ku!G+5hD67WJC>I$<`;8Q%}hq?NQAre;jGB*7dCZ+NEAa|-7^KKfW!S9Kd7^GmQZwe zY*FNVw4*!V{PgLu0-NJ6KsDwU7OE3`X7knP@b|ZMSN~3FMri?zoC> z95s_UW;!l=vtHogjZC&uGBjQ(P{juOIxkJ-Z9dhl*of}!4YMn=cs;z<=7Qh-a$xQ_ z4M@kx0~|b-UboIq7Xd)vnSsz}=dIxPj^yUNKcT$xaZTtjhep-f@h8vEJFPIk_58fc zUuRFvKMhc;v+`Xa+!D4!n*nZdgEF*E#nUuMt{i!14*Y+tEk`CBjJ2CX#{KE`IbxtsK|+c{J`nN~n%%@tb;BB_R)$Ci@c z(uz~*7&gFHdLh~OKyh$3!*HZkZ;8<6#hD}9y93TlM_UA5{n>BIGg9K$l9FrZO)zMm zi10m1BcRv=HC^xp*KPoUU$cJ4T@^7W;u(J)bP3}1X5oD9_;*`W$_BqOZ#J?ZpS7~@ zJ#pS`?{sq=XqH^$Wz_+F5*r2G`?pJJI2QV|;YdhS8VC2pIb|0>|Ixsr688t73i7&D zGyMoGm4&Nr=rA1Mi!5Ai01hlQyeCA>`R~|}T(B`a%0Xp|4BAk{KFoZw3^TtN8i%Ym z%Y(!EyF2I)aGIGl&wlt~eT^CqYk7hJMP))|Zbyewa8N(0RgRY2%)Ttv8NtSz3EIeX4k6(0Epdy1mXBSNxkc$I;bs z782Y6FRhE=6e)}Ys2BnXZi=seF?#R zfTy>BSw<{w{VXGli69a$6`L7bhYgw;7hLe`;`E%neVJT6)(@y_>?50d65TPg8EPJ~+$>HTIS`Q`c^X_eB@YaIA0Z^X`~LYF zF>q~_GdogkG%%ko&Ox4NZb(ljgkda1U})j*=ajbS$b3OT{_XXf|8_|j!;LgQ*}rRt z%unY(4#SRWIo^)?ESVua`v4T_Gw`ZAAKf981@f?5L%crCk8VBOP}%4 z%%m?kUIYUuZ2SczxD{GU`Y+g`K{!bOAWOC$d8m6@7Y=6B-HyUI@>Zsp z*HgIeu@M5mO58ydy)UCxDiYh<3J;DW#8D74cti{I+Q3D3lH6Q!Td2vGTA43OZr&(j zjC5X|GJX!V){e})#~Eu-Udpt(cPKM$!g^sutYduKDn#}9tR)CdY%GCAeq(_4v_=8k zAv{hH>n3p}m%92Y<8)&QEdS0FvS)0j_}oH3`M?I_S%OvQ?J_7F2J1&)GQvb&pBAk~ zVkD0(Z2&+TIs>#3%dtHBWE87nuW@kqkrZE~zdU z&9Mcl8wHe%Pb)e#?8{RQvSko}(t@EQuw47BjR6THo<5+2`QWq>O>YRPr-m*UPJ^249|14 zF+S_)vQNqQX~xyso{U6lDc_o7i;kQv$ZHvgk7+79O?lHvMV+~jGppK+sDC6t=nQ}) ze}rdd{s*#yE?sCj`~m(;y-w(6Z?Gj2aMs<|9U=yAdIo=_Yu+WKOQI#iN#X?<1CJI0 ztJ;e3p7-RN5z|oKc?d=jS~&xTk-msGfiu9um@lHaNbF#SN>l)10Z((QYIt=*$a*R9 z;|FEmFo_uJ-ptTNxBpq?gHrZn!)HlwU#CWQolq9=hrJECYGm!~-%oFagxZyrFm>0#+e6V4P|G6JA! zLTJ&xi^s)osBn%p^$EoGnHmCM85-ZvtZ^)-DC7^6=)A1|Mvyl0{V_C)WRBx5sRp~Q z?SoQ8AC+<~Xodcx?9${VaM0AfVhdU%!nlh{wxR{Srks%`w1(kW0~RdI$67AkSe<5` z!qR!T8($9q=R9}@k8NSfn06)%U z22D5J54M*hXQv}VvCeuQ*GLj1i#rdnZkH#nwDuCCD6Diz0k^4XCeghcN3xq1cTaTP zLElgaFet2#Oz+-*@!$aFF|8X48*>|WNN33oc%C&<2e+*_!ASprV>RT>Np15c?qU*! zP#jGpwe+PL%w$OKm{@KxM59Sob(X7~g(+DRENDRl3P73wA_V(<5rl0zjhM?gUxgDq zX3R@jMdQ@AN?W5jdlWbsVmg8L@2kWgF0{Un2{`g0>@hrvSJ5OWdVPkXpc#GELZkmL zJC;wwEihLgfrr@F^{U1AS?qOL0TejeldTAHY0rvy%^Tw3|5Tv#Z1dFqc_&l zx#k1*dEj>Ws4Iaof#y;$^w)p;!Q`4WH(?H&o8Zx!xv=@6&$sF3Q~Wo=%uzirEr#5k z2mBsEaPh<8Ht92&#@S(1VUp?er2e=h91g#LpL_)Yj_$)mZsF{~8mvXykO zqQzY7w+%7uz0a2N=<+5a^K{smJUTzN6CvR`mZWdX8zVPy&SV==0KU&y0{FA>j6I@p z;7}>l8_rj%AP!)XDc7HjFy_nOn(0ahK%5f8DNI{TWR0M{>TY9zUd{B?5|AgxD8DLw z>2e=LH*UGE;cvn9^{tgA8$0!lN;aHGoA}mz)AAF>xDoyF=XV{fY>U z+Y#O&@24&E=#<~~0pUy{dJ?^D!DU^FydbDtXOt`{T>jwNW{kQPH<2W{#AQU2GslI& z8QsPccv-P_4<`A>G665j8Y=OYeHMXonebhkM2&wjxX_KV&F5}4K`;lwVm+&1S$9Aa zQEhE1p|XbB9c*nTOPX7d-Fp}%Q%L__jR4Tr)KjpW;NV3u#UXgmmJj^wEGR05+x?=I z)69&Pp;bH*Tt^>A(24=!9KSyCAP@9?a|eqsMu6*-q8QNLrO$`IEFVeh^XRPct-yS9 z7H2bLiI`as&G)a8o?9P(7-IHH%v=igrG&YdZyjQa;CcDdh1ERRcL{>4?E{a%h5dP% zd+!pR`MdyTo8-K5Q)~qCrD?JRlL}(G2o~|uf#e_;mB)mE^GQV$&mt4gN`A~N4AvtN zYt?8Qo5IJH$Am)bI9u#2;5gX81F|ZCEGI`|`;<#b zzt8ql|m~EvNBg0lK1TfOqg-WxXgcRGnS|C~3br1J6H_K&ZzyZJg_`v$ve*CueKZt96kB!O zn>%tvUz^S%WY1(4S;qLd3&m6@yY#y4FMCU5O(%u+ScXt~>WnovyFYB0WaB(&fRN`g}^>p>R;_8Y#MiKy*rJreWxrldWq!PT}+Zq0twh%Vsbn3Z@FPtVHXB=rU3>_sg z!2r*?LNSYxe1~D@T_|2vvlGsKESxKGyX~NlnC@bJUHP%vVtW=McmlhA*g?FqsBJVV zy@jK|5yMJO_Dn=^ay~g=wR~4mPZ1e)&OVQY!!=YiWP6@5(ol6pPIQg-HJZ$xjpxv9 zZnto!h}WH&NsDQXa1<`#;luEQixxtu252;f;43IJlj5u(;6=n{0=)UEoTM2PAYz;X zfrCJHhecQ;B8(|48gOhQ2@p77$Ttg;D`uL}^q3+x!hD=onGqOzi1EN8L=DXWx#C%n zurWM^Z%#L6BuuAZ%_V(JdIHmc>T5#5uC9x6p1~jL@*y5F5?OdU)v2d%1PKXhNrU&b zQ?6l?)DdF~mDSmHp!paB1wI$}9YRnHb41U}eBrhATn5=B&0NH{4*hFC{f9OFm-Z8Q z`T>cb)n?!q*Bu$kE>27(`=#um(IJ|#qS!nZPSIndbP`bzMy`~LDl2}$f+Gcd@FZ5^ zc?iZ{0JVy1UlyS#PK{V(Y2w{6ahSvOw@dVk& z-AZDy002R@i&u$*YVt7~Y`#|@zSKvoEL|7QLRhs$_Zq+&>fG%#;>-0*%vlHl^NSQy zL!aWA{WcCXGI_D0Q}-D{w4115h@mMhndM32s+Ds4rO8S*!nndnhL(UNlZ_M1pWvIj z&x73qMmGMj`ULeFuKsG zj}128E0tx>U3QR?fMFsa2FOT!k()`cWWR+gvc`5IorMzMRSc1|i%E!?p`}u+&C;}V zCSG!8^$Gh)s8${m^(j!%P^~0DtjTpmd=Zw%mQKonmX=7846ebS&dRjVLa*Q&q@g1I_nJrD>@Y zD(z%}ITq=+0iwL>XbrW>dn~A%30Nq(lOzU!d%d(63S8Fdk<6A*bfP2^_%jrZQMS~c z_MV2AeDK3CI+;{N8xh>p5(V!t>0u2W2%nN|N>rJs{*V=&h_(K{rW?G#Ljz6%lWlP2 zux^>NAjHV_`#gok82PdW)ni0t4&du;m9L=CvIH}t$(0CaP|R9c--lCHuFTG&soNEA ziG~Yy!Nd?Pw_Bc}brSXkCo#y_M+ht8_wcZK0Ct349g`u?A1OG_k@+TM15pmorI_1p&C-p2q3PFgPGO%ppo1JEk+7i;8WU5aZ4Wtt*Bm0KOoLy~?ma45;E*;UUk+oud zkk!EK>H&BSfp|s219R^&HuHn37$AN;Xmr%jf)G_Y`-MJ-TybcHhmFW)hVlV`F*#D5 zb$#rn^+ckll}uKaT>-fc-y*Dp@7|xL8Q(5@!$auTl{P?0FRz+ol{5QH4Qdca6h)t5T|TtmAZ4RR6U_-7A5=0 zR@#uie|aGbB&M2Q=V2eYvn{W$sfW@p%0dvVBJK;-AynO`{Ore61m@0K`Mw$z68GUI?%(bxfBwrJG6Hdw8N3tGR z#DX#RnC-ySSNx(dfIr2=`cX=7E<%b!-*Ov+V!;`EOvY#448?^b%>#e)AXnbkh{SKs z7JG(YA;;Lszqy~;73XFAztIEdF-;3{nZT>T-RN1zOaCqm$uG<|3j;TwC0L(rfM8fe z6KO_|F^Is^knH4aG5^%dn#RqgVqa^7Waav?vj^$K1W5MD%&tU$CI`8qJF_FNPDxFu zbS%HZn=P??GBE(uNg)^(jM^Oi(xD~Qv!l$Hh@V;Kpdq;p&AUu(4?dnDlzkMzFJ37p zXex#4O%66d>s~{vqXTk5A%^YR7%uWN9SN;XSo!W`-Ku`mvB4G8J6DOS|mwyiF<|G}7^ zpCs-DTA|F`sYpDRsk~z^727o5xHHfZZM_Mo_F<6}=YE?0_)^R&|w{B1ndX zvuOWtzAO$@Td~`mNC<%!JODx{BC+BE&^!q^$z(RM{B5@2DU65_6QmQ1NSreXPhp!d zun;WIoZTG|x(vfWF?V+&ZAz)KBn|_8n1q%Jyr;U`7cWaj9vl?D6LnQN&)m#CcAa=BJmZ-Ctesj{418*U{W%3tgx&4Ch?EGWZ06`@isw#H-mdt znluLWEoL`OxVh~Jy$+<%CKh!*84E6wi2A$P_Ov(H9B09~<-G;v@`_m68?2Z0-fo`Q z{Fr3%rQTB%SEJm2IQ)h10?MP6YkAYb1Q@fik0%rs%V%L zSp!`r3SQwa-KLRmz}$laV>HDU`ny}3GuMN7L=8nz(|4js+QL!>SzfNN{%b1IdW!Sr{0a+3a3 zl?i`G))-myv6d+3vBEwzn}_ z?lza6q*;0{WAGq>d~6zb5g&?eo(kbI?}9~)uo8wCsCZ&AP7%e??gwXV4KNK(VWQLQ z2^wlOXA&P*ELk1=U<2utpU=ggrfibs!Y{^2o-ty$Oj(C%7#u(xSFQ5hFN)t)Y67mz3$zesOV3RV<*qiRE)j{sf@eoc zY>k=3kQj#w|E<>ep&65d^2ilag=pwfUpy_$V=3zK-bVgTMM<1SaVboSU9uAa_c)i)d0XY(>xHYeqVeQ7tn}fxk7BZ)GxDg8=vX zG<8KRJjH~IKZD6Q_$HcUQIZg|2VDSFaOcTTZp71BO;hdoK^CPHv@lyt$+3w65LZ*i z%JZpn#b(K*A*z#YY?fOKbY^9zxOwCA$=$d9`FX7Q4fsAqO zvjP^}vJXda-k1s?4Sq!j&ck%NlY$RRCgtS2rp6 zaL#D7hp~zl690&iJ!66Z>-p!I`STn&Tjm;6Boj^&zxYg?1-C*uuPh7Cc%IAPf*U<^ z*#rJHN#|9_9|aebx-kZTnZrhG>@qh=*g!PzHyObYPFAiGfH0__Go_qfyt}Uma6P?$ z*J)xU2HQPA&=qb)~#jSWVN@Q*mQZC3CCKqv{|+m~29_I~$0@G8Z}VS8jOn(_ds z3q9)y49K)~6Q~OR>?$HU=|A(}26`HzoUZA#`YZ;oT7+2dCo6AtFlsXj(TpPjGzgSb zuo;sn`DE!YCEcR0gU7F4&%VegL_WCZoC&Trxf>W$Y^)!N0yzsgDdsm`w z{7G}=Si;Cv48PY(-L$cCZ%6B_{-EpjQe&I04RxW*=z91c7l4!~A2BVJ(!|IkWzJe) zg8?d>cGNggAK5paeW$@M)WPdQg%x3ofte=czkazy%h`t~f8@2F7IeQbp4JibuR8GB zS-9%+0aEGU_u&GbU}u;eL0t8k!z)+C>r6uSm_0!jYxof*8aC-(x3@!=+iR}xSEF^z z|Jv~_T4G;v;Duq}SNBlHt(&kE01?py-VcfgFtnlMS`qf~s5St39CmJvhZRjcfH*9i z#GeF8G5`rdNU#^D+&|~Z%D}NauDY5n_+nkd_Ne3j*;MiD8`jC19`wCy_O;b7G4tPn zfu)#nP-G9Vk0!%9@l)qy#Q=`pSMN2l=@1$P#2N!WxJclkjoI6Ez;kZkZ<-pztKbsX z8faAi__(5H0>BwB@R>yOamu4md3=P&tmv5d{>(pX)A8yW^XR}iFm6uO*2N^M1d<-@pEiX4jJG+s*@3czJK94VXy_4$QO0)r zVza6#F(ex40&H`RihS_fEBrW*DkVQFrh(h2MVLTi_1h?KT26oAX7vlF49UfqtLx&v ze0g)r6afp23N7ltismmWkcIwN(XguGZ+ZSzG=HnwSdspB6b*}Inr8t@!a4l?D*)$I z$Dah40#G_l*$q$*krGn|w|7%WJ^2S2krv!CuyCjZd<0kwUaB|_?l|wuk~fpR$6$5A z89n^qErftmPxZcQZr(%y-ZIk+3vuP2>mqo>+`1`ZhQ)u!_e@3n)r)O4lAUxx9^z(a zaKVigcIH6;LL4LPEG{^)$j%(-Ux2f!IUFv)ne-g~{uO|8s^gCXOaX}H!Egi6d*G)_ zB&XEn7!xXE)pp?t!pOpi%PPRlK8kgdmx!60HNS-WrByoIYq(K1rb;- z3@!SCQzLvDicT$nKmO(zSDchEo^s7fN;(ovFX_S)*}hiQNkBujtBNNq!c+ofm7hRTLcWeJg5PYnW3S=sMLSO5WT(r`th$A`s+ISGYXa%noG2x2KBpT zSXc_*Tm~V9;n!wvjio~sRr15D5NgDW&!m-u1;v11^~r^KmLq}z_OTK zV4bjD1l}GC9kUg37*cdYc}IhYSHemR}R{CD(#hd72GDe1fF7bC2s zm#FAGDNt2cEjNs{dtjCmO6Lo*Q!HJy<@(1Dn36&@|pZSHPUOI*zDbD9_A&Eb7{el*MV@f_r`Km!=004jT8@wwH!mP`M zWR{Ki1?8*eal2W`Kws+Llf+f29zO^hrE|)sz-bFCAaw%PCz-#gnu|A27rV2g%tuV6 zJmP>kqzgmmwh?9pEFjsaOvBYKARb9$LuvI^K<#C5pY}jyE|w}_rOs5XKZLJl*K2W zl@D^mKj%+VPpTaA8Q0$)z_mg0;ZL7h06k#<3WWk3Ts$0{pa%-!fNxzPKB^f--c`3GMD8Ss}Y6|UcCA=1n@#20OTj&_eCljYo+4$UV_Le z?Kpqq2Z2Gt3zKy}2<(Nb)udF^yZ&R;#JTNpGE660702W&HUrsD{}l?+cnAo6FH$8&9f|(`st^GwRBy z7j5n1-Q7`OnI{X-*#(37TqZoDYdkAjkd-q@e8{c`Q}}pKv;w8nS@|~0KGc2S6VO;j z?cegjh`W7}g2H9TrT)$J8C76vI0f

    6Pb|6rGAl&=3E`a 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 literal 0 HcmV?d00001 diff --git a/.image/文件管理.jpg b/.image/文件管理.jpg new file mode 100644 index 0000000000000000000000000000000000000000..054b19f1e4c6eccbb8f52fdb6aeb5b95c18506f0 GIT binary patch literal 75214 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%0DlSpwN@5LB~7gS+VVmG`t9FJ+|BVmyqu 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 literal 0 HcmV?d00001 diff --git a/.image/文件配置.jpg b/.image/文件配置.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e618049aeced471af6beb47b2d599408981e086e GIT binary patch literal 118462 zcmYJa1zc1A_Xj*gl#uR_QW{2!v~-M;j?s;NZZ*%64t%fI0znbbP$Hy7Oyq zPbLS|g;@CY2PMeOyR&~`YHq!;xs752boU{Q?S0+dJ?9ozSJpPPj9s_3cTtCj-Cf=3 z3CZyZNh4#EXE&(vsW|~bk-p)vsE@IZPA;#N!8ulp>sTp7Y zpvsoPmevkar=ZZVh|E&>3G_o{b^XHpf=^U>QE_QXDvX|z>gV`RT^pZ){=tU&#`MfA zZ3|CKOiX1%XZMgqulK&i4LvAht)`xdOZnFy(@G2sjlWiPIQhl0cB(Wr!{f560)szD zNz23yq14Jy>grmp12dNHVTkd$u*Ce7{Q9`$Y(hdpX)T+fZPe84a!F3!+6gK!HtWZa zG1T&snt=^RI!aMdWo94MSYDkmijvc{Z|my+T2$-Tg|hXE@(hUK;N;%z=ICgI*LD8r zTtn3^psET>bb7eW>rtw3}>sIO^$Z{@{eS8;z}zTsqM zP;%v$P_b54M7?3>^Qb{N8GbU;{^#R_y1rtTG~SI2M9ut^f}Il%{LAw)C&}IaSCP*k zq>AcpxkrXnIoh)6hc)En!y=+1y?lvcX6c)$W`n#16FKE-lds2}`@CHLU5sT}n6{<+ z)k580=?gm>n+Zesv0a;w#?y-vKOc9gRf_U`enH>q7jyqRuPH9`=BGmUS4GJIQ}GDj z)p2-9?CV!{)<;!RUk7t%n#?sCcqVkUK*RZlV;+M?6G02f!);lMfohg>sIM3^UjZ11 zH5GXoUEjrnWgcihA63*(qMnb7T7r1&)5|Q=GqdDKWI;p7&fxO%XKN{*^4RTMz77tz zL-!H^^!xvC005$)&bWnuT-(B2*WtN;{#E<+!G9&!U{|BA%}a;gZ7b-1D65cM#JeuL zVFifoMj)Jy_@xJw`ACP&~WO1RT^PV`4}~Vh5sX&EQXx+K<6dp&&|Kk ziq%J5N2?eZz5S$h?r~_Zghj@>;wZPE#dCwbK*}RnfKaWCe3LM3v>K0bDFbdS7bczp z7&YK@*jyNZHwo^3;zVg&lmI|}1mZ(C3EEI>N?KrEiw6dPQ4#LTL9uA^2oQ?Bf#ltq zxcm4F5bD0M_Fz&wA2`$72x?`t$SNXYTK-#LdnZm#BxEnDVC60w1OS}myE_gbot$%i zsL#y&v8g`Txm{XL?XjIhi*OcOq2J5GgEhf_N@Z2JN@VTt-ojcafdOd%z&eWv&;?R5 z>IEtWN8OGwg1xyh0No>d#~YIrT!)*k!!VF}&7U6IE;JvT^X(LTSn>Qx9lwE#!=$R{ z9G52t*!#h*S7vA8K^7DB02dtDi{jN3JL5-VPd{-7;kU|e1|7BOg%6b8YcF!O=gO8B1aN-y!{WXy9*IjX^8L9-w6Kc!5@1YGdqeWv>Yij z+wN>I_2-SQj%3*&|lOWDb z!1eyBy$%*-rNWJGz^u?sX{>x-Ux7eWkP)NTVbYZOD&*#$ch&I#TYsb5!_$&90c=nA zS!P<&lS=G_rW8Ely`@?Sj%U%5U&ZMbhX|wP-aew`?}|xh(T>vhwpiNW*(d_45_1Wt z`>-36V;33{VvM$G6Z;#(!JPk@KwVO%_k9f;R&zXeo9VxP)NAY$LI?a7pwnVgr>IXh zE_*xw9oqSE%Mu2t&~<9W7<{B!q-|6<>0nq(^BEcrRmL$*Wc^LTxt*#-EAxQnL zzhOZ$2{3JQeuG7l5cUK>oA|cYkoHG!znC9mRqysGH4I}? ze|8w)4TAFgZ2g!uOuN4ItG&@4^ZA1R+ghsD$p1ODu>i=MygjKeU91+i8wA+?5Ui;7 z9-(GaK5IvDTd%7$MA%zY)sYz;`=Vwg;svC~o#T!8KT&X_K*H%3(U6LA)qx~l6K{IM zhdk#FcB5x2XDRL+g8$2kCPh$@DnB__IfHThGkCfWxRKXw?mFpqSY$KVYO(4@rB2UE z0592=E-LnST8xA!SVFkPN@=6M_8DcRAwDcWyuo!&wqR-WWlvE$hFR?72Xf^;*jpMU z=D+$)rz2H#aa(kM>+iwx;Dzo$vwz#NesxId+lMq6H`Tk>-`y)JNpm@0xRI&l09SuT zw}NkwUWEXkW;-F&id!VYmpgIKCO?;~qRiLN3GSdz2E2U3wdZ~s5QM=wBl?EmbMMU{ zK`p~7*;cvX?69Z+$?uj<<+2wA=Z6d)Z^72hL%dlq^SCZEAj~!=PZKTm&vM7l?fkZ) z+h6*Ky#jII4hJm$-Laqs+#y%$ZcE20e6URc3(-j7)>7IvRckSjKW#T9jIo)z>nya3 zkQD$|CeAA8SiSlF1yf!n0`&f?q5G4OyogpmKvVL!$q6%%4K|%>0HakN`=g<_Ypx9v z|FSC+-S&ug|Ai4Py(0QS{J$g3G00C1w@=A8i=XRE8pn5r?_TNXCw;CDqz{Ug7* z{*i|8p1>B}e&c~&xM1e|L8iC*}8#vkT4ky$+?O`5sp2V4Db0P7_bb;MM zwmU!JF5ViaBHF2qy*(Z+t^N}{CAax=JI`T-Q~SIzEqD9V1=U?FJ7*%xS4Wqwi9F54 z@FaBtq*umRu}+5Cz_+qn$Yq-#FwNn@27WEmBLL1^QDeZNj`^ngL758ZQo(5^bR>W) z%^O`|Jzp=l(KE+HimtMscE?X(BZ*8nUL)z=;Kuzg$7?fn$!l)a>Q_O3%f}EXyVm3N z^TTY9zc-Aw%uhCr<~gm))a~CksSS2XX2mC^Eklg9Rr+{ks27<4O-Ynh`0bM$+K-;( zUln--(MLz`1roHdIDZpFd5d#+z z*kGC}Za)i+s+f98M2%EyTC6wmYT*M1*ZMqdam0K}H7JeGTi@^-3M7hU$9pX6BJ1-x z$pGh)J0Z~{4A?$~;n9;*)&yb4*7-CoH2)9vIEOl(_hirS4!s4^iZ>XOEF2{SW|$j| z78QRJs(p^RH<&F1$~g>e%ydg7hi!{+z1##>=Jvnl{{mL&{bp;mLZPV)ahi=!$p{Kc za^-%(b1368>lB~4G@AuQLpgxP$;!Ka4Nw?j$ccLJ^nKxwccCQyXfda}Xqg(-j6GO& zeDQq2nN@vswl_K;RXAJTPfCRxpR%l~aNff}`=ul`HX1Sk*ssg(XCK2dpNzKRh zl^*zarj7HOhlP@)#$o*4)wB~8FGY-=%Co1kE;WA;PXPc2(VBGs%YBP}EEwzbY)Fy0 z6dHnZ-TbtT<^sa`(4Z86{aw>p>^s&jBYNiuSeLw6ZNC;LrwnXIzXOo9Tj`%&{(;EI zp)o7KD~F+N_i%qREb3vy*}K|>$wWDO>r+3DcGR+)t)5p{z3Trb`GOJrSdqTpH$rTRj@C%@ z%7LGr^R7Ecg{ckg+2nX*(XFcYrsPY`G-w97F@!w9mTlw@TZVp|hkb%iet)U&)jivT z`Pn$6XvcjG`I!YlhwPSu^??8-`>?5KrQlHm=Wuzisyqfz)Sat|;4Ly}z|QwQ>D;Afii8~pJq&6%^gku_W88cxKcJJCPV(d z92>?V)AT?f-BSV()NzS%DqB(cC*$LUWUb=tvBiCc&MUylc=v=tszDRb*{HzrU6X0; z2z}&`*mu5{H-mcppJ}iuKbfGZEIKWI<>&WYI$&Pb;zqLnc3E;=Q5oxdo&!AO?7`Zk zK$E2NQnku&8!dY9@1tni;MDrB8||--B%^V;Hz!M-n(kY3vZxbPgd^};AF^);Z-gZ? zp8}{~i2D5F!-~n@1F3|(L?P$4)U2{N7ZD=hum5$ z*gp+4@>6B|;ME&$_1QYU`w*x5#jknDql^hWz2Rqtra2+(ZRj8HMxe}ql`!t4Wh<|U zRxsPEcc1MVpzd!YBmYOEDfsIL{LisRwg8v0eq!o#m}2tWZC_^)>h@;7Zrr>pB-Sx# zC*YeQ{}7p_4+Ax?f*5$ol?9cg(eU~I<6+QplxxVnBNcf1u{@x0^B}cBd@JKOXI!#} zgpWc=T9wo`?q|jsO7_#^+<2ATuED=ytO|M^A?G>&uv(m7Db4VSTH^e{QuC26==D07 z8}2GzLEAZPkw=9#LTz9;F=p#L#G-D#fKW5H6I|pwHmsv`<=X0fxOh=fLcbPdrDa!v}SKg+pBkn9|xLVv6*r2=r7|An)|Qh8v@1Y%~vYlyGZ%m3^ouF>P;0T zS?a5-87vyqQ%pg1D1Ck!+d&RkpdApzoHZiw5Z@FEJx_bOe4qq0lUSepm9=ueP>({u z;+J8(f470I&2n>9NWG|1{5HLK*DPwc*&hB4E_AYSpejp!nwDcl~EC z{;+O_-|}zKJMs86`1RS5XE}4SB$)FMFNFX`KnHR3GMmLsyco!0vF9|AV!%7~i_IGJ z-PGQGeh4v_^u74~owoew=K`hA@v7wCkJZXR`k|k{aD!IrQJaIBxvL(zQm4Lqw5?8&nnD&^&!uKLNCzlno4Ud|b<3VLki(*x^G>b;m-Qqw@Mq!|D1PrW@xYsMt!SJJRt zwa)9a_~He1lxFL%up-`K; zYe#Lz^rkEIP~m;5Bcs+ZWA?SIR2w25=zD(tLsxXwo?EVXjGx*%0**wYqiA!xB4F8K z*y^f&tGuNP{F&-$(_ESoTX#ts7oSi2|R9tz4`yjrgMj+zacyqDLq*i6*)TF_apcV9$y_=y5 zh1+Y$Rn5JuSm633j(W0wX%U$ETJmq>Y}^UBzSu?NaL)1tZ0zL*bLS!N1dgq~F0h(@ z7uPmgy95mNWHAW3>mAqPq6~kQJmOKjdE4jnT*vw4kb8`9rg!Pm{Uol?)jriPUe_iDE+1)AJc+uhpn7z9B$F z+IHZa>y_z^Io;Q0?Q~32X;zPz98Y=CPRj6arklMuc)X4Ll_j`f%rC-J*k>}9xRS38 z+{$}>9Zit}az1a_hsB#qo*ryRQ;xsz0r};caneZz!e1h{`ATB@QBM1PWCpQ%R-p5g zn!%`RPQtQJHyIR1qvD+H0sXL;4ig#pdr%4fQLRUfyWv~;ONx`kI5BZiSSQJ?g*ky_)7y~7|P*y*2><*$ZdY9Mhu zN^XN$QH-Dq#@2&I178OXhki#>o`SW1&Sy2LdN`DoyWERSoyZJ6mwV>D`k7=EPuQx z7zVutecuX5L8q|qU1P68a1|>KoE{@I_aJ-e-3vXc?!mnnmHi@%GQzwez8*e^a%EnG zJ`EH{mcgbw>8Ib>qxxUhFMouGU9+Prye>gfTT-`a@vnD4e>p~94kBha~{dMtW^rS^CJ1Cwo0{y=Q%VN~O38L$zy83;J ze6(J7R{DN4nxSvOezQei337ANTOzc@`hzTBC+3QfAg;Mt5DId*#b!v!?TQO0$mk`*oUCWPp;^(6r$Ji48QbJrgwMuSmk4ER&!Qmz3_o6B0;$D-@ACHhYg`#*lH+~Z$5>96x9nuN3N(y(AY?_c=3^*A z{@+&X=HW06FR;gSIT*4q#tuwa@siwuS~^PEK_&5#ldG%$UVrfy%FCEP6xpJ%D{+nL zDvG_?i?^6JM6EA0T!NllpeqvIii`zIxMLvCvu z7ZqI?32&n2Zn!tkr3e4;(TU&SKx37V%!siYOzzRHDD$wEtZH~l{v((;A#Y$1+^@N8 zn>W0Lac#BgUCnc|YbgQPq=hDbB8MFd0k+9ec)8_en)r(HvlxWUk;k+jNCTX->anvU zt6p(0<0iA!5&2_#3rP}I_1GT_PGDr&vikZ}9$BA*5axJe^-I$AsG=t~-yJss{OS+= zduTVG`VVAE({?)W-(htuDdYWRfleD5I;;FDgF zfh}cK+`T*Q+cdn%>p(XYXobgFvvHh81fwRc3xB(>0xm7+KB=^>m<>wWYfQUTeD8_* zWzFKQMA3IXMnM|FczJoMq>E1cem$tIMR%kXFfI7eaumj6{|QL|zQH)IgGQZU)m&X= zF6>(T!vC9L#1b13CE|;UH~Bk|KOPkE9RrFm7m*BGeMAn_Y!3;#42^YjdlNOE-SS1` zRk3HY+^-^wO70!XjbryITWg5*sz4uj86w#qOgh8;=hxh$n`b9W>77>7fDBp^C?4yl z;TVL5m!iw}<0UG$)YRd>^1V3Qp%p;%ev&T-z!zmkJm z?W;g!oF_9Le}ifulhp7%y{wA6N(^}cI?ym7vNHbuZD(eRO<%DXyqT`?kNf``ft-h5 z2OZdKL?953v!a(ky)QOJ=qPDMwAw0G4mK%MQhr>-wo|NPgIFR-p9$lwsY&c*G=BDF zFNC7nt7IT$>0y2>K-@@K2)WL7&fB`meE!ggzkU5!!%lBvd@j6JXc$ihBfp?b5WZ|KRDL4AYntR_bw)x0V6wk{0@K=&w5SnWOlET8` zUj}vg3x49(+e14tEu5?8MMubDX-D2)tp;G~9SnN*kJWj}tK(@>wDr9+g%8m($y>ieW{&2iL59e?3H z1o`^tzgJ1r`;1BxJ*9u z)Lsp1l$Lmt<4c0%xst>{cd7gJ!KDQ=hH0AXJ=mDc7(!RdU}*b1vggkt$v=tru+O~* zSm3Bguv%IVk1@==Adg39*+Bl+w%zZK+-WO41Ce0g7h9mfIJ^W&Wc_(PQR)(3U)V0@ z>sYpGQ3Xf~$Oak|k31_IxM}199k=T$0 z^_THHq)PS4=Nt$1Gone9Fn^{(2&)8`x;>YSE-x!lf_=qwTGzyUjA{vJ{ zQTIh=M)CZXk9-8gw4}i8d=_PtHsqazWG3kh3kJ!EQyc3r^x(o~1xP4=tEnMnEy)_6 z)xE8$aToC4M6xzwX%R;XsX*%Z)LzWaP0l65E$}tGeC(8y8=U@N>R%g+fBN>~MC~+O zz)7?FiV;$lC&;AtUp)x-vM?2PtAri6eEJ)Ej$goe5*w@+`|DxOd! zydjcGXuRLL0A9cbq$F7TGP1qqx0_wFK|^mEj8nWjICB0pv)mNC`qGq1aSq=8J|eV~ zah|qiYH!_AGuT54f4qyG7Z|B)$a;W&oP1{ePIYF4H}vF%O<&R8>x~56IwB~z9*Te# zZyWU}CWWLd)ZwPLr_BXy3Gp0U5OWcdQby>7{W~(XR0Eg)dM+PZhzZV1a&8hP1Ux1WVBU40>+XR^Pj&xa&l&N!D7_{yL7UP49omW<-@pXHGPg#t-2?6vq(_=a}Y1d@?59kC85eOImv#lA(1l zYv0Bod;}-(^MER5C!(UFAu?(zJsT*#O&%;54%aF+WU$2m$&fCC?xOsxyDs9re?E2w z4@GK@mskZ=1C5r^&7~B(>$&5Ilj5+m7-)k2L6ZhS-Z-vdT)BZ40_8@EN=fJ&N z^U|G{o12)AJ8V&lhc0QvU9--!7!9jluE0tm1G^G~eRW@5w^xS^WU%An;NDt1!gl44 zc#&WSFT9tZKYa7D*RHR7BRfwJ13E)W>_BaMd5J`9e^8QE#nru%{@mLiDFli6s~SZE z^MWMiW-;XGf=f#af3WsIQ3}F9`((~pPO9F%{;wm{R+Aq=f?wc`jW$VhUSJVcP4XA@ zMNmu0R)yy9LU@F%mNK~S^7~i#1a0(DtBZ$Iqe3fuUAw2`qPHI_9?~rOgHLDQD8$6d=4pZZb^SzDnqP;+Ff$bLlyCs$helb*2;t2Uw<`VpnBMD% zeaXHT$@wdt-Y7#~#OdHt0()BGSBKdR1aOUCQZlv6@;0jM?$4iWu3{X4sk3oLy-(No zZO6E}wY)IS0pLXpf`xmgB%lD!s)`+;>@cE17Vc=>&BE0y2OJyH<%hxx-F=NdBA)Ld zWetOnk8HWQnShkyD_eXPyd1!@sYs{x2oC1GShpCt|?@4FDh zB(MCQ!cUa~^47E;jX{x4#Y+SkwPRqgvi_q*8?O&Ps64yVtOTzQ^J}l^#c{+B598zG zWlTa{xPOd84FveNklZ_d26YR2U{~)~B5h8xeMK}`DiEnt&iBe`oMVHbvC8BxAg7(z zHqM`=SR%ef*0u-IX63&I(H`e!!nGisL@>FRWju_){DJN2MqU1QzMnx)yGhwdVB7SR zKV6l~{g$W~|~e8`*JQ&|1oFMe05#?Ln5TjEnoOrVdT z`sel3=V@P?Yrn-cs!f@hUzJkVe}WsbYI)sv_nI{Jmwt@ZG;9o(@9V#eNf^hyyfzrh zE=i(+aKw?q`u1a0!T))|Ny`QA37D0ba-2^>6v9LkMXUgRR*;tq27j$E#Ol7ek^1Lz z9szDZonG?WhtT4J>o;dJh==OzC{fc#f-o;<`|%xn+l+L@Xa=% zc_;Q@P3Qg1$;sL0X#zh7h?M1Lp0TIu7^|Ua*6uy}*1k{UCWk0@HC=&8tIUF-Nv`#Y zYCvG#A3E4GByv~Sh2w?}3%vDIYvdz{pFcFI8hJQKa=omi>VXX7s)(VXTxOR0j3=`{ z^$t8~5r`ub%$hVb0L9zy|LpwVc}Z`RDxyFWjm7FpbJf7y|5pF__297XDtYa~orCAm<3{SRadX zvD%nh)MkJG7n1i^@-kD#{?fFKoVlMWemG{@?R~_2&!>$HVTLyO){y%u85CF!@@fOa1ZWzm41Rv2}53uYpUhKxHC z(z8R%ydX;pZn8ONIh&pHH*6t-k_G}n%N)mo&Y6?cKu{n_{-9!Gr{19A`>YnRdo z*J>SjOKR{CyPvw6v!8lS`y6DIdgB<_sXuQqU3NcbW*2Pm1yT`Fb_tVGQnsd-l(AyJ zaAPVRh!mp+K@p#nn{n0Q3MQX&Hhc031(o)7`dCE2^v~kd7wZpQ6^jCEZLeg<8G(X5 z;6UL}?K~~^YX8b|YpU(?BDU8cNLg5AgdS#T6p%(&Y}ODW!+8z{Gp;5Lz?>^voST>a z{#{ZdsQK3V`*rggU#iKxgV^YRtYvv^(<1j02I38uBT&W7u}&zkO4{JS0LalI{}XYX z+0F3W?FQ)yc)>$Q@1F>e#42eaYVP1xi+UZ2kwSkV_wRHhwU@VThdC6%6>X4D0_(@X zTqM`G!Y9WaB3N3&RG|JvcuDO|E*_SVd?MKb51d^<|9p&gV_7p1K?dlD37z*MvggmA z1kn3ht1jv|a@ffe{62*V<;URC^Pg8qOCe=vteM?cOcH4B~n|^q#jAKo}en7&i{eNB@qbxMP$cva@v^FDkUnq z=7rh(vE)ODK%hsbIaG5j_jH95chMJuq1IjfU8V^7a7iKTwI?KxhtoD(r}|ScKY|gM z%8v9H$DViKc3^EHT&?eY2{|O!f(;z{q-N{E*=cuQ(b*SC_0|)m1l;{0HNF|zD}xG~{c{d~@y4Wcr?dHhk9CtZ+r-}Ns;Sotz*OMx$x(VzPUiEr6~U%A|G zKlLdDdj!u*K7YTOL_~?>DJtofN1a3~Mg8Z=SciQHFVK+{DIPZkm8Nc5*Z3Mw4$G%_ z!OPmToN(Y>IePlsZT9g6yN{X)WdIKDC*Em?=p49jkGe8A-{Ip|_8*J`w?vTdV|^q@ zSwDv?lGO*)$l{z4W~{ug^bxN?T}Fk0k?%#=)*>`V1>BQ44AC>-k3@rlyCtNRSJ_No zqpaFA#JBAio|eN^`<6GcgEI@ zVfb+5fg{J~p0dq^T~F7({KQOZ{XOsuS-&H=Q)5dBOFBuT?LrYxZ;v*<_2kMQh5Ggyxgx(&S7Vb=>I6jM5>ctWGL+V+Rr5>j91z0 zIuuq=JygVj-{PmSE9Cy!f&+K0QSFOVAkV^I_^yy(K_9x5+4_r8$zb|EZvIhC-|XM0 z8C&7C9^-r?Mq0&=zU5{A%;OS7^@ToW9(`r5)`^*?I5`i{R8kUyXpb{2lnE}=%eF6n zUXS)7`#%>5&a*z8^%4Gr^@t2B3TUi5ET(^Z(I-zfBwA%NHS05ZH4hzjt8>a+cqMN& zOs6z}JNpgk7RQk6%cQ{s3!6Tyd>$BJh%$Vix78YKQ`deUPKfpN@Hs0luz?=4ec=bP z=M$DHg`DTj_910XK+sL3Ipb>B>Y3nx$prY>t07|YmS@GWE{8mr&x7X!tU(flX=jQC zVDBs6*LIV`H@Zk>UZ4%onR&>>26FpFAM}>$5h66l6&QNxpGWU6*d(_qz`p@LuHTvt z%C->OSg7bvpdXFwz5E&7>)sd0S}Is4kw!V zA{odjO<;iNOA#ot6@w6ZmSHuFyt^5>+d`i4e~j(lI#s8cvD+|o zHzgYB>r7@lqMi2!L_(#+!QSvTkU$=0czlLcGXt~V&AYsT5t>PL@scHOts=I51zkIOO$-_FAS!+`ml_U>&dI zw2Ith+h*HkTi9=B;svS%l{UnrH*+1>=ze-+Ipiu(NZQMccvD)kA(H)i6t#`YiRSC0 zc9q#jNvei4_(=0;U|P}*%K14{5}Fm#mzQpxXe9y<=~X!?ewxXvYS0dGY3+%+$r|!H z9h6z5`jhzATMaA7^D>8hEWNhMQuzWg`SL2+w5@IQxIyJMdO{LCoSmIv<1_a**0!Av zJq;n1`dq^`>cy0toKXb9Zn0tKWG+XsA{c75Bqd1-jDNOiWa95gCe*`%`kjhPDd~OV zzd4&i#U-jvvs{7K)?ZWve&KO+-s382FAr8#l}Eh$_9{g3pelwnGII*{s%jR_sD@A| zM9i&qb)hIagKtkRT!eq8J>gluYrD+Zwj{GtTvxK@EpTivuz`K44!+QB-pSIOmdc9VCN~LbD1s-VwvrsZXRnEW-xV}Sc9c`i zY(ILAwrTnRfj2LT-^?jkvXpAlD%hX$cZtc5c4SNld?dlox^Z?FnMVpV1EM&`Q=rzz zLbh!}oK>bvOgtJo);Z~u0?a1T6hBCp1ekeLkJRDw{dvMpKwKCri-kdfhv@lsxEgGN z?ew6-*TmJT*)cJXywsR@P}z;@&(2)_pW6?w4QM_`1^do!(S-}#kLBZW=hFsheV8JYA>X`M$Zx@n3=8wnBPx((!jU2?R;63Ji8Sj z;H6FmSD<=tKi`pQ(#F{YAN^hg-tO5AosOz&*)oawb!M~6ZZ7goXiW+3 zFk+j&J3%9j)+hz;sxd8i4|@s-m9v12j0TOch+l;yJSk=e=QQOGx%-_U{Y==vAJ6@Y zr^USM3>yy#iY6AS4jR7v64am#ak;;3cT1bE;gRDYQvvykk0e|9{|#)(ZgD?E1Z*IL zPlW=N1ULpJXmarD#Hyo3p1V^E^e7N+23&oDK#P_PoVkCXB`1fe=$N!lrEQQ%jYS~p zcIMmc8nhiVhwU?GJ_q4ShumLt=Wh?zO7gF@& z9EVCr@8)`{P13!7?;rjl-u-7&-c&dG$5{(f-@=OLnNgs>FC#%T#dS$4Uq;*c-e$jN zve9nurWqAh4lFPAF*+m}KaL5vllUdrqhQd)7K@$+>ONJ>tS1K&BxYQ=GA$-1GW+;x z5o*7WPNO#Iy%CG?3;GrIJ)IcHVNw4ui9x6H$=&FC87+eBcjL{$ukxWOxjz%Nj%7Kv z7uKASSJE5g90lg$_uspf;9nnxx-2~Tn85m+v!4vVeYztBw+1rhD}sSAht%qJ>VML< zJ&4$d85y6X^vUPXT0gnVpzk~YbPrg_!e9Orpx|m`-2KFP!5*w_^h^VQHXLW8K1@&)o~p2*4dDP~aoKI!RT)>UIHw!Xsj{YL@T9pH zQ&oiLd+Kd>vb17tB+*p!pl`_l41Q9Ia90`GOBc3Q96hkHYh-yYyd#j6jom~y2!6*c zx}f^WU4`(<6YZnW%}AV${J|=NBQptGsuJL8)pUdKya$mfg66_1N@FW{2=6?=8u448 z2P^zxRIipvLbd9?hC3owF2vT}7Gasd!M|)m^P-(y%XfiY?Ndj0{eaX9FhN}61GW1z zU$wm;=fPWL+TokOztn=Yc#P%M4L>l5TXJ`*3h|~MAk3%j72#jeLtzhrR(pzUw!TT> zAA;H3<*`E{KAM~5R+ZvL&NW;i!xQ!q2qr7S(+Afm^_-^@{6J9&t|qm(e(3X;15rI) zSvC97$9qvKx!e=b;mX$((aom#FfRrO?TICNBT*vVL@;F$%;5c;`Qa`U0N{sZixO=) z*1uXeRJltZfNs!)z|yqa*Td0$&uY0cPcA1CbUAaHJn7J+?dzeOZVg2s>Fr4Oeg+QX!ZG7{fhhD?O zvpUfO!AzV97zorrzn2=h-Tp_he|CRv^6)i-lcZ#PcHt|PDuJBu{voQZTkfKg_o@oP zfqz?m|D}@qMKO#XesdT{p8VLOFii@spNLEdQRMIIu$|=ns|MHI31o-ae#+bTfGeZv zXhha{ZVn<(KMmLn+fQ8e6e)gD2T~@Z&F2Ylg>WorBUw@eabWCV&Zecp(IPb<-otl? z0mDdv!!!~g*M{~N1nTc_KiY^l6>cb_z$fP$9$UzyN-%lF#MMS(Y(Ex& ze!k6`vLp`>w|P66AkR(>l~H|drQpKuQauQnNNS%SO~ zfEegddg8mxT}2?T%CYX_@A@ViS2FFd=GyKNynassCB=lU{?6sJs|TF#pJIwQmhD^{ zqc8L&^i>MRPU7yXQHA`P|NXrLx+fhC`rg-jW54?|nN73qe>v72vk<4@ow( zw}KhLV`}6;!-tLpShqHqgaIx05I6`iT*snx0qaRG3ktXS(;&epvtX7F_D*Zo&`Unr5crnaSu zUbMitqgZo~btH2e)`rJe?SE!F^7}9V?<|QPcNU4s#3#pKQz9rS?V_+@jWgtPB{F62 z?umdv@e^uTt{b@^q?1u_5|Jspi2QqK5J+vNk5oV0(=U$8Z zdlm+7^zC?&r3yNAQ;GZ=icT){(ok=%jBQ0uJCFm9CUk{2J&db(8#=kn(OMVgu#6sQ zkQa>8jS|8Bv<+{6)#;C80Ls4bJKZBm{BX>Jiw{I?Il-p5^z1u8p zqZF;&%TFIt8r>SLGL6!gS2-ybqROXvLdIHrVP=FcGT5`uey8!72tOkh8;7^cL;G#5 zGASu3i@hHlv5~$Z%i;Kg17=Rc4EA0+yc|_bLD+5hj=dVMQ4|2nH#=wfaIC=adaz>u z*Wt2o)_C}grLs_raL1FfHY}!lG)rM;8#aG2C8lP!7dm~w4uU;eurlSUaB`||!&06k81%V}CFlR)9 zVy3-O(@4|y7ISaWz`zXhY|-y+MJvmA!xIJg|3zDnX!;VVar%@U5q-GiXtRi8Kjt-N zx~mA}%1*f<*gUl$GAKz%%{}h>*0C;X zaPE8>9(p&U-F&p>|Hs|)>stAK=11&r*p%w+a|iOS9G2{;g3e-EjURret_;Al^F^O4 zzrCk9oR@Qyux*bO#tI48O8t@~#RfAg#qNrCa|b>wW{F*@#cbHfu0!$vH%{cnBDS@F?F9q7c!XmQayxHt@&#?n1 z0{$;~eJ?!0q~=K*d>fV@q#Mc9??Nd(9i{lQ1ERCh-f|;1vCTMV9`k;L@X0lcJ&#B9 z+wyzZz?~_0lUuH{7zZ+hHOPDa>jb;qZY^1D9|{PTMvWHeYKp6hmpn1$oH+{ix`px+ z_!N5@pC|GiVMUonf~rJ>f6q-hPB>jYzWSZ|QxaKbr33~Kt*j@_v?klhJp&p6QMlVB z7qaVXU^Coe3sQ|TRDeJu)J~O4w>dkEZY?(O@JL)eQ<6n zgEMuxw^08o;>AEAn;J}-W1cEw&X)30swigHZJM~kw${gt+f(>!qW?=rjT*VD(6Q)JqBBvh2$ zVxarA|LE}JVYc-Ub_4PXwJ7MtRL$B!@I27?y?RC0!1~$UN{NpU9p`Md*zs!T{ejzj z3oZ=|JRe0uR|9uP3q}8hkUW6_v!4(T6FxH6H4RUQ6*a*!(pC*NaIl1{xcV(s{Zmw7 z5y5;Wb^)0<4Y#5H%MX_yEJ@4W^k9_h=luB+)~HA5y??0a>cSNgi$zJtby=;nhaHXx z7~Ja!L5(puwiteh${r5K`~M{_I@bqPSS7YIZn0cuq*UU(m$NGiW9`lEiL%j4(oIPT z3+-Bj_Q?)Lb>9}S{idy)IOEbM|9e4BDP!>+>o|d6QBqvFB%G1D-S2ZU_({0&OhLy+ zo8?m&d2gcCf}(lpS6_b>_jY8@gL!n#xL3t`jq%khBjUJsWaED8e+k7{42^!b>-ClG zy;ImP#sE#&WfDzI+pR|%EjD*cHCEcrMd~N;z!1&O+#OzrVUHPq-l^xOxU@GoQ@d<~ z@{@UgO+FDH7&B|+fsq{?dQ58`P&}bjBxvsaR-WFis}*DuWYc0x*g|~X zAxQc8BJH0_*ZO!4wz#L1W{{27ahtE>OcZwWU+FN`ayDDMOFVo}ssEPe9lwIP87Dj| zYb)($%fn+~-GgL2W9_m_ap5B;dxLF!tbEi7^{s2ij1v|?qOxJ+cLwIVx_``-6-EaJ z%_bKl#0z=MMitZVDGUj=%dMzP;v$BN-d1)k_Ae*(=_Q8Gt;8Rf<=N{BCl8lWue{!v zal))1etA0aT1qt60Q^6tHuYZt@Q@g$ZP1H5Mq1N#EU!2$1MdA+dApPE8ir~+Y6{>xreyp@DYghJ$dLo<&5ho`TMi#lrB z1_70BmXhvRT2hddZje~Io28MI5?H#HM!G>jU_ly|S_Gt9SV|=%r0d=LexCO^U-rxS z?Kv~^pE)(xHHgV1AQ?G(GpmuRxlP@93{!kOcw;8}K208;%U{_sqb=Zvi`!#KzcrW4 zJ7sNCy=0rEx~$DYHCo@puyfX6RTTvyJ50c{7GM8m>G^xXCvChfjR*EMDxWXw4*#95 zuR)q!3L#3VauRU{89wXd{ubrn6v`F&4e$ON`NhFT>_ON&8R5Ft&yH8B`F0Q6ulJxd{<&Lz`!nF!pcKo(H=U=~f6@!~AO~8>KlN-achcjC zzD*0)gD?Ve-@ecWi=S*V(PVsJV)#)ymuV$qU6C7s4Hsn)yyg;txxHZPYJ1U}CncsOWcoleTRKg@Nk*_Qk;Y_xAeCOC2|vLZ00S4tP1w=-!LxzuvgRj%OFZanR>RAxqI*Yznue{;YeC94)|OtJuKrlT!>Gp$ z#1-A!j#5FK@TwREG(|fjYjHv=bMcOjK>6ptFZbB|)>hZn@YLA(EalYKK2~qX4N=7& z^56j3Et6c=a+Fxb3Y0;x@k6w-hM37m7jMuUwPKPc%X+c;a|+V95-9DTb^+{v)>!yB z#DH(xG4>)0!2S#=^m+4qOqq8gI)uowwzxSs7WIq0i_3q*(yppg8mtR!5O;@Z2-Ur- z=f~*$j!i*fJt7@@2V#G@LRz+g4AE{42g+jpRKa&Y#0|XBdW|xbe2j8kk`yj4)z2=9 zych-)hFu5g6dDPX_PkYGr+hXozkZ)VK8XqncE1_nMDun@*Ngf zc&zG^^-WnPG^R$-R~VVPF#Xhgn_DeLSI!Z$FjQ{yvR>ULT~+q?T&$G-f?*Sva-d2y zzLaYtDanj9=3!v$ival*T#sO?$&May{!lqp*}UZqudn+(U)wjQt9|dO(_2T2pGKU- z=O@BlxqG9w)GBud*(q3O6qJ!&R_JV&{JP)it|&S%AJOAreM3CD%Qk<;s^WxUrcAP7 zZv7wHzqI&y7X*r`=0(hWOE_+B+1#`otJ$1A<5is$^$D?iAzEdmCLCs<1S+hrv6gfx zVeqozUXda~M)U&~Yl#gboUFb^SBxIdtl|FRz50vmd$U?>tsxe{#=8#K^J4T^4#c|U zXkYq)Y!17qdA2fNdlv$}VO#yy@ull$m)aIZ94C{6zh$=RQ%j9?&70v^nWc5$c-~M@_ubQ%;L!!7q(F~tJbq_zU8&-AiwH}y}CULCEgk&zBw(@}M^uPfk32V0e z7dOL~V9F7K2+u2m|UyYno%-qMbV(H-du@apFfwXZlr~ift{%9`6ZyWvs zoEu2YJeOFaethF~CkD2X!oV2#cNZn4zS{C5QpkQH0O+`n$z-TDL(W!Vn3iyhs}mV# zM14jfPfzlRRjhCVoo9d8R8s{6G&i0{|1nYS%M;Y49hgXB)<*IEi~8AGgoS>Nc?N%` zRAeh3uOU|+O*A*IC`BWWWs_~{Y;T8lPF^ifom9F3JT27%i{}$)86@w!Yl8^qra_M>&)oI4{_D;7`@oX!gzTg~9EL z0~%s!m~`X#Lc8dodxM(;m~Gh@5n+|r16y0!2tBwD+SdRTNcSX{q&4GP=8q9WpNxmf z9g}sU81u!Fm<~%vy6oEDq&ubblNO9JkPJzYED0_U7ay?{$uBGUgr`Vx44aj}0&**& z*9M#pEFh4>Xw&6Ec?n}JAzg{J*Sd54-9e+|0Oq}bP;gX$b4H;iZg`wa_K^QQ`8 zl@6i>Q83Cu)FY8pdVbc(B)7|@b$z>fru&I<{&zwo6s?QS zv;EY!bluUnK6NmkoHB$#$B52jsW=E_&g|2Fbvxy~5Fc_HwhE4!yI1@RYE*_aot`mj zirHu~2fToN&z27YHUyIj$eBa6@r$MawK1o{G}y1024`F9$qnkJmXG=PJi%z?9+Zj( zYKL+veOkZB9@*;K^s2G}gtvKzb#Awh_EtLo<6}$)SQawD?>qhtEVl$D2RH6@Bpn2v zvv7;_9^JXUAGYxPGek(g_Rfhh^!k%HP*B>d_=88$TkIcKq#JTuKRyQ>sHeBp_Q2l; zJx$zEf0^UYN(W_w!KwN>-jfC@29((rl`Vf$$hvjA7hGTOgF}K%AD^?&qfCnBYAt@= z%m^rQcV^B-r;__YY>wot=EMwEDJ8b{GG%?GpY{)|Am}VDQ@iRS7wEY*nn*@urc+7b~wkkkY{vdM}iaC0ye`>^jg_i37!v}^1ut> zTq}bGXx8e{Zuvz#tDW@#wH_X;L*2GemgTaBOE!wF4T3zh8j)XV~m zok&K(WBld|y*aqok)adeg{s3VN4zvSU=J>7YX@}^p zchrA0uBSe<0m)-@f2c57{PT4)i~@|FmTAS1-1d(`Waky-B>OZb+h3%*8lc*7L&;t{lIma081^=s$h9nn+|eC|p6=BaKmg9L25F$Mycgd<7{vmCPOsu-pL>?&vPJY-!v+(N`QtTAS!$iX?1968~R z6CAT|t1k@=K?;|U$AiYsifSc>{$xH+3|66vMXbw{o9%ZWeY^S- zp6D9z;&|rQS4k$VJvzEPbWeOhzWtD$9W6~t`YWzsufM$h#xtw%VdXw}Tvwv^bxdK;TrzxIYRjDX?(+lef&a zAwWYLek^LXoqpQaIk3^U03#{;0C1-C%BVyl%NfN1J1sWg76aTbR2YXypb{$d=VFc8-N|F1Q;+3Q7`DXAQXK-^1@Y+L zyaB%76w75W0un>V8Kx%$J&KbL#j9bTJ+qU;L<|g`&iCod zVf^bRZwZNLLBe?6fsJ1#v)wc5|6@GLc-+jONB4828ee`0$=Hxqf8!BX!Gqt351G*D~QIZ(oAO8e|$)MZb zpkutke8(>Tid=Ih(wFi5uH2t5KK!IL=h#-=*AznvcEBt%2r9y@aHa5xzPDoyU-Ldx zk@_jxH4UFU)0fO!Mea2dygcy#PB}F~M+_zEcc9KS6=2RxA|f3spH*o?&j{>PaYWFMa`0iHu@B; z2$vaiBDEwweclp0%dezN?(Fy>QX|om#da>$+X-=MxTvj$z;J5=nvpTL9jK>Rxs@2l7{wI{rsAHdY1?70!)54J|#;LUjVTkE|Tr^5rwntHVRr zi5zuuWJ&BC#lw_L%FnQ;?WSs0j6&zUXmR<)Xxo51M@&(-HKsndMT$xz1J@d4vl1gy zjobYu`-q@Rl0(=1R(+&}gq`=|`a_us$J*nGQ18(PI%mkix59^)<%*b~Bq}by3unD9 z0(A9d_l>N}kNj4gpB`HE!2Kzsl#Mvxn_K}^G0VDKKH%T=_0Ydwt<~}WvKkS8?wlwR z!wqVwZ99T$hyg*gM3km9vqXSeH{9TqfVRFSr4Pg4Ih;te2Rp})-%E)^7!7|9cWYT; zH?C*4cTy!&Z)2`WFVh05>DN*NuPIPjw)#8?k~iW&y1%c7e|!D4^#;+>jiZ~Qw{I$g z!6590qBpYdWraxqW{ak4(-$n{GCP>1Lhb^}Cn{Eb?SDUoKbk(Cb^_!Gc94x?8G7lDQ;~YbJ7?)33ZvTFP|DasByT*DJ06-oN(!Uw3yJ@fs zx#-WdpmDF?I|}VGd$^2DzJHB_n*;gjewSE8_j&ho$4hWdcsrUoeJ(hg7@(19JG6Um zl+Q*Cbzxuxi-+9^#v^tSt6uVB+_0Jtgfwr$nOP_$s%ePXqQowf~mxPEx=)hE(4?U^6$|7t`M z8=N|9ojYTpbZU(a%&PZEF!+v3Nb@rhla)>ET9P1DBJu}z}=lt~|hjU47 zuBvaherxwTgFzg%&MSqmvulAG1bx^H=66N4Av>EFgWQzGoYV0c6Jd6VCX(e&`s8_! z+5!qnpvgz;ycnmzhWFkw&ccOKr**mhTSrrkp#lAZRL?dZ*V)?#BNbMqJFjA zV+sTD9ozw5>HveqN2-|4{5tBM{o3^s5fv|L+o*K5hAN^wb>*CTqI6jJv?HUt@n<8> zBL9>Ot^u5j=Gk@oQd;klWYOYiwODxX>%>6f7}{}6vlbh3#iOrtEH1plUrE_pI{}ak zUb1LIya_Ap;}VfiAhLA$ATYoL(~1x|2ARHODS7!v)=YaS?@=JMmya)JBH6vt&!jd_ z%fX?-DJ@5xvui3eOuVd50Bg{sw=I)tHM(>~kxBhp^NL`yaYJm|eY;tE- z?Rfij9H&pI%g17EO5{JJ#M^W01iT1$^eG=OY>Ymdfg)vFdaMO8W*CN41xxv9#*r@w zKhNopll1m6yd9*WeH*9$kiyNyMfXfwBG)z?o=&!JQP1o`$hB7VO7^q9ZjAe6R;d`5 z@H@8sx82Y%7GO&Q8_nvsZ|RGoZiCad#v*t@=Mv7!E{cR<*XL6nVP9m;)d>ZMdwv+m zmo}d|E)WD7nxJo^b1t?0Y8|6+U!i>WzUj1Gz7SIz#DMhr<&@iSu=G}ae$CZ@+{v7gtI|{Je#|tYFB$iM_PB8p43$(i1*YksfpU*wNG^4 zUw>-%2sv@>Xjvjv2oyMw@;hgtUDjBDR#1Ii8Ats$+`pWVF#3p~quXClF)AIpII zf~e$o4G2ca$5i<-nfn-~)+Z;XL34H46$>wPNbVR`Y{$gjW--)kjI?TDmvstpspJ|P zf@6ptn69sWjDA(P4aAP*{aC;|WJ3{H`1+C>@R3;+qSOc`Mu!sN_i_8BKaW(wb;9O` z#=O+%A8GX+N7G~6`VEI4$T^$$J0j(t73^;-`uXKJv5fxAVosN?s`jZg$qi7nlk?(Q z35hnnJvpNqmvkVNFV$^dZjwra!5CXOxwo)s>e;jn_4TFd>gLfyuI+vQN#v9|teX1n zaEU*s4CK7nt6`L6c{gx5v5)3#`1lv)T^kGJ_(OI<-gY)FE-oswS({cicHS6p#fJ-1 zhS#AFd#1BD=gIVcpQz~XH^*Bit@UCNwg=Q~$5qWOu&BKm>h~yfy#t}~LnS}GF3kU? zhQYoUS-sTB_~nRab0&1+tnsi_dcb|OZzxr&c;7K<^ur|S1Cr_A&VxBP5ZM}Gg*-d1 zja49fyf&#|$zXUR#6@;0u&(ea@P6-w=QF8QT1F3bbx?{pFfZMP6bhFGQ{~GozchB{ zEcwy?DkDq9aHCCa*H=J?Bl8bTq(}I`RKLjTy+FaMkG?*>5Iy0DG*>2+qixzpT4C3+ zi;f`t-mErQKbvKdher=9k9T@;=%;F#B`6U=vojr`@wWzh2sTGVgu_;A^x;4FjW`3a z<~@Q+2jqCk$c?F!eC=5q~`^Ws=)1x z0}wY5HDj~K9N62Gp)c*G8uR%PhmD<9bAe6WD{ENb;y;8I!S}00y`guj4>C{p$j08| zr<((S%u-xY*K*M?;Xh)7(J2=WxYv_>GzQaY(`NY_cp!sc2hM{$+Rh zxwQ3XS-zqU7{fNlBz;&-wreyV&6rXsB}>R}ev{V_ok8E=Z^~EHW}vG0p$Q%0-Ta~G z3V24ciOE^G9LV2;{p+`ZE4q|w-kKP0m)LuVsgTbo##z>;#rA!c`;YqRp3g}j z3G$A;wr$r_7Du&%kI~+1W^=_ff2kwhyw`&Ri(VVJhJ<|Z+xt^azFgoYeYKWr?^-8w zzLusY1TMb&`FMFpe-(Cj^!RWW_7N6*_Z{%@V4|@BDAI1q09?rA&YCkeRkY8eN&glE zXs)FMKza7O_R$iQMO}R;0QIc#awHV_wzm3>XXn>u#R+CBqfOX#o8L<|y-2~sw zYj^Ke{Zfb(7@1-k{8(n01KpqUh3`g8fT`X|+B%dWgIVpcnmkOBj`phcz54Lxak4+T zD0#%fzI+|}3}Yx6wxj)Jh>lSQECUekZ!)Xm#Rzf$mx2~4$)FnuDl&kqc>s6;$@Cdq zLc!ZTYs5yS`Dq7fEm%qf75-HV9z!^E?h2SMz_?3t*T|th!AR?XJ{TOXC9?6(?JbCQ zFC514#Wx?BhW!2Skp$4g%L~BOSy%V;9-Y&HD-JrEt?*6~>SBrB?#j#Woh!}TFJP`P zlcO3T2Clqdht%2vOKG#-JNu+@MR`9>{d~Tm=$Dh-Vnso#GJKO3Q#B`cifJg%doN<# zPz>YIzTNk@3cJ~TH=RX~`nmcUc7Fu%2s0>V3Ii|+PaRH1_>87u9u0-ByDhG}n@u!W z=fKn>BHt!Licb^x5yJHxco7c|VhQ|%^!%x#Q6p_s7P&D-xB& zK+={GsHK6&G_?D$=&n9W62T~?a7?kkJ>r#<(!P1&(Jc-(?h$_<3kk)ATypj_5J7Q; zM(lVnIOdsG82$Bi2mD-vp(HBayaG9V3tCIBITQ8Qb_j@}EL=7P#W1{Kb2^`y*i)o8m8)#rlxBXMS+T`e z#SN4d92N(PwG|A4YK_F#%P;F7z-;{pgJJSO)d6w>KC#8$>)Mk zgOuV(l5CTXS|ggUSCj%=o}|ME{$!891TtWCNl6LPD%_k(nPT>!^tC+jg+VSgRm1|V zn~yYX02w)CcdGEmlC%3~T6#Ym{xEWs5;%WbQ>rreMMR~w{&vGPk$SScdtnDBGwcCB z0c#HH?+;7qN7>Rmy`Wh&!B~XBh;L%9@V9SCt~4LKZ)dVQ;}gTY9^at>09vA;MRX_Z z!H2=1D}wZg2mS<1voMw1pkKU8q&LUakn^9Nnc$Z9Am`+ZlTZ~9OKeLDU4}JDFR+_? z2#Y$|DOszlpny=*|KRj~PHP`|c9yqK4L0udtADajYqG|pdFzyd4omg~7oTXwAGs30 zj7rMLj22E(A;(w`To5)#-I}k{6}k@P+2|SG5EjY#~4S2x7ngf(kQV zDMZzIlLHn_-HtSmd4Eh^3b{1*inQ)I&#f-y9o1>_X&b))%Ra)U=>LZKRgL8yMQn$| z-V)h(jQ@?ty`G#N7iDd)P->(^_no#G3wib@)KIf&8gL>fuRNaxx+%b?$}X&~A%7YbLnc?eP{5qNiW$ z+eFlZKz|eZX}Y4*i2a+T%5T{u0<#F8RxBVR{{*EK zkJ8E)Z|9jGLy8M6qV)Z}Z`qW4Y$9{az}Ter1tUB6Kj7t`vxR?-e(xkg-O6Z#&|HEG zNR@|hSWWQTi2Ra*XMZ-Akz)o{XuEksvja5|v0bl;) zFO#=0N{SmNAPRP(a<}s5 zx-;Hsn+!VkJE$nw>uQ!lf4`D00Al9_78koeWY{EzhRzIrTQilGP?X#epMJl4i7}-3 z5PmMT(VYrGm||)dt^@`KBq9#D7*`OAHA^W%rNokS}rF7<5!;9$-)(tO*;nR$M3%O##v z&>U+v`+>`o=k$AEEN*JTjR8+vuW-wU`oIwXs}J5Eoe?es7nKZ1*JCr`{Q*& z!QIEr=Zv>eM1X5lJ%c@10{JWmMRe@Ry9?IUktluwAh1j?bp99~$Xp)3 zj19r*_fbyz&J_9+SRRkw6Y?54LnWUGar9ib(lG|?jB%!PEMV2&%Lg6I@hz8qNB?UHL!3NPdXz7He$?@PhvRsAIrqwsWB>3AY@w z(WBPRKHA^38ks)E#=mi40Xt%UBnM2#?L@LX*}2oRy@>&eY1N>-&cjpM88H*?_L}7ViZNUgg2U!`2>lj@Q32 z0Kf5%u}-L-%3I1j_n;z!o>*?r)^Ws)fRe-?^7za{?~Vw+5Q0By(}dmb^Tk(k6q-EP8OZ+QzZB`h6|%!;3kDtr}(|P)NOe5^O7{Bog5UAg1I`_l?zhiH~ODF6{*(5oSJY`J%vNy zKNOQ!R*Ui{G5ed`X?ocAB)_CHL~D@Xl%J9+XmHOiy6RfNGOpd~bT(gWNYSNT#Mjr~ z!|i;0VdMCCV}Z-y8oBvHkxS*@7<=#Y(A(dYfBUU^z;{a)4WfNIM53@-u!;3LJa#NL?Q|I5<0Pdl)08ClL6w{GZ2mdq3ho zy3BT6WDa`(WW+QB&9viCLNOYVh?Sv#_pU%A5ug=y9~zJqrUfFyc)^_;Y(*)Mb(<8N z0poCLgk?KpOD+mZ-Tx#3l%tuqeg^%Vg0rIOhE7Ge*E;9DbLf-OSXMDco@|#zjVbt0 z7!I+kH*Y*%AP*=p}b*aojwKPlK%TE-no$szj-(T!wEfAufflT za>P50+Kwf!*P;M=I@&CSh9R2f;hV7dJ2xS#6#)@ogi`Lu+d+XT5Xg2!t7%aW=uk7} zkm2u)fwZRST(C!{Djrs}B!@B=!gjtIQ8AKgDa+uxzO)Ad1?1aoNFDvi z)-{*M*FK|}ifoTvQjK<_T>OPA{Up+SL*QOE*mYL2vmoPbDZmLSKJ z1W<5+Ol%x4SJ&5c!&T>LX^Q`;+&9sd^F-d-RC&q|PBmB_^(*=OnhisvKX_<}^%P$_ta_43Y#X3ZS6e9EaS@j$I}?!k{ms->SANAs?4Xo*A=5~G zBSuap_ndef1P^{wPaZ^()@#!8=YC`3**KmACJv_5s9lx1f$CA>n0@3p4kI@&$6;@Y z@uI)L2wq2u8T|S!#WC+}k><~b;}eGGU~I9wj{yntnjZqL*N4}CC&T_EZ~+@b(bhhE z^ElWJtlB=iHCFz`Lap2T2YFc_wVPM+kANP zYq#k;TK$`EENQ#52FFU3WZSfonifEZTz0}J-y^Te`sbd3hG$~rQc`Y6wj8lBul6mR6(|{gZRMKPFicMdl|B@RGWo#xpdd>`7;Ieb zH<~y^Ty6bU++ZS2TbB}YRwNSaE_W{O2cft^ zrnM;Poj?0fOVf=x&y$dn<&eis|f_CTLZcVk71P{vr2{?hISO+Jf&Swy$4l<4vWfd}aG3JCj4=#tU&` zk=%VAktOF+IILl6&pkq&3b#-4k@Gmw51Xfp`%O z)}#5T__d*rtFss(k1xUzr+iw;Ho_(_f6s+NyGyBl(6+q#ugbFLCA>(ybD%0zR=65@ z2{>Wmng1;75@|WA_rHD;R+b)#MRfi7d&Fc~5#kgwsAI>2xnc5i_t4Gk=f;xJLEW5a zTf4(68h+uIL%&*#^7$6OgfyGf>g1Rgtnq8h4o@4n-d9`utFEp3n@#zC?zEFpiR2$( zKb3xL+z$dLJnEwB?dldilo>h`7aM5rddiMq?{)wT~Azx%) zt-@vs5+}$W2Q#uoQ@cMzW&e4X$ANMSI(no$Gc)ayOoEV?eRGk$aMDh;%|G->H+ z4;|~DvqPk3Lv8;GIQyJ^!#YtB{$h<}0r=sN4SAHP5^z&U5@we|Ro zE#098@Nn#l%HryiFsQuXDn1X^%h2(B6MRty7pD zTSMrL+DYm1WLZ!eJ9MJGKEr7t;1pf=r5xh{@0G z`3^&NkdGm!qaFNtkb<;YJA~BasQ8P_iVKmP{(+lLvzLA)2sG3zS!*^eO9vw zd>jW^@PES4@rJxKaj@UX(MZw9jzb%b(Ck*SRV|VYPOg`s*L7%q4|OC^E~Ku`|1<%6 z3MD=-S!Wa|{|TrW38w5j$cyPBPQojvQWf)l#nQB9W*TqlsMk=gtsqE-Q4suMD~1V1 z_F|C~lwnFHTlZP>746}7icgx42BEzkHV=W16>oNKSh|OB=HR>-*&6je>5= zk$*ql_ej2Q{4dh)vA{&TGwlw4Bh-Djt>8|`kG%?dd8vBw`P}pgE4tvXA5hfM5j7V9 zx(~*lr`MVMpCTY&u`=rDYVF%VgDbJmu96KhB)iVubpfE2HsM?*_l}RTHaZo1G3Vp| znMY*&Fd*bjVQ+8XP|MkG{HEo}N!K=c_g_Tk_NrFVzsd%a>6l@k{|AzX&t1a6ZM}#MjCj4DoN+8QiH`Y&e0rY64z~^6ts2`vtgOGUf$m246NTR{hj(q}W`;Ja+|4mv2O!JjTUk-WBZvh(Oc-17{q@58PH>P@n1RrG?lhjcHfQF&f5c zZQlg1U!)a|0#*enFJ5^lZ?8Au_;~(iO^n3o)!MFn4Lq`DE7rP$4BMIYM^6(9&hOt- zxV;_g*mVSd%_e?mTS{Q>@Hys5l8M}m82&H3@O3gbDepyhk8XDWIY_B>MLYT66&oik z1LS0+s~Q=hru8ES3!sQRYx`PhtJtn5mss9TkU8>3uwTrW1REjjQc&Sqr(B>pTJQV_-n(h1Ic9v(W$#MIm zO_+A-oPe}{m=_WWsQ@lY?G>VOvdXioDQ(wl<6pV(Nn=5O|63>!h2(i8QLId=&-U-K zVL_9VCtFbup8q$FDtqkq=Pl9PF^-dvUeb#CdXwy7GLUWFa{{+W8ZzVaNS&qEh*IHK zt<=)BUY=tKdi9~>HP%XBKtdAyqD?hMS%zZYY%9KgM9Afx_Oq8m1=*pd?G$=~MP9Z! zvmgIYTSwFDGg^ua<#lW|$A^_Ql`#gdxYQr6s_n7`iK=@IN`9W4SL|3AAUEQz z`th?=vr zVV&}M!p8RT@^c%5mt2L*$L8QV5YX9>$wr$CYga#x1+TN`_pzU8{kdv+P(mR9+ia!s zcpG_aha2x!f=ZOh;t8JIhrokgfi#=-==;ZbIP^RN&o6P$#UpV4*EGU|EYFJ}^R&s_ zrn320N7@%3N^IKo$E)rAd2(Yo31{d;1avZDN%+#&n8Awve16K?x+@*C{*xXKs4*;) zaKAV0GYj>S2I}PP!SaKvHH$3w_h&_Z=^6?j7nhZx*4iZ#;t46fP8D%;e}EKG0F{3+i1;|t#9xdHq!WIOFBdJ5V> zuXq&lH2FQY{68>OiU1}dpb!4HP7B&A7XzoxRzsc! zZO^g4dE$`asbmaJvvJYFjKY1&X4R|R>!`@ccLT~;z{8vjhBGHalM3ak9%kFrhcqxXL6cAm@Q4^`l?q#_g;<1YxIo zrWe&SAGp3g=x1=kPIiKu^Ye=k4~|KQVQOfmTJQCmkVNk__5TLoL`bmAcm%|5;hv#; zbd0q(Xj6Mz@c8w8a<0nwSrauu?pW1W|8D2h^Eg#P@h|tr+g=|$KMG+c{ud+cIu{6D zpNN2v#)sB>r*cEZWWJcH!maIuPnPTL| zvfIzlTrU3T94DKNqAF2_ablMf0Amv3Yb-9#yNE-zKuzD8N@yPVbSah73#(Z(^!^Es zeM4^Zk?&^pdVq*Plfoz+f014|fKC-X1>VE_E?O@h6wXt+$NOJg9#@LE@e^zY7+qR= z5xuan_bIUp>!ZszrHYg_T~f7*4d9?5^CR*z>R00nAr*fqYx|BE*L>&-CZ$EES37K2 z?=%x4qxD=()J?7UWOx7kB^sxJ&X#qkgv+Z?UYTy!!o&QmhwYSl>x+Zq%3+lQ1T>2$ z15uQDcx-%dJ*!Cs?D*5ZptAiB1tBeox4Y1Tzl4%mA)hh4E-2hSpmCwTC2UBh*i~6f zeF;EQ<~y&&gN~o?leh4^;MgU6@$TIVaRk{i@@fx7qzPscK}3)5?zXSF1g>O{nlSyP zPtUI{d`0k4YMlaLbfTiB z(p8&RRBsxMnL#nFrU?nUGOCiuRU?h>XlOj|mqd71+oEuw6)Uha+n+UUg&F5;`$W^9|Sp3wxx=V+Z= z>#R1fKfIsy2W~w>n-()T{9%JquhNG+wTE$|R(Tzb7xJi) zQ1l9yFn+KKHLB#3wTM?)YEyF(Gya8{%Fj0-*w@5q%e|KN-G{&cQzj6aW!#WDNX&re z_kZ+jP*GuV+RAkSyY-b+&WZJmlYTytS=6t)u&)ZL)=;2>SPo#m#bf`I= zo-Ig{1O}g5HN=0MPnI`C@!D7{8ci~T&=|}N3t=a^P5=EI>?2#1fFkd>s7x$cF;IfQ zpl^Vkrr9tSYEr;NU>3pinVN5tqi}B)RN;uu1Z>pWTp9l$nhgv0?0-0aj;Q+e3%?|A zIREkcM@XdyJwNDnTie25ZsLKX>j=dXLc}^21PZ7&n&AhdZ$;cKf?v;c*lm)ygO@+R zP!mN<0iukPjWW*GGmDu)R$7>&@4Ns?OO~x~fFzai<@0a^)FX7vhjY(WGA~m`5N&CC zba`|%xA+Bc>w(|#W52?*NF)`rOCb&bQMuym$P0*qh}5=d!i>&Jl>dWW1H+B)Me zaC$(6o+{b6VLN9B?YSLGoyM4GuD08rIUzl{%)am;i+$h`VOam-!zGV)QL}j9^7{9oz!N+t()3< zOL*uI>Pw87ys}-GTe>VDl0D>Zo~YL*i64Yh9StU0vVR@3N8*UVOsaB@yDVCVP8^JYti)6gFm1Atbl_9@Ix>uV*lX$->Mw+`Fs zJq?h=7%-@KYe)l}X<*TqWoo7}TkZ5jGe%c1=)B z&YlPw+EdZL1MyXOIiwLfX?z=n!0W~ZU=P^Y%EF|u2C!gLlfukU^VR;>9IdUwm7XeV zKNBbTKqPLgIA|yIp!{B*6<wLla_1^@`I31$Uq{FT@6n!aeb{E^(-U$~&bv zvFlZOR)77uwcyElw9&m~?bBpDNPpcaAA1eBzRLjlzE!#QnNR#d0vhrP&|hbuHGfhF#QfGe1EjM}9%Xyt3#wtN&O zA5|&|5Y4mO*vufo8)W|pHR>~UYm~IUEW_}LX-yZ@Xuj`Yuy)1~#}#E^kO@inqv@5zILm_hb2|LtpATCY2)#IJTU;;GV17g)!X#sF%&c>mP$ z?~f3L?j8#jzwIXe)kwJ#d6cGkp z2o$r-pqOw{m!te2N3$Fs{0Y1_W|KR#L|@$bOS;kb_56~1d(X{YU_=~>LB>+?n5$-6 zH`JGd?^Tc;Onq(aEzbib9oITtZb;9L6Grmh}%|Z9V(K_3qJPn{W4&YtT;6 zi!PYc*W24W@ju<(E*ZFz!t-EPK2SgUpNYPNC zQZAy@Bt~SO?mVsV%LnCnsQC@~o)47E7SeUtp3RN69X(&xo6DBw5V>TD!eyDKHwZYn zR0{QlffAW%Ym!d8?xvCVr7m))O9t06(PaZXQm8`E#gJX^!LReI^Rdl`2Ad+~)7$yO z-aH-a7zBFnXZ^9Y%D~k|9KbEiZSN@r=CdbfQ#DsfXglV4x};c<>a9&K(c-Byv}ymV zYec*|*7Ku?uPDLaT}AG7f}EEqpE;4~Yp~AyHBSnNe8>MwXXDAB%k%eHo7`7DewkU? z7LCwvBf7<&JV$938x!SFI^dgc4IIATMk1cCWE=(Cj;4)xDMFMg6AE;NXn`iFB4dl9 z=CEI#=A{)4qSde83=Lr|EUXuMjNRUTLL7M$5Tg!*xU4S72sJp#-+5AKvP`)}*OT{N zDIXJ_J1s7~O$YUL$XsL+Qf?uTej z8qH19S_{tpKf1m<9IoK|TM7{+y470{gw?x5h+d<&)q@Da>YeDU-c}bqdS~^z+UlZ3 zixotoOO$BumGAfYJ#Ts5efE#LduPs^IWu$a%-qj>PHhxzrdYN)8>AsjS>yZ1FsF}h zjl$32wROi%l&0gFrCf>9%f7gXb$i)!pA-A7CLXG?L0% z-7hCXdyB4=7gpUR;ePAWUgV_x-|>(!2dZ1id?%$%P7^2UQZ&$$qC zLz3%;C$c{5h&iskKUwCza1*_y!-K2$2!hwPds$LgzKTw8b3yEnYYh~(d0%k;94a7j z&Y4xDeiB|XBOfj@KS$azH_6}Qv@>h-`3LP2LU2tE>rexxBVVHGx(!(ND2?|wiZuk`j z^PT&|CT>hTa$p&*9CzQFvrwagFR#o~RFiZ)kv**G_5P%7^^gEeFle3cOGELwrIw}p z!fuTyZT90aMqph2YW{gr^JM*)Vc@lX76C@Q6ELz*km-oDYxS4cPKfW$wSBU~N2j_x zGVV+5h4CfYY$+zBV2}h?uk8Cw+o;1TP2boy$bCP9U$t)yDF=^IMudYJp&`45g<7Wjvb30sD#c;AS*^6yQ|!pZ{|z8Hk4A zlIyT_>8{Q(M@QeQnXZ21kK+}1h%&qUjnnWkn2Q56#Z}u^q;}7ZJayPJ*Z6f^Htvu& zr4T*X`*j#h7R=>b#c!5Srq;4R4kimO6f67Od%myhrW31637!`|sp?xN&ZYyFc!42( zz*yooAc5N)pr*GjlD$rYoD@%Rfn`{g3~U6slX?yW0k7`uRZ~n3krPX@_t-@7FaZZ- zZSjR6VbUpM<7M6%d=MrZa8sxtIR4E@@Xx=MgvK$}rpqk8;@>5Ie&OoH#4xM8>&6Ws zf?#Dlxbf;UzVot|Tup)T z8ASTIE$50Q*Aw{r;#lNG{F}4zGCQ=fAgea(@Dq5g1S1~=oU0`TI3UjCL%_eY*aFV( z)UTHWE+A>7i5SX`k<7T>KG>K>uLZ9s3URYdU&ywpG-N3w3$e1b`H}D0AZlz38xlq+ z5$+sorrx3tUO!=d$fozIfWMnsE&54Co1lDAsT6RUNCPH2QnL@o!>G}%DPLgqz7z!K zdfFMRPj7-gRJi)BI}^6M_@l0mih|I%@Lj2l@ljXTW;Tm#lqUJMa-T)5RPZ6|Fs)I| zXLE6ZZG(>OR5cmIkI{k|GxKHq>$b}XY>E>xdlq}Z|Ktvf#*iE=8X z!00yY>9->3xS)d5^233K@m<&&Wd1(ZyFatteBLPud2;TfiNlhSB;0>{wz4><`Qa72 z8l=i&5J1|=l}XSf^<_D@ zzyX`clE8{|S8+GMzALv&e43=I;kC=_Cj&Hd2#DXcDuk{@fEE1p zp(TmcFIsWVA>JXgzRlt(g*^7>q=ynOU5#AAQR}S(`nGD+huJ47WLr3~LNDKc%{*~8 zxOVnJw0k|T6za9ImZc>t6=8Bmd>g;ux!I?k4^rBzFrK4%ZTRB#Hdun(>5IR*OmMu?*(0w1;+tM$;%l9Z% zs9X_j;yJhw?K+t>axWhPgl~3x&A=wtlCJ#Nvhyedq?Krf1?G{yEC^8Y`*f(^|P-Rp z>ExP)Bc@rhs%)10^{68uRQbiHSeQJ%&SXB2jn%hVH@8co#YR@YWQDMXdtwMvkR$WbQ-VAZtKuGvm1l$ zkS;AZ9)N6+vLq7rBXvp@GUtp!v!}|K{|5Jy=SFEb9*C2yeR06_lO)ZSbTSGusP{Nu4GNhKA22=A&2N? zgopd?O8*y0Tc0}o5Zvf+^o{T2re1=v+~v;Sfva4f0&IA_*)y9_cbY4CAcUwGWqqVF z{kjFh^i*a-Q$<3a9Uv`pSrxKJ<@vr2TN?dcJWA(1Ag(-lKdywm=ejC467@@dbaTp1 z(6VJ5?CE<=-)r?gszv2p1+uaDOo?U7Twwk9^ztoijah|lHwAo3Q%B3rt+ z#Nl5SZ~6JY#5}d2Z7)S=#$H0`N#Hk)VK8oiP!w4=Mi`h(TXXPCzqz44>65cS z)Ly(ntzQcb|6K=Pi?-0KolL4>%;^dh74B8{zNqSy#R4TV$)sivL}V7Hvz#n9ymUa# z5bNP7{aOiyiP&jw-^__Yr4S4djGI~8H)(6!b*nUc^V%HIOpt{G$=M|BnGL-^+Xux3 zXSevNI}b1fT9imYi(Jy{EbvX@4P&ExHpdX$HA32gAIDFd4KlVy?r(a91MGC7*6bWP z$JSubhCi^d0Ot1Cr@@WaGyaZx>C@g%;2Ga2!RSDD8xb=4EFgY6Li6U93cg@B%XPK> z9E{p@J4>lipcGfa^Qsg4!2j;!{HFDurqI;WA3(}<#c*Kb<-(*9<{kCa1hptR(=n`DlYeM9v9d68c#o| zyWvx5o$WNt$v(l>T4?Vi*>|_B_=ZdM00V#bR5PCv2OPUyLgIGY>NRq#D?RA5aHBX;SvN`DTGI(~i+h?{k{%^i4ve=~mZalen{ z<+C=~ueiUK+2NiZpr|P(U|yT`2t~fwME+CbwIW!wr;a&MZsd)7x`+NoelIdxqIGS4 z%Mu*~%sT+nyuUf9vN#IQH%jhS98kll%B+~7|Y!w7conMl{Ki6y)(;MGIXiAb3H z#z6K*$&B&+q(^{T1o)mSV$R1e#_`z*wnYw(u#)$k(u+W<58$fLAQt!<(|gxLhM(=H zBY%=)eO@LI9iC^KxE}XG_X@ZZ?W2I~0gG*!^8!IU7#ny@s!ya=Va#8^p@cX-rB+X; zJ>R{vl9eHqxX_WQk$=$QX@C2B-*>l_+76Ro>hZ+EY!ypl7QM9%ImY;sT@J_A@^Ys0 z#osYQwCq#G&e@!)y*DNUn$^zk`oak+2*aaKBZ1MmSCs*5=J zFlCgWf&_aQ?CsaGW>E_8eknKp5_j#wtv4Na#ogQMZ!x0CDCMcz^}5s}X%^OLju4at z$@3jx36hZJ`ZLqaK%U7jW#Qb9iSPN{tGmP1wyRxy_-z%UePP2n!%5?L`eF(^5+80& z@zpJ9R5~NPmt|M6JvLuqz;1?XO5dVw18Ec7llxMSDCw0jY<=tV3&k?B%Nb0srsWkJb;Iz_229?gLk%8Z{F=d8M&uN&JBEJXoZRP*T z*;7CL!8V(iSBEw2r#;a6{J5e$)fM$;Z-s9$m;Q%!ixT9&)s5DxpYN%IvTMycV`^1) z8X_d*p6b+4RG|a>p>w%zta)Oell-62m8mT2`p>NJU0aNkwY9hMi~wo`>Vcmu#?X-P z41eciRY3UHt_ShwpKY$aU|s?C!7_{b|62r|dQYf785QfLy!_}slgb-a?fbo(qY?mk z3cL~wacy8;z4K}&?0Z^swDmLmp<&QCN9c2&lNSzmkPI6MS%W;s-{p_L!Cq=Tb#^$?!1A&w_X-)(cZhwfKZgqO9(I{ za?!$r6R+H5TH9Otl{k_snJUSX?j&jh^!9+o7E5Xja|Y}n-fQ7#8EI)V&PM?y>EMb# z^caK(@=z~da*!!fP783jZ1oU`1SE(J==1$c00lxD5_)4F1$11iR2XdIisA0^Xc_VQ zUs_9@iUfd`_Eq}^a5Z$smQ&{kiMeBYl>vO z6B1GKe+iQ)x40$+{O^c9nOz|;QVAzwlqG@D9mv;qC-Ch*4M^es!ag1q`8*Ud<^qJ8 zSJ;*|JC~AMTT#cWKQbWXgAPcyh`uF75>PA~;eN05Fc3!~x>_ zoeJ0+W%^8aB^;5$eg9=?-$?wIqCE~mrUfzlPoe+_F*{(EXpcI?dFjGGOPG(F0Qbf2 z?o+5khfD6%9nh(jxf8O{!jbA|0TrFAM0|0eUBXB`%w>s3^SU`Z zeahzMa#-|xtF0b+O~mir%Rb+}@;!+{b-drBhJV$Y^|Ko%HmQ9m9lby|xv*Gnu?pR> zhd>Sf{3hDOJ+(P=6z5vUS7wm8-MiPp2EHgJgBOh0Bv&t#8{YOV6R*}ily+UCyQ*;+ zEW>{wMJfvliVQ_2v!6Bpe(>SXtpg9o^sa7gqIiK%_q8Q+jl3gQ-i2;$RGlCgrv8n! zO6a|3yVAFUu)!HokjI*CgoC5j86DyEY9X%Yr4cd}iNs_z+BiO3|7m&=A^+e+E$u|@ z4N<+%L8O6^Ns|rr-(BeWec$|-Lv{J2c=qAL# zoX0b=tH@6)7I%J&6FtU(D{f93IFci3PuX@JwL+oLyjrNnxIz8QY;TUBc=kA=^|@M@ zcv7l7)y3HWvcSSs2s|Qc=iX|#0O*ti!^Px^b2SqLS9c%>FvkXDMQz5^^l*LVc3qvJ zd7m~DwtlcsX<8AISruK{ggkwl&8^{f& z0}Ft`Ws8F1#@xHW-S6vnC5>^KLiYQR$k0)w?Efw8Vn3Ig7V}h$bIOAkeOVyEKP%DU)n-Ru=_A>0`d4e1s0OpWfI;Hkwx0Re$2dEC(!X7 zl6v}W>~&r^-QRnLKPrD~%?I#Ws`j}jCBOYeplg#pR@HhC>*bzEsY~V)rN+0BuM(4I zh^5rK{QA|i0@r$)uvJ`_(MCEg`+ROgT!k-hX`a2Kw6-jqO`_shXQFAJD<8AQR~4Yc zy#g0ggr{jFe`1{52$h(cYGE}jhV{%+2BEB?e+2iWPyq7(0`iFywqgw(-(*bEk^Cr@ zDfLLr(_?>!_c2ww&h)UP=wa0&QF9B~6pbJGRL7A;WE8VEZnsIEK*2zVu6nag`NNf= z5ILO4*K+s$h{e&Z0lxx#DrXTl%8p}^4+B9bBh+c-(ke$~-}4zN!+KNY8z#Fph`U{@ z3|{X45P9|7EGyzm)T?h&g*;{1j7M>i4~iDauQqe~2_aw$8G5{`nVPZ%tuMJyQF$jt z+?BnD8G=MejbB4~9?8n~icda44H{oiKKenJ&V5MzdiRsVaI5+siplg{({u4KwSY_? z53R_EE#X$36=eag*43S!O-xzzD<@H97Hp8OR zAT~wfO9zK3EO^;b*bkON=cSxaERLUn$_bm9V)Rzlm>$FwE9bL57+;VI@9X?nmF4l! zF`dm|*;4AMG~If}i!C7!^~(-9TdB8QRWG%mkgx?2wTOJ{0V}c0F(Ef6$_X6ym7G#y z=O=GZ$leDyQP#@211!~XXoz(a9i*_}Hx=|A+;0BdyXe8Zw_<~nWt4+9V{(OqQ{=z~ zR7t=~#;J#Es-u6**X|_ZTmAw;P+;FDGUwVOgLU(Y_KDZXRkDvLI@hQBBc~GE&4@fF ze^znNS57SpNg{j*iQA*i?Gi~h|6APy$rqP@Z(es@o^0EI$RWv%e?_Q+P-Z+89H*w@ zvt-?8oki4Wvprm&us%?`p8c$ga1$#E1bmu<- zQzR+SBY9Id`Y;YJ zSr7!n4|Hj8uHp;t?L#cX9e*k1u`a>`h2F<5c(^-{ztN!EE;FkyH-nmi_;f|OAeZbf zl?7Bhet~?pPreEfV}5&Nk(NG4l|s|sN8GD_I?~&C^1xET30oB`8a_$mT852D;yuLm zv2b!JvCCVY%76|v@&WzTz^0(O!n#anhAmy`WV1tfrs%^Ie942P>nS+SgH~bj;*UJb zn%K_KPnYfL=jXqUPEXyBTC=kq2;tXr$o0a2x&4^T*D49|(63;qAxv3SwWDl7-b@r- z_ZaHcIS@+wgb3OT2IM;uMJ)nARGlG50_@kGmgb-vz z+h%SqGffJYQ!u|r)c#u6Yiw`txf)YH>>BfJ4!e6<#$$9p6&_XuJlL|I4hXR(3$P5q zU~lk_JRdxj+OXO}$KT`cmtEhkEGK*TnYb;D(6F?{Y1;MVibkCJxe5$dx$Tx4x(FjY zV}#|!8W=!0XO}`(bd^F9#GceH9`i$Y?ukTP8$-Tn${W!v(B^g<_RHdIMEj;7oQkm( zYVhE`ZVlbh%kQl)3G*x?V7M-vQ8pty^75PwH}*8J*2P-R1F+7z!*aNOuw!lx8GNGqpgI|GbwBXe?r&qY68>KfZy;I5fd#`-{H}|FqnH2S+5tNoW-oD5E&%x7O{=) zHRhuk@`2aS&YHTEe3cuiVYSee{hE8 zAA^~Be~6HhQPI5jM1}W-r~RQ{?)^1&?Xw3FFgVpud#@NF?no3fH4tBD=m!frUq2j? z?3IEbRWghQ#mv47DU?fOlXjQDyXcC59cb>d5&sl(e?@bQ*(~-`iHMO+n5x&@S#Ly!rwR&c-Z}q1*k;UiV(o5L9Z$8vdSO-`m zx?<(Ixi@Wv>!dG39%@Ad-WTtSV{hv21_SVgrq@-pWxr$%AR(Er1%7SLJBfd)xyQfj zVOZGp({7xONo@9IFfnO9K-9t5WbT62d_gRLpSFpE)sRg0y#(}zty_`6#n(knugZtW zI7fcXlY(@EeN1QujV{~2bX~CNoKp+&lpshs#fMHc@w#F>$tRT=jpNdSoQ^wxjhI?o z1Wvup`1indkSsrR39p(E3e&DSl2aSQ&kiV|r5prauc1@97;)L~S%m$DY6T~_+38Zg z=l7QP-)IDz(G)tr%`ux}j$Td!_A$s*CgBmw?r=04M{5%~eCnNRbVl_!58Z>#vDt|fpyEZw)p^7{;AQ2xQlQ9<~IA7i4WO%?dPYe#mlVbk%qVA_%Rm?)TmcYHx2yGk3__{~( z*Ef{tk7BdGnqN(wSJ~3$e!lp<^=G8@Ka}U z&YpMXG9k4>>9>B+mv&4-v_|zH^SDg3Md@ixL!5HRBaC81GVBBwN@>~iRtH+T)r<@k zeTTD8zHt&&+vr%O4-f+dcQ!J+Ofi!2qN{eSWX~^%*kVhM0A*#B?xL-j#LOGyQ-~D;g>s3Pwp&UrJTcZEn&Z$63vANCyo0B zJ)Z{2nZQZEmv?M&W7WurgyP;S%X0#B-CFL)2piiaxpwWb8&K+KV?OhIfx6WzQ)e5C5b&;#)3aDE5SHl{qqi z(HKX8-2OHM_Ot6mauJ;ycy(zw+sDL5n(uTvyKN8){R)T9AECDQUPC-pWQ-r1iJDh+ z>?qROp==+DiGj4>g?nE2pz#KjxL#!m7%E%L$!{ywYsEec1_H+q9>dR{cg>j+`aG2- zIC{u|EP7N>Ed3{gy<_?%*qz|=Kn)^|HcKLv+1cPf@*TEUYT`!WFnro2(pJhkIXQ5* zT)$u$x~4CR@(Vg99-8;yu7K|RzzyhLaV76qOhY8s=D$o9>DiJRaY_?ZrOl}&aQV9+ zp0z%I=h&+`PH$}-h~U-_{jN;7zz&>KSR`{J4Mi7Ls!6s|U~PtB%jni0@`)MD>hUonDJL?RuEKxGf=Ux=^O3+Tr$zqyT^ zbWs?e9~u*Kof6TGd|)Ky;YD2lZa0Cjexl%n!L%2Ma?%CCqW5`!{sHqtDVg?lV7Tf> z0a}o^R0<@qPXnLBfie0<5Tl!Ijy@d97SS=%L49ipCE{EgLOSF1pP=jfglqE=SD0}{ z{AbxV{Y58#e$7ufmBh}wKrdWp6m_isUTkMZ;Wqf7&~K-xM{P4qUV#G777sx9KXi z5B6kVVm2ikkw6t?N1uD)nie21K&7!Xb&4Z|;YoNJWl&0n*bD2Z6Ixp5njRMC9#$Na zr(op$-i-L5irKcP`^^1$QCOiLKc-s&(XgAz;8*p=#lTbTh*g&qZj_dK*3(r*3@<4c z&$+*N#QNgW>CfPAn{BnoiQhXJ0jel-{|4Dr2!9GO>mr9|WO(b; z67;k(fwx6IzR;F<3f?g3K@h?V`b~&+N0FgETjR+mnk9?=-+`EFp7vM)G*O}z>X7q7 zuT;NsOt2ZeKU8p5Fp~tNjE#}whZ|aBlFc!|E_C{ux78bE5DiNWlfuww| z-DJvz)hHD_4c)Fg5ei!E7bk>2^W-oZX$DAEvA!z0mg)EC1!g~a#3od=oQ9A|0`2a# z2Qq>|`QP&Ij3S0UmeSYjXQ5KU@NvD!Ldal+A|RhET+oThtfk0daLb1}fOn_s6AAx! zX~l2%B0fOa!6~H{kk)%CJH3~dq4Ud_7UEZ|`#GE)?4wjfPZ?d(rr%NIb z?L18-Lt53*Kq)uk{}7!midaSTLBk+~plil)uTTV@x)$rLLk#TGTOhnk-5>dFfk7`> zuZRNFx@mJ!^cDa1_msyU?*}fLg=6kVl}G8U^`}OmNc~gG|471Dwp<=nHC87hH;>lW zcXo0-KImjDY{x_?S6?5Xr-|9ef-5K~(ay^pB2~zu;^Hdk1q1K^oSw$yu&GuetIvpd zlq7^UtN!-R4^529a#Dn#MfAzxSG1#S4S3MVKaOR{P|7zv)%Mu!X;*R|uQmEHzk=jT z5x;BufhpEGqOznt_QTh->C5~D%mvjY7@K%wX#(LxBqJZU{ zMrF@O1i@BN#cFy7J7}lscpX9@!aiI^sD_GaTL+DUoM{4s`h)%L*gE?^KVFk#W7YD`@rH+Ph7uDo%7G+iqALCaBlAovLcJ< z4Qhs9c92*nUkJ~gnXLWFqh^WVmDYey+LDrc8>Ora@R&G5oD3pxcLQuOXuyReM}Hzw zG+K}}2c42AulnXj%d9WkIbQOYiEdW7GanaWFEL zDX*%pjX9l(@gDU+LGl8Lp^&D2X~o3JFn1@Lkta!c6smf<&O%st^Y}V9&H#E7M~j$W z{zwkrnXUHmzdrf7vpx?nvd$m61*6gH*v|TP0#t$={Z?roz3d`T*f?^HzzqEh5uBhm zg9(fohTx&0lg#AMtzm?&XKBrkq!(d6-iZ&=iGr!VC2ONs7-GZ`3_~0)_`lRqIWb3K zHUQDJ-e*JvSIig^!eOY?di@P&rf@Q}^SRZ7r#+ipllRe?@p;K@0+Vgf2lNv3g zAP7uS1Wq;wD~-@uCfJt7C$kRO(4v4t0jx1dWF#D=6d?`mO$@!5OkChcm2+m+PyHT0 zFN|`i6IrXU;O|EYz`yIDdxrus``12;tUYPVarg*Ks$?i^kQXa8_t*iWJdcEd&C7f+KZD#$&-y<@WjG)8t1+RHqFr!dbVi5 zCOos%3(g(n@aO_fsDDAeh-9y&7KATs!6rJ}7AmS`{0Q1`lVEl#qjGN|<{{)g#U+B1 zHAHdfe4YwkMUZTnNz}$e27ePE_tKt>vrsNr8mk-zo2~H+G=B80VTC*t5rGY5`?R7= ziLQZ9nJf>=)=NWg!r-sx6qG(GK|U#e@zm*O@uA#$q*f~$CZyho`2Mj;1>#xpXqSAo ze*}FTxds{Q2wl@|RqeDyZGSQ9BpZH9pstroS280$6fC#~kVMoOaNSqn;(7mOx5}L@T!&4S2$d}66TD)Sn*o9jq6~heT~O>fr(T1_fh>U zjN)Ab{=(?QSYI4WU~l8yz(r?4DB_UULQA@3z)BSu8B`!z?@Cfo=6xKbGE(+wFqYFi z3Vgb%4?#HSMBtvW)f{iedu3f4E%avU%R&V7=C6KfpMCg-<*yy3JYaKvdS27#IEFpe zM;}m#KGtfS!7qxk&0=f)CZ@v~73Rk_73EB5(=oTJD1L~8bvGjH-|5tfq3av~FYEl% z>URUe>5Z>E&8QYK!zC5D=_z1Ci)FHV)T=z2R(d6+B~y@LJG^cFHyJ{>1+~NYq3<_A=QC?3}+m( z`vIyaYpdOA@1J|bi;dDQ+gA<9x(KvHXFN(O0H9Ssz1^Vx|JkLqRwV*yLB?xdVPsjS zaC^4Y+_Ngon2Cvm$xknI1lM9AmC?O^iDm})$G>xaoE|?KUftG?4=jA6t{Gu7e4?fh zdoQ$=N_xY8$PaR3eQ;%xiG{|v!Dn196399y411jSqcA4JAxw~O|9~?VO$Fo)y$vK|9tl4xo7}@m3KifI;f7>65hsAi%7Zy(fy18V% zr=PK*DInTqET!Dd_)1qou8cBaes!-)akJy0dA)oPcbgUHZHCvP89u|_r4Ch^G)u4ukZ)nVoA59)NGUt z3%z=Z{kKs!e!A?%lb|qSP^d+41S*%7L#U&GeM^A~+CteM0&pDKJr+4F3GtVM`~`L$ zVK6CBY!I!SI5#-NhM1A_DB9i~)=O-igcjby?usA1%xP93O=6-E)aLZEGg_bp)_j*- zw1W{B<`hr(&}bMD0UMaf>w!->S;NDySgGBmu}VDfse5K21VXMxC8Y-G&Kg{ih)s&X zJ;l&~$c(fYqJtdy>iRxq9*sT0Qd~B%dxM(RkNwKx{A_7e<` zjTl6GmOrS2#CGnX0kvagFLsheKBbbGF?Nvih?_sfULC-<(G<)_xA*k)X7>!3Dbao(8s=-}7SuM znTC%tV-0(g_|U+3PsJ#l)Pf)3Yi3-H$~joWlnUmazVOsDB?j>X_Vw1l=^hGSF|5Wp zFeFM_tE@R{e<7wY$YO5&z#x&tW8HKAJ@L@Dg|z2Pc8es%uNiy(paY=WqEBG_4j4{%FgkP|aunESyK`(Yqkxx1e zGjJZbh&DD=d7N~O-_O~^iY%gj$`qlb_JpA0gcYJB_RYS8uI&76Sw@&wZ#Q%8g3}ZX zW;jx1rQQs#^WgFkD_Um?ZSYF=wps+ijfz|kS=(B>RklX3O@6*Eq^5of9jD#-AY@I_ zP~imP<>&9i%vM$Xk#{vr*OPLz*eD@3K`NlxC(8|f&)$~$Vx@IxwQ+YRISfWRy`}M< z;TQUNu`6o!4;{hjNncSuk`yd*M$6B$UNDtPy}W6EB#+3-m`a_KG@KXUUA-{>35#U+ z4*LH{`JC;{6QdY z_WA!?(PPv&WrGk-i1|XC=0Y9p@Fwu@gDsB4U^tBo5fLT$2m!YP zGp(n;OuD2XO_*UXl)u<&A7r#sM5X%v&?7b6mJxZfln3L)&-n4mnH0`Nt3Wgjp=v(B zDLTqZu16?rFhNj|6SZbe&k4Z;*PsYo5Mq<);iKvSq$etL9$`;VMcCMycY)TtM^;+m z)?w$3_q!;G>buOd-s6Zw8o{qzzzhT3Z>616+o#A{Gk_Vg|4w<-08$7gs>1UC7Pfx<< zI!k1>EM(44stb8vF2geS|1BVEV}=^E!FBKfBIeML|3x;#wuA9?g=L0Rgow0TLt0kO z2{x$?85MM=hVCHEp5+1SY6C*#>$-{6W9N(}YWb=C7{q77Gof@eC-{mQesB}>%okhu z#v_imj<`4>g@H39vhnONn37KrcfW3QBo}gq35j^^a9o*3q+bm^GZ$bvwNo5jv9WJEI=0VmLA$~hfGJZ5$ zoZ;2Z(&Jl}K1g!YM}Ia?V10Ewei#F1e|RITPS{EAXb%B{;69ZOM4Gl8)H$}f@30d1 z(9R|-r#~J+H9TXP@-x^}Y4AtB2Z~WDp|6jWa_$3y!Yw+|0Ys93O{R#4rUvP&datb^$_ z4ZV0;;?@xaqN|@v3cf5rFh6A^HQ;DxV1eC#_fC~fR!!VhfS7!T4gBXkkqnL}3)6In zuO$cF#K1hZA04xAK0rK10Po=sew_Qu49f9z zzj)S`0jJxEfJr}OWDy(u`_ZU7wt?%6tO7Pm!({09f=Sg>>nYXSPKV+FnfAG_@1Ong z8pP&B{_AOyQqZnl+0b%iSD>Og;1TF!o$a1WmNU@PGEk$96z z*(R?^GPU+^9zD1eYf7qecHo!OQ2?4Ry*+cR_={QST2y$(fl{d=0D)*|E&XZ1+y~Id0``vE z`&p&5%N7MECJ2Q*+uMuFn4u3vRL8>?!kOcTXBRhJyA>hu8sb9%xtddq^IvNK2)NMd zLStOT;Oo|i6I3&%s00`O+46h5DIUBLH$|a&|6Z%WG;hoP-*u+v#%F!Q2ws(S4@9*2 zo$5KAfX*)0$X|P3GWF^W9#@2{89k1>MWI`N2_`l^>V8V_LTA(<)rzU|6DKMZLJPj0 zfJej35$~QQZUSc@zGNW8_4dL0Mo%kcn)$HdLvE@8=o2Y|fdeN>Wd9vD^3X00b>UF! zM0XIik$WM3QSW3cAlcO^NFRb~B7qfy`m72*(pWjv2jZsYx%|DziIIqEV~aIAI}F~79Z z(7XWISdE3h@yCY0+T($|H*T>JMB4$}8vtIk`-ibOw8hV*lSFUORn-3UczfNV0xa{k zJO(#Xm*oZS7&ufpKW~U*UWb9$$TS?8IxN`t^|?+?LEEIzk`6pV!U*J-MZur8NFmp0dl# z-`S1D9Zm-2tka8^lwcJAtcbzm9Venw;bMtU$oFcRx^QywFUKao^eUrjmh|dr59oxN z>j=wzZBedzM8r$&^Y^9F+^-nA@1un-Gk~_nOS?huYNrj`yZ@S?+#K z@PT}KLFKKUZ}Ob3daBP^5{Q|}#TZsU?aElmsT~TndvaltmBDlb{l9Ex zzxM;m^u?hc<^L;Xc~hIW7s>zM8g^!JgwX-qCqNsliReV@A$?(C;09%4S=!Up+o!i$)4XqUDE)lt2$5y!$6t-9Y(fWLKy6K2MguZMMmAB zP`B9s`}+grKfkZ*IEoQj#di?W4SM)LJgQe55~)?o_%B=a9r)Gi?(zg+>%2p&Qj}ZB z{`*}K_2>U6dVBi{Nbt>aI~Hn$na>l=#3=9yJ03E*kgqg6u79sBAf35dfs}m#%Io45 zE6%CqbCpgXXhvsDb`q^Te5YGk38McWmNiVtQlhj6s^PhTVY9LSmS$V`=jz2kfl_OQXGYFtI(Ve>56J`4U(6&AL zWUxE5?I&+tB)Y8tu{)?6Vd)51m(}h1uns)aP{I9rtw@p#?w@s1SquP+el}f9S5E+M zIatJvAto@E@aU6CZ#>8NV^3N%5vGbqY z^!VGh-?*h-NdNoSpVnwyWSLtN!hWfUZE5Z>u0z~fl^MHF?+Yt#rzcn?Rt?9h(+h_;6fzv&0)RIip zeZJbxA|*ZWK$roh5wan!O|4F+qWF{=6a=Kf7%yJ0aEN?hIM*7+#zHEvHR%F@&^*fk zsGMW~LMn{Fp9(e|63(z@wNzWkT)j5bNu!n8XH2)&F#m3Rys|2+*Hfa&tExz1v1Spn zB?VUfg7DX2{E2n>-7I8*->#irA%oB{8vVevu;eYe~36M>$jpT5% zw1^RNh8azWxei#Zv@mOKeIR=Z9M${B8unQM<;|j`adY_CpUhgY*G^-j?!s>9!|q&5 zXl~Rj_CMOKGRBUSqJtOCVWvLip(3k@hn0w>#KdRY^LYPmbL3?S<_lP6iwP;G*h2Wg zr+hZ$6fvl9xqnqudgsHU=4ACJ&%h+YIYxOhCgyFq{@6bT!%sLIwSOD3l0FC5Yqt!r z@Hl27nT?P?L;h2>Ng<+ViWM&<%6&JO{C1@`dv$B6L|rzHJ!<|y`5+yfpmKpa`$qw( z4}lRAh+6{je{$5Z+5uL0rbe6QrnEuK0iuFuc!dLaM+cChT&8H!#S8;gTTkmi?3Ai{{C^&cRM7?Dw-@qhm4$+?NydJGw+5UQikD|ea%esD1`L_fL z&oQUq+aKHK2)u$tBZL7VFa|NeS+#PzKZ~-%C)8GNe+o;sELW3GXfDOTZmYgr_ZdIy z@Hx+zK`4NpY3|#T6+ka0PpRP^xZwJCmb@`0aN(19L!ln4WXy~skv0kWMJt)RlUsvI*T~qDG`0sXa6w@Yb8kBdn{*Rvg@F5VY8Amqj3oVSu3_xFN?lPDK`D`VS{Ny zpI&Uk0-#6>7S-DzR?!XD8whs);4};_*xjpnVJk`WuaX%}YWDm)1?TE#r{N2m6=1>V z58>9^Fzx4CHiLUYV7|z^M$OKugg!RuGq}op*GdZsJF)%k@p2*vg%*7XpYoLYS225Q z?%?0zOSczuzb_vnNk_lhL2hb2ZmS#~m{Sa5N@rC-tTuXr9i)ffnkNYjkWxXEGFj>$ zPuov2gS+oy0k{^j1sJ^lpMkvXsG2*2N{gWFkzUU#E-LD^ zQGDqttK#VK(M!YGJ>{-urOqag6{q4I61G$ZSmmpl7CW$O4)aRuUlA{RFC@-LX5vU0xJx!z=u zzy>lcKmcavzk5Qu%^xB6-}%o>8$XWT-J~+=R8NUC3~UaQx3scY#LPCJS{Mx*xaR9mhXMsbPon;&mEhNf5EBqwp zTmJf{@11CVrifo-oW?v?Cj*-^uYNS$%HGyM*UR*0lSMY_qMS9$9DNwK<(w3STjoyZ ztrhRu`7^&I7}+XOD?s0I7VvU|508ewWp^A=qf?=&WD6NBx3Htk?2&EyfRh0E*S~)5 zE;Mtk2>Vs0AzF#IbZa*{Y<6Ol*D@o;_umR-3WVf4lKrZ`%WMZpewXkFF7SA1Z?3rV z5!|&_o8T8n`p(zB>PSC8=m&StuI5VAn;gcXJ}r@kR-1hItO=V#2zU+_St!{T!I~{M{}SB-lv+ymZrJ?vg!h#^F$^Ee(M8_vy%;2%lh`oK*3;l>aq;n9*V_>S#Ne_KDTOfvxX5}J-h(@&Cm9*u3i@~8&CF|hM2AV>ZQvWvm#Y$Snt_3VrqskA;Z#nWbSBB z{Jxu&Uz8j#5)MG6reBaUY{I5Utx@=xF~w@_qtxVl1#scHcNLT$|-VMS?+H0FOP`7Z{;`5)9tuG{$3Qs#6l zp?)p3hHklf=Y$My|N0*wCiB_jw69hF+po25tXI=zpn9*hZgnT0CCa>L)x0PvYmynA z+KV{X)Rp+_Hz;&kzh;9~6fID{{}0s`g0q?u@PK^SdGcfTqz*x^QUYocvex;>VE*Qi ziFXHg&?O@L&dM>pqxND{xL8EBJ#RD+vv7pHHf_NqwjASsJbW+fK3R_8r9#*2`)(^R zsR__#6pCEn1@uVw&{0rg^PvIM&I1JQu#N_>jAZF^S^ii#>Rkk1i#VGrs3O=6ehV1> z)A>JcE9+_PxJOvE*F?OkW7lp`w$4!v<7aj~A+c6Oz}vELw^ZQhHfC*MVUPLf zK&eANNO)IIs!z$_qE&GH0p0W;YV?K;ZA-BB+MBN5srpTN2TIU__o2k#=&oToC09tgv$k{=(g}+d^JcO>`TxP(ooaC9 z{A0jyklIP<<(6bl+qP`~eKF$aR`8n9=l5!2P$$y9JK|j^+QoH7=0@U0+g?hPbt8`t zCSXqT`2w5LtH67)5ws%Q`Pll7EiMz~FHu%V45zB?Z!AXKvt-VOva&jbK`br&PxgG5 z$s?@mZI!x8CjBTc(WJ;=GYj^qXfs0K^T&{MCO;*|^knmNr;4eB=x!ohqjoVqaPEfQ z-s-rg>UsmbAcm9#)7B2iF*MJhqbsSkTzyU5Ac-lE)TjOhJOV?AI+6F38J3k)zYAKO`lTyZZECj(|3^Z7x z1?SJJX0*QK+2>ki=V~Hge-%)gVL|DfNc?0|&CcEh)=4Flvq3eKC5~~!e@NI+f2mlu zQZxQ#B-^&ZX|8gGK*#o;Wc#7VT>sRdNR3tju>G@PgPJ1tq0O`XU1k^NU$UpEo1kuw z2;@sH>|kzyMK#ssjmuZD)8y)CnYPFlJ{(}@@GxWgUAmP~m6>1t(?-K@1r>+(IoLWe zWAbc#xQ4tQsxZ_BxV*1LmZ*Y)PQlsTE^J%9gVJv&&VF_lfpgZEqRKm16JFM9OxoLC zQ+#S9b?VLX`GqL}1!=-a9fFaXcBcO$HES>3FEiH+0H&Qoew0aSNd@r|erR=&{fCY0 z@9jJd@iCW-5?x!YF~QEoT9|-DdyYhTE)-UIXZr(-_)_!MwNg5US?CtaXzM z+5$V(clg^Xm+_78qnu19gM2!4TIP|#++Vk(xi>a>GlZuuar-(p8aD8irAM|KC2uhP zLEkoZ-wjHy$dZCri6 zPsaLK__+#MZU1>eIJo0aU!f+<#Z!E(mAXcF9}27t+Y_6VbX@!HDpy!4WX?;aR++`d zbQEWQ@t2elVGWq{7wZ1}-*JRxX+u@jfoeoU0>P3ex6$r2H*r*t0oJ5Ww zSI4u1bw+vHDW48t(S7xdE|E1u582w)9rk5IQ$#D;O00#51Iees)sers2QhS*RN4?IZf8QwsQ2m z`DyMLv2ZAoeQ4|cJm-B^in;3Iw4F)E(h~po$hq&X8L5r4n2?Klj_j-^$abmh3b z6#&mplh=xoFs&}@RSB7VF~kK=ySpV0hrlXon71uJD`n8Pvkuv)-VB-w;?GNwcj-D{_%%_)OQ5YY$E4I5T?7AJw#7^gES~lspKYMIJkA zQY2}1WKR(PUm@LAny7A_uTR>ylOLw;u81uTE!Vgi6E98*Y8g}V>tqRJa^d{-7%bg| z(m9jK~gl?2}oeRotC$> zu&{vLy{e5|aD+W0-X28>cy{(>bO+MPC*rN&ZtiPwxC42e|9&RS0C@Tdg1rsn`WA@c zsZ|vU1LK9;67kbIBohOsf`+6MY30viDBGE|`~HgU?AJO7wABzJ1b}Vv|J_5lHuB2( z-|VM$=$7h0AU{l2RKJpR2C^VkJF!veuz_zoTxr6S1>+HG3Ra^16O=$JukHgy`9FmI zTV!AyHqfrOVxw@u6aRmczaIYNK!baSh1m1*qVMDXnJV0Ff&GuM3vyH@3^N+8`@$Cg z;9^i(3pNl8`?c%;f*`}?SXS!h@&TwDvj5z_lPUryQC?);UjcM;NB&LtT<6ZmT+{oR z$e)lc!0g>|pz*yMjk&!zq2-Ao*>Epu*#?pnqE5#jjcPwvi#!o7&e$Y|ryq!XKjw#J zqp#X2r^K{uU)(wdrN3O7<@8_JkuJBa- zGcJ2bvg&|~Rd(r5Ow)SVS?|j1qKchqzq|F=nM$xkm@cKE7mP*tnIzBow9oLtz?yYh zL(AZ5=}|S5Kbu=LF$^M@%fnk&`r-BkbcgRI0yX)ACulr~!_^CT?NM14IWndjH4_=h zM?F5AQMFOsm+&r?`iE(J;e`SPTzFgOJ%Xm`fMareZ*+f1QepA%PW_|;CxPKP*T|-basq+QuEj@Vs{N{j_|Wv;l3O0YL-Q&RKxej2 zruH2VeImM36yKNQ{P`>?GCV82PGb)2RPHnJJBs^^z&dBDgM*=ZHe+^|k#g=*y{$xW z?Gx&}e1KQkJ%wJSoa}5%gI_-GycvxJLdMJU5`aGm-y(-%%7;=!UB7`=kGU~W{A~of z&|3y~>5>{ccq?y>b}%G3bUYw1Y1VyU&Rhw|f25<1b)_ls5Px^pA z5Mmp-->U>~l_sz|Yp|7gt>r+z)hiH`IUElV-xVh~U8Khtn~Jgg6+|*il8WO`b;JpZ z;KzmIKP&Nd_c~NsbV`7DsAl4T8?91UI2_Fo)shS{wI8R53H>UUF&q90EmjZi^)F&v z!mtFI?VFP`(GRbUtv{TblM&9l?4@js|0cF`l%$C}l{=-faAp zw?uN7KSG6d8}0qYvn>+Jw`Zc1Pz(Hxb3Ef;X~CzkPbZChJ}-^5s-tmzHO3$aes)sH-r;G ziVSh&xEjAngPu2N^WVx#lYIQ~m10lTs~=9ryEA9-Wsek2Ff%95-`D)Y>Sc|yo6++_ zTj^96<`-S|>ds&?u#F9K)FM%z>}D@pCdbe=&o*MWuD`ocAL1I0oY1{Iq~F5Bw}ll* zu{UMX>?-?C(D~FbjeYSGI$=owf*$Z4VXt`@-9(W(r@l#^iN>Q|x|X~*^UyZjX|Nld zjz5Uzi9`j|9yjLK9ZF7!pos5yj|H%O4@`yeXO5S)xrFdFQ5BeB^-I3@CcFA4dZv>6 zy&&M>nuQ2sIP*OYwUVMjSFoq4CBk!vJ;Sanj66+$IUmueZ*a7QsPEI302D~`zBHx7 za{`MUY~SIe$lW4k@4xXk{OpNUoqVSu4x$6zk4>HgE7lupXIuCY6sfio<{@6(508sP5Lyaofh}qnZ?JgU~U0R-9zjNQ1HjzYY!UMb`W_uq-d9C5(JCzoi-#yh^+|nJu zDG0#q33Qw}W#R8lUndb}?rI zx*~ju-~b~Y3h~6SVhV($SoYR}4G2{tzsQ}uc`9W_S)=xS*eegwL(_M_{j*omm?<ICv=O4bZ?X$}2;0x?=fn+0kOhTrytT#i9(C z$mzbn!dIn>OJUfXFrNFMZNL#Dd&TZ4Tw1 zDU%^r)$xMD2Ns|(j*nnhD*apk)N_nb9E2(iWQvo8& zh&`~sSdHTD=2Ly#r<6U2ZRn98Kzy=jJr_QVeY(1hn9IGkoB`eS{8~BSkNRK?;cq}3U^GNj_+>4}&Bu;+ zdD(UqE0sVB7lF<$S+G??NOrNCW}B9Mh_fRc%P}c`{=;kB(~HN?dde z4dwoD6>*ORjjGY?jz#tWoF^rs^ylY|H|OjfX$&w?62$%#7d!hl4W4k5YHl_m4^~8q z;T1B%fZaNjY~1O0w!-LnoyoLdgd7wtD6E>+YkrPBXzBD-@9Q!FWD}EG|3~hb=XQXL zD(tQ>^=4rS4$YfQNt{!Q5cDC450_ea=qzqg_`c1lQX&o@67w_ujl)cY4*mm%?GiLm z;vH^(cfR;#NHFrIdT*@^+3o1E^QnJPUg)rI!Bi9lDrC(Yj`H;Zv-*U(AkGDD7PM9C zX!lWJcRmq!(!3i zfxJEssgvffICXXG)D0^&!8LCN8~VM5$7-C43ywn3Y})XVC{_EARinBmQo~l> zyt>(3po32;j1YCt6${cMfF|afi{S&1;^97p<@F%!i*H5;NBKT@0{C-Hft{IRvm)`+ z#2T}tn~4mO3;n`Q(PN7%HACCLMZJyq(*)x@T!4f?FUq8k`JsTv98I1A`J&1 zg6|FVjrY5Tm<6ERVu*in+(#qX6xX2lwqai~-nyS{{ev(Jw-S%wX%HK%_?B#ZJDwGT z3ewqb523{foB{$3GQpUZK*h}pzecW|^u1cr+@yMe?@ zzjCd6Qfnh(x)$1H+n?eeG}nucl8f3>@|NhmsZ@b{gwHD|A{FLawQ%4wdfOt6H3Shp z5CvewN&(as(RoOiN8ZVK zO(wjd-1x@1H*D+^;G?z(oj35Arb6D)_bX`@rY6NlM2U}Yd(CB&jY1SFkSBQ}R)sz_ zD$%cHWsJLJe$^f`6Fr%bDEyGh$Ac4+iv%UzUemRPCrc`ec9R69f&dJJM`lmui0l4_yISzn( za1_NF#@Q>cDWGlY5!ZDR=e~~1;vEqf0Sj#oO8q<%MKjJ2ex&`-XmSH#`77A%`l=4P zlX+^N;d)1qGaLv%+)eBa*FHbO$gZUTGw`Q#+=oj-C;c9suf;5ao78BOw|OLV+3;Oh z&M*!2FdR9;CMwL@)@mAR-iE#zE?`vfFM9uj zB$<7FatmyHzU~pKh&|2o%N8YcVI|QXE%K+#QY-*Hj=xrFS$`5qjY?0C8$3DiwKD z!gC)g!lv!`B`$xQ_KM}56`1RQPw!NV_;}e%H|38WgZ1u_9U1Ek_}h|}Yf!oXDyjKr z_%sL0s!59hcq`QQr5ow#!u`_SDV4x4rp}D{}Ar72z!etfj6P=@n32f7q!eh89%AZ!4Wd1dFk}0}(+rLCwCqX*W-WjJxW_sF)Qo@9H@^>G#-hM~al4-oqe^vaR zP2$wp6Sx6g28-XzzPI!ycDp)3({S_=lR-iOd^ z>wJk%cl}P^7sAdb5qXp}^!v2f_2^?<*@5N>MVuMuGa__`5ZLvJaP9+dT;9p0CG+h{ ztw{4~Vd?9)M{2PJWgevjyOQL+pmmUdvY?=vRa z`t)B2Qx6DCX{d*%NVU`rnP0%dXTe;%eCC3MmIgO5f?Jpf_)IWS5sN9;7BsarnEv@q zgI`Jq^Z3%LA*Ui6Lq_h`2M5qv*{YY%SzMAKgwl(m*N6-A_NNckL#+}+C(GTFFqOrS z))!K7R3jK1zb)UOv}tpiC36o4pi<>0zgY6&hi}*>5*Zj`I^&qfe&Db4oG)fp?Q^%z zJ4r}m63x||gKmX0ENlyd#1I-UZ5#Ie#n_k5JdR)7?#7{GbldTJ$B@WH+-=Ek1hDnF zY?q-0=ORhdTAf8*z7Wrx=;M>FB}PF(aXSaIaqHH#tZWtN(a{9G>qfsTS2`JQYz=$C z-7dCFCwcBVW}b1|#}$A?$RGG`liO`^8=_x00{ep~2%&J5whr)>T8=G6jqYO1VzTJ} zu_8LSonu#q=0;a5T)WX#7vm#@xgwrEKtq>q+S=oo@mw@M#CzDvZX_L=Hp8o7p0@Nb zfnYtwXJ`IN%9a-rdc>z?y2PDP*n;AR|KUBvCy$#{YW48Gzbf7^>FpqoPoEBJHOj&- z<_ImRmT`2#SkTHF(rbt?4z!nW*a*=+tJDO!<#nq8+7tUh$q}qq37b9P;NqLzdSP4M zK9SE$Ea=piDl}}d>{*{_PG)MG*PHgO%arCz-bLM>qh@k-G z)un9>MP(6(!BO*%37zz3wg(~CyK3~M#@K}%olhqU50T#Vy~EAQ4*QU*alv9ogreu6PWr7z--QbVqquCiUpg<5wcZqYoP zk)ZeIWQrV2#z#)-*E2h91CYk8hQ|ia=&?&pL$f*u2g>HCM`ruR>}8lhd>PtY=Pc(^FC#N2Un}7eO;Mp6`+*%d+Kr@%Aj-s811uRU9m`OX za2w0|V@pj)aV|pnhdV1iOqVyuYMgWk!VS{1Z>isMBGabg-|?(}8wW6Lodt*$R%yL5 zZ426+kU$iyA1MorJ-j+Q6#F!dJyW>lQOg-W5wrIvJR^b>m0YWJo3et8dfdG?j~`0?c(n26L^X0`a%SzY%dPF02{f*fJO|t zD4^@NLZHf0W2?s#P$WA0cmF{(M$VX|t+dFMjyyQbvq8dsW$8C;rXHN6$&w42GEH)m zLxrlx7Xd+tAxA!(zqKKZpG^H)JR;agI6Pv}(TlpPL3SDze}?_%k=0Z=%cI7~9lgw; zxO?0`bfG8q1kl;YvHh_ad_u+J+A{jJMiLkSe!ZAqg4#)He{DzuN^H8iBR`wt-bx(n zzHKg8$`ObPvoH8n+a%ViKhCvl6Gfds&O=Nx*VMCZa%mj4{HOla?H1|@CJcXI_SUL6 z(tdo4#tf0!g1Gu&5U=P1scc0diXHCXU7f~`Oo6`_O2o~kiPlTbq5Cmi6qp(ivO-mT zBvP@U4;LnNPiLQLzvH3tkzH?YeE+a?L(5PVwAwv~?Ve-KklcsU+J~p`-a=gb{7Oc_ zbAguYFaT2tL#J3hwKiQc?^Ccws&&ovz*vz($?Frs4frW8KmK`Nod6kOLifRx@*w#_ zYv@#m2~eGiAr%&#AF4or}#a3I_({?V!@$cB>c zI=*>l^~@@bbD)0oy`&VG3;49ze{T;pI}0UA;Gz;yTh8$~meeT7riUN-J2=-IGKp@O zRt2v&Wb2T1OsC6E7>-R}5^CC8m98o_Jk@zyTTrUnbOwSFfhm}p9-Xv7dS+;mbE}Y) zj~6-)%Ax|4HqhFkzHl=4q6_9dR8p}pQv5eRN)H=Av z0)PF3^7SuNm{D2_F&Dz;B`T{_jT3+vnv@ydIh(bg})V;aQ#H_RljOI5C$j%wLhsa1ER*oKyG7qF6F%yEH9$# zO))QoS%!8*G#CuFk9bB!HWwdszgETmLPDzc4o6GT=TJiiDJ*s~98*msNS zg$&KSvW)nN7!0tewXe8;C3 zSKW>cKFxZVjyxacJ>yv&*J%*<6g&}CPK^_Aw2mJIJPsq-64&kIf;b%j;cX$-E z+$X)M#;SZ>Xc|(jS2w+~nZ0M=t7kG4rCJ`pL@T1~ezJm5*6s(0>tejf8g^k@M3p(@ z(DQ-T4)nZ-<4R$$Z67q&;sx=BBhx7XbY)a#`qZcc*hUE{raT?8U+KNaqW-9gN~&=y zm;_MmkDXBnz|W8*&w(HOM49_Jc?@X49xcRs70oIxRtaGkKlkAqoYN9886_NDl8oNRSXOESARJoi zXIRxN&t#~EDyck6*!>=VXIRzFPy@uQnt%?~f|3qR$J_O-6dS&13+2Wl|DmSRyaEOW z&2_kC-Tu}x*M~1~PE@VuzCTeIz8AOdfFx1vwzLZV9?2sx4CNTYPM8@f337`xLFwq& z=AoxyqfMW6pq{_2bR3cWdW)i?z$Pk^5BU>giDB_1By z8%J?>wo4J$fEaK4lp#}gOW8uPb>E1)iTvW1UhSf?gJGna?~;J@)ipHl$$yka$Ep z*N6FJRIm9xoq@ZQpluA5lAG{)V-(ltohcFD8plfNO9Zeg<2PR=*T@gl@LDn^?{$yAmO!1Yb;vtrJrKhGx8Xqe_m;-H;*2$zPCzGATLi=%KO`5Pjj?6N5jN!ErhZA$nyY}U| zZ;{`(8h)IE^#(oUkZ5)r$Gkz06TxmS^uLrvY_9CogR*3xu#k9`7ko&7! zJXVDGUL!rF`HI^<|Ho(-A!R?P7WX2&;Swi3?(!+h@6=mR&5gJ!d~2%NKol3p%;p7s z32wh>m`SnFQ6L0fB_@Ix%8teEv3YXkb^&pTh6Oym0lI9`eRAhqseFo%!^a#7Dv86- zW$3fF2aeD;CRY`_zbVNMay$-$M*}RDLq^W;2v9F~o8h+lMZNb-tT#EVG+)=j|3(^G zs=XzKQ^Q&yqO<<^XL@90{)6|^83*e;*YjfEkH$3VxhnrC3|t#)-M%k2hvNb}kT_0; z6MT?z0K=c=(gyCP#Sv!RW!3Dg0KlZ+c7DQyIm11R#aKI)QKFEnEGnLoPAu+^vsasd zMZE$0E|^90dv31oh|YA}(y9AN78kD#ZtErt<_0IN4wY;Lpr{#)VlEPf%)H`4b23a{Dhr_sa`oX%od6=8Shfb;`8M z{iw1luUN@ED=W5yOby25xHWHu_%jt+Hgb$H>CobJl1|HU`n|XvS=>hd;uUfmmS-W0{El9_+tjLCud3AM4rH!L_+w5!=dqTb{huQTiq!L)6=4vvLE|~H5OwD+JpGD!}>Qd7r z0sUOlzpsM6ImtZV+6TiwOx7hueRY4Sb~m0_dww_>Zzny5N?v~|A3Q}60xZcKr@cl- zqE$SnAsQb!L7`U)=4G$VOG{cHAY+a*GR*l@J#3l(g$}s1jos$I@#br%$Iw_1k-2ez zcM1A<2uAX&QK*}^1b zV}*Oti-EfW2g;MjYUAIevU!K4%cog%x%$iNv}~Fmv?6P|4uVJKT9s-cRbkbzcFM)d zH4r(xd{n30dC|HBe0Y;YEb3gMK5I5BiJ^6L%ZxLuP|4D$?v-E0k%|_v9ndlg0}81* zQ%tV+qA2l3F}v!ZgrO7?7+5VtnB+LUV8wn4nV9yoE#lpqIfyuKVyLlMX+DMz_3NSU zW?22yV+JjYd$`cgtumg`1eNw%t>}BGdlr8Pt6S~^jZ6u51EA=!#1DtX_vwdaCqiHC zExh6YM5VR*^&3-k9|wsya{Xr)-0badL(D2Sb5R98rHk;53KXF}Pf=AY+vwIV^?8Am z3;?3v$oHT)5ZCX{4C7Cm2dx)8g)~cQqmkQNY6Cy49DI7+AC)~Qh9Hr7=8qM>jEgYt zVu?NGWPN(SQ-sbJip}cXb{q;S@FrP|DI%4DLYMwv5d}kz|vZ*=_R6eq*VTHWxuh=yRYdL(bK|5Ta z`;<3o`FiGUCL1a{YBsO3Dba>4ZP(J~%r5(Wk5IW<&XbNstcU$b=k%^|Yr%n0s=#Qh zO=j-ad1#r**u%nNXz7~qcT0E7+5(1kimu(BeG6F~d)}^_+P2PL5>cyT4+FBzeFc$P ze5SWklssC}oOo;d%fvV|)0T!Vn!9>+AtbJk+x%?+W!dkDj}b#P4@!{O(tSOXPm7et zhx$^~(Bg6YG)TF55z_N?f0@LId{|1D%F>U)D-%HCM+X}$#Bz|=>uUD=Q67{p^XMuc z78sI=(~In(_g0Cc1ttA=t6SC3-!C!&xKj9SBpG%Q z=!g4Qo#&2M(Cgi`r`l2{zr=($;I_4}35yn;&qS#&^~M*Q+i74Xz^7K%gT-otX8W~P zS0TcO3~I$|`Kvw6KjVf;6v9~E&SFWHPromi z9$4rZ=<R`idfUBBamHHU}E^ zo9IOtiCeq`eTb+9pSM4E4=(l&F0DtjMz-DbMn{Kubjn1H>r$#b2ZvAE`#~H02FGFcdBeKEc&tH_UE+t*h8eoMBM6+E3-~g8)SlHOu zGsGS2(1vdy0Z|Ae&vQ(GVsGE*A-wpP+jxWcQhfS5UI?UmkGdx$1|2pTJA18`k_p^w z35;E5YGNYux$xmdz)3F?RkwM)8@b>?GTXqKIN4p(BhACvsyu~mhi?j%{L7Z*<(bAn zEXCw{t2e}Ck}BoEEFm95;7$k7b{~LhNAQMO*IpLKw zCJ3tSl&q{eZ~Ii*#zqoE2Iwe4#sx@*Zpa^$pNfHWu@VjPv)I4IeWQz0eA1R zB8wBHtbvWNnbQ|n-6gs5T(~EluL&EygCXItF?ozo8hK;|R4`Rq9C>hJX&ljikV78N zy|yCF?2Dp3g%q>p8^YXKuy=c1uJoaST-C$);|T!h?rNVN%MD)OqC%jLiW6UwrNja zpW7x=1+Dg)zrZOd?}O};a&G>cjQuo~1JN2kp;&K#ZhI>kR&N%V`?R#ak)hMCG3=AR z+1#3D-9_F;U(15^H2kYj^0lDmNNdYNI^dzo>R2;3Ps0>{x=ogrn-`7#huTff<~B#` zFL>49dhvV7&EEe#Gn3sMiNyD!IWB<0AjS^A!mA}PG3>okMCfwBZH@tM{TUKvl?ul@ zbgFO=FYr%Cg>8M>^{Xc!P&j={dQN~+lVd`s6lcwnQYM`I9AR0_W z$o;4-a0oiXzXKt4^NY#tLGU*>(YA$kpjRR*@YQ$9?JYZuJgzegW;N2WVQ53h7_ZZa z=_asm+o6jE$p61BAD*@Acg6gj5S=J#wtuT~sq2*uR8doWuO4)qREx$@9u9jaOFyf+ z6KzI3`o zJglr(1h&@ga$69AtT8{@#!F_~>F0r|_`=+wEF`vfzc-X65PtQmcF>nh3K}%6+8f*L zJ_#z#{`s6fcj~e8so>`PRFi`jU^)2j=onGLUVw`Hb6A%~{91>s_5Vb^G*oWl5ckhj zbP%fGdn?)k|DLtID^SJq>OWuLVzDwk=Ac==WwWbaQ=gLJS2}9++%{=${65)-D60am zH1aFYzo#av5M7=gFvlP^x-BJ=H__u}gHWwq!#Vn=>(NtrI!x<96#L&&TOduRKU5)5)1E#_(-kV1Zj?$wE%4?PyvS0;F%B3BX1 znA)!rd##zockR0TI_W{`V5BWz$_$M1*mG58my6qf<^tFPjY$4;u?4tajHNx(n36CF z?0|2Sg5Nh%c~=K7&K>LGwk7-pQai+cA{ z1P{pVn-nJe`N+%`{Y$25&%gmjJg?ESe(VAxp@O92Oy4_*RJO-sg;y^z;V-6Z$$udv zTN_1ZoPDw|6%)4t3)rg9q%;xu{s9l@RA^!Vm7-|Xs;VEcvYqWmH)0vuXdsns(cqxk zyIH1Q3RF}FlX9gpd*5hs_&Pl+{?9$K>|Ggtif_y z{c@VotaO|XVzy=rm)0`&wuequi3i}*1&bS*J;k*#xAK=95N<8b4?2X}_LV%LGQKk( zK6PllsjQ>FV`Nsre=zwUvziH^&I@I~`w%IE6h%m>*wFc2(GyVmE|?tGQwiUERK*0W zr3EUU1Q8n*RG}(pDkrZ!&fTk*6PU8ek~g;E07o0z}75Q=`rsfRMdp#wcSZ1b@RGye8aiA;sR*s zUJL_dUcu>BC( z`f?V3vVNPJoWt-{xRX;qRvlKN1dNq0SCHTMsF+C1dTilCbm>;Dg~a@hl@?btz3GN^ zNL>)_9b~xHM#=ootZD1rBr%p*baFeJ{}unW>P$%5!JdkiB0u zwpQ2iOdSD&%vv)u3_``SBpfKfi6f7oo4P9?h`# z)qT?17I;k12lpw9|K7F(Xo1Fb2Pxt_>%)SAN8WyjWypE+m2X7FwG!v!yV_K!I zN*%2==>NRHYMOkf9PiBjF_0f=(yTegrQVK*^pZKt>_NsFYaXZa3mwdpb978>`7oWi>6FmBy+e)>`?P@F@mSp;W1=19oa{cf*7D$ZruCMvhjA7& zqb>3)^MCPjZ5iJI{MvJi-xE31 zOk94=6zTchR*ee&Dm;7eA17AJ9V8hI=v9|X!{3*S0CLRP2RZU zKN$U!m>S*^j32p3$#A33uQ}ifh2Mg?wlQo|J{fdVIFF4p;Ro26X=q?BzP-B7ZtZy8 z)WJCCI?-77Et>Hn*vu64%r`DnOCM*dE z-xCEo1q;8+9&*elEDy+Mk}l|Y-Mm@wWM%w?HJ!K}C&3M_VDwwG{>V^_$LDrK=dio~|G={MFZAuwWN%G|6 zMHbhBXgwUJ9q$Al9{rb1!-3n8yHBM5DIg0nO{n2^+=_pOpi<+)%vR*r;EqyVj-ZC; zk13b-I}opRm^vA!*FcFVnuIn_s;G5D5aK%>)3y2ZxYVCUM4B%bLNulGLm$T`l-Y|7 zWyr6V@vHBa%KXYz*K^Oo?k;l;w8lg=ql|gt;Gyz>s|?NN@>TaZ_l~2zlGy+o%xajVbOIezq)^ zGyn);G0)1#G zpg2#q0`1Syw%st~3}Hh@{rGKk7h81)N+bGFFTtqZ#ROp(oI;FNV}(awz{*`>QpNHk z+48pYMeQr${_08dQccN#Y}ohP!s6b91Y)=-WnLJi`Tyfa@MoK{_I|-ahP=7fwU&lY zgn8@_$sgKO+C{P~tlp%jMTvc9YhI3?BawyQgAO-B^EC)IA_tDX2MLnMa%%5>Y$zD! z#VNb!F~`2kJMQ1+R4Di3OPau?1MG)t%ukfMxBbC6_Fq$H1Hm}*uIM)}`Tn+|R)VdO zu%=nxQTkJ(KHFe_K@0~Q+^^9-=9R+wcz!F7sbBQps5=Uy``-#XXfG?o2C?k-Ah}U{ zxA8!_!Fb(2VXvB$OkKT?uoRm;Q*IE6hPHnv5@;Ebej6>2a9io(gfvcwb*|`wLj@s_ zHh#3E;t*VK(qI_80jR*~NS>f7gKL&H`dSDjJGpC;S_HJ}jy>>&aLuWDjhStCsn!YC z42QlvrfFuy&jW$o?s@))Y_)T~N9G>m>fIr&S4>+Z#;gV%pp!eaebV>VxKe9w>s8$> zTYeh1vXtK%aNh2mz<(tVPxx!*c;w}j)GH5Sw6L)rByDOE2GSLLv6&L{XT|S|y@_(m zO_Ii}l>X#n`tOoySdlM-dIp-B{JPSGM>Yy(tMk*qH#Acz)!>V=u^NjVM}xb=v5 zncKl-16l~*x(%S>dVY6HKM+cl+WRJPM((u~b_KliGAlk3u* zA;gPs$EFhDH#P6N(kP|S~SuJTaC3)H>!u4`?AKFVqD7=<#ESZzb<&%`9WTJEu zLrmm=;R!LMTLvIc`9tnhK48zv9>+kNecaevW=>&TuxM1lUJeHaNDt1~yWmnDj(BNE z^Ie;dae1ZJsQr3Siu9FyMDQ{HpK4%x@K6SBh{(b?PO^Ij?kf|FqK@syKa7P@2m)Z^ zhY@)~Q4tb)n=ncTbdsDsCF;#Jyf=ltF8B{;N)=n`Y1?;WdRFTAaOwJN+)|CdY+r>> z3?8Yo>cNXk^H}R-HeUt)-sh=OO!_jJ^JUfyHvzlBhY>(NzL@ncgQg7|+^1+#x_MQbUJGHw>kO2uMlYGx+|#@80V_4s&*_ zwRXm{xh6oCmR{GY5i|qq2KZKkavs>xAK;*^Nh30b`EPH3EAn5_JP-Bs+ z@m2ZSlewCo}Lgnws6btq(HJ{K5I%m4m z{K<^0mCAr8iV8{jXipSx=1`DHEmo z{eYoA_c7@>qUzok@K$xiXk*F?;I61f3Lk_#0TrVTKflvO7Clvnyuk*?(h3c7lqA?S z+#{>dQzd+Xk71@N_PpqRE!NfoTYi-phf05`{3|kLocl?&WZ<*J?xLshii{GCVJOVL z`+oAf4%qq%wh-3Luf}&e>U;v(g&F-s{52uox@{Yei3E10e>-idDngd0bWUPjFV&p=L;EOFdpvzJrjOA$4;-*$8iYnK zf5c@ZdQpm^4&yU)k;rG#%XgO~9=~0EJ-ez|Vk~@e8u0eJ+#TNEI=cH(3y?f6c31Ly zCS=HC;o`3=jZOv+XFPXj1Td4F-tTpDv9Wg^zm+9}o6(cKMcvzwo)p+s_lWOY-^Q)*~liHk2gwX7l`;-!e zQcsuKBquL>*mzqMSyO40X6&xccaK}3B|#3+i%`{1Z@r}_4V_P?M>WBL3#P{3P;=o3u(d#t)j z^}V4ZGdg$RY?Yq+*WrxiD%;-1@1K!gECTdbDEq}*8+ut}yYqbL^vR@?@(=Okd z(`~3a!Shg#9WK+|NSAQP+tmV8-2#R4s`G+FchTlFYItk>9^CZ(j2jDEJgMQIk%d+s zo64w`aL#=V*Wj)Vv4jH6vinac;9G+}k}AV&>Q@*`nZ9@ocj+1jFG689F8So`$~v#W zk+p|*iLf$+|LbC1=sPU#)2*3hOr0kNCIah%zz;Ys_iH#3eup3? zI9#Ib2>lEpbR?V-xiO31yBcFsxt_~08UTd)5rmtbwSXFs?Wfw}V=0gTVN9?oL;leY z!-{)eu!`T3c3#%$oNqmsriF&U-v;S3^#+2Rr}zJKZ_K(@KcBTUvXk1L*`r#F7G@tV zZhB&Cmw&Z6!pbWWhYzf5y`n|2gh|aW4qvW31C@arY)mK;b*emcR}~a`O_z%Mr5sc? z3wkVdyP9O|GZdp(W}2;p$Z2Uk)2C1<)R`^>v%3rR-NH$RvK6zFzz?NO6br`V?3jIt ztpt$)fwY!>gR9@AA`tg1ru3Bkzh|-hd^!Ust84tt&_W5nZahIcHLWv5GsO&!Z$J_c z)5!*k<)`*HWp=#q>2rS2876ZHN#-Qd+^)byv4fOSLO)4fyi_Jh`|ek+*rw3IRAhX2 z?tR{@YDxc5b`WSK<+H3JtNKLemRH6J0WkNhMOy;;BWD^&P6aV;P)!WuXyvB!LsTTH z7*&^Ru=g<9(-(g;g*Jqdhy~D?qN<7UclPSVwJ_+#y`I;O;jin z-%$EBX6xY6(#Xl3-=+UiALz(?1B<;00v~t)sfz(p4`XdH{^|&Y%PVx zi<5%aISxi!JFmMdUdR@XTd~zW4lt5U(r=<_%t*`zqAAF^YYg#c$ccp|u6;nXaeEra zOK4+p(szDATt<+?gIGa%JD`@AtAL3ht%DF!6>~F#$Fqww9jcEVO}sD}9Qx;)EE$eY zsi{dNw@3xIx(e!1-b!?nCklTm)Q-fKZN2U?@3h1mJ`L}>Z(YY{(Gsiy%pnI)KsIjI zk`_SkWgf^+Z+92Eq(cNB@^HTnt_x{qYKt&4kJZ#SDAOOl9c@uC+_wVhwILa8=rRZ2igeQ+amE-H@zX?YT1%%8LAGuvswq0MD#K^7;@hU zO3ePqeu|w67h^z2b`sU+YhT9+mi!cB$Obp}S57&y`TWjQ#zHXHKhu#-L?Tv#&q9P% zN#PWAPsNj*x>$v6PQ{ZQ5anHrLLyJ}b>*>xR%xNas6&bzmQ{Df(AXW^dTGZu678Q< z{RUZ9i)d2h#Rco5Y)@NhNnwM(U1c5*I5jO=*LW3&|BdSIY7FR3C&Ri+J)mb#tTFLL zOaQjAezQg|{=Z3sAf%J4E`eY^_wndWlE=?`NqSv(ma@pmNolpX?$8$ht-d6o&WCf= zylw4!-)hg_Ac>CnX}k7bngMg`L+JbJyOj?>=AZ6x%4bH=;?Icbpc+w!u`>a>5UYF= zfCX(dmM}K~@tfdq#ex5`sA6{<(q!esAPYAnzTh<#y@6Ww+3fh_W2 zb!{;6BZ3IsgCKm-e@!;cOQf?(>1D?F4_Wr!$2?Mi;@Eti{jAZ7+L9@PJk29Q?TR${|D8_FiPQe1b z0PTk?UsnilrYC);PWD5E3V0o6V`Iq6sJpix-1eWuSVFRQPe3;+5Q3Z7pSw_esA3`b zUT|u#^y>-)TN!gNCF|mh zD5z_VAKp6DwNTj4#kL&kRKTdNJ^zBFc^9lmfCux(Fl&sVH5yo>%>uUgdb@v7DAH)~ z(o(DrtLbHg5b98)CALAes>0Ay5L8b^@b+nI_n|)I@&W3pC(9jO8PgR%e2hb}f(Iy( z`Yh7K@5FO=vVW!5R#>p*GgQ_2w&zaMT`o%y<# zi>romOgMVrUNMaMgJ2XGDx?x~Fmv)G!SE;ryu6Q;7KA+EFIMnt*@1QPh2g~Cc69>z z3Ifg&G0#(KYv2;9!ih{>+59*x82GJ4S-S&+eR8M5ym$mXnE#BIc8)O+1kAUwS61ED zG*p5#0g=`YTBMKEwgk;a-nkhXiiK}fX9qpf;>%VD|BCL)xw{LsuTigPdJnd^lMR`a zNAkMH^1_~xnv5_NeZVW4E;`amHhTM%o8%37+zQuu#V7|`!nY65^iWbS#-v}v9sLoOocFCY0vYEmm`}!Kf?7@PJTK$`k&cd+ zm0yMFz4>8NvCYhJBzd#2tx+Q9A}r;(vr_lv&SJkTuP2X@i~TA57aj;12Cg}BuNc3W z>$uBJTO7OhS#TP$QebFcF!f9D(KH{mNB?UEdB`0!=f#iHB4A-8nX*;3M=>f{Li-CsDnJYhbC+i1GT$h35vg^j`#$zqIo<(FQiBGU+zr{H6*>cP0M<}(IL5tMJ1cX zuucvKRe7Gj^jevP7|8mTI5nQ|H-w>Pd76u^xkI;SyG1&A)#x=PL~LX5`->|UngRM$ zn|Q)_@Xs;e&`oX)vr_!CE=ARn&aj>fZLDk>ltX~Af7TVqu*vo;JLW~H7N2etXJiI1 z4jQNsTmIfP2BjjpL=1d=Ssw zDHq2(ypA8j7B(w7kckS9hdoX0$YRNhV?)r%^7(sfm&Xw^30?gZX*TyDklgwdKgfbeEr%+*!pzqW zukJ1b;RE=ax}V>r7MwypjP7|OWL7FWhX=yS?zj6QHu);YZonkqFCE<4l@*anhjyl2 z_T*OyQjI$n)BBeLH{!>zOlu|6KR&^;w=4ut!#d<}Q29jUT<@(|bTSs-YAl|b(TN8Y zr_~R2pIq8Kw|wwRBk`2LiHXw0_}NwI%+40!&fBJ`-$)0;KgKPyRTjBqkT=BtFeLzn z;)}@>Mo41{VTZN7ld3U|aSHue&F_k)SdRuM`5)O^^D!`-LI-y~;e%TD0B*vXprA9i zo+6J$SFk9Ec^ZKo%H4#OA2PyRFjG)GQ?yLZ>gTTYZZ32rewUIFyAjNYZbsnW95#Hf z8yns~7_oBr;WRd2>D|iVS=Dl@ia}HCm66N4Iu4cD2f_)Hy|j-ex-GS}n|O*W@Af(? zWu}g7@K@y6v`g^F6<1ImmT`G z2ZG<6@%;o;U1C(7@45Q0B4!rqxvC(H9JGn$q<6%LGP0XO!O3bnEB9=$T0H)-0)9Zg zKiaQ+&ItKcS;K{R?9Zs*u`yQH*tL4pw0f;ooBelyQo2=dm$b@odj+*Wn8aTI>pVM^ZEMY*z8#GKIGSA zV)`2|fT}GX#z$)Vy^0P_#ioG^XUVQO3jX9@^OywWCQYX2QhP-Bm`zI`^LTp>GCME2q-*7;~Vi;iu_FWMizU@EU5M{Mf~0 z6cL?7nrNFSdi89EquLJ*a3=3m@m`<5eS&_4O0*v2<(cmf6JU-2ss z%d&(zka0_bRLhMHO@=pScj4DIpM0(%xNv0kvI&TJI0`x4YG%?TvgQg98|%36G@{7idEaFBLzXJ3I0KoFuu7rUHV%2 zOpBVOf6lgk65#Vw?GGUrvu@#eV`V6;RtGNeInnD_zc$eh@_2M`c5^`odlr(}PZ54>)>uX42UB~=%p~z_ zacE(g^i;lNfcFZCs-B*65(kx-AY}r46IU#-jZ#HMF#`r{8Vm+9xc7YHOK`pI1Wv4b7I) z3KQfev@CF-e!+`Xy_1C4dkPPvZm8L_bsQ~*Ykt)3@1|11(HmM%JGi;QZ%u2v>gR@hhZKgQPSqX(wf~m&04Bj)cxlzi`FlgL2L!7EiL(OQ zt%UYjg6?sybB|pXnACV+64W`$HAG)QOw${Gc>b@MO{a^hEbdH0w2L8DP;o`)_pAPi zZgV##6RIqSmz?KP;yyz;ct+a8TN$n?w$j(7H21HOy3FXGCf2kO0$p0Z{qPODLDYR>&XE;8u+XB{Jq6)gk`S~NCK zI(eOws5A6&2U zG%w91NxG_ChkN8eSsicj;z$Cbs@6jB=)|2Ee(j$2ml~9b08W;oqxS>b^mYxnKs;E4 z46blT$!(+MC|DjA%`5TB_+%luls6(&KL=1;Bs3IOGnTf5)QeCwq>9{Ue~=3VZn_-l z=KR%HHY|mzv`ngPA*3GsD+SS};y$nJ>Z!MKdi7v)ZJCf-4T83=+e^lY(&P_TKTijn zwN1hZ6fpgcHd#b2I=RLn9BMNU|GoxNVokAb0$JL{XSvJe$r&jMb>g@k}V z=?EQ+@oOs&3I zSwX%T4b2^m&v?IzjK=zn(Brp`F<7<8d~0R2I-nr+F5ZS2B-Nm&iZ*n;YQJUe5M@xC zNZ-e@U27M)ZL_}$NlY4aXMu^d@(*x@`BZrToR#XPX6+}7Wc^yWRMhl;;!)r?Z^K@U- z1i3Ez$jb#21Fu`|<4tvy9N7UhM%1*=msSD2Cmj6MV{HMI2R^Q_<5pO(J3};q&CA)u zad}46pcPsX;{4Yeh(9G^KCmqO+J* z#_DN9UI8qd+(ejK6pAnkwx=qmUnlz7$)3?exK-Mf`_SY|{ERNNLmVWC&afrfMWd)35NRZzpDv;YH3k>!TUx7NLR38-e|D4~6! zvW2Lir6l?!p*_HJ33M*wNMw-|T04SJ!~`M%=s+C(nuhN09d2A|-XM`Mz*y)>VD7Sh zA|m4G?lkv_i;C31S@`da=iX zASTc=^wX1ULrS--AaQgdI7m)(9A7O5A(0G+WVc^cSlFY@x~PoZxXp=xD&LmmWuZ6J zwc&t%Mm!3GtzF(qgj_8ASAiiV_+PS1W_V)MAR0~=EcnPv6B`3KOplY@37KJnY2>d; zi2X0&sXq{p^Y~kz^lJb4^gjox0S?I6D|Fmm<)V_&svzH9>G9v13iO@F{~tRq(FQPh z{-SxVO+$cbXU#!b|1j*?h-L2!j`WRo+7~!6M9}SsH+01%&s#roJ7uAajs*b-)Rn)=y z+%mo~_A}kTJhu8t)q&TB<{LD>$p@*H4bGUHXYHp8)uPgd_YM7($D8EHB@H?0FsxTIoowfY{Eiyr7I$W?UyQm;S-)I+v3koLnYpDx*&=c@__dTp3IcGu!%<<#j ze+(Gz7)lBzu3=N`4y%PMuQ=`vm7ITb>E7ZeX0#CM}SS;1tf!&WiIkXajNqb8T^ zsTHlaNs5k~e1iCp&$o(Z@PjtT3yE0M%ur1Zj`KqQeiFEIRJtzbkxAQkTmW#y~gO~ z=@UHp#nPn45{EjQRuqr$5XWqQTttIuntQpgl?U2c=^k_6nGQ>^YnviEft1pGl=Ua)FgMhg{)uS!D( z_y>0{aerN!^L>>UCyDQOWQW-u19+bMoDT-C>u*ev2*hJ?&@D=LwA^UCiw!Qir@op$ z*Kx)grF;o2$j58H`Ya@*>LR7MJR)jm4|%_|3JLe8(D! z4-kj?RLog&Z$?;4Fqp~|ul&f`Wdik7uYNZtx7J6g@O{<4`>J`bT_Ei6S{xMMn>)Nc zrd;>WUD5yCEimop znPhv}#Yu9nDzj_jl6i-_a5Q$C6c|R(u?dyRg z&z^07kN;jJ#H35H&_U#nF|~0rPElp*r|*uN&url};yjw*@(8^|`m4h>E*kqgg)T{8 zPG8H+<1uHMPhH*i&9(qNni)b>snGNNYgkRzjRgXY5MT6tbQvPaIu{j{#F2lkjED<% zDk89R2Ba(N0f-zX0Fg`DQUoA!PxYNXxl|j~4<04R$4qc7;8V|g?G!Z4_lI{A7hSTX z^FTTe3|7B?ST{wQ0orLmyV1WSi4t_qWj;(#pv-^rgDh2*m*_CXMYxvAKAW$ojhK25 zlWtbCSbOXV*JpJ`oj0ay7U`oOy*i7MKJ8VNkjVWGd&cd0VD1RYVJ~)(KLD6%ez#T3 z?5v`}OYW^rZC?c_4-b0Xzde$qo_mfJ*AVRvx-mjTb1$=2bbmlBveL;7rkh{0H3%O) zBC4YVnPxTbuUeFg1B$kr-v)5@KC3%FXL)5|MXB|gLTU)$2U2-g7y*O@U`qnRVyYF@ zH4hO;d~x9V@OKl>UdP%Gmmw3e!%r^#1z|Ab$CWZsus7P+rA*w`FcKqy3TZ-LQHZ)W z0urDUW9jFq!1t9;@a+r?0LRsAel&}bW?Qd|1V2IeJp5_C$~&u#L!rV|F2`*x3W>`x&Ennc z5rMPEe@jCEY6y+2B1-1|7(;Dm$OS;7})h8aN(tvqHkTqtUf4);HR4j$G#lF>d;O=+o{(F?pT6k`t2NZ6lgy`` zj-A(|sUW);J5ZNm#Dp!0OMp(S(#yQ_3NK2(AX~&^+S_r_v|6XshxHvwL_Mc`$DNBh z<`)Mf3U=~2jIX}ZaVsramyv9;#hOAzrn;B$>R22^{B+ubT@#i;;}>_}sK8v{vuk^j zpXhQ7;a4)=57PmsAFFhqso0RaWCGO)+%^sZ@lB_^Exnsr1Lc884R)$uC^vs?l*-C| z{xGPm3zEy5?ggs-`7%1fb#r(-CDPwo41xS$ zPLXWjC{FfskQz_hebLlBG@yNb&*R`~%lNQvXk*LUpcW9!Lu1%rgkxU;bif60Jp#DU zfeNAAv;Joq+114fq5{~Y3{KbN{s@N=eoh5$a4x@j|AHbaF)glLwjV{Z zS2yugVJ}qccW%*(M#p9eE%I~r??2@H&`uPL@ zSz=2T_aF8<=l+{Swj5IYRtgFDv;yy-NiWpnKG*Pi23_;6LRtu)+dw#;D;&ky&5XyW zDk%h%fbXV$%iGTzxdJI$DdgOB1P(EVq7)eQly*KQ(Nf2(b4vy5A+?>PWHr9rylrVC z9@-he5_C4nKi)%?d#~smxh)0eoxUDr1ZuiWtQTgd>)@F5i0V1#YMBVG(b47Kb=f_*mk zN`n)gw0N%*5)$kM9vFwtMJ>bpOBuyQ*4WOOwJg^7>Aihu$h1g}k?j>xY&b=B`U#1F zOH;~h?5_SqHfBHAShLE-f}h3WLcS9azAg$i9^MQW0S%C5sTVDG2HcLMCvH>rynN2_h$+Jrcr)Y9tGy^koy<@SW9>7%g&%7GzaviY!M z+OBWMTUyz?T9sP6kKlhd1y@g%r1eDI7@(zV4-*8wr1ttrHCiH8HH*|n2n>V_E<&}4 zx{Q)P9QL>ltrOf)CP~cI1a_LV@FRm$?}{h?p)^+qS*VPjrWXcLcUrBIPbGZl zPOoWtb)>jyo>7Gxqf*uY{r#+>M;j#{qIz-+DETS|&Z~LgQ}bDT*^8Ag8}!}UzZ6Xh zIBHSB?~X5VJ^%XKD*kWrNlt*{#`BttoHy4)2@g=oWes*=XetX{Lae zgdFSm{{9}X?_Khf>}Nmd?CRQeuziqgWFwhFgl#l94Pp1=psK36Bo=v>$XmqN&lcRH zIO)DP^d%j}>ilE)J~>=wgvHdzKDw`NQD^2!njF{(I-MAMUC#K(FPV;VeYFbTW|@5G7U44BUr{5J+US=eD)qhTL5Fynf>Q z5gHsPR0lH*)-|xe702uBXln}X@Li63+i}Q4AhzPj3+52UyW$ultz>3q&bQJ1v4+*1IHsd2?gCBxJib{~SO^eN zJp+d{JC$buUG_Wy5myk=JE6Q5-fd0r%!-xmnxy;=l{L29lUeRSUN)5Gqa&Li=iQ(* z74Cz9C+@F0Zx;UAo>NZZ2JUO5`GP>?Ag}Er+^C1_<_9?b5if-bi6`1_Y!if0vZ3;m z@%Xg#NfhudE9Z(>y~<$!++P)YeUhF!{2u4pLlyjWRxz1%+m3I``rlL5>}*F}A}1pe z46mSpJDb0x7tNLz>w&&2%>UsT;2p{0u~Kl=1GV_CxC(aZFqn9{kbJlHVF-MW3**cC zan_i)z5{Y|!Z8VG(%9Ui#8~j!yakO<<>zR#9Kgj(EfB7Z0VbTBQiQW*f2aFE)RM$M z>><{NXPk4*;hKHf7G$bZy>#_4lcF&Iu!Uu&48HeDj)C+^Eo01m$GH!q&ZX_$iAIz0 zMG8W?JRsaY83W2kHM*%6i^Chl7a2_^YR8I85=OkB>G;C%BFLIWoyt%$!hiSlBB&PL zf0~HP3hFcoZ|;j5^rQoUlw$|S^N={e5#E_um`&Tt_dD$6+#s`9bBN6E!%iWwSK+VM z9jZmxdZRar5Fek6(fBa%-EhxxuXLuMeT#<8B~aa;JfgW6Hu=+_Lk^GkAxwSCrK-|T z6!Ibu?=VXhKk;R;NQWzan2MdPE(Kg_Zh3zLhc$e>)L)bz+gr@n4aCxD*2UYzbZ9S-w3X86pAg9M&?!-S~c zL1$y*m)-$WN|)=EaQv%siN~4jgR`d#-(9PPCk8?cLcezfqvwYjpa^jLknJD zWonECTmBS?l(x))f5D^DI-TfNgbJ_sM+IZ+Ad0prziRpJWb4r4O5jTetKXHD;V=Kd z0>Z(G|Kb$B15xDZ>^;m^fZ!OH7ji>Q_EqK${s5lhmN zz&2v`DgBSP6z~UKq4TR6*Tumet1~j}u3Pk2H8{;QiufcbZX`-p3Pt}Y-hdkpO(U1` zb%n;%jXDmOf(ks^9m(M~WCCr3X;7&0nSin3wtWmZm%6kPHsUS?g-~OrhyLzuw%3p6l&Rmm@c7;P3GOIkSiHVfW!dSyRQm zm+YdTNg=Ff$*4p3(mW-Fju&gp&hY~L%2B2?-U40VL%z)`+}TK^(5GC-6a}UAzJ6p; zqD+#A#+L^l|55>y!}SaZL=7{C`^9eI%hG~y0OTK7E5(^0itMO36Zzm#es5`T&-i^# z$RFi)j0!_?D*Hc-P{0DMk;HZ|g1CQx@992%rM)=FP(ppt zf4)}tFy@$-E4bIWPtrYbIR8X<(Gc%_A%X!UYpz$zd=I`y3(rOtd31a!nr}tvaNLwZ zp{saMp8Psg``3}PMpr%IV@-X^`+X0#WL3tW134eFs{GXmUX`50Rs!ZW`h?Q4i4xY} z7bQ3hyu)ME%qpb8U_RDx+oC?jBw!<)!4%m@8dpXVCiar3vE_sgD=%9#eQb{JDWvf} z_HKR7TBoq-%)kI^I!6WtY=`{}i}%9_xn#IJOBkO<)=!UfV;+a)-sr)kb`T8wdD-A- zYx>c=-@Ea+aE6UP7dA_lS=OL%XyC9^RVhN4@QrEgV922*Ej(9L&+&CU_|U>YMts&3 zMQ?E>6ha0k4NcrlkgWEkgiq-WP*06ER?TU-snAm6N+?5pRNO0}-bq@^UiuM9(W^Gj zYD--q@F-d>T>3sQJX%1FW2indfwa8|D~(%ee3s_5u<7dEAt&0ZXXdSl`UkXMRk4A7 z*z#Uh$Bf5{)5gU9AEWI6uWBaRWu^iK)8C>npUvNx2%vb!-!y< zTepw9y9^;biHrkUMd-rYHE>o#;gMu!wog?#vvEx31XC;_-;oqG-1m5x$ye;LV|~a89U}^l!)~(?3sQ)EWtiEF z%$mF`Kh&+oV|5B}1jqeIDzmWex7R(cQ#H-d-$;^3LUr-Dmnvs{k3T4$-}v*&tCcvJ zflSsI#pby`!Z?mu%>leJ3YD$95jz3D6<^u_w!Zsh53-U0a_Bg)X0>_R z<2z2*^m{QBmlUPro37Q*-0@$}p-jOgL{iURDy{!`$Ht`AD?D_()fxz&;>N*&Kq{r9 zfPH-YJ`7f}V{^Tcos5{U9GZ;9E#k&eY7Xz>o&40wr6+z^ykJy zm!z>g!?(e3oo!A*kRB#uPkp%ad7@xN8?p;rbUpIRcevP{P`;(gzj^813XQ)TDY{q1Xmy4xxDu)Iz>RXO)T}DCna5 zFXKvdM41^4Os#%_1?Z}R6goDpe@iq3CrOy^nN{C0+aFx0Gh!F$`7^fau&TlS zDf6IlMO)sHKUaFeHTAk~u_(&$PQ#qp(9@T{gt4b|lgoedQuU*T+G%SqV|XUkT!%<% z%QFslrjbZRZR_S}Ebt#>&C5A6nT(;h{J{C9Y02e=-o@JCZOL+c+;U}k7ML_t z2{_Vn=KS9T9f?8Tl?y+&SOY_plh%DemIBDMx z*8Gj~Q2$m<^8Dm%Z*d{RTyMRx$TETcO$#23r|hoz$t&6fjE?WW#jW*_IW@ReY)J?5 z;Df}Bdo92&_tG5pTw?nGiDEPrCy z5pzg+tdY>k)r`UI6qxV{2l*A;>4<`jX6`T(`y@5vtmKJ`<$o2ApQ@b!I2{a<(zJntaD-qD&L|XlLRzi z`i)@}Jx*pk=QMvuwzihpZt}EbOgdw)qiCm&sL5}sBjPQ)+tz-T^J7&PpWciypEN>I zn26;|F9MKk-H^YFu&cVCk#ITU?M0U_Xn`(Ou6E6D&8GM6w_dV?3KpM0zFDEZA8N*O zb_(hlJ3gLw^*uJQ1n#GMBZ-R*48lU3aK(&q3quK)y-hxy`%pmeW_!nUAriOmu|6r9 znw*{->eQJ+MjMLW&+0fKVYYnB7sqShJ@SHBLe_AyI!k24ma{IDb=`a6yxc+=8Nona zjv#v)_{pu8mjqLbCgR2>CWKz;kSN`Usp>90KGjbyGOVAW8lR#1=?YKvl||o-7{uX? z4{pR^1*0%8Nx_%BchQHg+@N+`qu*5)AJDi(=pC8*?WZBnN zdcVX?Rgp!^Cfp#cg8!aL6G|`gXh=4DUUgM?2`N{A-&S~uA7wsBM|~d^AOZ>hFI~$U z!+nM-wVf1_^x~<~IqR+!3;DeFJ+Up-VtNzEhysh+|7r_#I{M%gB|bwE1};JsKC2j_ z+pGL8gn$$dj3l=;ylWC0=TD-b27m^P=yO)w*YGw2$h{`2kA~0vP-j~!$@6B1d5vQF zj^b*n$Osc;{&V1%c10c~@$!DyAfRFg$20u+eZaP+1{a>6=6W&f+c5W%InX9?ah^!GJ z&_l$NRn#$^JF&0m#2RmZB|m6^*M<>&jIR;+67*H$f(ov4`SK3Qo<6US;P$2&*!`AUZuUI{m0R{A$L;#k)y+OuKNR+l9wH>Afo7Ih`ns&=yi@iS|8Z z*Zs?`tIWaE*shD02;IM0#~%^vRrBP)@C3prnh1mu0|S3mySl}FZ)U@($!>$WvuH~B z@^bpa9s^}^H1aM#5FCuN9vAW&^>X?2OQc6%Sc{RY9Y;tRI>JNfS}^2P5URYwkjQOC zgg3E?z{9G#7uvH%5R0ad2*V!0e~jQ%7o#2l$keJLV&Y(b@q!kvbgvc>d|Uf61L#>p z1X%nl9=rm?cHR;Jo~BA38A3fp7@}hbk@HGPL9)w}N z7|p-EK?U--Ozr-L>hu8A0fBCf!NLmR@(_kB)gz(?51Bv*7iQBJSlqb8$s>KJ&MJ$k z+e9mQx;Ybd{RZ}#o`y<14#(QzWIdNJ5n``dm%Qdl)!r%J>w*zFQ;J628pmw)#eYR~ zcF0VB^4cj~r6H-Jyz!a|q;(lUzy5lN9~2JrxQ+6Q)k1v5OIKobh3yv4rf>L%)pnVx z-`^Pnfg}SJ|Et*c>@TWw^%Bb*9ryMFXwOD3&;-E%9n~0qxE$Htj;~mv;x~989B9P5 zVqRF@;sXp~edPCBbj71>mq8Qz`x5 zM6JGhyMbOV?`}g1V2>sffS1UC6>RFOzy{iu5 z13)zkKu}ngPoABeT>nLu&!l{Qr0>KSi7C{UUG3`{CJ}-oh$+By89g08&*k*S{%JG3 z@BB-sO1nvGRaf4oE)!Z@!xqs`|pyrd0I*GS7_IURcDe}9; z5ONBZ!1pzE%Ao=!Jo!b})-LbHBc?{1oWpcR-(T(ibO+SmB>%-^zRKdp+r>y{lt&Pn zmzHxH?%K+ehWM^+Y_`lAL<=#lYWUMq?9&?ax44ZIbn$g=G&z0R?QMr5;N2^^uiT)U z{Q?VXrv_6s(ee5v5x)9QIa4RA1(id7p66nSU6sU^D^%xJhczwK1>G*!AH7an)Vt+q zB3tF%*{eg6ck)V<{;)vr=(4NX_D9fz-$2gp;d^$znZYn3f5rHD)W~|YzeXLdk^2N@ z&v-F#UO_A{xu65tpT5a1l_l?`PoOkYTpL-b6IXV*1+=z@Gl}T!3QB?+ywj>FoyR7u zKUy3A@1Sa#`v+owmdK742bTS=Hmq*PjZ^MsjaK zts1Bm9b_GxoM2(2uq@jRoB~iyJsB6Px}e!fe0h+h_2me-52Am3W{~=?+CQ5ayj(f! zh0X3%O62!9)Q!UYo9J%zo{@qYe%LV7g@4z!FRpS50~?j5BZVJP--1RT$AoE6-nW-m z*G{gcl!}r6wF%y+8)2<}g5dCICWmy#DhzwjL%w@evkI)gy@d%2eO9J}Zw668=Cqr` zJtDOXb|MCyL%|8PNQoZSm%`#w(*G-XA4-mY@&JsSddK1L7M4Fe!QqhnzJoIY>{2`Y z<0Dl|J|~e{LhP-p<9>a*wO&m$EquNB^o(!otG~a? zSlcOPs!4O{@qF7b^8tS;5|mhGk=d)eKHtHKDA||21?9I-h0wu+g!K3e?X&{lTE=B= zywMU@(QMVq`jOa%3tzeN0MdODq$~h>9tP0NvOqJ7fwU&Yt&Gad9@`}|s=_LkjSn_# z6$3spK`fYzo=D(?L(9J*?9V5AIuKxfzujZ?n7g0vlDiDip-oxPNDzs)6)r4 zh|7&K3s{RfrBTJMo@v9(RfnSBR7a7$@d<)|27MI+W5H#i$C{t=g8nH*QpUoUY{*Hh zB3S#_-)k*-BoGgj@_+2(YIeO=p5#v!Gs4qzO$u<(KAsx~w@MXf|=vBUbxTq5qfBPh#siqj0eud6Jz?^&7smQSRpo zfZJySON{lU#Np-)L2|o>-h(P6tRH5=blTRBIB+#$H6!1KHDRl^zxU>*@ZHIaqVoNj z$6WhP7+UaJ(rG$uJ|K|r^}^&`=ZmfEcVuG%go-F+7jxuC3uPB&4%+Hh(u(h8rMDAb zN7Wy|ZT&A(^pfrXJO{?G#zpO2@dT@sjA6GYdb`X4H2QvrU$dROYuPgdv%$zOjQ&i4 zZKE0cxr^^XbwNi|P&7hD!M&?~c1y{VNxfUCAQ?6*%@f=pWr#HcC|88Ic`k0^I)4)( zO~8?NB6>}$OMC>PiSI3VWoC*4zHAm_+U#{nVla02rllQ4s1oDB2YCzrhnH#@lO^*rJ^JhGZ9@={lp2#gHuCm*QKFl>Uz zL1nty3_lEA1(K>O@ABclcai6=ohG2JJl*!m;Z^#_$aocWk0*KCoD!Vi_efbk&x|I9 zl9%4-L!J|Yzc2|!-Y9&zvMSCM=yWntqqY)f`%5qW!sVSR*I;|D>g6jV)9c}G&UBTy z%!FxUHvW65C99#D`Ffr#P<^8(qdLgw`?mnJo6#j2qt`#!dY%XfKUI#~wc3jm;Z*P9 zOdEdFG(X@1ztTYrh2d^C;^KsjISP^Bgk2jU;CUQPm8$wVN>=PcTD!G0#HSh!YAH8LZQ8^7S%Ph=M!(o#QRGP}B zjajmq3=UBN&FV;O$r2?63en+u4W2Ll5rg0yDUl7)V_n`!qf_oO&q95OJ4U+n^G8I! zm;LkrZR#gEEQ;MJ(?x5xx`pb~;Dj=Q2&t#$@bzX=yLQB-nI4-)P*|22{^cdT zp4)pR=0&PnM}50~&MydERsQ&%Z;`X2UlIxb^~XQ52SYehPuUjcRep9_n^#!V_}a5t zs9e<5)uo$){Ax$RV;aQpSsz5(yQx)INzcq8i*jc*%&+_0?!ON;cN!?9)UEIB0Ft_q z=8z{67FaNVa+3dFCs-`au6%`z=t)W!ky3@k=0h;dit9YcoAF_vOz53oV$9I|KXkoy zSd>rnHV%@~AuQcU2umZ4lG4((fP$pNE+HZasPxhbOA1ob(kz_|!qO#3wt3)_ru$5($XJU{5_FqK@1cp0K+B8ZO}=?t*%w{9Xh&;=$UTR4-d8PA4{EGSn0!$ zOOFk1$`02QLgJ_yPQ2JmKlJxOMyvna><`si)Yn0teE+;hf@m?)_N;XN`2e|X#|g`D z4W&kauIE$^L2K)uUzb?{FV1OHOvmO}Y|`mIeurY4Y(1>AP-igVC!Tm0>DIdhLpR(Z zGrD+$HGn9Lc`b&PffV>Yx00`2eqDFJB7;d#whQ$DSlQP)?fv;6{Qi|Yw-=IbgGmsM zA()w)nox!z7 zk|jdctexxgM%ZtfwnCw)LWtb6rwjC8#>xTrR|J~%Mx|zoRN&t{Etf^Ma~VP7*Yi&1 zuuoU_GU26AMEQMCsFFRm?8R+Jrzp0l9j#eLI9xI`@7q#=pvx^IwSFC|Mm?H05^WS< zY9<|-E^a=Rr~t>j2)Q+sg4?IK>Sc~mJ7B^NMWWGNm=9$1jURfJXK5g`oQr0L#~t2s z+yuooYE4)!enB<4JQmobhR`1g&&)=$Y!PsJhoU{VYi@&m{{S{R%yo7|-rH=bTRi3n zHBy?;)TmK;9})+!p{k{}_H>8#vMX|4&z#H?m!@^+_0E@IZ_$)g9|XEc`Smj zw&}c21mf+&dCx8X#gwYf$Cndl<3-;|5MjiKqdWK=CxfFWbl~~s2c^hbY4!EUbMHPs zl~^DmIZ;W z%U5qis2mzqfek}E z&*T+{MqeZSjz%8qkt2@T8ei+^(*n#VWC)z3Ufa&IuMsIe^P>Lt@OFU_=Ov+!;o3R=QEKSsr5q>>_7_&>eT=-s$*KNZ$po;ZGQo}!fdu7(+0T=CLDaYfSV9{L&g z)}$Vd9db?_KtK$v^i?d2#KFGR&ia5(wv>=1sxah{p=8HYamZ^pM+s=SYNG4?ElQOa zKkHucpA6m=(O+fot^cYh(wdbmsw7Mq(u*FTpcFwqNdq=~P!4jr*ml3SCse^k-GXpjpkSGI=cPdFPD!w?KEe&R zM%&ydVA}2hDSMiM)&!m$w>frp9xUOOspUeG&`oiB_M|(eI9qw}97>~*Puwl_q>ckY zbYW3e+%swqtDyIYg2!B9SXo-1ntWQ|m5Avr=VNB3ctfl&m)TfM=RpInB6fwW1ckBc zg^*;hK#ZKDel8`xJ9o*Z*=Oa{9Q(*b2u>z>Sb1Bns7gDM?W%Cyvx*DOK?f;4u%EJ* zZkW8UZUS{n;}38%59dQ$j?G!0;zQy@vu~)^);;crxRnuQ^N<&Q3Z!j7Z!=^z_9!ah zBNn&k^x)NMOawn!arN6Oo}=$8(a8<6(Z@tk=yUCJUdg3 z-7Zl>@|>X2>W^H7p5*Aa-R+^1`7ALH$JUqBhh=YigXBJ^kJolxeKmreUaFbEDyvjJ zH`X{GICnPFiXISsPZ9B5K4>`|T}tfWc?lJ1wp7rGxbZ152fX>ICX5_4i4T$u|7BW6 zSbIN{@Wqd#rJvupT@tl6&M7??_3lUyC8GNkR~}q&s&O0SNJ#NfGErp=A*Jq;8g`)G z^Z7AC$Z`lG7G6c%2;_XVlp!Yb)zQ4p!tI%eUB?UeVJAjQaX$~}>G>z(t7sl1Q!^3R zaiaR!dy0jjM#at{^n<7;cJax52bu?y881Rj?{lT9zVIKK?1?@sXG=}UkzM;KP)ic$ zb(Pei_0qoZIjreW{2)Meyx4Ye2FVZB&K4O=JrNHh2yJ_4XZ?Xjnw1zF)}BKSe(Nak zl(+S?LPFA*IO#UB`Gjiz;?_99-9iM!=I$N7%(ZDMb4t&*xE4%yEP#a{=DOz0AB9?Y zad`_Np?UmBv%JD3Plx*{zoPKIcaX_BkKMABNo(MBI#^gbIM)lhoI3yUQL%>#B0w(a zu8%G{8&Xy5OiNYCC1QRZs9?tNi-9R7>NuKZ6=F zEW1Ldn$VnIsu{z~acI(I@8ji(pWb3=H>bmATDr|_PSfqaPgTzKeJ1=hvGNmf&23V9 zwYTS`L{)ME2DI3BUgSt<_Z3B0GFdZyiY!gS%5fXfd{|394o@!9aT|MwPdNj=;hBtP z>hN6d*VnyaQ_8>;Fj<)JiGl1lwi48~zm6E}T1zE0*{B3ehfaKD=DLh8ui;dW@4p=6 z!T;Dt@ERR=$b%U#Xf|Z_!y->;199ce@tEMIiMR^JVAc$jb$ji%umr3?kvPuJ*^Ih* zSzo<2l%%{@+1Osy%udYS!RAX-b{RSt!!D#8y)$pmOIg{Fxe**xdw2`dn&)g>x#y}) z1L`uq+d?-v@g*Qpuwsixb^Gf<1hf%Rw?_;nlc1WT`<=CCv#Ct$ZM$*rOy#K*Z&CBv z#sAW`J@hY}CSHA+IZzH?g>-;GSx7n0rG`T%@2%EmW*bWW(bmswwiC>4r7Vo!(nNe4d z6D*tK4sLAD7`U>_aH2rm>_jE*1q}zsOW&<8PiZdRrhdgWmDK}L+YE^JuAeg+qPX!k z{@A0u-GG7ayMcg(byAtQ4HGZ5p3GB2v4$6m;3K}KZGziNaPpQQNndv~KnaJ+A zl7;6GgYga%gg4l;as3Op-YgkZzuGQZO4Q)Pe(>Ao`1u)Ud(#`Vo?_Nj%xxreZNhW* z!4g*Kuy~z&$b3hpey)njmjNPfi4A_9lckp?pSFnJ%%whKg?QJ?TC*DXCwB)k`^XuE z^|PeydPW{aTL;%DPIduv7J8bd&{#YTtTFvP0FqL^f2{EMN(1Z1u_&r{fnp6J&kAWe zf|Q|^a4VJ%l!KAqR3B-H55oL#sHfwr?i|NiyvcP6_bf=y7;bc{2JZ;87l|RpKB!7p z=reYSA=Jqdn8Q90^yr5zOCdTV{#0{|Y!_{Q1|yl6A3_FTGmn(l?C#$j!tX%kzVfDk z(B_z0nmjz+u@4)cMd&zRD`>jdvyE9+7ag+9Iu{AErO zedzLiJc)vKi=Ha_y@(~$=myVgM^}*_?vD#(JGdkE=r+%c9ciTGzcAo+H#@if(ucyh zGG>=LD>-E5=F}Xt+AWKd`b9Hhsx^C5&66n)s@8bF1=A$-5&zEp!-j;G>ahxFw!eNq zNdTfGHR@WrVJ-n#GwsM9tfnR2a#h4bILD&TQ*H##&cDm!i+55tBTp)T*pSxMJMrGv zHO-(WeGSh)8u?CMq=-(v-w$t(0`&1kd?DZqUWaZ1bhG+#cfi%aM|V{#VhkCQn-D)G zu?(Kgv)hPp_!Wit-CD}6n-gFC2SMDMeus*pV4Rq*gH#$x5~!&RH?X+_)nb4&KByy3EX9qT{-E~Dl! zb3FtyD-37M&g(6{!(*faB~>^J+A1R=ud^Q+NE*G1hmbOqnsas9HjEVnQP@8kr!Ldy z5HWbC@)%YAMk~93_C8WR&LXtgDJGTtZa(#0i!NDtoccCxI@lZN%v_w$#lsJ51T2&| zxw#L9nwAnHK8G?!=8=PeOBU2XfRSu~O*N=w+OWgkvInIf*(?P|JL{bI;v;MVNiNP- zj}!1fZ#fMl;(~AC)5WPxljiBP%r==aXJ=1wXr~hR>cqX#B0^|ne3s{H1hh1`iJ6nn zeSTJTR!rY~*K<9J#xGH-tdIg@)a92;`#o0+Ce==<%ixH!@TI{wA*Ii&;*D}}+3zQG z!^Qon6yGe`lM$muxBX_itdmb;8Fjc#KHkY(*k$?V{^Rb5(AyOL#uud*8-7K6Y7hu3 zjq?J5m>T(=quUxy6ia($=VON9vq?{jzOv8K6rogakE4X5yvVQ=bxZwA9zP+pd#55h zv{{8DbdbjBfj})GZL4t$Z%fC~r}Fy&Ja9P88=Z!&=iRT_B1UlUhb9WVr!t0yt1~o4 zXi4Qoh2|o~KS#=isPK_QEsX^GP$FcKd3PhxJGUJP#=gBhv{5G8jl8syRlSkq625~K zdRxp@<58^MPwby%I=(u<@J+S%` zQ~7KjpIg5_^7|PVtv3~jg}<9yMajE8EJ8#Eu0_=Yf-Og%A{4hnSE{VR2$5+64)(#P z-Rp~sw=QJaVa~xz8t`=7pYD4VvayIDAl?f<*u)HpxvAmVYML< z9IRH#g<~^Lh?~K+zy&sWK@ZFEh@F%wiNX%ppK~F+383nzaKqvL5p?Zo>_O>+5z#M+ z6t=$*vzoInC22u0Rg0qHLK)nrsXMVcbvg~VDE-6CyoVNxQp^p*IoHpg9DWvMv&hYhwL zIK%?Ez)1!WTPXgl43#dxEg8G|F?O8Ym+6fYT(sAk76d|nT(MR8>>&0;g{<>KzzhM! zP7ECR#6NNejY2t03#b+NH4n+=N4>oIcy+R~oVAr7weu<{~0wHk93(Gmcr=_UuN<$h@^$!^nU#mC8Kc1<`3cPgaU#U{gjX=_|U(khH>#tn; zJ$k%KIr``A;btL_wP^sUd)}Qa{)rYCtw3!fh|H;qKkMl?`mHkNsox2yDp5w2M5#vH zicRJAH{Cx*-CXN1#(Za{9b7mx-?_|r-4Xo!C&h3H)-c~K{sK-gYg(i#B-&{#Gj@Tw zNkE5c;1$iNt2|=i33uL7rUA-RMVw6upP^oRP22nYbkeND=7g}2hon5}FjJYBWmZMR z?BVA)l9j5*H=vRfinIt$Y7j!2i-Q9$(#-`&6ZwZC<7seyM##9LK7d7^s=QYTRuak4 zglOYeNGa-LGdo)gg2~Aj31Fv(aqn-|Dubo@Cuanb<5qgeeoQ#I8H`1HJ|wwI>eV9o zpuIAnPO6P~YE_QIfV}8^KC{|Tk)~RK!2eXhLvB zDnKo7IsFFD2A_qG#6Nh*q-epVl22Wl6@|w333a_MZ(Zge)uIXsl)HGTN#lRwb8`5S ze}#j8VfbCU?wMvo*O0qE@eHEQcB4plktOs6KJIXo)+;BH79kqU*d=Y@Uee?5o;Q4d zwzVRz9cv;ZdANldmwR&j=AggaR>pXnTBIlfZtUdY=V)=V%UzrLI}0p5VuGJ#%?=hh z^6ge_K6|B>6Zw8Puq+_~*4IszWfe2CMG<=Alp3}#^?a0GLXCa#lM%AuAt`-omQ! zfBV@zpd!>oV$GFE`BoVOPV9E}C3`0E)efJEx)Ga~H5e?gzCK}y;`r?PS)1U~qZw6* zfkP&WyPr3#@|DloX&B?9-V~82IQ(_tfNtK3m;Yr>-g{Nr#ap1wiS|A%O1}n$u64JS zgUv3FUJk_8ByxcMYXeV(O2l0Y%PAQg&2_S;^^fv-gtr(F9YUm@c8~lPbaSkg97HI_ zt5R;%AI658CnTk`hBHeI-osKkT_o%8v6r>HKklP|T zSHt_6gi=^T&?kPhUHzqfssXeh0`|=A{FvvemQv`n z*msY}+~8y)F)N9Wv~E1@O75KZtL2nXf^d0gkjmJSwUITlYzwX&c-Sl-%y!iW72F0( za5+p=Z+@I5-J6hgC5fbw?>NNXjq@jP!>X7dps*N@fS=^!2jH`bKgeb>c%Oe`nZ;L9 zNEUDDBhw>pXV@t&#&e|dsX}fDf)%lOHl#Ycq;K|<$S0@^ajStRgFIKukxaq1jNz%n zBBJYFUx!OMe^op`+IH#wtlh}bx;=RWrHBp^*7N(e8()Ik>ca3=H2m zvKQ#Q-{9_`ELAjPTl%1R^WS@-faRB!oLq6Jx8dSwXEqC`P47PB;^T^vMmIL?j{9~6 ziW$bv^91YbBcoIbd1rNRb;xI_ishoQAH`ws9Q`aIyYALgJp{tu0;4Mjm7@UlivlpN zPJvWIV3=T{aLbt3xAk}TGT;Av6|ozo6(QCfTfAOiIqa#D$6ht}^!E*{A1!-__Co!Oj6x6Oq@?IZ(n zWvP{TyF(8?Xx_P1S1Bt$t^>2>TZtApdeAe}pfoK;!nNrkcD{BNxJw3-pd=WH-=Hb7 z{Sx%&4`OeTCxO3UG=Ru@#8^8klQ_ zB6-`Y(vA8%UmOT^Q)6J(?8V?`ruWPZ;;K}AIi|GI6NZxbq}^rC$>K}6Ik4&0gm7GybF)b)&1Ac8v?{3vxOpzd%VesSTd{dM(kZ(jD z_J6<4f%%;1nPJy&s=?tK05Bq5tq&Vf?$4dMIVC3?XCnvsGz&K2&O%Hw6t`GY zl3+?YUd$r3zG|qJMcnItl)2{@zo^xmMM1G3mN?2;;`=R zd}{JJm!y@yM_ZbMu$ zqf{BQ)Zc!uNl&1s+Ive#V~N%O=1VR;^D>WV!TYpl#BUMx zE{zV{FyvXK&vS<^z&IKJJHmA79uTtrB&Lh;*z)JWB?zo5)KG%rei|jQZ0ihLHWoR= z$c+_G0bbAX`Vwt5smNg@`{fTpQ|9a`QNx>Q7K3VtOcfBOWj)DJUFS)J(9Gl#y(p$zw#DSbF0uOiR{QV4KHAzP63BiB?0yjLTqkj92$#*!KX`T$hN=XvZz`fgMu8Pb#Kg3}`(g0B+PCbJ(+^ zt(p3T^b4G~tR@1W&XE~AIVRG&OdQ8+Sq1h4NJ@} z9WRafe@l0VaW|;+I%@0c3eNIyQcEaGD$^>d$`ts|83#=;dH1unBUOTV$oat@jpSSVI-EQvtOd` z!ZKE%IAPO|=^TU6PO=c|uXW4^NmjzoJ04Sm>5uzIH2$LNeIAv44*(9@WZRU*_~z;;IkI)Cd9qF%cBbNVBRUR`d9T7{6ga z2y7606r!a@aNMctc#Wl}V)0{|9uc03OyS)ii4i!kwXS(FW*)gEZqPFnb>F@HiPhbG zB6`q`(wS&oA;>@JbAO)$`G8l^@XWEM?gCdOazWA=b+`77kM5uOf-T(%zxM`weDthy zy9A9E+jDzK?~w+-vlA<`>0%nSksLE zomH_THjDg6C;N-!pkZ~s96f8Z-&SGItbg9fhZj74FQzLcNC1{yPE5+B?|S&p1TxvH zmZ+6t8LHbial+_{#1=kqhjZQ{VKxeA#L*R5!S(N4Pp0(5A*<_JFRo(){nk;pq5ZG7 zg+-t@^4nnD2#Ey_cCfQC^V<*ksuG@&QmUw?Znm~e2jFdP`ZS-zIoD7vHI{J@uLKNZ zjRfjZK&@AC7D`60VNN?a8A&6Sl5Vd#ASTbcP$$3W$W1`Me5cr(^4XccEO(Y=zx~hl zzPEsxLvj=f?^3Wp8-TH>d+}pLA?}(ipdZ9I0#YiAAMY{EXvzpin0&W);yc8Y5V$-Ra)S zTkscGFe8}O64m%~{UV|g!R70NB%#h~?!Hg^3rB658hpRck?NN9hm|uXTMy(D%JI?0 z;v0|X*L>&m{=FO#>p^3=MJ_*9)`<$yF2E;XNOTS(ZE}RvMXyYM1%YSSZo91|^LbcH z{Sxqg2OuCS&NSIgs^kb0wNKAo3JC_ha#l5%&Lb2+vk{qa63r5tI131j?-&kn4k)|R zMvoFkrrq-D-Mb?gV#yMFMTzyEWJASg@DqL#+A?JTkg5I!o>C7b(4LvBW@E<%{9GiY1m zZ36Mt2#rkqCf;)d0YZc1N4?Ou$?zqEZ3i9Ay$e_K%*Cav*_&|Bk5k0Qsei0}o=BVJCEbmG_O zLOI~t+xXIfV>3LZz!Y6Lm+LY)15hHo#^jrGfBPxZi;<~;>r4YC7xG&~vF7ye1E899Kz+qIc zEDzY+u=yWX@jn~>E7zteYBvqY77gB>?<$^d83(-D2<4&`%{a0q^}5&!x|##)%fS3Q z7Wu+h8`>9fUH%8)=v}=q`TIiFBGL(RP;lM&-SVhZ<)Q0Ju@(GN_SdR78ke45R{9Dx zP~H%^g;iahGqZ8&s6$Os(`_3e4zDw|KWupY+ldosAp52zO6Dyf#=`~mx+r=`@@-6E zWDpOSY!h@K4m$;QXD_V1+%jN%-`^wY0M&VSBqkT6>s);;QBj^4*$!4(E*@=f1wmR# z!EhL+1b?OQWwdnpDfIFiY=+{JdE74u`uL?jaJ!UYVJIE8ucX6pKT z)v42>lrr0S%rht3ScuxkO-mFP z_|CQR){vw~pq1-~fiq2S08Tl!h@1^^iIJdO+|UQHNL*N?`kota=h<@|xNF-MDdI73 zpB|Hj{@XsS2oQft8DlrKqrM8`(pbz^@t|t>izT>=8Nq{And| z-xubmz&dw*i6E}IZTqrub!Ex(I+gqf+OK>OmO3ODg)YNn&;OE&Lf4krUh>ynLskO) zB@E`TtbDR1#w3FCingpC9GZxr)`u{+5T+1z8|c$0EozKt95b!CjeuyF8x)WHq=$O} z*{*wh>uPf}Y*Kj}BN-a)x6qtnbBz_Mp%$wJZgZ#c>iyeVGGd$rl^>5W`rGK$Zrc(w z8WdhI$p1L8lZ`?}zs4cv+(t=~0hjUOe!O;RuQWS6zT^|uSJ_|5KbR4lCAR35j`eG* z>BNDq)2u3fT1>Wkc1zG662c1HW2na{@Sv(`)z(-b64QzQE^-ZX*W!VwOZ4fLF{GJ) z>RMj^)t~8cg5;(EHMQyA=Nrrb9;i7+)|K4TN^BN%`y6C#)&iQD+7{$jIh<6g$1?2S!ORhY{wTr=ex0Bq^? zrIMYP*);1Iv`V}bB%fj7~ohUPTz4*+{%i|hm7e|jH;1qhWSNxzqCSqYnd zUJiGVArZ@4LV}A1uV!vHEtNfw#07xzZEY7VA3(yCfHts#cV`xTde<&G;xSv?M_g?< zyyU(#xd6>7<_pO-Biggzl5Vd_>?^m=EGgAGJkL}=M5Q-AdC3i1Hmr=rycMiO+uHEE zp`Q9#sk;Wv4-NZ@fyv~JV_B`EaLc#V@^XrQ`cTn*r#S3@`LRMfmGhr6uo$@9A$H+1 zo~ay~oC2!$P0H(yO}v}`R370!YfCmDKtM-^P2YnX)jry`DGM2 zf}ER2;>Ibi9{iS&Mv5~;#5JfEm+FC!RD66Zs>Q+E^8o%O52>JS`KIy)y#esCRvr6D~9rno^f3=LnPg!FPs=v zfp%nh_ts*|(WRs1vkhG{X%etG4RCiU|4uHiMKR27-@GFfSoX0nrq*?+etp(sU*mPt zx~e2aJkgTBs3x*%Xv*U2y=SsWfut{WUluYR61ja4sH!%qlul}E{q=TF@eZICF!^5- z$DsRMO-5FSk#d)&mHTrC&!P0oLS^}(<`d3tqcZxdcT(1aZb5+jK95h4b}+17Jwo>V zURr6P4@i^O_Nm>jFMC`S|xtt^qfIWfA5coyN8I=^Xu^?guCB+aN-i-CFP zQbBAr-*AIulA!HEPCX5{^-9Qo&f~{uN5;+Q_(Muii?VflZf#5)Hd7l3&#S6j!#+&E z81GN+vS0XM>%^FqF??#-m@mvQf2>a4EYHv~5TaGEy4<`wKR{Th(23SPSNisInKN+5 z8G4ryOkQi@)=qG=-gQm{`q$M*!jG#A!5o%dz+G$-L}7CBsu%P2RJVPH%^%j=V1pY* zd&x9*hMGBCV(-Ex>Qj-tuy>t{e48ekIy1Ls>WU13tPpfF_b^Xb2Xr6(vz5X~_F(S! zX)mXqAO(2uxtD?tgpfTX{tvY%#0W>XiiPhx^k!QPkynz_N|hEhXwd&&R0oe0O?iul z@Zu4PX40>>6x5(+WL`dZ{fo_}-S3~C!%ePo+HI^Iy7CoKenI@J&i#x4|J4N}n&ynZRStsBH!GwnRR*!d=R6ts`^$_a|=qa(tg^YA!PDMZ7q$oyWae zWr0(j7bkCi(XazRwn8?o7qt$^0G)%Mj(wGV@?b=~_dzGoz)=6l+f-$DGXf7kd}sV% zmKFV^>Vl6%$zJQc=(?CJ{%19T^^cH*nf}YK73BxR(2rK4HVF*fktAwj_;Pyw7@aAq zN@&B-4cLYH4)+OUzI`>j>8Y6~bebd{+y}8`cnEIoAG`a|Ug2hZ%5YtmJ^OFre&}iD z%w_a#$h$T6WHbE*FPkgtQ;FytJ}^h!RQ`0pHPF_3hnHN!t}e>bDj zezzl=;sC1Ce8M`1T#jB>kg8C9w` zF<6&ZSdP$KApsdJ$Dz&&$oBx6XFY+!PT$%(e-`Cg^Ng!rAPoHEz*GuW^hN!m)%w#o z3+URI5$PF&!74)uSU8`mE?>cScjPO$u158G1nq2TJZD^QXc_>+edm$W08=>pNxPu3 z2yvAbBG&I}9v|1-(qzL3d!E(-O?dq-4e65f7e|Ls{Fw=Y@=~V_jy&OR}jfJ!3WFSwP zxErCT>x+A>aDYU8o$4j>UHsv+OTz&dWQ1P4`))Y#i`i~fL_%>tFF|6oWNUB!BSdd# z@DvH+h~m>8OB*e?%;f3PMP&;aqLrLHObe=gNH)?P3aqs=zIQ^j`rG&R;fn==!ci_4 zGT8CLwPJi}(EF{>zE>N9gxLb-7Bvh46kz8E<@Dfho67cI1+&%)yYQOUA134wBW!~H zfWJfU_nLtji9lhACv>Ju6RhB8Tu)}Ey6m5={YZ@x zd_d0nZa=MeT2Mb6y}bO`b#ybY^a}gka;JUA!GlUPcilQPp~UQttQc%R6fLPsqrBX? z-bpjPn&@|+0|}sQHYUOATG#z{>tT95aUtin#6L&i4nsb8H14ssMBgWWD7mrwk#t|DC6 z1$A~)oUfW6JWbku>r-+*WkF<;B4~s5JM*P~nIn7c zrN|JYf4WrFo&$Gzoc}KSoT-Awug5MT;gZj)6QCM;$?^ntePc4+ua^@;ygvg2ddgP$ ztqY~-HM0(dHQLWEbBGn}jIkiV-e2U61=cn$?kFs>-f1=7b{V*dNDdaw@^j0tk7Aw- zDDPQL>~QhhTUPq}b(1^CylawZOhEe6x0K`O53Eb zhFYIjtY?l#?|uJ$7H>28vOJ@S6|@c8|Iq|(gWI+FZjS%^o@pv{Qw1l3A&Ge3tOa@T zodnp*d3t}d75sjq6AGWByCUz$+DB=f$I(7mC0=HHz*`m4#c**s0!+MLtp3NxX_B|p zu`gt~=F)NUx4FshYf|7hP_M?}vFErttMNn|#JBF+S6o~Lb=u}gJoB+IpGrRp0N-*h zxf?I{T&m&jf=t6S10-thVBA?0nNs_?YN_feWX{=!FNw`4mjB6e^%N3$9;0=r@UpEa zfbTWBx9K=(&!)d%E!YNt#;@BQH|)qiID1XZh`IMPwPn|oP&uw#li0}gfQfRyz|5uS z$5}-E)?@4|FXawZ+a-(0Xi{4Bf+69zGQN=zs_{L|j>e@bT`;QvDR`d0UOccQ#l9oI zhEzy1hI6$Tnu;tQlXeE+nF+!5_30qipnyAp3jtP5MS)&k?Y%oXF21OeOdDUD#THvv z46e7uj%WxydWv7E;AoaE#o6OVO8EpH{=U233U&oRMfTuE$_T-WOisgdwZ2$QQqhD4 z?A_Ja&<@l-0F~6()F*g0auVKw(z3FA4d?F-dyDm|(M;u@l+pK$p8Q7RXo2hN9)+k0 z{@03$nF(6~A}QqGmAX87e7I@9)#xi8a_}L#OIU2i9s6uz|~{u%;o?%Rxgt+Ui0ov&g|o#@AU~! zUR9OCM%SfsVbW-?IK8{`NU08Cf#DQJl0y=6LFBL7`P>6}?=pk%GAEI1hc_umnQ9Zt zbJ31IW97CaU=uswii*mFwQ0}rI;F3zoHWOK-~PgfDO&5EAJPfIANAxzlQoG#?wGnL z=uxyD^sGm0ve+EPz_Fv76#RKpV1h{P!PcKZ+HF)KiN4UJORqUSiP3UV59&4Qv>S6d z<{N2>^XZ$THF4`iNF2jSf6&wfgW(K=^=D3gWQ|)4n$aDCpBk|Svv{eQR?xu7XuaJ> zefe}XCpzr1gKuVmeoH zkkQ&=_s^r?CAM#YNK0@9Kt!Wltvv!DLabjXVlZ_c14s^P1*zFx}_+C7H18C||mg!N7^)O<^;OShhy$}pJRvj7yp#^}1emd;M>eJxo2uEAT z3**~w3siTwcAymfYBfdG1|Y*7Lk^l;e{VQ0G)v~>QXBNYmGjokQBGBB+ z{kK*v4M5ZL<2njP>roDXk@#c4MMeM&lxy4&fzl}MzXc_>|EqmJufS`#5%cB-{*74l zdp_{b-XZ2$ED{_MlG5s{&Q$gYVmNZPGusBMUEv?3N@uZI3J{ZOZv}8ohF6z8=`oTL zmDoPU2zVa52n^(P(5|q8pBB??#ecvqC?IvKWcoUW_L2u<+Y*ejMgTn!M*C?;V}WbP zmjBvU_=ojEqv!#|0n;&cw*ix3xNjZ;2Kvi|^N;)Hf4T=adRn&UD=BfbX zaee(|&>b}J3IqP}|A-X2LiJZfM#MFTPL!f4iU|U~mgm?K1~YcOwrXhBVHYM0c+_GB za3<+u9{;~h0bxLlC0<7T#ghrW3;t`7Yr3b8*Q)aVD|&yGaRq})U&mAbQ@0g}g+`$z z03%|;geLk-M7dZ4FGH@d3lKH;4e~VD@o#p77BNw{9^n;KLQ;4Z=jkWn=an9JubsV| z_jnv6)pxVuXRKBaCImD9Z~|>(Fb_VX%3|Q^CT|XWwp5{fCHhTW?3~=>yZscEA1q8VVE*M3YqRTakW|Fq7zq;h< z+M%ZlnlVAAls5J9C<$Yu$#sFcCi}D8*xU0Otel_pK#*&-zWA0#%`YIuDfKfyt%t<;471 zNzM1z67RD5h;k|BaH$_{fdaX#1PIoy!#}qmCi_9>;-su_+vl|KYg$OXZ&N+%WE}vc zZVMCIhaT-+`%i(arC!$21m!+zgoLVtR-MgpV46lX1i-On?j3CI3x%xAh%aW#dsPZd~e7f=zwuH-|Tko`f@9!e{@qxHvYQt)**46sO&(FG^ z`NXpPwbd*Jp&NV+WC#_{aUz6QL(P1ru?P@m8yF`vMKwxVs6DG0?-ww5Qty}GLY!nB z4i`dE6N9`IZJt)2{hr^C1-^MKhfVhKsHCsrUWsMDZz2p*XOvzv5FsGNXQ61dFLM68 zyF0bzHj7Mqz_h}8RIc_F=G?~r>_M#vI;p{W+4G^TLs5STbjIZr6$?i^dmhw@va#0M zsboU0PYX6@kONZFH})D=en6il9HmP7=hyze32LJ+;gUh>EmtA>g*w;Y*2*W<-?bhh z01OdLnt>#lgYm6H*aU4#O_8NEkQXSAF7D`6ss8%J%~nE0#qNVk2JlcpDCWoq>-{3< zHj=5%I8n3pHxbB`xBl(DACeG@tfE3P<{Xw>TT|QWLD_MvR-rPzd9FJ0 z$rB{mOEP7pcVDf<}>IUAcRCwv=9f*r_z4McP{BW(}6Dn{y z@7!KoLGV9u=RZYBP$L-mYSgZvH;tv9y5^zUp)meAZis8yh(NjPq3hk=lxtJ3s3G|! z#UXNKvQN*J+o3aeDkLGcLU(8RCG~1`u>MI1D~}>2M?5$vt4+Qu47stcgRBu16fkn8 zZpVb&u?$6i7Ecq}&{#Swb%tdO& z2_3o{gp%hPPyG| zm{vy5vv);=Lvoo-g;jiiExvgiR30T?Ec6Uw5m;;@8RPUA01>p^i*=*G&tW6#4;>+X zg~vxF@~8fl3NHH*UcJAVRe<~=1D2Dhr?Kls*ZO{=yUo$&%X6PuMX*-C_w~ZxT5E#(ThTVjxRM*Qh_4;?{H;b@ zVvE8!h5takEC8q;j8kG;j4&2K*qf1}wO@g6#h2595R51=^# z`pRC}EKXtk=Nt_o*JOA6zb{Q5AaNr!9q|BoZ@Kc{XDF!vEYq6mKcDDw|! zi0mfb)E|$InHSyj|KImVXXv7FZr7jhwso{fqT0E5(1e6GV!e;eS=G z`Z#xZ`1Eh5{|WJ*$^W-4 z|7Sz;4-60R%YSzj|A+wj=l)6k-%jYm|N0F>0v2f2hP{f*ltp6G0knz8tEtQn_gN@m z^`ZC8{?9gU#REXbBf%VePW##!4|rW(Gbi%jLj3K|@qhRa|L?sO#$ZM#|5*umZTSGh zQ+P7nWH*KXN| zdOQ(YDbuBCtJ~2Zj`)xyWL-sPo+O#bf8B&DDi@d_^MA5+6CcOPQug&G7q{^weL2x- zqDagH()xg2Dgu4m_>XFYA#3SDH$j~BTeVTk28C&<&{S~?jhw$#XyO|AH@w5%J~i@l zUspnG#teuIkz1TEJb3c8CwwW+EugHgq^%R>{EcT`75VN`VEk*=4wu9~A$zT9ykusC z$Pj9iL2e}T=;*HO+{Pr0hB#Kse%|qoPtbjaB+#-!-em|GCJPlya@E=tm3(F7`Yx$H z1fEQl`d9%HmF?q^RaRnWSaV;(cd8L0(QL&C&UcyAjefA1!B_*U8+m)`t*!7+BQ*^H za98!O`Vh2!&YPidt%9x}W|FB>Y6|b}cikUacpbLe50!4I_U)B%2S`Q3e2RJ3{jl2F zYY6p69!B3IG*`=Ec*4bC0djx-hYp`=l`C04hc4rg<~gFa%q_@j`1b*Q^1^7U5*`yi!kIILBUfs>y;Dr=?NNat^3O&5jM#E5w9S0lD#4(7B! zGq~-L;w`ExIr1U@h*_)D_ZIji2`R%1O~bXutGl_lsG*?7>nWRSSzrYrqCJ4lB1TbN?np1wk+?U5g)&Fm6FI$^6TN{-))>|wAvXd-hea<;!`rdc<_x?S<*X#M?@kh6DpXGBt=X2(Lo$I>Z z?|0OqQOJP7;mnFp507-!bQJCZ-i|#xI-p55JE&LW8%*&X|4OsUogoU?Lp92J`odo2 z%4ROUVinwa(mYeWKK}?gY@p2&|LWM7 zF}~ue-_0M-RV%one@{l9J$v+>w**OWmw5SO!A?1l)q=4EPmobFX6Mz(*om{{2Bfv| z%dHZZ#BGdf)z1EWIA<$vV`Cdi>y?}1ZPYF-qxyXWUBk5ycYFaIl`K{gaoS7v+2aI7 z(;l(CNsAH~!-24umtyynh}fD<{edH90flsM$9H{Zair)Qat{ z8@D!;5icsH46YTT`^d|_Ozph%OO|n}BpR^;Bm#*S5REF6<$q_vc(L#JT_@LYg)>aJ z7m7Q?-|605*2~sDv)!QokZlNUm_Ls}D^H}<&q5c^Tg|Z{w*Y;voU3h^lZRj2rqW~J zPIXd7>YnQAMR&Z8U8hXCLtD&8JMFC`=j!k<64Oy}~EAo+;?S|ZW^!m-78#T5DMZ8Nhci@gM1*mid zVvpVAGh#lUymxNS5+TEK5E9WKxKSywGT_- zL)$%@!1@qE)M_o%IkfrkP}lbM_9*I)znrP3FQ?la|LTyYK>+G}PJp#zH(Q8>_kI0S z^#|QHc;h|q;MaYs9>4M$@SZDeWXA(pJITI2{-t9toW59Z&3(`4ws-TLVSxvzGY_!S zlKgp#%Il4$tKTfx7!i|$NFJwS4J2;eWO@GR!&af|_EScNS7r0#kK*wh%B;QDtoyeF zgv#jCcUm2Hq5QmXiGOO(s9U8&M5#keGI!k$@s)(ff$Pt8PdmXJGDaN@j=!uryurYS zLs?{3lA!1&i#7I0h6}#f$u~|P7xL%KK@}`&xO~9HA#_+}G)Ha7cIgbR;3^D9&N~~j zr~T5g_4qiKuK}BBD!9?QW8t4ZEGfX;(vyA=bIcQhp{FXDG9BO@eiRGqjfOJ8G58iG z82N8XydDvL;lI@6p*!Y?!Lz{_=*hvGy3Ft^y2AH0h@@zNj}7%RZDW z!`#2d{6Awn9l-q=<7X;qMQtf)-CD>rg#fNqc20d_0DLJr3v!AyVDuQqBuLNVf5mQ^ zm>LA~O;rm1eIHMVJz*)?&#&@I4NHV67`)nb+UCM6-l(O>syW z@4_kyLv!<+IGV;l10^6uX6bwu?)M$P}hiqqbp7e9c5G1qVUXmTMnlH$no7Y?l??xphGN&Om43$G0u#d@~&f3vRa2#T3<%nR<$41BIUU>;dy#ZaC@YWILx#?hN%@%(wUq7V9wV|WFrJZY; z9a9%sAM%=4nt>bs=GBu!2`dAI9JtrV+K86y&re6M{<6@xn$Jtn33z}?)m&*qPv5-~ zWkA1#pZuKnF6Y!F1?okYpi{mdbl8)^vID2{0s7}+QD?d$&rG3y*ih@}^~rb^P6V)4 z{NTZoT-Sv4hC@F}Ro=-bDU}I!#G8kKXYrBYCpM6^My9*Pv!cV>Fa^x+RE2IdoC<}o zOI@4G_A}Ugex{u~#bjG>o=uu<`-5E@gKqD>B>f(^>9%q`*F|k2tet@6jiEC7O}^9A z53!mz-TicBu~#Qs(FRo0pE}rJW^%%G`Yif>jp6s*;6ztUTTVr?n5; z`ovC$_|ZB^@9s!AA_HvWO^D%?(pPq6n6L#4Ls*aRZ7cOTzPEY!1U~X`sc@8xrkyWJ z9k-D^;iNV(`R3XB9hbTkBHvb;yv0B=#qOv2)6Y`O(pki33oR24eVOw-iocLpS|+V9 z%u=sbL+o1YZCrdqiD5eV!qpE|zj$Ye%fXLiSh))u)DnB~U>fZhD;^^{*#wji{?4z| zZzav_R0H%aS#!*Lix!I@Y#i!ujQ7?LSM_+K%axJPQ;P{VAw zDs{BP))R8nDp8}c0HnG0?v7&X*ce5Buzi|gZ?iTdZ@zEhaq}(#NLxroZ8+S&NO-Qc zp|8ESqBgo$QtH|gmr>v6e(KIr!5e;9A9tO@62?qo9Zgi~Z6t@JU)K|z+8#HKsmUZ& zyx_oQv2e;~6Q!P0Y799RATkuMI@#0L*u)}RWB8c! z#FwvT&RttMnGFXn1#CU(SR|3*edN@l6Zlig@zV$|C$dI*7Oi=3Dl$V$mS*lU*Kcmx zKg`%u*1Osp7M7$bUMIsLmrjZ9r9|yNoM4Am4LD$Rf?27~%3V~>uIhlt7T5QmXnoWl z7CzMM>7(%AE6mI#f)c@?(CIh7^Yfp zKr!@Tw{p_j*yorwL<$cICJdBuczus_^+wB`3Mjgp(&lj3sKh{Tbw00DQ1Hkab*h*d zpxr==&{$dB+L?lxm3`TPzNF-<=Tvdrk=F-p8PqJ?Hd6@blcigpJ26IWO8Eu)Vy79C<>jmCa}nGSD?BGXi0&#>pN=&* zL)!q1jqLu1uuW+Ng&JoiKOEq>-oNwW*aP~yE{0lySvxN66&1(qX85}7_dVup3T>sB z5Un-XJ8z(=5jS{q**uafmHT--TlAv`LS+025p# zOb*~@qGcS6s){;v5l?lIP_A$Q^oO%g|BHx&5Dj#6L05+8^bEaZKe0|%VjGTD#=k%h z1ZiZ;74pzBjld?-!i zP!QBWSTo}_xiu%WJ8e5UglmKS=WPf!a_d{yme#2p;w`$KRB}dfXz0IQ;Xg<#I{)=2 ziM5U;{|)nK(V+<>1R=r}9lg;%2ZzF#05Q7H(Frk4EH;p|3(>G3d5(9;6yee6lRlq` zk5uA^VbX6vLq8ZJUFy)WrlFBkCO;%>IK+qu&*;|FDP0031B? zV}FvRbWHafX$t%mDM7*}9XTofA?r;+ru0<1O&hp;2oim#&z_rcm%e?}edo)B3Df_$b$6ASIXY&pokE^@v41 zni_8Q<=eFu`~t6t!`W2>q));w&a?BSg7m`IO&HHI0@xxX->=do535rRj${~X4-}u9hFf+tB$rSPI#VXhSIpiM)3x$dauvI zQr&0VCkz3NR+Vt!_C@iSWV!KMVW@S3-!1HfFIDf5 z^X~E&!N(c?9M73L>*Guu_Bgj5kHR2A@?CRGa@>`}xnue%! zHf+Y>@|oMdM`Om)oeVO{bG)e9=wrHqR{rs>+C-VF<|#5(m=89f&Nl|6ynL@=mvgGY z!uaggQp*>gqfc5rzx4V;vKGahq-C<(lod$1T%0QXNu1R^Imo-?E!U4r7VzXTF!yXy zWA6;9jN1t`U1oe9@$8foD#8ddu~@0^AAc^Nav9i)bL&=lR`Q7nxRF#*=+7Z@37%O7 zH;%l{zMlgcrGi)9$v9cM%8zP3x?|`Ooi?tO93{l*M>?0<;!sMIJD#Mz=Jx7a0Gv+7 zz)(KVpiQ*j4Yr=!_2T5$#@c-;pIDMAYlHVoifLIL0n{6OQRxJ}2bU8>VpCH?<5+(! zdm_VBz}oQOsvwcGG@f(-HPFh}VCK*qmMbMz8m(d`FD$4VRCiuJm51lx`bE8b6MU~{ z;&J6t&sP_DeriEmF$(|$mEUdLg3Gs40h7Po9bE}zs_EE<7w=Kk?XO)4L57E~?2`uK zpg3L>0xS+@?gZ>P-iFUb8=cSnQpG7IBJ3RV>8WP-tu@RCavkZ!Jg%!SBJrT<1*#!hb+*2;P~qDA5I#{f#bbaM zz5%`aLYwg53Ei=|7#)|o>e^WkFhqVB`ld2E?f{HqRM}6~=_ofzCk-yyWY%@a_G={H zuy=S3!Fq<0aQu)?c6Y=0oXXnXZz>r-q4GKDHAz}F>a5taH{O;MMlE*jez}cv%_}~> z?igV$tw8`uKVc9DUG2c45RH9HPqfcQsgBCvHxCj=dh#yK5aRP1BAK=W$Q|ZN^q9a5 ze}bCNx2x18y4&jMzxZW*xxaSA7`+{^(T!>il+NwSGSPxkERZP}v(hFm_Wl%5JG=#| z^%N+nd@Gr#mg3CFmr&KESfDK-xW2@ntY%`|ed?(82eK}ux6}$IJ$>nmIu_B2xhlAY z;6aeV<4uw+@Y@JT{sy$H$^FX>Hf1>)W7UF>S2|8*OBINOr;4N{)|#f3JDYPjj06py zsg5!1m_l~AzF@DQo9+Mx>}OehCDVCROd9KA9pJW65E*1F5#4~Ho_x`A`+0jflFhR~ zgmkmB%p1?{dQ`j?py+B9~+r`Xe4vU1@M10s>`wXI>OydeMIXY(%_+MoKEEXeMpJN93=3n(Jf2_`yB{0$4q5T)`H=^6Cf zj6+8PbQz6KIMFG!-@uC~IB7i@@|fYleXi}5zk0+^`)nGu%3~UIGekti$22_>p1WWY z(&|aLa2@AO8eyi_?M?q};{Uv|-(ZEbE)7C}rfXf=jHCR)91ZJc4^98?tyWVxu2mu- z=dZF=5eA;;b(s~F*!dNfRi0bc!gec_Lq&w+#W(PpfRzq2hJ>syxtk)FD^j7nO;vjG0FD%#uopTOW_T4L5fVQCmGWt8t(x0sf-) zS^IdeN>DXS&HmJ+@D&8e%!6X$8O zm7XI!cNZO``=RGAIMQ?}ZJUY<#ql;-3_wDAf2dsOJX*;DP|y^XAQZ!+0cUUzc-w)u$>ZGIk!7R4xH ztF|WIR!)Db&jLJ8cId+#cWRUlSIoI+W5^1)eEC*UpE_ZNNgzgV_JKm>RP?7M>&I-{ z`(*32O{mX~&9OjiphO)<{KINSJ%CZ>BZo}UO6N?2qfj*IZbvx})obGc_4D7vieGXw zpnHx(3fKgBIsSQcwjAY#5?XNT3!suHP>=w~=(=Kbz?RluLfVoD#%xbqjIczuqZ79!qckcto?TE69?upF{ z7A1#$bkt7X_wZ}e%+4z>MlHU$EtYnb3+A>8eZxlH0r!r<1&OOQep(io-s2^nu?C-yJ}Hn4S4~)bjy@)B8c3>=0*q70ljJ=$T!4R(K2}=w zxr!v?#F|pG{<%ZI`e{uZ)7o7HUX6X=8jWwcAoBow?8KrlSaCb&6ht^-qdt6l5w%?3 zbScCadS7E;P|0qibHO6~-$*zqxTpnNPh?a%g z5<=Tgcu+}H#Z@7&;+LKAz>y9%Aj--KFER!-Q4uE!hzLFf+J3rzLR+i9mX+nc(QozX}jaX)! zvi9x6;o(9Q+4UJ=wFZj>fDg$pPP5{s!}@-93-go{H(w)-sc*vYB3yD;UU`O@7$eSv zG!akjLvycK;v=sGUbND$tH2=Vk`2zllDwy`W((;afBfd$FQN+ZV*pn1$F9%uy2okb z_E~cAlIuxb`H_N7aTY&l{OU#0zSE4Hqf|%ELMG0p$HE!;PoLHpy}EnL;>Mm?BK^24 z_UugjNBeCEsfsJT!;f84u<5Be>D9`K4)O%1nZn}Aq>E5_ozc&~s!m0}WhFd~uJmSF zk^S2Iun%F5dyDw&**${v%%fgX4jyyfO_JB=6U<@6eKC^9UV58qVr$X-qne3`RH|Z- z4Td&e$~4eZb7gFBD4IO^Q=_T7J-5sFlO8`d_sWD>=SRZiayM-OA6ht>7fe=!J}g@d zv4+6Lj_q?j&bQI&f#~jWUneEVfZ|8o0>8aa%1-w|_G;wqoidObS-$Sg(bGpXu?1fG zD=a;L(xndi=R(+^WdFBUYqx74)G!m_Jzg5H&%}5m7GyfB(Bu8TaEq8hZV^Xhx8OHK zqSGowyT~9a8A7{kW;2*C-f~2ob`JMHrIT52@XY@tI{g{nS@nq^yT{*jp5Gz3Sn2om~e7x3qt(=int31i%#We8c3;Q6EjUAj%2erP&&qf>nUxLi5`c5+?I z3QRNO2gJ0&Uh_#-dj^L4Tmj?7C*=3@OXsw0{{;a|S0Yh6`vBs{0@h7o9U3M`=v&A!?V>UR(D054+aba%;_riza6(7ZBpVYNds~fHDaL1gA5ZTUooq3CP)p^TkhISZ9#lTR!{e`1-P6a)`zv{myn2j<2Ny%MpTs9xu$!~%Tlmhuzhi0GeI@5y`$y5V z*3ma;f@^~Bu_x%S*Y_B3Y(2}b{50vY5DNd`UeC$e{L+H3^25ZZxB6gb#lfn)$rLlr z#x3pJ1M)~o@wkKnNdhK9gS^MQzdR||7U&)&WK9?XAv`GjW(G5>(`h$!r`5>uv_bH; zos-^wu5oh|He&!D7cGMR7$(6Ppp>T=sJw9dv8yL0dgrZT9pvN z7EtH)E|W}UkK&H3ZQkin{}hSclV%Y{#M{QUjmLA+E`3lJW|@;xYCB%t8Gp3!rB3@j zeCx3 zb>C?s(WTpbE=gyQq_wv~8~hjyPJfuq|C*U1ha1)OkK_Ln3$WB zceFc1Uaq~6S5?nd5VhhBIPjvJ*tu8N+93cLYG>YHhFMDUnbR?*ooVDf&EJd`N({1o zE-rEbnU9;ar-0UUw-c}POLR~GOBdK zAIoIM*VVEI(4RgdFA}nv78*$@Ti ziG0wsNf5kPa9cO-$Z#6DQFLcd9Ml#2W+!ck<3^);+5Tzl7m|Ft4X3OFX9UVECnDzB z%96fL90DC9KH4GB$c@u`QZL&Q0-7=VTvE1?gby#{q$j9rRwQGY}T{EpwBB!=oGQAu!Y3Z%zggF(IXbWZ%GX?2^arW zKO%1-J~L%W`${BxQfBHYsU=T7$As=$zC@Jc+ojdTfj?w|GU`IBdeMF;(?QxeC5Q`1`LDDZgHc+oZmp z<>*f_6dk@^S}D*^!(7m+$T0J+?`XmEPOWilv(8m;ahb7;^ga+g5%$p~TO1QBfp%PAr%RZ?uFm_`-ZD9|>?j$@BF^+si zIHDpB-0mtWtQ>Wft+%8m*3)<@0JE$Jgs%6l{%z@zFM`6F+TWNIMLM*BxCBpO83g`# z(eshk!}ZFap|^p4wg!mQvP5W;6}s3#3)heb+II7P=8Ci8$!h__8+Z*)78r|Hk^Tz< zvu;rO9mVM>WB=c26BCz--tE^R)ZD&m7ar_&M7o9Fn}icHX@;fc7y$&u!@ed84SW9<;r?6(bf`*~ zE&sX?-TE~hH{;FvKNy()bY($r4eO%pGE|7LtK#)h##eWhIi^0db@&)r5H9s?y#IuK z_pu0-y~osLo&=2V6qn*Uw@2d1)u}c)7K4iuS-{$h>6yW03ZgARt}$Qu7cOX-6A>K@ zx|l8SFXCQ$#NanDLC3ZaN86@&(wN;Qy319-7G^|xU+58EDCcUTI~t+QOLQ}W`J6>& z9Syg^+!a1v3J8R{=nxNjZ$>`H>Sp`(N{$QV7PROK;ZjFacTQS*-O2KLJ*j=jy{0p zx9O##%7HK1MH>0H)CyXD_4oc{^DuEK73^t?;|D3$nI`ef@USmqF82LwDIGWpk6TKD?sH|!e)!& zt0(iJ35EFj@41CL{4rcZ$Jm!EdIq*!7oD2tc9bm1^p^|R|G#1l%-Jy%}bt_>2Z zEIjKmHk)wAEtVW5wi@fia9wyp41k8Q6bJ%Xl1*H&-3gW?tr4xm%~O;9sORj?c zvmKttK@%v6IWp$6Wm1&8B-mJC<&U~s{t&(6#OMRk<+gQR1K(f*+9#55@&k^IE>I_r z!e0!QZv)lxwyDqkw7}mC9gS6p)`Bl5P)&eQB^;_N-&f^W?>5m`CYz*FR(WpB&~ z`})$7rQBse7Z21ODX>7OA z_L7$+Pih^GZRUU~?3~Nc5%v3)yn|D7{ySQNr!90S7v|fp3-gNt5wD2@pNxp-XLZ9J zh2ofS@iExMH;gsEzAzu5_H8>lfA^U^zFK35LJRzOhgynRk4UR2_`;Fe?Y6q%^Vv}M zqY(}MB)t_O@VxqnslCiN@difeguOHtl|DL(4l+Mv^gXBvfn?(Bhd6Ns1CBdzZ%pdv zTjrJ3jz)wApfb={*o<=rL_fcs)lBqR@pbyOLeWsqL^NpBv z8K?bT;hwDNrj&cK;GW0zRGqZf-V>CeUEQ1djnYR!Y2# z%lbqlvf{kWFgxyuLM!L8am$JX7f@6WRhm{^TjpD5=Sp-Qfnbp#xzXG2r`QA3$DGY} zc(=ve9h^&6;+o}Tv_uk=Pw8((fr{iqgTYTubK~w4iK}|)KRxjaK|OB<>u@teBdUU5 z{hB#=L@!Y8oY)0$9#@a2SdeXi2^vJxVHO2iNz|ULp9hlAJMN87vr3)VoPJTd~$h;?Km|kq1ZYhXa^a53KL+phsjreNGOYWv~}e+>Y~x%3(t^vV3(A*H*|t9?ZtkwU%EI z{6Ov0d+QE+-2>dRWoUZa0Y@*IxuAVqI?ucJMuJi$@&TyjKpYDJ+M{mVAVi8 z{u#0XF(0p1Y8g}2=_mnS)`C`5yQv5e2R3+{0&RB)tmR2u5W@5Uk||-*Q1z5Dk{M@t z(mwc4tmiSR;UrlAgMaj0l2w2`jW+TtU}L|e7a#dXw#P>|-E>}LQ!|XA$rpi;wk*f# ztJ%oa))WMA8(`9R;W>%cEQqKP1_49{F6rEDRLyOp5^Sj!|(J zWWdkxHT>AmftzmIRx>buy1$7JConf5sBFfy^;NI1_`KqD1)ekZ((Wet1F5`@+oqRq z!IO18*Z>@{KAN|%HEHw-4}6u8`$d7gyN+^JxN)gGs4gf{r<5%l@A(}{!q0@~+p0R4 zq{RXZ^~dAi!{|a>*#r!(5#$Cr@`6vmqZL=W29B5m)Lx2Sb_l#jay1quK}Z)X*wdkx z?FIj(vbq7!mPM!-nh`T1-i6Q0B?S4VY6d({udT`ulLX<}Id>kD5=KhE$3znWKa>;< zc*+&9sHfoEHzm@FHn@oFCm4&NsyGtPka`=RLjb%){58J$4cL0>2rjPE5S#m<4V$g6w8m6CD2lto1eIqWfKMzP5lpgk zlEXpS1V~=0krRen)3NsX3J3(Cl;Ppm@eu_<0Cx_Pf`V6k)>{!348aEIli~t&;gLzZ za^TR}VC6h75KY!XZ28vOn4lw_=LKKY14wLUFshW{P@xCa#xU!?R((*z_O;Px&cv?o{_uIgLY+ zdnf|zIqjH|c2R>3ml(Mh*Jnk0%dW)_9!zj>#5i17efIja<`Y&U(8St!Mj-{q+01%L^yM-5=Dff z$CJPX3Wbp6=zjIuGdsXT+xQ2d8W~vXj|+wlyZ_LK6+S+~!*S6bdEGII3m_iHC literal 0 HcmV?d00001 diff --git a/.image/日志中心.jpg b/.image/日志中心.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27c1c6cb55c8880703cd3880aa5ec669aeb7bbb1 GIT binary patch literal 85863 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ξc>! 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 wK~}?8N5vl1W?H5I!Zf=`W+#`PyV!Z literal 0 HcmV?d00001 diff --git a/.image/流程模型-列表.jpg b/.image/流程模型-列表.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ffdc58405791ecb5fa568f5b735ac85d61c7d4af GIT binary patch literal 176724 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 UZ;tO>p!(mLFFEFP^`Sop$hV66>AN&% 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 literal 0 HcmV?d00001 diff --git a/.image/流程表单.jpg b/.image/流程表单.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60669c148bc32e7a544daedfde464a267e9b2c0a GIT binary patch literal 151328 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

    A=*BhX186{lN4>c9wet2cH#I+mVtg9k8E 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

  1. p&EB)HwAf{=AT|e4A>Tm_6{|qj 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 literal 0 HcmV?d00001 diff --git a/.image/生成效果.jpg b/.image/生成效果.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98ff2cca592c991167ca494130a77067e70cd31b GIT binary patch literal 131324 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 literal 0 HcmV?d00001 diff --git a/.image/用户分组.jpg b/.image/用户分组.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39af1cd19e0a876e5abf1e5f0de5d435f2939b7b GIT binary patch literal 84261 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�A(%D3!Ej(qu7 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 literal 0 HcmV?d00001 diff --git a/.image/用户管理.jpg b/.image/用户管理.jpg new file mode 100644 index 0000000000000000000000000000000000000000..844604a6465a4e933324decac220d52e737509d9 GIT binary patch literal 114780 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 I0oSqr0Wvq-S^xk5 literal 0 HcmV?d00001 diff --git a/.image/登录.jpg b/.image/登录.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b782b988c20126c370b010f872b96c46494a1ff9 GIT binary patch literal 95521 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 Oz4;(d{o9TIZvp^9f3U6q literal 0 HcmV?d00001 diff --git a/.image/登录日志.jpg b/.image/登录日志.jpg new file mode 100644 index 0000000000000000000000000000000000000000..25662d97bb5e32f554344a497215f596241271c2 GIT binary patch literal 79281 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�Z0pkZuQnb4(CdT8*mIns26q6Dx!kg;H-Zb6PxGbu zWx+k>9g5Tbd0kcIi+-lj?r)^XW@Ga2>;ifE=Cnd^^cJxAI^{{?y`Wp4rr%&+BL?eU zWEMJYtrYQ&o?C7>c>Wo_{^6VP+V?K1NL4X z!>i%`F0G+udukdJsR9Gkqr*EMVYw^1{x&bg{mq{!2xDR?%WPqQiA-)k=+izIG%Y8M z;ECH_g@m=inS$a=o$yYxs*djqD!oR|fW;kxVp(Iy>IE}#8IOF>Q}TW`Z%FGd9%c8d zgR8km*vrG3$jS~M6LjNZ4S=#OVARMh7$B18nAbKRG{H766ZY**UKM72@;1JH)64Zh zE5dW^L{ky_%Fm2m?J&cj!6I*=aqE5YqgG#Dk?2*xR_B0FT6!A&lNTFMKAbYexj2Zv zR99(hN@kwHh$gmQMK-RZ?p+VvZ4Q}?QFo!%-+4nN0wB+U{A#;JzUlWD1;viY7nw4S z_x@@3mMy?~+7K{}g8us|bdg#9B@`JVnqtNZ(S`nbE?pTHvLgI$m2oMi_w zyep5lBTw=A&mcUx^5K9fiJkkMQDDA_I#be+I*PO<(!s$JALCa%4NZjC(fT=x2!vl=R~b zkBtcz*%e+!xW!^HD|I@%a(CHcssZTAjD%2h7LDf$>60?1k6gG)1KwT2Qt_NDmJn=+UQvV@|q?c5t@uO=Z<> z@B~u1a?e9wB~yWl=d8S#z$H&zQzJzg8-()R>?L2&UcI8s!ld1g6O$QNIgNpl2|iwpS-kd=UA8-3IUj$(7{zl*TX zCXIi9z6^>ksP6aPSC@JpCl8>VESFhEB75)^X8hJvltTDme%Umg{;{`Q%q) z$9xX=2nG)+plmhQh_`TmHRuwXA*gOLIy2+fC&>;z*)xe9VH@Xzieepy)IEm^?SCdw z%l|yDg8V~voLrSQ_O0i4-~mlZ6jWt^KpthLvKu1jE~V6@jJntRgaG%FnCDNFIs$N# zVr(5lazjC_nByg{gwUCcq|e(p&lL^nTiy%7tzWN|_V`kA7rVzT+_~5Ih(ob!yZpsx zR|@>jQ7vjIMs-z~3z}N<40M{W6%h=vlKPQS> zv(1BAl$>C3l{lU5^I3_{kSJUApeoEg!uqOaBBeTyW7o3IW_C!z=yGRWrai#{%;yMo^mb4#n4xV@BNd1{L4 z_9~qtvai~2Y2L-tFR{}L>QeJ#1?%^S>;d`(PquO0b!Uzan-U<&!Y3?r4~X>9$VOT} z9WY4?4;%)wd@9|GjBC8}6CjF`okqBa16EeZjJ2cIe*%6kbD&V9DDKl}F zmn$WH9DcB{fNzpPLYMSVvUFTG1S$&@NsFLD>gLovSPw?@A8LcU*&QC_K10vFt_dYU zH46l}S}_pg0b}2E3iENcD01C+IPin{Mz=q09NKS$xj9)*g<&BNjJs;JkxayO)&7#5 z=Qs%xxxu&RUd3}6L9XuB##Jkn)e-v^Oqq_ySZx|&pE$3*;%M*akL9E1zh`DTR!ka2 z;?q*{>Cni|-^K2OTXHrqf$Qzt6wV1ue>=gV6`jYWQ(YKBO z0BtEg>9s^TosS->Wb`d;7(_^@u;Ly5768r`=sY{toJ>XiM6fW0iHiV_g_1-~pJcx& zbfXF3y}jP3CT_pn1Eg^V@U+F=7NKO9eyrUa%07aa$;B-&XC{KW>n=a>u)^hSE3o5U z=r`@~VoSI$7Uu(wv;k1{qsEaMEp+|UuDt>jmUo85%|mY7or%8a+J~)x!8Ub%r*^r^ z5jZSqU1iF$zLbwPzit7BRC*Sg?CMs)4n=z7J=zFDcfUL{6c@04jpE_aWhCfpL2|{n zC7j&QPq_>Oe8nBzMnH3J&T5TZAg*VwA76v$5Nzeu7f3|;*04x{NWm7A#ZrIkR_(EP z$8;ZFZT}0q*-ojpUjq8HDtarma@FvTgjj6O=gTM4bV&xx%vX`MB-S>5+2iuOUK()J zwWU7x^p)-K2x9H`@3xPXYR{WOkO1=fPVuT_xZg^4TL+raD!Ps8CsSH;E#1K~E8_F+oJ zD01rYQ9iyLcr~EkM7vxGgf?ibCb7>~8VM(Z3VXV07E;=mr_w6f@Oa7Nc|O6!6K5Iq zf3~OH9ap^X9xGGP!08Cc&FoCw<8z@O8uF!dff$r07L6q%9gR6zg)wT4Fo2mn-V&+_ zfOaEeWu-OE1R%&uQh4zoTkHVXn?S)T;XWl+>lkKdslHEET8}SZPmMg|`JsGek6%mU zn=+tkv?DJ~?lj8{W=MDtX3vMLyoWG!+`-8J+5&LyW~~31tt7haVI>7#4CXVq8%>>j zGDj9BsbC;OJij@HPnl2gqgoL-GdpFhv{jz$KyYj>R64rD zPF!FrC;VfF*d3PQral~ms1^=A0c#?KD502MxE|{%OVU%mc9|da1P@pPSIFHvIb%a) zLuwW3LS$0tP5H#E5U|U}KAuOUV1?a7WGQi;X=MAn4CIk<8{4$16*ND(T8{2!R7wWk<U+}iMHmDln*Cv9}B1=`|8R@9=;&n!~?7&9*B2HlMh)^74IHA5uycL(Y`{F0er z&z`+XZ7{b}s7L}+;xQRvT^nSV>Sb%Dk<_H#r!_ZkGZSY}z6K94^x_E9YIE6#pHC1U zr;bIrh}AHTzLy_uq@JaSx!RQNe!fo##+~(~Zk27%U=5KQ4WlXau!g4LO^3t*&}#}# z4SggA0}bJ;5vV|g=j!ipSiUl1rxpV9C}gnPHQ{?g{31;{cpaga1k3MOkSL=tMAfdoPFZNz&&n<+#>WX z9vv)-9Y;gyHtczT$z=rcJClUqnEXh(+I8_3(`nD|DN5ur?8S%A)XC`*a-RNC;PBBS7z|wxFbgfE@3N;x4_UCM~?l?gwU^% zcZ(ih!#-9`2>OfgQas-z0rnPl2M?uvGH(CS>;m9zR`SBfXU#{04I1V|v%N84C$TS# zGT!KIQGX{RtE8lc*G^4d1Q-w8S{xVp$m7i#$#`(5IEbA3nF-B#V-;2FTnNzLmiZzr zgSt@D8P?E4kn)8r@HoOY%Mc%=LE**~Qv(|%=Igv|w_votvzPPr{mlS-!fs*6$o7sE zIg5T6m~8qP$$ly*N&jUX_0s(5^rS&G=!x`KWvE$SY^6)$n^v(?BhZy175e(+uQ|)NKBm&n@bZ)&2rt-e{#8&{DMvD2$Tv{7S*#$- zfXuk?A7;o>4>By{pah_NuXbT1z3GF`K2P=nLX;B$d0L6kQf5H@p{8593m7f&h4;A*j%GJiX{Dss}yDbl`$IUmfp* zG>YaDeA44oOM|fZ%U+t~zZ!g68V)Eb!X=WIfvakN2zhl_)`cM9y~WB(9tJfglTfZc zs7eBD#Ss8LGgYzbaOM%Sk{*ZfLB(EkJK#mf8eQfY8u*{}5QQg~0<;~JleV~!#jG8- z1$gw{IQAIX!_5FEEcUZ@alq8^9cDcEEpO*M#^~71ku;e7wg>@}&kv$X6Q6g-AcjvV zVEhPOx0ken33`-tfRO$S!VCfcLum~#=DQn#!LV=**ebnOqmlQBe^vN(lt|@{%t^Qz>$zF<(5D*YC zp@t$I4T=yzIx1j8ECdKuR8aHv&mo@8wgqQc8^*Rlq*tqrUk0_K14uL@&G8HvJxe>iH1X*g?2FKLO{}+rRWM5 zW$auH$qU@bqa8r2Cw^T(F}l^&5~OmbDy|c~~UY zIO~+XY2y^M5Ho$lu^ExEuW#NHDyW>-aWuU_%c3Xvj3nf_8 zjDx$#MQWN#9^CaAM=W&*Bgy@%LV*ok^WpBJ#t9W5+_*^_W2qUWM$haQ5YP@*80> z+pmBhY%CiOhoYuJi!5HLUD-ntdwKcuiWcTQ+n=c2DC#O01ud~8@)xLB&n?geRm9kg z*GCqk9aNAcf8&$n-T?_E0feZFdP%V*$5#s%Wz~&n(Bx0^E`OLW6_=&5_amMTwl&&G zj=c`|UDI(2( zQBcsI2!L_2LAMknk7M0AbMdh5T57l3B`Ul%g1wqF`pW-aK9G~=i0=5L&Wmmq)3yZD zZOx!Hcx}d0N{V2Vii9PbF`OK1;umV8d1;Zb)l@Z~xrYPA6UHTkgQq!EsIHYNljqy#a`2pF(%^cKA zI3PA=TiYA++8vRYA5|VLD`>E;h1X+XDMu71b zybK*?l~f_cz>MU)S1;E+OwaYJ0OKwn%?$%>08#>n4y*8uWGw{*FZ#JHMtH>o>`Xd8 z^t7SpP+D@h`gW~X#4~<#p>EBJnn=BZM5XE~*EFBm`uQ+80T(x`;)-bV2VAl)6#&^e zIs3dSiJm21*rMMD_A9(&;X9)TL62XKFY;ge#*Y_gA8mPJLf7bE05ersz=Eo|cyjz? zkVNLDm~qbmZ-O&aklhzi=3gVSh6e;B(075W4_k~(TGhV;^>>0&d~oqaUsJv))=dhw z@pV)m5aQg2B)1Q^NH-%xS(Iwi5P$Nw9U(^+RbNk8I}D$9oPV6Tah<(TX)|9#Vt^=` z7`YZhl1d@8YTw;s#gB*4z6z#B-D{qt5W88_66U8EtQCyfp_Ot6mc=rw|r}azBK=-wfW9h5b2XRT;)qyDb zMc|4zC2K3U`Z7!FkPUz5)fw*Vxu$QJ zW|iabBkXk4gdH!~kv<_&f(8vIll+~ws89L7kJktmPD*_C4kfz3k3_j^F)gXPOCOw1@B^jT@KilyxIw;H^i(SP%fw@ zC{cny0)B_cMKofT8|r|qwv#W&QgeIEO{EnHG*QnG7G}ll19DDPmt3#bFh3gnanw_S*a8F zSw-~sWyYB9y(tW($Vjh%U9|&l;s0In&$HV4{W+*aYMJKbAUG-D*J_!X{>fw6rx5+! zOs2S)czBMm7G4G12c3Cp+G>>6u?l9IgZyy;QG1^iq!QXFD{67ZBu68>S<9|7W*1Bq zrJ^Ztw-z=K`lB1{Esfe4U>KS$mL-|cGt~U}*MiUY(C8ORkK!_R&B$+O{{8TO)HuBS zpLdxe3>r7QeDY~0(@_B{UbdUgO!fm*MvOX7rx=fGjxNw zIzN`_MD4;vtqa`<6fK3u>>61K!luaaAM8F)-+f~w_m`~3lgP{u^0^K)v;=5r%#m7- zJ2qOLHn%e_^(vZuG0=qnmHKjEq(M{CQlP&gp3VEoH?-Fx-wU~_z^(T zOpxkA9tp;RZL|LgZ?J;0UzqUEBU`uujW>^J4nq_pQvIY-YYw6RumiRs`r`bs$i=FjGeNt}N0cX06s4-z&pSj~ z#wmiE$20r*EGcxtTK#Jas#5?Y5689+AT(^TQ(o`IP!W`EN+Yji!Ii8R>}>UNj5MS>*+V#f<^b9 z=18SyY2H>A12bqI=|?*awC;`5b(NF9`ShVH<>1KaSlyg!_jY}XZnoI|Y!;?5x2J2R z+u6LrUe$-5clhM!iC*Tl6-X&^7DAtEU1W8wyHmQnGBs;2RPPCZ>wm#`(426Vr&7&~ z{6!1#Js-EOqRn00f_u!)Iy}B6{Z);nK6NWgJLyZ4bQf8kfi6)I&oZ7$y*mSu*gm{3 zb6~jyw1OAN-EY*eYtCC})^mW7fP1ZpBKcadN49(aZC>9<`E?yX5AZI2LdYRcaV_m!Sm=ZocBxL3V8VjA=rph?tKSa&>d+RP+Aa;B^ z-|X|HGyQeYA)Xro15TbC#lBZ*+ai{57Q!uk|6O}b^VU0z(;=h5Iq6o7@^SQ?utdHV z1X8dnfrqWi~AXiqHXC<+0lZKutu6BNLB?yC#8 z?;>lIX*AMSSYlDohEWJc&SVNEUR6Y!w9FD8ypZ%=y>&$=o8Mk4$s{F>Uafho$=MQn zl;-aF^1-AD%Wc_x&xIpW^-eb?h0LCC*FEjaUk+VNJYfgL=Spv8YYF5%b2$1e^YBp9 zIj6gpN4ED6WUa7Oeo7?Ytp}10{{sg3P7~5rsOoA($^TIh1kLQW#!_|J=ls(Uc+D)x zqUc-i#vIwjJLbsCKe0@hR>Bo8l~+P1t`1DD~PPaC%hQQD0e_$tyoLT*#-8P$!#N$kK2Cq4$h<~ z43R7tqmQgKbgS=n069}&V0xK~-Xv9mnQM((kip|Am`jMa&Lnp%8|zXqz-%0%ASuZv zD3rp<96O|q{7;gp!y2VTp%<&j05^eLdN2T*2@#O?EG&kKMpR^+e!Fx@q#Q*IZc;A2 z=;5#F|2mD>o}Es|)>l>Me-&+_db`!XwYt=;Zphtr_GJMMLUu;jEd6-&jZ&tmc}p^X z<31u_k)u1KG$XQWC$dZ>WHAuh3p-t~qj#f#S{{UkGjk^=+`z|e>IK@6AfCop>JG4& zpI5&IMf7xyO{Ye;-+mP zM~Bt@_sxHoG06MPL0n@kxlZ*PU97t;mUY6vzYKbQXnPUgQ#aN z(mrLJhIeSVe$Ol)A~>hn>tE&1FMGmqfh*maBF|LOf~az0+!FqF3hZ3BIx)1+sT~5> zJ?~8%-#U$3fD;P^TjWoFPxac-0-QVJxJK$pLQpv!Drr#9_5H;H6Eti#VO&~E4 z&VhDDr3o_~(0(!uli#8){|S_exai5c&eYP)x8RHX$^*KXE$L!433N(!8vofZd0G--bZB5gM9m+SMq$y|0)HeLZ2Lx4 zgA^$8P+MwG0k#bT6$upAeCS|E8G@-?WybfF+?U^xwy~kD-tj2AtXXv1)bCqj}AA%iVPu> zz32%uO+ufrL!WapyaPUwMW9kUMN}bZgJ>3sR#|DI5N_ED27VugZ&|(0)}lb zP|N%4=-xbQVp=P+VbE9vj%@i_rt=Zz`4uA-U}ztIiksAz8}am%1DXVWqhF>j)v)sp z0svFews3T!n?*#LZF%j7ntG+QKbYl#->1H(`Y*b?r$2XY5!GOn@#2s2&u{g@juNu1 zV()V^*W&KKp0t0!$t^9lId`u~{PSVbW6Oejb}3+RmYb$AEiBnqMSy(s)K`rr7XHqT z*vL(_?PHpNeE^JWIdo{q?4V`jyLy2ykRsbdr%rgq6)B-4g z-#D$;BVKirDwdckdRDmHGgscjbtWuZpkipmc7hx&M#=^h1{mf&$hx$NcO~puMm_o# z!71qjt{3?sLOq#mY?mF|+)&hhlI`lmeRWEe7SZ_pC0Xo56d8BNQ}Ihz`jI3}BLyNB z`-+J$le`{IN2SIQDpq}w15Hc!zY5RiJ|TY#cLZL6_JTs&ve6-#*1-r{g!`>GXT?Rf zK8xnJC)D}NS#^KvakEi~bY4@kOg*6|@+cxb#+M*4Hntqgi+-|i14){gAyi z`KIZT$1jh^;Lo{AUKcMcagiS{T4IVzpq{iQP2Rb*cagnu&bcQ|gWSsBJ!Tzs^#DS4>#}NlELkJrEKq z#K~4>@DJ4={&C7?&({Z4T@A}Cz%hsCKyHTYc5_YL_8(0=e*L$PcfPvA$k$(O%bQdv zMf+R}+8S5V0fRhF0dK)13J#l`s-A1L%g?Fx3(mm#6q5D=XOC`|pDp`Y;L_|uw# zo6CvTZn1OC9C3NEdtk1hMZn)`-T!vA&O~{88*juHQIDl>0l@%^Cm41G_z78F7-@?K zEkx_WiiPx(9%V5$?Q=XI-geA+_d&Bo+id1fk&i(33F89Fm5x(ALP61sR#0pAU;9u0 zE1Vd-jeSP#U(a{*VoIV~l)ox&=P}M3r)kKiqvrh0GdEoD$sdGS+=|~_K17tAmVaxsa3fh> zAlDO;HqVHM974WZMNEKOT@y)my0UNzK3>rG&kSLAJ2l z{RNk9IqYEFFk4=uEMa4?>t}`M6LTEko?XUt^=}G^qS;QtN$B`>Td&(6P6*#0dS+8r zrU`@Hs3MKq1_r8pHssITIE@_QBat9?9<<~T?Y@Ax*FWU&e$W$CKD%+aU(Z6xzmmn7w zqQF`-LB?@|6NYgvYmdf%ybyn?-FZhm>qM8x?Z^PVP9tr8A(K;czygi9xOTegHc&l$ z|CKiN`i)RgWWxP~G>-bU`;dyL9o$c^ZY{6W@RPuNM}_AuOrh=i>;#k}}#u#|+unaP62WHuES&nM&E!NQC=r4uVh4+&&OhwYJqb4fcM=xx9y z9tYpr6~oLto+W`>?ftQDR9rC$l(jKQ6+EI`T856OD&C?|IYRkO$iW*MVE_y;0ZA4~ zC^&=Xj>idZv8)MVTY3Ry)Bu{$N z;*+WLO7OH{ex;-UVY!}2^}-QoK5UbN`32CmC6g(dKSne)Zh!ZOk_O!X^%-jO1&WQN z2QHcGyiNP!qts@q%PFc255$Z0p%ja?qFckrBW)b2`3Cd6nLmsq{P7*iJKyCLP{Pc4 zJ6H z(yF1r+>+@GJ8K-SNdrxifWIM=6Abn7TeIHI)r9W<7m=qbU4K~zd_aGup~(}$*^ksz z=5wb4twVSt8^7b$%EoOa!owG`3{X1>wL!qvW5cAAR5cS23*gTzQwj31qaw|^lN5aG zx^J1pQ9x&!bAxYqGaItYG2j_p86deTD|hFl`2|vtOLdJ*C%o(#%J6U!nJJ7SYbf_@ zIxR~?)Hg2q?0jd0|2R2to@=c&$>!~xe7q#pu@!KyV!La|)h86}EDr}R8`pxmkDv>ZZP3mfZ*RZ|6Ru5x8-oY`sNqhDT@|fLixw& zpt0|He@z7GUvh*`vJOT)l1VukUq^Pl*rQE$J^4X=!b$1X!n88_*wLs@=n*Pdx_eqq zU}L13P=gguPqCh=q|F)iJDA!C4okfyiN6sPo@qMdMJ&(gj>e~&e#X~zV7tcUEmQU_ z!kMW#aqk`$df9Jl4$D0i>U(bkM7ddRrz~k-&2-gR{rn3LGR;@S-bXtD=or-plqywK z?9o2KBOL%({beOz-gvg&(OsSuL>chFa6;ntnZyB%(Wi1p_JQ;7&8p@H7>n)JGNl>9#%?T^CJSDUwHDmFO&it%x0xY@W zU@6cZO`K%jSuE`pT#P(QljizK3x4jVw*7AzvjmeScd za6wrQEa%m(2{*MSmYLG4Zrv=mpMZZzTMpXKW%v+jPTimdoeV$RjxwreNxShwTUAMm zC{jp7=7@|+(IU_-*dReg!j(CrYA1$vg6TfLajv^yRlQ;Eu&EHFA2au0-+%KK14L>Ic%(`?Qtwe_%i z?u&a^W}mN1fq%iy)(n@ z_|CH|rxCrA5)xcG03{pVjoYESL2P0StO%w#RHioguu=Zgr1|gFL%nCQAZdj%jhHu% zvhr{huT&UNm>^(B^@d!@=98GS(M}^lN}pYNb9OuD5cJJmq^ZtZz*qnB7S^GgzTM2v@qR!QD%($zdV%d+0Mu*rOi#M`DSI zV}>uiGe8m59hvO$i?bPs54;t(mK|iLIbJoI~(M!|;Crb`r2` z=a`jB+Sz&BQNEQbqF>Us0JhYGWxN*Z`EVZo8)hDCtaMV}b#6zR^w%v_(W*?y7d6+m z`Uon9ZxBO1v)yP?9TZmFLi#Ee_S>5?zY-Y8C7f~{<5RX&ui4mHY?jIH2e}^&0oDtT z`{w8w#>_eG=Togtt?T+$!-Pw+hgz)483*HAP>Zt^0D$mwo%b=T03v%!$hE ziFp3Q^5!lka}BAXci<_6_T_<|hO=+mTrOr`?`ehw{y`?Me_ zO=2fT5ZUuy1~clV7I7AS8^<{}u?HIs*~3CpMp`*(N@u$GGE;YNy%wwD)YEs=e8wjU z8a+HjUOePg(Uc(4h|WFWCWS=1R65^<1d7>W?NleP-`KUci?Td>Iqzxj4&q*ffq&vX z5Xz)o*G;^*KMCcoW#d*qd^v~YIBC%M;P!Z{Sq*EADxUMo{qAVj*Yq}xgeyEgGDb*W z_Hg{0!}D!achPz3)1jkM8;y_5b<>#)h3BPRvCe_xK-v~YxVZWjqQBplNwWYA8s0?! z%$@s~Gp$N@cP19is}Ir=IVkH>>D+H3@;f-Yv7c@dG;ii>2-ATjNy`)Wh@QG)LO+32 zl2U>`I{I-PjTAnFp=0ye&Nt|@kos<-APvNup1Yrzuq;h}$;_>oO^042z;2y|yIS6& zfcOyZpyieXpI6{BN$T3IT97o4#SLuHW}y;hrTr&xO=#=cWoOO`2*j^VbbfRDW;Bqa z+?DzhIJ1^c@l8M4et27KoBC{21V0`zB}ggus@`E|N^r4px$v4i&WbF5#y0UzGeyoA zO4iC$5m&SFx)5mP^|;uxsaqS@>5jE^+1J0hgqMXI!-+?&h=~I%S(!A=VIs`73eLx` z>IUwTN)E`E?*ZSjt2&u%+@ zb-TT+xG{f`Taij+wd7vS{_^Vci4^frx6nS-sj;s|8u{~Y)*mX^?@W{%P?1ns#U=6S z_7|R_{qg$VomTOIS;Oo(!s=ELuzhft1KVBJJQ6kH?5^AM!UhrcfMa`j@#?gN%ohEX z{W}3o!ci3EBm)DE7(Be4=f(jAHN@cFUya`8pqa~bgQ})o^)`f(9puj!KG9-VVq`m> z=dTMQ{IMUYAF5$<$Gcr(C`QFuZ0-830C759RE^6g!%jF`!eF&V+4vm_3=2;><&))> z%&|H-1c`)|1Je=KD9U%3)m>D(@ld)_7xyFAB{zPy}VY88EtSbpqA9(x|81c3j z4FwA*to?~*1@IwkRAj4+GkfP7d*+@@))|;iBaJ5}I&2h=$_TyZO2G+z z9{aYgP+rR~Q2mQ^YZI{QeqqJ9G|ud*FEJ+{L8bVq?vkw@*?125avD@!<$DYy1p^Q6 zpyz^HK~8Dov>9{L%By2GXFPmRxNx7A^WL$3K0k)%ByI z*W0`+Ej(n6_+H1YMd*0fBEg!r~=tmjG+a1Rxmi7CC>mQDqnup?Sw5HaX|LOOof+8vx(sYn=hU{*jFQ0-BJyrtyO@@o~=V zKs{;#G&2r!8`T~;ok%Jj01r}k04s{0Pzf97vjP_2w+2H=hdW#cf!QZqItLrYE@`vgYpHfxUB^xfC?S-j4_wk-(zzN~fG#Y-$DwiG+nJsk98D?gi!_FeYZxkaBR8*!$LwU5;j zlH8pmJaBdmO`%W5yM>OYxwFIv@@pzZ9i>v{vIv{Q-+D!hOQc&K1V1u3lzx1$R$xsJ zm#uiau`j}zpGHx&h0f&0DQ#J!_nusp^pDyRL`=*A2b^)#bd8tTY4msnOB<4Ty1`mx z@^aA|I8KCxfRgUbef=#qnpgNhd#llUZ()x1xu42n_I8P+_G>YC;S#qP*E+>{DNV47 zlatVeg*l;a$-cNdq;oA=M?$}?<)&S*&%b8*seNszQ1DouvTqzKUO(#C?9w@&x)zam zFMU{1>umiNDZ(4A+Yp(T0y()5jqJ^RIr(unNq+iXk)v~yC+YdOnm z$1Lm(5SL7PU7tB_iRTNm3%LftKD0@?d82gX-#*H9i;eQQCm5uIo^#Wj`8F zSy!-Lc=t^0xlX9^5eYTH8Oc>36Eg+m6JS=YyY&6OQVuq>0}?%hMA5%{bQ9irQ8o z&D|zOqG4C;qnqv=S2O8jY##XIQkthpnz*EZm3fXm^G(-CJN_J8epgD;pWh?KTb4<6 z)p=beuVp@e-?Ond8OV)r9nY6jA&(NHKQp%J8hC#wKCu)bTfJS$+zS@LWPWnC?4CnQ zt#5r{khWekD>(KkZM_PJ8!I6ig z$6-i-d1>E*5P(MmXkb(FZ%OZON$)>MdVAWdxI7ZFm*n@Syw|(O@lT;Jp}_g&Sv+us z>=_>32r@tKrd~<`YZ(Tu4v+_zBJM;{80K|N7|WtqoS&2lFvIs zy>Pgyaz8Zi3-o0C#;EIOO_lbl3SM=KjRj}qzX6sYV~x|hO2V!0cGJF046Wx|-x_%p zj0qv*1@#Cd1(mo82zaVL@BTuqXl7Pn+)?LnbT_k zY>ia-ofB`?egd_>qA!0%h`jq7%KPudByRjpvijxM`!g@-*UE%<#+kxB`7pZTWV!Pw z8cSQ$*1tT3XTI&0f*9e4NliOg6ke%PkQ`$Z6}0%aarF&^=q;V+l>W`B6kMlJG&m;g zb}k@!!MtL8XEcb~`Y_1?x2NY^u76G8{e^arN?H_D=c$eqxQErId^#AK1D|A6KasVP z5Ph5q!`NY0`50Rvg*iQdR*(%et_ZWUsaVNYxf}hZJ9U}siSfVr_HUK$|F0^Ymor*J zdr@Enwa>OVXE0|LmK=?SpWAD(o$6MC6@*SO^o8O!_e-5T?iHb-bd%}ozfwoIeS5%otacd|%)$Sy5O53PaYC*`KEYP0aku#o^G zM}3!!L^J@+Mg-A!zx9%n_bU29ck|uSbqTd&aIo5Zx3% zYN#d`a_x=CDL+T9(aE&8>Gktu5+k@BPY zid)q9`YP=%BS9{q$sop{JJ4cPSD8J zLC7@=y?cW_0b~J;Ew3&wx-k&ijC~f9qjm#=Lc=^7LE$%47XHX=8df1umFT zDCHsf<^5ZD-fpBxJ~7uohk0ZUep|UgH%F3(HIq@rTiA8sJ|pj>6|$ZnegdKO@Rg{i zam4aZqRWZAWYvELuGW(iH6;ej4eowq*0-m~0h@PL7jA8zrQU$!vlZ>MZhzO4xK#7K zrURptarx`ZG;*-@ZmJYySRqp0dtg~7pl1_~NaIj1h#_A3Tyxk>B*AXHe7X7U*9JC5 z-rm|-yDV~+YjPO*_rw2DZ>D4YfSQ@=b!ZC*(@X zzu8uEMCd{y9w`lK3z=JCH1}g)#kAPf8lb6awQbjcBBsZl3ZgThUV!T_nE#t|`! z26`lS{Gwn_@Sr^2H;prW_xiRZHxAyU^sDJ^lRd_wpArviTlaapH+Ux(0xc#W!Alhw zY3mm4RuitkCxypOXGZ^ws`y_3xZJw~zj(3;(=jOkphDjJb`-)Z-Qb4&`Ds6a!RJ@h zR7YFGXv!$)>W)%v7*|kwbhOhXhdQrcGjf z?bpvt6u&AJsK~TzyNbc?^U4xL@nE-`j$*AOJ8u#;8iksOm!R5lU3y!^E$@Pen+v%7 z&rA$-duKBxm}KV#_P}keQwxM;v~yhqu0av%4HYMs%POssvA5zr!e6^5Z7j7j2flSt zcPi91lY@POvcT5u98f@5!kH$Ead`Fze{e?1(PJ~p4ThY0>~&WZLOjSWM}=3KN2THg zx-Gx=fdQM#2?$*In}moAo|F)j!&Ohb;D)%;5~Qm#ay-i&kE_qFN@ODfL;Vu$h~ z8!wNIAd7>mhOY?J_h;2!*sBFPPpr?8b|-@S@$6}(w9j%m^Fwaiw_L-IQG~ini-CK* zm^}kt;u0SXP*95~D2dk~62A(p#V1uDmflXI`3|%hpLrFGtJRHj6J)lBf)QDo#-b7b z52ER&*hx#-SvW~KR(zA!i^e5GClKtt zWUKHXq=r7~+jEGc*cR1?#ZaA37+wo6Zzp|EUB(Tlv+fiim-*E+^%L^<95EY3X-{z2 zf8rEtniqb|;m4SB)fpOeSLE#kF(qhqvHAs>&!!gzk1#-cArFvP)<;L_f+SmBXWEwb zeXk}T`7)h72V+9bGNR|c_rtHramh*wr`851k6)aay2yG4Gn0ccp>a~>g=uFY#*THR z8?H-*zcKkg+5Asc20sC+P{h0OA;OQ5Q^AI|n-3aB^&r(25i#?Lsh`RPi>*Xi<>PO= zqwV@wT|P6z3F{D}Z_gu7w>>%DMw+X_DIIlTJZkE9*xvHdzT`#%~> zCoZ)Y9qD{PNcb(a7OG;g#YS#myJd$n3#=ZY(%GIeJ>sPgSgATiD%r<@jB%&Tr*xrp zE}kqUdWT_%WZFO(AQy86Y^kw7ExSRJiXywG1U@Jde2r9Xd&Hb@SeeoZ$9JdCZ{ctktmwib`Zr$F1R7h8|Sg@ zmf%MsN4n3EXDgv#7y9S_N_u<}>9gFFA8{1&)WK~gov3qvC`<}9#CGv2@wa9{3*f58 z`FP*0zW&xmhwRl5SVpweeeoP#?jj5T;krv{5*;4={2nSl0X9Z*xaA<%X-m>lQqQMN zMlA6Uw?ibBG$+DS8nM$LSy&u?B_!;p8?}yBKFp+Yvg{zHG1SXIG2V< zC7)|Q=w5NG)&H2i{t{bVdZ_7ib;?KKK$p*<;*e7dQvQZ7R!3gm3uHGc4p&|+Uey2W zUYod27zH-Fxi$HH)nE$<5d@x8a}1<&dp@)$^to`T=fz-|gD<7K?SaNBhWfBmA!nVA z%hM6gT$3}2r(YqxjitFC#k$A>pefy75E=dAUKQz|06f|9lRy4#lOrejd9fBiQX*FK zph$k_RJsHQ!dv}r{0X$BZH0BBnO#A#@{TmiFoP5Nz8wM{j=* ze#C|6pGfLoRV=k$Mg9cBq(ZjOR5RwlU=c5R_2{wKHy|nN6ail3$g)sYr_jfU7oi^l zo%-gcM5q{!L^i(FDy}$|c0Rvm&;86+!mQbKV)SK1tP(d&&%uDqc#Tm^M&qqlmOgBU zhq$i-=XN4+US;NHQqVW`@;pEe-$cCI+PGD3hMbCyu=rrxb{5*=nvnKqhd=2JB)a`{{&vq}Ok*6+-JhVLsb*EmMz+%HM5qX^yKF zgE3YM*AE;dSVk(r`RG4Jy|bm7(8nlm7mPzyRK)X(F0m8%Q zQ_jJsJd1o^zlTi&+U2G45KAiLqkU}Ca;?v8*7o{#83(I+^A_X3^HK@_O_KXpsN5z! zAO3%9ZSj(vv0YE?_A{^32&$7`y)w(|a0}OsO`n_@WquYHNZlAr?LHpJd%n$&P~lBr zIW@B!)So!0iN8}57uZPgIPf1z-8u~Zl8Ao%LABvOTcZ4&$aS1%4~Y&ee*Wg|Ta5KooiA zLOREr+F))cVAzLl7K&;)cVc{FC^aYnGE`sm?%j{>NZ)4~_drn)g&z6I@|g|{IbrD!~QC^J=$dPmr6eo+DwT*ueAj0?J>c;`= zSgzCd;Gcj?NYpD2=tPrhs$l9_DL#4rrpnJh2zQn|3sNJ!N7N6{^@b~?>NUU_9O0`I zst54s#ycLnt~wy@W;fxrpKy!FT&kNN$QGBOn{+2Q+QP7R_091UO=D$cor{`H^D-8Z zWp0VVlT&r!DH3`to6cK~x`b1_e>nMd`|zAw!&j+A6bK}E`GC{CSxK_CJD%_I~s+ga&oD^PCt@~DJd@6^XzcB@>W?blIo6im6XKssULu>4nM>G>bATtjlBMTz z@VQa_Sk_PA25!rqrqgJ9U5rkBp3O&kp?oy2>nrez#4FT*6H*<60&AVdjtH?YmCfQ} z#S{e}&s3*J=4&F)yFT+>>;D2-qeZ?yZvE>^x`^h|FdD5_lP3>zqC#R zz^8*hfy4D!Oq%lV!o4Kfv7(=V)4cG1>Rf(QYWO=(VbxW}2>y1UU@jpA(t*3GcT7TM zpCZUTM)>B{R>+wA5L=0wOBss;*P4zHzrDPo5J)T63(o>;U30Ofm*X#uW27!ITsSX^ zzyZ4O=*S#?mALbjE0w6F0Ot((0}b*YN^Ww5txisF=B#UnPmjrj#J24M9Rdd=CKmiy z(q(Mq{k6K(paQvXI=WZ=Z3XJlbNOOIH%Cl6I>)jVdSOj!@uF~s5Q+b#e0DONcY?K6 zPMmEw+sWb*4B<<-$h|4Uk`~VYxgjvF)xS4eLfh*<+wX{ez9;ezjLJ*A6R&jU zl~w-vr|>tgp10=PQ4j03BCyd2*~uU3W2~P5sk7$Q^sEs+wW^RMd+F>+QW=`VT%^vp zS4M|jAzOFvtTm8=M=u-;=6CROZY{I@RIdnxISP;+ROLtikdNch^ahsp5?E#Yo+=Nl zBqc&C(mhG ze8G?6fM;b&a8J404-~~rOt#j! zQ|0;8jL!$U4kMd_K8L;;P6ObIi@UFB^N*c1@BH)q^6C};+$fJ$`ezH@zl!;Oi!o2k z@BMmBDX+}8K<8$e{-sEk;LM&tosbIC&)C=yKxwXT-4To?N2MAc#Bn;}n3;4L;_mUf z&UWrmGV!9dz>TwEULDNLUZ2;xoo~ofRnZZPju)s(x{EqXpL|}61AVF25Ff)+PyScK z@oTG~Si}8!Ml5}#E!RoU7323cMgQ3hg}>T3c7HfZtmsB}{qhQ*>CFywxJAKt{TDq* z1eRv)E5T=)Jegm$3b|;c(;r}hzZ1LD>5%F2V)-|1NkR z{@v}vV}B|jeJ5qMg^pHR{f9fJ(eGP-asdJg_`eFf4ydM5UL=8(tEE_Lg;WK zNDT=nMVfRJkS0Ze5JCwE2%1nNf`Hcx8bQEIlcE8Qmmr|wA|Q$&Rf=E$5e&W{SJ!+0 zyX(F4?REA(`<$8Cvu9@Qwa%F{0|Eiqz(95&2Y?O0I)EV7(n^96Y(mm9+B#-vl&-m> zk1YEks72)2sDkff05A{)1eyX~-h*)~8}*^d>OKKBwN~OAUsC$FFw@=2JrP3y7vpra#N zHLb6e9GMU2yIC~@O53qKcKfN_hvN+V&}byOg1nhGZ?!fxceHbj|2se*5liD9d=V)Q zo4CcS)spGwIiO{T@2d4^jac*O#1?6Kv?ju~tjuVIJo8a_{L{ux<(ULa7)~P_>lq5h zyOey0qTI#E>G_wotL47dZY>zvY{5Gh;+pxHDMC`i{CSEu(@@**pS3uEJlZwAlE>M6*TVCPeEIh#Hp|vG_RzK-|s+8so zt%&pBVzKmNAB=+Il+UVX6~b5!%D`4ELm9Z{l<$DlR!mAKHdPWhxU-rExX+1V3mp`6a*8}(qX7*I9Dce;#681ds z+mz!L!9;08n&W8rR*r)h|5{e_SVO)DVdRm4+b6x-vpU@Vus%dI33!wNQ%fP0i%$hM zSkGi!m~jo;O@AepvQ>wl9KqyRonZaZFMD@zneRnb`^#A8R@bMa!2Yk@ji=?uJ+D<) zKaw^q6%7!H-%BJj)nzV0dDX1ai3$0K#xC1$(#I~8|0h8kqx>#~Zx{XpT_c+O=WP3z z&nBVAG}!D0C94+h3nZL4u(T$s?N#;h%szYtoS!S2>vHAWv6`CIw){z^p_bAVAH`dW zYsTvj;=}NiTf&fWE|Bl#g#gx70?BSFNJzh=r(ZD=igze)`ke)((3F=UU86hpy8~kv zHk0X?#?4Y@`NN4N=AG|=pk>&OX)y1?j?ZP$%OueCF-cTxD5b|g0B-ku2rRKG(Sxjr zVHJd3@{2S5!fxhLoTt25oo<0LuA0#VeIY=qX$<~o&PbtoPxU(92gW&=>hFMY_4lH9 z&&I&cXv4VnL(vCKuzxJ)EpRn7MmB7e<`$91LpuUL1TDhEOx;>Ww_iM?4TtM_Jpgd< znughi*@ov6Rh_HZO*qVCh{`q+ktw3iHJ&JNiVab%uLk|QnSu>*j>{38cu*AxrnL61 zCTxYh67^_}n%R=|X!Uhn%!(gxO>#V|%j$fyEcJVqz`zy((^$6;2&L0jGtv;dv_=$&8?RrB^`=I9~ioD*l?-vZUZBsVR*be{&_#lsC&Y<7y!=dg;n4u)w zxik9+8MHX-5j<%HF+NNueiC>&H)cGeuOX;;aIE6gz&p%gcO4Ej%l5S561YcVRkK*g z;N?#ev?w;983X$`{q=Ebq_eL+V5H==3IO4wZgp|_*}vNUt40%Tp$E?#&uWvb3@;k8 z@7>P&6JQA3E=^uw!ghS}p7s{FhIKuksA*m)r(>Gff*jme-z0@?bF6>5#Y*WRqh~m< zV%0NoHH+DsC^`o%{K~Z7bH>AWzuT}{h2{QVObR{mpFmPk8yY|HaDWvJbXm~=2x4Q+ zFZ(AL{D=mEY%&o7LWguvXm)9BT`22a^;ua*Uu=b3vM3(z#9(!TUJi@fJB0-NX2zE4aWwA>qqvs6YQM0eeMv zS7pFHr#}3Q_hCr4p${TqD*Z|)H}0F{FZF{0QED+TPbaYve(xr#0lpZRfBf4V#BdI5 zI17=>;O(=>k?akU0?2YI8J7&7^(o@Op(E~3NOcp@Ury(f-eZL>CP6bvO10zaVy_l! z^u6cwy=V4G3N)m3F{CN8gqTTQohMIglc{F4PlDQ#c_d7dB!^opP|r2`ecRl8qsnjQ zVJovkV|XCtWbi!X)|_@kcIia<&Cv$#jTAVU5_j%xL)pb+IuZaT>aFW;R(X-K9g1jo z>H1chO(@8jP2m1$x5dln0IfH{MGw#+QXGU+ya=A=c-|SCeiiyLe zkhKDP#huN4A;oWo&*P61p0Xx;H57N1Z#sz-)a|e~a2d*};L20g4W2)kjdPn!$~96j zb#eXpnEe0aa#@Blj5Z^Ocn{w(jZFj~*RVI>fAuM2_vT`0LIGKvpX51Kdl&d8lr#DM$Yg zi)?UV_7@+%h#qMcu8k?Bu4p$&3(M0lr2lm^QonKkDRLPJjHbB6*Bxg4gp!k>jtdPR8@!9E$hRek04qDED-?XahA zS5j(Uds0~ORHWG2Mw=;hZ1hD|%NDtAH80qq} z;1=ZtXVbfa=0s?BMXW+ASGEA$d0KDF+s{ss!oB^>*U#^sMpp0tD3di>RGD{NnRncO zkYf%+vNQsK(426!4wUc1ux2Tg!s-HWgjGtN4&DRpqG}f*!B$6KiaAFW338LpB?7*2ER;P^!~Jwb&0AsCj?~9Us&NiS0E)}3E;`6CG&&CR zhpB|Kcd;uJ1*ktRlLuyK%rsM`)B3ez`&BM09qPD#MWX)QH(93TYbp=+kdv=lPT_U^ zQ!6CZFFlAS=pO3%x8-Ef{u-Z|O#?9mA0TfsbD*vQrK*6aCJI(M+hqL^nO*<%=S@Ym zTQUwqai{7Xye#AV>+{Z_-g4XxHhM(m4v6}kY9*(Ye8-DvCtnt{a(i7Tt9_96B7s&) zzGs_LLkwY!&ghFpFt_N7Wun)fwS|{uz}oxdE!mr*g@q+?1X~NBxN>4u^@Cvr5YK`r zXpMpYp4;XbF=u`pn)njG^nN(q1mT$vMv~u-|B}tGGI+= zSz6s?+*z2{l`Ac_e--hrS2l9ZZiIdbkg|J3m=ENe>Gkq}T>LxQaS9 zT(!t0h1AYGyCH<8v+x@I`s~%5nOvTCrf%)YjhC2#YuhhAY?M+LVONKFTI*=#dVG<_I3z2F6)1^M_>2QB_@;>_?#c_?XS4JZU1Jyw0Qw`;Z^v= z?YCXlkCLy)GLHje>tv?Yfw%d<@U)(xBO}{f`~xn=edN5s9QzOTxf@qy zgbTCLt{r-kDCXXCapF1qm5bl29BqR9SjcAr0XOVv`~SjR^4dr6deNSP_u*)D zyRGmSVol6rmPC=YzZ4gd1^+EixIhcGX(+UM6g6K9(0^qa3xM|&eNbN*U?wzK$0H_p?n@x8X|0Ot&@LEIUv`uhr%U{zkT%UFDrgp zv&Z)=isc(yW?9Pe{zrG_Le5jr;FIjRMedea`lUH(U%}^GJNC)zYsY{=Ca9OfY?^&q zzRWvam*Vqm;ej$ecipV}eRf2akMGchwLlS6^5h%xxT$OE5clSd{VYGapZhVSqt~oKX>#tdb;y z7(vMx0TodB4=VS*4d3qDyYAcfzTfsep6XQ9)!o(Ab*g)~`?LEm09svbv^D?&0RV{b zAF%%z&;U3X7+D$VI9QokVO$(=5gl<60Ra&!6?IviQ+D27ZgwYK{4uyh|B(C(E+><_ zQ}Qe8uHU@w6aQf5Ueh$L<$A*b5fB#)Cc-CTE-r4~5OgxA;U5nB-2fCqG)Zbp1cCx! zD2NCO+V2I}2uu=z4%q!IfQg7fq$Gqg7DE1?76Bka;r<*zMFaxCv_!N7oE=*X0Dw;d z0Eb92SS$MEeWF;J0y4Eu!po4T0#Nb=0$&`ECdB_{0F6?5I1FMd>ZR=qY_lf!Ix37J zCoHTCo0-BKJC7K3?UQLT2s?`SO@?kNmX?U18&tr2Co)h zZf5p()#M7?T*{$FP^nJo`$*+9uiSb z6Xx|~_o!@Il8l4RtLFS(tEl9I(E^WSDHGJJvsYNsO2^$2ZMsW^YD5j`VW{|V9hw3K z&DBx;c%ljjE)Jua0@DYRMDyY9GycXKS43#@3FYAv$3Csz!vK1qXqk|dqn~z=`qJu)WO2lxdmseQZLnd#M*QR|Pu@5=b zyZV^Z-WSigTwIxK6Zl}JUD1JbB1Xod_|#SNkZ(`Q9F+Xdr;2m5n^n6WS5OOW8tA^0 zlO!1QohXP727ob0J{Bx%m>=3K3WvKjK?Yu{mR&(QUNwzrr%m9WiW+2yeh zpO)C&W|SQ-JE}Gp6`rFjEI;45cJXOQ6Xp;fFf<%R8k4|Mvg83Uz5F7p^Mo!80J-=I z0#M^jvE1kMiIYT4RyXIOjI0lFNXw>{1AeD)nEexyh?v`%%xU)Cnf?QD*1N#q7XJy+kkbSccX{`g3-!~C^%#M>>$ zGZIKP`&Py2nf{`uN3#*H8}oK&`ej-jCf(~g#^6iHKO^&d^8C=E zNz-8=+Gfi(+vP1>GD^FwukDK>>nS^bj_tz}M#6V2t(E*zx5}@z^-C|1w9euicG@gK zHQUxtj^yd@V!0)AiARI*52isl-gi^>ka4w z*WHqfkCv_L9``I8SxtqI4TQERe-ysEvMvHd2b^Zx7YBBP=$`^ET`-FiL) zmr&1B>nD!C`i;uZ2*@T{xV~ESYN~r{e7j^8RG#%dL&ccw)k4b$Tjoauu6(8XSfw&^ zR(S=$zCZa1LwZNKtzacq+3EGbweJ+DPgV6V{W;O!(t@`6v&-Rg*@hf)&+G&wvbI+J zdbgf*hHpE1W-r~geS$2RSnYU}H~w%a^hSr??D)LLZ>Wb6kWKe^dO0>cXIvl0$kwGc z{^AJVmDdkFbRMrSkGV_tsHrVHcngphC#QtMYMRrD}nttUhGeB{K z$>{tc5z^+#<*;M`WJbHH$O!?g_=p-SlnF{1Am==+@{d8G<2K4K4pG=1T3p#$HGu{0 z6cryG+1^Qg;(4E=t{`F8P5qhO-nS#?m@)G`(a{(v;t=B>gC~z$cuXIn90=cYLv9f> zeRPn{@K%V&dLhU4Y#aB-g;sYiRx7?eT5;8-?$PzEJNrQ7)4XPSMT;z^!D~v^n!oKw zhm`(X5R~%XqRg6G^TrM^r*%fZ4|afcAUd73N@W!fw?gimtslu`+U%&a63y}s^Uuf% zc>es|o*uCf1qp`ppXo4ZlQ!%OoFV~p&?4JIqe5L{0OUl7g9Hz9{#bB3?)|4j`K0rY z5&AD!e=$A(I-2pnaXasHzySyR;C&FlP6uzz7YFZyK#n22K=cRi?}7g?Ld3IBt=({# z`l$q19^_u(58aglJ7IH_P&KJUxCaL{kU0PgIl-Q}f!#%*p~C!{D{#~*L*Basbb>IG zg59*D$RkhFX`;YL4mfIoxg0|%iH89yAu>^MX-Zyj)V#40O`!q}(P0Up{2;I%VYHPC zANBo_0tg$|QAvXF=hh$EBvM~S$M1V>gs3UmW&)ehc2I@D2)8h{5MgS6bK;F&w}yM1#%sm^U~cW30&p|c>i4ayduPdQEg%x&9?`j&P$DP>ovst`!3Yf5k#x85 z;vsAEphl*|`Q}4*`It0QgNOLI@oE2q_1E<3M|T4`Ad0@O^RcJ_vy;2k+m@Ih795 z2jQl5e{<@o2NZ^{|HK2 zumUWZlRwTujvhmVogYUYmH+@@xGTM+4>O2t)*EkPK6ru_P)BZIy|3aQn6^A_299x`ldXiBAE8`|db4;W%J z0D8ZUqtqRS(yyi>%+*H<6m%8s`6!ULkpK-NGl5U|MLYgRQGS|YL%8N*VOCGHrSCkP zwpKbJnVCqgFwUZBt7_1#1%Tuzz28yU2RJ*FWSnQ%zZ4~GRNFkt7J`}4M`)&tTb`BG-;XuiVoo$ zKMq^%?gU7jRwpp2qX67#{obp+FK*45_5LGvYXSau(yfZ?pT6INqwo#5RU#DpV1j;z zpEHhdY~?!{&jGW>Nzf5Wi<@M@T7sWWpmOHLD?OwX+nFh*+R6PMx{Z$ z&AxxQJ&G>1kco0F_cU#dKJ(UG7!$YV&bq0!eJgHGfUa*O69W+R^oEby`EnqTpc+gs z5HkK?fN;XCed9+_e>pKZ2Sl-dkn9h%za*ObyM^!vDT8(N|5BHxD$rQbL^cpe5^Du+ zXtxJ{CoU{C$4UFMnZ;mU)40OA&Ywv@5$QWWZu~t3qDYB`q+<@^9E^mGwiAGiAJZUg z)PSNx++9bX|}A1SQt;RzWxky+6_AQt{1D4z*Uw|Z{i zAVml}AI(lOjW?aVT9Nl70{||rlLWy@8lBs|vjT4a{Lxl_1s0}wickS$oz8dyT19PA z^stq%Iel(V7nb1Rs4rtDG za1+mgu3>HT6h1>hy z<=fai9FbfAy!hpGe{}Ca9UrXOe=czT&urxXtkZ+g$)Aj}Q!P5BDCm5a%kx#IBo%K#9lri+TJFbJwM zua)q+pvWXN9e?p;TNV=BSNm)Cx`u@=grhlg<#>Ok`+s!LcOTT>o|?a3`i~pMf1l=0 zCCMRXjYBhMw#tW2opu=~eEI)cc|+Ykjbfur79FWYgEKI{T<_4s0_Wi{0@DW;s}lkK zbK(D*!TPhe|N9N8)Y~$7vH+4q+h58ysHDm!-en_!@^w;bH7}nz zhK6MAmo{)HS^tr=!;$#I@X#4cQl6Mg+^ImgP4lZ214)Ht1~%mWl%JZ*=MxBY7M;J*3Tb6M+a07FZSgbdnJ_7~Itxn6%ee*1^k z@1IxxSFY#(D~u9FzqU-(qts2Dt5vX8Sdq)KClPW9J(663A0UB?(7-@tFs=J8xqCS=zwB`GM=! zOzAR_el~uD^W7vT0>y*Nbq61H|6Cw7>$hm{Jf!jS8qZ0aq8FR*a}$0ifTjh& z05O<^oS2-55QvEgKNA3mpmfBhQYL<>X(Y5f(sC|MWAiX%KnXpAq^y~*e`6P1!B?KCDaCAZTZDUfdEA2BoTi(g>Qr!x|kbCae9|#y6oMigxAqYus*bNz297v^p91vzfHKzu(`!i(rOU5nwS&z~ zEQ2Y^Z1_1jS;wMTt*fauS#$)0t{5wpqe3F^SaEk*sI?#?vY-5HzD7~ zW7P6$O`aJ(XJjMe3iwWqKQcefPfr=%Wx^`qvl|l`)A>>upT+fplBM97^YZbUc6R9^ zFRsDYUZ-ulvhIfuG-%5nd0i^gpvCBl)ffz<7-_K_4S9vijq^?G6jwWjE#nCaY8^{x znADMt*Lp66AYpxe|FmRBR`K(5m)@Fa_gNR;Zz`}fSb4WHK3E1Oa4lX2u#_aSbx!A_ zv63bcF~aJFq=lpulI{5Jkru>~nzPr0NMPlMIk=0kts0-bMNlQ1`9_o$=uwwo%#{6b z^$45SZIBD8#fnJ-q_OEbIVQ=rGs!j+C)`Z$A*SZ&L=FR)h60JpC_dZmq1tiW8Oi%N zQZ>y0FMi9ZMWU+b&9?9J-U)!0$!O=;_!c9tz)Ea zf+pbEbDL<*khtVU#yOST`lhL-Hk*Bbp+;XzCrDeo>dEkoB(@QtNFN2p^{L4Afu7w) zTNxq$-5gp*C&EZNX@E6^#v#gZ$??KRoxT~i&5A9;y^n=>&bn#0&kS{8ZuXn8P)qPU z^Kcq^=seh1dS;ZNW2Sd(4P1a@vub z@7lP^`sq6Z&!0_94$|B>@i9SJcY8*LvYlC!LpJd_b;%g|t_;8uannT?othwR!nS32 z$7L{El!}P~ZNCxzR-A}bDO=PfO%s<Y~qJQw$iI*)YKn!L;%7 zLMgR&j-{~s8F34xFR(GU^vuM|ND!5Q!mmn2f?6g;;lTVTEj~M1@hXzTczpB$AJZ}g zYtB*B*`2B!A-=OrjSWKULDgy~I^26=H}&b{)N%1d;u2;2Uf?aYHG@Chyzf* z=?p0p30X;oLi}*Jhv6mdzz~L}L2&I(S*9=kgZOQ_f!inY(^5Ee&p`|2v)cF#(T0=; z%_xWm5lgxv|E))gC)!(Jpe5I=3~?FH8kDS+*CW6}&UWb$ z_5EPXd@(naQa9$N9^C{7hnPY5eA*lllzQQJvpeB_}rF}p% zdwT8JoYPJJH(Hd9F7lhw^y6^-duaqUU^1~jJ%q+O`pl_`I#`E3fL@D{i;eT@>@fY{Nu`7se(-7 z>*sQ5lWChdl5b5WyWLwrQgGiaK~rWe@JMY=+Jr&PD=g60#m2TDEsEW}5qjMwqg8~A zQ8BSGv{{JC`^1{{#Y=pVm7(Qe4`bcM8<5>M@W;p6JnU))13517)DH}%`iS6L#KnD! zx8}GoTT9$Ofs;QH?%t5~{MkH~u-J?cUmU zARVbOil3f4P8SvmtD?Xo#EpBA{SR#gFV!N4Km(|DQsJO*A`FAHU}K=1&(*pGvF2Ou z(d|Rm36;vTx9r@*gK~W$lZraax0#~e+GXTf(r5T7?gBz3dUhF&(CtSbZMknKmDdcg z>xa3$wZh*e1E;vA3VlQqmhE-FPji!j7fAzEtjngk8zNacB-wFt1=8@s;eStz{hE@U7XXw{@Xp z3KtoC-cn2_l0l`?x;x9k+gg3W;|=b&o?6v*lD;*=A$t|(fryfD$}((R$k0j^xBrY=xvj{CAK+cMme-%-lm0__OvihZegNSHNB}}I=S-r z0y_$bz($ZE@$f>Za0u1LVwL|~;5j2TsFG98JjPRyg7UQNCmb~|QA|eRIn#SyI-<@M zBYov*)}?}WFNvb0eGNB#J>Le$+FgMs?gMH95rTKO=+6I)OWnWnpsrt?H^vcvJvp#yg zE~f9@Vr4IvF1-B8%uGLuD-ceLo&s~0N`1*a#+VdR>3xNJ<;IPDK&xMaSND_-i4EHF z#0TXyZN68$RV3OjRVA`I?}?QC&oz0Jf~M)x|2PciyY8QWx;0I_F3!Wq z5+QCp#mJzfkNBtwiBwaJDU8xEJQa8*-!Q`HOPZ4+*;*M$YaPX#3Yosw7+vtjv+}mI;3m?F?G=hTF-&^?UTHJJF%<|NV|9ny-=UxN1zZ$e$% zcj6jlF7{gI-f#9MT%CiL;?FtkHJlc`gP3L>V$R_0W zY;((~LRb9a-lzd05rfPXUwtI@fr$YLqunPb_JN8F$Kvf9clQA!!9}|_nlg{ZrW}a+ zi6A*is0Y($$6-o_eaDyAU;pYDD3y>N_S%J)S%yT<9OwMP3uWnusO z?aF;%Tjs_yMd^S$%FyLw*VOywRcHIZ2pkB3X8f!X9<5XC8u6%E%a?omC8qDQ#O_$< zn7p-`Skz!@pZRFLb`MPsTHNG)u!`vw<`;L@FB)Hs&^faGtmOXKmB8YpoRy_}p8t~q z1m?e-6V*z>5Y8;_{5KxD<&O4TpU#3B^TK|vfMM8BFv8uX_pFrv67)|W+N-XlrsA}I z0l^pukcA~S4yRUrDmWrb-Gf|B%$EG?&tzZ>bZaM*W69TN!IV64;+ZFgRm)Gy=7ndDY_N2=%!7dUej5O{?p&!7kZ$*bb$*`pv zp)p$QTi2udbUHqqcz&ZpjBaj``=jV17Z;@^5_FO{r|-a{Jo?r=cKl;1C%&@hq1E@M zPF|u-x`;!gOw;Q?i1!cKbtW5Clh4no zl*fMw=pT#D_z)SNd?N4Eo>9X+zJ0)7!oHjEP}aF6>+J)V&Z_Q46&i4_Ne3NwJ%#(E zo=3~VQ6^w^Z#Sdpi*qBnGNr)RtH(0mePA7X`Sk*I>cTmZ`>BNscGaayE4~yP@H-4_?I`@Je{4?)l_15-*+2)jvYvx{@u^Kv)Qrv`2AW*sT0ns@c<(}{1 z8V@=;x?jZg7+zG~%5wa?4;bfuhQ=3dj?q34qSN9N?;?-Z>^=TkbnL*-tkMvgz8*ajO48Iab?H*`+y$n%ddi$WVr}1 ztxv#UdABAh5hNL%Yhiq2oM(nyIAJBhQKgpmomrGx59$kI9?ECJybH$o6IlLIIT!G; zo4F|YenRZ=LKEVxrR3fNrcEA8`NP$kvOt%s$jJwb*Y2EFN%eXM1$6((n-WNYB z3z^KEB7QQ`BQ;1KrN>7fvp(5)a|_Ss${mv`Y+xezDSG^o6RMk0r}2D#bRd&Q4~o9= zsz1J2JxD{6fpWaJw}2yGsW1#f8OT`YN>k!69YrEqg1%8p6A_lIzxToWGLhyTZ2aBV ztt^!#WdJ$%QmlEH$K|gD&%be_?AGf1l1<`T9V~p_?9n&6>*ZCk%a$*^G!=Bw{B&VA zdx?rg42^{u-B_6((#ha@uF1V;@L~6tM_jN%nPa z^!RRO#M*-i=4Xo2CG6=R8L0=CpUx@&&zEO_M1j^4%45c8l+#0Zz`0#(i<4}>QQ0Hkr|_}-Cj{yZ&T>ByR6fr zS<2}v8eQhVbPSNxi7KAafOV0F3`K5<`F0Swy>$Q%f)x5-Ds4&SrIH5 z5W}xNv@oZ5?Uw8qAGuwXO%vvHM^2N)Q)z4P$5>Gx0a@ok#7x@I2@M`abP1XB(mm%9 zep9TMV7H=zlCI#YcT9LQvb*Dpb&*y^5O#>U=n|WuaQH*=BykF}k>0Wu?bdTGdKpcb z7P5lC8E|BA#-15{n`EUsrz^Kk_qSNayvf+W*(_#DRH;~sNV#@kfI#e7J%Zh`S=@|;{_qg7+qL9Hm0 zl1hF>zs*Y;_Au9Cz2Qn7&uvS;%vI`Vrj7wSB61J$Iy@j70|8Y<}cS@|nFT zrE)R5OUY3}+Z0Ma=3>ZifX@Y$WqFHw4uCPPTpt8h3firXM$jl&e^jvxV3QOL5|qrz zU}@SJ4NAvxv?IlyN&2x|s*;0_-6*y;q0eLrh}YMR)H*e;J-^|9>Up}?XEwfV;$!ii zBfY{H>&8(4x=pZmW(-LZ-&yB=c9$7j7BIWJq58~yd#m2^OPQ$C)`)BvWnM)B-M8D6 zRisLJH9?#j_RcDA3eQ|y6h6n2H)$$Edu!fYIGPQ>xp=vi?zY94Ap*R!mLKCnFA-Bb56-6%_s@q-ia zb{exI;{!5shF!x_p8J3_YGslb2HKKO&%*>xV7DM&4D_|vwZrM6IWYq?5x3-4DrC-O^UlxHTBKj$<~@vS|kxrNTAjFFd?-xJ=JI<=;5L;KV`&?_1AN z3mR(tv4`1Ds6Hm_QZnTO^hEit>mOw9&Ad8wwf_D?j%*G2vqyy#&^$8zG!8i@S)&an zSRBXlTfZ20O2QH%=}sb|dEgq^i$b}sOjHFf2E$(h<=;cPCMD%eK?Jw)*^@LiHNp_s z6{l`0OBQRqfZ$qdmtlWYaL-GLz6yI1OUEjzh8h-9QwSV;g)CQums3^mnFduaM`Lmy zm2Az(6j)J=!fE=es9u19s#ZMx3A|QCyH8a*6Il^|P}Z|6#6&fk_3M2y$yJH+d6Szi zQsgn9=W6m_;*&T&6(w(!m=~`+BEMReYnC=6T5@b)c<4jc$?H0dR>Yi9#{JCHqOKL^ zSath}-kyIRzhRhhbs*=~7O!T81fQ{#wux?Bf2j(SllIZl^mfVO;Ot$iZsh{2r`Il} z@3HiUeYo6v)?Jr(&@xCnz&5=N`Yp!vR%`qyt;`k(?0*d4P$?nRJ*KFhWmzhKMUNz6 z%|4PnQIvW6p!Ewi-EQQ!zI;)Gj5RbU%DJJECqUlkj3rm#JraIm)NYKx`&fFlP8U@c zKUpf`ujF!836g32y5bIRmpaSp_)iDHrAmq^)=~x16S1exXBLT(^_ zA=dGf>HW^rFbpqQ1hMKgok~f}18(DEtA(*ZmBpT zPk^<_QS{z&qy)#@i5?aXsT9uqx_2vA^(N)0wX{4ge-cU?_sj^Qx&n!dg8~#-5FRv2 zCZmVWdR7u4=^Wg+55T!>^-F>*g*{stOP1ZNOlv@K&vpq6a}lSWFDdYO*#AP{ZAS|tGi7wDf( zWHw5;t!$X`>FYAB+9qIJY2R*%hih?Ch&SmwUwTtKud|`p=oJ@O6VtjK$W0rsyDCV2 z)oF&tu*7ztswnaWW>lI1PaC|V?>6qYP(IK1UG@~28 zsWGxe{Wp3cH?s3XO@=Lx@QsW_CeWuB@Wuv(Vwm{E(ozGP@MbMXPBDHuU5xwIFI9Z8 z_&xixkfT3lxW^inrcC0p4@`AmEd9&(*D}vkdI7}MPc(%UAEDbrstcdX)@LvGz1Nv( zAXxSa`e7H2eC~-ZTOU_t@ofnU)p<$7bhRG!#krf{O5{#bU{kpj`{e|~L9IK2yC1pV zUo@8T4`Y)OJiyW*uMlFG*_upyOEyX78K1iZ`Y5s9!GLsYoT>( z=Q*WqQd3JD#y*+IR#lRGU-O(OK53}*8k-%KWDMhqbP_shVx$JVmW!asgK9jC-5a_) zUBp9Hck9R-o&o_oB=3?3Y&eUYWXjIO2@L2Ns$_^lY=sky^S~siF;Z8)x6i#VH&`Z;hpY{nWg1?i zwTKXgx$)&;R{0}!kcl5shVe2UBw5&LeqO{qDj(Q7f7v%`XQ;KDVRi7@Qcu{ts_Ew_ zuJ#Sp8%Zbj$f}>xkdqmgYoR5JG$hb25P*#<1s&g0ThOoxSY*l0pORo&2#{rN@)$PB z0T}>dLZ%>W?B0a?h2#2T(Rmxm*4Z(9#!U$gqpET0HbjzToV>ZAWlmqx?tSzTd2zQ9 z(^EG4*7a6eA2&?J_XFLTI)u*XQ0G|4BBD&BT(Ev3XiCmD=^7@dC@xE3)06@56f)3r?CFpU zs=Z7a<>4jxN?N!3{%19V6*2r2dSSxsLxB*wMND@ug%*VHH)6sV+8J9t(4vBZ=y6mG z+Q*=a4GXp=G6CRegB~sb!W2gh7Ps#?Pw+fEgCF$75kISnX#AR=@L6KRx$!OBB8wNt ze;ijDF9cOOGv0?@&Xi-)P29ciKK#@z{!LvR<8IUwkGXyq{o{|^w~nUhX1RS!#+OEu zHY#RbJI4Er+qz|=;_-)b&rJ*W0Z_c#2B$;6@YkpR`S+hO_&+NHQeTTz=Z{A1&G3iq z$lnbwJz;#w`sJS~;m8m7xF6l9kNCFzp!kwO{R@xmN$xWScX^l!Uf&4OsyODuWpaAt zacqWdK->J{zc|zDl&XZF9K)&rj;QQ)Jnny@$v^K~ZNZn0vT_u0+L6a}XyAXi|38>{ z^l)&12|Jn>A$;U9+tX_piky~Z@16lM#mBxM5)Ff&95006ul8t9S+%KgK85OcTgXhk*+CJV zP<-AQNdu5nNF|63>&4~kV1Yr9N+xqhLCbI~5>JnHesi{#j$wn;-FpLlY?D89|l zpuiDHi;ib0U7B$EdcZDXKReMBj zPyT@Rp1~FJuxiuXE4Kzs5ig0d2O?2!XVcQ0T*XbahMzK6PHVEhg1Me{=Rum8^cj6- zl>9stcOupU#ze}$a330*?#nKqi=Ps+@VXm5{I!c9FJv0u&K8sY;WvZZl;A;^?5y)v&#JVLg6%NKEiHvj)kuG7G{z>4AZfF7e8_d@Fjl8ou_BNo_#quho| z6M9ha)}?Rrv#Ld&-?lI>1!6}i!}E=Si+wPq4E`v9&~C&Y3XY9XaxM^GIEVDLeZEt! z$qazi7-i)!FEByVspp9)=uH-vNxCDA4f~Y&p*<8B4=qnE0<*DB-@=xEsIYEc#nMVw zJVdaID3b?`m0eL;|6Qp$C#mx(FIiZ#t0CE)j;cS%!EZH+qzW~pu}OCFXx``Uw{Sgz z{;Z{s$1?bX_%1ZOxZfhPXojvmhX$88)54>f*(kthfspS8XtGO5I2n#*9BYCnF+hHE zZjaM$#M5L!EqCe@&jjVv)#vU5>@d2O01txWVa3_9u9HNT2)PdkeCY{PaF?ZAG=rRJ z;Y6yDc=p9idtRn3LSH?mTUW<>NNk^Gv_U;}_8 zrN)PoR9$bd%_@!d$k<9%45o;2BYllc1%LWBV&=B&1Y>BY6igS9dr{Zt*;a?)jTnes z7r)T#`KFU6S`9Dx^yK3&T<$>G8L8ZMB;d*L3^sPu3l;(~fJf0GS4pv4d0idlYPSqa zZ&fcdxJ1!<8XUcHEkc}Ac|n+*on}o9dv3N^S`!T7(M`SryDGRUad)xha*k~kf8*Ze z5e$r0Xz9*n*RPH`#+w*Hp7saVKdVemHZHs4-<-f@m`|11 zcNU#}Lmm5h$yd%i0y1+=$#V|b9;r#IQFI+8&{Ou!Ns5Mi;NB8EI^G%QL1tAW)joWS z+QSJfn;-};US3AI5#K4*nyW+swA~oa*f8FqkjwWKorqkDR`9jNe8Na2K#sI*V;{I7 z&;9Zd0?=ocP};p?VSzto|Cl`Lq=GufGk+DAP^MVloar}Z=isE zARVjboD+@MN>|&QVB~|?p;s&U%gz|nQG<*H0|VEe(pWA8v4IT$*%}^_cs9sf>poE2 z;D#`!gVBXTVAKMGUji=sZg4;B_+bvrcEM7kFX}kV21$>0E8d%T;OZ4zNLDKN?52~l zO;^ua$Dw5)4=I2?Wr|Bcwze~(_@l3)CFyjts>-CR@;wPx1kS0+cWUaJK=5mcIhmr? z;uvy%s(7Kao?ssg2o|{z4uc+_jT-clZR_z6qiR z@~C~vY?`?wh?~S1$podJeHS+WT>_`7hZwDpM0ryfm~br$pvNVDm!D6OGY+wzxJJQ( zu+p{^Dq}lu62(ry7$B2eZ|mACK7XLCibH;WnML#_$-OG^T~}{B#=%YFR!UrLQM25= zpl+Srz-BPxTa^$e)ARU3YgdbEocWALZ12E=b2r4r0|3&QALzRn=-eiXJy-IOJRxn0 z#v_V$Qs+@YZ!SJ=H8i|G~;lZ8@5e3wQ>Ggt?&oka%1|$K81Jc;OTj!JPuE+g40FXUqBo%wy z>+-Zi`Z_-mGNmcqB;zKhIDG&`jqhner3os+mYcELUI zv8>~xgN!zh+s#_9^CZsvy-bd*A-^wWz-+gsmvn5909&V;PZb;358 zO-8MW2)9Ezv<7p|5-xnO6YfXFyl18w^Bw-4+jI2p;isEKi`DnjE3#H;e_daW(FVjB z@HIMrMRUtlVU{zI%7Ck5Nf|P))h`7+7pvuB{;GhbOaufDm6jcwGQJm;;<|3S-8PC# zfEs&}@Nhb)nOVSSgCdW7H_rPyWd&Y2J6NYw6f~`ff+kUzHS?6ta9pG{o`H4Tk76KCY_X60B}5?2ymu)t{b1%XJW0#lSuGgHumCKR5*+G{(zwva?TkR}+&f}ln~2tI#e+EATG`+)Bm)q5>|rnSL$)trLs zQh21K9c+^YTk3<`L04;aJNS0>1m_w)$9pi`0&49H?}ywkF?6SpFQnZZV-cbEBYwA) z+Ln?N6-;S$V@bVTo?w&rG+dTM8KY&v5)1+sLHj_j2q_~+Z!~cl01aJc?6U@r&9A=^`&T@TUE^4^F_($4P$DNL8g|`EII30_=pp4rkEHg}RU@W5qQ<7S z)EV|#F}q6sh*Q(GH0IM_A`yzRh+{Zfn9?cJ;N+mSE0NEC_|IMsyvhy{{DePe*WJTg zrgWo>m(jZ{7y2YxOMHWx*{O0zXX?~9`o61{#yggM2sn~xR-=JGHf?*gpDBy|KE{}R0WP)h>viJi>}Bsk7oQD z`CNi zdck#XGu7r6!yANlCTt%l3@Q(G)}FYrMHedUl%`JWiT*})IYj>G8~EIbhAYcXU*~1- zmIqSX&p&BAQR??xKJy7%#|F7b#Wyb_1^a1Z57LN2;(Z{;P0=t#3%r8I2wufUYK)Z@ zFHlbt?z>%Kj4!)orhg}f?)pBkHXda5aL%X6``eM0UB5uR0Fv^_V`>bN(N6`opW!{X z)yr$BU2Pv~rK+P;gUCM78&&NRGvTispG;|tLRTP)KmOwbA3&-*TEJVE_6tid{4 z%TH(Aqq8oHlNeuX{?in`EF2*Wsd2C^)Q*VS(KyY6*8;J9M4DJJ*xf1}59E{#WiZd2 zQWu#R!`-vdo&#UQ_(=777+ROO_ANjOcSpT(W;#RKW(QX-#ztk;EOr2LMkTCpU5Rn< zl|WS|FAY?CX=JSB^Y=f#I=Kde?3@#n1}>09Y)-YvI#jSZ$Ly@y!>0_xYD zs26v|*x2(AzUQ2y)#g;sH=O%C2UUMYdiF&C+vqr%IoGE*qgvc%oGlY(lsDu&f)lp7 zr+@>@Tu8dNy`%=imaC>dK*7PI1CAZq3hl}pLrq+^Msj}mLgJ27mtDs zaMLYyk&Z=iecSmiOVdH-n)M$ALehqW})5Z^D#WZzE2`=U^ zHw7i!_CZ9^PwbMK>R#-1^?exQpM3UC9k;4H<=2-}Eh0fx%vIgs+B88#P_w*u!&Mg- z%3I|Q=8WT^qke)Wqp~yNZNM9f?eKW2xU@qj0I1(_9f}SE=4bVy~&1;=0)6s{6mU`1S z_f!wQbU)sy7N7HWq2x*nOsB))n$9pqX5{&d!ko*&womTGZH;pJBJ|8D=#j89O30X$ z;!vyC2F5HgRC14Oo0mEX|< z+9?JGXerOMDPR(CDs2@OK|!!-B;*X3#8Lm1XyekzpW9Xa(}}b1p6mmtrMX+|p_aHD zZNaW+a<)EA^4eZB0-!XXoVnj^aI(^rf!@y;Al{fFd73uk-+di~-v^S-MuemX-6Mg=CDH1x~=-b{ck!ss#7lkM3&O89!fT^wzkHvuLIM zmim`jDcA0%7 zm#kqi*SMi;Zuyen0{6zeNRdlBs@@PtB@1;tIlgx}d`H0mo5KesEMAa`JCiGxZ!~_$UK#-WGQD)YQ6(SjH2Dx59n2L{0cSqcKNF0&V`#C3QO552~3k`Hz3$%Y4B|*mL zVIzoLb^l*`-yPP}@-4ba140WSR4E~}Pz|9`Zp{%&e?6tBz+= zpYmwP!cVO0k51#Wv21!Nr8aJ=*r;ry6hHrMI$z#Y23PZVEwdtBl(I`J6w0rA>$S_c zfO6@JcH6JLm&!TwJX(YnH*^l4_XN6#cxqGPFBh`@SQ_AujlR}_K;}M4MM9+a4UW>PiYV50CF6#u($_j zUe4^keKO|9a$o8%waHfP4;tBjQu#X?uKtaEl2Ou>d^DhBm7XgIr795KCPmt*R5c9? zj#aWb)=#_=9V4{FIRMjMEe>D=R|HnUDk*}Z;%a)jvXO&8#QUJjaBQb_*%&KI!@+BB96p)bJ0MrUsdxlu*q97?(L7Wm0u_;M2P8(w z#n;P4P<<9472c8G?v{US6ra@>fe1qDWm6C?fTbA0D9DvU$%3Wj2xEskx4XxW?lB`I zMn<-};8$U4wjC5oz%oL@1&-4iGGQCd0)r#Xhc!R>2dT~ugDFeZ>^82axXccYDwc02 zT|=st9jr5DceKVACYs;fZP7LksVE_hCzIosl(>LMq_m|U)KbP}bGzro*F6*vpkH!kho(IrvJZi9E z^pzSgLMcEgf@Z(pt-#X9!S1(%qw z(UR2rWTMar_o=$wC%MFnHT$d^m(S%7i!dv@AAKokp41ksKrvwrr<&hsQhdY_r<4<= zg4XzLw5gn$kn?a0<|^5Gg)|oc#)*^<2K(ckqS!UU!SR zb#G4QvHG)=B(uHza~X;^17q5kuOvt^<*ZV#xu^=YHDb$siGv&!h!fB8JZD1D@$CSy z>PBgM!0v?eI7pJHub|T6XVlHwpcSYk*^Q$Mool(egr2cM>@p+noYNfQtSZBE(GH;0 z%T0@ttiH0tyUT8 z)noNB+2z#i2Yg>XJ+3?x>Z4Q|PZ)Idg>FUK!J()mp3qGR%R8c+@ zfY1;>_(ESuT*>glp_#?Vw$r1@!7ZSTJk|M8cNLxC0enmm*4-No>hcP>%_TNdcCIcr z3woog@K5{XIJD1~zisi;krFN={@p~ypoNRI)6+Yg7TeDiE4V#U3S0LclX&GP|AtWF z_&xw%-@Eo+F5nJfG6^?KejV&KhIVUL9p=3)P+ytyIp(sBehnCg_Q&CvA9Axe!|t1e zww3urBv_;J$`UE~3!?zA%MyXRQiomY%&b&9&~c$y9h+iSWWm-5AI*#>{6zHok1k@a z2+IcR56z0&|q9gn4LEZ(AgA9K!_%^rnXhdowH0 zw2y7VVNbWs7;->BC>428a;+GXoj~G*4D#%Ml~H(^z4dgPP&_q@sHfy}pg|+mJ@J&q zX!axR>~Nu)!IgnTrvi69>aKnV*?S)m^JObzDuE7`U;+?ZW$9q0rD9P-Fa*YB=Ro9) zMFUMOeaLag8~2Uxq}JkSUI@^@Mr`GCq@ALPK`cDss8&SAQeB?FU& z_C`pHw#1>XMeG!GZ?oBRB;>LsMs{x8+5gyMD%%=w*=T~C9S1icXMdA+06DE3i*fpGcHLOm?%mQ zUWqWf9_$w341@12?*Njz*vmW~s7!{er|Qbuh(u2KXEk>*PE@st-w!mx`A{0v9O$x% zLh;9wI%P`WXIHQ>mN=TVY`5C$6Au);5byn3r?*HSSd)YZZQp8Q`)mk^9T3E|gjTys z3?l8StdUVEy3m0m0<5^fvsf#4u+TQ(4b`yVZTIti*Dae~>JyVYWeO|5BnW~a^%C3A zip@=_`1r%>^FEe~;*)Y)=hgKrWuY#u*-EcF$*+xmpKY4G{t6Q zIK85eTRpNAsQkD)-G!a*ST50D1GrhAHq9msS@Ox5 ztu~J38g6kDI2CrD2ffBf2p)3Bu^;&gTvh+WW$x9SBky~wo{vw}?VCN1;&0}q%?ME& zCJhp8xuuSW$O0YeZS#aUnY!IJqQ%P7_$;Rs;_ai2E6uobzSjE0pyC``8 z2!7(rZ_4`!!1eqNfjN0rY3gCDyw1d=*0S|8%(%Vdsvi#imK1dqc>LK1sy0~JO3Wa~ z&>vjF=gz2dwN$1J#OzOZ8*)ieTO&qC%g}{<0)Haozv9Y{bnLL{p0@dg31PLC*2tdwwQ3%R z!&cMJ?fLh~|DOh=1HFV^{}YKGxBjrGFJ%6y8v9!(@!ezkkwKxBAXl5*M!ml22cD!@ zdDr9MlNNZHR%xQFqHjH%#_?PlZW(U+T5M!1!6J6)YJ-hV1Q=?~^udZaMN!Vo5W4KJ z;xdAvmR_Z49J+yb4;;1U4Ax5+U4g-bj#hpah}Woa9O2GPV0Xwc>j;+e{e^_Rl7{zL z(ILnXp0|3wBJyqC@ydoGJ0k2$!|I-#{N1sTBVaA8s(E1?tzPUG2FiNn7|k*U2=M9S z^|E8HYLW#!I=Vq?PL}qVT}iSoOQ-Xae21$ReMPLU=3UDul`n~VD>f#DlwBR) z$(ibMEh6*Zw=q4#8s`01wAvR$tj`_sS-q=C)mDd0vvzz6m)eVm6zv+u6ZhT(iMqEXpAa zI^x9bGU(3d-MM5;-fpw~p>;X~J8a>Y7?$LHShiQ8yQ{WR1D>s92}9mCoVZCUH|tc=vSTLX6yFX zGoG+h24BE$7S=OeOG&Lw@>QHqX6m*}|#2UKm3IjaCqR9Zb}^bVGgm9HB{O7dzF zc0(Zt_sQ?S!7wC2QOz^;at?Nz4YJvlc&3gz;;o*;&;;Fcd5}2iyK>iw6*rAIOaW1Z z_|@Utuuu6(9w8xPM*r{+w7l?EzO;Mw@>!VCxaUBzr)N<|Lu$`Wwaz&NS{fAY?dlw+ z9-4M*^ca=;4DV{n_K{6ntsEnC#AL_o8;v+82LiAhuw6kPnQ|AbcBR`Gv9Eodq)$!y zlxnt(Ew#rdj?gmx(gA82uWuL~mMU&NpgiZX6DhCKrh2xfBP= z5NdB-`9&+dSvni@DDt42J3Q^2e!Y3?HSWq7D+SG6v3*(~&#Q1vY-=LBHYd&gsz?4x z{A$l&REl6ELB2)J-Sp`+?_CSyob*vjQs{XOA59PsNBq9ePEpMsHnWK_-a?J8Mm3G% z4TdR5%h-*q=i<}nH9Ys~eBz>2Ft2O+1fS$|^kFarVPl)*PMkmKX`mxLrC81dcP#xy zF*3+diOr1)iM#>G`DEgd(Q5!z=y8(4Q-`Fp+t|%t_lSbgUROD<>6}dv;8Pj z-lt__KHX0|eB|tp2COiG`cRGVJi+AH1*Lud2bI0$6LQnYlD+=W+AkdU*#(XorxkZv zGb^06>MU{U#vO3ViP_>nQ_$Xff;!qNc+Qp4Eh{zr(7>%R$5N_=8Nf1_ z3+6>fh~bnpubkyf;zianCXuM5LD76k>q^he%*3?w$|~Z@a!=c2DgecZ^(BnF%zf>h zBq9Vs6qJy8dGr@9TpE^HOGjpi@FdkAw&ou~Zg?@$&#TkvsUwhHZh9h_SUsA3Vt*mT zaTPAXmE9pvpYDg;G}$XXo30jg%S{$3t9!L=%B;ji#gc&|-4rVmTD9aXWmag(r8b!+ zH{G>vD~wPk$JpR1yUrC#qcpBx&$?##e9Y9oyW+wES;9t3q{eF0)|NKnwgn(6=~y}d z=lhk^eUgnf78S2jWcq1hAa^9#o@CsP@^ucg3w8(|5pLi6@yW-J+jiN{9**@m-uo(Y zIsJ+LSAb9)xHPqS?1#4C*Jb8EnEn1+jYh9JNAQiQfe+N#It1KeW}nIpg6e6g`HE2a zb2Cz2mbkjDdpUfVN+Li0Qe?_KNb|cl;d5T(H^lw91VWY8C0!?{X)6pPWk{f&nQbGw z%aq-y{|Xzj^xjbn^AdgxQ^Q1JV&tu)ACbKa)ybSmyQ*C`6p4qxupJq`Su$l+ez#o{ z%Odi}tt9(o^r2=d{Q*FH8j)k`O4^kV!IzDGps2&t|4 zxW-{hn*NdNCHP*Y1D6{TABH%^J006?dVzBJ(#8M^(ecPv|40d9cq%TRlDXtPuP_Cv zU~1~=Nn1HOY08xHKm29c_20G5{^!%QiI~GhAe6k8$wMx#BL$vMM9*p(FI#Ab3 zFUJ~J`1H9F1Xb8DVy4|Tvl0UCil7GHQMvNB*WzZImrSF*QpzqYkxO4DcG)S3D6%D* zxo~_`xO%=EUYZ@T>`Gc=Lyu?fb%~Avg1_Kg2maOblHc&@jTgRfSfe z3OQ(mGj1A3PH|zTh}LlKX)cq=%CgRO@l!#SNK`}}f%@F8C~L=_s(F_~?fZqIBP7fU z66EeO7vK;x(R00QFj=U3M~kjZIUVLcN@AuyFVILbmBzXoUHfGaH}UEkp*{VV>sv|! z0uE4K~`s9rwhWWDg{+LqB7ZZ*a6FU3_zYp9eulh~tQQej%c`xW^07XF9x z_!aP#;a*>}GHzZTGzyb`lT(I`ww9KTS$RD7YcCbIjutuytgUNb)^+*{EWN`gw+M|- zTZy?Tkk6sF&khwbh-vhTpNE~e7C_U8{$knE%e^FMz2Al^r!rIfrSM4$8%V0Pq`myc z8u$odBj93w0bMKIcpPFn$dYdPe(ltzuIsXF%TX(Jkx19#gYxe8II>Y<@t#j@9DOn) zx)ZMkkg%}$gc+WL6{(GWdJt1TCD-evP2z4`ALqCBL&asa@i4xy7&gvc2ZeJxxyoIcpjc1lDyHzG1Jtac$i`b^)GL%;CGe@TM+mm0nF(=Xm( z;=MFG!l(Y&F*&%yPlhltAXkFP>dr4-fm}jIniM0-U2f!qt&A|mkf!#mc9kVPZRfHC zmrK?NeZ59t+9=+epKF?&i-=sALM|jwI% zHC?%wJc$|5M>6 z0AvYJE>a<)cCpD3?tuTA6O}<9W^wU8DO@DtO!dg>A5ufVKX z)zmmobq9g`6{s`domF&BA{fa8n7W?)^XhsB8 zV76Q1vHMzTO9BL24l($(y<#9jn3~F)`&|tUCWRYO=|#C@gA{e8FBqa@j6(0q1fw)ukIE8ytIXcjwY2k6vE9s2B(!>LqdglVsi=Q#ucU&@V zSoL#=F{ZWVh=1fq;p3;=7CoD+V(y)ohYRk8n@#Y>S)R8#|3Y2i=xEIGUkT?G2TGCy zQH&!Ynjq*gs>ozZ0Xm{#@1pqJ>$rnGA`_z=Ed6 zNX<9IzBot)Mh4jlh=GBgqJqg~l^|QrOswD}E6I#{{L7cFv_{EntBRdZeqo5Xt<3*O z#7_hZsJIk(Vf@m+)jr+#h2&it@I9&dDz*(i|H8>T@|cWh;l%$s3cT|ktxwdi)sbF_ z)QN+cK6mJKOeE(q+1uWJ&zZ%(kg4DJ+g{Ea>W2)|`pzYize!2il=JKkdrh01 zc}tcgs->@2!B6J9T+G)iw)Wtn!3<0Zxk<;HF+d+`zYTM&O2pJ=NN8MpYLlz=uZu)aGcoMk*CvYqEXpEO7#VWmc}wtf&RUGoW2U(ai~_k&Dn zNuL-q@WTWR1xRcV5&R2(ZX5xDfBb zYaBJajw~X>_ZC%M`WUhcCCW(lh&iPm!e)8D^mwW)m2*jK$A|B^O<2K05>xN%5*|y% zJb(CCGDnt5A$tG(O@SlFS95m$UijU;YxYvwd%L-<+8^mUSQ1;*3FSGRrS->SO^N0gNY-ydd5VhmGSHe{2N;Vqjgw0(j)WB@fs}0`~xbS#S)eSS_c&H_R{{Vy6pWRFG0f5jqT!HtX?$S4R&9^ z*H3lM=7_^%)V0Kv&;~)g^?TA$7OYVuzkxFf5~cZO;7Q5{I)ho>nncVtlRY6%p|3s5 zP*k#33-d4Ohc1`@kxu0qo(B&v6)%Rw%JMdMidjCf?2nao-y<^cq?Z%v;@WsdDOvM z=EcQfmO%id4?T$*XQrB6Ipw<~am~x79MZXLlsJ5nt8`7+YDO)m#X}*q&3-Q8$@kM= z_8d6gowcZ&f&FCK}zIEp-ko|5^ zn1MgC3;C4BiR0_k0NCE7B8Iu8TV)4QGzARg5rl-d=A-Wn%i~W;H(K;Y&7OJI-D>Fo z(zRdG5@ZZ>?Bg2$9>BxeBn!gF3&!JANvitTe{TT&(z= zYQCq%95W|)#=(O?TTQrCoUNUkH0)xF2;bzcq}M}y`h!~|qnk8)D&)|cqE}c;HlZxo zt@kvotiaVze3Kc^npfGDVpqf<9i|}Zh)12v*L+U7amVf2J9(nhK*t59TYuLhTJ8Ed zkNdR?6Je{Zkuz;;7Ng+_Qn%X{cWldFIfw8;UHsocz(a>^?1QEP9Kv55-ev52Dqs5Y z=6O~O#J0jc8fm=utKJ4IKJ4^D2MJ8?(X{i1?e|MSa?9IG1n6it8|XND<)x?)eYg-V z@mUSf6#3t0*!O+IeNyq9-lE>3K8|cMgA(M}>H+PVj76sno7K(;7^*esHr+3D)ZCmHewyWSuYu2J ziU={(Tr*ZKaHcKI2;UWDWfjQyxGus+D_j7U;UD^XWZ$R@y{Glt3O)z<`^|}3sDC0! zK|tPL5_Rh{`zt}+{(jOWp}vk6BK94)&+l5OKHcO}#U;Pf$xE0vZI+fA@3bz^6{w|A z=OXI<+LyQ}cnnkFr6j1NJ76*3y_phqI$biIXsUIh)3n3MtAB( zxn*Hy3@S{{?Evz9@0x3O#{n2LZ{mq=bRVAC!R961)#cW>8~=36w#9HnjomdZjVkzQ zvPyU3LX0i+>A0L^&KXN$t;|PAH>uTA8p2*J#!O~2oFwW36rTd{w}_Qm4Kz*F3k z!k~qqo06$t)ZJC~Z|5saARi7)lwuM;XHPGM1JJQvp#M-}R#fasZRgiur&v>EjB6jm3Dt3RGVPm)Cq+NDQ&lcyI2Y&ad z{U?L^Qa)JCMH>)b33N+NC2fj~QGR1@KJ@T_?n2z2TSh65x?f2W`wrJ>$a_1gn8L%Q ztjk2$R2GhuZ{GKu3Vx&->&?pFZ}n-t@IqAhg`1!+ z8JCq|%j)8-jd#uG;)H3mm-q8e+dX@y@!J%wUjEs-(WV!A>zcF?I=<3Nv!kHhe(H}h z`Lf#FsV03*;O&WW$6-H1wBzszi>px?Fig)b-Y4_k-dCz%pDs$=>YmZuw@>p)Nuq{| zvS%?f4Pv%uIF~lV*WqGh=75Sfi-X~#?nF}DJ=s?@st|%fddhJjPC8t(xU&wAw0gCB zHS(RvcWqAw_0Y{a-g`9e6h81U@sY&Yls;vjPYK;U_l#>_u(FQ3&Kr&H68O^i)~>SX z`kgggGg>rNORzx%S$e+k&YH%N&%H>NmR0R!NlNPB9Hoz`eS0|%`^IK$Qv%Q+ejtI< zm{OZBDbm98eK5Hyj}CvX!i{P`4Kftt%L^}5bGir! z3Oc#68~!l@H!huh<&ma=^K6tLTT|uH+seKI_o!2DXJphzWF(W61-<=sAp0r+rHg};k~IhM z$p1(~K;7v5nct~d2h5|wxI~_+Ax{l>kCgCcr5TlA7Spi3d*_dvg5@k2_kG69tGj=P zein6CR3E(Eyq$3>yDPKwk?NgDFU4Sg4P{KC250=0oIW34Y9NK* z!0H=n4yjMMI-ilCQak!>eUxSFK5hL`B55zHtIRi*@$qag8q^)toCS8WTW$lF_H^?a zXBsPF-d-9S>d->X_y+SC+3pZ$D>&m?M32g_vG;6Sc0iQFK*B9Ye}A{ZrL?Z4lRAD# zp!)H4*BhRVM~X(i7q4!6)?5GI^m-zFfDqliCQ?}!-g7u5aM)tIRv-tnWOSrOMUSSQ ztt7)jFUU*m7Yn_aWF$v(4L?j9%Z*IABc18oGH?ypQJ8oKQaM<0KGA|*M})dtbdOJL z?}hD*OinJ6;tNue5ec>|I+>}V-{IEZER(_glvLopWLqD^_|USdqjmE-(z z;L-K4{R_0k6?CKc_xmFH@yzOmA&W-aTfel2g) zkCuTCi?}jG-V~#0JAeBqwgl6;B7%;>A-P2|wrB8mrDVLE;q8|?!nz<^u5O7A*I%Ig zN3ARUXVZ2+@?=EI?{d@HicGtXAc4-k>Y?kC zk!(?!4jCobKK!=>ZaL(4tv~y-VbLiCn6URslHYPml0S>C^HE~JUK{Mp6UYy%Pj|l* zd<(3P*1g*O?Z>`@eRAhtW3{6$sV(9Ja>eIwSYCcN@x7s=u>GOA+H$q;aB0sir%3g` zA>vE(?(#O;4>%%sl(%cC_9D1mg4!7+W%j*g#G7N#k=t*6+<>Dn>CniJ3Da9p;SJ^Q z+YDdO{cO!tc_pZObi)2-Exw9BRH+JR{L*P>-1}5PD@V1`oj567?gmcfnq;(i5<_?APy+&rFdz~`Dc#)-L&wk{Ae}=a4MTTHBaI*--SGPR zeBZOqKX>1?PVBq)KF_nyzLA>mlyI>quuxD?a8;BQ-lL%4AW%>+s$Qf0lLQXe{6#@Q zeW|IY4f^-^%#8BHhW5nv@|gwY|M$13&nz#V-~QKGUpzlQ(*dP!Ztl2cwCU)X1%<>m zH+TR3J^#IbJUKPHw6sbd_x$`8B{(>YgPpU#e}qFwsl2>0H9adYub{53At52@_tkUj zkM?INpXb{>7Z-OqIgl7gSA>Hb1LJiREY8sz=I!mLpb53IvhC{X(KN923QNr@X)!c1 zFR5%v$gajrc%4=y=R4Wo>o)1TM>uu+pK^KoX_8Imh|QIV4I#+^R*FPc=| z*_0ggEnP$u%)ZaPlFGOp2@kCHv=Dhq$L-X7J0EnL+Sn6f!|FHrxSjWGl4PMQ*H1h*B5FRy$|s?j%%&m4!cek9XV^k|cfMsm zJ9IWJ^bBcHW1*sNCqH+;WYlHfeAGEno2g|9qwl%OT>S1k5)~oMs*$2w3gQ{s34i=& z2RJV8-+e&&O~yWI+$fnBwz93FAgk@MbeOGfPb5n=aQ`A|hD~nzs8J?^ zr!{IB+FYV%M9gg{d5V68CL@s^fq{>GDq|`%2h)+Cy#U{hx;V%znCG=E96t|?*41$X zIatP?JaPg#@%~NuuR+APbb0Uq1^Xw5uTOW!;b40f$!Vqkz3akp_$49j7LEArDy)w5 z#{W;+#aAPmhK%I}ypN}PYoT=TpO9|mH6FmDm1@@pOEIlnrT(RfqTI_U9*9^a9l`l7 z#A$X_fVZ3+09#0)WB6Y)q}NYWTT?g3@isuQ>2JGBT6$#lYJHKPkh9}H zv6Suiyo&YPed(yqj&3(&U^AZrNUlqc{eN?Iebnj?y34De3tJ?aD98U^W22z=`{T*{ zE7t*&pyJ^7bb)W+;~1N(;qKsF`OX=7b4=5$ow9R?OI0WV`Tk01*}oy~7EoceXjPvxQdf8h~MwI%^*c6CNEF|Tv1H}5oQ>$WOJ#*m_5Ch8{iDSNi16P z^IZOCjn!{hJvpqVN5xIgxBLXKunM$|NXRdf1gqZ)#0)cc)& z&NcSz1jB#6r%kQz$*GWJ6yD^G_HX4CY#$r~+4)plm%-^hWo5}wP%6mDu%nr+4N`%y zzm$bZs}G#ePmBXiFr{#H5irrHH?X{$Ea~_Rdh++1k4tT*zmql>^;-D>+YBGx4z#5k zLLeKIWjg*10E(0BFWx$%J7f)Sz90dIGaIK{Jg!bB`pxdU$PrqS^+TrPw}@>z0 zEd7@4VOZABn?e=p2KG)HfRLQzzE%}QV@mF9Hk!LK{s_W`xPZ{ygr>d zvMk1bpn!h(u$kYKL@%B*S{skxk&;~~6utgDjd@Hl(aeV^-e7P1aZ#3Ro~}o-8{3eD z+AIn3dT(PkV;}Qt*dID zZ8XIOXh^Qq2};hd!}AwpRDzkcz__BZ z4t%*36VK|zlDU!3SiS*x_&+^dKHl$53lgF?h)e`8NJ-af(ytk-j?gZ@cS6`*v|T6)cO^RPP#%6bt3-54m0uXj_M6q0gq73stL;Cp&G zk{U-V&2D+i=^yLUvCOt1lA~MgowLQGMA57E1#hI%BxvVh0G|jx5oPopC_R4eHGeey zIpK;uTGZ3*9kKXZxlKZ6j?D7to#iHbIpBBTlVgKd7FTay8>^RoadDdn+i$O$y!w(V zIW6`Pg!BWs3hb3v)*%ORZ9Xq0=LZ!Q-n|q7^Q&<3xD?r!NAFsf`KC=Kr6fWJxlesCE>&G9< z9Mg$lu=e&a+B(vHRFvjCn-^pw>b*{xF=6)1w7nk)9!ySFI#-0sM8;_e-1uwFWBUJ#35QS9vW7OwSE{_iU^0xGQ6mSUj3{61);dQxhWE$O68UNAo>M_^rmv^uD zN!xjQ?%mM&jILcfC32E8DbyFnv7VyaXLuWPe@l4}lnm#8G_l3QXz{ppwzW6(yr^oW z@kOWh$YyTdRFHu`j`MsYarzF#4W^4`U&1kOf`;DK{pB4cW#PCr*fF-R1K2oC^8 z+S?C7r-r3;aZ?IrJ~|b`BP_I9q+>Ds$j!!gQjBldxmh}4*f2_spRIx~A=|uUnE4n$sgtNI=&P~89CR6>)Ybme zO?UMy=au5*$&d5#Z_kK0-v{fH$7zim|D7|ESlj|ZBju4uF)Uz>gTjKf{{t>q0^sR; zG?!}R_5_Y6pQB%T`*uE)BTnjc!e8q2cZ#og^qOvU(tz;;r5`Nrzunz16AYu##*J60{){D3~zpG?lHx%0zM-MDZ=9%X^HR< zbk*Y%+OvE|L21z(s+cWPG&DR|I%*{!rKU4=S`vQLIy&jf2rx!DaH&Iy3ELpRx(y^< z+%#7sn@lRLEaL@8j#(A=&tM)1Z0V8V^?ZrJs7rvjgiZLMiIw~)^SPH((F;3kQ2sy- zI(RvMYCm+f;W7ILec$?b5qrTaTmxD*hWbk*9lOz?UXli(-LNzijilSov;}DKbGjR{ z_TP8VVvpIveHO54x00uN1t0@D8=TGtN$ejPz#l(xOFtKQOWp6|A0GK`66ZGWSQ|YY zyZgJ$7o={~y2PABkNo)6dSo7nao)_Z=>kX{oetKR6eWApUS}6=V(hsS+WLgq{=_v> z2iK`(p5vh}I-x}8p*jWqE+DW(Uz?D27fWLjV zbntc9wa@iNYYstbp*52bW+=qY`}PC{U|I9GTnR8_z9`;68e3AH2Zsaz$4vq&M)HMJ z_f(e?t`FqPvxGBu)|hz_+KaNFehpp2>LNb|(B(JVnDukk%c#uu>Yz z$b2W);291!NNRk6sK2jlAcz#yM3i$ib-eLXA!^h`>;#=K{;$vKZjn*5Cgpu8t-%-Z zbnZ;yH16m<-VcU!fWP)&f*ig#dzL6#HHd0O0r%|uFo3gYnSO-1AjdC3i#>Gj?FoNB zg=e6|Raj~>xRKgB?qTAH-rdUJ5 z>vnk6{&*OQX_laj0R%2`F^rV^yO;mMXP;34e*6dJPPo zNt$V91RWw6a7!7W8mCeC7?F&R+o*b_8mi)6v6hQak47Nvy~sl9F-l9m_~BG=5#0W2 zV!oj^|Er6G15Mn%06X4z?tq=Gjv8DzcM(I2lj)Z;&CmyDn0Zb@{sM>%tMg4nRQDaSmHJ3U4W8!2ad(l`NVh;%A>27bbvoB*#`RNeT2Cr z_dmsIIc)S@$8QGk}&?+_2v1A3%5aW{Fq` zT_Fn4`gbgqdikN=VhJ`yI~mf=Vx{Bua;65&WJ#7?TTMEM)5xZ`m< zGUTxa9bW$2^SwWn>yaV{?ERAC#C3#tq&N3bBz^}T=YKnJy>gzND+U#+82P^XPC#mMoh(vWz^X>^<*a{yqQfXwnGEBl5LHIw=yeMPhPzZu=`eq;Duh zn72NpXiZvP>R$%?1>^xLnc@2`cf(J9Iw5pKtSHqIw+p6mlDFGQjGE1{3 zUi)ep*zM))66h70zPR#U`%+f5@)bVb7y1$Oy`uhE&7Bxd{UNginw-bUj$GD5eCg-B z&xbjMXDv4!MH`bfKh|X%LP8e}XJz0N?BEU!c#FxsRu<~**KVeBKR?nVyTNn;e}~w- z)KeOmu3rTIaN@5mL0Hy^Q*=?9hE<)aB*>8}uCJ!|y^vyb*&hXjXz4-*M8-c?^PXs!(l$Qsk&8rbB(4!%a(N8x~kCf3*4LkZ<9!XjL>W7wJ?T_ebf9RN&AHzxIY%2ftEh$RU;Z8AS{PGWzpI=kiHAOJ|INl_ zyW5++PLB!Qj`NvZ$2Q|nKDAv8{Nev= zpPl2o6Ku&ECCY#U4c|d@K5Wsx#tB|9@gzj22Ox}l>Mu5o*Rb>e>0hkM(^#S?KFpbY z5E-B8fpkFkm*P098$*I78;3)Um}Cr+_zV)0rDQ;`>jfZKi&!K#LtB4IzAkooE!~I-I>E zg<;PZxs2s7k;oBXZWHO2&-QT<>*gQR(rR3B%fb3M_D~5JDhaGa`Of$3q?4V2*?U$Y zG>@Hwk+@$ZNF$!c2qZclRBJVHo}llD{imaLh0PX z^v23AgV_cT$ai|B9Y{}&&&S{h%`Hic(~y{0_^4N6wDH{jPLJ$ z_hHmaMSaX#(E3UZ*i8{4{Y8ze0B0tk(~Jb$dyY)dJWUtdx9n_5E2=HH({%jlerwq5 zm=5O@8ZX?1jz~pwGxcA@w{CXTFY13jM!dFH@%>bx=Y~_|d2t+?m$=0GwmT#L= zk`z)xnZiP3wYN7jwr|CXtge~9K=70-A#Mu>{FV>_DntZV7I#!Ik+h!99F?jIN_J|X5VcxD zu*TdA)c#?#tS*A)_d084QwPy8pU(fRIz7vw)! zvx2G_Mjo%LXNOY8hMqTQxhi2;pPI_rogoL-29Y@c$)vLUO3Y$|A)mak$j}B?%5f8f zZt8;YZiXdRa5!B#3a_PD+x&Tk7$Op>C zh&Z9C)eHCUILbPSe;6nrhYDk#zCHlH1D}Z`yHKi%iH@evzB!fijG8+G`B`L5!+6v z7@;{#o4B}^%{tbjDX|Cv0qVjk=Ag38B@GM}iilkt9iK05EXFBjp1gG0X#aUu|&3GJ-92o@2Ik ztwDF@t>gs^i`=;LpKG`(lxdUB2K^aYe%m0xQr5v&kJ{yrkq!@8uZZ7$y3 z1Gq#43uiRKUBmv_ev-v;IOfM+ty%CPhkS|nR?I0+{f)c?@RSRD9gUY|xsn$8FWC&O zSq~Tc^tX*c6d3kEHL_W2^Fz}e4LhcH1E}&Um~*qIzBDY@kEj2}Ln2-2WN*DB;`R+4 zAB-s}5)8sB(!`9rCH}rWLX0oLyB6DDP#FQDr~Lkwm~HC>3z;}iD8`dE7W8Bs2ACy# zHRV9GXa1SH-6{R&3qqVr0tq+)~ z@=s>hUTkC~Lp>;C6G4U|Ld|~DC$QjMXHE}C2H2QtlW#UB2I?s(S!Lwc+V~9LSQiCHfn2&S{z|`5j#E)@so+5Ir zy22m?VmV5lj=k*QD{0pcd{zlI)GAMG3qy~+Jxc>%4XE#zBG zlOB}3X1DFy;yD;6<$R57Y7;ToapNxWE#9~i8v|n@Hz!q#+cNX7#K0)udM}0L$obwf z+;@ds!?IBsDDD1dbs_8F(YS592T90X zJx_4&{E679ITNxD8DQ}MMrznIihUPb_Uq@F84Ryg05T)dSeC|(Uz`uB@<|nghU=da zIU_=O_;O=lE;XXnpA{`7Xe^-QVayeL-py(=4C*sXI6Zm>#oY5VS>wN%Gb}oIoktx<8#%s;emvhg(zK3 z<}Q}7Ncv;kyzCuPD2c7dB5WMa{W5tH`dc=0Zd}Wr?YU)`l>9HehGe4H%&Mp&!XYtT zF`v`?!A|>FIZWvo_p3#E&kDjN9_ot4nk#zN)xhbMyeVZI9rsMs9eU z%?gDQa#3FkS+9)=7Lk%GcM?3-N_BD_5jR|;w(_>KPN>l_NylMd_T~^>Yh*bMXc;Bh zEh$N?bZYB;iq^Ne#@(y!5=EZa1-bhbcyj840;BcEFMC5CtJSk-TGV(2Q1`*#l&8YX z?Kb zb98zLCxY&X#^tQB2{CX+mP$Z(b!6GWl@2UnKyH#Y*b@sB!9*{S22c&&8UfP$l3mhK zBO4rX4udAewuR7FT+syBu(!g78zi2qdr~=HBX^qM5O^JUMeK^K2uKVL6vsp;ZJMJ=|ba8_66#FQH2o{Wa>mCMNL;3iK6`7Be^l>&ciM#^ilriggaZbzHO=_0asg z2Gjk`rhj-bro5ZS)_NPc0O z98T991!yJ_+l4>91u$aZc=n=JMic{$h0pp&9 zZ#lnrn}>D?BwLS{(i6oo%WDbtfJHQj5Gl?^5!G%9wuX(;B7>4Hwkr6AdxDNK){V2y zAFx}#L4(ILe2x(U{SKV*V3p!q8+c{oy<(;$PV9PDKjj6QrcYuz<=$g?m?icBIw`N+ zes{IGe{Efd%G-bx8bz`EcH{ff7We;dA{2?jqT_enoJeVYneTffI;1s76%CwegMlOE zAVWE+4)Km0orkC}-713)AM!y4)YdkK&?LwYoLDgjXUbqTI$1bP1&PhI-JcO6&VPBF zBrmjrpONz06eV!S?IpSTMJK-wAi09jwYt`Y;<9`h;0KFSam7b6WSmW0;O!v{ z20eDSHe+9R8xtx8PhEWDB_a-!R|CetdRhZ^m~Nx5bsiWJPYf9V4{nhcsEQD(==V6g zc>)a%>-jxQj)EgLSM5wm>ln-hLY1EQl4D#WSamDh?T{qT&b2K9UVETblyEz>qX&<~z`{tpr~e}~ z&f=hnGJ7LO68FL_JZX_h--1ApDmlC(?eGdxf_KG&*sRm)6y{1c>sYo&1{>;OBi=;ivh(!jr(j$pT9(J%>MTwtQ)@=v(DndjrvLKs&lU?A~ zOHY`YJlD!DX;lR#X@Xy;n;u8D^k^SPHUmt%HQ&8$ry(AG`NHtQeMkR2ieLwf)T*nJ z@JCt*f&eVSavuqS4)LEVZ42uxQ(YK9LL5@!n_O{HzH^YfEiEm^9O)?m)14YbhYEm) zE3Y^aX%u_RLZd9+WQ<5ufv?NFQTOiw>xFQLK*CrY;`&1okYYdIfD_4Jt9x}|fQeZ5 zV3~8^-5KGJ3Jjo@9inzFswR@O_U@Vu&f(Dg5KFq5@6&gi)L;#9WYV}|_YuAr z!w>bR{w_EsgU*NiwH#cWuH#aG?E6~Q?_JErKy$|64_l&)9_GqQ{OE>u-+tKA?!0%C z81gS!1QCa}v@lmifqTqaWHwG&$9{U2WFw~&ha^lw;VO!*G53g@xZ)eZer~BI!u>O9~&WNPc?AJJ6B@Z`OEF_K~QOXm+#-}6PYUO%+)lwVZ1lK zdHkWoAL*9fk!Wv1jnDjN2_|p@FDk=CMeB&2)f@;aJ%A3Y2=ly#foKmDVXkOJs8^#U zF*WI;|E{?0MYX~=;?#klY3(y+RjNwd>ebDNLSrbsTn(A_P=QpvM4`mB|5*|!#NRCdd1R z5jJL`+PV!XZyK}m(jxw}j&Kx@67^m(01mD^7&L%V*G7Dw-l+kZv=n0@Vp}}|t-QgG za>yAqHV<50R%UA_DfBsW5oK^<)!D(tu7gYl#ob4vMn=F!^84dF%;N~NwR87nP{wN* zEA*{tvV&PRJguyI@~jt_7AUiz!pmo=^EpVfmi73WGPPUkcML;l#N%LT3+3R)Q(^1rhWa~^%4SMJOH`GS3cHAv=3hiGv%&>E)J4L2 zWYAWuT7C6b#tA0-&znQaBkJq}__1*{sT&nBfO4xMMs4Eb7tG4J`S0;sf59sn1(z8Vwd+HMoL|ows+Ow;pzQk?G|jpyUkZ|i>I-w=vP)Z<@A#@6y$uJeWSPN0#Rzm@ z)5`I_aJm(-KhLI1tn(c!owyyLRm$oHfif7ShXwx!*eYRKp( zery%33KeE&X0_B)<%#d*8f>q}V;Md0e|%dx3X2DF+o z4JBnyOHs4D3JP-pT778PA*aTWblV8?n4EeV@B$IIgRE(8cBWM1!`U0rCS*;9+}WD# zHbhj=sY)?^0bL;o6zV(pf$x*fuCSCEuoLnE$JRY1iXjt?soG=xBk!`nnrS!9gxx5k zf8QRSC(t^gFWWKI;O>agx}fJL*;gh#1l^l%mXg)PB}KPb9Zwmz;>0Zdd|SzkqscF> ze=LOznE_3)+e49|=g50Hcu+(n`das$${c2u>Y#Iw9&}2y8hhUWKzI z_Q?p2xm;3XJKvUCLD)ppMxnf`Smn`Z#B{G70wSTLr-JEK(@j zJOQ?`G8y_Ly}|dLLkj5E1*wE(Pw3S2TP42XQx*QV@R=OQ!Kk4vVaB3ty#i3CqH(W~ z5$==@36Yh+ZQ&ozo)=A5Tyx)u1c?kZ-77M}ftcf;+fMRMq+L#YuRohvi3+P7Q1+Tl zE#e^09_@Y4k~+N}?*EzN=}Kw)ct>e|r#qH?KkA4u4aN>m{~Y|}ABFuFb0fdAfjw)7 zR{$S}3fbrX9JrgW*+*mj5h86HLG4~LHul_zdJE@Y28GJX0lDi685VDx{wYxl40O>p z8XU?l^krjRdT@2IE9kjcDyhMErwE)#6w5iN;r?E`SJI~#j$0P?BfsZIB>E_WCyp!&{F)&-L_AE^ZdYq@=m8sF2Z%BK3R^-ALn!k1|`k=G6XEaPYNk z!;mL@yE!ZpgvXMkS@k75JflAQlHFi9BF_a!y`LXNc$aXu#k2hAXIrXrVTReSD!TOZ z!(oZ*pFAr`9@Rw@d8;(gTp1w;iLfL%ge8*bM@_2p1B9wD@`jo7MW4DP4pTo(`k_1+ zh&Dh=bdQb+nv~1+XsoSxr$l6%@-Lo>4xmmGF7ahp;U%Ief`}kiM$e|q|zAB7wvdgcW5tnaZib(+yM^$Z40d`ViBOP zGZ1$fQw^dCYK$7;;ahpQ#Gp2LF3_>Bb|BHDvn=HGWYJrAm;}OMJ3SMWM)m*;3bsfO zUvCqEYQ;hhSW@SV`1Zb7eI5Ho*rNXcA_RX=xZ`H)6iPEeBNC2dD7gT9RGF-Jq*wvC7tH(_fP}oV6&Gq^w-ZTou z^;xc+-e?5BT?q@pvNRZ`j>_ZV=OlOEr4JU6`?(N6Y-uU=pUE){tD(OHOg<#eL90M!;2^aNEC@{f}3f2Nub^E(;hG2k{SIk6QLk-CK@nL9SsbI zGV>=Q^cOb)HVtvh$9ZR#S~%o@sJ%o6i1sNrW>tWZ08H?%U&o=V%aa3HyN=kVc+aXN zwDoVGu=JiO+;f?3?M+DVU_$uziX|#`GB+`Ju55@jg83W?J=di|d>LRsA1=NmLS*H5 z1D%j^O6K+1%L_%CY>e%!%_|__(cE|QLZyV+N)tv=C|m7t=`jQRHv!_C#t+5w!qJ@F zf*!o4`+f$v$cni8$#v(oie`6p$6IZODq2^jJwxu(R5<0=GXH~>>rQm2=O3j$%a)Us z7QX~{0_&x+{p!4phJgLUz3}>Cw{|<6hebBy$PVIC%GvH`E%fW3+`t-1$ z(|kMJQur8-3|$=?MAd`sjAm$2QH!?n{#N)I>$6K38FYNXlWy6A|^*NFh# zruV#QJX0++tNDv;e3woL-7vul&vG_cU_dlu>o)w@l}vqbV?^8t06Lcyb*N)Eds>o| zcaQbAX~lkGCHkq4M90bkFQM4mk%eG=_r4I>e?=MNkC3DjJ__ALtRqPP&M=$0%3|X% zsv4TA@(fS%iet4z)XbX+GXgb5k5C+2Qj#!8Rr_pzh9D7%qWr@Pvcd>{11y6C4nW+m z#Si4Tx)J81xBIcaUV7AhT*GR_uUXij1gLANqa;F~E+A))3l>Nu@s)X7ea0nkE8lq} z0W3y-X7p8}Fp)mP3&}t!?ev#{#+^328eI(uO1|b=_s}K|Gf-V7KWulMiX2q|+ zniU3?n`8Eg3b0V*JrD0Rd}AS=0e;<0s?U|$M)2f`T(hRy#G6A)o%3GV{*h~eV$qW_ z>r50hK-g0yTnf7B3t@py>DOm-2{plSSm#KF(YyzBGo9)REhl@yYlsBm%Q6Y7Od!Qz zy+p6&Sr*PU(1@6%UvRlRv^;jSZBMi#8n7dZ=Ryd(m!~VLS?LQKYWLl3pDjvpo1?^n z{3RvGBBDhz^${V@dT`{8i2a7Do>1W(QtV50vR_S%+f%=vqpT-kN-(I~`63O9YBKTi zJk0e*+Vjnd+re73-$_!*7^%-z`E~YkW{L%e+2Vg?9bBcg%25Wy-`U>fTk#_%5xVin zDWm&>Y)9^YwN5hs7!_AF%E%)%hw>T=hw`}di8l&7l{vCd^5THg4}GZW62iWys&hl7 zN70btv~FuYa?SL_2n?GEj;t_V94O6(f)#xw#DR073)iGJDGf z(}Kx3%aJEV_SQB;6m0557P3nsY%JnF?k=W{X{;jOraD$Ot>utM=#d$U->h(lU}tv;Q^XAJX@JYo4w# za`61IT@^UI6Ojb~$P55Ox78}Ov_8@iaN2IX{-CDqaP$x4eA0FDgi~U77Zxy+TYvd@XpI~%3`5ceF6hprmqf^n}^Gp0k+;&%@kJ7k6h5N$*#V` zsNS|h;BI73gFcjvU*9G*a7Qtn?ayUG&!*y`X|t@<`<02$R8$~fStKH0+4Y0{`9W;5 z`grya4IuFbTkP3^$}c?dC#dXq;l1{6KTsC7x~feKP9k=s53?8Tw-l%bS|%Dzro|YN zcHh%|NGjqQltAIrBzTQUPk^s{^YvaXR7YPMA$R{O0%U+1Y26niqBC-;arXFVk!5s< zjLm!nf%s>O(Rf=(>~q1SZ$FcNL^^T4MsOsLrEL{PLc%%>IJD0FP~RxgKBadJov8e% znJ4T^Og6nm*#kr}8aFlt0+pR`a%(7xF*$Tr&TYoLXQPrI`dJxNJbR4o9rvmppz6Gp zZjo4tqpVd=l1;-X!9OFF(o_R>lA@)a72=ss=(RXZBl`ruE=8;Pxoxr3QU*gp^ljX> z9C>mfIUehL5rx6rwxaRqcE*^92Nmw0adJS`3fo%Dh<~VGpdv>BVA{k$)rSN0?!t8H zTsIV~MZ}|_W4iK18stRXW;BNoB3Arwr_mZpu@Y%%ZY$mx)^IYT64eCXYl=Ebv%pcT zVuu6>`=O>P{jfu}Qcn$a=0^|ri;ZIY9U|EJpjQx!50ei3<>F175f+&O5yr%Ma%wqm z0#_#5D>hmm>6{@uA9hNZRj&qiz86pnhSzwoNeWNMRBG#ixV&3t%$3^cD$qY(B}BJ| z-NdEmED~l`-{2$6s(8lf4X*zp!f)PM6s#6E<9Ot5AlxS*!7=Egp*WU~Fa6T(O~2Z2 zViR2`b^frdk7LEN_op&$Yg&BWG7Rn{AE1^nDBOfxG}ob510jezkF+vMXj0Do%2P== zyVJN1zuc%FhVbu;Mxo|>?1zyh_2@r8wPX_?+l0inL}*T_actNW3~ywN74VN(sSbtZ zcbuzu9Pn!iO?@vsWtpO!IOf|4e=ghQ*>>rrF~3HWkny}v5DMIrqQ&yyN4UKDMAt83 z*JD~u%SsQR7QzVb`Z8X<(v2k!=j22vQ^DjyB5Sq&s%?+=L)*V)s0eWxM8~`z@9)tj zCRV1%r0!9mx`bj{{Op(8Ld$*E>W`NeCMO*SdFYy!S{6*fBmRYWUBF0#%QwUf09ofv zWifj8M-3o&v-&)~=t^y;V6-6lC@>NbS2Vp9G&~67(1#N+(Lj%&$@ICQsi8@5GWFI+ z55qYOc}Z@2T~pVto_AEH?R3W-^WW4=CU~nRm$<0x1(pKGX$j->9UNP4u<-K;ks>){ zNic0fFbMd}oi2r?9GhvY-BC;yVE2KP5Uk~88jG+r%R@nVZRz(WY6uO$c=GP&a1b3F zr)D&p{s0FE3(y4SKH!Kgdi-26=m;Z&veuyIC)$IML`+CI&IES7IMDqYk7`WF^mjf^ zML-IpIsgR)MgUe(`cz8S(j9B;6F~cNS<#b($+{Kaz^~q-B;E)u^LiYAGMBBp9N*9+ zd8IiJ?-7wW=yAU(0xw+vj4i_4|M4V^B`gN~br8nH$vYe1jrv=XC-+hU2D80>79sf3 z&ItbDzp@zr5icthkv1Ym80NzLh~nJV&b#nDX80)&UZz1Kb&L-s_ECdJ=!S^xZ1-)` zI4y5E=^hpsuaA3FWO`kwPAz@io4;5rDqcecL{A*9qBI^p#XtoAI61R?5YZJdDd3wS18 z7a|;~d67B7^QGsfjBY68l>#s-qHxM8R>>DRiSy=X0MDZ$Z4OM0XE>G;Z+UUhyQ)&7 z;iS|`YQ9ZZl6#0o=vY(oUgj(1jvRlqccnT5U_rI(-4Q)>GaVA4AR{F&)D{F`eKLdX z9pxJ-X=Q=Y%r*`XUuL#0V>0VIl(i}(cbu#@&+Q!1)#9;yX(}lHF!wB?rsF74SC1p} zOV5~At6^nNGsygI)f`fkrHp3h>SdcNl;DU@yu?tjjFxh6Q?+D$%+= z6-&cWdVdSoI8THKsjyd63^TPSeh+3Eb#mU*t4FpDqdfv_kJuw8!kuwrD5gAxEyFIO z>B;dPG3+z(7ibuH4bdmUFwd}K!mW0ZSo4<{jS+VyoX0;Xh+ zmA-$s)|Xl!;D7Ob&}E7G#=XhAq?hlYYcL;92e+*)_HlUHda3t!?qQ1X)8|C~*LG~x zN45mm+C@&L0#^L6Z&$!3wMGRLmy-ZNg^2G#gOlh3fgUcyRjy}@LTEF5p3vK<@A zF(BmJkynKVBY>kMMcb=1_d=#*IdsTC zhjbahD7`C$56La9XB~+t!nGL7uhm8VDTbYse}KcL&7YfI{vc=m+mqLTi{-gB}e z=Ko{qE2H9Qnzn&J2ojvd-C=Qp1PSi0i?b~57A#nBcNX{Hy12V*umHi`oge|i$NjwD znRDjXOwUwxb#-;gRUYeRrq)!O!%GTaNFmJ8uw;Y|Fz4tcif;PO+~ngH^#&_?IOAe{ z`+8o-(CM_)NpHGXDUZz0q>U9UMSQSGvq|{#^h1nF2z$MfzjA zdL6>^u&0~npe8Z@I2|O;@o1V!;p1B+)bNOm^^nklQoN4Y@A8-Q7Z>jYiH~Ls4#2ts>JFJW-_T!(d3Hw<| zYfG4y-_t~--C|WxJl6V{#T%crBL1#c6d;C@YcLTEQ#cYwyY918c_Yc(A(_7v` z`Sc|hC9igbYNGM=*{WJ4Z8X!4Od5a)OZHOd+u|=9FRd%O$?bcu?hZ3W~nL zZBF_6%CpHqm*D+cY7NM=H{CdaDf(8G(LH`Ns$XnWx(-tLriVE!f_pXkN949aKGE{n zXj8v+&5hQN{`@XdNWCC1eLQ}CtO*7U2n8~I8hniVi|31p8_78)bx495jnrr|tc)8O zL6_wSnW;u%d%T>y*m$1TbDO2Rn1+089Y}P*P&~X*0h8M-}yLMS3(n@?>2RrV4R8|I#S-w&-GaY@Ec8Zd;lfhIYNIGqVj}mTi znmA*eMSBYeBqucMVRFn`Cn^O7xouf2UuNWoF5>qCT!=_0)UF?9Wm?DRHc1TD9RIu* zGBL>&q{+cNdx5jxa1#?x9=GMFZB6R@MJrvRKvvc!*U$ZHXtrrUd=#5RSbNXRiDciBYX-1pfXJfCIh-XX1-P6%H`OfYmOY6 zfh~4t-*}ouzreufZryQHBmEcsYq?B#qyrU0?TzSPh2w;mCrS?%ijd0>T8>XyS7~Ca zv=DKbuz0OUe0uKX3#J;UbqAb2CU1MGY2Xco~U8eweNI_9B?h@MjzR zy7B*o-fvzyJa+==|wgo+0VhrZckkX^k)+hj*a29eWoS77R|7$7~zb81G`lSxGhwOq1Dag-TZipGge_Hyu zGh!2Gv^6(^Qp`0_2eGYh;eShY^b-e4+X3(P+*h(lOvHgT{tpZK2iZEHF-dXmD+!(m z`5G*7CGy4{#sF$Iuz0fQ)xAJ#-z+|DH$zk`WfTpxxvOtuf7<}u$6Wb!u}K@szpc?_ zz^vWWG?oSgGNeBJiM}e}yTWF%hHUjloRSKRrk1EYd5geQ!4iHmvG=#XN)GA~9(7Hr zlrKS@=Nvy)h=NLdCG%wLB&@tXviM!PZyy|*nkM{C8Qq{YmecQ&=b)$mko9a?E>O?( z^`LW{N@>wt#F|Blb#S&t{u|5LkQf}i4Ko@O=~b`uJzGFnF)r_IlC$3|^uz(qbAiyB z>7RjvyKb)gNfGYsogw!hujs9Yb97wZy#mfArU7}HGg3LsZ%CHDU9mTM3EhB<)w?xg zifH+8y2p7(tL!_0+eSfmf(Bb!GN1dY)|MX9>w|<_kIn}DC_t`wyT_e)YzpUjd8PQ@ z-!1<4)wMfKw`1XpNxBjGB`5LGJKT2NSN1ZkB1Bc@q~}aJlv&--ADNd?LQx=W86>;m zJfEJ{0fev$4OC7hao}6ZC&p4g8ckx$(_oI7b4jCDfEum}mzk~f>6>xPq&0B;ni?Bu zR3l+b;w+!$=kasW*XpN~p8?yHQM}Z^a{qHBnnM1sW)zT3+0l)3hUcczbKlZfAjL1u zKO;(LK%*7Bmg6w(DHb3gAY!~ykNN@(c{HmQF_r~JQs6{4xcXgKh`>N!YAr;C87Bb0 znQLKoi+7@kf-A+ZINw4RvJ>{&*}I?LvmZi|A>UO9jc?luD^CF9=pObz#vEJ;WZFG< zj{mU5nhUMdU5P|MbZh8%p_fcqWDyZk2&PuPf+KiM&D=ip9PI}LU<|Iqjnk4x z<=7Ia;A-;{?w^gRX+Gm$&YCKY#64Z7sn(;GtiS(isiDctrjM^^1G7?--}VF#wy+U& z3UP!~A0Tn~G6JRJ?(cuFq$K8B{e-d-fp zAX7#|U|nmUWQ5KVdh_P3sp*xkbwa9cBq$Pq^Jfc);l(TPk=)+E%C%R|WAkgH&dRdy zI%I>isZKPQ#dtgJTmb>_5bT^5wdg-)X3+dFndd3Yfkbi(cb1Dv^NrKbyBWpQYs}gs zSu?&eL}ktqACgNw!f6_t7JIU>-tKdhKt@MxDmE)%%ppGWy{>xyj&rr;+64<6?UZHL zPFzP^f%(p`Mdn9|&AR{X{{2RG1iFW#D}|hwA`w)H4JKRlO^yJ%j|&;l2a0uFhg__o zD~w*&gyNHwl72vAauy&_BODI#V2SQr#Cq8hn}}UCThpSA%~t-pWmgY28+pII`;<&F z%Kpqy@sp(z#O2mV;})SHl4wRbsZ;5ej&h^-c>&~3ZJnxfMe03*P0u}RMnMW=Uo0yc zl`ey3GmhE=_2|$KLp(6ULCTf37@&CWf-dI=V%PAB)-)YDBR*qLdQ3=19|plPDA4GI zGO6rAbo(65XY@xGdN>m7K5XxJ{r`3hIll>vIuGkbP0dR~0^BII*3W-8Rnl|^KB0@F zkIy6+vw0e%nUnDuOux&h?6dHlq>lQ*uY83X5K^-k=8O%Kyg~$_zlEN?6Zhx_66Ktt zhr~@eZT_a8eLU=X3I+ju>&f4rkq0LJo8QC&rE(iDYSC)&%-v?5XCX_K#^$?evd`cFODcU}Fbq$H2?Gfo`bE#D= zen?~@O+5n_@Y55Bd^NrD$8fG2v{JO-L^Hk6VGzEVPNGj9%MfUYgc!QWQ$ZIFV-~(B zjU|&##xcixM-=7#@leQhsKf}pv9}v@I_IcIHO;T#n4c{yyfm&Pt5K4@Voj0Pfyk8) z7}J_sPcZ--lVmq<2Lhjxsi66mRbQrMgD1r*D41j0vle!DKMc6sZ3~#$DiflAy-2c} z>?3ww%+};v_1>vE|0?k}(x3%)Yv&Q}Ao59k)yZ;ZArkcORXth25&`JATBMjP0n|(N z%IR|@k00bj3)^rl-k~wu#Qoid@%r}EM)P5eRMp5N+-1%ARpLOy$!T%J6 z8v7&F{5;XQ`%qE;C!{Z`UJZB-V(Hi)6D@P+;rt}Z(`2!G2R*^@5Y)u6sz3RimWHP@pOH{^$! zL%*7C)vc`+H!_B?Ec#9b8>3i_MTSsR7J_+jiLyH#Hu<&|FZjK=sdgLm=*OUHcIFWz6v9Q}-CN_#KNEMXmi-sHOj8h_h&&PIFN z;KsLS)F_Bzt8%1_AgXA2A=^3uEZt7%QImE;TyzI`3(CKY!;z8$Gm~ZxFh3*kQBCZ} z1%ouZ9t4w^7}Ap-3W=Z%)He7iBc^4P7sUKNT%ov!Y=pKYm~;)2RWA zHA$mt1_aTc1cvbaQL6bH73G|CbJ8VsG^*?kckQ(;QeOW`h}Z$wlxord($seZu zj0_2#^U>2g{~V`zc!4jw8L$-G7G{pM81WlLffy1w>GN^4#)*}pz%X&Fk~!|E2&v4e zed5Y5H7!q_Dg$-D4uu~mJE*+R+%X-?2+UNdnfS+sIAHN_u7E1|Aw?EJ($x0FBDbA2 z+nvRS%*WS6bKNmx;}=3VZVQ z?~bg1rt8m9Vh;FR%hIO9OTHb&?tSYbE9#USQCe$KwW2|(;z?JlINP-hEoB;@?e#1~ zX|op6Nz(b8^-j04CVM$;oLM#6aYU*IQBeunh)5|e1br6{F5xG{N;=s)Y#Wg5y7)HUdkOWTd1f z2fQ7#E5t|WBFRsR1gh1E?UU}%Af>}EDnPzj?vLcqc3B*u8n`A1NIIaPR1zw;WBDpk4nxR{hy!b*iQ-e z!w0iW;VmM*3rN^}GaFqhWBNgJ6~KVV>Iv~01>0^OFIlbE+_bwhG_27fUk|x-E+%21 z{2oEM=O)^m)1u{FZ@(QW{H6=~mTgn#<96E=lXRej;%+u3T-@vymu2Mo8HI?tB7Q^W8PepCpx%4UICx#iaC>cuBH3L#s~Z zHh{Fyjp~MKpMQ_j-7nW@%OJlX$0a~?6>kNx##ISUbVF| z;W4k6u0Z1SrEmYXI!_N1<2t9LJ7x8Ut`x{GXQ&gsxBcQZr6qv}aho=!z9^}=30XMS z0wCHP&F!=7dF%jlY?!PR;MCH0fOZWQlA)1b&lDoWqI1;xDj^M(Pho!f@}mte(`7&9 zh&aYpv(zq!m+unf@9F8|bLxko(r^_!AQPr}T~&rw$JSrKU51FVGLgR1-x#!0Z#iwm zFQ`L6|AnBo-RXNcQisd=0(Z^w+@N^aPX8-CY}KivM_#Y_Ahs;LC^6~ol{|Cc7^{yG zYR>(U`Cge*p>rjA;!CYM74%EB!4bShrTHF#DgL^@IJN1chuJ>9xz{t7j`{L>#FKsM zUdtAc)osZec2QpX!R$vJmV!ja9GS)RnBr_Qgsb`V^m`$BhzdwsM5vz8cxfdV*S{Ol zY28ow-v@H*?Y*=ee5kBX59y#;^&`up1`m?+eZ?J(Q0s&i!MJ*vdeLjMW_!*UUMMJ` zu>oV(a^bg4%vZHo)7bXr0fgH;tK|NA0;9}Bbfdaal;08r>7aFF*ltYxWEUIhYjgNs zsQyLAW9*6p6<@8;-T_lZc#(Rn$`UGh`~;46=r#x{O=e``+5po%AcQU;zaw0>+ycf*S6knlOZ*(Y|} zO?}qD;nLNnM;5z2H-Uy0kB$9Du)k7y80FXCVp=VA#>;>4i0tJOfNnaO57@fdyx$}W zU0oq@$RMKQwJ$UYe@AqqMW1zYTuI0xN~zfGIL3d9N=`a0-WPq-9!-g=F+3Y^>Ho;L z?#aSG_#HJL)d;DL_1*{{rfF()rE}$J58$toT>*Y7;}moKxs-MjCtE=fyiXzVjta^W zZUV01paNW>>Yt^q6?@uUwfvqcY@a~3k_Ojrki+Q{YI~pgamThKDI={|#_d_%X+q6r zv#1x5f|}Tk>CvKEf{S+jFRAo(gH;iA@Z9AK^AkP3e2o{T8m>nkQ#u0zDg6E%5sY}e z6|;X!h>#{K*AuN#mJuNSEOLcCL-$N?=Q)f$GKElczIEaI z<8+(>7l?ebLaLxTfkQSml!RL^6m;IQM^71fc%Iny>Eb`W1l}HXPxBq^)Tx*)=Wd($ z;v${Bv<c*z(tFAM|Xr{bKC=>}j6 zrskZEU+QsrE1GiGv$*Zw!Y#@c+$SU>iw1iYK1eB}gpG*Z(caaKPf#gcqH@6tIYrnG z%xhMUjEU>E7kBoq-)-FKu%79gfQ`JOSb>8B)aZ$^&BI2)?p~}1L>AfvW9(cCPBCTi z|06nWzE1F-6WM2K-qbv3EXq zl1l?%thx4mBd}rW8_wh6yKe`v;eBc)VW#08(c4rZS~s z=j4Lb>MSi3{hnIKO=S~y`oa%xr!R8)(GfX@)^Sj%OEO-$MR$}cqL_=ohAjx6bLX!4 zePTvGx9jV_cX&_OH)F?p#q=fupD|4zdrC=BV4`+{3EK&MOc8(R%)_u*rwO8BY>J)! z8gL)TYZVDpYnII#pJppK&WU0LVv5=LswiVPg z%hV)8sDmXj#ZaZh19ANW(7F?s8?z&_&6fEw8!<*nsAdZSIdKTL)w(Arx+i?8~XVW?K3;H zM;xuIe4;x@g}<<9#6<1poaOUCoN>to(>s4@llM{Khop1iwP4aQNH5)3ZKh^}pMJ6! zx@s2M-;Ba22Op$lovPY84s>pf%CkxzjU~g6BOn(mAossvx!tvPdmbpq!0c(u`(Y4$ zV@edkuc4`tzM;Bpyr`rvjH!Rf<0Z0F{|zDZI5}Wwx@6b`HxJ)TjCw54m}*uBYmimF z(3QnzZnl;cf%oaxr8P!4+;q@J+)P~0>?T?Hz-YvXr2zhKu6M@0qEkm#R|o723=b%x zT?K^r+OQAa3~7}O<_+!@MO8h%SQrm0bF&mgIFG zMALIj9krKkJ=RRJ_^J1vSY@a;odfzOra~_tpBIW>#HcC+q6@G2@e=<&0jez*U_Bif z)vqFIPNX6U(&Q}`K`oA@P1!Nz#~j-^z%+UoyS|!xl^XEKxj55p>$sN*%_j91lqyVv zH}1~KAx}~`^wi93Tk*#i%)pWN(E-2}Tg;X=DHM^Ue zHD0w$$MkfyJ+;K>_i%cH?9mNbK9550f8mjvN={ zK@^^*^r_CB{o4H{QWd@OtW~8lS_xBIT*Plb9K)i+Zq!xFn_l@gTR8D&1<$hhw|7N_ z)bY2og<*aneF(>wGHs%f6spRtv&`<}ZSPS_Oqu^ubk)?i z-aC;7e|3T2*DN!N+v|Q&z8iA>sXmU0XD4|!Z!vBjsCVb0;Pp|6FF!Ww-D7x+Lq*K* zEn*GR3n3p{Y}hMHUVOime6cR3hHA!alDk8y;_zwAfOZl;Pv1Qvh z7 zwq*~2*;PJf=_9IvA-Wc`eu(g2G4nG$Fw06x4vkUq`k|EnlY;wR(m)0le+ZFN00$ws4iAsZ8m3z#5F>+ z*@N_!_nCt+q|JW1Nome?kbK(hqXhpuiyjIkd3LL|?50c|v$_t}(@oZfkslbuIpA}l z%D%#tr*y*Q3A_$3+>?sVaEE#p0yx(|fm-T4_{U`AArSR_4sn?YDI>KMldJ+4Z$Z6NVP7U8;B zUoHQv%DTGFz9(O#&KCB`U=OR6^~tP4%=109^5u%}M@WQA3Pvm88n+4XK(i8zlFI(@Co>^s?AE{gI{-ogE zj^3YT-Lnk)SR z>#kFXSb;Qb=_}4V6YPiGPQM!;f1-fDY$aAeo!ep%7y?#DYUo3cznm=1BZm~>8_TV@ zQ0|otC$$33{AU^8gRYIP}8Z#cg&`&h%hiL@rM zIJxSaC9{$ z5uA2{%=2Le?0}kaBsA^rXIEGsjaRxmteQp&&$-qKOlYCyvcQSp-ogVVTG zcv;AA?KR9`w-P|%c?3>1)bnAou(wa!2^r!&AJFLiSrdr&%fHP0j{EmX4eER-RF#qz2g9+zaiQ6ZH#Q0fl%3@rjohO_(?ABNMtE)C2ahx%Rz2|Hc<`~pLSFKcTodshOzP4*flZ!`>X zN(Ch(_ws#cwr-w)P(g@#17P#FT%ZC@0RFWv+_fqf6ufK4Qk{y|+zm!Aumuk2t)3XMppr71Oxi@Kj({jqEPiDX*u0ys{ zPHUoZl6)Yk88~gB_msywc@PH{I8w@?V-Nh}{URD>R8?#ZJX6N4sR9EXN@nbp<(e1h z>E`&Lf6NRl{x=r=`{*J?EuIO|rEe+Y$YXs&eH<)-0vxp`l-H~0vAh6o2cSAAmV>pZ zN~|Jks(=S-+1qHXNNBzuM_?aRhjrex*#OykImG zWVZEZ3E%Z*R`wICvO>*<4V8^1TQ4Tlf@Oy3n+{C4baCQOHh#;#mR3Zz5MZOUPDkxJ zsQO6f-y~sw%n-E@Z83~+Ef)0dam|oplK2h${tb{lGiH#zQzm+k{rZZ92yM0xZUk?( zuF9v1ZtOg0Xf}cukikJrj6xhW13^n08yF}tO*}z3}l<J`-Ic_Mmma2B))gfn{=l~v^2?$)(vNUXpT3cJ*gAdH%^ zztX*m8MJ-hk9n~a-sn6L!wEHL8*=eP{g0=CZXyd=C|mqdgJxWmc;!9XFIHX;0AC@L9o@59)@OZ?9haT=0UM4 zbDy9zZ_mKR!#XkqC+TCv=A1Kv{JLLb#4NvUKBpyAKR+*aiT;cSJWYj6UtS}p7#t<0cK-k?~I5*-fIKv8uNI%ITX zW58Jmf>K@aO!y{eBeb(9d;n9Ex!Ts+TWi;p5EbWyi~%52+Jut7zl5?9Mh3^ zrhu0k4ugv~1fJY=x;O8Tj57*DI4ieG>rZRM?YN*U-cjHx)92CnC6ee&WA;_bYpNj^ zA4l9U&SN2sEk%@!H&{%OIXP%5k~zr`O9GY?9ulY3o_87LqW}g!GYkb{ zp~0n#F$ed=ghWYz?uW<*K(u@Wlg3)Db3~bapjqmIcF1{eY|P%4b$Fc}7FJ8*P{tO5bJ5?SEY7d<%LL;OrRUN!v~sNHN28Ez%sA$j=~VrB3Kb-P#np*GqqW6}{Jc#OgA< zLagx5i1BTq_T-2U&60Ag3UO#b_q+|EjcwKAHuYtT<~o|udgH`y zV!ijDtHSCN3L=$<6n|f@2yy=b5FDJE>?)f91*eAwSCs36&4Yw1&o%A< z^X=DcB%5dKspVIJybx61_<6}`Mc|H&y&?M(G;s2119X`Fi$e;MfGRR$4U!QwSbONg z$~5_-cp2v^i58E-GAhHWe7E_3T=ApM?qEx*W^~U5C&4)M^9>i~U35!GIlqcoIYiSf ze1@8A2E}qx9jUsZ;vFr>!&JU#l*&SyxH6SXEG-ERn2E+q>TixtpQ0TSU_P!#?LDBM zaYzB^5Kjh9s~y&hVIyyVqYjRw{5l9d>Q5|>(ieux>;jl9l9*W{03Uif1-ky16@Q!_ zl(~H?Yao?!xzSDVmZ%3;o67-Fvoo~@UW_xhMt1N3?8OvEY?$3`z5?}&t^Wu__ALrm zFq#3sex;f&nb7q!^l8guXUG-4kCD=j%BlLVp$wcES%nM;`fa;?4`UXa3$P*c{057_ za7Q88rwcxf(Ec{>dBAz@#+vb(THhC2AWl9?5>?ucS(bxBs36j?uvvp)!`GPf9rt&kDu--JU=O4M?Ra0`Xef9?m}saX<1h`u^bSlw45BzTgcg?#ma zlzjr_`o38}G|U$tV+Z;A{_d=yo(#KuA=twlB^d`Fe#7`hJRTIzFVD7Wf%re6-X=!F z<^X8>cdM3R`)PTQx&WFUI9V{|>aUH=f+BKF)o8oCRMkPF&bQ^&6;VgY_;p!^@v+tf zmKxI_&CZdpA*}nAOW`oeAp}u(PG!B1an3ZNRd=zMk(-V`!7sXrXOu@s_R=4XLDKe7 z4g(y3LK&QewfEls(|Rj6A{0me{Z`>f4zn19s*l3^i?$%(P4$|nBq*;}6Gs({T_bBH znad;6WGIDg4s8SKel%+@@uq{N%8jlJ0ezc{SS-RGkf&jjK$0HJIns=6_B#|X(2fpL%GSD zWw$TtYyo6MV*xlHh;$D2^OS_nyw@O9)F&LD^R)o>20^KUkucTY?jhA5Zb$^9>2you zVLq9Yb)R?v=Wp*1$$zS@Dr;=d6?XX}Y zMuFA?4(QzFMlF%#z|;Itez>bHpcxjN5(A{d3`JZ55rzsVmd5SPIsk>iz<4}dN^|(R z6~7Iuiw)3^vJo8$BD5SVs1eMd8b7lq%?1iHyZ*g82C`_iV{PJs8m&;Wzf70G(>D{oFt~yHLEpCC*Y&YqjRdXn zRRMAp^BdIXA1Or6zt}-Al>gg6=@0frg-qzr-=?`c{6E+f(JD|UHo4x;TZ9%mmm6Mm z?Vq6R(7GO7^nRYFsKJ76j!E+sP{zyE5>IGu83Q7VZ22pi`-T@qZQNia$VosJBu@th zN>Bbwp-yqC?k~<}=MC3Tx&- z8lIY{<+kLX)hcTVlc1?4LNsxxG+NLj2Ovuv8Icbl??c*G6b%x;KO-6zrl=UJh>;?L z1;p>nX{5peaHVuXOCm!Q|IM|9vE&P}!e|ccnHSn?^1Y;$2Ri<5b7d*(d=X?c17LLP zQR8Wa!P(Z~+1_}yG6xU#WB}9AwL)}<#Q$-P6R_(HQ9lR`2pZF42fWgTZT-h$jEXp^ zn0C5ctEK3{-@>iuK9}MLZB!L~t3wDPU_Z#xwANZXY`&e9FpAb>$h1aHLm3ZHcR;yC zMiNE(8%z>+YP*=*!kwZam3-Zk&ujC>-1kmnE&;FTwh-(x#6vabdAvS^p&&8;R-Vb; zhvB$hdq@8vmqq>Sk`_YI3fa3~L+TZcFX8#r zm)CRXdCY1#w9R_WA8|Sl!rHLI!P$@~A4Y423Ay`GM)h?x!v6Eh*2~>u*(q88jVlW{ zxS)Qy!RF}Zx@-hdoJ0!Ue5(~OS)NFgC-ZMP8nyX~|pMMJ>* zgoNiAjyLA+pPts%g|tWG3a_d%dJjh<_09ILn)n_@nuwx|Pfo^B?7(Nt-a7(o@p8Ma zZOnnD5h)ZmmYBV(3-{!aea0>Ok1P)s>%T$&k)$k%TV@cd{W6#M=(eRRMBIXKER>>P zS)Z=>Ion&gZ7bLEAjC~XclNC|o-4O1i(%VHMbQQ@YA|+}xl?8*hnw8_2KuG6JLq&V zC=tk+7?GEKU&lB>3w{fIeSGlaCU3a61@$$kO60zcYMN;iNcw6IXZ?Ugs#}i4s zp}{Vjyn0ZJM2E>J>rw=6MghOltoQ<)c!Rc?lzh%6QgFOzK(OaK+V~}-_)VnV*D;SF z3l-S72f+KP)g%7S3>{yBmM zMxU!z6seFG=76Oz2*6xBCZVM${{YDWIY}|EeIYpgBZ|bZAZRKt+~rRE)+E6F_YpgM zl$NW#pxp1X+VgfBeKYJ?8}Hbir=~N0qq#(q=Kf&Kw*7g_Lu{|_jn$vH>{3x3vCwS2 z!CV#Cw(X!}e#>HOtslHiQ~iK}r*5KuoQ13=ZFUG$rZM1Yq#o@|#s&jh4e~jEVwq|C?-R}!oXzPfRp96H{vn$pMiw1ywmjfcEE}FJ8G}LL7oe`ACksUY=s-FO7h6eH6mC?iki3XM-(uCwVFA zaxO*>jJ%;S#X6X{g}lYID0~hwplVEZ=|g_DT^XuI^%^8wPBcuk7JdpZH=*|TW;q(` zM!vqLup|LcI<&&+8^ySYI{(Ddkoo${!50llkQC6IeEj&m9@ngDv&06 z@ZM2;5Uf@5#XjUF z&^84}^6~SB(9Y}G(Wp?@^JGvUCRrnTRex(f4N6PD}{tG}!(zb?NYxc>cjpe{|cjU{}q+RgXprc5uIE8JCS z1WLP>sn^5rKl>4b23N2zkILE|ULo#UXI1n6$)mMCXYp*jY!MzlnQ8E!L95W*A(W&O z-)CAk1SZ87Z&QOO-h^2F8_HB4RuhVi#$96j08sSQ@MPo-qMwOBQ@ z;7N^0QFHon%BX{;r|FB-j=+e92DA#uU#X@aS& zSsnn2&cDZ;3m$IJy;(*_Iu^uk-a557dKjTK5?N8$h#Y6}Kf%_r};CjwbMtt69v<%?+{lQxOg&8jN>rI(ht zImn>3T$1V16cqb6lQOTFt6cl7nvyfw;g_hCR&RZxalKJ^tG36Z#w&H_%db;bhFg&b zy5RuOx>pR(4j%KQinNw5%j@F~W4N(39OdlV>*xQbrg(#UNn#=K{ZXJ-*~A3(ad2yBtm-_#Qkfr)&L3-uu=(ou}G0UcB11uBz$X*(!~>)ku!d{(Q1EH-30$zf(VoMK9I`m zV$^}X8FY_Hj)yep)@~Tu%Hb&kdYcE zrI^By+pL%fq-FL-^?WL*OMey83KrTU=x(MN8TNApgbsWDV8A(Yeey*TI6Wm5T17z+ zI`Q;Ua*v5|ytRIVM|Jo7{R~-8mlEI?q^sJLd~%O@X!x4e_3T0iL*K?=;C!Ctr!8}o zF9L=-nq$2qo*x-CZ(cl;XF~ip=ObZpwOM;*6Bc`dQuLjv3=c{tS&U}ddg{~{zi$N` z7`bo2(orj~Q%3u4Tvbm4r|?q};a2nl(wOpR8Pr`d=1>8gLoeBvn~{m{_hb<`;E66G42i zOkrQKugG`CA__)$HFgC*S(j^>r1CHxRMxxAdUV36%YRDZP2sfdwOYc)XD}asL>^62qqvR^kk26}YxJj6P zpbKSEdcDTasS;dk-M1!&yX0Em1r@_O9)GDfcs|kmsB$d1=ls0b8LgWNS~^?xDmr0r zGL{71YbX-t4~h$GSYN^8!+^?C=?u_?AV8Au!qI-Ik~Hed|HOt4{P^`&&MwK`vCDM_ zbsfhIVg5bUb@bDpACVvW+n&D{)9BQFVueLGMh2xb>W2#dxd9_6gW^DWV17RBC1-vh z`fplWqqG`%Se+eD){+4SJb1X+SK^D$dJCv4ILcfa_#VVeF14A$)i%;5c;L^AWxJUsU-DFx>kR!DVfz7E|LB5r7bz|#)OL)1$)6( ziRv^eVoGpV)*9XD^XJbwJmzr~Gg@YXI(Q!12!pz8^vZ=P7V7S~r^M3}uG7M)nCEQF z=)P_q>7)eN=1o#MVxsCwPZ=7cvy5`goX6P&q;N_l8q9bKrMrLI~EUm&r~5qAPKv`C#W{l?}@1Q^)BJhlX9gi`zt6sEM= zl%$9Y3X9`7YSzI*tJIeTuH_&mxy{7jBQooGG^n9?P3J@3WDEmb6hA$?n7`V*VfmM2 zHzjKR;c~ZalDW)~FvPQmebj>;C36Tl?pSi!VTK`M92_((9=I5?$DGObs=nuQKBh>f z#igk)reEreKx!7ZOKeF=9o$_bi6z3AjsWpOX-(5f2)rcTHWw2r3bZt&i#VPE@xL7= z(2X9Thcb{d?(7d!d`Pfjq#5Rn99R+qP=smz(Yp&j2TH1cF<=db${m&q_~1(BQ?reK)1# z()8It=*O?LE1xnw&6Y*Wv5I+P;s(?2Xb9K+lKi1sI2$X z&7AFWJm4;vHPRBkFQ{oYME>YS|G{qdOKwhwUGV1>_HjJ|v*p07SO8rkTkocz(PQ&r z;q>}D7+&cmRk(R;d43ZifZ4Pf>S8!0UAbyG|1un5-aBbLt^a1ue7fBf(yD|;pj1qO z=Yw$)&qt zrIGG#Bo`!iNu{MrKw{}$I;DF_DQOUvMgc*Q?(XK<@9+8R{&!#Zo-=38nVB>14~d#R zYt$Mi7PZRachx4{}&?r?fXc z*B4U;fj8gR#NYy&2KIxj4Q!jEeAG5CixAo1Mq`JzS3iacdmMFVfc=#QWb=J1z4%D9 zpHka$C|C!WMV)F6U+v8?zK8xtEk+d53}F`!8^8mlo|9}B{54bu)4_{3v166%1@`J>-~g3fyuLTq zZKngVXTxT{AFv~SN)@9zH&;Z&nK1PKB#6K_`Z+Q}VCvIx3`W@&MN0h)%zu({)bQ12 zTm4gE3ht4CJ~d7IyouizRz%WJWtu-bN2Krf^5Z26Z~Bt{z?xCn?*3Vk_#yY`_~ zk|3J76$A8*B3_Ac$W@Vi3+FD`BjkWwX>OPsTcO}R`tP^_`}g3JR%|t+H<7Qb@#*%8 zj_Y|0_NzrO!CWjvMOMx|)anacEz%&Ddb*3X9h3>N559fuaH+p{aKGx;d55!!7y4C( zvnW0i{7O=#R~pR_*+>$n15bTLx)7Su+~?fIY}a!tt`JuJqq8f!NL5Hz^_8+<8EKbZ zox)CNu-yx8>?7GUY*oUpC`4^4hjMbBQX!YFFhSu-w~LP4*6p`nFfF#T+E~y~3#fXTf4IyQ|p65kyvR3;1 z;@Zw9?^pZ>Ndi05nHe0ZQ3o^4;3f6q7 zE*j$u@S{V008*wVSWIpip7rWD!zv;yQ~XVxnwe?~7$hGn)`{yY&Wq{EqSA||=J6@Z z72&6H_VHj6mUXu{sn;_3t^vd;STfD2K}d}yFMEMX})Euz~9;6 z-1N10KR}S4sWS;eyfIXPrt47O$K`9s9ZJ0MT+GiF71DTwpE#P%Rr9}^J(CIAP)?** zT>M)0TIm&&f}13+7+%OihzwamO=cEQCK%KHOF=hR=Cd~m?yckr=mV4aLU(dk9a{;7 zRgp=>-!$uX66L1|Rdi)dkJGjSmb|J{nY3L!yu~$$tI*=?nYVE3d4hYX+3MZTpO3&} zREq6`VRqlyJe>Ur)|%xv-6~eI4DX{{H8xeRzgxH?@)Mb}`jpv;<#^oPYPuX=VhG8B zPCgO>tYo*$11=dgI-W`kNRDy-s%Sl)-0!5(KKAw#68H0kv8%mP(*)^}%>Iip6P0Jq zRL5M_v-rXiP6gh+=ni~Eo@XtIplY%=_qDJme*4kJ4d+5wabksWn5~JlSWfYK z4hLbNVCiN52%F;(!G?egD950h0$I~o*2xJEY009{aO!_P9?Bq0p&WQ2{FTw_lthWI zXNwL#^J+`~-fR6>kJ`z!Vn|jcf<5C6`CkJID*7C4FS(wLgn?gG|w&QzdJw$jIf1o3GcN6&>QMv!UfN9~WukS!1sSyqM25L>EHQDOW{J z!g=2FeGa#d^fsdHaewzPHd&u-(3K6YGU`Xi#(+e=JK6|4r%k6N%tllFhRIl=-VnM& z6{OT`mk>XF%mL4D&^8Ea69G&T%o{B6gPU(%Qo^F$_=;DVCXuHVJdrcW4NLp%KYcxZ zFsc+!f(xB(-p_udb)~l&=TP+4y^>;Nqt{aCwna<7>OQ_oe;g+vgHe%=Bf7A^*IoF- zTjbJsoZNAwD(eEEW48Zuu83%t! zrU${SZ{MInf(g}}MoAwA%L>SfBkiC3@cg)-nod0LVlp3t_rPgmax;JY zM*dp2ii?%jY4Ut?r9QM?&-tvTUURW<80%dDCBT{Kqb%H`tJ0gw5`z5+*D$db8VxInV zc86fCh*_kuHKwx=$N|^}LqddM2chB#-2l4P7s+W8u;Tcx59a~-`^H^=puFr^y=vP4poFzHc|)Cv@e-6jn$RnAz?(^r!3cJ^h+Ok?=87jh~QSO9+2&s^T zH(6Vu_&yo$ljb12$VsIC#-|yVDyAdK?(|=DwSyfks@gZb;=pqpBn(5r@}K|N7-uZI zR_^`%`ta+25BF!uLn4TKh#@|+2;BN(?>He6>xY_HCiq+YkA#2uki5#dtg+;oY%m?h zHWeB;cU5u%isrXJO-3UAZ9g(@7N5jaU=I=7`xvadD2jpbzC@sU&FFwGn!Xb|`)y1- zfCPoKQ(?n(4J&hL;gGWxd-eY5Q0O&N=w9va^LDOemG_M!t? z$dpUX8Odlv{hbBI%)pW^2Wp_EqZ+DI4i>0>> z;BJ`1c$_E>lV?5&Rv^kF>W8TemKlOmh>&F|U~u_!ChDyb2@Q~`@|7xV<8@c=R~1NlrPm`;%%?OP93_O4&T&4z2tiauT30`js`NWe=|yUE zfyBhfqrR5sYMVBZdd(XB z?wY*S_YnXFxD@>mdi(%B@)JH_pJZE%5Vm34>3@GcRLhkLHsHeJ7XeO3EPh_7VJ*=j zYbnd-)&m-jJ6fqhCf&K0j!rs$khI>3aLg2PZVdCfoGkt(kzn88 z>C4n6tDLm0ijPF$$6NP4v20`RkdTLH@KkIlzUNae$z}B|0Hl+AS1ZMa&gBp%$Qz^#fPe~D+|dbBQj+W%EiMcj9=aYNgLe!35xD~2Q#iJIQEFy6P0_=+QlY<# z(5?^g)Sw*WwB%z2R)~J_*2BWX(O%tTTlKYxKDteaeoywn_+@gxV|oLQT-7889pJu! zUf3h5gzGui1jgttilWOooBq`9(fMfTb_-l@D* zJWakKljS#)#PpS3{!-h(0lLiWKfQUL+4jUsQxxy|UPCx=g`nUcydZ=S5?t(x=4*>1 zY=IbM1rmQwZKC&kdV>JZqWA$%(Oe;5D-*{Ze~GMvoW}9QRnlMy7Q)TDk<3D}ci8*V zxeY05FQfDD&|exj@EOMB?RX4qVBkkj_J=HY(!(dDLH`1-a7GftU>jSklTedsXQdNn zLbZ3Vo3nqPmQoo7fj!>uY~yG|sqcrEr0t0{Eu7fPfV9b)a%G>v9nWz%Nwz~_7{t8$ z$1+5mKWe3qWiM;Z9V=;A;}v+YvHuA9E{y|SN+g6O5={q-cpxb(!sLxpuKPBu#kk(0 z!k6D1o|V6S0k#3RZQsf*AQop(0y!gq5GFJ&#|@z4}& zPg4PL#5jue1LM8F}Eg=l?GTCs?!`$PBbh(NNkZ73JWWMSHI4LoKq9`+=YO*_hAOxR2RlC z{Yn_hRbO}Zc4)H;9gzT4jg~lLu!~i9Z^_6uxbE?n4o--(3w@q*Qn5x7kNh$%l&4=7 z8K;AzlrJ{9i&%3|Pn0jK=fp)clH9!IFjX>I!j$k8Rsng_AyGo%Nt;Vj&si#)rj;usd`nNoI-%!d*Wf>A;HFu5QP~AsG~nr%v_}>&3>Y)hH*_ zWI&{4+)&XQ8U-)IiDvhf@*8AS{Qv_eNrMV=A^t5cRDUnR4Lg`Dpri`G6d?ygX{VkS>edsp?X>C`8+y2kR7Q_SKYS)@!i&S z;l}V*=F%KZ0}>m;^H{pygDrJ<5FcYrP*cvLtH0Rb8W``z)i#!$ZK>kR;KM$K>R;+{ z%(XbrsqK}DS||L*@#W~CI?Tj{3l1OHWWtwpavnDEex|ago^nw(>bHN=?=or+*eyyb zwja9sYpGOx)%IgA>){g1-`lOO#fv|RdTV)7On;nyYKB`8)R1Y6o$*`cmYy#5q6e!C z84bSzr?UY4rA%T5!Uf2qgwbF|2uCTUulp-P!QUR$CGZb`u_lYcoZxP5rqE$GOX@S-ajC_8V7A zI*7St8oJ!XdbfP%dKdyLtHEZe&?|(kg@v1wBQL@{O^*ZU-lt@lxyPMjFC(;ptiSK` za}#WdUs%3`&I9_2+-U&TK{jI2A(hSOX8EsTIOws$!I(HEy=?ZMizI-%mbg5@3*LMy zpNHc;KX@Xi#pZ0>EH4eDh_n+1vG=TWX zyA8)^*HHVFd(w{@ppVr}nRc^39(M#j@*IK^JJNpiZbv5bbK8XrPp|F;WXPv#uOGD1 zsm0Hcl^zhR#5%N|H<2TAC*H(m2L^O~*DCz%{!BMe+)F7~Uif`Z;u zen;zgMsOsqTlKdHfqgP8%&(twZM{=5UQPpKLFG3jDT#sD7dl(Hh}*!;Qts7OwCVP% zie0FwoWtEQp+*OjO`}_GH&Umf12FX^Ox$Wm1`ZQ<}k(#&)h;YKmS{*b_1#uNXq<9G#xI$*~nPr}IPu?V&CIZy% z$kDrS17AoRx<=muXRL<8iFDgzOaug%A{{$DaA~Vv2kKqCW5#XzD$|;!13_#O0Q3tL z5YblZ%#GW7`RcJ&pzfArc@t-SdLI!)LaE+~f7eoNJO)7ISZ{v+S|T_plx)^4ZFMd z7vIc!;C3;}aP9n+p+p1X1I)L;OE>{JUO1ffpo!)DQF(abYd51OOL#kPUJzJv1U3K$ zk?tX?;y6VRR(#s0OB)0L5aCakF;<`(1SfU0+Qbux{O=sSCkPujD~(hT6hPFSQ8P~W z^NB52h@$Mno<;n~%7nP@Me~lG2|kkfyfN`&w#eZK6%~rWOYtEfI{4?f$YML!Yy#xW zEi)lN17c(uvYv-hWSUt2qWYt${^XJgS+-14w(@)N^I~9I_zz^Lqqp2?+rNQ?Wn~dDRex zAwn$l#v@9I--34fO8}*-M7dsuxiJ%|?dM6YKOCBBAx^ zbhV#{+Lqd)uEYXbS@8ZVtn5IImN{~q2aS_PZEnUNo{QI<=l5P@0{vVjHb*i7Y4!Z;={pQl zH<})^K;-*^yVpale$UC+He@f?>Di!~n;VP{!FZ|}8nwh7vxG$mH#XCkn!Cq=*uX3;2k3P1anJmD+ z+I`+2UIOIwuxB5Dr2U^3y7#LDQewQ9882M*Qr3fj+y+S}O!X|UKC-4_l462GNt6ms zT%&wI3`|>$^Y`7C$NQ?ydd|=pa^o91c!H>6KaW#4=xfz$N~nP*D0XuF5J4rzjN2db zX?#3R$j^7vk|SjM6PQ4>coSX2531%C?J+4!aCTB*(l_#IMzrFS0mpH`Z8d1dsU(tzL!R;QXi$KQp^nTHH( z{x|W-FF9dLi?&GG+ia(VrGsJRWCdt||yN&hN z>-Uow24T!LA?t6^0I=d?a6K{db#36aQxaHp{C0HA>!Ld7Ss<}YKI%ZT? zrjX8hnpo+thw4nB^&PW=Tc;?In@MKYqvVFDHwCpC55G{{*#Xs)!r{=p0bAGr)AC=J z#32Te?M4Cbqi-qu@s{B+ie_Y@6=+oM#gBT`->H@Ka5%mKt+)5y2;Ste56CGKyirVP z=JQJkeV3wf98`tF(LLb766LU5Sl2%d4pNuy4d#U;K+Dzf z)&3C-qSnV|=QwrhncnZTIcq~J+w@Cm3W;IA$y82z4nLcTxN@8|3qmA?boq{xI#mfK zdvII{d4-$0Pt*g!aKu-BWqry^#-T@$ekgxj1I^Is+il5KmbJZWtclUrgVq_tLN~xX zoeeO%KQWbnQLx9}svF3H^FiRr#%dO|Q3Y*G!!T|S+5w#@S6dOg>}lq`0vpEvOVlxB zis$oR9$GaT2s^#7kfHe;>BCIKZ#bV34L5DO1S?BrV?rAE!!AAPqH~H!=K*o=a+}O; zn@;`dX3q7K7Q<`n=ThaGNNf_j#5DH>!d%=KJ6yy+XiIGN z)NCC_;7WtUzWEe->EHuCg)g}lP`jD4A-c9)ayho#g;HhD(=|hp?O$wW|D?l;n?3l{ zv4k%V5ss{W8VvBahB-6I&+(DN+D~QAGx&sZEeP}u2K zI6b}(ekTJ`oq*EQ;p=cP0IMSFvEdu9@caGO_eg9P*a=0q2*P{6(T0OVENi#ML6+F+lNqfX%U2S@QmpQ8XrT=a#FBqy_2nJ+(>NcwrPN+onD&MD%(};gxwrP84h{S=?|PHr?R=h9PKT_Wqd}!?ACd^8 zcICv=0JC2L)2wnQYo2^agT?W6Qyq#~D4}{>tsy0X83MnkrK6N zf=vsvJ`ZrGa6K}3ZEPUl?QN)yfeKnF6E7f2i~XE!eJ4IOo3)`Pf+uY|*D zhz&!3>RZl5uLq=!Ok=u7bh9bRiwjle1aIS%hyVHlov55lA?VlF?AZHVr0f?Ih!|T? z!4jYDSV;UMQR3AN8ndaScpc$dwGD29dV>V;F#is7RT`23INyvIS_xGH3sI?4869sG zsy=~9H`j>xPbG$AwlOVbvK(4V69?CMt-jlS@Vo{jITQ3do-6 z(3Y4ger345T!f-IJ^i*@ZI(i4muw-Q8U6QEw^c!qTW^NWI3S!v`Wss{Uv6MD;?a;nQr{FJ+7qa)QmO~*#cD3Hl0J~X#hftemp*C$eR za-bq-cSGni06p^cKmV(TGvp{DNXuY44-cW8NJ*f!%Ki*sonqeMeRF#AW40gN`p4=F zp-<5IP;FyheFB&dy8fzUS}O^SzJGG(d?V@!_zC@^Fr6yCmT4W@rJd@Y~ zaTZ>9*-=P_8>!P?f&o5VFHclT{A+Z%Ya4~aHi zfXquu)R->4P!al&sCeTj5JgOB%L{5Q9D*#8cvay9jz)&*tmRth5FlQLOC6E@n|I@1 zjD9=v=c>HcwbPjwYmhPxZVh8T_P_5xrqR%~G~p&s&KM#jFak30G4iS|DUr;%?lZ|^ zuo3{QCRl*wew1ma#9GFl2^Qu~3La`=QoOL@GMwicj=mzZtzQXVaxnsTF_wvKORWYI zaEI?y=cNxNBN;S60);bpzem}|Ot8wt^3g6{q2m8WBSTL&$PPKgRaBY)5E2X7Tv7YI zR~(gKoxkv04unq-T|zDqTVI(*sXplrTzXH0%p$F5X|zq+(m0&Czst5LJN(#|um`+& zh9tb04?KxUi$66={tI9R?&1dZt-4m;2P@DMrv~JtH3oFxB08=P)gNlCPVd_rF0wXY z8xN;?ooMhDbfdSZ0OLtP_NFb_ZdFXx_3#=^owO{FP}Ox@v2w^4>%HsXc)t>vmqP&0 zsTQh;=wzk#?tVWsS&l9p7eY!i?r+^K|Mvyq5CrrIoXyb3-S30nhY#pQCshDlHnYHo zGQr;`U>l{M_qHW;uB7ZcZ&&mcL1_~4166M@c*!DKAE*imYu^!1Gh6quTKQOZjRrA~ z`Y0f4JE$bEYVi@$XYsFYrH?yj-uCNgk6wuBXg~G?Dt>*T6mn4_+NJa(i;=3qIg7Wa zil$z?M0~-=*;v1F$~_$X)oFv5Oh*t9DI?)NVD|TS!L>vjd-dShCj11YEDu z|DmJ!{qV6!GHjtbXf$sj;UML^PC~a5FX9BfS7YIgL^Y8Lyfr2$vKpK%@{0+=wD!G7 zZGNrMvatyzj}46)x!^k~o>FmzLfH!JPxi*0jeB@;6I6EvWJCa0;$od`t4IaZ9V#Dv zaDWvSbl{?`HvQFs4_e8z3^L;_yfSF26cVKF8&$rUe=4x*mruL(OC#3JuW zN<>XAVb*Qw5qUGO)$~Vpj+ivcrA~7gQz1EhMLmmy(3KC*=B7rI*RS5r`mVJ--L$NA z41bCE7S$!#LxB>AejxW-x3;uM)Vb`ANps-bCH73DiIxG5JaDtiy;t)Cg%gwj=QWcD zaoxPR7cFiPRET>|&6o|LpyHP2|8GaKF*MUxuQaARXe_5j^y2*o#<%SEX__y0%tfEO z$e!@6acCMB*%b`+q!8tl%dJgjM8e<6Auya0$)^s2x?w!uEJVwoO1BN$SK}o7*5e99 z(KIJ2thwwC6zxw{aT!l2vZv#kC+Tk4{wziK~>pq0&(m~o&nDJ zSmD`*{-03yo}WMfgabDVyt8xj`&S+P#ms&(JqMMF%L;Eg_=hGOI}zb;?>eU(oKT6T zyiLTiCzYSTuiT2>%!nnGiv(lJBa^Pchxxs-T;Tzpw8c5+eM<_pEWi-f`Tju&xK2Wx zlxxv2EB&XN0G)vgg(|kw(HF4E_`w&M+h`woa+j!6}k*8E-W3=7XEx%nGwZ{lDW3L0%~mUv*Ay`F__Meu&@5?&RT*ntoxalT?NBcj1Mq$x zBLMg33q+BuHb(l)q4fGUW&7{+863>*?7eRaqbush-?5r%L45!zXDYlz(?7#DJ{eKW z5D?R8j0@9_F#!#JW?CPgTnvU00p5aR!7Oo~k?ODvHIQ{CI?$Lq@OrK4AdL~2t>6L=wo_$IGU7_&%^_lCC#6AcWEm!??d_Z!2k6-Ua8WS*l5ko&r;%NyV5ChDl zQ(*zf;Ls5DpRR3;L5%{!nO+=9=WR}O)1}y|I4}@R0~oucfuBCT^ZoX4URmmsV2xHM zK$048v7nS}rQJTf5+HCDPVJ*$L)f@{(qmviGP{TUBPH6y&wi2V%KjXO+QWs^`O+8H zTCkBphGy(?d0bF{rGbPrM4WtIyFIY!Z;6ei(t(&^rBH>~z0(%O#mmKiD-!hWr`OAb zNmpui8|$5;{Q+JKEQ5M|afPsoVh*&;@_uH$UUf|?XmdAbKXsI|Re!HEzUR7i@>*w5 z&21m1hCHf(5)fT;J=Cv*O)^nTVZ_Qy&=$9 zQj+a??e;iSp_b?OZu_eu>f~FyeFWXZ(J|t<+}{O*K<%sL&J2H_QO7)<_0I1T5fYCp zZR`@Bou!{XD#JIa?XR{A4bO4*oc??yid7~|)X3a8)9rxe2gJKwm8&B_*;K0kkemnf zaZH#w&0qJ%eg6tJntX5jySg*mhc$6JKIn4+yc2&tCpV!EFZQby%jkR(Sj6~xqE?l~ zpVRA>(mG#J_r8)K`gfP`-b{KPWe)K0C?JX5B4$0n6#LrT6p1UIna*7V}rwN+2CY$g_PX=me> zE9hheYSqWwYYwG6%yCL0u(UEv;f19fgQsA%5!o#o66nm?ejh zAMfcO_vfV8&fL+77oW(W(wY_AhgK!IOz0x~dkVSle0|$zJ7!va+ZA{GwBtT0IltyE z`7$c$BRc1FBzRTvJn%yF0n@mhbEA8yOB`aUK1y)ulXEzz=N|>u2%BSXj)|!WnAGs)H;r45i*|gBsD4#Rx1$zmE_f=#M=gKT+Qs{vZ%*DeF+gFeM|LTM%)N8;{X)^mxM|WJIT0-;v1xCp0}5 z2a4x#4%G_^%1jG05Ayt8I*fOCUBw5lO#2Rm{LOW2QCwWCv&OBr7*a4i)en7_z+di| zBNEABy|I$sP1NeD&HUT9T&Rz7PP0-d!7w=U+mVUX%uF=l8^4IK%U90RCm$QTr^Qa< zUSoro>nG8g^C{#fgq(hUFgky-xme!RaBxF4!56L=vTS51e0Qg;)J$-oCzb@B-v54~ zvgt>b_oAJ@feoX@VUd;-jX>u;Wn??tH2gDJUxZO|g8P-} zD;q_VMVRI&G;(lj4hxZfW;vSuRHn6X9|S-DM{8cw!uv^jI%(sd!e@C|?zjHl(f0Ao zD+_%pY(VRouTq(1ID1<&5alcv2yQvge&rVzcbx}~GOY?u-sDofoix^z5pf7l7>)Pm z#&$JMxCJ>vo1yFL18pV%`}9X;uX`;|>DN0n_jdIX-yG{sifrPesXp=`-?nFIuRs}1 zO9|=p&lsY2s2&~)dG^=hyRK{BB@x*tB)zpL15w&qCM-Rn?*4jBz=I!bL;+8G{~k{+ zU>iB7-+#=UWE5}ye*|QvC97OR_b`zfgZ+1fY=`)YiVFbcsG8%HQ_E??(_cS%{oY4o z{-%t*oRx<3=H{hQOi|tQ=!SuQ**S}dK}&Wr_FAGoh220--%tIg4^q+~CIjdoO&sXb7u;OPazs}ud7isgqx(;0Ru#>n%nHg~SID$769GN*RIx{q_c3$JrA6F@K3` z$D7KRo6p0!K7}wbuzXr?tt3zz$j$Z1OML#x-n;5RxAUj>4~I$&NQOj%X(}FNPojmE zwg>U_mCE0@HW3NIPLl*}Z9#hT@7~s$VG^h+m&=0oNDSusLr4WlV|I5(5rT+iO^TJb z8lchhw+0*ig%%aC{dPJpACNca0<9`Y{MQ|9hHT)g!3qK&A^+~xn+JGp|LU4*&ctweYJi41Wc(Rp@bUxd5% z?M>I*g?>gNI2ewJLBL6MUY{rj6)^ke&67yfDgA>*t&XTcNHqkz*hIMvn>Weq5^~S_ zAbBL_oadRIHm*+4cI>~P89{DS65W$CA=x#^a#y|bU}p;Wp|KUg3ny37A!|>H9)4fT zImqx*F5f|y;e*hKF4INllUqpOLmMqA#r5bz^Unu0vTd)#{Kp! z?$k1Wp_ToBV_h=K6?Qmhfw)8hB0p~9H6L)&9zU%Bk^QKVP@A4>ITV|Gx9>E1jC=oL zIlR+p@>NI>Jl9^U=a~V}*yP?f_!)9Gu=9I!i9#{5TkTnW^82nY2=wmCpevUaM4;AM zC%EOY7n#eiFncrszE7==pPQA8{@hLS&N1;-&GE4x-?sMG@8zSle4wJcE;I!#g~d(1 zKSnMTSG8eV8Q=QEbtfRjlU}mO^h$V9d5y&i42Qa_CA@xx;obVs8DTr)_OEaOK<|UUFw{2 z|4)3MbU=FQc#{V+Z%Fd+&kiLnR{errJDL)ta!k0ojmlxn?|JdBi976%k?D2k>HozR z`8QL3Y${y(dsRheUQVYN97XezwpyiJ)_VC>IL}D00?#j}&xnJD@3&q9ycAgu%}OMv z@kns)2BeQdx79A(z!N&WMP-?sQC2sqUc_NT03`?&`$TFX3S+Ldp5i6fYjNKF+@fol zxUcwGVYqu{v|u^SxZ*PKZl7x5If>n+KLmQSlD70R+BJ7o>$MZ;2Tp?w+%9Hg;?=b- zB~rp*si6qObV=ejZyZqV)N1@Y`zbVLqwqypQkVlqt+~Bid!6&2@a_tqyJNJVuo#Lj z4ZZg`e0c^^aTtqT)mHp)5wMDtTjWiXuKOJgQP73{zR?f)KNjX>*y$I<&Xz8MVUC{e z)mtYSty1I%Yb>96SzS%CAJv6bMCVz53=qHheY#KETUyTdAT{=rROcJI*Bh6WDgvC3 zCT(VCA$S94F@xvXXa>Fd?@Cxb;|YeP;aJ6k^uVaF4!tNZ>fBSVitn`ugi9)p=RjOT zt!rsr=NBa#kZy8KzT!`6w`5(TSZkIf;?1hoh_OFZ}Ny_M`SdJTF$68|zp6=DJo)LbyNh9C|>Hr`3 zh>RRy#m^so&#o>yDUhfUD z%5GyrHJmCC&`-{hJdD86=iY&Xc7O21bVh2@71lWiD9JsL-|lkt(T@?wToI zZDmTdSA1h4R>59aAeW3H2<;_ zDgx!z=hzjA!Mqa`Slb{VNB(pl&j}Mu{3NVq3?<)dm%hJg?S1+^Hp=6b1?2_Ge0wiE zqH|0baJ9+cfxEbG6GlH+XxrvJJfuGPA`Lxh4#3uq6v4?;>jk}EMB@US0 z!heXvQ&;xDkKN)xZyXOm122#*S`fG%8r=0yT-ksuOU*4_CaW$WKW)tBZuI~|W+Y_E z!irmz9yb9YZNwlTMNCuJj(BerG~!Q~y7^N42+JdH>N!cftDa;IPa9pF>}pTAMd@@U z54S^Y7Af%L)ovserje#O?caSF8z@gBZOxfojCC)tj%V#=9zL`WI8*t+qAMk%*VQrUl729esVNeU1`Stz=Vp`^>!Mq$JTZU= zzRF;oX+4Gmy_(je83*qcAhv0SB zb`rdFc5GXF^6|0Ndw(WI8hh^+R%M(J9zyLro^kB2CFX~_H#|wbHi$cpKOQbKpp@!S zR)qB52S#4_eZMg0b3pVbJsh$BrY8C=!&=E8LL%i%8_pJIV+{d?xLmQ(et9Ca4*RWG zriQd)YYy06CA9uj+;?XGjY=Iuk7wK>SM^i!iW~?xam3H6%5h#I!)9qFEo^^K$4tgx zo|g4uaD#Wc_nhbu@&)AFE$FX6siv)!LQ=B&-C$=A%om>^&^C>3=#81_33fIw5+Vb{ zK36gWmwyDskRiVefnUgYYo`oj%Y_a^4J@s^8$Ebf^86;WO06#m)W7M7zDfelkK7Mg zfNmmps4~Ldga52;e_ERu)FDT@=fPcqn0xuZ3(wW#+8MB**4?P-Y&|iK`&FKv(PsOB zJV}&+kdz7|D4V=lkE0eEYFey4I2pd4I?ymlCHG`|xv56dK)nX(ke@0<=bM=akC2RL zP>z5fU&d}+Ygx?nKHIF@_OILf_y#0#2F5%;I!U3)hmqzl{#8E%>oj6PUHa3i>2N}s zi||Iy(Y1lX>J~v2^Qk`vL!y_M8QpFu2N_JWUaahBORP@&wtZ$jvdCJY87h#_a~?GB z&A7JY=K1xNB!z!-JFsd=0XnRuUSEStMx2osnX@k}lBneX(gjEU{M$8w2DfWYe{a+e zez9VTJ#a%em`JJt150YC-`%I1>n;$W_fdTHVoM#z1 zXQP1Hw|p^>)>2c0fCy2$L1{EjEQYaV7;~VfgsKsbdD5lgNBwVIyyXh96QdqCv!QXh zU3a{|*;Hl96=BvNLt5&?8#aT46l&(_Hkq0tIqg2*l{KF9xTZiVD1SgEnDS|&-IaX< zJmCb|GE5tq6XmT!b8LO(^R++^F$ta}(p#!*)fjPaIJ4bsphTi~65d6L4Z2}Nc^jkG zIrB{h8^DDcvwFw*LcDM=G*MD3qHbtd8Yne%5>L-Lr{UMxn_(4zG50yJDzTw#+B6@ z2hc|=&^EB-tT(QyK6H?9SGDxQx%7FOJqnx_RM_Czj_u%58r(ma^xLqzA`T(ny6*}2 zsB1QV>zn1zEC7c{E5|6HRv4Yjb*R%rtB>n1kBFxa&fLc3g$`6!iWs`A~imRRy28EU-nF~5cj%j1ziZ*X|ww}F$wC1lZW z;cFkCU%WkZf4qr^VWxxH`>E8FZuSMDQ%d;@)rO<4y>)Y{?17Dg%`Pd_*hjJZLU_VJ zjf~5Ub&5fvG`v96YrPk!I-3!FmMKH_MvsYezacp}*#^+u zt9uk*%ifJHN)ZYk{|&}0xL*|&%roP@5w<831=`U6zT|GIKAxdaBcLvqGdB`y0$G7f z{G9z2Vieja0lm6P_La|WFCX^df8Kb&f;pPNE#6H5o|n7J=f}moz+VkYN>1v3AHMRy zBVn~JQZNcAW)ODe96#yoZ}HEaOCpd?!%Bg!Gfr+7WGj1PimX9J~vJ7eNS8^G6~ zF%WvFeKCrG1dOI6n>I2z=bL~U{rI_n8f)DYNSZw5$n+tUy4>>Z;51#C@0QNY^`@K* zY9^1}5uK5JepfTXLd$G`{^fz_tV0(8F)=?q-F)Zvii1l%#P!4zDHM$dzK}2oiM6dm ztkdIm5PVMxLS+1~x?dmc9pRhxNR)Yw;lC1SdAga-ga*`RqcMdPaaN9hjUX^y-BkrXdi?j9#ap7-ZaRx z$xerO@xq0niJOBV$Hdwz_d`pPmiAE^^WeC+55MMXhX0D(ri^n_P^}{o+;`rdioxR2Z0liD;Q3#83+hB0P6;AaEk(r4JMI3jn ziZRn5!+!=hP1RXqbTtbuBbq+|1}oji%^z^vFG(oLJPJW?$p0ngelaAE32U(=X1bHb zu^nd4qZ=L}w7n2#tAY2z7NwH3Hg=( z`;T)o_jhGU0ixwM(TKW=W6@j{D9DmN+9v`5>Kb4Jrblh!y!K71PgxX5z{m_?4OOUx zA(W}3>BLPd1S>3M5+gf5m1LfA4*Oc1@7?<`4tm6gJI1 z{N6$oRYB?REGW|LKVxLV2<&$+ZWk7e13rF)KHst2(r~E>ZhH|*7Ht)V-TQg}Z)fz3 z3t6|T2N%H@ebfcU&-S)I1;RP*WxDX?K;3qE)q;YAf-E8V$r81EIq7vc=rK)FYuaRd z;e5JecK$AKdP&Vs#Fd~+{N}-pKjZ2QJ6f6RPf}X!>gP$N=l>8-%kv6VoDx>tE5gIO z@R@4jXi1@@r@+>qyDJBsP4mLUfS}B2$kbDQ%c5gWoqC8J4QQ2ty2*+k$W1uoUCIx) zc`WZRV0zWL?!y)#nxX!^NvcVT+P?NrJL>>L;^m?ITMNm%b4SfAW*Gzz6wQg{>~XUB zw9w^VX6v@{$2zVAFr0+BqNg6-vFYw-M6b^Yyy+0xs|R0F44^Md(GQ#&kY>_SHzhwc zD7{ND(=O%;aaiQ}E3@}!(Ha4&Y3HWq8e8X1rmpZPGCq@A(nP7wD7oVF9sPfT)d)ROxc{sN&O+yIqHt@62p`q&8&N;`O)JCv-UiIjJ zzlQI%NSy7GW;F9Z28U!33qyI80}q)wpp#>L)C>j%jL=sNq+SsN2GH}lioi=$w8&!Ze=Jib_!vD* z=|33p&&Z>l2&jCg9NN}AKp)pKxokks-p*3qWP;!lKh=6?x#0_=V36tKk-rDkklD=- z$s*e7{r~@8+HhjzozT$1*9QKaT5lcBUORVcOd>M7A z#ru^Yktidzf1^}oEO$&koiaE@PtZ95yhxBZV$2BNAv2BRBzK3G#p1lJK|oI7$(mU7a|Mp#Ml?7CCr zBvIT>wp;3eP-ZR4XC^N4F^_88rT|wL-Su#1PNf0X4d`Rbly_yw*2p`uqec$Sq#E=H zTd#PqfcAiZEXwCX@>)Z9In#S)gQowk+Hd4G%z=Br4)J*%#JA4DHc?~Htn&aLq1WYX zHO7A{hc9MmLQ9iotYn4c-OuM=_1T%|f@Uiqt)GoR=EdL`k7(;jYBS(F8pjrC#Ix%;+!=9U9=tQ5 z+k@Z{^LN9girBxRnd3<=scQ;-5p{7G(i$n;K%}SpV7&}t{=X@DW*rqKT#hk|GSf6< zWp9=K0ED@R?@uGRYW?bp9TA5mWc)<&?k4HPI^ zoZ?WVSa5fzxJz(Iu%g9XN^#fVP>K{Q5L}A~3DOpd7T4ldT>iB8-v7(9d7f-`=Iora zXU@pZyl-MLWvs|UX>RtP7lF(I2Oasiv4hkTnxFqZ5tgnqNk>xBhV+3W7}BLq`-|Y! zcC)R-=Urh5NZaVe0>{+0jGy-vhg{tKFYo@{078oWAw$#>hVs$2k%jOXN34xvrfBX1 za<;j*cXjxw~6;}MGqwz{ITg!x5W09Hg06} z4guV^0JE{f?A;)d7SG$`36Tj?u_G*! z@$Is}!la}fkw2zi7A{6^kV6mVI)dN-$U==rL!cYaSpi5iyCx@wCN2DJSZ|qQj4{PL zBIM~)OetCp3M56!OpeGJMZdk7I_S8)7~;yDVHx3}oaS-}IIn%$C-0-m*U{cpKakTSCAq5>QG7LNm z5yT7=j)->n)i$ejP}4zaxIo8At_8+40rX1X%HR)h6MOjLs$*1y`NaAj5AaU_QA6TG zl#5?{a$vZ3o3FtPp2`~kC1WxN774#ER1c%mVE9DgbHsQ1gfn_D7~l#JKb4gF&_T&= z8!AxDH!sFA+XOc|{0d>SQF*1DJUwD!kAo!t&If$tf`f#w1wIV`=zmMcdOITT0Dyr@ zl}N*`W}Z)nYMWjXE@=i^|3Pms@;rpxpWO#G8JpFVMRPvroNbLF^&tK83=Cng-&WyJ z-=&H-A(*G%nM90B(axoKKB=H#EoVPdij!(KjeWG~w`EX7H(9ZOrhGBPZ2jEiP@Jk2pm-qQ6?n}^FYX^Lk9l^a0gA$JOrL^ z=OfVR*Z1z6N?@tN@M{eM+q`Nhplla_{Uw$U;%e%L$Bp!#=P2efhuX`ow$zAyAQIvKQbu_6 zCZbGWEq)jPjvBDMBw}{}pukYxQIcUJC<{(AUaY*PxjY`bl>Ay%Y zFyAt$*YRObK?4(gu~sFBqBX7ZDY^Dhi7xd_2KsF0y`Dz7t z>Yk0z9u7;o-4-Q{6#0;V;4DHw8n46Sw_@Rjw*BPrkcpdW?vp2z^sS5hF(&|m%mr~w z@#DlqEK)PNML`H;+(g<+j{VU8Nxn| z3y~hK2tsE6>GrwbF02X{{J`-6;K(H}!G&8o z0%iDo326D=(-!kuyL0JjWVV)98-sn>{3GdQ)4}+WjU+k?sli;OWD}}Xl(%g7T!ql` zybl1I%?g+eenP8rjv!21h(}mWcMT^SBhs@e^#uh`-^{d_sEazGV&hTGN7zzWduqPF z=#xeMGO=3A(BnZ8AA;@$VTmk1n0rCBDYSWPRlqQLfLr)Og`>34%LzJSluGFZX_Ig+ zS&D`PggdY^jX3i#Z zn$H0hm9t-HXbd>KG5_J&I2JfXi2FT?$;+#JSIw37TPhFD@7?lc8aMxr!CAM(%gn>k zPhX&mVa*kmfQ&P$j6AjPquITAc7Xrc&LiH&ojADn6vvzo{GNNa{kLCkL`+wjKg}hE zDNdGRQrdO!y6M%Sw2&=D+-qk$8FNAo@!3Jz6UKxoQVskpPu<@pf&!jrudD##lMT+Z zT^2G%P9NjZmfBw#YP6f0uXMx|0_c}~MZno%B>eAnB8dXDJ8C9nLB2{is5VTlR&+)` zSz=gY%bdTJRSlRKxwJ&lPx|;l4!!*fGC0h-*<+olTWrjU(acITEz;{)3Z|8tCW#oGEca=m-9Y-$m3ubuh#H;tSqSwfcKr*Qr$7NYn$2>qnfFm%*Inf zJX1}FGoHwRZ>0AoQ{mMRN9U#%DbvSex!TvxDf&a`RP2ou4m#geW=RL3hY2=sVD<30 z`os1bmxlYfpNj{&2E-~r(NVXu)STaKdRHQ@A_#Qyzdq7tFF}g-8NlcJ(qr zd`@yUBd2l2=j~|BP1^@Ei2WilZ|CkVKpA$a7a4#FL8A< zpN3PaA*lK*aiQe)ets!O^Y`g!)otI?TwX`?4V+ACUYW)n(b0u&Sb~Ro8&Sl`R zw3?p}bK0gq)3KUz(0RfjF30|?g%tpn(`bi_L&2oBZx(%a0wpVOR4r0o41?kq zX~JZcax0Il0J&R-0_1Ul+FBp&$#xg{ohTNX;4cc>Y(hp zchuPb;^vr?kxZ&xltkLB5NYd&&}=$YWm!9>Ssxz^UA=M1GXgBLRD6q?yf1e;~HGuNI2tQ#5;j!c1J?NpkHMEo>KTqy7uWeb15~di|R}?TN*ApCJuWbX$uBy zVqt1x(CY_=qE?xoK?+1%=6Fk!!pGsAtxDoTA_rCMSJCmlI(bk zH8S3^2T+0Xy5oh)vGX8({Xrsi%BhIULdnA_QgYRwNP$hm9IcaG0uMH# zF|lyF_s^q@yUhCoREyb^Yfmrz#?LKM8SmPwuk*5mn-ng<$xSNs^AGp*N_KiqiAxTn zLD(4)R9V*0(j|);m7N|~f%Ar}D)du2e`yr&ab5xk+I%d27-11V&X+}-^;D>RNSA1- zcQ({gt}ivM4rf%B6%HJg{p1!JM3r2iXOoga2Oq7hO6l4h)~g#*M(JNT`oasLekdD` zeP0;^zBu+NRN;jzeML#isO$_u8Rxl@IVb+pdSAo+pWq3f0k8dJ*g3l;hvU(AdQA~? zuC?juou%2>e}G==yo~fOtYclefuT%sdloUrwDOeh?8^Sy_4(>*-#$RapE;(mz|dbi zIO?`Ur_$$$%2gF$X9WUUIB#S{a#Cwv{^YK@bFCRhfoiv<2(AE$7v*I7c-d6Vn@7p? zhQm?=W3}58OTrz_-H>$OzUVMBavlK|?21-S*SoTKBlPJ-*}wLB{Uok znQRENO|_C1;xvqzMB04)y8XMp{WH^{zJKkk$BjQ?{#fe6aUU>#5#jliT!VILW!?9m zlE_uz^Uk0%tRL6uC%|L)( z-}4J3s15q4Q!j6*^mAJRzGc@YplQb!8T1h^sDa51-d4BRJi1Zb9?8wXz|_h(3`GL^ z+)q`938gh+XPKly9X#NQ%e$di`wGj5cr+1QKiu(0Q67j~A(YAr;HORXLP48GRDWH{ z1~4azKP6}!d%Nuu!Skz*S9@xl>)3Yh$4#nE9!HG|Y@&g! zPt<~WoL7uFLxNl*v^Q^m@TdS??=1#`+(mr%w%Bec;)TH%iQ3HQ9r9ri}f=*A?UcI4{#XIy(3$3{Q6x?2XWQ#{a021X88-xP&GJp*_lta91$XhQGn;*&&9A^+=h zahfM>#qNZUuLfk1TuLgxF}-?lErzxR!3Y5;xx5hg9xxpEMKF;QXX?~mVswxmga2Zm ztwF{Ygkv9e^!5$97iIdvDlIYsTHN+KWgM-!Zgy~T+3X5}O5km%8(()KQ{o+Os+2fdZM_obP(ME1DiK1sNk6A2yc^9q#00r>fFFZ zdj?j`#sPeG>ZrG0F#dv7e1ul6-gNKTP0QSxi0IKq-lTOkI6G6su3x`QW)W(8|886z zY=xs^x6@z3roqi7X}JxWO_X__`Z6fxD<>;s;nGuEOOsi4`^*~ZWbI<=GXMPL+0avg z2ck8F_yO`7e_`yy)=f*#g5Lt9yMqtS%E51=oVQ%w0(!K&%C{su(45f1eJO%QB`4h^ z909_uik9tI%)m$}9mnZ=d|0P>qwLMkOi>Yivr>QNAwo&%`RvE2r~!3Ft83W zNJyqu8`duKQh>Q9#@@K0%|c;e^+a+BFF%Hth(D!kzB|AcY%-^ZhM^p#w{@Ai251eG^l z=RB@TTyl;dOjxHoN%?5c@sYl=3j|0!u*x(%!LQXwj^Nx@i8Ow*sSdKoj$BrDpG4F&A*=xmK-+W2fF`N_aQ47eU`ih4R@$)AW7K1_g!cuA{s<4ak~_h^#q ziTRsKs~vesb>n!Cu7);CIWDm^&raKPYD{x?xT4X)Vy1i`Q6*Cu8s1VsLyL$ zD|Khf^?7t}dr?Om+H>rBc<`gL5@F@iZ&$hG#IC>F0@7Y>qTuZDkmK-XHI`vzD7$$> zuDSz@zO%PxddK5NJ}ewD_4B=<9gU>{r;%_=m28UQ{!!DI4T|_*KY)Xmboqt%hLgUZ zCW0rAY7OmTQ7G;Rrh|1=o@=ACs>br$DGzF?K6sik%=^l?=**&3^n8f~{5!vo10&~Z zJx3)-Q)w-yg3gUc61a zQa7}=$BW-mjoARXE}UhR>Hl1PtDjNRB)FY@^`B8KB^f+&DWMJdEH$JL_-pm+1!?P> z^CMX6JW&@nhJCCGajqY0?iH4Ym+aMzr22T&6_pLNg6DnFTs#v_sb;xL_3s-!4_Zg2 z4l)8i&ytODCNv493So>@jrA&KK>2hx>h0&l$?*i6?0THLwM2}Z`mP=2qJ zDSM?ejD=H$j&}5y@isaJksf^gG(LU699I3}&HmHs;UVrcR$K@2%^;wrWYu1*|0@P4 zwA)d@%IHzausGx9{r{c@LcUS=88**+(@8UTzr`WR_WcAf6b}rA*PNIzyB%PI0Wwwl zYuUNvaqR2THxnGlQ^_i<70GkbaqlA9Da9&D6jV@tN+dMBnLJtK$Z@IVe!fDKk|@hm zB&>0zO!_=qlu+sf^|6Da^%qdbe|{RpoR{@hN#0$zIE*O(?Rhib-^Z`?Qn z9IWxBrevxjRnmz1Xbbq$7zrgF#A#DAdO^oM17zcc^j0_W9alUv%Hbp;Z71itbJ4GA zH6;5_U->fQYCpGc*D=2r8rbgKK6F0r6woP}KTslY9$!krtgR%k9d;%AT4s)v=4WvuiI)h(`AfzzW>(q` z9Gvj^+e-qU(g0@|3WPfTb3%3{Z~2s`+jsMF=?~%IuNAi2D(WWR8k8K87~qwMFDJh3 zJqyo?R)nmd^a}Q7DPnh{bPt zE-$-c_S>`=x@tZD$x&s66{z7cz{6w(HB#kaJiGC{V^udVijPV3;{I1R=fxjByeSMg zrjZa2_chIac-WcTDO`~d_Em0|v*@VpSz9X-$@`IgvyJdwDG$bx}DxPW086wn+;< z(zFksxR?k%2SO!Ib|#<+g-CZgbu4`L7`8in!)WDIbd-yyZW*B-Tg+Quu9*x?w*!n^ zW7(Xw)RU^A__7$U!hb!Xk0gnS0dIrjMWR+^Fmx}A8zYy@^H0A50`lU*D`U5#o z03eaD)qDl*d9g?JCw1GwtZfLmuqg^VcA`Hw-f2&JENvTvSqPHKU(WdT-u7~jCXebV zo%M!QkE(e$FalK(+rLK$cXJr^uVDVERLb>bjn3cHyohlBBngoIEk*Lsir>>|s=IvQ zXM9 zoVd53fJe-*_wu8FWip9c^&XXWqz}=HIrm*N81&8T_7q>!SH8{^IWw{f|EqL}F_>rJ zt&|cMSvu1sH-vSQ?!ii~BEuBTm_E>Z|Jo?b#nXibHF}J@K!cfzu6Dw?H(E1FOp124 zfCSyeD^?RRQ}*;M0OnqO-yc6H4!h{Tr_Y%5o7XU|_e(Nx;_tK4gD%ak-T@JcA+)K2 zcFvK_Bz+(9yL7>lRFp#7*&$cm5HRDJb=%)7>s)^}!)iA+>nwz=!cn@+>nr6Q9sbA~ z(C6|6dT{Ou`-J{clh~kxMNUQGg_DPBL|b$)^JZqJKXXu}$;biQoz0D-uwY7G5a6F? zcnJR6%kV*AobM4MBFD{%+|?sjU!lTvqOVYgW7F{P!K_Iyo~;Xj0DZbg?cE`?ssTB$ zdSy8t2xE~m&s)CGOE;q(Lvm?nz?+0B0ZS|f)@F0%SlI3Uf1O4Avbrv5OS71l?L1Y^ zEuFQ;=>9k39@$H`W0y{UcjT z$?KQUg+c9al3e>j>=_W;t`b7>E}c@P%&{y^r>{HzGg$y_++Hlyv-_^c6iG6%ct|bY z#`O5f#DyeH7(@aR}ZAyfh6&{6Zc8@JF0G0>KB2R zXi#IUIx>6QA&~MnT~R%s76G}k|9QOy*e|<(B#K*IL=$-vDmF+}MimX3fY;{~8>i@bAH2UP2GV7h02Cu1B?RuRrj1& z@l3N7U1G@l)p%<-e3Xpx8E$wM(;f%WT!Fc)C^x$&Wx)LT*IvuICJY!Q21gOnI4Zc}VCso4Z?+jFR4#9D-+JE=@AHkx5CyG|NAT$e`)RIIGGeRZ z!#{1@<5K~S;V~mIFzu#Pb7KkylFU>kMqK3psv9OmXq~OFGOMw47a~O=Sg|(6 zpx+bLl65Wl2QDcl?t>?Y2?AZQ_EyoID=tnhE>2EXd^p^y5!(T=7TetqdXZ+4`0oxq zW(E=YO!*~eU+emI)V6&pJM9M78>ez8p6dVv^#Lzpne+j2EC4^P<&X=v;p2t%wh*%a zJg3K4n>1g7!^MOcKdT5bcC(XE9tDKH=_;6lvK1;nyk-m|D*E)8h_P8oQvv2s=~^ed zVPmv^H@)8o1_WAb`XpbBCD?5BV!`lOcYYin!rFD%m7LS4;)a!>n_)2KS|H01O0T=v zJj+48Z379FA>A+ zV0R{rFZ*XDByp2aYh5MMe|JW*rQ8P!SEtREWd|$^l(AIP)&&~9Gq+~{qz{N}jP;?& zsyUOaE!C@pR0D-W7;LhWG>N<#aIYEBLl)zeMuQC+7DuBD`I1_*w*>M=UdVAU}(wNxOb~ioCi_w~XeP0Yiyr(Cmf5L_Duk++S0SVhur<OH_C356_Fxf!OK-D5ZAZm5Exs|b>241?i{=Ywd*5ozYDJw(t2%X zSJ%?xQHb*(^3T>(d2jUqZ>izt1P~!hXkx;P3D^Trsd%?9E3E2pBz?LB7<c%^5aX0m`xy+N{pA<_zyFGxEL;=ph&prui6mT~?(#wZYjt6&7p@YQ zpFlCL7-GX`bz0Yi+71WWzf?D42tOP9g-nDo?UDq`RxI%!d{0`McDVsOSi=2iUtG5c zX`ZjyC_Q~MW}~;_Cc{Dh&}&(NHh7jp0;jM$c)rDtrc66{HX95m#%*?tj+#a%czk*H zbcFFY9XFZNv0%=uJ-bec3_e6?XvugD0FZ`NCp6AE&NSAH*{maz9 zUgHlS5j$IE$ffIUs{9DCl9Bz;i-On>^K9WNK9uyUcteNK;w*FLmnkxEJdf?5Q|1Z) zGW=8JA%%0v0eT+~LXg{oJC>p0!bTOOah8ZP0E9g;f+Jqv zex6ifl*A4VqUj(`7$kIA(yae`rSdQcP~a%8jEKzA-wgpHQ+?)JdSr++OM`?r)O|Kd z)PFMsT>(Mqv1wM0)1cFLV1#TJ;y6)1Y;Qz(JoyNOK?YN8VgnE-$+xjK@3@^}|7PMJ z1+7ufA>{V-gJMnv9({KnIK>dfY_%FXn_Q;Oq6Eto!Rj!@n*irh4; zxB9B&&dxgm8L4M}GbqdQ_tf8_K{J7U`B%Ezf6Xwb0?;-l^#I_CBBafw$0&5WBmez* zodc`~rx>(*A_}5at+BjsWP5=13@Oy%k0dF)Px0U1PTl~oIZ02Bp|QUOD?lJEhM9#W zBEq4hI4$iJw39aN>e+wAmf8}Jlqw(?(~;tMp(XD`t0!x?5k?jyQnfdX{3qYu}or^B07JR{IxDf47!=ktqvDKT%bBR$GyJ6O|@z`jW@IMS#Q9^ zxpo~0^7FGeSkiW>;>M3y!GTLtDB396HItU#2Pjz3n!3xD7V`yR^#t;QY5ARL40NkfPX zvnO7GjmF&?$3LeG2smh<3Z!WVG=lz!Lk_nCj!2s0L?G8=@#kKwm9)w6rOG=g-;b%8 zCQ!D@CAEBgHr~gtBPO5LH_k4y2ioiUfir7;7%!rxeb|cc?fXTcW9T5&SKGjKc#Ld; z()1IHs(0^O`G+JO`ip#JR*TTvFIP~Us`Nf0#w%zNlccDv6rn1k=NRX-6cu3{WenO} z01f=iW|cKnAq$L|lsF%88znb%Ap6kIBWf!|h^_Ummb<{;A`wx-R@m_y5N1T;e3HIZ z$~T@4t&or0P#ge?hh-v@IFqO?GodQrKY~SVU+&>`ssRoRG2aJ7EF}XeWI;vX8p=O* z`oN{RH{pVSn5_bXxuNwwD%HUM%R>8N_IgPPAUz@pc^?FLaqxfTxu-lpbSVec6+y_C zMDU(HZoF;a1fBP?Vfd}4Jg9>74;P(5#GnF5p3l*dCfV?8z1%jv(847cdfbIhyw(Z0Vp z2q3=qmFfyhjQBM_?HM5dZ6lQk4O_vGPVVJ??f0ou3BSwR=tPmug)69iqv)CnSLDZ< zH;2?MOm4MxJxT!k{*4YwJnIadF=*%X)ja29`Myi-=&g%K9zfILu4cdNr8~sjCN*6i zgjufU;dD#O;4mske`7S^ zUZw1h=JFQEi`pGrelmKUYLH)IXBLHH$DIGfpXg-lzECeHrR#*GfPb*4gp4GNitgLc zW7AFMMY85W|vRD$i8PjEh2alR9>=eSD;$=91eg-cBt4V}FYl?Ba^n#EbQ zxDchb{CJHsD}ju*5LxFOvyg+jFfJKZ$$^zMr53HphI4c;$={Zg^EA)3n9lXBIq_@RP>%wsZ>_1DghB^5K$O~T_5nWgO zehAnd5~jD9^AZsMri-SfsRqC=BYcTFaT!%%>!T>m6JcevQz4*Lh#Ig<1QYfF#kl3| z9bEx>GuAuPIa*PFzXG*gT9O{oIGH3$klpzII_mR0t~fD2E~7|k`AT_5;BL}!+<%r{ zh;`anVuLbPY71kwZZnIgIfp>FzhGDW}_PYJ*NiDUfh#&u%Gx>{p=@ z@P6IZ?aAQZ+)j-*DDI~Ui$0=7sZT(sUqv?dO~V)d+&a$HHCz1Ngbwx07yni}k>`E^ zD_nCB31Q(JFu4PG(~GrVOT}?;W>3=Cc6RH`?H&=9r)UZjEuIH04|SVqN@lk*#C7oJ#YpZ2^k4G5#6!l7d%NPXf%qSg|I z&#lg4EF0(r6H5bHZ}z06Q{n9}rXALZRWrKUoXP%icrO%(dBkIwaqk6HI)I8W@BBd$)DSuJqh6z zwXg065#ZWt6PjI5)e}!7m+$GeZgk+uQR2=j9EqG$+g9I!Gi~W}jWv=(RT8B6ZgQmO zTPbeQQ1rY73|Z^0InGQI7B^O9#sNR?obfv)Z2KjB$bQ7W0HF&hY zhCId&hawkM_z*s~{B24Y{!{6f&~L>l8NfgZA@+sZLvRz#1|6xa3?Fi~lh)z7|La0u z2hbY#v}m{<*p#x8|9Aa%4_0f!n@aA_e&!Av860Q_-|vLEoYA5NwMrShnUL}#n?uNj z{=}ur>W*e+ZKgbtpab?2H|1Ap4iIEL#kj>ddWI#riTMdD1lY;Y*z0;`yE%;KN*81< zulcm_eL_GCq$KmFX0m|gWMTv<*E%Ca*Fw&4;A~&ub6!QpXV&a+`X_;V|wxK;!~mT|PAfkRu%bI6(2X>_<&k!n1s%chBC-G3h_x}rLn6(yZ|H5`!JKvQNa;O9wN#Xj z8ZD=BJvCVvb6$pB4Sc$zNUr0YN59Z^GG*j8D{V_KK@p6(2uw8byck7BDXD1;2CqZ`Ab;xVX7rBobdJ*zWWp&DV)rW3AX3$j&E&~{{40Xp> z#p2ww-PQf_XIFY4(2S(mk#P82lo@&td|&S+IQrUjo2uNT)qIZ(U*V!kSylk#SM+K| zTo9y;Bww9zQ(=^LiPrbEmSlK<6+_b4@A&@xM|Y4&UgES2rfYPBf4F@VlXY3H(zh=i z#Veg6Lv9QtJoENQ3s=KXGAMrB)3hFaZ>a=9Va3O-?0q21^q(KZ&o{X<04xljk#@Pts|VSo@vpP+I%NeuK-0 z44KPzvUD@0W!2+)u{dw~CZ=n9nfTbvpN0c>A4S4#f)QZ{54F`aPZwjKiTNu%#7Yh& z%xu7hgW;&@vY%`RF^l`t5VxZW_gMj}X|6ztO$|d1p16M!ZO`faHw-+scT~+k_Yp4> z&J?*mN|tH1SHxRM-QrqYV{k3K&$qkGA)688{~nx2^Yd_V0J!&i6jCTMgd+SRr-tSY z2W2CXok@)sVZ@kiE|+70PC*leMaB@1kyqDDg>`<02{_*rT#+ejzELlnFlx_%iX9$&9|sPxX0;RT9ML=2mpS3idtO6wrwDD#yO`RhVF^yep-rrozI z-<1KMH6%WUhzz+yeuWs@C2q-qDtH?0M&#e-amA&?XoM;vjs9^bCo*CR(nm0G{JClV zy`}w`ukp>#^#`|{#=5i;tFa=HosbVeq}vEQ%Ia`NdLeBJ9#Czp4|0+E>N1zbT9Q;e z%UDUHyCy)Af*fkUA8ULmSyM9bgGp3S1X}kptYF~mgUu_w{HOs-5mE-ycSJ3Ry3)%L z@xa;MXr=@=>UibR_8P_6TZ(61nw0QBas}BKFASU$tpS`mF8|ig7zu&-+v`BP>OZ3+DJr-^DrD=&|*Vr<>O3<%yV{q^1*o%UEAU|g6hB&(iacx0M ztuQ(g#MZzZrM>Mo8#U5ra*5S768IL z({l;@+prcnf^Pm)gAhw_JVxApM)#ed*G#O6tI(6MXep~D+n|%%5|CRzIga>gh31!} znZ8kO8C-D@5+sIxYS${9+;|#l2LWg?3G8=OG*`}iI|frb3gbDoM7u%~WkcT{_#_aN zC)GY}x5f9bJM;gcs%J7%{wZd^)75uikZUo4^~_R_0RJYE06V8#J0i+RiDX*(8wI@1 zmGDhCBbHc#EZ<+dx%_h9&-CsqP-JHHT&zqe_G0aWNR*#rMl$h&*W+`Js~pp)&DSbVc_Z6W$Xl|$czecc zSh1H9%_vL#WrLZ&AIJF#7F4SPgD*!Xx7QNco^jIG)9F3F1PXR6_k$!mfV1LxeWQf8 zAn2`oYs;*LEFkq@h?c-L=ILt)L>N0JutGVI0A6~f#Q|KS#|dGx#B~lJ!x!7{_+%bNr8eKoSdBYRUFW|6!R-b@N4m-8&Xz zCo%9l(b=yd;;++!&34?G`=8n$H@`22Nr8jXb-Jh6HikEh`uEteJ?s7 z8ZhcB+y*2ub(zISl(ekh76HHct9Bn!Kug>nM=FiorB+~|hZyCu3Jam?g7&_*!1f9n zLZrBbU2U^*j80~Too0Oen#u`kyPy#jQ8NE+`P98!naE^g zl9Rm^UMfG?!d5Bn8Ak-?_S@Hn``taB<*ml-z(Ep>^glPfD|V8YVTf?l3FDWgx8r#MwjYC`9bfy(3~50 z)jqw^5mkGRBw+!j_G2Oc0hla1>(Gey>OeEK@=RcM+ zDfKc2G#q6mgq8I`h(?j}cn9);G@z_GIw~?LIUlfpLETB&fKHr=;)|{yJ}s^7cZz`Z z0bVXruZo9G>+q6+)Q6|Yo7VV)UMI&uLctzIK-Qm?UQ_fz7iQAhZ?o*)6-q1W03=U( z(ibN#1ATy)U$dTaq@>|fmP>c?fX#t*qSF{)sKVB%1BpzB_%r!EV8eiegH5FJnIeD< za#8wKt227*N5HN;KuU5-1=WZ%@afpfXy>HesLd#w_j2ARacUFVn z8Y;6gs+4@0mv#Of`8`0_<_0VyA_F)y$h+Ld*?7_fnBWe`Fx{rE z9@h5>Z{-c~uE4VzHk+1@bS=DyFq>oV2jbbh^UpqqDk>128o0+1s*W54U^sTGd>a%U z-9G%F^Cq|`kzN)ZnMFNdS&~7H@A4J#FFS5mqNTHwQOltBr6Dz{HZM_W7_0#mNy~0 z;gd&PH$cSAyt-xX;DNz*EA_o!Q~7whyO5uAFn{5!**W8V*ayY|J!>3Et-+#aO!taYEQX-zz{*vA8#YBF>*LC2)c8?NJE#c;ag_wvSekXnu=>(whPe}p0ZbZ9KPVdVd63{J5dR%1V(K6Yd!e~Mr zXW2vHyThI0Ib&YZTX4Yjby*waR!BEij6x*{*gtvgUF`gkS8-Oa*!Z(0Huk=SL zvb8k;sD4y0GT1iFNh-B}E*>`13Q66M67(wx(%2k0Hjh3S?^CG8&c>jnm`3HIRjo&F zZ`flo*jj5EYi$8o*LjgC=`Xb>f8&lbD12Fh`tB6;lfBK$aP5?7aOnDTDIbTAfk>f97dMo}~K*^W&R$S499d>_KS`>0SA zF~Oepi?zqDu0g4eCUHc9cOkyr=2ix3KeHXXlnD0;%T9QKwb$X>bbkAz+?vCR%=F;w zj%D)?ZhzeQh>EOuEwj<9KD2REU2)s8#?de>@nf|BIGYoPxCm5FT;x&AoY9}j2Y%oI zqGwMSS>bbNO%M~kv{?p4q|Dm)gYYUb=Hgli6|J{EQf&}X##LgxOLH|jn*RD&J!<`(OP&AxE>u1MLHOe#n(ThmjRH07u4||!-3Ji zOB4aO8#9|~kDm@P%lugI9;jMWJfH0?Ic%sSxJvw00GqkO`Qpdg?QOOBhRyueZ7WOE zw4Gm9#P%&20AyjwY1GdhHGYi;Y#`K}8I<6^F|knanCJu4XpZdrWLfvgW6 z1?)dwMQ^?9lxm8m`*rS1NGL^sbe-tC?|~GTMxxU&CGX#FZe{)IEd!}MCMc#dUH@CY zF(kNEbMrAN^{o8m;%~vaHz=+?wJpXtol#c18Nk;PAgho3FRmg68-_z=z-*F!wY7ztsSmFBglO!-u5@WmJT`rBtM_%v@k_8lkuOu`S8I?+DPK!kOHQ^XuzN z>#>N~(|%EJeg(!f`@&qxtEjI0A2;hO5tW;28mJeII@zVf!4q)UtxwG}Xa8 z_T_g$jNyTU-9-7th?iGm28^-jtYgZ9WD>pfqzvv3aCgMmLA7?@OA10e+3Bv|bRSV8 z3c*uQsOZn5%g!{h!2A}iKmm=HwRG&z@qcO?*8ohv`8IfX_&`djq>KM6sCKvcaUr{f zn(4`LAT{Uxya)_M10X{MqeWttA`L=xi4L85Dcy?WNPZ!%c{7rhW8isS!(RJ~Fxzc#x?4aNA$5P&OT z_JvGr`OG#k0C#``#i^B+IKcOXI6}Fz?AXmKlmT0*ans*T>|DutqUA7C#KKWDxT~ia z?_YTICIjtryGyEVc0e0ELU>F&A*{-p;UdSD-S^aDaZy7?wTujN(L=BhFDXtY!<`6b zPPQft6OxR>pa*Y_3`5%oeT>3GFnlLamh;jx;Ttg{D4TJ~pwINpF8h!{v)$6rw4=>5 z{FsN6a&nU!QobC)c`1!YPY9#fII}YPIsXd%*9s0MO!KAd{L7KZ*G=P zIJPkbu`w@v;aBqso|y6ttO&=~axKW|I#s5|^doKwl%kP!ShWCmiO}OlSyqrxmL?hO zAZr`Y9|ioo$q3@S7?2UZP?soCS=48RgHPWHj!jZW$Uy}pwd!lKL2h<3#Nc_&lM|`M zb6C7%Nzm4htU#EZ_>?@IZD0d0x&~Wxrj%l^bB-_NfpSg-uvYyb+EoL+;s7g(%SwA8 zUFj@iBU?`eXr5;v0Z3X229VsH;2U@G9rkM|zV;)yj7OOzVWaPUPQs6Jiu;SDe%5Uo z_JL6`6iVN_GICx-{9=?G$}TNPwwvBCFNJ?-Cp1;LAWMUJ)t;rs?QPU#Ucff4Xg0S8 zsj@%1pUfAO^(DY1?z1CqNz?0fny%lRyRj30S8s9%3E;upeElcVb-#Krk9SC067bOl zP&$k1L%*R{k}Woy5{EL6=8(I^HmJ5Foyx`o!!@Xh=D+DiG8glsGC219v{jzfKcO>$ zv}a(AIj^Ka^E~%=HUgwNnN7wNE5#Zn*YfLje^HstY?`)|oWWAn2gsnEAY+S2O_x!I zS8@YljHK0<0Y2m4n1%YIiiaQ&BK?(+^Uu7yyN{3yeP^W%M^yJbT+FPU8Mq38$pnvE z-;+joFB^=8^&Lv`=HP9Y+X2= z3#O?AV!+_iz=1_BW#HbpxXy-i!phCZxbPIjJN`x@A-sR$!^=CEM^GT&??7-8^Slb} z6ef&;1@@btM>~>E{s_bb`1EPcm;iJ6z$Q=)3gDco3qpGZTT?n zc;L{u?bwB7#5Ov7!)P^FAhwsRVw~ftt$ELOz0W!BC&3HxnH~cqGi=H{}XE_gN z4#=XBSw%6EZ8B&;L@#$N5r24=25?p~WnJ&Z>m#n%nXf*jTaxAZX#}bmZsD?ATF&z` z?VgV>r;-}`%}f#m4IY_ik4ZoeeZLnoxerCeSGyTX5^bIHm9mPXOuKZ<=Oii6qFN*r(Azo}_ z4B_S#W6@2&F||)$$rBXs5l_87`_dWuv4Q7xJb5*Guw~ochV*@4-c>>Zb&&9PdC$0Z z%atINzi|_Cqy(0$5f-ymMEWW~6&*y#+2)xC$B#mGx*n4mW45D@Fr2V>@9|cc9pgix zbp6IsTp-ptD1#>b28%}%14c5dYa~=CE(7OYCPG`13&sV`D_2OnP&u_#QAfGwsKnvX zRoYi%YpzY_xgfcAnog6R%0bnQawr>-BEOZgR7D_I%0<36RaQJTA7&fn&(2v9v5sq`Ltg~5jFA7 zn#rc!!y@_wfB%xZ^hA1ARyS;AGDF`?_=p-aHNE8df)V&4P45t<+RQ4~XC{_1Rc@fZf+7Wf8I#^1gciD1 z#l_$%BSdqtGKHVb_3MY(@qvcQ+qv(ZpUdN+CWHk={P0(c7FvTKc|e^YCqK0DVyIFKWU#V62`xMamuF<{jb0q9do$vE;OR(KrMuUkF~~s$GhW0#|SOgH#5g&jsUMc`=xm^Lyca@mk;_2^t}vY`%`nn)=N-W`!5o0@6lgleydBJD)wEmyaR-q9^$Dv;Odgh0DvS2WCvh5+9ZM{II*m2;dM=B%w z5c#k-4m=;T0k$oQq;mO6iN{@8o3_sK`30Rk{&hGi3cbcqjbL~$B1BJw)>%ITjKm2C zixmb3vIVT+mc7?3Ej)^(8k+L<0n<(jxH7_dzBkNYSs%OJ?OQ;c4-Bcl3Wjp=g*vA~ z)ew1{LWM&YT8|`b6-v{IrF-5d&62D}E*k8VU&7REfR?qOnqr4uttS)-B59cc3eugB zto_j3A6k@sVomY<{c`2rW>l6zN3xY93IqK^RHQ%P8{){*>$6E;i}t0#RM-P3GL2tBMwDf!m7SBo_i%C` zM%|l9U$6{E`sZ3il}R|5;qE74P0jkOT!_>?FEi5&y%)v?*q@f#lq%N2Szsy7vu+NW zt0Fw84r77pFOK`Gqd6X!Pnm(_u1!=0SwDcHuw8fi1We1 zA%b24^L2~-KvRzkKwh4FU92Wa~-nbySs~2s-ZTXSQ80J>KCz+ z!kb^>oozn%w~y;rSDCYQYLDlmg1gn{cNaL-)HzlxPrI|TyK!@pIVPQ+&%tN1tWJ-2 zJ-p9Fqy3+7Vu0iqu(s+!kbnQF38$BNlqco_LXJ1Xkl6cS^|mpO{pB%Y&m=9xJ?gI7 zh8em#FWN&?A3%fD`GG|)BXCZI{l8w?oLDz+AoM+Jb*EbP_r(?%5(~wdmR1U`UdN&=r1_`f zbOVV6TD-t92XpvgT^Gg27KUgf`vo=p>=|T?wSDc9;i{?&!=VJ` zFr@ozH~J2Cx4QX~!@Kh)Z1a!Un;)uU<<7r%hTf^WozP@YfQU(;qWG7pI>H1fFhwz zgX*GRGbLa5yotvwc?lrs$2Ma9JP1{;;+{SpW-6c9jrH~0Rm6AeQ4#?FqT(vVW=2ny z4lE)hp}Ff;V79Vc7Fv7E&UTG>B0)O;avBE889Y|Oi9}Kpfbxz`{Fhd zh$P#}+w3^!r+Sb|rY~4d&f{LF5G@y=NDxqE>OU{40EVW2@x+LBfE%GD2xBlt&}88-$rfY=O>!yYHF0 z&T^@W^FEsgEL3X0AdQTXAvbz6Sp=w6GGDlWDnXMsWJSmTWV;BAM- zTd8o8F%*Qsz3UKnmd+M<5%@n-TfMOwxnbz@KZ`Y^%Iyss2d!k8ccsn}^yCYjJn}%l zVb~9BvXwrVU)fn4_pi7I3rPTK|IReix;f|T4&jYUXh(1qczo{stFECV@)*3i!H!9; zpcn6Rs3FZ-54A|G(oq?2zV3sGTIk3-5y$Eyoj})?j!3{0h!V&hNeB9^WL{aZ>gq{SNF- z6KBne1cgI8zdjTXPVgO1xDdzH95lq#ljJ5z&Pgamv$9p<-Kap`%KG|4B8Z^QvbZYh zxDGMfZ@h074;Tphksq;wyOv%#&c{$)zQ&Oh;ph!2KNwn(2v2P`#S%--#2k9Y6zHi@lSRDX;OKg00b=X2ye%s+gd4yOlj2e>XpveR5SQ z(NFTqKsK?vZRpc5N91RdHB;ch)~9lZq}#USn@qRDmgm;viFuj{kAH_PsOH6zq{>iCYr)lD1*azj>3E)!bf^FisRiEAkH;Q&yWo!RC!Gcng^kBttmw*AY$(TK zwZK`4?n?2rN%k65M;cmNl0EfiH87+s4H_((4}z}0ETTP0)!t3nvdR9qq`}a;QZcF2 zi3&NX*7>?K9#cfv>&XPzaD;PB!A8C|!=F}sD2N5w{D<^fnk;f+Hd};(UgD#oPO~W7 zBjB&%)_7nQxwCay>Wm`fdO3md)@5AiuSJi2#bi;JCz^w7KHVwLwsMZt;+M;?d6ap> z#Q(ik8WGzeOrPbitC38RgV&n4H8@#JuzM*<&$XN9YcCx;>D|5AUW6As@+~vh&A{f= zyOnby-Fh3KAzV6h6^6u}?7N#S9I?;2tGunZ&tN9(F;fb7>ZqfU&o(m7dKRdPKC#vP z6I1P%Pe9XuM0o@L%=zUm>1waLvIszoGde!gFI z<(Odamfv#?*BqrsJN7gDYfx<{Xd`wt<^H~mypeR29BA36WPj#d^rfOZDju1^w(J+>9M^9EKd zDy>c-3ftDoj+>OP8@KU0w&ft!Z}s>EqZmn|6Un9Fm)mc9Yfau6#iQ(uqjvqJ?h~Pk zN)(z?`+?9@$fG<366H)ZLj&EOM zQ@FPAK*QDCu4KxBd|8?T`xDli+yy?SJ}1GA?SJW1Nea3eEyEJnrS8#Y=;O zTUQU6>uP&{x4K@gwACE{D2%QxP5^EblQKXKInt@1QGCY@i5L2%+^{Sw54}uyt*y*A zLb)8`(A8&owNM5~qG4JtB^sNFmWB4t#V1dHWapI^f+IO^WZvJSE7@!Ba?lUnI^y}Q zJK%+eISL0A>Wz(LS}FcwD)k}p<-xgl*IOA8Vv)0(sArprMKH{{WV!japXV6oO$u5< zvPJ&&>H$biGVQ?vH+0c~JjBf0SbS%54kC7xG}7>zKz^}OCkNM6z3sUlcL$Q5ZAaVy zTD#fiTu4jW8!jcxzzklxr+vyZb)OB60yoA@^OYJ?gT@uo|JA zAUP8rKlzR?#QU^vxtosFxxqa7SWo~q=c=d7lz|_mp)A;9O;$->WYE>$@d#7?I2R#X zQLp2-%2ss6Bt?n&I5#!4c^SFQ$pJN@cUoP(TM{Qy@9-vFC3+IS{yX;U|8Tl}7J$hm zma!XQ;p>;4W5po$)J68Nl=&6U=6D__U?poh@?1_Jm@O#W*-g`Vi0-;%G_)Rk^j7)W)U= zc=nFPofoDc^)lu&+kT9=VuAL*p}b8cLp z@0{%im#eTg0**W73a!OFq6tu(RKi?3>zcJ znZ?rYH%eGth+-r;0vW^UrZOV7L@P5AONJ5){-LeL74Q*FbHg0Cd{lt#AAwGnp2Th< zIrve^VR>`&ZPJ#o2)RTSy!I_iv%UYoF(f1hi;9}VE1)dTO>nX-+-Wz$a3vXghCxu7 zUwaJR_VLh9oaNjjGip|#id$=1u2eED#IX?Qm9m^rD?5H z7-O6aVhV%Scje)PaeP?>vTkF>0)HYvGsMx90m^YVZuY5T+9?A!SnRY|cCeG<3R>4C zi~xrj(k+W#Zi~o^)qAGald#+VwE9lYu``4y|4?L6Uof)!<1G&F=_3iHZLk}kv#-HS ze`O^w=mImQ3>{O9JP*LfWP!;JS|-_z_Cswa6bZX)5AC4lKEi|O3hC393X8y~Tmdy9JLR+$p2n`8I3aoVaZH+%+XCHwxuANdv#h(lPM^EB@4B0L&N)U$* z?je4lS%J)VctLIcLk)3%rh&c${KqKXCSSXG- zuj!v4`mf4IkIn}8xm8TB?A(9wArcBJ6BOtx$sQdts_>s{N`dt*BHA?I{}mL!oDRAs zWmIC{{eN{i$>M2M)%|x}zz}6revQU|)r3#wVjuvjVIRa*zr)%^6{SeR^O3w>IqtH) zIelg(6p6~8C?Cl?M8HL-1kDl7Tw^- ze}ts0J2+jcmqsN*7*T`bFGc|JHsHTjIAnmpCY8ZR&PxBaqWReyXck|j_TPC#ADrhR za{mGKKSuOJfiMj25woKEpDFY5o~WX@p=8d8|HtpI+EXn4Fe)AY56`UfZ-sdSE&l6; zBA-7|1GS}kz1IJXJnj|O8(U-Xe`RsPRM&%QME;FM-E7qqkPZM{7U zW`L&tcN04BRp8fkTu0R_|CK1D42)yr&S7~JecANPfFR%2xWB2k>-kL4|AKsG$solc zN_sDd;zWKsVM$yU^d{tJ0^%irve4<9&`#U(US(?TtnSWlrv;<+-FD?P=bu_+Bt<5` zm(vh$ME?*C0aSKO{BMXW0=<0AsE5BW@PLK-MBgutf9|{y3)ZIsNcs~y4Vd`UM7Bmo z6z#=2L`L4Wyc|-s>Y=@0SY5-S<>21mDz5-H+mza3Z}Akai~}%cShctq+k{qxpZ!hE z_o-Aw%4E5lO$oVSATQv}oy9)sJJHjM8~JhVni9Vgp76G-9HMy|c*qDP_JMoDYdZ1b z1T`RR7{7PcJVkvRk*n;M134pyWdGChcw7r_5G~qMjVPtCmAD1PQkHHDJ^=6FhU)dc zTEIocAlhGDt}D?8soRy#J>hS@9=^~>HnvVuU?BTFJTaPH?zW)L3H=6R@?$W6zZU$A z^a=^C-bH}7nPjektIL59JX#Qz*v^d?`r~RQm{`N`TNWn{%c?1+ zy%-1&JAISh5DPdH@UexNZnO!aXP)mK=38ep$_Mle$DOPGkjt75G<<3H1)>gaDPMvv zA-!24ce?$0IwJ)5J1;ujSV92R3PJSkf37bpReV1e8lQ$IuWi>R&bMB>Em<-^(=_Jb zPU46vVc@au$MT*?Va$ta>j3A?z&$eFAlxujViAlYI~J? zlE5M2jd~H=vS()*TpSoGo5p7UzcOO$R!mD1BP=vKj}{v+*}A-1Ha$eXWju{H0(zVu5(`XJIIgSf5Co~QHsYt0AU-7j3eER>b$uu?c{E>axC2%EV+ zdEwh&)#iBSHrbKjw7uY5!}jFCg9>2v5TXm_nm9Q;{NcnRg5iIEb-Gx8GCdQ}4U0xt zJmW_&k{V$M)D@0H#$(~<=nR05|5uMA0~A$-0l>XzG%1%-wm8TGJFN!QGeGa6A{ZsU zGlnJy+T9TUg{a5D6XW0o7;HPhkxr3I5EOX#FBD#jt!GwA2XjdcITm34(?N_sTmgqC zVlZFoa{TBopom~Zd^sl48PQAgcU1(cKt0^4N0=A@?BY-XLn580eONrm637Jo6-H^|v&leGsrkLp0TRywHI$2=`2QaHmQo$yJwk8u@bJ=N($SoYngue% z%>CD?3}mK+4Eo~)r6v&!=a|E5t7Ncz{6OW7eV};Xo)k{B&kU?gy^70(HEFp)if?WS>Wjum`ODM0l*c(JOFw3auxoQT}#BN(1M zh4U=jM>Dm?S_H^q`%OPZqR~P1!ZmJ@OtEcQOA{HO(L6Sl=aNQh_IcI?h?wsLl2Nh< z2MH{GxyhIm#aM+I)%Pn|_^M+@jVSZ4N?1l=Uk3VQFQQ0q=m1}ya&39!%>q98T?Y5w zw4yqI(@_;&H~&gIeN@wYmnJh>0!BTWI^aC?l9>ywu6kn^#yI)aZujUp8 zDmPb_^R3|~E-UCwb~b<2H;5yOw7YPV&LSPd#rQs$bOR%Te~I{iXnJzsYYB!Yo?kKpIAAB+ft@O2GTS&Qy7gz5!J3f26Pvtxn#B z@jSt-1zj@)<{mf0`8pXyWilkOx5cVoCL75is-AfwaT!la&RKaoOq|WYG_>6P`cQ|O zq#JDh29Ky+Pl)Pkv$Q@ly$ykwj(3ie(_h~HxY?nR#ovrSZ%fvI+7^;wJ4eE4Nu7GK zlK4aQbfv<~(nft#Tr8(E4 zAW>Y*C&E0Heyj)kcl6;9*C(8Yc5eGP%;WP-3h55tvtim-zUCw7n7@fQU!=;IIIcpw z9Yb34CBUQ@iC0OdFO{p4HpK5_NQD<)aFGi3r6~`x^a%;m_ZF-3g-qHe_jTdqu@_Jh zOA0&m=v9*l_|U?T61n^I>xT8L2HJ-H2F-oUt>QeI*{Y{d`cPkNN!Nzje2I6vlYLOV zChw5{+K_L0pl;XburhpGN}S3_knrO4^p>V`7E$Lo@{aiX3ezeU1ZzYkgfUOlV29J7!r2P9~MR*uO2%kO3wj6`l#)ZAQ6d zU&u`8Q9F(fiXF4s-7jd0O7-~~b5eU8$dr0Tcqa56(w^!$5cd6CdRCiqPh^xz1h%&B zm%R{ln6H*=BQgc~<5;7h7cTo?n*@2PfAx3?547iy;X=}CO*YYz(2^B|qWd^2DsrTX ziAXa@|Ag1xw#^Ia%CH}L(E-vDQ}0ce)+`pRf=qU$H2$S?zwWkw`$1mG{8L!_>h-d4 zwzB&*lJDfOFdS3*_@`H7WKkcekuqQ=k-{k+x=d$d5vWGzA;>KYK>fobfeO-f z(_IS|w$0i)$9UR>Kh}!lI^YPIX^&cxyEzim6JiL0n@MxflcgBJGj3pe7apwP2Htn< zruKJj6tNo)_RERd-;5}MsVk}2|N5Y%3EO^pcqIbigVsE&5c7L*6O*7~bK^tVA2`3g{dq>8>iKg6Em&WR(k(-17m=iW z+wJGc?Z0s}&kr$Edv9QEWUxo1V%u`B@c!K-Sl?1 ztWH9(WW8p=X)}!696m`j0%8%kA`+>p8jqE9~l2X^708kk~ z>^2d#0nsVdHkUFneL@3tZacTNHX%EMxdv;@h3e>!#u^v3RZG+vA;glTx4RMmzL~rX zL^5$k2Ba~E(7X)J#_l4Hg%pvWDYD?=O5LOeFU#%+O3}pG%A!T`2ufN#E3H_1Bq!)s z6BY#$&$stR184St`G^Ze1gqQ^)yVQ~1Llhv}OXnlfxg=Z|bpqC2R zQ+|l;lS#+(S^sSHr`4~HjHLPat~nH)KEh60x5xYY!;_7yXAAG)ViFQC67vN;A&+O( z7dqIl<<8m;vO-Qc-UAk7*D079e(nW#YUe-Nd|7#Ee^!tHxD1zAP=TXkK(doU`&6F9 zP<|}qUxedy<5@M;yIPU)(?XS9-AB!N10`SBtOlN|j%`2J(~d^vnt$o1O$~wlP@eS! zXVle~j_n1f%%ptE4C;D40qCU<8mpG*hpFv_+prj=jMB!)=&2;B9$eNMzCR=}m)N>h zxV30Y1${T5|L!|=XY?v4M&e!pCHL&>0A6Ik$?2!<=o36lrJT1h@D|RJ!z_HHDsjVE zV=5aw5#%oSh~9eo@lxzJ$I~-MQ36O2;m%mJhb2q^@{kLg+=XJL!H}R)+PCezk-J;% zE=3v%a$d^s-u8)z_T|BAVS$RrrzxRw!cIk zXp$4#-|=$j68F?tZ6YZt;lRStH*gO3+G2`5N*DHfe!Rof-CBDukrAdQrfbzU+aE~N z339zvJM+!k3NZeT@c(O0;zTXl^qRA3euNKYz@4HPGOndq-S;@ao&jglBo-44RZlF@ zMg;jQn;L0+eI6X^C`}8x4Sx3sVeLg{6IRIWf_IfS_cPU_0PB&6`_O_clMG(ny z4W-m729re(-+#msPk4A|VTY$5mQ1pj_184YuYpNb#&U(5^=zQYcRAB$u9%CvbMD~; zVx5ev*l8e*EfwZZ?vg)R^FeZK?Of)@YnGq1>hnu@V{1{fi%A1^3^B)HP~Fq(V&WaX zrt1-;f#$b(DU#uzQ66Z@s692LkB6QA*=A?0?J@$QJG9t6>#T;6 z0v5zMJV}Iwb?O~{VK?XGDyWd4sz8ghveV#A)`T;bn=uxn>Ykye*kE-&WI%z#U^A`O zaFM06l$}y#iH2GT?o-Bhf|Mr9?yoI*0hW$m8`okt|Bfk2_kHwDX#M)e{19{*+d*_d zNq{*es#YM!)rF~Q5MaRw;9gHtv23E!P_BD-HCSyy^$r~0%Ph$K=UvB7k1P|F6~n7Z z+cD6r>W^3^?g!!%3{9~79!tyA#gElf{XZtcK_R2j`Nco#$t3e$Ia6y1|B*@+voTJ` zUASDuE9>lS4~Q$uk&E@lA!?4i?aTIxEvKc%yMObC!&Y=3iF`nDmBFe0U1{9D&P#S& z(G&AyzvR4V9kEg*P4vraoA;y%EOL6ps4<_RlT;pgdEskO;WZqSG<(Bhw_FcE-kRs* zKH`Mw`P6=jsvn}`;>*)|3O8Tfbe~x}IL`$cu~8E)h&g|=|KT4Ev^23HfAs2@&w9Dv zIN#W~zu&kkvcGh3uG&v5AC4N`*`F+tv=&?bV)*{dr(OKI;s{6_Q$v_;v*kxXW0hTE}-c`$mKjsp$R0tUa)0tUYG;wgK)g$J64NfLpD{q4QDKE}6wDBga2oP7-z?)1CAynj4* zs#6CyBf-Qp!Jd;57D*Ak@!RLhSe)}zLAyT+$0);#PPo5Ixs0M`)2!o9{aio%s6D_@ zdy?TLj&;~VRbEP;dG$;i)>ooDb#_W+h>conE!Et7wlUPWKcQO~p-A(pqp^RLNK;cb2Go!)!g_i%C zC_`~5btTOqgH;a?drW`i-8pU-J?FVqbX*YJ=!(+V0=z!;RiHXMltcN5 z4OFA5CG6T|2wb?a$=5pZDOsq0$gKB|;|{j`fb;JoYYh*Wg^0=l&O55CubcBQ;7-9! z(40EoZ`k|pyXBZZ2Umpr*-w&oTvByg?R0zsV{QWKYg3ARm(@RmJz++DqE%;RcofJs zLy~Fpc%Za9$z-!TP6Eu5D>0mpV|o0_v`?|D(GyK&_ZfkM;i6L*hXx^u@@YTr^*#Vo zHZH$NRQUb8Br+9ZflX1gxb0t#X4oqLS#qMuaaCwzDJSNK5LyNrf9GYk2x0NZai)LT zYX-}w5g@6zp^Q!kL2Vk^6K$9{oy6%3Pt(`gm0%gmM;R_`O*l z!D#ZANI4=S6Z&Mm%js{O{|I^fG#5Gi?)P_h2RaQ+*cJ_0x@^Z*e{ErIkOkHrI%BR* zlkWRD11GTUQUe!7Gyl~Pig%ztYyY%-d(2L@&WyrtIonmd*q}Y_D)W#AX?{8AW3*p4 z^|Y}%!_zkY>I(VSS}gU%z6bk2MbIIgvGoQ9cPxT;f64+eEoFnQd5&nS#unTJKI+l} z*#5C*Q?^y6P@+1F!89YVa2r{HMJwn44}zJzR0vCp@|tm2<3nu$dI{M5s9YyolB z2CPx*q?zu9`lASBgaXtsa=a3hxJCb~?o9Um$GNc!b_SX=N-%mqkEZIovH`*iWseu@8n?pm56 zMs3DJ)ob#hMVmUxVmncrN6jt;@>Kx@_*R91d4@m_8{jYn;AamDVa{EjUK8A?Mgmc( z!nH_lKP7l#Dfp$%vzLb%8V$7IG!q$unU)Hj5Nm^OZ^E~KF+bb9NmRkQ-NECUHTh}9 zSl;I}>C6bFb`Re^@Oq6ak$;U? zVl@zdoWmdHt0(gcx8I|R*!GLq<||*arW$OdYTjlPK9K`OgK```3wqh1e#$EXJVN z|2Zk8f1R!%4THL&wJZLVKpDv6!BR_?wuY;0|LCx`ngV~t>*1>J!kB!`dj0yIv0xD& z6SL_%KlD|mb*8U^C`mx`PvV-Uy2kz5YaXI5e#>H#o>+OTXM*Kr3z( zIbw1WP^*cp?vDD~=g`%D5>3^11v@qFkb5jbaf?Z}{yq0b{F)TSFvx0g{lQn8-Vqmj zVFQmCJgD{W`hC0PZ?M^=|0pb&%(y$cSJNbuwSpTwPR7*pxQ;)CDL{sbz$84 zZMF15!hD^$jJz@M2a`LT1|3^?OY37h0p_YQBIksGG{aH?sK$1vD$SzKZ%px07p~!b z$7P96{Q3D}%o{NK4V?h&xRN@otH-9J3<3SkF-~Q8o7$EV)g2CPpL|UN9RXr?q-`B; zZ1jF(LcXXqP$yBsrw{QlBUzPA*(n7wWrQroUBg7|e43}@4v_RG`hf_m8 z@Q+OBp|}%s-#;^qp1OU3*Aoo?T409$`wsFkMCR9}RNrx;M7&d3WgBMG0C)sm!PYMM ztK!1tmb19`!foy4F)436EyK)zr)+cY2{bR9BT>5M{i;&E;-66il2wWC1$qLZ179? zN+NjvfVZA&Ch{iP&csocHnCEA#Mqe$pvlNlwex#yDFoyMyp;0)08ExM6?Ki z9fwuKK3l=1H5#=!auzu1#h5bCYk!Fpz`2uh0ia;$o^pybg zspn%D1c4URCc|_XkDzd;M8lVkI1AmchhgIe!lWI zB(iLfiWsC6w-+^ZVi|6<4g=w555XMNL*{jG!axA3E*Ve0#>kcf&avgXKmkS)4}Bik zZ4y+%@A@dUd^k7PK1VVv4k7Y(c$n*l5TIvF8tz3q_TXgBd$@xAeBW-s!$#P`aT*{U zl>Lpn#%atIqJ7NRz4mQCucG1*v0Qei9yaMGk2BTSKrZdpFE@D1AM>8L`S}tx5_C5` z??ib~2=DIdQ%REN#~M|9P)N(Cl^KOu%nVjw{9yhZl6_T$u~<1;)HW{Qx{Q4hd{)V$ z0;NL1BI-3k;G?yOGKfIF{4h~~M5W6(sD&hB4p!lvrR^2!B5d^6XK`cXnRvZ1&D;~~rO zhs=d2sTEM+62qb>mWPr+Mdv_K0ym#sQ$5D-mnJeVhr!gH3&5#z8+Un{6FJwwkO)dY zYv4x|5yFMDbyUPyR#m#=`hgGQPsC=pVPSdqf_2%W4%R8GNuh|Wz+Uvvu~SIip#m*7 zq~tt9xFGRXytMoL7u(1i@i}K(4!F}Y@hhwq&TIwqGw65ktj`{UeWpvPW(*Evy(r)E zdYUa#5Bg}`vo=!CFcc8}v3!WU1sWi+75wh~A_zuKxwhi{D*E%lMp?QvqoKaLaQ_#l zjM=>GUe6cm1maX~b!1rnD}zBSX8=eV;d7wAnTg4_Uss0hx0z9g7l-BL#JdZLzPxvoCv5$R{x3tO(S0yn&TTE9 z#n>yaBYg`GpJ{zjOyFgceOO2J@T0_kPpF?5-kW2ZE28~v_GdE&%(^dwllu*w?Sq4j z59L=l>-+!49vX(6$4AA}ATBs2*|S^ZeH7_F8;E_0hfBK z`r?r;dI(3V0vm7C5j#UJQMRSMN_|ttN3lLPO~BvZ@r;-NhtZg@E!$`=cH4Et;!Xiq zCDi`8jYd$S&=U**vpDg=0vJ+T`bl!14ut`bnxN1Zde~=@(S(90?TC=vEqya9fHQ(CxFgE|T?YDTc3 z?cJq04Zs;@m_L`+@VH~H;RC$kqaF?z_p8D80dEPAFbl&g%h?DT%jcPRUR~>9i7CvE_ftci%mDOT6k+WgC zkI~z3Q{I94#I@5r#JS5!inli41#ieq$$1l;H<-hO0qKq`_A~0U44;EWA%ztPg<6?? z=8P^D8LRQCrGC26?~eMjeA$VgmvxG9g1SeN)u*GAj<|w49egOP_?f{{WA)bRs7NYJ zoZaJ#cq(`4oEvGsv}NWGMY>`*NS-WAhNW1Z;?2WAP%lVT*C6!i`wxpjz7;F-?l630 z)(dHT0duS~%?b5bMz&3SVIn(cpl4x*IJW@V0HJI!f0T(N!|c5SEsc<6$0|z#%VpUP zr~>0`Zm+T6HP??4`n+mY9gtTIg-Uo>8P`UKUF(;B_ild;VyiG`tbQ*;A?e)Q+g`r9 z)R^6sSB6aDu(m}W{N0h!L^cvDw^0GYV8nvOEWCdIr4q-J*itjC**&*@9MVM{(Sam8 zX7mOjQppMre7nEO3>fA@U3l0*e_Hhcrh^VXP-IRMdI%Z7l=BgDa_XXSbddReC~K@=)?W;oq~*>Q|@THJmXY4gvI-*T->Dmu1)Km04} zR{h&ruPO0e-wcyKnbD3NUP~z2AsyR0Yad~8F|ups>6gEff~mS1c+e+u^)xNd4wN+h zuJ5woZKucNe0T3>6XHqPfZuwtxMjqs<2=hxSv3fb=lw(j5XJlAJb7p&lPX`_Ps(uO zECHP)g_8Fhd~3hiR-pE|7=1(SbN$@w4#TxygI*(4CbDFt;Fx2L2tR6^svWocs(ui|s0O;

    iNJc6nUWuYau3>;wf&*P)}#hh1W}}U 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¾nt9Z>#u;jQlWj$cclWaG^3 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�MeC&oAFxB#EmXg|OXQ(;bI|8FY|2@x71WvBQcy@4b>nnM{ z^TA}-6UsW$!pUS)YT4=mTsJ4CenaK)Usb-%+CwVp&x>QQnEmU_(Pdrp0^bCGS~^slNEw${J zDr=e%FSXM7U*w?Ph|h};CdYvJhoe-2cK$7)11JCE2Eq&n3<6~0*k$sjC8{}&?;b_M zC*H8Wc1q%XfqRzl*ALO^>vVU>|EP*^!Chkz!&haytvwfnjrO2`>#&Zl&P?FsDk+HA^S!6A3{2OZCfpDXie;Lnk-KX>Y$y7KxcKk8YCJE0a zR8x$|sQgy2p(Kt0e=#)AR!cB{mwqD*9Wy?KX?m~+jq(!ehx#aXn$iELf{c*enC?HZ zX#3=}|KW1hpMZ5w^xGZe5Wg(@ z=n1Xu0VqC^w5Rpu|E>fbYkcJ{)Jh42piI4_Q6{E~ET5+$|Knv9^-ss#*B+ABhP~A(0|a1rq|Lcp0_E69ozfy@VPhAT z1b?ktn0QQ^2Jz2yWLxPOMpkR`XpF!AH)o4^KyzGup3*e6^5#%Jx6%LPW|+Wud{>;5 zIK9^T)URKk{PkCf0&EIgZYW3Y==GMRwTLr)CwhLt@O7klz8fQ*gbttlV9&YK0D%OI z7U_|s%)~1&p3vnsR1EyrGa-gV$KPo3zv+5u=;uMF(@-W*&RxtnGr5Z%cn>oxoagEZ zjB2_Z>E_{|6SJsccUHZqN8VQfRyT$u|05bzBi-Z4beu1q?8upDP*w_r43%1+@rwO_75zjK( z<;yYfR=)-@!2^w82_;($O&hwY6CZrH#tDo@UgeHqlG^;|3($BzeNu!u`2G{fkuPA1 z)!;SR&`mVY;$dl5~XR@58?hAZ-X+01DFJqHxGmks{KwaP(uJUljozua2Ly)|<3pnz_?jx32RNQT~Rno$FbM7IdR&L`=FLo2KjXHK@5L)|KYDCy#nAaP$9bdmMc7Y z$Ztz4l#Gl5gO@_$cRFkkAw9g1!u$IYoFRv=UBq|>n(+TsZ z8aE$;MFE`#W?t4@&6(X1c@e79lj`bNR6#ZR=xtIt+w+vN|w-AlqCJzb5J^GgPv48$?=Oeg)u%;amvAgld({cxuf8hbiF@BDqSr* zj!ErVvZDXqsA8_j7$+))j~8(?E9|5Vd#?3vYI6$ZBJKP}Z(j#t?2rAV@DlpV^-Wh0 z!PfuY=uCRWMxxR=p=h^?B^5`pNkSB6?pgz5oDACC9u+|N*Q>Ffy zey4Z+t;=2OoP2K-5uDK zS~f@cE##x6b(@tVU;YGl7w>_1bce3iza!L;pMlW=etRidU;kllCJD|^QJ9_|mQ}1G zQB#lU(``=W)PZ|y{Wb^ua%T1QSy_Zfs$3sxuJ~(=QHrO*Jme+NRr_4mowYxz{E3+S zk8Z`lMUkrq0$c>qbV1+iv)VjV1$)J)&Nais#j(oPJ|QKPZ;kuMi^P3><__-!D}bt~ ziQiim0*9r-R0T(!P9dCZ`B{6g?0e>Fq$H4~9H-k2K6>>I8PVLQ!JY;3_Tby^Z+CZv zDJc@DolnmXz|O0aho|$AeC2}np!wB&iwh zK_(3?t*c%ph4W|*^?_ut`Oy~&-!TquuZJ*$4bckRf_cRnZXJ08I5j)r>?KXWl(Sgt zT(7#kWZ|P+)uSmp(&8jbDQd#%xDK}!rI%8<96YKRPfyW7t}@-jv|CY0t;#^5dk54w zOMhE`uZe2t=Ymh%h}j1naScG9y>{jO@!vm}PE@~;qGK$-p{zvEZ4Yc9P@W)N6L5qI zP3-k3xT$=TieCm|W4neZs+u+~+6E8Heq)#WuyRg-R1pHNu#SzPrl^IhHp2W5DBZI`)R2aM$^K478&suQbvsU zp?ak$pt9p2#Cw1k4xFA&O#v^`D}0^g$~w#=E;Bh42*ANpRK^fSl+m)yZes9>JW1Oa zdOIH;9>(Fc&eZELv=iu>d)-R5E=SCgC+4&z7c<_8#JRB>)VCIvkI2mtEdu5Qxg@_( zY^kz=mlCu&s`&IeT=soAv;H1VonINre0%2>M=3|J+A)f&X&(pobMewjoC-b-i*++h z{`Ra?LNcTA#FY3Q9cI0yQ&%A{__M(1)ih85l|4aINn_5ZN^b;GF@?Ln zpS8(;nKmFYEi@~((Q3(;VxKHZ-#7|7G^5NS zBx4}qtKqhrdpDw3$rC8@0TV%OwW8Js9!^2XJ9n;DJYm;V{6C{J%s!CJsZ}P_Vq9JE zIdPTpyQL9=Zw<-d!UCy3lvmN;?b>nRx`T}Uf;whHo%KfapqWAfMKZBm6ly8}(pV8D zZnfspKk_F{H3@0`7n+u-xDcDVtZ+$}Q~$Z!Fr|AWBI@xkF^A+hk=b01k^fb;3q^yc zY>^4t=4SY|td}jqDpL#eXNef;$CP)e$l=*KL&mD^CKryYP}J zaTLk(G7H}I(=2^lSX)$mAKxX(_sfcufzJ$%_Kd`WYW?l#n5;d$sXTdoR%fegxEc!? zWbIzp#oJuX@wI1=YmKemhTwr?*F~J9dHl1mQ)wzQ^4;0aZ>qiwtl!F*K>db?w5Q;) zWPhLWk#FnWG*&TE@0^?TA`xr7{*d>8lBb!#RaG1$@VK%Z+_>fij2Ry8U(LrKoj{p5oXoMB20X$LO55KY z;Yt|qJ(b>{SIMF-Y6e00OvCskOdSyNFZ@0*0`d}Y)0LFzZ{I)gQ;$c}aY4}Q?)X2R4?J#e;{3VJX z2jCpN2rEMj_~DZNW+8rlD%P%L;7`gIvgM1`i&cZKW6l$~))L+BG26eF zMU<4ETlPvtAVPslxsq@hUjU<#w}TvHMKMl357j#jJt+@5q9Bg?|3BvMsu7D0v==i{S{ICb zL(FC6Iog4vuajeb?Z#XanQTwk;|QSK5>;H(cbha+|NVQ}01>sU@Va&} z|F*zg7Qo)%;q_VBo^QY~5!I7R6ZMwvchtahrareRD~NJ%5_Nsg;#&KT<^AP7?uqbw zbHo0SLxUs|)mVe0D8?@bIX2SgbYe{FpF*&1e9o2;qj;*mRU;HG!pHEU#>E!%zLPXP znwNHIQWpQ3I-GRg(hGM8D@=Wk!4d_q@79eT;DwfqZ*yx%W`(`uK>_NT?daK!mG#03 zp5rO+;J)PQYO))h(&aHr@6zDv3dHdnfW93dL^zbf3k-(agwe%?a(qb z>C%^?ma#p7_eO+>XkNfF+;R3p;r9h0re-QWL<=e$5K>xciI-VnC4P?q;ufcotVVvY z_yMh#Jefa_N$teq;&N~A`$mP~t*XU*`kxiDI`U6NVksR;JpfN? zoA-JFQ3RS(WC-sMh@}u{(%~UVBZ*V{{Mang5-PSJ$KpqY>p3j9ic;-qr+3 z99=yHQDrshF6QIn#wbYK*_(5Jrd5#-3)WL7O7ht3%dWiNO93_8ml(otN1MgjdsB=^ zN~$&UX`V<02dwHJHL_|df5{N*N_`FwOIANYEuqn`JHq?hBUa+?5&?^;m)m>bTXbhH zOMR*w&4X$x>(Nz|8UMBTtU#QS+%7G`@br^ z2xMAV&-CQ_p?g--LE57i`@~UV2GpD?s9Wn_u*d+}OX<)P9{TyL1EgwxT@wQXX{7G# zav^0qO3W(T6k%B+D5yD3DX{3gYWTtihIyL0F+`Rf9Z+rNE#$lO=FIHyXHU79LGGp* z1{omvj2JodW~H#ZMYN5zN&h=JK!3;hp&TU{==SSF)p$RRe-l z<3AQwZSweC!<-i|B#m`Q$@|9H%b4N>IWjGl>P1M7vPO6 z_}O#i&(pZmGo!4Rc_wFn@7d%HcjGGKQjd`bOZ#bfUIxZ074Mt(Yu>oB zH+o?%{4R?mTO{)_Lz$y<=)Tt9U_>nMHKyIjns9OiS*&oGU$sU{zO3eHc@FFzSf<$F zNj3D@O)%n1=IjXQ+s6Rmo9J_Ca_tOg-wt>(K)&CGt`xszY&j#1NO=Jo~u*Ua!`V zkT4#^4*fBT0)iNKWxlp4znYFkU@Q=}Sm3}r3ZBP_LiVgiGIhs~t?b>7j*do(I4?29 zZIHk-W3<24b5acaRAUYQ@r~TgABD=V>aTDgOlv0o9-D3w-Vd+4G7Rk*h_R2DQ#j}^w1EhIr zJ1zFnos2EE*8ko?G6tfHb{n3%|5>=1EB?v?AP<7R3Blf#gscK~md_3iQ(fn6Z_^i+ z93sRWBieL*~}jIFb4Vmac^af(1Vx$JO~pau?z$Pk1+ipEjfcY3c){JrCB#{hF{! zLOb&`qE;$X4IW8OQy1HEMZf5Ccb-{DY_~7l?e)%vl#}!Ds3%`$ntanZh`0Rb{5Q*w z6u#^m_VctA#r)N`*%w)GWsi7HezH$H7b|F4+i@cEWhCBpt<|uopzGCCw#Tdfm5|38a+iRqh?WG}2?n5os;d?Yn$w885P zt02+C@ZIeo!1(N7NiZ^TnmghI;D^D_-?J64r88Dso&iUpc2mlPmVG>7jLHnfH{=Jf zd=~!?v}oTF5onJj`aGI1&ck?LR9g(&yk64Q;@41!CRHqHmH%jg`A zFIUY2!hov{zk>16jKrG}aFg6Sk!4iJ6oqLS+x_~X+xB8lUHt$#fRo5=g@Telqq*6; znI?K?XAaEkTF&JFHHfc_hf{V49%F*)`kkM)&0K62$Udtfg* zFhYvV-Nk1{OR~=tF>#}QI31-qv*>$GsL2M(NCm~9FyAr`_&WT zs%$%7(;D2Zo!|P%(6sONZ~Vq%74s>Tv>3(T15JNO2{p0nt}+|Ejt1S9*)cl?eidh= zel_*SE3I7tdYvtoR6CVB>4W~Exf6&EP6nbnIJ&NT=Ga@kwEdj^-{~rLXKvTcs zt!=Zh0MPM=TYIHdVRqa^K6Nqj02RgD#K8rP>gdP2&g#^P-I5l)f0S5EMl6DElfNVu z^WhL2@1ZhEtBKugGuqlS2h8SqpHeET5erRnC^8Fr$(hMC28ujNW`86WIuc8s#8T!M zk(Jff7($Ah+9Vc)ZB!xjlwK!N+ZbO*s%y^wXDZJ+Fm00H7ROTVHs@aKS_LRFgc+|$S;!JnwB~D^NGFq`8mv zu3fu^Ts{#?SeB)3$_2Ksda4o2vh>}LW!J916OZMo$oFP=dCSo9Ui2|-EFi74Cemv1 z*b4g?+1ozArzr9Spv0nHC|NvQIRbFVq9tobDp@Q9<#-i35sP<@oKNP*GTx8fQJcil zg)Jb-cnP;xAQsq0`^QDhC-Q)jSAqNW76i3}AZ)GB$+ZU`5DUSDw?+@DJ`TEm%)>>W zD3WUEnq4#FF^inq4;(dHx3pNuGUW^F6Xd)qOzI(2Rf=d)Sn48f`mUD^siIkHnz78R zv-z?>|Hi31{+Llgq={lfF!k(@nZq=(JMVxvA13t?J>;92}F${K;m ztRJ9}^mAo%@u>@+yy)%kpv)*L9%f+7RdNlQb3C^p+fTYB7@?*)o$8-7+x_*Pp{{QZfKx^nkUQqj0 z{8+x3ueWUcct=K+omhsz*5R;7GMj+MNi6G;SOPmo&I)ry_A;`%hUSi;qf6v>=d%E3VWe|?1>T_)-K)= z01M)oSi&KfRfzf`=%+2jW!vYgH1>0KmzPq|dCpZloNO#H=IH$vLGm84tb#suMwThh zYiaV&Y%Dfh7tHJCQgF}4a(}NYi#Fp@Wq)-^ET$)IEGG0ZdPgeP%6c(&i`&>mT8TxZ zhQ@SBETbfltT`2nB3T;FY!F)&rt*^O>i-ZyQqPP~m;f|_&FU;3%b_ptm>5B61-!^Pc0F*3saM8W8vJBF~Z|b-usxoF0s6Slgo$s=Wo|X5rDK@;C>o$s|k@ypX+qTA?!Am z4F|9>v3c`lkJ(+#dxWeth{yqu?~@y5z3+SWX!{x~ z8FUX?HhZnun`wp2@(kifd_cOuC#*k`?9%1@xn4d*T8_~d8MjEZLW{;Zhv8DXTsxW)P zSHVVq%ZhWvErr8!Sd33}XX2rea#(6+g4uu2>z+MXl$PqZn-sg&%Q4j=W?QM@P$SZs zV?!eo+e;^;s5S5H6;^dL?v#S8wDYKUD#h9uj94rJjP083F?Dfpj>pp6R{XRFwCM`+ zwDys*SIO>y)tToR-;(usXl(M#j*jHP zWS#q*WAmt@k%zv9oNE&A$mC?5zxzMfScdfK$R(sgwPK(nhtd~zj>v9_UsKNoX9USc zN(!TgX|EzTlEjVo91(aeMd>9+Pw;?P&a5rCIL?*NqXF9n^h_*EZch+P7X(V7 zA(>ii4PCC2SbEyxu^e4u-DTf)p`0gjJU;yDdEdKW z*E0wu& z?yhIv&Er^e^XV_yLcY@`Kbh`l+}z#W8Ow}u&W5h7?{TRons6HbD-+8@L(4bk)OQUH zPmb%`uQl{T04(1X=Sp6iA5xs`s!2;tPS8bb$_yqsF%}2DW~a7 zOYOZTy`f8J9ssp8WsApx%zpdL=QQ$Hgjv(#CNxQ5%Kl`!5{v5c=j0yDvZA-oRf1tlQ7O z{xS5BiWi zz*sZyzUQ23sbwpUvyNkHCOW=!cUASxlBN3Te=Z;;PfB4oW8(u|ANzk1vA8IcaPG8@ zRIR+8N!p6qg^(wWhfeAf+WE4qEdC~5!Eds{i@H)IfDPQk#*0$$IY|Go5$f}MkED=` zdpm`>f+v#n#f$X&Cb8@q^B7PC86a(;WMZMc*=$WLbw=iT#);RyAr|tlB3QwndP!>; zF;@&)kW-Cyc^u7Hw7Ht(@7ZFP$$Vw1p0cT`3G-Q)cKt`WqzfGDP5V7QbODvtV zNW>zvkV^RMy3yZPiokkRLNuX+C%-d7iU&6^!Sg-&z=bhIplguO^!iFkWfS-kl+AUduNr;64i9DMlODjQdB`T?ixI^ZRP?GI%UI@Q4gI)CtWD0F-8n8tO zb*(|BAt$^0+#DhHTGU_vF;SZ;HYwdPCy>)?|5EmiYlyy$7ftRM?*lGy?>U zxc|3T4rLDC_Y-J3&Z%Xan8~K-2R>|fCx4u&&w?Q;?&TD@M z!)HiA1REY`9`8=EOEK4oI(znkUo# zV+izX@9z!V1r5VVI;3V_vWK_ykQp07Ao9{K1d59i4XruvwNzS@n_~2t*XjPH(Kheo z)@mb_U}G`pY5cAPWnuGq=_)dUFkG`WL~564vC~GYp)t1yGkg2KOhi}Y^~*eeu)^-1 zLDkQ78>pdE1Pxmqp@S`@*P?E)1wN8l={Ap`(jntmHETBexSZ5yALYqk+GPF0aB?G# zMF1`K-U1Hiuc5S00f@1FAq5-A4Yu%nk;zFHw>z1O(A1d8qdkFrUI?`dv4mz{d_puW zH==wvYI1kH@%haR(UKgWJ!}gI;0dy{$Nm9xB*N4KlJBFPHSXY0FH~?GQHgw6H<-NO zr@9jl_ilH#o~&krb-z|mX4B<-wwg>Pm#f+Q>_5mRlR+PQ27~FeRTIl#Fv8YG*JuoO zSD8I7E+*6IptmE)^v`FrA%etm^!wF^53AK;wiNyTbh=utaBJM_4}bq1`^i3c*{vl) z$p9~OG`hT;Oy|pAoVR%L%!!-2vKa?S+c431DU3t|JOOuBfPx1%|8$ZfE|^E0QQWJdXXn(+S5k6=aRuwXMbrSi zPbe}*m|CC(5j_*jmU5KwiG$(+P0}CU0B;>l$(!v>OZ}0SJTO^N8k_UuUIZbxk9(Ux zz!ckO1~#;}EDMTSTm_#hmcpZ$;e7t`@@h3dpH412qJCw-jnUl4~(*314~DhR45L@cw(ve)MZKH(gR z1r?R?&|=QG1AmzF~Q%LlgSvZr%0{oEm3#D z^R8AGquFfPTcgx6K!s>9!J9%38{(;F#4d~Zu1o~?BbJ+PVFxwszyEdIyY1n_V4hNA zk->#1@AmnWo;->6W*Au(tq~M%k^JYW-ue%9EXg;BlL6X#ygaS|-#X0_z!zRUu0gmzgxnEBiH zV#zDDq6)K7r@F3X;Vdb9d6`GaPKfjwv{ELP1-})D;0kAONc5dtNO~}{%vFZ=$(@xv z1Eqb0sC-6g#AzR2dQBq=U;UMl<+c}JIPm=BAd1pOA&f3aLt#GYl$9n&W26LXFch{Y zl&Q*$pDQZ5j1?ETKMf(x&KR8+K434` zEwUOkBT_+h!e7K9NGYPr8Ve~qq_NDAjmCI(B$fdY3pOI-Q0r(s#B(jC=lyT$7529W zNgQ_i0A*SJY{+!Sb=^fQ-G};Y*5!dk-NudOQ!k~U@-pmYjWw1c-KEqq>(JW_|Kk=v zw2#SrzB2>(ly>(>A))}^cjzt|$XHZhLZoP2>x&3dxzgLl2~7!A|AC}%Wd)6EN2qT`rEx?!KFWt@VAvTKq$!F# zFf}-&O(8{eZ7y-9bf;5sa+8vE6{&(JzfQmZUn_lH1jwj-^ z8bFGopk9!~LKJ|vJ5tB8QK(z)BHAO+DziDj^*i&pgnjx|DhV$`k*6VjSde2~qXIWi+ zz;j$(eU4aqYx3+GjRu4DdN3kpK}|&g5le4E#6s6UBx0FPYhuCCV;ngiFBU{BgG-Fq z?{&KmOe{%kX*O>u%5wUplk`8Eci0!(;m5JCsF~+hOGvJu);1nPAXAJ)5`fE2ezTGy z1b!ph@C-l|of8Hr=C4C6u)A?MM?b8;FB}W~J+Xm8Vv*WKt=UU2YRjc9sep~F9SUpT zPLQOrK=Y|X44ZnKp{k=`tT=fRYlsEyQ^c}6@<=RCWT1;Yx}w%tgyuK~AdYF12adu% zC%G$lp352+h+t^XPGJr4N$FHw#i>&W2`V^OK{_^5jag@ zHU)SJDzZjTdE7^)zXo0R1H3W!TfOOQ_2IXx%L|4E5X*B6R7VYBgc{4N*CVxMus(w` zQb5p?YraGqqoQ#!UiMmdh28&iMvhwxv}LPFPIow`}rGGwMj4@Il^DIM`qwA;BA*48#39BjSd&a~vX^7)pjjFsKQwFrZoQEQMa+9R=47Ow5>3m4>e z4Zy|_rTj|~%hCP}$n@QtG|^jP4XrCC7Hcaa7V@r^9JZ^{%)lD_6?QWphY$_tePU8c zQ84<6Dr?_PEbJ9#CCJ8ybq`H8Jp?=daMIJPO;C4P6t^Kv#!v2g#k?~$`f?0Ek4P_bY|6JB4KwIzNq#+h# zom0Z+F2J5>*Uof$g+gL6xMp;;fZKfZLhcbuJrw~Pvy!yB+zaC4U1E`Wu5n-@7O6XJ zEx6h686+K7$mD3QLs@8MB_bB`M+5Gt=+3Z(bsoMCq0$|a0t6?D_MyY`nu4#DSEyFX zd^w#hR;W&_lULY(mn|Ze1WefTN;U8I+r`x zJ2$I(9DhQ+5)D+vib!Khfn;JyXDH>)8E{vrbyNE$TA^#rMRZ6%;SOYQ<{cq~+I5px z^}RyUhUz%1uOt>Y!<1R#Vm2MkTWI|xb6~6r=Jgt4Lnl7$ZL@XF6Gg*B=WWk7-(Xx*hq%eYJit5Me>f@r- zRm;g>__^r;5sM^lX|<;R#G7Ga+0|GU3nrE^W)s^I3&!2|5xM4gcdOC7hxwGd->QP- z{`wuba(epgIeqc>vu8(Ud3s`@G?ZE4gOVVTPD0vJ~YRoByy zF)O?yods;}G!2TSdy<+DoE495B&XUj+cmn-EwSXqj+JG3%oX0J($pGDQyta> zmxmOAU3#PFvCRE;44^3!Gm5;gy~W6+ZD-Lm2PZzM49CLc8-^)!YmSfe!I}!ba6sBc zW;Vp)u4U~KF82{|NQx)fkEAz|xPncQQqypWq-R@%PbXQE)a!ywcq79#w&6xd#FCb3 zGi@m=O+2OQ25GWV8?n(?#CBREiC7dJ8m`xgF_tDt%sN@6u~${0%;i^xA_~zu|IdVG z_5FrDTFcRFfRQb$T4R~l#4?;9SzHc~E6_je>>P;&8RSl4!4MNX^ci`2^&8Gu(9wxl zF!G&<1(9Wh6<_3;SYw0<63d6H50^wN( zr%mVS;m5vwqwL0@T<+4xue!{%kRX*WLX^ZH-hc$7t)=c_Kk{CY(8^8eBZl-OBaP+w z26MEdJ)VKEF&d0pl&HLKbRbsj%5oJ(JQ|0ZRLJ=3Vf)g_!xuYK>%& zbA_KrHqar@&{DOPwDtq76;7u(mLixNCe+E%9@jX2!ALN9LoA?laJkRJCR1_cvNA6y zhnU<1H>((^HU_f?#o2pB&C-M)I-wyS>dBR)W$EiyJkv3i%i)^TsVuHyjUqM04LiUl zrKlEA58sbt+420s!;szq+w#bH?wpXH48f(|!UrLFznWOC4{eCW#!Z%EK7-y~U2+g{ z3KSCy_m?#zNtgf7F>*6-GupW#w;JkuE6ODLe&tJMYx3c@-+udW`JeOtb@1r+v9|pj zH5N1`mKkRT#S1JkbB@*kbB&?KG9z!Z zVQ;<0h?(VDpcFG+e4yZxHO8?}1Pa!AT;EMBeN<6e^wX`01y8*AaP?a)r6Vy`gv zIHUY$!(|UcaW1Z|F2+`Vf6t$yoYmwWeGgQ9nKlNbL&3 z6tq-uB^5rPl%<>*)pB;@>vlNBDZU#66EZIVNMkWgOoQ_%dbx&J@L?+uimUA-BnVit zoFkW|c1%4Wm3Hl{Ar=tPb998F*!&~09I!#-#z`5%IQBeKTVg3(lfcJB@&&v}EU-1= ziLFA>OfRck47g=uZ{ffyG^z+4sKmPdR>hiy5-IE){BK|u>V%cgeDQX=<+n2N) zPFI+DctOO{zbmF6_dV}YrTHl?8_rly7MG}{5D8)MJyxN|-)n*6s0s|KGDs5?fifT6 zQSYUD8?l_zHC`c+;V;TJc5yjra)nV`%Xo=YM8q;0F|m-{pIG*BFJ9XKfij8 zjFP_b=lSdR?_NJYz3*IppH%J-4W|zVBTdV<^$P1g7_p>;<}nn7Hb&D6L7A%)U1e<- zjo`C=npgyCENV+E<&jv9cC;rkFjO(R%%}jLiO#C3jFSAj;)YlfCJpJTF?&A}PEK&(2tnrYy{~_WkCtJ_Iw~J9->Uv8%C| z7|5xZ*aM`pCFyp-6a$iS z#VNb1u@tTWma+&Hq|Js{K zzu7HkNU{E%jE=e0SisnM9XS ztH0OPYi)@oc~wo(8!Qn^A30?8dk=lbZui(?#R4cI2DKU1RL0BhwRn7tgy+b6%G^ac z#|CS}2J!-%qJtXMy2pJlE|Hg7-OuJurpWt#D`f<0HIesyswjyP(dEZQ%46Jkg%PVz zZe_|7hAcz*1JqX%%N>FCfBWK!_ed<{2iDlLm#^Qxd-wAB|Az$xJ9`73?X2U7YkkN{ z^wZehA*uJURGCMsAlVR0<%%*|Jc&)jVl4d=TCLQr#GQNmZ~RZJ}CF}3cU_gj66yiarh-EOa!G?wuw5zB~3g)24^rF7B9>zpzPW83GM zXgVE@TfD@C$qX{7gR~JMiQbTkyIkUl(EIBw5er@f(3s^2`r3ow(xp}NG&z7 z@ZL+V70DGa7n|(H>qIQeCD+89ToAEbP{y+dAeO!K#&;mfoy5YF@%r6QKmYvG+xO4D z6jylj{rgw1uD3mV{?kv-wnLx4eD|8Rn)AH+@!$B>*d8OD{`}&_PX~@Hd&B|{Of2*v zt!K+QtvP_MJUNz^)u+9}unmc26L}wtqgU9`j`marK%vgUWf3_giYgDrq%6iayuzxc z9!s4;I9elkB%n$9GBHGb@-$|Bu=Pis*K&o4D!2-{4E@B=aDmIx9cQwSYf=Yf3L%xS zMbQK{(sKvfVy8$EE<`TaB2v6cgQH6OlsycjsbUC~7Pibcan2%g)IHSa*~YQp2z_$2 z12hmm&z%BZ*Hq_Z>p2x5ts2r`aKs+5*vhd*3+$rNM4422_ah8q4gqvbwxG?m-U@jG z?$lUz&mfCB3o}6N1LjD{HMZT+0)X0$j=@E(jZL}2HX7j8J5BIiFb5e)O$sUJtMWti z#}`=TpiAqvlV6` z<0>hw>%7FoGMo0Ox;|zeo=xYyHF~F=?~H8CF^kx=hN#=ZOo&)ypJ;`C`Zcj6H3)fS zbdhp}A){=G1--zQl=B$tN6snoe!1-TA4p@lO<}2*cO%TR7q5SOwX3kad;8-njBR=Q z>T*sdO^a8<%?O*)+C2>;|b$^23LS*lTTIkK4mOx@*M9(ID`;m-f6RvlqG1% zkHqr0rmX7}+MvZU^UKz@N*l?Uz&7FgSzddQ zajr0Va?Eag*d}#RxCnJolTMS}ICpUy=aDDPWM5+m!3CmL0Arh6VLYi|2HwcWseVeG zvYm+qVB5=_bT_dWyOS%d&ZjK|b|@q&r;XM+{?M+BS1O81wP*BGqGIO$1qGGQ!`}A=X5xiREm$o{V~DL@dL8 zYe{uX&TjSEqT#+ByO!Sr&wYetgQkFBS(y?A5%#)0j}+{QBnI z^M+sEzk81kUN7Ii#kRW)^_Vxc{rb;ee%Y+En!;+$yLU(&HL<*Tv+E>=+rPYf|N8a& z+TOf<{Zr~^=;5Ci@87?ENdUwR&CX9Ae*ZXLVaz9Wq`gdY7Vg6hrN~8->dNJ1*wa|@ zO}=Ar-UoRkmZKf*DGa1AHo8h9kx1==tzw8VhG6RcDhsT^VE?sxEFg7A8jI7mcDslc zcYmsXVF($;Z|_%-)Gk(36;lgUo3YN@;|tBBng}_jL%`Gsn8)phcBcqZ3d4RnO?}9e zpSZ@%b|FY>(GoV9aPz==i~u%KwTrq^WR(?-_mHAJsXbM{SI5Ws08O}jC-U8F=j>t= zDFTLP_No7qk@qRby4rGwq}ucXcWjZ$L()<;(`3>iUxu-<6( z8-}zjdQ2?HBD3?>e1tRoVQ<(P4kqJ7EZrqlcKi=zK1O1hld>@w3~x{5wOp()QSo9n zz2*=04R*J9tZK4~n-8~s}=JN|uJL9)AEcDqPCTyc`G2e*)c zxSk9V%e*%jY=~uY`2o`>k4C5v5wXniDq0Vtv9L$jzQFS3+=A-Jo44;zw_8XVub-n2 z*V}hr5PN^hz{2*+FTXYklHWZ`Jo6q|=-HN7-lo;f_AkG_-my1th*+3qUe@*sujT!# z%~o?c-xOI`;(7Ay#!M_BIeHSY)LGCWr5#U+2itAI|FrwW;&QGj$-OQfiREZVdlCa> zbmg2i8)C6G2DE6l8jBNTDOZ@=sd=A>B_gpz$Hox|u@X=7FDy9^^QVZ#2PCPwWfR$w zABp90O+}v(uVkH?SOARPi0_is5HRFOTu(NcJ3xe}YJ_o#SOks(+)g8a(K&7v7LJPO zlv+VeJ;$2&2WTKkF>7k8h@y;%Q#R}Zq``y=PWCmH#v1ORR+VbrgVt6`gC}AEqm4+X4oD+4G*7H+7^KfwKy zg|Pu?D#$1l({i;5%i`mW z`1vlbpONN)H6L4RWR;|PjC-8jcrovhqJx$A$1ALpk4|NG*1U%<)w!Xc)|Oc4nnxqf zkvu12S+AEhv0!w}0!y_}-hkoncpnc!Ec-liKWL#`#!XDiYYe;p`NwzfUi|z8S-zgV zdGqS!bGDbSwrfAK|5s93UjO{#={~X4n#*&{Oore1bNU=loQUPw`?ttEiGqIpwZR~y zpoaw&{>ExFHzRT|9_Q&b76`t`6>u4)Hof&oNzrfs);XtuNT$k^;%qDXHQ#^sr( zykc45>gepO2%40YPGL0xi_eR|J-RGhB_tWMjLA6%6){ffzNakK@F#iA1?4NY;|!#`HJ`4 zuE;BFK5UV|Lvbt^8^6Rc{q@D_>ceU>==C-kzK}rRuE={_(mH-^D@aoN5P=0HA=FqX z|5$4|#(UxH#>07Ui8R(DVi_Wj4gT|>HShnnU+Dge9m5D1>Q&5Z{NlyC_dorF)bi>J zDyTer`-ZiTS{dQdryQ|T_hYO|9V7Gd8nHB^wygB}#fDgzSLoNTXteSc?ah1gQhRuN z^&|5dD=T$IfLG7%Pb}S&hcOa1bIsM|$}CtRh4y){05Rm`fgvha7K&eJa(^@BxUuwM zic&-_)YlNp!6orIwCg$A(H@pqDlLSFxdmx#&{7$s5YZ4z>AknL#u9cl78jz{u86|u zWJcH!?b8s8iGCYV;PLGk%*=4KN8DR8rNe<8VGrF(UdQGuGAu^2D%nRH4d>x z(paPq3fI>m#ny`|%bZq1*gW?UIO@Jrx@d$jMkvKu#b6bkiDQ7B9>Qj7kJ15<6dx21Fg*|FL(ryNMf77`}n@ z(9VoUvTQKMT7;Cq5?Y}yi3laytRPXPXtmNxNg8Q?^-r%LH{bW1u^ADECXi%dQ@?=i znehh!g8gv5zFcvv`o%4bAIMjHeTB$&CWO_*atmho`|8WQwa_T9{0L&<<<{l=uZt`2 z!%Q-KF|piU-OVq*e7yxz++EyUfk;+La*oYstwM9etF+wyk>d);@Ml9ghBx-E;m zUimhNKRGDpC+_q(j>T&Qu|O`0rHEsZMbS^MA&`_ih+`oegl!I)BMP!K zWcz5ED9xVnNr*<+%_HuED17hI7kZIqCjqPm*3smNrAkIwsnYipX@ZOev1rmFRhMXc zH`;86jlNa39%g(Yxu5a+ng?-JDfJq`Fx(@GP$FXs)#P2J7!G;xUSau=vkR$yJ;|)f z1wXioShgjfa~R0N8QfTj^93?NgEO|Eb06e_RpitnJ^M*tlk+YUUz{+nI%!Z{9BQ+| zMy3T=u?=sOR8cHDC{lg6QT^6-N)%R6E?zN#cpcO9hQEY)di? zBfB@vgtKg5f1siV>^lvN@M!8HTBxYBU$(L2Il_!>V13>~=p&Eq_ww0|!A<+!rOO&3 zH{)l?$8Cp66C+~dK?CZ-C+y`?xDv;-xLv^}fvS!dnBqcTa%^4S+&sdxo#IaKaSi*Np zB97!*)zOqM4CTmX9}Pub`Ohj+ml`JiLOR`#w&E2=RQgvcbyU^oURt!tnUW@D7pi8My%(INXuWK@)(&+=4O!5D#9_T?AT;%EX`SyGyFdG%YP!-Um!Y zpc5t*uv8(KU@BtSnrxEvIoFcdx(Z^kI`=eeIAUoyD<5gO(!-s7!ip@(Amg$$ndy#=NQTY!Yc&&!$4l!5{=}w;GXFeVqCQMub=#hYDqYB8&@>3)_V_ z^IH)CQjYh?X$SAUr2lbd<9aBcA-0Ujre1y&2&@X8m26@q8%vbeVIe+3n~#tf{qWBv ziz3*dB|PJ9SL`T-NY(+1GoOHEsPIp7dWnl3lE<=Izh7U@KmymZb1Yx5_t(w!XCV_a zn;nlv;*uxvF3c4xO(2r73zZ?yN3d)F4)}iiSzbHz{EldRAr_9gFLF7X8OM~2&hM_T zZ|0i!@a^jjh-I|WE9~0^cJL4OT>#5n%l!=!*$-g(aseUU1_xpoy1V#>T9!n5&e_ml zAp*S|w|s2R=EPE_k#(KI#0v`7=vbJ*7pw=H$O%B9*Wtd$RRiw~U9K=l7KW137(_CF zCS%DM1`U7x@Ie-)lV0p?ENc+UD+$bUdRF_zEsswT#S-s;jYT|@l__HF6(6DaHAEXU z(Gn4H+ZdZmL4;nTtmUfIUfU_`M%tKF-}oGzV=d*YDfO04fR!q-jO7}zNd}i3Ii+%J z^dkQ+*(}g-qLPcmb{A6?tQHvI{G#kfmdD|9;j}Q!wh%eM7M4UjjY?i&6f_Xz0Agw2 zD%go@5ALTGv207EwNGnoIANIOo?=W{$moJT^HtOWKCp&Do7W&|lhKCnm}u?Su?8)A zLqCaVkT$FT1ZMGzq?A9&lF1~~Z?sic29i{wnkVi(g3wU@Z6{j1qj=<732i;FGxu&= zQ;?b4SN;(xi%7|6@tGs(BmK~`^m|l_w^&)xYH7_NP@1SjoA*A)M9Rq3(6h0cMh|qI z!}0+L(Xc&8$MNWV)|$=G4IOhLU>^YE>@ur0!Z`2%+qIl75m4erut#waGqBhAeTt<8 z_v2%Xaxb3FOh1`^Pr;MY&U6cEdYJW75#-~pHE3)Y($q5MM##KJR< zkSQYZJMp6KJ@SfqV(HYDyuxrVS$tlSSbAJZ#=RD2s0yFo5aEr>=ozDxf>moAC#m5aTjc#lk^P)HPyXtq44zeUg z(eZ**31Z2b3t~x{ffgGK zVtM(7r`br;q;fyq0TJ$eS$h9xFhff{1|782p&#R74ZSf7uFjeXRL?Z!r`Y>Gn z1`GnF{I@SEG(wz(Ym1@>8bl-zx>00~)(gUQcLtr+VCOlAp7=aTLr;90^a@hi6GC%~ zp2qVx^F?1w8nH^FbbLJWdA`<=U)|4TiI`>beXrU`=H#B#6Aw08Y7rgtlwW^gAUPm9 ziwtR{%Yc`x$KvUwj53cCOKmtrg?U(793?y+$>QxGJtPP_7#s~S?@SQ6A4@dLcrrj= z4YBQGl%zZveEKvQkJ0FKidIW@m|EB~&FJfbKzw~J@bMG2p(QmXLBWMAL#s-kuO5gy= zC&#zR_)mtIfibn9t3pNvL1ix8x@e^rZmEZUkf8F{lxc(r?&v0&mR43Tsj$9CHr+^( zTTd)1zN`SJ;!W$jnDm*}9NFCEm~f{xcTF1~)gS2r%gg3};yPA^(SsD>M<3JZshC0k zy$^c1*Sh#iik1I(KC!F_Tv;nwnD+{EdB0%g=$s6gRX{9*C&57t7MX*Nk7MbKPf&qU zh~@C`K#0ZFR+$`pLMCLEvuAJxNd)Vk;3l&nh$TNFh^3?_!F2Rc2@rm6n3Qm6_vPwo}9s;dv<{5J^2LgmN)CvGm=jCT*iMwZy7^#^0C@Gx6r# zmmAdXMtU)5>^fJxQvBMKJK1HVLYDQMG?dZLIfamr0ed)X>q3Y$Ew!|vr4cO*zSU3uRwmW(78>7) zu-i1L-1okxs>~FXD!ryWv4mC^wGc}RXwMT%-qNTB%S%45)%)LelvpZN+J?$;ERT{3 zdLPSfJYmnM0iXk6CX%nX)_XFsOpm7Q-NoCUz`G0WV$1k&GUesfHSgh4hQ|TKHSc|t zeazItbD2t#H?@Y3Xx;Il4tkS~C3d_ASwBN?9J#Hf=`_5lb4TRg^-dN|oM{KrHOgrHc5J zvg{JESXt8E#v)DIZCAunsnY6tEQ^_MyXhK!VPXVyhAN61ed76zS&WU9>oDQbb zp~Tz|uotnhh?rR7hlwTTcBd9YKJq>;#yV2zr8b7gSWP;{llawuCFX}zz{Jw?h~+IM zPk9k(6}B4*TTcQDWLZcTY1H?v2_mN~!=#T#m1t;FVrizRwSZJjxWlA^3{;UWs`{m2 zWN3}lomzQfAwNzU9F$dI3Y98VdP5RoNf&iP=mG6{VyOo~;XRfu#R?|ju6l)4ssns@!`na)V7F140|FU;>D{jL;7=3|O zDUu~HvLp+EF(`KJ1ai?pH|$OC`u>m8nX#R}Hf=VvbP03fI4e8bn--GO(Kqw3vE-(V z8HqsIEY3kQee@}#c+n#Qf4-0s;=)*vqq4BEFbwltps_R|-8IIl2q9@|dnuj6X@cS7nKPL?MrKW;38t4*Ph;v&Z)r1e=Z8}+0{EtF@Ge5p@9QfTV$1>Y*yzNE;0CkIS7c*hn7eW;*IUEr`A272_1o{; z{R+AoAI8<$)i)T+b+54f>cUv6>Q;@Vx|$$4t^2P#sIPqc)>l;v#A_5q~g7C zWh}fY>;g5^^-#!&hN430gCm;GOi76@x`MuGComh5mSj03@i%fTWGud1jKx?V&C<1) z1ko5JW?_NlfJTDr*&nTzI?pv0Fq&aVdND~Aa?<>f%rMOJK*nOpI|PjmBhKfs;8HBc zlCvi=8H;yGFSFL!SQzG}u`EtP&&OD;q1V@(X93<^W7%)N<9x_(FhUYuF$;6PE9`ab z$FaJRWBKK-unNNao7HLy#)5zP%h^?j`3xrMbN0Hx`$H&k z9Ybia#v+uV>40$6%^j&-tl3x?hIt~;SV~$e)q8tNCsL&ow7Gw*j>G!~e7kLt49oEgg=W=4+JHI~bDMXkZ8#&WFM zEXMM({yO&k%lbfxmTUg|p0J;d<;w@=YM`<-xim_s5a+>iDtGXMNTFP6EIJJ~S)0&U z_}lQ~#$rPW2Via{E&IG6v^z7m}QI zg=IDthGCuw8N0c+v5-3Wi5R0_fNSn#EOjyx9@8PET;}RZ-LSDR%w4;}K3zod@2$M7 zUVdjR)m=01fz1Z$DQ(}QTU1A5L7N%->)gt+9^1Bu2LQjnU(-Am%-kQwkL~t*TT$I- z)qj26^gZNS-rt@uuCe@ieq;zdeRWur&-XSaCs)gMhF!?}MN3@12W(*lTxYo^#HeInSK?%-v?uGCHv_4VKoScoVX@ z%|)(IOgi#yF_`wj=+VBn+4J3+x||MxMNKmpna346Az+?3KyEpR{M|E6V0UjYE>#~`)|4p6 zPPK(5Ict&Ky2)MFolYM||7s1UgXz+e^9~leFT{xL^@qLlzHY0O11%M@rl*&6l6KRj zct!ya2E25j=KiiH3(i4SAU{d@vbYFt3l^#UrgBh!xwViSIjIdbc?2@)W7ZchO7T!6 z-HKS{5j?F`b;3hDCP|k1yDS2ZGaV9F!zVSMJ3VvBc%TM}lIdo`;Zx{YXHqK9F~Eru zZsNu{27yqLSocDhtrPPIx@4rzI(mNZKDT*DiQPGu+|n-Q*RfJ_#w$AZx~`d5j}B1B zxSk^|F?qksiP;yQ@Pf;BKE%AQ%E=n-+JC$$XnVLoUC&Yft%vu4X6R-|POQ!|aaKT6$*eY#)R#UqJZ4oPkCX zD`<;w*A^64LfE409|I;m)}ZB{L@gVzB8tu;wL0^V%ycUoyAPJGKX!@CGBVsPV&6(P z+Y+0uw;0y}dmqjC?q|U`un?cYRY79)x3}5}H9HEH^|l7Ox^Bv{X<-wTvM&aWZHGE0 zJnWRY6^WoT8_fzPfe}{e5%96vPN4$MCfdpwHReY7c)UO)XkBD zF5-1uHgliTuSiqlG-V9bCcD1t%z?j4L~d0q!vxkwj%K8cYMUu2M0hmP>raTg#a#bt zOJkep%H@#X)^tYf{<$6@=rv5Hhte;yR{Sk<_M~PMNWIug@7j-wcJK8 ztlF_-k5cthV;vJPK8@l==WB=M)lg#7Mw-S};mRkQm%aAHueADsL+JiQkm#IP0$%{6inIA_azX`JW2_jy_rRP~#!$q`% zl6$8uTbw5c{veG{-(ZrY@rYwJJu&R^9 z^tShS_a15t`gpUgu^G1cSPl?MxG^Z}8x6cHd2eg%$EF4OuasQ#i&v*=ZDQSnoJ~6I-3b3|c9tPV+mn36+iReB(z7o1*HzI7||G~10BCtYUz)P9? zj=5lr*y%!>R;GcE@A)ISyQD8w<+g&6-`c*`lSgc3zL#kfK+H=o#0Ofqu3Z))uT*17 zjIrRm%0b#ccDzL`elH6>8iwVum3fuirFIdX^vk2A@2zcrshzU&#{*4pM7iojmz zI4w2RS!cu=u}>X=YO6c&qOmIjoA~D1wlcCui@5-aJi*yt>1m{?U+77DS&h!AZF_V) zH;9D_>`x&tNYym%>c3KT0);!yg3F(+0o>7j{W*Bz=g$VCh33zCkZJW4TyG;bwd?d9 zPeQTGq2IURw3SBVU>cLZvtDd;NLbn5hhrEsPM`#1%NUmLCzFdm)*E_E4b4cgJ3<9( zrq&XwDFF+Zn`>9w9R~9OR@uip>;zI007dm-4Dw62Bj8Pyf%@}Dx@hsF-Kson=n|DN z9?sA;lj<$@hj=!qg_fhA##D7*|AAen-!N4_=YuwDC|v-Ay7}eorHHWhgO0+d5q#u3 z>-cURJJzq(Hn^#p>Ib*6 zFimneoxNVSy^ioU1qscaJ?mP~CCij^B^~4DAE?5LGz`Z#eJNBRh`@}@^L!BZonUU+ z5|L8y*I(v!D~-U_)XRD4G8EISUY68n0+mQ580<2LEQ54C1~qm{Qc`w z1~syLLVv0tWgoOtv)qIj;1C56l*h2zkTq;Cx0=)!IKjqekAEZvx3A?|+io2a?B8w& za}~u_(rrq6(-KBf9Knb#9*jMqdHZPEtxa+9EU9KF!i)ySKgBF-)$M7M^!Q37jj@rXUwuX#?B{G~qmbv=)! z#AUr^-A^YMajb2A)M5Zn!l^W!fRbg($CNXFkDcb}ep~ckG-CuyK9Q8nEtX;#l$;dX ziL_^K#ctOvf*X+v5l{7sO@3V_9swjAa6cOTg|4wQU}NN;wiJ9l?2HBfVHlg~5CljF zZq~YZWyv!c0(b^6>=V0q1X-*<&1LLR+C6{*gajDhq#+L4O4zewo+sB0ilBIa z3IgL>1Z5<$Vc){oWyP~sZzoQnb*)r`7j;KcGUqLh7+9Nd`Kf>M%LF!{p8zg&0fFuKTtRvItOPhi9Vwi^LZNK`iMiy_E@;rLp(vae^|z>1F3`5?x+}~(8#V+u9lQMRB%~o4DUK4$qv9T0oGRlVbaUhtjO1aoz2Ak zu0Q|lISooaRNh5>5>0j0bemdAV|~PF33{x90eoK@YN7P;3!2%GuGh}6N*`M%<*s)H zz$cXQhxkSCdEjAS*o}c9b5BY5n=A5rM?>~d7#P14)1el2$b%;l9i1<4)9(gpISbW- zZdHW`SLy-e7>>Zr$6ED_2vyc6S!?E&An&UGqZ;A-kQF8Zu; zx@a;|x3H_qC?gEG*_)CHK{T1L+(XkW{@~5YnP$oz+lTwIh7t&k2d+A$zzZH;@Ivtz zh#d+hp63<+*S?JRm!yF+>V1PmsuDaQ$%CW2);b8&yT1qJ7DD5M{Z%JBO)@ughkOcb zx8L_2N{E{}w4z7a#5De+GI7aGQ8Lc!I?`32`o<0wrN+`^I@oY~)&wvY4Y98S*c278 z^&dMwN^zUHVM8Sl%^l~;_qAtmav4PQ!+t(OzjV;d-a@b}YsMY32_*v}{)uTOy?tUKC)Ko0EzSx0dYDwLiC z$sAx3UR&WUI^QjlpiA(CRG%=W-i*t^7E|y1gT#Mw6!D;K)E?4B(Y~Bc|JU2x3&Hkx zeUxQ?m*(5c?@aIH5=_$-&*jtp&-6$HGN8TJr)9hL)uUcy{eX2B3|KKuPr7+5@<&SO5v6dl3oQU#y5v(tg1Gw|V)= zIV2jGUeqbrF{6RFuIG;3W#D+!@DzNc$VjTlcEYi9>GZrC7-YT+vgO%6x1a0K`1wgi z2SCE&iKH6RpmAX<)t^ebV_{K7=5BmEw*V&#G3!$DhIe}aDkDMH^}rK%_10WjUJc&n z{x<`FZn|cSTPHp>ZLTV6A)=ce7&Kz1`{=cbZM|JPr|qclofz78=f6j#a^XMzP5Md5 z!@p50| z3EhP7wkKi|RsBsriP#{&UP2e`dSXs4G(Uch(3Gjeb73dV0;~ zEsXr=06Z}U#@VhVM6f(R$md1rAER6TAunu-SuRW9iGb!;fO2f9MqgJSx^s;#k#0J= zd1jt{I7~Q1UCcJC2y6m=31|)VwEdcdH^qHbf=z!Wh8#yza>n&?r`MYqSi(%=>K~5s z8K~bhZ6&!Upe?>R=7ji2MFL6$RPqi|w6*%h2CctM?P8x4oNB)VAKtF}q^JNH24V~~ zkIQ#EGaZfR`Y2YBcEQ)H>fz}d7L~KQ*aUzE01aM?9_;LFFF&8Dp>FS|T@cr>Tw*l% z5MG{T%4M3dCOGZh%Rz_l!jZ=~DN6=7?H3HjR~wvG!z$MkW6u_%;V9VEltFz#C+l+E zd2?Vot{c}g4uUqxMDLU~s8rJj*7PSu>g>V>_#RL8JqjBba#^RE?CNNX3`06fM&2b~WHhUhf(sQjS_V#6MYY;S@chXH^vRvRgl~&+H=5z8JN5^UPfcG6a$Ett~o1fy9BH#U(P2Ot}DGjiN#;ka>|OLpF{c(gImhIo9A9i`IQeoR?N=ZK8P(B~DNsrK z9DGghm1Z$!!oyF#Zf{Oks; zCb`uT%_2N`CPjB$K>%oZm8G;{tGm(RD`yogupYnRoemb%+K}O_7=4VDgu8@naXo%O z9hk&mzxl9^JE)TQDKv!UvG86)I_4#MdSlYHfGH}Gxoo7t%NK6iszrW$1eL?gU513mZf?g z3e-8X!ijyXbc%+iwl2Q=JPJ@h;s^$#{CNqulY>&CB`J;63zBwH?+{>uFYAgY)j7WL~woU~Gq!&yVi* zC=86#&p%14RjZS#WgP^>3oF^R`up)R0j!77EkNvdiH;UGY?Bji{~IWtC9`Z~SzO!E zBp|Jqv_C?fV8bu};AFs8#aM1dYr#AtLXuyHO?yGlR9G|n+1hIA+^X)8*$~O#R*7@? zT1&CDfh_VY9Nd^HLbAb^346c{#3sP@fcH7?+_@h@gzfVtyz~KW0mq`>&Cw3JySqB2 zaDDb*r-GJqks)dE!3Pz0Zpusu`3Ht{=O^jue_B4s-xyH9`Xz}4gPLQim>uIh#GVHZ z$R^B@(a%+smun5qGMO8G5R)&eQasYyDJ|E~Q9lFqhvz4nrbA)}T^zR<>Kl91fhY4(QO%3=K@#WDw|(Q0Ugsc(%@$^9EE$RO!{+DuDf+L&O`$H(&*p5}Qi9h%MN>6A z-+L*!-YD3H_L;YBt+lCxB!%2kEKdLY^KkZs5c12OhXNJG+~KCmHrB>p!c80X-+6*^ z9m?C|AaY#o&`y$SPZYXTIywt{UtI`y;lxl;U_@H7fiO!6aaev}$3|l8SjM<9|5c!- zTGX`W*CcNqI!#D_x=(-!r+!}7*tzGBl>`I?qQIMv(v&r~>-Q0F((3CqB|Ul{*gaG9 zI-w2-^MgW~T`rhl;9zPDw_ijWeNm_remR)G;{jS~p$SwKTE^$TQTzjT{{zM<%VRhh zT~JQk_g<^v3oc&`s{h$6T~u7xQ+7b4uyqX{0ssClN(j$;|KlR5hsaa!emDH1?|XBJ zaK?L1b>Kke00_B>kl^EN8#^|{ZzO(pxf+{heD;3f_LY9Z=gYnyPqY&>_ntj9)hq!M zd4Qbjw9;LV`YIvc9T)G^HdPGHfMv=?Gm6!xM;Uil<<7jq!C^%_JQfzP=7!3(@nBmD zB}1M>$(!c~a_P%rvyccbN!kyWV=`IlKIzEgdpDgOFKM|`p;fmE*AgL_i_08Y8vyse z%C!)Rmigt;68>K-(5?-7?Xl;Tm`kIueV!NMd)iy4oXn^NYJLq<h7BCw=*5G46VDqa!u%fs+IkcD|dF@4Yo z3rTP7P}*@Db4}ezs3xkxbIjD6zSaq@(j-Ds(!h1n+o%=?=}n`F?EX9s1kyn3<|)OR z8MMXz66GFkI&GPNuR4VW!w2kM7gVrCeFY07ovIynCd^ZTo(BpnY~+6k)T9ntO`}w= zm&D>o;L#mRsyZ@N7H$h1kFVu^7h{Vo{{0z}hk_!%{TF8uDMX*}J>Py9^sTPWtCYBI zj!6fRMQQj;9b~aypGxTGx)U0n*B)TPsT?*oL1BQ9k;5b|X3(r5ic6(tVYC~6(uycw zeRt*4K2hVEq-M&IG8upF4nin(fA0P_fB)K!j6lVc^3m5kg|=Oo?x21{uCG9q6Q^Q? zWrfIu2nj+UI`5$P*ZCP1hxB|oug;1cRq%}Z=Ex6bfyR(Kia`wj+fk?o!5Y$fcUV>; zv~X*XZsBEg-cS{3Fa=S+*zt~K()6#Zed1GDQN#@{T%rtzgZlJsmqkp^SMb+=Q36JH z)t2#q6mN_uL3$6t-#!@wT_4B7o+{((K=+=jWn-zyiwC>7;X%|FdZwTt2)QrLu5?!) z6!V{#<$_H8{!zqAg7`SnD?-9*mHvY0v({E z0-L%!=(}d)Cj$go^ct<9ykCdL0ef_is_{}qA$HT7w1Z;sQ~-@aS2}&>)6_bf&@K1B zr{V4~xEW9HLUo#Zr52tir~t;QL*7oT7=SI3k!RBqEZ%ifmY{n8h`V2_V|H2 zs4FsRXLC1Sm<6#VX4}W-Qy%&$MR?w`#e)OzfoGiy(=~6Ne{s0N{_#bGGXVd%F2Jy( z(uq*yKt?ny)KDWv)csfWi%oMkc>c`ZnZRDC-p^=@)a1S0hi16fheL7BLg|Ck9dx@e zMh0+uAMaOkuB{>_YXfdXn;qz{OpR9YSC;JEKg1$ z0^BDMmtr(vE0S4jUH`Lb(pI1p0v{|Zi z!BkG2KiePL(b7G0jNn^Z@NoZeh#Dz)y$?)9dBghc29g3h;y8~R)1Um~I&IFx;4FKX zu_ko-w)P1uJL&W`c2wxn)l_1t-!PtR2g0}$rcWU#oViJ23c`>sm3}_JgUFmjYS0RL zS7aY~EN_PjAw1Cjs)6k^fiAp=$3>g?+pVzhHYSjX+Oe7J1QwMY=qt=A2h?7Y>pdvA zel%w-(CCeLU9tHIdcJiLYg2z1%|KN@V&RDz+4?7}&%=8#M&CuSKbS@Aicn$3x)^yD z_N^u#i9tvIU0JFNYu_tum9A$mA)WY<*L1{>B>kvIWg!wf4c(8S<)pXP*^pdx<9gfkQMK{@-ki>vB}0YY-Kdg7gQJWRs8`_D-W5v=ArM4IfglA^G! zDmC`KuLKe|`4~X`)zKHm193m^%iW*daij<0-VIGnLW0nHYVv_wUvJ-94G=$;cQ&4~ z{`-Mq)Z9W^0)u;oj<-+xsUQUl21tP9sn*UlZ$Z<{e?Yu4j0kFa z`oQZ}Ge)9*=!^00m574LO!0w<82t=n%>vy4ZrK}cvblSF$Y3Mk$MZ0md&#RJgxO?J z__$E=eRcs7$(@>oO=lRgh9b!fB+Y)SQ*m_jOXJ2twSnImdS?>K8&q_}n47zE`^! z$Gt8f8z>{aNC`wIC+d-ZQc`Sk(Rcc%_u{2r$>uTy;g`}rreqp{K<|;az9)8hGYBwX zx^cg2ot7p|KhF77vIqwn&B_Jk zvP~)BM_Sw@r-P*Tbh(TXch;|9^B|^oQA3MH;+{wAOJ5?)Cr4lJFN&8%<+&gya1S$+*>L=mW5}O> z6(xU)gprm!iI5~$m;a6{B}>QH84=k{W)-%AB*%t*9}mAY4kesste#0hyO}S^Tclri zfHq#Ji2k1r0)!PoE*fO@s>a@2tfdr^a_aC#!4w!d79)c7;j4!2r||f9sE;PfXh`S9cjE8RpS;8WKBQvvRD>Kk*0));t$#%o&HGc?b za?;L7%zF;D_7|2X7{Q!Bky*P9*8QC2GT0dP@TH{YPBak)H}6-cV#9}w?*kNf}=TmfI{P&_{OYRve|jn$VFhgP?Ai1xek4vcPhh7$u&D!XF0x9vbtRL-u<3>S7L-j9ET}hI% zm0HyO=O||L-qsA{o$VJKbAEsY%^qAgB0p3L{2@IZ{MchbhSkYgNl|7d@`ZlVm0qD$ znz-@szCQk|E(QDFQE$Fg$2sUrViTJ&R5i;{h-$pWa`SOqv|#+h*32}_YC?2v@1o?Om-oM-}idS_j3v|<{gKa zVy-gcgL$2?xhZ%9HYNmh*nRY5d)gxynHQCJbh1-WktyEdg*J@LlMqLEsue4g$0E;) zc9)pwxUoatj-fM(_Ho>59u%OCNU0gd!5L{tQ0qtiNkQgz?PokBYmP4wJu9;#v9w4b zl1?t1POf4kRsgPV0=D)FoRwU&x%6pMs`k@q;ZG)@?)YLP&U@&Slsf-E zV@zq9=GCLKCLu5JDyN0BeYJ{VLSPT$ji2Nc z^Ep2&Hvv_sD4I%9_a`S{s3va^^N=jhnPdKz`~yn6FR`CE<0^EMA5gbM{_Z4*k_=lD zn$;N)Zp_bxh!7Dwo-&=hA*^ug-Ub8n#aU^8s1MuZaE^Jns#Xi^5V)5MUe3}lq?|GG zzP#gwsxnUsA#6>G42&g{{2j%W=%aqD?Rw}y)>?l&*aVT2LInY&SOl`c7`i4(txodR zdCa?lOVZ@sh41s5a@q(U%KngXu;H~0HTIT*NxJE12KuX)U@pGe>kM-26AQnO48P2+ zY9oZ=UTiA8?gfv5XG}o+Y96Syljc{~*ZaxEeS@&>JGtHvV#$jmesp6r{DrEvk>dKV zatpl~0?V2~b+m8}jX~%)hue5~&m!~IU%q@Rtd?$Gc*fPp`1|DF(enwJ+#I_V*u?*72e@)F#Zb}52R@oXL$hYG4&N()G1s>90dA$CF<9OW zwoip+wIDRvfj&d^{o7w6&|a2Gtb(o*q`NylZjrOecVDKwYq7w#AsSn?9v<4totg5d z&0iU!_q5ISG8Q3~sZjC=V8X_8be16ArVWJJT;9$*e#HGkP7~Kv2GoM^#dpy+pk=NW zZ}Nor&kZ4UD7B+lGAp#0c3E!_n1*`1{IC0fUue%86$b<2cY@|dY%X&XOd+3-o0&j1 z+u(_NAk^ocomtO?3MRF83xYi{a9Ssv0Ms z(Nba)L6Z*{wontOs;7M^XoO_3hdFhAm_PTEBz6Ym`9nAA0YX2eSGD6$}mPo z&f2JMo11nCE#rW7(SwrbAGtqks@(t?Vg{3VEk8-2xW8@7@IETui=SkWrQsarb2{d%3BDdhSlWDTMS|)6Q#y83NKzwn0BuOv zQkR*1KnR^luKG2W#HIvpx|8lwlqd93h~)R&Gpv4x=^c{Lg5BN|V@OO=RKod*UWH^F zW{ia_{lME}N*V!-HG_jjWt3Vq`vpt)nE`cw6HzIy)#3HVh{VxOHYeNc4tRSIV{_v8 zlw1MkGiXdj0u2BRZX8Sm=U(Ul6Y<;sqF_Cxp&k^e*?)2FPG{M;GjqBTX$tzM>`Z?` z8cZYDBXj81wMCyKHW^g>`M2IkmKXPE-eE5HH`F5k_LnvV1leyl%kmSk`e^t0Dl>3< zvJmFrw@@9BFl{&~hAzCU+FTV-Kd>Xm>mfL=)pHbqW2yxoqFrbyLpkbhSBXOJ zr6-rrxFo>xqPbPnY2;A^_uuYMS~7kY5~i}7kRTu?e=i}941G~IHGgJKvr_^)5VQ6` z#9g2k8h773d#L&sGh1zSTOfS70Hie$x_cI|3x4TZ3htl?z+a4-)x)0qLrEV`|NzvF_Y^t?l4#*mI{BaorvSe;$W- z`|SN)%M)o`t);QJDINRsUA8>HDYzp)7-^yMYt{ahF@B(qC+n!>0&lF12uT7ru`~~D zde5@DMf}dtfy>Zk=A@FGlK-JUJZ1ixuTNbSd$7UPaH)9k=iy)UcAMO8Qu7ReCRC?Q?f zg_9c{|9>YJA}_qdoWhDMxdoK?`oT-Kvf$sv_KgKiZ+v>E_cV@6e|J)d9-LUTr;{HG zBQu8*8@QM%WxV@re!Y>hu%2?+O}xTPU2iNwSu=zVkQ7}`dAWmF?~52`bK1#xmoy<0 zeT`g9&i^c#GlBydJwT45lNU4!4oq>3oE|?gs}kS%u-Lp{efi8rEhD9B)=rtf7*QZ& z9yXDzKi?4AFTXbPRc_D>8gUhmssYY-;awHaT?3sDr#>LRHgE%i|AY01QF+ABqw>YX z{;60oaD52AaJO2%zTLEwt4_ri1{ZCO9b#2b_jFM_h@H^thfR4k2L#FN-+K2jQlCg&KXynhBQt-Tk!dl<0CNSG%>^e{IgW|wQe z8%np>8N^;G>ji?HpSAlmdEYJ7n{acIGvOyZGhYCu;P ze{kdyMRsy{(E7E8(zm&ax6dD96Gdzk;S?vXh%1{#XVB#=yp;TRX7oqohu`c%zM`$0 zBX>ZeZF?O=Ro2`^oUAi9)q2RB&D>!o%zMwir?AqP`|SP~d&SN|QT(<`F~$#*%OZ+>{x0`H0YM|g*E+sdAVcdHOI z8dq~g9)rgWhR?Hz?OI7ZIe0g?-M#xk*x5ju9LVRt zLyCOoz5la>IA3R{$u>BJtf^)C*f2Nrg=6=;=bReIH!-QLHoMxktkUbPL3foGdoDEt zreJumjwr-x+bdHw`@iGLZ&cB1hgmwc9lnb$%OS?Srp}mh!2K05AY>00)W1yw2zysph;ndtRU2!51rItIbX%(55x@ z@zifpcX+x~*SL9-_*NQ8Wf$xpDWK=dE^`WU{lByDwF3`&Ur4BOa~KE++FG0I+=h91 zP#eh25$xwXa>WI(r*XaS!n?H@o5p5|vY*f|iNhHQiLeR&cLv#!E*(3V2W{Z;kZDFR zBYLmFCYx3Be;svWda4wWRBn2tyM7q|C3e1oFP!ycMn38adua7LcGFKHufa1#i9VcC zYkdZyB!t$-U*!xnLw{NZJ*zI601aW?p(Fqh30rBjomypL_40{GqbAz`Er-wA%tA#~ z32eLP$ZLCA0`Ohe;Qi0s10l~o^5_*>w9`iP5j?{h-MWy*qeiX0{V&rvcR$<|*^})- z-$XyZZC;13asrkv422{E4%`!SER5qIv&Zqb4G}gsCE}bUe2pCPJ-bKIChR{keSF## zOnWUDkkmtolRm}S>h3nqX6Z>Kvfy)NC`S@@-L!50V~^F&aBM0>qI_vk2hYwibx}XgnJTr%6@Gri70?2)zVk#wd1>m2 zefY%HY^3rC=>E&uInfC)xq~I$l8?SA67QY}Y~dIU;!HgCLPxX;qiiUHJ21TOO}-fU zN?3r=7HId&okz&zM+!0>yW!KIAzP(X7vH`2JZyazVsf$UZ^G`I{)+B-WozVn$Bh`cSnBEDFN&VuKOd5!L&gskx4^*63b&Hz&WerM z6oWC#Fve*1pC|QQoV~fe?jpM)0QjIGd~E^pdFKrMCiN$J@AS~2`SvKR_VUWCx`Dj^ zx@q_Hx?;_E2ccNjMR0Tu?r7|g-}I@cO~odR6fIJO+`}leo9Ep8#7!gNFnE~@WK9Mw zauZd7oZCg<_(F(T)jJSPhV?-NfDU_WV_+7m%f!Hl0Kw8yg?RXQ z(@M4$y=%Lc4}m546YS%zr24Z9u3{t3Ts**Nc9(H~o3BNyAlML?pF!@Ls!R~^`6UL1 zlba%FgGXL=RyFCmp-lY_0ih0+oy;}iM|6Cxd~9yk*d53K{PqfOr`C0;_Xk0L_fL=$ zHsO2ZWNg*u7BE!8T5W}fphzhNzE}od*CM1reN!^W12(F3-!Nu zy*vtIw9@P~%)^7lu`N%3$-$!>z1#E0=YkZ>V{nw56P$Io?6&~0CB_F8d5{i0i*({I zPpr@ogJ$zj8e|w4e=CrI9e*kr#yFu}v!!2wnSB#K-T(N?<;Bwne+XluF5{Z_JCZ&U z3NU@->l<0+*uNC-OQ>m7B5#BtECUX{%m_p!F!~Lqk^6IpF|y+-@GeBGIqtq9xx;kW zuRRW9EXmDPJxOR75c&~whubsB-+}g8vGhpxuho4|OnQU-WO5JVci)=V0(u@K-u`8E zT=fnS_ysT}hON$Y@Cb;Nm3uEUUi{^|>zx=t5Wn3astV+p`hDt(;5%rfSTcCTkeJb@ zW${|kONHs2NcG6R8u0cnc$Fd<6N3w|E53I{n^(4WLGCa?K||%{4jg|$)RS38fdamA)#XGqu0c=F&4s}cwS_?q8+ru+yAcE)yQQq@UK z;&I6DQtgXyb#awD=tMYS|I!Eeg%c8NtEDt*Jux1*c$6ceA?+$Ivl>b`3FfN;Ft2Mz z6beEFx=#^LBMP@K4qcn)1<Q@_MEF<{+a(%QBBXJBeUsjzz_7!=(%T$tHxw(gw^=9H`Kh&yfyAb-%3?5t<);SW(#r7W*8WFu z3tR-2JVG^a?bEX1AJ|i&k-z+AaB!peoJqT`YZq9fK)Y?B=^y7dhPd)K%2w-DXj_^m zNiw_;FwL9TNk=RTjmUHz+sBosQ_gogByDr#Gvla#yT(6A7Gdd(%hz)*$PImJe!`^d zY>?>Q^DZ%AXE6L)OfL9ufl>CS&5+@Bkl1k<-$u@Vcr|>Nu4i>P!_9Zs4I$-8Dl3= z)u2+aVVz`ei2-Mq-~K&T8J1eab)`Cs@IF+MPUIxOX8LcxI+)+f>9ED&P%AqkzP0(0 zu$pM2DesU_T0M#<2Y)lk%gt^fXv7f~%BfQAyg9l+EU|hnypdL%{64W;X`YeNcOei| zJi?|CJ@=l zKGn4u-$!&2)EB6eR)ww!@^U^fW085=sx({YMpyNQ)G-qKbupc5P%&qi$$5y&;f+qT zZKvbK#NICysOHJg>vqwop?;<|BS@^eshm}q*gvp`e{?x=pySZCqf&1Yo<@M(+PXU4 zUq08SQO`g^V?c%18DpEF1f4hWF6uzXvSiQT2QfG;bWn545#+M|9B{b0dOw3#WW4TK zku3Xg?6i#jyXo*rQLVuw+LeOX^%dNuwZige60mCl?YAE_v8z*LP<{v2j>zlv?n!W$ z%P!o=idK+^Nu5-6xg}S&E<7-%XYqp@coajru|NkWUItXB0fAL+WOaGPxb8`f=` z0Lxa&DZ5tgXHk0Y%zZ=a31rq3?ReVp{STDYGe|6ue7#|8T=kTnM2F=m_m}!cKbaC6 z7g40_a+bOBrDCl0>B=XV04mq#g1$S=6Ws~vltg%uG8!vfEy+{El^q>(C^KnjX@?BB zR-nJ>-Q*Z;WI;{~4a^Jm7DR*BqL<*Ba!Z7?OWuk8LxLQ@GXm`DD^x&} z{jaJkjb6F2E~@=t*DE`|GVNCTC9p_NSI&N)vzKfEoQlfA>%vV;&{-C+G5x_ZELCGn zw|?xTAjX+_9hUc}VW%dlTE!62nub<6JkH;g{IrcXToi%I;vVF-Ikh#h+<&c|G?qVu zOw*dKfZY^#ect+){QoVC25$2%r8vJ>_JmBY398oWZkRTTm9nxtT=OW(!zyP)C_xQo z1oDe|0yf|bJy|IF9d~EEuw(-4%bFvgoSY!PG_qB5-OcYho_(5FS9UPkU{a>%d;B1| zZ9L`eZ{a~(#hKldqAGeN8(92*_&p47S%^pK%Uy#{jiR-cVpL#)ilfd$nOGvVqrQMO2C0xL9Y*bFG5+LbB}co zSbDuFXBBMCk<))E1wo1--$Mf* z1Jd*ig{FsD&a%*qklpMPG1v0pcf1k8G1+_!?NnPNH(m_?Tm6N|7Fr?!FQ0>VjdIvY%aQWLI-B57^nvlCg-mmg9s4C2=^I%8h!SeUAq-S&$-=KI{-; z2SvNrIu4$(#WrACz^>>!$)v!?GuJVK8^Gw@j_I}HIgDTCVimoH6{P>vzwEVfK*5CTB4)`?LXrX|E*NO#8 zo5cSNVXkidde%0JEYdwAt;R_GF)hu_eqsj9R9JB^0^4|Z=JBr zJYyB8$(hl}3X~jvoqx527VRG*=zo=yoa)&=G*U^UVDLIJW*K)i1i0et-^molV)JCz zk?s5sH@UTUBL`;nh80A-$RW0napiDIRq@;+ah_~GJfBNzf}UlV0R(Jscm3K(q`;>w zdy*o8a*r%9qE<(SK4vajE*^I2S()R~+bQKPWPLqqS26Ifo&$(7ZTJx%PZzaS2afmp z$jVB_mp+iQ*uI<=%A0XcC$za#lN$D^lrd$$!3nx|_N2q&qt|e|T-Y}GWbaHUSFlMKXE}G5PdPjYKS4zQ&HtTOcRM%nSEMny`!)n?flM zl4>Ufp&t6|U;1Tcz$`&?)_Qws=oxBU6_uv>Bn3$92=%D*v|w&4 zz&kBmwsU5`?;+?$b^C}rHvV&Xi%s>!&ryvH3I5*Ej!M@5b}cOkIf+(N(M=Kzi=9;; zTB!pni*;a6JRQ8YUntl*M$--=wtY0G4iDjAn$fYfg96H-PR_IvAF`|Cp&aw!SUfyQ zv!-#~OOLZiT&>h2@w+z%pc&15-MHSj86CLBA5(^C(_m%GZH|By2PBpFV**oKTCJ@m_qkZuEkeUnLgttbXS3FSS#hM zkx4ZFb33+7h^*CjUI;JMNm6Q|X!_+d#oWN{Hidcfd2hT&%Xrecg>FMnT%qJlB-X%t z2Cxlr?!&=i+VABadjAW<0o(r8>bZcnV(tAp<)~swk0yI^SAq5WwU=Ac7cQ(X_x?Vm z`id4W5Jx1vD|Nt9o%WjUKs{@VC-LuCRySt(=G{0*P~irRtAR8DkCp}ykb3HH_QbY2 zhTTQ^IH$-O?*ktn>C#iHSKWhQOKS$h6)q6&IWi1?fO!mb8^?BF`&i6QIJ+5oKsuu6W7jYZ!kD z9|uCUGdJ;Y$O{R+D=+#T?gZ*@B=Dkt;WjQQ)=vGXyL|w#)vwumKA^)h5{1q|o{Bd) zXoy1$P%!g-9&)3V6lt8AeD_L}C5Ig2WegTusgnKouM$#P&^YYUeD~!!+ti(#iZkn0 z^I=ykywYeB8@;Q;sUuckA?aj{p5jUSdGm4KS7U8~JYo%q$6@;Yvo%I;x~3T6)lqfJ{y$7RaIrmE^lTV z+rQd2GJPEow`jPx1(#lLt@sd~a?QWenu|;DpyzU%N@EU~3b3e;_Q!iD)pkZly=I)& z{rF0VB<}-A^jO1WN~zU4NukPETI*FqR-x zb?=15yAFmdQXW*lE3%GpIZ(e77GgBA$7ke58~P^)>@aor;#wV^HxvsVtQ|}3YA3e> z+(0EykK=ZSJVN)&dE`l=De}z%V8tOj8{j6F1kpV;hYIj>i#t12PJ)K*@6a3Ck}+z} zzw>1!`2ze{L|+@U@-oV*O|8nYAos2^EQzm&V2>g~+_l{ASNpTO!lo~ftp}zWtg6|s zkD?-1?nE)wz*agGU-_bnqwN0?_0@4vZQt8m?=?{=K}5P^XaQ+OdI;&EWhiOs2EPKz zkWxd#r8|ah6o(u_kdhV{kd_vPc+VNRzjywF&zv)RuU*f2*0a_I8`*e~O^z{)L01B_ zNSwbTZuiWk=LMZ=hA!kj=rgYwp!|}W+UIA^Lq@>Wx5a_4aZT$eg62gIV<+nZVY|c?$qc{Yn{C8%$Rm#!!6~vHAMYU4WPMFar^)Dp7JcgoX2D5g`)Yv(a44w#MDG@X|>PpQ8k*r zjOg9?laiL|`ykv}w#_sJ?D{LzXu+37dTZUMD~IGSs6cb+pk(VSN96hpw2~x)(D?bi zT3-2c4&&A%eqH_&Hv-Pa6>_MANtiJ%NtCuX#EQ%N!eKq46I^C9##~4w6V|^AHBwZW zo(JZGMQo!+v#MU?En_eHS&;Ud!0$fOfQ&6M;gI_N(o)iw zzF2m>1^j+EPKyrnCA{N)?qFt!S!jXwkcC7Lr8H`Tom=S2WZ&ahxPj& zODl1ra`!9xj&@dIf1Ugew8CefydG4A7^<6)9YvGjJ+WU1DI{?Hn`ZObY?hobo6Ee` zWrs_z-0uNj;Pnf^Qpo7BklssDJ}ITCAG9($0P#fdOVS^*`Y@zdj>{O(-bc}TyW)0RpuXJ}j?5TBt;4%y9X-T;{QR~{6T#b5=*1AhD-ckHl zR1)QenUunqeZ%g#@8zKx#s2Y^+~v54b==?){-;D%mSamx`gNWxH`bW*n199IPr2&= zGfs4Jv{Lo4Y}}C#xTNO5Dn&I}E4uW~(jhR>3A~)SQTA~?Cl-d+J=Ebb8--gEqB^go z^C`8IQI7R@__k!;oc5hAN7gpIv{bW&D}6uVm;aWU9raxaxPbn>l$|lpZ@v=&HP=VJ zEH}%J{|wyY0*^V*K*;Tlj4aOn!+paD26S$MCgX(qqX}m1&X=nD+Fd>+&e=DXO2?H` z1;kHNr@m`)h@g{<{l)UUi$#BmmGD?kt3yDhj$om)3}Lw{X|`3Wnl{<(;OTMY2x7LB3UNF~T32H(?rITzz46V8=Yn!(ts-^lTh)oDQC+qhnh+V9QzN#7dkoVlX1NX%trDy6<8QFR{iv#&`xqvVW{ZVq zrX>!n0z_WWx{Tj+fZ$!NR~u)hA7_pq?A*ci&dugNz5llcfzcm?%~fqC*Pj!gp!V5V7fEl3~U1>@Yhyed>-H79qtyWbYb(;0`i3c(SZV&WjcLU_kC*>cKiawKX}$ZRrcwHtjuvNQR9WzXWi!zg6@v9fU_Hb{ z{ZG%y0rhU$K1Yhrs;m9T5FdFeA}_bHA`Mm5HyKAh=rmb)h}U zHbhvuMi~JdPTK)$^M@WCp;bU3uwjVx*YN z>K>b|j4IYm4|rpAsKtEi!RMkixg!ZSbJ&T+S$LCkrK%K00^Zj+j+x=-x`>5k^BnC- zQCQ&p{NF24Qb=pwTg|5CS>2?B70-3+?;t$#QuXK%AtF{;2&LEVbJfQ(5+5r>1F84v zNTJDeSN?#>@(~WE*8OI)A|NotI>enPb3SgQP6I0Ftr({ETMusLV7AjSWk++VlX^;Q z9(weAH3Y&V_q`aXJBV!a{~!8YH$D~h)A5mSB=+D#N8g%F`tcYUiC~3t=+xi-5WDWS zO<#em7+BhYD``&7maR@wUW|^eiRezgzvgI){$>7?CPPizfu{TpIw2$!&JowHLe&yZ=t4x zkOr=U87m3ZT>?Ob95vy2`jbA-xf~!{9r(00KK6%*jE4^VIJhLmDBmy3i$86UPJ_WT zIpxY8#ii)Zp*t0)3(&E}s}76s{85F~W}_$Xli>5oE1S&;urzfIcDocrUZFv#iC6Q@ ztBLs~4hM_cJz;q`esnRuC1e^kNW@BUqw0UO>O!3q;NJA~FUN@UqKjpu zM94G+$yd~cD9U8we#XEQT_QPf&Rvc1HBYm=X%L;nVaIK+*W4VV>OL%hku=~lt3`%! zSH-$9HIz19GHu|diQ$v0pD$iYy>ekFB{!8S`M#Myf1IS!+FXo66EAj3iSHyAAJO%S zn+QFkDBupxA7SfGcZvL5Gdkm)x%zeW;>K0C?S{%x5`h|%pC{f(?W{_65g)lqM;wz8 zMpvXJ=eo`{jhAjQuvSN-7hf-_BUqC5y0R%`s`w4vER(7RBZA|s##rhSU`T@vE;2&e zD@tZohYr&!XLd>BB*Q2Z)IXc^(5HKvz8q4$k^4Yo`x(bk%vg<=h_{1*F1)uSA)~|~ z%lX-&c1UtR^=`uwWLkwI&+7hF>+~9C0o}%C( zuM5hh{}NsEIvbr&DV>Iy~D&1xB%e_@u>-i3`>HEP}9d`eL)QqjoiI zpb}kzmI$30+v;6HXRTX4*Ek*3f3mWPNwE=prl0>FPG3DB6!VL z8!SKYk^>pfO<1C?fBJOxcU2!81=edwEg6KxD%#+yE+lJ(vy_$J*;u*gA=CmN;6h5M zXzJ}J;5GxDLAQJqaKmTllgFv#3+x|&ul$t{)6IKc@hMY2yf7O^4Gh|+S!`!)SakBWIB{ovjTc-02n!JL z(>usi#=BE*>5jI!Yt1M_ul>ApEqlKD()}ohFX@SVn6VHOj(UCN`L&Z)qoG?1D*~vy zw4bZ|b2Qz&NyRHX_Eo7BpY?*?UamJH&;2NvT=XLgCz2_SH2gWRqdJyXb8SBRtXc1+ z|27KfiTt2>@2|ZR<-8OxdnLdcU-^M5Amdz&{m{Xdn*?v42%>7X4!O!|rVi08KLKp< zs?fYwMvgR@{stM|L!X)5riM<{L9Ppj7^{O{SU5K}+Y&85(0gAdFmHmd`!T5s**Xwg zqJ+|-EZ!l^calI)CvcJ+8N_Yr6VJZOMa#MaxX-%%I&2pa`NLQYSi+UIRx9k~5z?oxwOcAw z!PvJ`TK9;F6hwO7#KJ)O6wyf!JT4;A#%0e}K6>}2WiV)hsLbwIJqk_{=mRHLJxT%s zm4mU<<_?1kC-R$ybgosX4bZ_1aIyzgZ0V`Uzyi{a5r^JL|nCI&c(7_7niFKw+Gcc+G({ zrDZ8IN&#%BTsPVUBE}r=hvSX>Xc{#?7*c>Y6PYVyS3|M4-KnjernfaW8#J974d!SR z$1aV$Da@Ki{wNs?HE*Fwt4nW-Z#zxpsYiW`9q|C5N`uFWzhEtz+1aYUip?FI>Pm2g zSf;(xE#F0b?#2U;G*~I5)QN zgbBagZ$_>;by2Ozt%K8HM*;~mfUmseSJjRM{swGtr2DQ@yBPp{GwgAgKCm56(_z_z z+#3^5nSL{k(vyQjsC_z!GD-}>Mz#D}nElM@`DZdo82i&g8-;J|UN&0x4&=ptVa}Wl zOcVpAZK2x^EPIN=!vwj}S~af~g?-%q1Z-<&TDRs?#XU(eB(Pi-o;mv=^k9uDAR}N-V(6)PJ0;|M`VL)5X4r9I?*@J##heBKZ4m-cjS9o9DuX@>t=Pw;5NC3q3vy& z#5F|c5pXU^G~V_NNyl)8C!M>mby&_={sgzfdkAbFh4Q%ycXTS6#s@+H!2Dm!<;LBb zftM^0=q(c;;P?2dqAV>+Dr1&OiHM1i#Ht{A`n@QIloK+bh~a_P(2m{f*am)q?}sS}h5a2F-;HXRb+%eE`!vE#>`*X_hWcq~NSnYx*E`w{isHJ@c9$_#p8`ek$^5i%F>F;c3CkA zX!AF(2i+kB>n`jexL${84`ZIDA4|0kk#z$lKci87B{PQSw8#2v^{Hc0g?=^N{;A~; zai&AfD8Kggspzw0$M=ud-;4KqF9)osKMyzWb!9LU)iBEkZ0I=@WuguuN(KUBfTIOGSC}bl8XGkN>k22~L zMV0FAFbc5rnOf<1(j=8Lc^4XU3>rpo5r*i_Ui6<-6iY5HSc$3^Mk6>6??htfw@s35 z%?#nsnSd1u%9?F&_KKjEkKA0QGhtKk;-uTx&2*(%kizmp@^b8LlJ3ENcBMopS89Pu ziN%lI^bcMzp}qo5zn!Kv3=TIy3(kw7&ZeB(f7Z<-VdE)1OZ+m|RW*(GB9ms5g;ZbRA_KkR`RJhpT*bRg0ub5H+)&+PAf@C(@<|KfzEz#RU-E z_0~}qyG0)H8RBAyA-?x8g~1q&46r|guIK&c33`^@GKynh` z*1jjhbf@Pg765NYnUDA2f6>m?Oh+o*5JA*S_>n8zro)ycuBUXcf$Vnko_0~N%e(&C z4qD--t7zOb`rVZvqKX^17)drxawDWx#4e=F7=f;xfWguYGHG}cW3+;$7|lmbew#f| zR@{WHJTeo^?2kfc3ud9E?K!;-UngF_@|y;a+~+D>d%MOWH+&+Q8$_Wm3mjX>SxZ|r z1^$NC&eM@??ebA%AmqNco|-Cd4QD1lvMP1$Pcz?PzynNz_$>r>qDq>DwZZM@PG9FV}s_*eC)e7C$k1-<6spZ8ljA;EZRoJ>ehw z?mZ;x42ThA86`*wI}s@^KsEQ)u0@{U`VP><1Q#7gR2Wys@5`cDHBD-C;YG6DROk+) z;8RztNUU{jeQx!!Hhivxx7*Mxcd(RmBvWO(HgUOQ9Q_XaM>-&_hrj}X)g!k?{~=sc zo2jymVE;k>DWPS#Vw&t^blbTyMCN9ed18fR!_{sb$4%Od9qTSFc$$1Ky_E?(HGe5ocaC@#QvRtT_ zY2sV}jD9B%Z1}*IKh$c%wRwbbKS85q*!pv%Gv?TkIRB%s;)FVKmKVBk23>LBVu4R) z4~#ic%hzcTEb6PnqbHec_^01qPP@XB9dX56A@Xz*bfemH*MmJWQup_u=t0uJ(Z@zl zN_a}iLxXYYTgqtf=GOwgXoa|!eV4d_6q3+^QfvB6urMERh$S9XkRNT;k3hSuDQ>N{YA;H>wBvTfv|HXlzVcv3>LT)_5iM*;kF`oXAM?rc zXq#Tdo$}Vw@7u&{)0MlDKL49TKTH}3ZGG7Gt^#LICeOng_N~Bx`Pb#`*pCZgmeP@1 ze|2qCv^X&-`I`U3yXMmv9~H&8R&7!=KlNN-uxMF06O+m8s|fkQfEva4=)CTOD=MX4 z#4^l?YxqR&3g(Ly@8|r9## zuho9c#q+mrcZ*RGb3!UCXvSdN_vXXx7`nsP=``tjF%M*_&@LuWNM{<1IoPKg+NkLi zsJCIrypnTFy6$Aq4dNt%f6alSn|`!n-2FhZlgasbR`Iq;zD=zVg`V_76CKS|SPgAU zDxq-7JA=RSB`~YGhvVLc(Uf@M*4sz%FnRaL%?BzGyeF0$4g3B|{`Veb%c(M~x@e(s zL~N?f50f#x$7(SS_jglb>%$_8m8BBJuY)mC0ALx3Zlz{?f7 z0o$~&brYSU=05(m(=?E^qNk4E*xn9oz>wdR9~*f{@s=81pVAuppl=2|@@X8s_Y?L5 zjh!I5BfW{=&Cg8X-i1{v3I=a31^%=xJ>&RW(Q~&o%GCcq>KIMZ=smlNQr>&3u(Aq%-9U_41|AyQ)j zXESUYX29v}wtN>ffmrG)Y*0%%;tOGTA z7QJh7C-VFW>q`Bc{c_mFZKwBQ6!qz$uV>UW-(6WCsvk7!dg+=U zOC0e`;ekvr<9v{Vx5kenbBb#OGs+NW1iKT}=b;PJeQCB=d-9QZA2Jme26)DgKY57h z2sArwwc|T5haSnOtk6MXDcn?LK{yNKxEsK}=YJJY$f&}XZbh&}B^K&Xd?nnbIeP`r@oJ2`%}8qVo|81r8t}I|bmj;W^mSZWaHOcD8CKBduh87w;2xCZS#4$2?wRwi+Z69WosTV{w5A zFoU>5eswk&a>L7e70>pucX@<#9?nKfkcA)EV^6H|rA_}#9{Y09Zqo3`siD+=HNi;P z>7Y4+%G93l@kfolV=6qKAneJCY#M9`2wQ4&>17gk+G)d^q8q_d9uhBkTD1bAf=^rf zFnCyqS)&#`-VRg<7Ak);p&InN=ULWeu)MClfjOEo_Pgkp1m_`@LnoIzMjlyT?+H4F z6ek~1myTs?((xu+fZis&xv^C0)o!s;}N5G}}=?fKf^M#V} zJ&FyBAfrW|L-2ob06WU_<_W$^e0)tL)0gGgOZcQIM)>|G&M@azXxR@TWOqt595dP%jv} z`UUeVh>(Xf4)np&V63J0anT^l`Le}P8rkaQtKA#N^{CP4VH>#ho$Zn@>6>ZHrAy5{ z4UCc-w{2Bbg}ev#^`3@s(InZ$J~Kw?OKEW0yh?&eJ)gBnX`TQ zJ%18CyJ{NrqY=Hgh6#3-49TUBb$KA*?|CH*y8KN8rThJxGrT$2eZcNM!)gn%+~9Ob zD)MtF7!d?gW=y&4?R{2r23F2=%QjA?dXf1%_pVS84uL%=YF5}=oJi3fCzde@uXnGz ztg(jfM2fV`?;W=IkI+i|Za*mr6ElZ@{*yiRYv7*m+&o8h+WQ!y&#WQTGG8fmUhE>R zaR<6_+9~gj&7}#mZN5Bdf$_OEHt{2kx{sRY=Kh=@1fLc@qFuzA8U*0xJZi7my2Np3 z%}Co1%Qp^*ms;b-3*v(Vpj=N(R~k*y6HuRA_^p1dK_d{?>A)ZzK;Vmv!rmJwI}m;8 zdg{A+K@zr0rBv#E=r%Zptk)*3WkVL$9X7NpVg_q4-%)6Ii-?<6i_L`ppTmT}O@S3j zt1W-tTV!gQ34_Ue9N*OlL`?XEO%g+#pD!-CkT~Wm8};y?crfp1y$sCa#@y0j%#VO& z4II#3#Z^A<3L$@dNyxF~mKeO|%ZjpZ{8Ij1gF#Aej524O>9#`=Gt8zmdT!F=OG{)~ zuU>vF!|#y%K99lfq_nMkw*P#l&p&Xew2N{7NPV+SaA+Twb?@ z81d><=f+2nZ)8(s31f_I_P*ycT;%TBRCol43iW?ZuTmvEzdR{HtTYOO|l-n$iv-bWaB*&iW5ZrQWXF&rNm$V z*Kr{v&NAU)61i?A<%`YpDi(??8QZ}H0g5lv8L+UK`{~$;Qa+6MUJ(m&`Y>{Oy{k+w zW$my3#?K6a4PeQW_KidfplTWUeV7(kk_sgaRa7C{q#abH_J7G1)?D8*>ker#YNCT` zx7!D0i&h*;WDaelq|zU}cA@-(s|fDiFGWT8Rz@gcuUmzv_KzDp9D8g%TdLGYmfu;A zu0nqdnkI#67{;dVz+{9)YS<_;6kTh_bA)v&57^7E>gMu2-4sW5tMR@xCrQ;l^t;cH zf0F$<$&x>xmC|apl#ttcQlLtUO=5PF{(D|qkcGRdNW#|yzmrnFKlT3z=7G!bUND|a zYnt)$b464jSmcc-{v95wzTs4igt6N7+Loc-Tt?-k8)VEdQ)vD6IjtdB)V!Kf;WLtXqBr-@ zAsYp|lLVe+&3KwmyX$x_sEpe-Vq}v!bv9w3fYhs#JwjzN)zcjE$zg$(8v(E zBnM_romw^~j;%O#5&0|1<4ygxd85tmO=Gi7G5uy8MK@h*|3em3r8&iVlEtHmT2jY3 z`d$V;EVJhN>*ev|{AOdw)gs>XgVA9sr8zghd4{B)xcCez4-O}VB^HqxaEbY?3uLhii zz-N*=kPag(y{<{IZNtFQOlrOx%~P-8K&_f=Z{I1p$A8-i5t7K3^3|hxxs?h!Hr&8Q zQQu-s%;B)*()eGp zjYDc+0MQ`~3?ODDk?IJYGoe0WDF%loHmIO?P0-<)3cEO zunQ61IUyjhzR7}YPHlgG8K?`ZE$DQ$LuSs!!3u3uM#Rm6Wge+24rnJ`7NTC0Ww(2V zbW-pr0~K!p(NtK$GxTN>bReha1>(9ta6SVc@$UI>>5=q{UITIJRSgJ^s2+ z`;Z4h)x-Vy9G2e}Dr_MfT?g=#I%BhMu9v$2{UC~|@(^&yi`R7(U~$y>xi#*4#h66x z+j-?gTRsh>Av2H(FZkw`q8YaPBz5E*-GNEmNw!!C8t5AC;>fr6P=jPpU&g=|k+4M$ ztbU&j?a0ZXFNNTm?-%)!THCP)Wif=$ds_d(dsGAqiiYqx6 zxPQSC_`6ASthm-kUtF`LwBYUa`Rg>bBbcx>NrzEe^ZJF0XY9f}B_1>meucF;DZzOy9e&5UD#sX0f(b-z#^6vjp8b3UQkp9V*zuyK> zTpV|wWRCCpUOa5O)Vtc|pNc<0-7WVG^bfhr@Jny%^nCYc75!RCKmM{kf@}R@SQF%D z_!LCh06Q-aZyatGXz6b=dwjwFyS)v+(E%0YgC2Y^qrCGk8|Bx(+%8@3-;IB3YaRQN zOeBD4DnEQ1cY?hBDLE>yT}l8s#JMzvUc}!eaI6fmG+?Q76WF2cy*UB^%4fVNZL$Yk zjZ6048_}lu?asbPTevgmql5#c*|zv`#HMq9UQ{2A{mRnqe88?Jwcew55urzh zhujo;V#rvv#T|zX>En~0;lxo8*%+@oN;Q9CbX=|0yc385iK&83M_6j)5&Cwu&p;P~N%5 z-t?|x;dnDJ{T=bgBJW7m5tUe1c5SZg_QYNwx>z|z3#FDaYJ3xqcP@4NVcD~!z=@fA zVh;K=UnG%JT)PK8!NZCu)Bgg(VFKnHjeBfRj#MR3NC?x0pv>}?RU+fnakc8SX}YyA z2msOExN4!|4T=c4cax;KN)6rJ&J2%0NbHUpm3g$t!c52JDX2w6O7PBO_Xk7-fgodi9#WH_P`w;c(U$IF)|b6_Tp;|eExpBQ`f zq@|rSIDk%g?P^c{;_3Yh#|75Te5?Kddgc=iO?xn2{no`t1bm6yG3ssyGsTK>1|!9d zy`Eo1or~aFb1a|f7D(ij&OUBfa&xc%+i;-+iK8S}hHQS|a_{QC=rw>)=(hnApZX?# z;ul&BOdU(Fmck-BpRqqtU1*j2c89!Hye(}Kl;uixla>^*h|!q#I%+U>_d~&*w^ArN zub6?=O43&vuZGtpgL0IhL;XKj;UufJfUC*?PsNWOWglgc+|;-`R^|7!0q=+nqpQZo zp5`V1D!O5O)YFg@n*Q+7B~etwK&wX3=HHLE6kEaTNZxRwo`mguh?zcA^S}p9S&+Z? zNihOnWaAnG@%MXd9^IMds6_u7I^VzX5ZoK@t9*>mqx0qwUEUUPMK8yCfC}61w`1Ma zVJ#^$rANC;Mc@Qd6+*&H5=G>ejCxzFM}F=)0ZqZ{l&81Ig_m3}Tkvj@(>n|9dI(g) zE!3jzv9)vs_n*INu9NefPk2*%GSUYR zr=T?!kKa6F?YN-TZI()h=~gLE*EC~&?;<)uq1pC!3~cHQ2D>y4Jm3-$x5Fpo-b7f& zDo>SHe~}W2JsSa+9vdlUsn(mO zk@YuHya>4`-2rDlQb#Xsf6kqbb|)Fws>i|p6G|@3dCr;cv;`JshRm+HXgne}zHcGR zo2l+&TGGbFkUQ?j(V0*A?$|jBIe8Z{r>8*rPJm1>+`%r95J8vl>zUAoz{92yqquBt zo(~JMqijxNAukhp?lSJvkT~<-X{5^0EZ_3J%ALLGx%H6w!?b7p@Y?ih(60MD z)4nt_*%}J*?*CX)hVUl9i?9g@JT4)q8D(Z(qV%eUmh?)>{4ZRQB|lj#E%yx{yzoF1 z7T0-a2`C6ZUfE?^1u|1!5teZsKM>gOKg$iKpBC(vRaDlfE%PR4Oq2^9KpVn`zot4B zdG2V1Jq5OR;NwN=3vZmWxOCxeo9Wt~#y-omQi7X$Q@AK%W!o<`lh6zCp={o%uodRr zw4~;cjI->{*Md&^3i7By&URHuV{z#CVw!rdIJvw22X538y9soxLD=eC*KgTBkXL%L zxm~BojQ;L|I&s%hI-i&1D@sMi&n!v7p-1KKb}sqUroQD+TyAQNhU}kv)Ncvfcsfas zC=p~d?3B`<1nuEmzdaInE%+=Ci~9BJ=-fAh+cTR^`o_8C_*$N<^caB&IYc6)D)7qTJ4 zgPb)<;1sjfq3@0ASd~rLkT*93481E_*oM=5UI#d~wr5?zM0C29$i;=L8Byxe4AJZ? z8&X_+g=oj*=G>r39L!2RW+k!Hb1YeTWuu3Mv9|lEgy=nI!NuiPV|fQ79uDr_rXxwG zU}1YFcJAlRm-1Sw;r8B^n;2;FZzZx0@Ho9AH(xJ_VGh)6q zu*|V(yNK`0=y_93aWO+MRsRe}jN&aRl^-5bAq+KOmp*+vQpL8m7JS=(6`jf*@rA#y zga6L=D7kK->c@{s?s0ICgm;m4Yr{)g<{P7X2Af7-n)f&Ak*y>@5(>43+eqa-`O;mL zD}*@;3`Ig`ZtB%-HQkv2^uXBcf3rnZec_KTJg(O8x1*0RwE)kg&X=|1%m|vuXbaPm zQ*!3K+?p2eI86k@^301uL!kg%EUbqlCiIEv`>Bkc!HK6x*$3wLWPEOQpLGqAVtzHh z-obE2eOIliNZ5gC*PNyWg*i{i;8Pn2p5m{aEU*U-XK{9Wt2)y!5n$ z>mxBL5OY=}RsPd#YwLzOhX_keI@j9*{2^0|u{MUs8L*!I0bS$vAEI4*^gK#Y?aBea zxrt&bgEOi}mTCX422eHdNjnQCXC{hP=k+}Jan8m2fN56LXLr4ign}tsh=rW-p6JbC z?o?_7OATeRUoS_2yT7ZFR*^DuiomW^7u+i#Nt3ib#`5soWUJNP<=BhPoIzvktDmw? z5KYsD8K|}doSS8*36un`voB^SK*)S@c7ur5gt)V;>AbUK;>Y$>V^`7>7I?RT>wR09 zGgj2C&KOs`E z7p1Y8G@FPX@l{Gq3sY7$B@Lg&%-x*-?!dhAy?GpUKH7B7YW0VyXdoZTJa5>$`0k`v z{Y!qi@3Y86pT|rJ-2%p*v$z1Q*>#jMj4i}I zY*mLa7-$V5VWlrx(i=NI{<(GsffGYXh?jX@&fe^};K@%GEIcB1ArV+SkD-@=+Hs=Q z;2avv1+=uJ7%KCsof@+Yy%j%ZWX%n7k_4sZc?FFp%i3@vM*C2idM^8+dabJ%HyT*Z z3M5!eqgHfDr7vWJrRYgJ3x)6q?K-SU9ZD;c%c7tTpw}9awW=t7GQ#GdpB$)7?V6J+ zHe||{)bsDVH7pd^UgLXL9{sYZB>7SQ`OPfe#3!z@s&l$LQLO;&qbUV#u2TTe*i8i1U_%S%tIm4hnu@uA+t^-YsSG!FL)%AsB(_|=H+Dt zlnFZ=Uo7TuPCvIB&y^i~%`TcqdYENsU{L1Y*5uzZ8{2jfJ>%E1TJTsIk_3Ql;FD43 z3imz|p}k}7DMWg2Ff=Ob@s9uM7OiZxWYoXg&*n-dGhWP2eSh?w6nY@z*v)eM=IhiZ za=ERe)%)9~P;I^slR7?zOd#Q`06+1_uQY#&{k_KvHT3co7p{}M-}d{6%gJB8F|^lj zHWHz(*6!^h$fcMKB&IG1`g*!7@!fp^0B?#<7aM6tZj>G3rLtA?FBTzu?~J4yZoN&k zV^iGzC${NVL%W18jtP&~ec(m%`t(PWZ}BkyJDT*8HglDaANz0G(;<8YD;I*r!;Xtz zHyxY0cO(M3Nq`4kqb;ChIO)19|3~IoZzvYcGL?52a_@oO-lTDL-Fq`WZUiGS091d_c#i8f}(NErg6_iw(<&QSI~t`7o8F!z() zhna$~<2|0zC|N~~@*`hIj~xiOOPb3H{ZYbV$_7wq7X?@kLjo8xde90u^Xzn;@%f%` zejpX@6D9$z31ktNeaF|Kk!u%4Mo+>X2v0Uuo{jNhCFgU&Lo;y&R!rG+$+dIN^zu^}hL;<4c*tQDi0U7MoQF&khQ^8!dYp1EO04^S=7 zV8(7jH+wjbrA>kvt@*FLqh?g`A{rgh)v4;AI0oEKJ@A(VHd`fOZW)hHy&mGjxDwr( zgb7ubYcbC6$PG*_K)-NGFC-!41#JDev|4JZpI;Glel`#+m}Kl(&TmODdbV&*4fPLj zpkOV5RDsdzwx1QbqR5)F5{6<~&!BzD{!vipxDbb~>Q$%yI^ycp`$xBFG-D6v_?DiD z8In(k!i$^%?Z^?cb;3NCz!9-wz_%3Gh3Ov=?8AB+9oPVWx;r<&g|!!A@*@l%El0wX zeN2oWQp{hn)4gD8Rej>geL@6AKA&Ms%wC9Yd_1o+A~TK`*`NuZ1pqgq6M0Aef z9)1Ozc8PYGv*7n@f5u9I0SqxYD})-|wT`lU2ad4Jyd?64H-+#QkYEbVKzBUGw?z~c zFN)*`F+%RPD6)#rK1~nMKzuaVL5(Uj3cLXAki~&&=-IoLjMp>2a`i;yMXB39!qZk? zQ((%NDos{=<}pytjIz^={{6L|B-H9CxtC5eo4YO-#654BNH;nDxzT=8>BnQg3&q97 zDF@$Z7FKhJIoPw0+APSKlHe3epllTZfs!$N?XONs3<0QqpyyD6AVbps2R6Trm7-u< zoq+}4vxX*98YmHO73MxTILvtn7KxjW;o#R|7o%7rP}Bt=ucI7DcMQw_S{nfhAnA*g zA&JTL z=EB-bheYt=dmGP;q`8zlezX+?7xv7ZI{lR zy&kE~;to^!iqqbvlBhE>BC+P1VFCo76pnS^jnvZJpJhL{mtD`hensO>p8t?SetX5% zmXXtU)F>>M@E;>@9T=cHiB*L=lQWzszhS1hqKrKPA*izj?&C!@%%j7728k3{p?GBb zS~{1Tm+uPYIh)qEE9Gc_wt1tUIrFxF+Dv9_Y$&Z7M7xTA%UqDB8zw78)7EXf)#k%G;p3N7RlU0tvRFb|DgF3HnB(qP)6yfp`^Pu}NZf)IJ{7q)m%GvhdP z6%FO%Rhf~LkF0_zw>g3X9&&3>8VZGP3k%*pv}0*53H?}ZC$!x!KjO`CDsOr}3na&Y zPH%e75hd0mLTrD143@uvNJH>M58m0BgvTSE+z?!=+a$a8kc3oli5rzm%Edh!6M^h! z;EX}<`mUa66gHYTaci$=1U@Qts%p_xmc>Y}SqJ#*QeItx801?YZE0UXMX2IL zdbQJLDyRf4SC#vK{e0mtkcY{!E!Tw7BU#Cnk-fo^HUwmn#Y_7xhMK(S}+JF zOjMBPBdU95*Zb4rD?#cQ*yHxCLT0TKG3TXx>2i04J*$)X18j9ErwhNTi1vr|%14v8 zTfs>jRP)|MR9{Msrw}Sdp3`Q>_zhp8EWs>n)PJmFSu*awtV;!<=Z3m%-^Vsw-P+|h4urbf-2646qQwH(JXif7po7^K_ z`=b0x5uzfxP+?xil*YhlxhRR67K);k(kJr1Ay^SoLW(~zyXb9gb5T+Exo=Y6if(No z-qS)MqxJT4@N~HApaQ(;hljh932Cb5M2Y9{>zEiLnXMen-1)Xn0`f73{7D~&wkFH5 zh2puUlOyB=q$?d%DaB1Ot@{;iyaFkqlGzI7Ok|@|4wBS--kL$fR8KDw^;()#sf=aq$mhOc z>62!?@x$@J)46Ke^kYt;HzJyYQ%|dP0=(h+p-(JVjNB{)u6CacATea;81+V}NTt7V zbI*LIg-(>EA1#pVdu!&l%^vNG;B`faz_x=!Zh{nTXxWsa#KxfyjWgDxxm@m8q^dzN za>=_s1}0G;<>w!nr-cQWgoju0|JC;W3l-bYoO^9Y(O<{CR%56LQ+0NV@3~T+Cdnxa z+X;Hd3uNYfz%~@4Y(sq4;>Gw4$f``C1O)&h|UrJxQ#OE)cCRkdhsC*N45PUt-;&hf8Q5EF_*&(IG&Zr|cta%^#Ou>28+Uw8HjR#c6KbgTQ zLKGr9gV)R>rm>GGpiV9)1VkH%1 znEUDkXq-oY!`fZHUu)PSmq^NeF7@`eZmMv3s9dmOaoGy3%9FO?{I!-Y(((c0;Ecwe z|H^7r;9%ty&MJ+;PUB-DF`Tn4E)--WfvM!eCUW`rc^mbvfg$h zvHqo4N1SgjnZhWbcdtc;h~`1msrCOm5R+glrU}YX=qiZR%#5H6M8(%?cszd1>xa#k zx?BsB5^oYDDk!%UNZ+;RujoiCnQju6bZ`HCwAQdKgp3bH#9init|tRnfq=kdCfeg; zT1DyOF37{Ag2zf~P1S0iYue`e^NjtrwVlY$HovupzT%|eP2K~VLiRQWt_{A$Dv9(>wAFISZVh8^YcHgddf3d$r1#O}IqA$!LH!|M;T+>;vL@IG%I)RMI@s?GlI< zWuX}f$R8#8ac=0)pBHhexRRc<`&-Sz*Yz8-x!7cei7mMjCuupNi?_jWmG+bmhq}_g zytzDwH8mGJgmbLrX#Q4&aO}nlLhU*VNVZ#|mmS=^I90yU3uOaUgjp0KOsF{5w^wHW z-lG4n4CN3Exa357=Y9DPM3hs#uXOT|e44bnitMV>xr{O0b2m{_hX~)f{}T%Yv<59p z4BmXEbv#P)&(#qWQ1Vz>S@XnIo!0rkOPcegke6&N669ACHb9iiKA^P7tYZ29tKSye zc3LtuOi%7zDN@pabbxm!uZR}R|I6rUX$Y6xAu$YiYzr~{-k3=C_BnfKc4Y3QSoNKE zDxV^sE{GZ%&D|s*c$aQymTj2~#*1IQK)sH?(*_v!lPL;zM|=n*o!}_;_&ZuCFEBTD zOCHtG%KHk05GdFacfl(T0sBH-V-*Y%J+b`UtwA;I`&85ow_BHKyr- z!ev3kt{eyj3KF0o$U=VW@*HMG0TxGtmhbnJ*ldy%{`Uy5Da5kq=7x%`-5Cuu4QlAx zqmMvmq#cGEx^8Pk4d|dL3#jjoURnyVekW+%de_p^pdjvAnyo2z9N0IR0lfPC21NcR zsPzPw_l9`p6R3|Y;yoSIb`|ly9;I^*80!WI&)zz}JK|sd#vh;|g987JIrdE79&3v! zb04@0JO;#sr-e~spW`i0kAqWwH77(JWSbrvA|AJZ+dNL?xp}e_=iTXiXFj*AdB&oD z-<*eG#>OS7b2d%^&9{qqH-SRqjHvd}NkX8#(#4@V(-uSoZT!E|UmL_ve`;mYr7F8I zB5A{sq?I;R{0t87y1p*UJp}Yml9t$epz9ATxOHdy?h9Y0AKesNApG0eR=4#gaOzwk z`RLAwxW3$oZ?*ZyCbd-p6EIK^c#U6Zskw;v`iMyz?dR-Uo~`2sjFgmhRTWu>*ZtI< z_ICf#AMrEh>dlFNTca_}NUVD)aFpefnNLJlQR#KwgGOSftu=qFN?vz_^R$G{wL=UH zCxS!Q$=}~4Fzxiddf6jMKOa1^JAX7um4~5W&(x=%msy*g4bj=}n{M1{^HB(Vo}{O% KpUXO@geCxQ@=~w> literal 0 HcmV?d00001 diff --git a/.image/短信渠道.jpg b/.image/短信渠道.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df3a5c39b528212206ac4018d444841ab88a9754 GIT binary patch literal 82323 zcmeEv2|SeB`}jL!Mq{fn)-+h4n$CO9bGGL^=Q+=L&U4QD`qcO74uG__ zq*wwF2mnC9f54|3fH`2Uqi?E@GdEpeYGY--%%^0nkGs212Pb<|$%~%fK0N7pH27)M z4L%wRO?rZrK&)(Re3tt(tzFyn>C@M9O)Bzb?(CI!|ovH8co<66}c3fdHlmnhnMP7~hAJd0`YD#)e>d zq5qnL-hqZ5SSY^S6%f&(G9lOIld@_e4un6r1^^U(qav-AOhAVUxLqiQ+d*gkj0)r~M zLLG@En%IMyed6}JG0k^fIGIXGU19PH(hGDKVq@& z0$Pz4JHv(IN(P{0y)l9ao{>iM`*>au`e19XQEP_~H)2mV$f~e|Yftq0#L(yfFdHkx z4YCH-o)8>#-(>UxHU^f>W}I4x5j|Ymw*g%V;_Dxc&VjYzg%gEvtyW;t8Z+L<0b&Qi|gR1K}Op!xbM!Z??Dd z&#d>PUPO|G(Y;)`u0#2i0cje?4J_i?fnGONMt8gAA@>v{$YpE*-iibNWAgwxoJ$^% zHzV&bYSU2>^vz(qnZ@}X>lvXXK)t!SuPn}mo61%5i9TI@=poA@8CYe4^&T9NB^>B&!8NB6NcF@f_GF$D zKIgo}E@$~Zf9u!nQ~-Kx$rf~kk;${l!J%88k)5>2?&q(b;(? zTC*gFTfr3C==tZBu3~ zX1YJ=;-=gW4>XOu5aZff?*;M11FZ^a^K*TPZ^9}L)7Z{#z#8d!%M*&*LJaW$YP4lo zGyrhHFpSNU1z0BNfeuoWAPDe$=%64h5Eh@|qoI+&eZSmtj}$6#v+o7~1&{6PhGrBR zrM(Wjy+j&Y9ZC2L>tb^4>d+m^>06tA!K1R%O~_wDu^S~L5`a$Ntz9&Oda zEhfn;*R~wPp4qwRi#B)wY&FDxLFZ30J!pV{!_V+~?dQ{y(tCSJD=%@*0|l)TWABqk zkVH-+;1X@kbiX*9m2Lm7H(VKNw3*kga^c2BXDA}Ze``Pu%xvQ06E>50K|J=M0^w; zb;0gF>CYPa{d7oF%h3)x}RPZ}K(T8(D7+xE{|)&|l9f+iT!+ci+yWmWM#WtFB*< zb)vt(>dyht9gC~!JyHHV+-GPG?(LHXAjp6QZDidcZTy7dRz+(xCPe>I5Sod zvcHL6?<@P0$1b21FLO;dm@4kRR6CgbTW}DCei=?1uE$cf4F?wercUE@OvYjAQb7?cduPy?uyZaUu1ESxhF0Ctgksronw7vwG^ znYW@K5dh$V1jP;k3l+g~v9d5I9zc@${#S+3%)s862U?wi*8*{F-fMsYL62b?07L`m zJ5^xQ%yq=kfr+XSJ`*L3e=H`|g|7^3UcLgWUo`_PL&n!UG1`w-(_Z(H@`4 zP_0d$nc1i4caD&$L+D!Tp5GCknWdzfs2Bz=oSQ8VMX~SsCq6VQ>^`ZNie;o;CF+FO%L2$0S{;_I5R2rcTm$_B$@~|S$oUXq~dWJ#Bpb5g1+fsov@KNwp+i7 zi_eeaG-RrE4+HR-TTBN5h+}JpJ@>e;qtgAJYOscxj^`IvYXHKbD>sEdqKW04Q*-X6 zFHA}9u-|R2A3tbsUUsqdfoXfr(4E$^OabHQ8EE;1DFA>8&a1hZv=(ABUn3?h`xPF* z*U9DatWHzn8xQjZ_5SM*Jh%u=YBN)cyb#t7%KMTRcxuePNRWud%lCz82rXdB+MtD2 zq__wf4er}{dcvHBOtnu)S%=T7VCRra|B4ZF=dTrVB_c&F)!Fb=i# zA$GuUfdP);L+#7wp2GtGPkhR!VK3Hr0yC6VlhVo-CLx{Aw`=%0A4wkeniueZYn15Z zZ90-9BNHH>>blorjlO-tQ2wRaPLRv8n$9e^R@r=MF2Hop!+v#{;dU;v4)<_>RkH5& zE!`7`53al$njLmvWn{u<+T~t7`o3{23W(|$6x-nLHa1whOht36lON zGf+nQA9`^J?Bt(0XsJ>34tfKRbj9lwog>Z%iLX6TV0&OAG+tKD8+Lsq9vA9*X}%es zeD25XhV28+ZT(e@SMA{9!&{(Ch+J3EL$v~K22QhrH;Y8jyfl!yb5kqweCR^7MgReW zHbKegYEX>9WN{RD0>FWwkq~hIjRgas2t#uKY&03mBnyg8@)ciIX}|GMz|O8M)UC67 z5@e#j{Xok|D_o8P3g3N?c5i)E>U0mB{-xWGpM3}yzi~GF%7rb7Mi)$fzHKI#9Wm!t zq*vo?qs~R=^}}v0Af5$a6?v2D|D6c5)GU|AG>}o1$b$$Q!Lpl~8X>M%wQ_nH$MMp7 zhXaETmrw!e#ci9_p4!&T-mpL46IzUW;W^4v(1jOB4gFN7cK|4pEvKe?wftl(AWrS7(q4-N>ay?@|w z04qrtU3z?ONo`xs2GUJR z3(Ma>r9ar)Th+-H-}_+ilM{FugY_dfHR?KFyIYISUMNLkN{cKwQT3Nvnw$wjdQ~2J zpi{Nh?f#)gFv(<@)~&|8$$0<(@jAtKD(tVum3@I|-kJ>N2ZR5_3)+ONclu252B3c`Tw3%Jok010bRRz{~^S1;hUerlU&N zl(u;itN?-r)r{p!YIb?xVQO;qTDvE2wrt0@jt1|4A0MQlI| zQMK*<%p4{J$A+eQ))KHT01*ECNyXop>{HtK8_~IeEnjENLkU>k{hq-m=RHYujX;UA&4NwWOgxk7YI8^=INDvZk|6ud3zgh zg1*0dIa3pY2LK`)G}-)%7~30cf$muA$M9T@pP9*}0h$wJGsrs>pK?2C5MvALJ{puQ z&6GwK0eOJ7+=N`8JNRD@3HZZ{;F1VzkVaEEu@hR{g}(xl697O2M;$#0KNkF^&sRIi z|Hmuw|0ViDoyMJCm&yOmm`>>%e~9y@0RNF1GqtXN68~Q(9^#A6L(l>c^otaLJPKld znFK<3g6uzb0s%R-7;lZj3xLost0lmh{4@vvipt3jPQeNQJVVk~91JC1Yv9RGKpppY zcA(+;VS)g}5C5+B4~Ck6o?0se#+(Y87>CiD)aBM2^}qonKt%wa-ay%;slPJaD+>FD|x;aHM2O{ zrX6eyMsK|PZ}YdG3@Nt@4u`Nd#-9ZdXyW)8x8gKD={tM0e$}gKjasM3GHN} zJYWFDkrs;*%W}exc8tFlrpoBhqX|Gg5Cejl1TO%_M!?u2Xn;H_N&o;ypt{RwiDtmb zIxZj|FbP=R90Vol@a#va^qdjSCazjPnV2v(p{CKlq?%#7WvV*~Ml11KW{Y_m=C0*Uhdv{uELNSf? z9W*Adj96nOo^SE{y$Z(Qf=eZ1G5#|eKPfsT0u>R=SOCfd^NkJ+KhN)o+{xu3Lpk6H z$jnU617$a;eS!?Yb$b*Q<+(N_EsvKG>V<2@Pn7r*f}Ky&$*H4)5i%J%7K4fj zY5Ok{h%3s`g}z8Zf`!{yhCg~PZXZY)5tWh?4g+ce0QY=hW{(oB4e*I3Sa@y9AbC~FF<92zd8O8Q`3jZhd{dpPk!Xvd2}`ao_T^R4)Ds}zy=Et&{Nu; zn_rP9>gow9S=DN688lMNdP;_G5=8*f6j0HDGht9XPatZsztm#+)bwSdxn8yv2XIHK z(<@)q!~PwzLUG>u%@Woe3XP(tC4s>5=Jy|?19f1$Tw*HH7`LOs9t{n3y>{5K)% zl#Yg7b`GBh8# ze~X)8Ogt7^tB01+0>-&{ZJ4x4B6B92$`qXwqfa)}9VPTEYA+S8h3DfdGSBxL5p{Ai z;N4aL0YLHNEb&-prZ-xQ?Jk6#$@UX5G-+q@3kdc6=eI~ExAcD#6UbX|(+E0H%@q9j zRr7=dnjiW%Jrpob$th^Ok@$B;cnTUq9aZG+Hok^d%O$d{R8@p(?lI!DMW#qeVQ!4tgepar0#AB)f)2TV#4A7Q#gi)oa*lxcZP z)@CZH^}>OwJw(^lxRvWBl>zU_=I(Jt$41=XuRWredHZ90CGQ1CQ;qJzjZWupi{PpgtJ(0?LtQc|a%WpQ%5LYkHfH)w;# z#3Uf350(zTj38kfRZ}sk5CEL*NK!~QFqNH*v;4JG)kJAS10!4jJ!aGTNtMmeW=n{- zE2(`xOrND+ukw4E&R9{Qc_xXua6=ce05LIbhIR%_Mz~lsSC|wtl}H!-RJ&pf4DvTjEC4`qGdUDu{E%>?^bFFm zNl8K(tr}q{uQ0jK>+Pn}*~J{5oSW=;YsVM_V%>?Zuc*5g&byX6!9hh`Gj-@O=K2yD zEclcIdU{tQcxRtkPa6Oi`-zU5&U7WIUd8t1!|fzgC#C>^urpObn-+h5<0P=CGetF# z?ZUC%lRzCBuBv8-*j1U#x&%}Jq9Kn z_!(pkJY3>T7FI!CM$jwX$^#v^)l4G65E5 z=3@s4-wdm-HuMJ@y07N{#z4?atia!1OlfzzG2|5V{`na~6M!{*Ne#@T**$V`els)2bAkaOh3FD? zxk9s;jE?w$fP62TiHQJsNm13#D}6P1t9P=a=7*a0>Qxprj)S>y+$D2j+I*BBS<|g4 z9pL5@H84$SI=;)3WXck+l14KckSoR684P8g^951anljdp7j%{M$*##ARjS7KeB<>B z0+V=4!{2evlyo8ebj^7%l&wE?gLFA63_mehK8*{Wt+~k*c`+y{Yh<*hjJvQ!dyHw# z#2X-j!Yu`ACG*@Y8po=Fn2TQ5q|uCE(Xp}ym3gAkwG}>gc;2`dyJLcLoh*5HkCu>k(96Wdif|i@a zc`^Wa1GWYawhW2{01dVPG_HA!Wf455pW>nA{y-0iZj1)sSMbEc1s4_pU=jyS?!vc>@s3(D z$UroH0lKfL720yALqSL?k4qEFFd5Y&r`t{qQno-(ADAO&Alz*GrQY!^Y4`QEu;Xfn z1feHXp6OEWRcx2sJ|{+(!tJ07%1n}vU$5qyKqpN8N%thaD@K2b{1eDGG5=)QIWgti zhX0B=0Pq7}E1Kf+Rim=J8mFGrg8LCF%7qI*KPC5U=2w8yXbu@X1yE&;XU2i&;e?Rl zC?Z}<6b$5nC*8c)@@2=?4=0(xfJ7)}piJ6&Pl1!eYVzo|Y+OK%*CYr`Vo@0!p=?Sz z@PIoXiYRg~wx#4vPFhWqP!W|)5#>znIYOVC=$vX@4c^L_&!2}$Q*5QltS9L99NzcM{|+p$T=fDwHy2s|+Z=MsHqQVJw1 zBsLvgqe=*AoCF8pVp-85!ptc^QSiP-4b^>|yCKBl_6&^xdYyq5oik`HhpscwL4fb| zd-1elPeEbG3UsEVZ*d~=yd4;16C`~!{u4HwjKP05#(S9nbWrKhX2$lAWAD;n)V7! zIgEmhF~Pt0{Crv+&}9G;KXv{Trp5bL{@V+ujO8vRSl^p_=} zdEkDJJq0ex1W!(;zyKTs{CLk~AOanY2Zc12EjA91CS$=pBk1#P1QXEUo8c$|T967Y z)2dE&PIJ=A6UAOBj&<_tiNXm|#%;uc=(s;=j8%fb!Z_;(~a z-IK7TNNXcSdomJxpmuqJS|Ft2bvm-<3mF*H`SPelJ7sD|r&iqVG0W!Ix**6r?oV14 zAn6`cQ3ZhZ!-n(a>3gOsLlC(2Zs%m1EB6}5>kunhO|#!pUYFDHb=vOVTG z$Z0y`){R@S#94603qaCA7F+C+P!HNcbg0p_s`r{jV9}!N(Ssofy`$E{{i%(nD5;@r zb{>ao=XdRTn@m-hpoPCQZldEF<~Ujq(4yr>%R9jshX?|YI1f!X5}V>V1ulNTrIk|~ z5JQ~|&xa?{E!uk;YltmQUN3@16XD{WqM$;7t|u0Q12*JqXRR<>79HJ`uHnv!ixSQg zWRoEmCE+>wVnum=?bk3e@OlfW2$Oi1q!3yNP!AL|KHYX^Gbmj3*?35|cq2B(s~EgE{6J&6BI;%D z#gsL|=3}ApcRDx{;-XAGrhMxVMi3UD{;&9w=<$nN?tS1vR1NsiH%e-q0W3SG8PCUP zI;t7b1Q?T#9M79>yg81TAn^S@$rOToJ^H_5m7aqABvofh+Bb}jPvR+UehXtcoHDkR zMxgl1X*A*dso)b#;Htt6CEoHHjpt#7{f;xL6_|-Q+3$G;t$lwA1^lp6-Ltxyh zE*3qy^o*kR-xlnC)R>Tx@Do1%%Z*sPPQ+mboFGT2iP4wJ0Hg@N8#ouJ=ghe$)|^PG z4@=R%t#@omuKNeDchQaD*`_d14VPeH0cw6V5N(@yrI7mhO5szDnfiDwcO+<(GWvFR zQfAX-j1n~6nr(+$YIql04bagoVTRxrw+<=*5P*|c4M-9p=uDv<2Nj-S`ffhf_FQ+N zbommdg(!!t2J(Fz!ON>9yn=!Td>FjZsRa)!$7gONn>ql<>IC?>)O!n2sd8GOX@Y_J zFE1bv8X3lR$%jXIie`YH3Bz(#Dd=i&R|DmB2M?$LcOSPLZ?%?{*!1k+ek!Q3*n)@6 zx@2^8GYbG`6AVS=lrTrH|HDv_TjI7IOfC0|tu-O`p+SD&S3Ti)en0-(?8a~8^SLLT zg9j1;i0+J89!C8DO4;be3b$K$Oeay06gPm0?0CGFb>{J1|9FF@ApNLM~T1d#>aX}1>a(koYLgiqW|Wy z_%(c{!v06LuT#+ezB`ygkgrGQ`i5BYuQNq>Lq7R_( zqgkh$622KGB$Wv;*7_iHe84l_PVo+=0MqG4&ABY}kO@<3y$d&s_g>t^i8oP4Y5T7} z#<@}}z>f~N^yi@!rwDC zD&V`VUs#I2iAMW%j3z<8f1>Ko;#s=_< z$2drSJ*_y(TZLu~1cYXRh(epd%MsJfdTj*DWQr-NTC>3~v4sg??(__3fT)VeXwj$N zPQE9f3h^3Zc5rMvqlh9#)AgNY0Z)$m-?fKvQv6Zi`=0rasPm_3-}lUaN}@l=@ISI= zp3;Nw+omZ5`Fiy8Q6psC{E8<36!4?&5Hxso0N}alw>#FZ4LW+I5u%o>k3nl!1*Y6^ z-J6+RaivPjH>Ht>@pRL606_M7-3rDXV7J{6LJf1?dF$J4LyT%|pUhW%Jbb6$7D4RU zg8HnA;5^{+Mx5J~RGFh~nohE^z85@s=uSU|0IyWSK!eHHJ<;!b8s0Gdsrz5q(@g2e zcVo^Jf_ydl-I()Lviw!x|BNw5L<>A){_LjT(x(t@iwAm;crCvG2uxO=kLq;W;{!l| zUw|K=vz98W5#SXjqv0-Xz<(Ql`mH3wdApGibwVaAT0(3#iV({GT;TNEK|{Rmv;r=2 za2se`JBQ#Yc=2NTG3V!r1BRxb8a4^N>Bozc(EGmEnnaG@i+tW|P0sOMtC>uXugAV? zHD9O8Uxa?vY7`XGb-`VeD)T|>0Y0t3Ne#`KfY65^fW zjqsFqfDoF~$E5f1uXs*Jf^w@(0Coha3%c)W z1D_0k=6yHO{uzb-DE+%Jhig1Y3t0KHh-zS%Q$6(s$kL4Oog^Q$3bY|2V$8$@@aWInnAs+F9OqM zUYphxZjpv3k(@w#gQq{u14q9oUF4CPWj!{$)8K7W|X5mR0u<^NiRE_>dED}>uDYa`$>CKymZ?-7Vc24b z#}4NtnwBJ<7#OI94;a!<7G-usL^_DW?d|r%TPnny=0370nj<27Tmt*(^{ieM<+A<1 z!ToF3chxJ>IHp`h2b6I>Hk<~AFet9dj)C;{T72qHFNs!8D&+wm+mz@#%fVnGjTg5p zXGf_d;E8f*qgrAal1pJkiRKxuB;lgOsuhT3PTI69kkdZ}Nl~<4mosuBc9!=0x?d_JH$97Yb1kEo5cS>MGLxU_0}{ogIyZB;{3%Ytr*CYJoiwIrZxUZif0I^OiBj8D_h9A*ZlTg6#rHwX>Uhp- z?U^RDewvnyrMI-5v8Q{qomGtYqb~WW{+1tbSnM}$ zv(&FWb3g2R6e9CVy6T4{9g=fZ5(4^%?aY^>7F$)k$xKlw(82fxODF`-jb4oL zQX@8{F}!RS>KpGXl&nvvV`U~KWcA$oMPJrVYqM|>{cfw<4{K5iu&c?fs~Dsj#pZPp z>$Uc|E>!SY`I(Z)!A#7_NcbN zcA+0xct4H^*X!o~s^_sgMy|6F`-=}vWMstw`V zPL8~k-us<U=^hrm#Cagx=gvn95+S4DqPUSdsP$#V=-i&C(GDij6l?ktA)pz;DIOlNdT zVOo~R#gHajS?ojm=oC6JOg+%96O!U zqeKgvt^NXRmYbGK>9J_qlB+1P&-SJN?!{RH7t}W%47p0mF>lv<8+_vQBk{HE^YT3J zQ({;Jujd-AMuqU*9*dR+#~JzTeil8IBAv>Jhw;1P81U=dw78lz7Z|%!4B>mu}@TKqo+(`}Nt{TsfZp1Ip}O0)%?!=|pJ@3{c*l%YU;5mzb`g$K z`e;u16J@Ivxyys+u?3FvDpxd{Jr`q%9TOOZA(dTG0d7*g4QcB&@KI3cfZD-3ztH-Q z&Y?&KT6UkyqO@D5is{Ldt-P1radJ^MF+PaQ$=sgWP}MCRu5q%7tV(fjwT&J7?Qwcz zRL#A==w(i-R+~YS?M3T74hzqi1h~n@zGoeHXA&YED5Tshd&*Z`o9k$qRAiU3G-^4< z0xN@7ufZf-`an|W%~>awm3v)MI>r3}3&-K|e`P%`{UJXaDD*kMnoINz4skF*75Au! zAXC8~JRtjYOqzQWk}h*Xl~?zCWlW))wVCco97hwwxo1r-GdYyv)3j5oC!M0`T9-<3 z0w3DeeG>lKI`#=}M`{BZmzUlVCGM=X72!MKA{`wkbrTu}t5e=+6>?QoikhyIKi3{~ z^A1ZbA2zvKV-Vl4Fx}HFBWC5C%UcwE+HVrI*6Wa-qKZS~eZwzB8MNK9c$>D8D8UU& zb9ARK#A@J<@+dKrKiEOl1(VV z-5+)eG1FluPS22Rx}OkYc-I(4c0RVG-BWGGff23kg^Hz0%Uin@t;8Qo#oOdQ-Xx!Y zR=20%e*e9>K3kgzMsqwbX-SKQH^;Nm*Iw-?8oWr4#yHue_pp6RXVi0^@2C8b z`oUVY>0@G@l&PMQq{_`1cH;5o^=IouGq%N#Vytls`Ggo#vc@s@1RQC%Zh!#?+DPM-hfy_o|~f6V%gh|cbD zO%-3Sx@P&kqV}Sb@1-I`&fuKysEJ})O4GuRlcU|;%dPhp*|sTI$Ci=1EjdSvs)!a? zng!MoBk!D&hys~L6O&AKcTclz;)ZMVS5*-izmi_)A8>qn+&XR3RcnX9x`yG%>K-Mo z$-&H|3j~X8_V-DZ+2A-A$yYbL^;kRSR>_ck?CrY9x8l9F`&|vT=O2J>I;>FnR`v(# zl{MS%Z_nRl?Eg+J;NU&uP+o_Jjb}oAP#^GjHO|f3l3la3;huB3Z`t~&(rX35n!EcK zDlZxMF{l$;9wfnm(hHoQc?<6jlAue`QetPh&1_}-c5i9jh)ut%aGTq$6pw69nbY-y zUC#&Q(@kL9>!hw@$qn`N^u_BB{MvM)-~?k<>-zjQDe|se%ID)Kw4q~{m-g7OFeO$B znbm6wBRrJLPoC34bQFg5Z@j{~RdF*oL|a$moR86S`I?4KuSc}R5BnN8r{8W$%i&ty z4Q@lxRZRc-^w5gqRkUb9Qd{jI4O5=((IKxu7S!`N;fPUlL} zpo@NkZM$kJ>{Gb>H<-(BmGp$zu3N?T;N3+~ZZ> zw7%&{|M0ZDF?T*K^s>*gJIj53{9sgFH>kEM#P==VQ;83^JvGp-w}v;srJQt4llPJZ z`ZA}L8>;3Z@QJ@9hcTSu?5uMxV?r(-0lAzfY-~@*NIxxfS6z2CJeV*$W!RqH)bysq z)~-hVxuMPhiUK({Ve}WhK&Hw`&1tE!l;XiN+hVJTq=t|24>l7}GC0zj^+YUx)#GUp z9FdRm^-4{3H{ILqIu|=0);h1>!QPWasV_}V+nXJFAL^q<{Iefn@!}sp0SgTuC{ub4 zFWZrJe&A@ZF|m2SaVTI%l5anofcHJtEDgUi$EQ0y=1sAy%Jv6xn!>6 z;}a|tiQu{!ie;p+_jua0r>d?BMn>U~m7>-|Zuc;$OFxiUKX_rcNUA)yFsm28e0Olk z@$To1?g_K%;(7e}Fh%MYd!;CoR$90gKe0@`XNh{zwr7nmVk}2QF2qv!;#wfIf6s?K zf4P6#D#tOg1imiWm6d7FcHg`K0}%&ZU)HFlTsIQ?@!X7Sz?=DIS=M@>QcFmxKGam2pWKE7RRUpeGT5$;|N%>G!@^ zbs)j~fx^WoZ5kJMv+#0jmW~~bi(1O%w{@=Qj+u}l{fv9i2UhY$SC|V+;&yNF7WS&( z59FW}TLX=A=z&IW3m0TWfl|xCQzP{vde@c}1^1c%dRTGh{qVVmAtze`A6;Iva=DpN z1ozmFasjVz$1<#QX?{5RenAs`cWDPDD0v@KdKRhly_uba$WaNOzvvh~cUcdiM3Qi? zwpyVl%F?9Z{@Fl>_DB`T@#D*`Z)R_^Grzb6IfuK@|Szr1&pzjpB^ zr9ijmhkW)|K6-P@BFc1kWp8T2pjx7odd&hMD^2Ni#F3EQ8l2RC(@Mk%{B>V-$;r;e zKBZTA6BuO0lPD~iC(;CuU98t1-eTv3FJ1*^K;PhAQs0sKF!0S&@`B-&&sHSE(jt~$ z{^`^k-_|INJs@9zVD~6Z1h}IciR0?1@7P{`*n=qg5G;J&)<$n6?h$2E$m@Uw!y&6f z>OS<+l1eN^D2aJiZ{{N8+hFvOL&v2R_>!tkX=Nlu(RMUl9E9(p0=@Vv|uP<87l?%u&+nsNUsAJ z#rWr?P3xoBNWYGTF3E-+e$l_i{UTNj)62BoVP2zgZOb~HU-qv)lxS_!Vx)X{@yHg5 zHp~5-PwmhGG{424PnP&td84 z$%ru0q9AV8&qC(daIpKaF&wPO5)ygsdDgs>t(xK@B69ttRU!065=2EOoXBAuDJ?A? zDW!~3@?CPur|KGiP~V3cQ8rb+#r}H52xEO|1w;gy4&Tt4@?MqboOB6&8gsYr7t@VbGpo}) zSbQGZvna_*3U|}G0GHw-CAD?-?mPDL3TehUqsd=qvG#|E8oNqHLUwtsNSq9PS8F_$ zo^uG+_SDwUA%t5R`aJU5qJ5oznVdw#ZY>KGtJJE75xz z{mJn?w}0DLW1!R*C3?lSRV3^A=1+i<{_@Op^d8Q^=9L{V0S1+H*1S{sdsm$P`AAQ} zkd@S}ifvuWvm9nc%MTth?qcj^U+D-))CqL-Ttv>AIifu5a82U8e`KwlQmQz`ZQ;5% zJA-xx%8S;t+E-H8oiGQH8p+m0l)flVQx9&Y#ak&1bYLMxxBtHLZXzR8Nz3$Q4NVdq6bNvhX8ah3yc>pUAe0?{YB zmxOCCL*=n%-2=4}4qwPO{h5N@ynVG~5(Ho*< zxvZo0ELM4L(L>BR1`B0GN{DSDzu6?E>InXGsPX{?R!cpn>?+ErBi%N=g}b{nB^YD* zk-<_Zq=oV2)KweU?4w6#9DvX*%ov7=2}SO>=PB2h6sq*EHz)m)(o;lXoq}D@8IWu> zYSkhB82D~Ztq#K+gV^j`q${`lPCN;@!3lCRt|K@bT|YO~sHc#0#?xo>fxCo)V%OxS zxVgK#F-I$q0nvFQtc{j$C~h8vHSQl6{NB{A>s*w3!S%6&VOf8|-KZOSh7#uko|e`; zRkOOYp>J8O-CH@c$}5KM$+p{C-d@km5-)#E&oU;2nw76#NvnXpmD9U!o9(~6g038$ zBIO{zuRxgWS!nfh<;in_X6mc;=k%XB%ix|J*lZcrwtO@Dt+Y+6_O{Wcivm~@M=cZj zL{nAK_*4W+8G@QaGA?(?-8nzR>8;*d8H_bq?TRRyCZA&-bUhEBzO5C-Rz+JAwlxi> z*I?Jt5>v73s8tTSs*=@JBq=d=J;n)xVAtcqo>$479YHLIDw&O~KUwpR`tX*cQ{MVN zlnc|Bm{cb$;*XB{y3*{ZG$Xu$69bQJ?$Y7l1 zK37+)Rbh=Lk1v3NmGN|80VyT;hL>$@Bx1L+G%r9a%hz{8`C#^!-WLdX_a|o@W=f(p zV-Z^=ZeT9Q-sMU^RqMNp45(LB2X5xK*wZjdxhsy(E#JFJ`lf9mnY5t>!73LjP_@}f zQZ$=S5&SGS!=&L5&UM=2qMaZGFcm$GmF16ykv8_ zGP8e|OF3p%cZ8mq_aP~)46NJR*~#Fft(kv?JEG?d-4>BpNZk;8v!O^5j(X|-Y>fR) zRO;Sx$v;FL_i9m>gm*aTE3xY;%n{w&9|d0u4M!cUi!H#4 zIGcca?;1J_LXA1u#HB{}WID~S24g!;2E>+Q8R_0xyXv?jm@TiX^^S|ZW6|eD%>)(x ziF5kp^}Y;?Jr*-l1j`F)sdCoLD-l1;xD#P+)+H5pmSLQ1Wotxw=2#oXpZ!}KFlhy? z5eHH_p8Cq~i#ou(sUxp8qZk(%oM>4*I`Zqnit`yD^N_MJk7oA=_BmeMF|f%HmSQhR zpEC4cQHtKVA5^D>3w{a@pStuSFukct`B2{N2OuF8uK&_gtENV(0v#D@1ShRM_tgePdk21etWuq2lB@25ASzx-M5#^LRY9tV#xDgSgcHe z!9ZF%9PG%evjvE5sAxgYT}Pc2aou*zET_H^d`K5mhW+kBA=;p?B#p)p8~4;T5kpy{4jV z=tT)?iVvN{Ks+dPi(RYVBC`t95qWIpq1++4JFivk<+oe>!qY6o_86VEItJ>g9Yw=- zn`US+Qpk5H)oL={G)-erL4Dpp=buXOtTKj{KW+Fzp7VBr6PaRM(0@)if0)==yw~dJ zii?j0E6XNjlLh)|S3{9O{m8I_Vdh9DX!%Dk>|a|t!;-&dv=inP*X;;Hu2iww*{gGy zmYrh-DKVN);wPSGEfq29%|z%BJ^i$5l(PEH_ZSx{zg+lBgW;cP%)hHj^Aa*rRNt#! zqw-Yj_uEtTmi%Yf9k!3jz$!zh>WEf{ZxOzBnKecPBcR z9b?71r7m)&!+c&VZ>8IMn$lu@_j*-xVV-fJbVORYyfSW=8RqfQpr-n~~%k z^N^)NJMR}KJhHfGP~Wsb@8Ly$X9J3wuC8DXwleM%{p1_<^U~m9#Strw23Yq=9KQxD zJrg}WJ(GpfjD#wc9oAo4)jtpRl;wVE!pln-Lea5wH2I#BLMoRA{tfY+s=@PE(y5#I zgLi6GUR1yP(}ntr)juW`F$k#&r?3CmW9#Al=7-cvZ)Zz3tkfG>x?Fo!?Err@TCpvm z9`?2&b8bwxPE>=U!Sf$`x(foV_c^e1Pp`iAS|D}W5?UTpYK*O{7uxKcE!?`u;9@Lw zlkxu0S!Iy|hWZnfzrxXi60arDu~MG=p?iobYDibLdwZfl0E4O?k0{IEpTZYaN z;2TvU$4&`|SgKxL){_h65%5YGM|^A)5sr$i-t#N8;b{5YeKjv2UmJg!4U?@ zl2dxxgfEcuHf-K|>v5=Y-gbERX6X$BpMaWSCC5aAVU}={2ZKMd_--Ou_1X0ZIr2>% zDaud3BxfA_u=AsYnaLPg7+_!(;G$+Tzyunx}kf+J7wm;oZ_>AsHM~=))7R9Av-yTqDZ6P-#q_? z*)^CiPWEs{dCr586T0bW%1djUM4+-Vlt}d0%qQRc%gjrKRfenTZ`9pIu5+ymB?sk= zut(B8%@acA=7+r!Os{p0{V9X)NU#ruNLTW`ZC3Ao)EiirXcxbW}&aUd^!6$0(RDPjGMEcU4(ALC( zT8zjQp3&~$=HzCF>lu$j9G12^)G%Z9<(#Yw;|HBFZ$v=l?!cwMsI%Hli|F?+E%%X| zA-a8rNb0TP3;8LpUvTz1y-&Dl{xRXV;l2HLjjjAh$t7aTD?aWVmI6m|1<&?(fN%R- zA9!DNK_$;NbA@l4ImR;+I`a@5=9>w5S*`1y2Hsaf*Zv6J$iX2Y;LRE+6as@ng}@+q z%Lb6tb3g|pb@5cDa{lTlf@e_8nHQW8xo z#vNji)3ddSORB+ZJ#z6UyCjr;fLplFbX6BVIlK)I0-s;gD9mrWlJN1wsS~M?joW9T z9qec6u9#bqs<^eL^QF7)2jHmL0yBMe4E`qzxcIdn(wPOb+SD|UXWe1lnbo-A(uKt@ zm;LG@O}+U1hj&|@?)Bt(EK}X6@Nu3?)*aEP^DoqMGw(K8%(Ymo_wLsEZ9$GilF|KE z8Q@9~dolhX;nYhvw9s7`Ns=l3p=0x=HvsAG!rqS%kC;`Y$2(@s=z&v>Ql&Rx6OyAv z9=$#P^5usYSKn_`(-59F{s%KOmEpDy!}wiXi(=xNa8PXm7SFaron&mo&^S z_4b;_cimcBQ578>)fr^kU=jOa$U`hB}Hu7_M5k2|BoZeRmgqt zgw=y-n%x`~)~?2T=J_v;5Wqtbp(sQ)-fYRNnPgQpmB?oUDdxJ1%$;1lM3NRTyziKp zWgtc7#=fnVN5W^#2@6>=nOSE}` z&CgL!VjFEQ`&5{;!RAWIdoPg>S)a4sS~_UgTJ4#)u0gW$O30oN15exuJH$!P&7RN` zP^7qd7Qnq>QWbn!sN#|1#jQGXdw%TRnt#zqf*FZF;{yr8yNF2%6CCrOMdL*oCyNRa zJU7nq!^Mj|uYZL6xh*lQ^r!QW8wrNp4l@jY&Uk&SsGx539dvf!ESt?l=+N9=2fFU_ zmW-pKro`v%Or{Xh2JJdmw* zYZ%{&L?WidObroJs2W;r&60?*N|Y3>nspw~nIefGLQSRBfkvpgrVfX;+L%hImZIp0 z(i&S@R8jqH&N=OQf8TlUd++<*@4vftn;knl&)!+I1wKyF?MaiiDpto+Rc}=lXt<#WpB1~mT2h1k47ykH_)9i zGh4gHUcAY%adj+bnbXo+>&n}04b$o#-NG32E@?d}c#@T=E;Mjd75dqn)n60vcx&T8 zvOx2KG9k0Pt2FmnJV#s#iEE%;IthpSn!H~hJ#tiaols0x`g-!I15v=%@CCbi{dG!LXVJMySey`L<>zZ zuj4);ee=1t8|z20fXI~p)XG>{0Fb zhs#IIH+^h@H3!!%wm5?t9M;M9Si!9N9wvWvhR^gwCaLBw1gv z&&n;jD}ybA3rlGda;r%NX7(Y^Ma90^0j$mL+{@C*cgV=MKNCC~VYr}V+L6aQ4KL>W2^H6V(Kw7K+iyv{Y%1;Dos+reaQG!P)}VbsY4MZvA2Hu#EHsOlsDKDM5QrqQrzUt1=7LUu32kF%zvwv0J6cSipE8Pof3SNWCG zY&j6H>2*Rz_RG)ou1+;c8@tG4Q`>VlW!N;rGuu9DchB%K1WsJQSk1|?7a_|$1aSkN z?|73oPspmAjy$XGd- zgB?uF8V)mKI)}l{S^!gZ2eg9F^cp{uNYvDEud^4ZlislxdfLqkhD&$1-Y3O~NZn0$ z*k$Un)%^IaThr9qljd-kgqjyMT0tU^>bAY-Hn{!Pe}Ve=)grNBcf?0gKi`NJPKxV*p|~mBP1Q<(a-zqxPk<3I1`}Q$d%CHm?brdyF!jK)e>@!`)Vyvi>ZbQM(dhYIey?iL_0`&|lpRg_=3_g5J+fcp0v;roN z5^tUSMojiWIAO?J=5KgqlWj14E|N|#l&N}X-*;IU*}A@v=LT%_A)9WzHBa4eDA2Pf zsF`9JBY}=^o;f;3%H$7w8iO-c$?C({^ix{hojU^E0zKVAdaS9(k55Us2B%YZxr6FM z2w`#Sj7Dqg_=r+y6fSa*SYX{v_2I2q`t92u+wvPTKY-=Kw@~Pw2#dC*w{1(!oGsrT zT>f^p`daFv_8q5sr;d%Yc80!x+PLQ8joodR^%R~w&^>8~OWksQ*BLXibIgdTk|Zy} zM@nS5%Nf&fWqyoGrS9@B;c5_?$wE7qb&1~{sPCv3s3sAu;^Nl8M<HJI8PTQM9nm5=rE9U8{6Z*I z|3f=&?e8xB=FG1E(viOe2~M<#b>`Y&2mu80lD}_(!G$YiBU*Ih^xK%G6DAd}6PE>8 zqfa%js9L?Ny?JRYp{VR|BT^%N)9Ieb36mo);t#z1N85Y+$UB7}K*!8jQQ;BY_}1}v zf=EFSL`say|4E>^I4#M5$oa=myY2X#zgR6}IMs40IjGA7{Gn5OjLZechU}ET*@dtE zY?lK2Gldcu8NPCCv{M4YMaQ$6+#V=ti_>VQx;d*eb=gBtr4|Jvl*UN&;Mu8?Un_zV5ke z*7p%eO15&lwZ}r*=gSXZiuTzTLHtIO)IRQCtl&O|ZLi9S`T+=gN@t%jdc|ElBp835 zP0u}|<9=I;r|Y(q5Id!zad+i%=#(3~RqddfoIXbO+uD`uJ)}E^*t0sThpQBmq9NW% zOJBcz`ttU}gQt;M(yX4*7dKF8S+fE%GMt%HAJ@=F=0D6eFy^~u)-_HfiY{%AA5FA4*zrtjL&iCQ z#r3D49J%6DCZG6u5y)+<9z5(y0h=_BLgJg3{A^_^qcLJG+Js8zl7`HgODYh`+lyr9 zp^y+wl}c;@ea6x0quQCFeaSHiTA8N47|vPflv5Ft@6~q@^g5LCR(w3E znnK(f;kwSWOE|)S83>albkDDRAZ}|#H2C%m^QGOAXSIbWsxL$C{2~}tTdDnZ`ss-< zkj(Gi#u|JE=fHF0J+=HBZWpLUpZ5sN+R5$@H8=WR0l&QI;6ujXoDJf8G{Gx6ecOk} zh~}21oOcwd9oantKLFX>fHQJBwSIz(JDf^<6x({+fp`9U8VFA>NOv9$^Ib~jB~wP% zT<)9;n3AwPXtb-BaQrc>;~A7QW{Xo#z|A!8zLF)(T5rDoc+}c=54L^vo*_|!J`@6p zZx&LIvJtPj#dR|Nas{(br&I6>yIt~6YzXh`dTW!N0+bsC0MPup#8Y`Nj>+jkn~^80 z2-9x6b`XHjhg_`^;v``&tZ*_Wu5wm32YYFa_Gi;Kbt;NU? zrx*MHg6R3M{rJHr1tq$nin(3lo!ElQ%by97%WaGR5$wVtGHk9s->G$K%f1rZ<^7t< z7Fy65TYLbxzVgq5G!fhT;OU3kFQuNDSn}FH;?yyGq*nHQ35D;fN)b8luD)Eq6=Wh5 zwW^ww+8=;#C{xuIhmAX%RAKR3Bf*XK+%>lR#%|?Y`WeHhbVMh_ud#nzfNkZ^8_A5D zI@qE5a_5@i@BG7G1{d~Rxc!W&XD`In@Si(2wKW2XGhNSzK<>X%N%t)RbnYYg?|-Ae zTxYXAv*o&N&Z*)358myr?H)w;oXfvh?VIS>5WkIejW?8m);s1+;n3f5T}8txtrk?y zy>6JXx#}i*ks6tv>9udH-wyrhaO9_f*3fSh$+W%5lTYfaGltB<-V;Sb5nNQhKuXn& z-Y$8w-7Scv%Nsw6{Q!o2_wJ3Qcn3zAI~FZvS<;T_rL^hJYeR~Q63XlHDwIF1Yu`7% z{&DaS?nArPseODiy54IUP4G`cocp=qAGlP^aswN>sGVM2sTEJhsxOuag54kz<`<8K+ZD=u}hRH}9NrQXx?OaeAITOk0jfk0!EQFCe z^e-tJ-7uXOSHv4zttp*eP}I${@_h-j1{AMJi)<%9eRp!=(E!cud?;54C_62Hm#Y?p z>e5hxOkw*wWe3Ue=gW4Pz8!E+XP#sTNERGamDq8sM%c_>;I)sYV-;9DT%(DUxMi6{2bMHo%4 zQ#JZaQN3r(LW~!t-)HRvS@1ycY10iY{h_AGa*szG?@R+~jlz=0B{5(0(F|>-cus#= zb%l`jK@j|6`{W~gZ85j5+mU6G7|6`Hy*9|g_5L1vUJS@1XhDu--wlP9j>9X;FML7B zEGepCX5CWhV2NsP?^{G{=TYyjh**%vZxhi_(d}179FmX`t#pFa`lAvv#ApJVNX3%l zDrE|1Hs1Os@wsP%cS%TCRTk@;TVX$dRP>RDGl4?v9mWzigF)a|LgEMjKY}3y`1npi z02#nmhw}j72W<5~_B9>NgiJB~2#Ux}Xc$o7$KwaYQ22e=xRvv8*aX0LIy$xmrCB%} z%Y!7tAX8D(j6Dz0h~esHJd!4wAOpSKjN3_d_Yq?R6e$m`;^`Y&N;ELBRpGpe_6b|E z*e=(PAj;4obnN-zU>`ow`1tvn8}Dgcp^knj@er20xvQ*p=nYTb-m9Q-l(%8^i@O z70kyA=-V%Yk9!2V$xX|it_rH=LuXgi*td@-j)H4V5I&ODQd-e_Pg=S~Ai?2g955ckMp zjnU+^ax{YGjxHQz_z5T{EXmqgdBZ;6nCdxk9c03<^h9Xjbw$b?SWmiqGg_I34@*xF z%v&vFR_DbJpmA#Isi}FE(l^}R%(y-8uCk)HBa^%XS3bWO3)TWY`wP6>@*ntjW5CI1 zzJ5g<5n=sW{X2ewwR&Re>F}pNfIqhdv{NVeXQaw>?5a8&8^bpmWS&0tuxWHEBFkv_ z4}#90ig1N{3Oe+H%rs5H^WaHjmGRP)X+JlHDOlh>3$2nX2OXI#F40OvS)Ex4+iXC$ z5*9#9)Go+d6cB&E6`T6{FWnz%Q3af8?8xq{i4nij9{?rheoUV$*vMZ-fPwLW>sLIRIUFq?!TL&8EGYugRxvg3oh173 zcM+hdbm8i!-v(X0uQ7K%j||XXe42%5qwgdqZy1=Pk;d?eyCL{;pP?=lQm#V!4xDW6 zV`3v6rsO@D4)dd`(o6y)94_69Y)cbQ5>e_>p3i#AsKpu1L#xmop-(3>5ek*K&rDUB z?TaZAyPWQ?E~PW37COve^EK?!(k)&=V?eWiPOP`7C~~(@QE?y#iZ*bo#>;*$r(GTR zu164e3E=YU5DoobY1>@TpIu{cP>LozGMoFy3i`h9&uQ9C`U~&-C*EQfse=C!d$6^cbY1tq28(IzANM{< zSPB)=674G$1eB5pn-mZe&xI^DgaeTidLNRk6M1Bl(4#-PWg^&kMtisa%7~6J^lu! zM(KE*Ar>X!Xruq+%27Uv4v)gZge7N$_$eniIbB*hNOEWYR>w-O zv&vo$8V--p=nKNiJ<6dSv34Z+jZEUA|FA!_ixR%?Ao04KcffST1Lhoil|h?x(o1H=9#uO&NbugXzWYS;n4v9DRStczBgC3}6)vz+T6TWcw5nf0IZ-mE^ zwlM1Qq6;qhv@)7+&2j3AG`fr;PS@OrcnVr9i>bs3Ns7FRDI>K|=&r&x%6T0UXJTUv zO(i5eE!`)X5fXd>NYdRrg^@a<)u=Tz)+b9;C@8Y8{tvn!F2x#^6n9zF1X{jP=;^j(9)5rlm`rm! zwX6c;?{>^g|0ucDjwprcp)&^zn5P2x3S1lNHcTd^xw5bxV2+qthrKBA=p*qvvnV$U zKKMsW8CgId=#9?xln|E=BAJPH0!KbB3i$3P&3V+reC!hGyj|Pijcz z*?rf`DC*bQRkM5r*ntw{rAIBB%m$ztMoHWHtb8$m0%tchBPzu z+RuYFdSx70*W$!nm{o0Pa+jtitxlUjutgbXDYABqu`1DQ`hW#qOZ}oRq!YlODn^Ok zmfuc<&<%{~jx6-USKd}-E**2NNk;PPv1{|P?B%nOQ%UEIGw&>9l9BB&-mDhZs3d8R znf=J#_=KstSg}%B)AgStJ^bDq4nTG8eE6MSa`Z{-t`iD-?3WBIZ&RI(JXIT92+AA7 zvkOakP=+py!#Eq}(Pnw}XixG~6M{iWRAu;yWYlgBbLo%47cprWMi}*=ebQ^`bZk{n zgG>3;e_1&jW4bWJ^#%xSoDWOf3SbP+yy_n{@QK0~m^^dQ@Vx&B8kZyHbmHx@E?+HC zih4{xvokQ1?sR}DQWb!e+GuT)iZRHf8m{x)hVe?svg_W;d(?@!DBY*YvBlXU)nZ?Q zo~*-GBg!?40kSnq4(%7Fv0CHnqG+22Mg@2x?$r1g^b^zKb5upA3$cyCgzmFFDks0C zq0eqR=DOKZ730y*XU&)QN>UH|*kmVifJU{2J2C)5icMgqaDf?#=(Gvqxf{!vnskL1?)KB%ys zV^dv(qqo)Br6yfAt(F{rh)eb4h9zik*^&RAHdBYL~Z)#s?R)gwOf8&4dvhiF9~ zd20czz3sjiJmhZGsXAaC*QYr*5&C%+sJa6KvS&rSvyL2jgk&w6)r}FF$BdU$^?6qc z92t4B=>65)k0crBzBfym8+W}((XCM@FhhCAE1rc|)Kq;QH-kqzo+{U6t)L zXm0%VQ+isEq zTYb>6+)L-tK9BM#(jS;0g8q}usO2?RT;=LU^_9{AwV3< zC%{kCPj>Ku@FDrePJU^dobI_TfeuJ>WeU6~(RXHQVe@p*wI}#2ck%Q~kLk zA56aCzdvyQoF&u0D7`|wT5T3gBlJEDlS^QA_le#}^(~Hv?2>QV+*QDS7uje+A74~0 zTDX~DAN46N-1|deagTSYeN~V=Iw!Yi&7;=ARl8`>bBovY&|70Y#s9Y5JfOE|AoJ|s zIO6K8|3$-|hM%C!yD}X6}51zC>wCM-Hc9R#PVQKs^-3f z5xOa$6GNq*{w}|TR)X6bhYxAtFBPK~?^W)fdKKwNjS?VusKg^LS;(6&yTPNVXI#RQ zM~4(O2EQqOL~uu>_Q8pE%hZMF~|LF%;exfnMCW|av2 zrkdpvnDBBdeRWi)*m(tYl6rF1xkV+AC7LTSoe>gORbEPB5akgjpGC!aB_cc5pFZAQ znrrDSN^`cf+}y89#z?^>BsK&%TEpol;kUY2T)*%OAhKp`V)>ec-=?{SGU(5m3ljO8 z4fAr@te8VL;bstiC0*gBnMu&oIDg}*M^;jFmuOl?tP@jR6#)YPADJzT+M@f!!Bev3 zXtM3S(~5)XB6rxLpIFMh$inJm5iMJTIKEJ2l18a4lC!pzX0%DS^cs0=zuK6MP*{&q z_5IdW>`yugH!g%+vP?XMC$i^p#w7JDRH>rx;HeGbaWBk)0*us~Y(f{yTJ*UG%|uA^ zQ90shd1gftSq(O3#LBsxxZ576nYvVTv3kxk=_Fr=qR17w|4v(8QK7xZ0KS<~{)Sr* zGWZ^?J9N-TRBzhc_8V|U)ycYzI;oCT9E9x(FyKWH)f(*l-YD08p;23h)?fGY&{ zI*6ggeGu6EHOLIJ(4wf({hT`N;a2b27IZ89v|GPR^sUMCh~Ix!{l8>Q{O9C<9s^FC zKNp~dhh@W(_v$nr$Dg_yKNMD_$od{ADn5N?Why8gar5_W z?$Sq+?hGol)Hp(+X+`z|pKfrs;m!dTVpZC-#a-c!C1{{gfPsH(_v|6wfWawuZy%v~ z84&2SjCghlQ0Kn?z;h-S-rF1@L%d|Bu(e5eb7gN4Y)A%5D?;*+xZ=w<2$0EiYc>i| z47($h*}S;juZV?@P+bccmDM7h4I#5by0=O^)!z$+Ltj zgB5aSH9WZFV*9j(^y-THYUO~V>7Eh;=5`zNtb@@WK-nA)Yazx^0s3p+^JD(~fgJ9_A-xY#~(8L?C*!O2SAeE!qGY6*rq8v#b=AwqSzI!FM}5>gbYVX%28cnnA-h@wg<}N z;uvnN`Vt#H{haQvW%+s6bL}G5j%-sYYsia(gq==*rTl(Jl6~vWUVAo8dHJ{D&$L}( zndC!`&L^h|xFY(uw%5uIAaS_ZZ98t?O&mN1y`JD$_ZEkQN13=o&DO#pU}dh`%9)yx zQYR{;H&aSef1^lCrjkxFO|ZZ*#6YG3k|#M#rpLW_ zk}-;7j%d7mQN9P9`~6`4+aozv#F|yPFq>xTB!*BBwD?zOsHxpKk-7JaI;(5(Ic3`1 zlEO+AI9uO&CltF9l`o+q1RjYCKi#w;v6UY^Lc$37<(^g+_8Kr*&L~=Y7bY3xqjg|H zCc7*Mj&NN5Lm=$@5B$Hufcslegxg?6>4rKj_lo;#C0_M`c|lnk%6G!f0(zU=di%x% z8mU@ibpp>{WXztgzQhAAUFFw_`9lNxThURH{ik-gGLITRo4pbxhmUSUOo!ZI}LRmXu?T{&LUMK_u7*nrqxe6%*qgakyMaf0P?y;3_?J5N9l(dRqh_ zHCkkET<+2Csv6-NwOc}m);ZGCp$qP0@u>-R5V}0*&*m)O1hes zaPwTyl@v}aaYBi~^>ps315PlFMQf$2=;uG8P&z5n6;9D8Xukeo^A4NM2I z*u#*aSrKAi2Pq?QD85_{ss&n#F<6N^yFWiZR|IYHFPU4?QSK)3uHRrj|MW3JCn++|63Er=Ybb1FZNUHoW z=DoaSAs25Y7WAI5-RHzT45_rd@aZgCynvE~YA#wgGlUFsI=qZ&AH&^on!#+<|5~w4 z1lP7>Fx3;85vu!MK@aVQ>9{m@{(Y2PuRRNiV!a?b`!BHK&tI)KM#(*5wG(iyN#~by zqy&yun5TEUO|uNu-(711+-^uMGrj$>YcDa+3(yk4;QZIUIQ6)=^|dA`KJW<@m^`i= z9!5|u;h!h!_xdiJ13U>e8o#Upumce1J z1IzU94Ld$-hJ4j7xJOsE+9)KuOc|A&Y4(}fCl?F-;={)wZ+jT}bPPM}I_vGJhv1lZ zHHKofWz8?wpWtcqNyfr&kq9;^b*vlB4);RyFx`1egJFg>VRYiB31-g ze5{QXfOkm&01V*ZT%c z6Tz>Pm(SM$zn0&MxzfB}q5M^6zXkFj3Xk7?zuy(&A)Z3_RJ9TpBg4@rl_<6>oHqE; zQ5=DHm+^9RMebJqRH|#8&DzvI{{RehVJwy^9>;!(rE1Xi;y-ooxP5l$Go&TKj zzrp~<;0x$X0Fc!}=F3t`BH7g%?6RYx{&#F~>`dc&Kp^FoRuNs^d?1tuh48F~&q)vi zDKPPqBxDi$`|rMm70K%0GT@eeC<1Qi^1)L$2(*tuJDE~T>bXrF_Wm`u{xI17R_e~- zkR!_*%cmj;1tHL^0fnYo5@w0i2%*T>D&r+JayPTpNR?b1tN^*LH2YXRXD&jsZd9;f zEgg@l;(q|aNkmGdSQ9hxw&+QLl?*mi_7m&IQK!@TZyHs_9KuM1*u5n6tH(IqPz(_i zcStW;0+qKhBB%(N-(p(MQpr(kMRpEXfVq;k3`W%%a8$HHL-0dli`)Qc1gfXfifQ|o z{BVh>dU0HhI+%oHUFX8v1oGQk6e+Jz z{x8I~IP@X&e=(bTR_I_KO_+rogQq-rxEYITDPT3toP+o_!q-`m?Zz_gHtH{txQTI| zfL3KesOU!-pB$E4V~@ZDJ5<1r_S^JPg$`EoxaY*BNcU=;%adM}vp%qrHps2Rc@ad-k17f3Ct+kGsR#rv=m8!z9V)XkZ z!!my}o?Adl@Ug{k6Ed|U?&M$y_SNKe)0tuzmF$LmOr@$ZCk2)2LN&I`6_(1Qk7Reu zv_R{|W{k!I9Efjv4vpn$bFqSP0EY!&Hio*?3Wu+Y^~@G`yQV5I8tx9VCx-`OEgsbjadgR&6hT!59TIjKFFV-`zzmRICM!2oDDOoA zn|4riQ4yMaJ*koH**IMf=4U2F5%5!}dr29Qjp|9YRN9BrCC1joNS8;9e1C(K&-5Po zpgR~Ebg}dqI*S2k(}Kt$>Bjjv3wz4RifTq zy*rH(;RQ-@1qyxfkPC|3I%&Ni!O>nSnLs&gF_8o&F-o`Zh+Jn_rF&p5NwB?X%B(o6 z7c#|;DwH=n+BtS${C+QSvZR48vppkILxZtDGY&Cx_6J~b5bhNNLFB3i&8dzhHqgj6 zB)u6<*e@~hm4&ka(k$d*a!{bK1-d{JIRn6i%+dV(=v$% z9Uk+Eu|^LVih}Xw2NdMxT#K0i-38(0fAtnM_z(lE#KouXtvZcB9(1a_z}xW@-SX%` zKfKlri9wm##8q)o@YVQmCiLQ0f!^s{5$=Wn{0ArMi6PRyc<2Qf9 z79f|9Qy&dmkQQfcxlxg+CfTxt?HB`QBpS?&kaQ4^(7z%}v`QTY{fpwVK#|XZ>4g3k zbRq-)Zf{}7gOKd0?9VELD%1J2qzo|ZK}+H#y(kbwUOI!fM_Opf=zwwDV%h=tJmqHE z1}{%FL0_fYKb@yxH>r-S{+S3P*cKIJt-@RrL#r689~6K{n@f4RLzyW=S?-zM4{g!9 z-7!Q`PdvwlUTV44#8+u=tnm&K-vL!*eV)0|I2!ff{=uZI=p~}OiLD4tNR&iJyH1ve zMKeWSNjbwd$R9@Bq$v?^XZmo=`%#(Ys4`qKJEy>pl%|F9pBo#D;XG_~4PYG09szyp z0=T>fcO^pR3dHCG$?$qja3?3 z@Pg3p{%r@oh}(IUZ=BO3dy}+USWvd$LC(PIZ~Hqtg}k~ zA;v*wWiPH1e8>=SGmVF1HA=lLA;laBrl${!3K48YaSUl~C!OJ@7*|jIoiND2`n7jP zG$C*835NIR`(w*l54Le+Xs9|CqwE(x&&Vq#HQjKP$`nHuT1-N&APE-Cx0u zi}O){XwB*=+9r$kwZS_Q( zicqMOLTA1KQ-t5Fw!XyI^9qv;C?YaJJ3G6Eacjfh!tirjjGD73^R>s-VsR z|BiK*w+(P5qG1KDy%_%fSg|oHO4uq9XRDiQXW-ayL;RM_E4du;7Crt&a45cJ zJ2%P(c6LMu%+{px1Qdp`ZlaD^orVH>jI}Sy_ZMf^LbVLdk)-7lR z=E4H#rUPXjni53+dFYtRTAHY7);BNhiJy6rmLUs<3UCMwyOv6KR+lByw zmke0l2byr8Y!ef}z^v$2aFGC88R?*%;p=g6ald%eDQNSM`uiy(y*{mCv-KiJkaP&2 zPn4A$`)f%}{3kAs;QVTx?scV_#Ia0MVGiVw)LV#6vUtH*^R8;izp|Es6Ti%fB51 zGN8bkI+B*|+BoH&dOj~NU{hRx)AXDl;O6LMtd6<`nK3R$i z5H}ygvJ1-kLRMU!D^hA!a@Q_j8!K72bYDk_Tes$W_&nEz1%h*5LXWa)&;71?{7=ES zzZHUvqK|54m*%{m2L6jL?k}>oytmNSz4` znQdS+P>NoJc&LIWY_7&3*>sU8yb(K(Svu8?&>DQoom%jZ>X?y$`*ub+UHxdG;t5ZY zCx83!nG$R&x)Bl(i*bsJ#a0p~)8Le&KDOkJ&*1n;d+bj=5R{N#M@o9o0UFw4N2b@; zJ6i~@hPr+LciGzeT92A(%h(#;6N?ied&l5$HDc;HjDE8lj#>%`-oV^^hE@^CS;cQE z*{S+K(Q%UFc~<@8$!DO%L&lENyCi0!<>U;fFkZYq`@(GqTq{4zP+*vHQD1S zacrUXM$Z#4q5Rh`a#SWJ4V^bB7RL;#dDz`Cx35@F9_;Sd&Rgj1;PNlIYZ zA8$|Br#h$>fM#C@?ATnD8Ow%mMrNrxT&S#Bx~t*Q<3eDg5%Sal#ord!i>7!zgzd*p zl_V2_o8v;0ot8>0vQosKmm{%JFFUa`mOM-d$wKGA5QXx3AODOceSf{S1cJ@r0mooq z#Rp&vEUmbS`R&=I#G& zX#GfR+?VFB2cBi7ra*AD%f#-Fx=}D^+Y#R@Cv~tY>z{mC@DsTa2#v=THva(9KZ;js z6|rjJp7Jya(F$T*%!drdyZp#M3>{Q>T}DdntmxHG7XIdUXWkCaBz3R2ix30Sd)F5g z6%W>Sxo{P62p$3OYPX|OxBE_vCKn;~NXKvctIJ;Af3cJVfa!CfmMrr}9A-pI7%YzY z8(>0)qI_2YICK9LAl=5lT31vDER1ZD`V-Iy@bdq_jr13N8w}|E5m8=oivFI<^WSo> zp^c*au{?p!MA4VoMt0S=uU11wfNk_6Jx$=ep*3~2#{ubjwtt- zG~&B>chFzrpAdc&N$YN)8#VlHza(9i0$kJz?bu_vm4kc9J}ymYW}W(bl3 zAD-bU!?t2D)wrkg{m^W%mB}xYwo~Gm^90ya;ZRthi{uv9#(C=Th>er;REVpgGAI+G z4P7QyGot=mEdJjSW{TX+cl)UaiJ{zLn`puOiR@YjTGFf}5ay#N!#}RP7x+LE(-LXh zCt)YPRg8r5nQBHMlM!F1Vx8Um3t2d%9%Y*uK_o|`gvN>M9r=zUJ7y^{30~fce};KY zC4$svMU@$!TYxuj`jJx-WaktQJ|{^a z{5^%dUT5=h#K_JV?1V&bMN)RCD+cELqvl~wTMk;xC=jY&n(qqVmRfD@@I z63!ddW!M9HavSs+Xv)Hk-{yFdu4!(+me7Wd6%T`~y z+8JPG2v`9ezb(TGH}V_^!b|GHI<+KqV@o^_{#tq2*3f_Simf=BAwzsgstzU zQjddFWs|L|tq;+57e@RY*;)UuoWM%kQZl?80zdtx^axZf;11EN zl_2@DLW-TKJxP@*JA8-_g9Inxo0{(9b18n;fUKR%mW2*4U$>4d_#XEZ*-jKEfsMN~ zlK#xL$`Z10*jf-W|Y)#A2&*Mfl$R#33z*o1oXAG{_?xJhO)ZBO<@RJXf|mor3dVeQ^T?45)`dVZK3hjC(!X_Y=9tPhCG(KC=D zPz(YkYekEHBB}#S&@M|9U6>~3FI+(-nqV1)mlFn3C4GPZPtWl4W)x{mIvOUNHZ0rF ze(V#&k0Ic{2IcouxBDmi9N{<<0yN|BBDm_hQ*;6nGEi5TuF2vTk$;zxKf51Z4~2)-;e#?gEDCLzPfQ z{;yjcnfd`ZB`S>$wsWd0aYgHR%5KN~))B%3fUMk{;_|Wh*bDjJ*fhSk0W?O&NzlYj zO$b5;tJ&hUl-z#iFmYWi2Q|)EiA#9p)9_c{)J0>qc2wOx>9iGmY6}{bH&d4^qjE1V zplk{$GRET;jWSrd>cP(^j-JR^@Ta4qa*K**Pp`OkS46>r*33LrNorLcxBxz$>!KXa zn(rP1!w;|>s4!U+KD#nYPvk)yo+avouA$SP6@Gl48R;TviTFjRKQaveB_-&8pw)~O zmvd$x>hzz}9_-q8{}yNg1=wJeXfDJpiWe~rHvQ5;-etdL@4)g^d5g{lBrXQZV1{AX z8_k-r6?L$^M)2pALD-X*wG2^{_v4e3X&8^}+xQ~nvF~0#Nt+}(Ge5ALg~zyRKywlp zl7yF7xJ_)QunzzqkL)5lD>-CW-D`4DCa0qKCVK5@$~t^|j&~~kW$pNIX^&oo4F=B5 zWML^3#UU+VCM_l0{BtOVL0U=YWQqWXX|k?zh;$@U9yiWihrSby~w zamyv5735d7B3lZPIHYX3v3W%)r&1>aDUy~0ZX3PnmT)ue;+E={zc|2O=I;NIvii4H z@-J8Me@8X2b=+Fv=J>vG-#pfwA{K0UR9EN8(@#S?G^e=nDWjDpq6#=Cs=S8@jO{-C-sWDLpG`9B^Gx zloAh55@Ny~J{ok8FSEEtP#mN)RZFJKrD!3IbyC8B&Ou!mhtsLlGYCxWlQ!8N$gUKqa@&)Fn%eEa z;Mxww)?QpKO7ypj7`x|srqZry1aq~`=dwO*M}CZSK=rS^-#cQg5P!C&zp;sQeDY`SLB8KloF~{huktf29v1uW5CA2*U60{(Y|qr<2fsP)2bx_MOOTznaSI-z#9b zMrIH30=sNa;ZyhlFhvnnKG<0D8vRM0$w1l5Ta)1pCq=ibuo752?Dpbg#i!LeBChCEUh44<*lC8w-TNZUsbz8Yy3$eOisl{E} zc~{pYUXs9MGqSqBwq1e_biRUN%uL(lpeZk)LHuFQq>!k^qq0Q>qP^HlAt7LQ(v~Sl z8F|Iun>jsa2KNOzKj+6|cW3p6Zjf|>;&GY$x9JeKoTL+6d`?FNgc#j1z8FBY5?8a4 z*u|#Za5%j+jVRc6=^OxvpV-@B)l3*E(koDox+5npwXg`Wu|DR*KeH$0cU0t~k0bhW z0|=0z)C|Z-QzH(SfE`J4xWEhzguuh3?EsV3?PF1?SDw0NAG{;*oR|2$yn^y+oysH^o%5iP$T?{i(PbXnB; zqXNcdwE||M=y%MfJ30mPW{3+794(sM?T^h%^fq47a~)}om(yUIT08~}TmmpS_|Ryu zMeQm;z}TQZO-xyj=nN%Le0+n%gOgXA)IuQ;3*ZI99BfMYweV!%7E{>d<%=x1@&oqW$ch<_lZTHZ;5lJW;VJO}t=N;48nbPn|=?+KPcKCIZT#CMB7jZfr zD-0fX4l%imF>Prz#&q{#f&N!R>nyU$g6@d-I{YT*sTsj|wg)xQkZRD{d+)~0ix%Y6 z@mn6^I7{bvC%=sLXZ!W9kyFLS)vOnNdV)>5_Qy$hzWuV`b!SZb@cwOS_dCMF6Z5?5 zuDlc*o;ZgK`2WEc=ev2<%#P4Qb(_?dzWeH3)3oh6r!~pjT#I~6J zBHcgtPHCzsGfc1};&r5JWNp54d=8R?W{#Tr>RoN#d(mEFauh_{wRy$*W#N$jue$4w zYI2G45koIY=mOG12^}Gz^w1*+p(98~2oI#FRHcL(5UGIxiUJw|3ss7O7&-zf#X=Pj zutPv8B4t0YJm1?rZ}+@C`^RQZ?%bJ7rrmpgbH9_5xfXBS*6-)+fM9lda%U=aQCts$ z1t?*ekRxkyBPKQLsk{=z<{JA#Mjk7%-0_6X<@Z$)@U{41-8IP7 zPKq~bwSV59IxpSGD41T+Rq$y-Y4_lSaxNqJ8< zm>Sf%?z(%jHB{qMrqm$oneSw8Z$s~`@o3%`gHY$6eMv#PBv4T6EN$DC6?d=8Dz&t| zq=ZVpc&WSr-!L1D#4}q&X01&{K)!z2MhwR4+KIwHPbA(|F+xF)zPW#JP3Gld4m3`P z&cwoBFQA2%k@7FekxOGCt~2+1zl5x5-gX+h58)W{Dp59WEiS4hxMLAw#8F)=CxOG; z>gySe2yr5xC%HdC*7#>@8+|<8FkB?mGWS*{%k5ATNr~&O{#jcf{bseSP~E z?9-TwY0zp;N-{y*d79tHEy-G>BCBsQLE8?Sd=aH!m_Zi%Tl>J5a21a8;= z_wT7lL)+zxZQHC5NVQJAFDicW_PjvfvIOEXgH$}PoSupC##=TN5qG$-+JM}4qG86LY4B}2b3P0c9h)+LVn^X z8#q!OzVhvLfGK{ywAkHKUmp-h?l=H81fbVm7$>usUT2mCOfM-R%iI{QxZCzDUZ_-@ zFta?s!dK};ZrV!Rgr7I{ZqBW6exM{aP@4TXF^|a&SNN)O2Xsfy(&+W3>JErSt1XT4 z-*DeP=!y1&lTgfbaWHw@gIAS+1xMt3)ac#Ya6hXS&aQmLzr8dbHdW+SUgsI#|7fLG z!FYfq+Wj)i>o8$q-(2|Ir7GLXp*Y{8#7tBUL}a%~cLAECwH}vWtJK7CPjrmKmU6pj zHX=IAsWGf487t9ylWq8RkfCV)`S!s9PoUnpIvnV!tRy$bk_6cdq zLcQYzGw5-8>!CWuP+}`I))^vi6xZoWzZ5`xl0-y7z4L@Lfvb2|XcwN#aV?#wbbD%2 z++7(3ZI|XW(AiWZzZKFkDJ@wi#B#OYa-s`uW_iV0b(BWyhE{NVEE{>#*4G9{_R!~9 zPY`ke&{+2=3YYh){TBBFxZ6@_Gxd%3A^<(3jzxY_%=QOsB?H2h)U%k%GuYQk$DSvYPZ8%2e*9ej?zknR1>2=TUK5N#7f;gpYFR9^sAek~(V461 z6$1QJC0J0>Vi=+B$BcY;P#SeF^)^iw0T1s_b^1ftw1}iEn3EWc_`qgtBW^G>yM1x> zN@V()>|fJrX!?+ykk~U3R$t>*4_(VfaDfObtDnn|Gtlobgtc4<&R8^^l>J8=>)9hm zvSROen6{r@Mvk-kv3wTw-=?>+J|2rV{t{Btnec(E8uy8h=M=r6Q|z(Xd&~o?T>cw& zqcSZN3(g}dwgZz-c-{P1n%I(=38{6}qyf7zw^G0AhSTZR%q=C&y?d$UNx;wf0W+f* z8PDWcCFGNZ>0LF`S3`^EJ6HU{jR-h9nkD(!6kgnXCd1>H=(KZ8cQJ?2vT4-RE%ugc zpDTc&;8{9Tmr)_a&QUx=J@-m?t^V-&xKSg&oO)o}yoB`LP5=v3JEl-Cn7@!*nCLB* zdC)VUit|nwJ6g$l%1;A4$ZJYKb$~ZhUwjE^{4Z1W+&fdT$KU{w7(TiwLn;kpxhjoZ z8O|uDl#gbfz4|FwA93rh7sc!PpP%d&kJp7O{ZNFAo&)W2}zuj$h(v*?I3#)|N9EV@R?Kp9*{6PIM5)GaEy zv3M%QK*75!1JRi^FGJIaktlF8zE5{8Q3^J}bS{%ES>aean%w(5;>>Y{6a#g9r)v6Z zBR}Bp&fdmT1W#&T4EUdz?Pi_IbqF>tSlSWc%a10Znn^I6p3i(RneINA$JHons#~zH8h6jy5Qy zOgoKD(^H=OG;BZ19gxj$XWFN`XZ@Q#YSdN4*+)S9KfLUlNUV>)91;2By!#6-|2hbF zKyMa-XC!GD5Xb|#F>pV4FOUcDm;{9KpaKG20^vMZb)x0XT?6)OyTnvZ1wPz+P6AqK zfz|_Cp5I#iJb9yj^=pb`HX6=~*DJ^^N{PlXK0z5jkrz3l8IT z4zjCmEVGmE3V|ag=48RR9>EED6n7|!gTC}E_~c~p2}jMluIvG{o`wzb=Yq7sfKE~~SkciWxrr$ix6Qg{fwBNwz z5GMb^u;XH=#85j-Si}oDQR-rWt)WX(kTwR^4dPH>c-oH)2kwdlNwyD%Cs)1dnzY&W zKJ--P0%&7$@OF|)Eoc>Q%%W9XNb!v|x4Wsj(Ys%0)y?*)I<;!S?aGOZ9g$6~$F+;Y zscQ>k%ibPIqDp-Fs%!m`_%aX`+M%B`gsrW%M;4ftSaLWp&+~D?v_$Vr6=62iZ=%=6<`E|XciXJ~SK*mes^vC`H%AkB=b zl=b8l6(^ypEzz7_cxDeEaOs?*Kba=&MU90iyouqcFq(j{Dzmtb_LS$8&<7Mjp4~yA zRF|iS`etFRh3c>Y^64ceU(a}NRRhqkusg|u(?crTwqchx$h_pz>x16 z2VxVTIR!`Xr30J8D*^`De^4u|Y5YYRiUrqQTjBRRs76v)TP{!p_0@i;xg<|r6N?e0 zD^~=kI#B%G#9dR(fq8B5$;*O`vZL&B^T{azJ&&*N+CVAmUPfIPW4Z^GOmr7Q-Jfjqemg(~ zL*iRjOv)AKW(^J(ny4GKiNO>j@eqoC#{BtlBAO0o3FGUdIzHZRY2fOuOBbK9ujJuu zTv$*mqsf=cX2!#RB@YJn>1v^}zK^0blE{E;$I$P>^4`F1A}ujLX2Pv(Y5v~lps8+I z=~)f8c*6ws9Z-`N2?d)G+W|cj%GV|^UFxYFBgf7d@S6&HT8|6t5pMGC|$?p&;6Nd;8D%@P@G1fXa5+et$u{fLc#nW0>QC zfS{(ucL2sRhDCUII*CuZ!6cmq_L!HyD^MeX~6dzgc-pS+!_6BYEh@=Oqo zx6dp#{0P?4b!lT~bSuB3%Yn`&8<%N=9c-wIsPK3j+n64@<+<3rBn8jYzpfG?tL=i*WQO8yRl2I?ssKu0tjal%~=r?RAwwjE^u%=ZV! zIeEbj7;QUdlzR}-$e_aKhMAIV18nBn@R9t)KUGnguCC&3Cm*?(siErI5@d+$%i_CN z?=fXw=AOMNYcm2)+q&r+?^z$uUG7!O36Wl~AFpZj3i`)lfZ^%afsl$cT*TMx&cMUj zk30{BEuNm-+?pmYH6*_1B5Q2wlrldormp0KqwSBvG^RwEi~Zg#%2Upr5?WcJn1wP7 zXn^!?ch~KJzA}{Gadmh;;ERbtRbH!1wZ6uGRWO8KHU9Z5R3%wB<58ipnQY`|2yN#K z|1rZtP5MPJugeNMLqdm6SZL0uLa-fD^qn201YF+0?AtL$L@ct72rZ)1D(l>fY z#pWfp$w1_SpNgk?hjUm}6AB}ds-|5W3CCEv0qbCa;4f&lM(NOIh9A3r5Pc;3ti*fF za7me=#l?RrnuAJa+#!|e+wtcTgqH0Rd)x%zN#}BQ*-ssSAFIqlDjNQq@cvd+>dskC zm%DK_@l&1p1GR6NU74q4{Z$H|Nt9~g>mr9}1t>(5;5$H|^}Q2o;+C8No%`un|NC&LKdeGTCX?XZ6Xb>+2OA$XJ@JmogX~ zoqBOVq9jjWXB;PE==Sn>oeovG+9fp0;oW9iQ)t4RNohL#2Z%?x>`e*T>!wpGNqyL} zp1SNT=jT;o=ng2?yR({Z4Y}A z{9kCsK*o{|?fN_YhZ=vKU_V@-|5OFy*rs^)wy5RGN^@7wb>z|q0z+iBYaWGumDZiD zf}|2w%M+91{^Ek|`C>J*3N2p}wo#WtCw=(H{O}B2Vv%$UTUz=Jey*m2pMB^*frUSD zoLmW@sD5P#oWhM4Ptlluldqg0RPiH|m4lK(`Od|wQf92iMD2L>@GvZQ8W&_g@bxbj zHBp16^MLnTu=2z6{q79^R=kSY0bPin3)=p8zH@Ht&fFG2pU-WPc0kV`7=C@-@eTVW zt+pjdU1NLjO_;#@OMOr7C61cWX!&W*Z*}**`DFHufv~n8K_H+hn$ynSWzGfX=s;9l6ldw4w{Tj)x6_jE`CU1DcIrY z)GI<#2*Q^?5CnwncGpck-X5J~sDVAFGcJx>gdLt?R3v>fHcD_}G^W|p=azpaB+!Uz zaX(oF@Y-_72&ORn-EkTJS+;hbQT7AyT0Io;gbr=!pdYvbJZY_S`QfOwVQ{37VYj?6 zlnN69b%;TL&~jv13`m#>lzrln>#;L)ajJ4>{g5~)qb9aaw~AiS8xtm z)^Z#C|cl&5SifzhnU!NNc?Zu~Z@WmGiuqfCz-GBe6$i2jr3FpILtCsFUDLv-A$ZjuaZ{ zMh{j;dk;+=_4G9Hlqs=$Xe&wT3qMyD4NLDhHNvM{0?7T2*MlZ@jXmqT>cxh N{f2Vi*^@gX{{cn`$1eZ? literal 0 HcmV?d00001 diff --git a/.image/租户套餐.png b/.image/租户套餐.png new file mode 100644 index 0000000000000000000000000000000000000000..966316798cf0dd19b8286893364b07762fd39859 GIT binary patch literal 98375 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�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 TF(pDkB{S{mgU5-$A*cvk@1 literal 0 HcmV?d00001 diff --git a/.image/租户管理.jpg b/.image/租户管理.jpg new file mode 100644 index 0000000000000000000000000000000000000000..647416a9fec1db5fd452f64d42319faa691f2e35 GIT binary patch literal 117448 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 (Bm^72euuq7C8o4t~Ks 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 PpWWeYByL>uZSa2qrIyYy literal 0 HcmV?d00001 diff --git a/.image/菜单管理.jpg b/.image/菜单管理.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad3b7979c005e228391b9e13862ce50fdd57c2ff GIT binary patch literal 132511 zcmeEv30zah_VB$4gq_z&2#eMtYPa`3zng?4fL7_M@ArFyX3orA$ zrRwAx;NUUK)J>`l8AJj3I{qG6+VPBMoy{$ivV(gC`Uq%L&&*=A8N5ikGN;p5F@FQhZG%p%&)H z%isr)B!vFbnBD@7lkjUV%#gKWwe>7OHC;?Ug#{X{HUOL>$y`%XAP)rXP z;G)_!b|^WuK~gMo`Bb>FnbK0SHHPT9A*MC;zc4VQ>$0F?n)aLuefCj*1eKKrN} z?rqJv?cHp1*=wd5+u#D)l4z`*fr3T73v_64K`D8J)|-4W}A9OWME`q zRJ49gCd;Pd>g;ls9o#kmCZ}q(oE2kgZs6HJJlM?~jAM z=mW~Zf3&ZpD2KGWLQyAbqVH_lH@o9teAdqF(sN#~Wg9 zs?h(l;l~%?Y4_5)Qs1aA(?W2_>R~lwnv8Yaz+t%nKdF|e;5|uTb7@Pg@7~LpsbAtw zn{;}(IA+ACqGeEHh^K*Vv(pC|mpF&e+t#`a1ocE`%RO9EQ89!a)xW*xno4@Eat;ho zCe+6R%He?o2|yvu#km_`NICv&LOpk4MXjpUMZ2tim%J9Mhyux8<=u5j_oa1PT`w2k z?6`VjJtw1BigYN~=B$60-#yn^y{qS0s|lR&@aPn)h~~J%35qdl$fQ>C3QtofH7rJM zg#ocuqWJFX`;RbDC#936BRAZh24M_-_s@;!@}Vyz?}aFVtIMxgN3SF>Z(c!DnTsCp z1;h|tNqOl2{T#dRnCphVWW zKpJQ zn^^L*F-;B_d^C+tyU8`fqUuR9W~L}uCk{iVEoi?m5xy5|-%6OccEKokRY30EpPL_c zq3*Yi;Woy#U9`LNN!HGdUTqg$o{v5C0`@9|eZ9qfcGu19LgTpS&!>C3!Typ%rb&+5 zEj?&Je*Kt_km$nL46`*ZLyorM%dN2&DUBB|r+-d^mGxvJ36Je}^%ZGD~=%^RFmeT$Z}maR1LtI}9_tfu0v|#P>_`i{PKQ zHI+YY+g0)(x$(|3gga$FRn*1ZIp*tY_t3R@!gv2K*3A#k7IBC6T`YXs@8U```zA%iyeuzm0y(P^^r9=FIpQj4z_a3 z+MZI69W^&PM{vJ-uk>)uISswS?9TOdp9Z#m7X0&5YGcb6X5o`ryZxW1-En^!_XF}b z3a|hjlmai;F3900_R?PrP+rY`TMpPi;k6QdGQ=*sdi;u0zEWJ)wbKv$sGJ7Q4{&o% z%(EvMn~z)UvuMv?E;Ey`*StRac&F+=P4{iodN@=nGx5!a+xxMXhxRgpP2YJ*t=K1G$)_ybvz%WC~!FOWs^-lL~R0;2Yc3Y+J z`s@UC*7wW>1<%=#PZnx5|EnYFT z?P`z&{0@*Z;eeN708q-xzoI{$bpkC1FJ@Mu17nKE4k?insYEi}v0!=?!A^2Babq#u zlFv`|hK5mx#{%K{r$VYg35=Sa1g3G~pGJd$cfS65YaI%ZJsvb0vkn^}6Zc_jK-~<= z%qnF2j*VW4pKtVfBXv>Xdd$?;fQ!T54V(aGnm6vhw*FC81JTN`%<55+&Mu^i3HvB| z)ELYx@wxXIi3q^C*y^x! zW#S?qDqsOEs( z#QX)0QI{}FVY9nEjrN!nrYJ>9Zme&X`%#v99^+wel72JvTM^x)E%Uk;&=$|^a z_vD@Zg$zJ(&F!8mduRY$|KC4NeY1`Mx<5V>^_4D7%J7)kcY4^EMrApZi973sq~08x zVyj%kpUvX5bMftGJdPbN+9_L{8_J03fS(_J77(}pmdnvIM5!XyWbjYB_tI%VB6s%8 z&8U$*%!9L!B8q9^VGZ%`z1N?F6-~N0t^H)9^R^r5#yBx&aLVb1d8jzORLC@ZG7zpd z>w9b+!X>;L0DC7_JLLlaHlj3Us+|T?{M^O!S_YtD?hb&+YqTX&H8lrd2NF5}a(62O z(0*R)!!-^Epl52iA0Y9M4JEq=ZhLnHZ@Ac47Y$}|r}k>J(S*;F*39GJlOcsUm6-!a zeNLYm@1Dnz|MbjDzXLF_<5b%22~KnT;l{^10I&dR-JCuF01VoEfqv(#I-kTJg+KDv z{#o``jPvc&I(`r>VHYnV%hPwf9T#Q(y-5&skf1>%dfv4;(@#% z3q9TZ0IQ%0fIs#319W@nG^Cs?4*Vei)*L!uG8kd(L9y0TMP)=^W##q+F`ZCNHl0~I zrZj*}L3<_^o-G?s8a~%!o@eIKFbx1udn}I+So~A%68AFp(8-N?8)wg0>VIK!%%~^N zdGca-lbNVCr_wLJ!! z)ZR(Mxs94l;jPz9MhsY}M0$VCo~$z8h&5z3GSKt80S)*29lXY~dRYGc%}q!1ymYKa z)rgaaQ#QHRf~3fq(_e-){$Jmnqgu0He7ygp^`4lZBVT^uvjJ=JEX3Ek@Iqw_x8}H| zuUAaJM|<8{87+KmvYJ#AE=uw~F)w^8mJPr|Vv1Yx~h7q{>S}rtGoF_?!rUd}5)_x@#psk0UXgLK}CrHQ<1wj5>5 zLx3njAlc7B_?`2J{#hWr_qe9@4>T#l2@@-tlmm+Edw`XR6H}Kuww7{xv&{VVfZ~*m zBW(^{5^Y687EvECw({s=KD}?xu`YXBbAmfc1$ecWjrz0qvj)Q(Al;#k` zk+Q=|K|-QRocV{LrQC?G(NhFj63VaeS0d!rpWT0#pRe}MPd_Z62ykEyPJf1GIyY^- z!d9S)%J-+3pwGEwt=F`3q?~>1>6?q#Z3Wal+Dn=2lUb3stZz_)glL0E+ z<)V|v``^zRXtaDSDns?R4pNa{{`^Jj*Jg@a+0CrC*SmF@RP0 z(4eAY|704PHDr8Oq|wi#^4q}=-S-S#X@9kzV42%7*5JyDd(=OC-PdvWl2zoj(2}R! zXir#0xbk$NTx}=j5@m$cXHr7)Lerh@081cJ0Z!UE4w|FJGwk zsGy3z`Ch4v_? zm+MumFpzXey=Hoq?QHLCPl0qPevr*YtTu|ZmvwhpRRvvXPSOF7N>pn8GNJ-<4g&zl zbR6$a{_0CVJ)@G|a~}7vO$X6WV$D~WjUty9O+FYgBz3@HiV2DoR#OPc*AnnBg0W=)Fn^?ejn*&7!i$?U*EUchKSF!M zEI{zItIno1q^#JqjcIkJbR+M^<%d5Et4R}E0Y~z%%O-P37B);9`o@~eumrw--BN$H(_x6 z6zIo~{@{;bqyYoYkiPdK1F;xoy9ly#Ug&8LlNuc<%r+s91*SjzD?A0VAYYx6PDmgH z$Qg`RD*gV9xt@mz(8r`PC-PR>6;vEzJ0j;OE)e$jbNLf$zIjOd6Bzta5>h$7bGrIM zO22nwb|IBNA@%0@{7+!;he?QU#s#G2ZbBu-g4}nJ;CG=`Hxhu+7P2pGIt^{8T3OF< zZ#(i!6whq5#-3P+^!KEsC1mYsKmrI^0(o`^t!@c`v552Dpfe$~Ko3eNdBV!+ASFM8r^-*<#vvsav4)Qxo~*%rxZ~(opZG?D zmB#xLowr)Wq&rS8FS+e=vhQQshL8TUFK+juT7OGYlGImVkVF8waV-2?}edSSL1 z+LOOzvCNPLaVr*GkLO3*!Uv^_ChlFlQcR1u==rR_kUHAlw*2E$mrI|l{Uj>x337Mb z&o7=nTFBtqaiW`z48WV4(;vbBqEriUrURJ3kUJ)j-8ZWYLJ64} z0+}|3eplE8j{h)w?*_CcRK_hsEyumX7D&(_9R^y8D9sn1LA(#ZtLhQ<@rd$_V8|;} z==wQ#HSS#eDk=zS4pd3!jPI@dslTVY7jl6fV!AXd1xS!VvE^{$JLs9~iRce^0#g`r z|9LnI<4(ndQs*{Vq}V#p@QH1$EQd&eAWnh0!)zhZzbS=GAOL_gkOA;49!KKt!>n+F@%-!IT2jvx}?&Fh<>y5auPX}&6|uf;zrL9&(aLw3F!ZrBJ&AQxvsOD$$s_*&&^tPOrHa}B#tq!ln+{&WBf|6K5d-L5%WFs3puTkr%WA3?)T}(4&{=~ z52xVfm-1lH@qTNTeU{3|-k|vgc+nKI2%kT%0Komx@W@k@?g7=l8_X>8GR-XVs$XgK zqw#vmCY5y8e@{R(WQ#TXbG@8XHp)-o09Z3OVnd(4L6t?COkE1K%-6Sla1kHi!>9)4 z9u?~?x!u-5z2|)%b7+e(qQgnOpW56ntmAF5ii3JscYk4DQbr`P-oGy?_i##Gvbb;# zl8m@G>er6fKXe7tAufEgt_I-G)(&3VuI|;^enki3P_o%tZ!%k4n-3}OvwD=;-Vj_Q zxQ?oIh8bqL&CDT)4d|9dQtk?b#}3G`I3;p!$6uKfq|_=c6lOp7!Q^*!v&YJUBTqv< z9*e^IW@wU6HLS5-utB}X_shnz+a?W_^@s*8MakVFuWa$<0C@6`c{?%vkC7Ya5fx1h z^YVD$2b2w!kUs&E6`o(=D~Yy4%XKWmfHmo((f+(#m~@q78Jc$q*LcK}I#O-es`{Bo zD7hejKq|c+m1!e`eASj$#Y(c1TY&AslnY(vk!BLDB&ewO(>>6fhNuuPt5g` z+WJU92C0UYQw3HS2vFX`p-)Gu$}d`*0dE@YV75|ePms(^CKX;RkoWzYOX6Fnin(ig z0qZ`L_VfvZaM^5QpN{kIt+dx;G>R{*2PRSV{gLDq7|0oHkg6__RxE5M8L-bwN;qr*FqX#vysvI|$@AhlaG0Kc^l<-1Y!dQKV{KB@+hbGt=zZ3Ic+ z&IQd~aza*Bvd17)hz^)*OaYqL<}a}(9Sa)?n z$x;%;^QjYu(XFd}gvi=uWvZcU3TnctcevBA0Zmo*Xin!?UpK8;u3FRSV20$>5+Bio z*s|9yQp)pO1jO7H`}E7sRTJ^Et{a%XZIB`esv7d8nj zFK=Fr0DvjlXHYwPtx655F0+pmrmEYxVHHlulOIc&)Tc13c%b&k65#4pCjAy-k2J0&B zcYW%yThchXVJ3(>y4IYEK2$_v^xb&x|s_P(v zJI0NPS&V*qMfW;O6HKUQHw$veo(rH;VZxYWo?&2?(KwBrn|sn~BqiRiVbTm?eSZ9Q zL#0QJ-U^$`I6n5<8YrascgIKrn2La>_^!)sMqQKhG(ZC703&Io1Cd|;KI$@B1A+hN z++}$&mFN;#-5XL8);Z>#ftf+j*mv_Qx(Os7ZTZZX+&Ru2 zhJ}^i?20sMmJGT=QV!}f!jxe9KAN-ly?=7ce4%T3+t65j2sb+ZOZGtdH#_t$sEsuj z_L2O52}<`6^r~Qyiq68ln@$#UU1mfR8zl(2*ZZA_3`%zjCAkRMz$sg!+%oD<=@p>Q zEilD(-xaiAHJAiV=(2N?2=vEyCDwetZ=I3nBfkrHK_AW&U|ts@m1T1!@qRpS&v_xx z=fu3!ZvuahpXgidQB1vfDTU?s?e-oPR-s|a9t|5-2?pai(fr~(Vn57gKq=5ITQF#l zm2oDPNE*Ta038RY=b9ll-JL_`M^z}6e((WhFrf5gGP0E@@04pyK7UnNMvMbrrI}c5 zRZTdYA)os(Wz{E35{Rtt(~CF#UbyNg+ebN z6+bge#)ND&VF=mrVuQFBF~`aLoN;R$FHStz1nnZ}2PYspK~+f^3~> zxvkxKB)KYtaJrEJsY6e%_eVwKe8=#rZR7g!>xt$G5fuS2Xa0j+`^keE%0YM?q_(@> zeMgVgf#LHpKR|P$KXdeD@bcDK@_u28;g{C2{hLyd^~ic#tW6H8W00vTaej-S<9H}g zP$W5SvD>yK-mxiE-mubY%E3sIRZX#o-BKo?4 zG$txADllN{vVvBrHPL9rs_rZ-snWbQ#N$x5fkAACusWn31z+!>WV<+GylPJt!XVwh zB`C17T8-{|3+j=5Mrw`d;u~J7Hcy|J@#~0H6CsJYc-{;NdB3qxYDgGvu80?bDa3G* z>JDj%s^;?w#UMhz1A6@nVkNsmoXLZvQ8c`s*e7dYp(w>$bMdq!-ui1UEJa`;?z@S_ zx7ehSsGkP3>6kzfDRT3wv@~!}kcz5mtyM9gno?eA<0F_{QI)+He#Aa7oRGQw1Z<=BUr$Kfgl z#wzkF`q&s&t#72e$>^pAuD`cRLua1z1i!{xuZX0xD~))+%0j8i^6*|Y35}9n3+x-~ z4O6TYe~RVNf@4>ei==o3kkSd&&4z||g#dIuIRhU`UZz%sRK^d@pYNyz#EG=<&Z9ep zwfnm&5nYH11^I|Q=TmPZyAztrW3(%~g8HZTbky6rp<&0wT22VHq_D3vhu+4yHtO%2 z60|8Sw=vH6ia9s zq%f7WUOFZWp?tjfqw5b{E2ap zW+SVaZC!R(Tt}XOwXib8#p33&z;C^~Vo`P_2>pXW5uW{5wV(Tur_-F&i!?Ibl5=p$RjdL1}FVK5viPI{L@5Xln z8)Pd|Yc-Uk2#DayV{15q?h~jG?x?@NGZ%5h&_oX#-1ZXIibDj4!vh07TYF>mQtN`! z75!;~8tBE@J&2s^*I%{4eT4(5lSDX1^MP{hsv&s)+gme}f41;Vfm|OW>iz3h8wD31`nl{|-?N zbq%u4=8Id9leD=k_;Tw6|1tESwW5C~TJaPsUNXY-=0ghu0_74GLmciV=ZGhJSl;?k zmivG%_o(#+hmifx+RO6RUn{5hSQg|CxdbcdpX78#e(TlZVR~EF+Xd%T_tRBA6R}NN zBnBT4jqB3utUD1obXj;gjSM+&Jb&cVA?@vp8JiC9Y z#|ASR;WJ?qP}{hJm1CDn877oHS*q<1I`P32bPK@RxRM?gYN)US_}5-2pI?X%Yh*3I z_3E1QRaqgzTnuIgl(q#d_pb~-K=+T7Mg%ihHkD&eO2MJQp)wc|GMG}I5@3oyCCs4a zN#vlT$gOUxqLa?1M3)z;pc3wKEltdf<>L_@LM%yRd(wcCSTii5 zOC?^v(!M{!A;C!r+Ls}942m&j)rWPKeM?am?aP3@XfTxRnGg9k(MjLv9y6jCQo6W0 z+cn%%Qb+EWYbpi$R_(?K2}nkATL-gr^EPUXQfy*Ewm>u9p{lV_z1V?^BtxIAm7S3n zJd1C5mt^D?))?;4;`;F`zO@UatOn&d;VTXmWniT<&n^K z4``TQvJeLQJg{q3S%*}r3(x03?J&bQd$3{l#0+x%I%}L5muukBb~LwH%1)T2u1xe8 z;`ush6{xaxrO__IySpU&BldJ(?P#@i%Pu@IPw6SWza=iZA;%-C#nig-#2RXPq5YL2 z&-Ri2=9T807o2#j=A!W%&QZwrTcqV)>`EG+$6M{hM0y94W9XSkRpy#ILwlvncELrT zlkfwzHf4nsXLu=?d^&9|_calf9iM>fL*4y8_K=(Ym6?<`tj+$^~%q2Ul8G-w}{>n<_`OS4tWwk zkZ-B->&3rI$X_S-=a-0=P(Fhi*$e2uf74$4ln%iC=mc2LL~KfOR3_8E+Kian`g#wi zzz?f{r!)lD)5=A@8xt6gN97mL_#G@TVyG_Y?01qlA$|qZ+O^@BNk3ril$bw(#@ooL zSR&6e1VX)s77YSqzH)+_CY|-~bkt1LofGu^Q-K#<)&Hi=Pf#L58bel-fZ-N3;&&!r zb1KL}N;o1QAz0c<6QxNK)q>KuZs6HC!4xS8-|IJ891ho1CU-yLPv%0>V4qLcBQ;$I0rO$ht2h2>zk7$peE{H4~(e7mcvYr~S9DN;Y zjqll#TBxPnTpmndrf*lzGnP*=+`3c5$#uJn@}>LPjgeE$-j;>!jG)@dB5#x7;-=c( zYjshL{&`kjs&!F&a}H&fx9MNI%C9F{pwdKS_<(4z1359UV>*Or-SDA+(t`)=)21uU z=A%j}1e2c#I^+?F};bWPS+ouvd>mB01{A|`$ zrcJh#*l8%BmfYTAKx(GbhIW`q8gDm>?Cm*3wpTE^Vhxwe_HC%oVYwR_&*JzZEjQ7eIB~U5JAbt0OYo~ph!X)+R>}%Sdh1r#M>^`QfU08IRD#J_`}^R z>Owdpp(_{%CymLf8WV@>-E{9V1jOG>G)Sx%*^`CK}G61NMPs* z2SlUkAMTw$N!0 zjO8capE^=D?k?p_CFdpUR>gEd1jONKZQIpnNM2gXBtWcrh!I4Pfe*B;SDz9+=3qdm zf}EB_1rX5Pt%J}rbhs(ZvpS?i(37KwLyLD4Yp~yk89*&=wHZru;ZSXDG@UEI2? zgxEcuWlZ^sdok&hv{F!tmr_6$XY3L};YOFL#r*srIZj zAh?yy*OmnSO6N$#{<$!Ktdl9x3 zI-HVIozr?fV%=$thO(6Of%|kYu?7Pl2$R!5B9SoG(5hy>Qg4QJy3>D zB?=^;UqUPTv)b@v;x{6Au zZir`^7k>t=kJTe5Cam*R2>v_5I1}k3360| z-pPP8ocZdKq+9`=3?~XJ&_I+j@5p`<^fCu1k%P*RMxGFs0ic`=^uz)ZUZ&>=Kn`q~ z8^#lc5-eN9i)j(I0C*1<&sdjA!>CUA_m|&k)G^ zUOwS)Mm;Gh-I-=g><~yPJPc(n^$w%A&invCWZDpngCmJqwyUsixcRbvVA{R;ieN48 z?<1ae=A+EP&|v|vqz(xcGeCpx13_XG4Hd+=gr;aS3}K&)QZ>d$%e(XsK>kjQVFng@ z9VF5})Q3fKETjqR!3~SDj4*6xN5|WtptljUbRX{vb$7BKr*X!c%bQyhE{*m%u3h51 z#`8_GEv>g$CV6NXWmBvh*0xgYIs$S0Ky4sZ>o}9g8-ylyKOXS$Ba;}RF;cch zGk@feJ=#B~oLmq27qO6+Ov{{GkXOa?*E&<(wxgwWc+pGz2>n>#5_I0pAXRM*F}BlL znzu)%w_OFr4%5gr2oFR%mh2R=1)Yjx%~R`~YbQAMmrxUhO@kF24`0kFpWfTp+tBF) zH#Vp?Dg<9^X*3GfosG56%iF(1MNdLq2hes$<)tQ^I}V+AeN1dFfmnn0uMs~#9?25| zO(jm#c);sJ^l(8}W$ZRtW;?#b7sY8xUGA=LL`F3QY~9?q)#PFz`+??nDWa-#?n#N_ zSI!{!Btr+y`~=87iLLA0ZM0cOU$5UV^!!yw@fqx@_ROjiRknJbT{Pg)PcJOAFYM(W z)5=jQnDSj2_nb59u_h8*JK8#U;6hwWw_tVdd1m4lH5N?cXmle1XswQefl-CjiCeI3mDKhdWFFR zI;J4l!BUu1jJ`{+aOurM2SyQ3nHZC^Yz}1jXpfKUC!NheLZ+g*P|?i_LKb-7yn7{3 zY!U|G`zA?W^wKM=F)ed2!U$%Xw;C>m}r3|LhR$*hLhUuLE>&D#o7u_5PJX z1Bcy^5C()Sz7b#*4j4SMfSH0w>ZLo(5#UD%J^UaaNWk%<-|!EL|4Jl4ztBQhM2$2)Ytv%myP49&kS1()Dsoa;X=IL6X-ypt_tN#fZFqGUDT8h+cHM^Y);os-X} z{TqH@2T@z>cDeV6-D}2Fm1^w6hgRb`9+hjhX1e9mn`@(XjSl5_=Cgg#cqSs&|EoX| z2M^A^5;Zs7+?WurDG%3_ngMC&=VrOAi*>u(E?a6LT1PM2v;@@lpG<4cH!=!S6CN!7 z<^>`|9bP;EJgBa0xO$aq?dsSrr#_ll?@khW_eu*i>EH9YTjN4neN9}7)7xXeeUiz13^@qw!A|c zI$l>*T6_CC^Se_sxctps z_`V&Hw6HVY_^d2M{fkp?9k2dk{%<8O9&U_%&I5{cd^`gkii3{KO<|&n8NBN6VQ1uRp z-)dI1a_Ltr>wxO2N@U2pbR(5LnWzjvGF1%?Il-zJOG78QhI+F6??M<*fHCOh1%*lu zl4%NZIVcvgdzcPpm|^horvQ;IB%c-TAz}$U84l~u%^>R z;V{qIlP=FYFKA~Vfg(1NNV{$iAzgYvK6PV5wa3ZaSzHJ;wt5>YvdO3Rkj22INRR#~ z`(Ahdu{FjiExY;j7Yu@-KI)nUd8qE2ye~7bT34^32Q#kjXTe zI~sFNPC&bv)K$;72xyN$2T1a!Qt9;(ID&+7a40g8xQs}oE8KStZzuJ!6(DCbB|=lM zePEc#%U;oX5OOxoGttMmP;~3fvBr44c+X~HlZ&j~@OiI-vf;^eAt!)ZFs$_}u1V~e zO?nXysz|nTtojO5OXwTw%HzRYbAp6UhOj!A-peJl`HZ`php99k+W^b;9~i4YID_@j zWtQj*{I2^VOj_%~D>7skElEI_S3y_MWAa6(#Z;xubHxZRQZ+748?rK|wjaDQ* zgkDU>!|>}0e_%;2I3YYg22-G?LY_aOEZXsdKE|s|7WU5kDhps} zJq1%qg8qwh1v4rv16X7udd~*f@5K_&LEy9#^ueH4vfn`luM2S8qrks*7p;C?~&yvTijVi z(XClw%37;rPn zaxB&{{qO}>M4N~_WLOj07sUg}&?(S$RXpgo1nqI?peW7yP?7T$b{#WxxVJei-Ptt} zCc_R`&Nx>Up;5)T1m1=HBi_*V+l(!LI{3EatW`gw>ZC`x6T47x*06JXEdO6njlwQx(ffh7QJb zv!+YL6gP*`$I|S{qZU@Fm#jO4#1;1?Z4Gu*VN0ia%x=k+Z!Xb;blm;d8u&g(E3KXv znB^JSIiB+{-&#rI*WtZ0cYKeqx;Pd#7E<34s61q%t*(=%dX72Y$4H0;58l6PS9uecyEl(J3dy41{%s3LSMOuwNQ}g?n4Gj3FJ%%*#aD& z=bLA=-zL^yg8jbwrm0WQK^sYYi#RzEW>68cb4?<@MLchY&#pfKQ zL{}tB&^=iN&|yKH4rtHT0wlc?1O_#7p=!c_pmbI=H8T9CYLv-6#@mf!QzK7{6etLVNEe(?gO1)}7vjw`Jp4)!dKKmB9<0xiv&W;9 zA>VCfyyGa^q56D6PA$1!ze7+J4o5>Ld`~^pSvN-tCZ9ItUs;JN(kw17)Xur3W@6yU z9QF^E%Uf5|<<8urK00JuK8Fhc6&&+wcdA1xe`&c?L{6&#B&wLFFKpe8r3MCfS8 zdhd0k+jG)RCg)xzDo>x8XQtZM0e1%iX^Lg#1(2(b^FW&2=@vq#DuYKGZc`K34}3uK zy;g&Rl1hHit8zx<`f_{!m@YM+r1oI^DAgnQ!hD}`jRXSU1q;$vlSIcg@@Op#V6W_G zreh}G&4^-X8`__WYxS2^Wg!#JC&<|wkWU%u%vFG!Rv7Miz_yE_&1FcLZ&!zPrl9ep z@gT!c9Vrtkyork;NIDXgBh=kjRdL$<<}iWZe*zM;OdCv))1VPXiRwCxd&%s61;sK~ zTfx;?K|zW;MHQ8y7>y3F#o~e}T|vD$mgpciq3l9Apx6LkuyBiVUK#Wfnf>9tlW8ug z1%=9lltI66Svs+v8PAm9AEH5%#t`fEIs_FE`dxZyJ&3z=)n)TFVO@5G37yXAy$K!t z2`=(7#svRzRn(wH2JvRb92TI`s_JBhHx;D3~z*-$Gj06K{?G%avc*a@t#)_!lG0oqO~@ zgVP`B=eO$}e}wv~!!C3Vd63*|GWD!Wklt~Wf*=Qjowv>cr{D69mX z{LAwtg8YhjrvUSQ0qEacfDU-RJE{@OAj6CYC{6! z?Ax?tmMxL|u)1V(4#C!eoP)+ok$r?L_%S%(k&NOSRTL?o5*HLLAt5Oru9$p}En|IG zh&-kWGzs z+eDN+E`d=aEC*WhZ{p+H%Jmz)T?8!NVqk`LV2NFgE)^^aeWpb2yei8)9Ve8HAFEhR zhYs@~usfXZEWV)hEeVhl=?`svE!(I z9IVeIDP{-};Tw`Y&CvD~$E?WCaT;_&J3E_2h_~r0A5_2T47m}h5vu!Q+OP7_-}*!f ziN34&Z4cVJl1t3@Ew_mn@m)dx<e#;q9QRqJY;0N#>s+HR3Yr^r2z`$I?85PBi#61oObVoe zEc|%dv4g+9Q4Ro*zfbpAO=9Kx>Cj2&U`1+n!?8$)h$9b>1W|NejM(Hp!i#@X_}kAH zn*BiO4LX*jV!#V}zuRf&f(A(v1n-es5v*|w3YL&~omUPiQ?h1{ zz%2(ok!%${qbfxXBowgRG)J-eO{ppju?h;;@vj)Gx5=r^MjVP`tf7WQ1baAB$_&Dy zS_jpA%AV(>u^m}qpBD-wd2>T~8?{a_2Nds{%1e-Z2`EVDD<3%vcFmSh3ECzu+!OMC zI~j!CD|x?H&0i(I=>cBSRro8B!0``P{`!tl!e7aHNwj59K-`{(SVhnKdybaZ+*Tx+{k$! zg%*{9(Am-e53ek|(ADhevyNuv%V87JniAz!?vsf#jZZ4|{N$9e<4WUDS_?-$gyxh&%<~0USmG={K5AyB<0F@61O=n9vPhq_2D&sKcC& zG+Nn$zrjW%yy(h(w(-o>2hGgKFLtGTbGXB3U&P_AvMY~(A|x|o@CAZI8tu@`NJm8rz#&LuCMO7NYnTXm}x43 zzUzImtXkQr>ENjTv4fbn>!D8`1(5M-IPIOE5)P_vIlQ?GTM*zAVre?Aoqgi7`m_+N z!`kw^f0(t~t_(cx7k2e*NY9bY4o#0i^9SV_TE#{lk59S&E59}XJow?@^A;8GB<%~^ zQs#N}IO(uZJ#0m;9VK5QRANXs`j#&h{AEh}xhnvoPmd1?Q#us_rb15r`?j*O`VQs)$dAo1+E^& zOJhL(Ss(tzZ9t&(6{T^a1@~E2jBTX?aA28v3!|_hu7cCz5SVT+R&~af5xxP z>V(z09Yky02YYm*E?*e&|4NHE?92TOdG-7)#^H5-Gd=gX;p1VNH5>6ygU)u1RH?RJ z?nWzE18YBDl?H5xRkUDMoxX9ZBm8+=+QTr$$cld)DOdjKBOCOE+@bR2|M$5(!nfjB zdQI66-(L-sJhrL&tA6AzT|P!A zO!G#g$p?j%cfo@N zOg`jsVkWkRI52t_!0cs!XKvwidq-+N&V7tCJ$x75y@3Waz63nv0}RX8#~N9+V=-nz(N@d^x$eGHqJ?|E=EXc4oGi`|Uxa9^LKk za;qtwGhY;b8km06m$|;TuCa7`=a=h~)JttK2R+;Gw0w80)1$gK2m2B@{I8j_PMW_+ zZImCttSr6UA+Pd%;g@HNcdH`@jv45BZi{JGi>Pw3h2A4^DEq)x;$C(E@ghOC;orcy zz|M;7D)UIpc+^jIK*37DrY|{yNp)aEh1(*>JU4rVtO>Cy-hb`VzkW~)WBfRw*Pt$c z3ies~$5!}#=P~L>+$H~$Zok^?glPl$gOzy}sgDBA{%iHMOH-jG-{$Q?jpUusLX@{O zj>2(UD{u7qo?CHgGfjV5X(jTDbfXjB_7BZe742BFr#7bX!P(1SH0Dbx{1C1cYofG` zako;Vag4U+*h^rR`;RQ#x6ZeatR4x(KeST&3EXdXjUN4%cg3!Wi94EyOXVIOQ7}MI zxKm*_HzJ#C3R{tBOM8oXoa20;y9ut&%OM3s;1)3A#Mc=w| zGn9a}oXHOYkS~Gz^qKs z33N⪼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 AB>(^b literal 0 HcmV?d00001 diff --git a/.image/访问日志.jpg b/.image/访问日志.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef301aad4ab4ae0331f9687140651af45afeb11a GIT binary patch literal 74777 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 O0T54DKbLh*2~7ZtWW!+q literal 0 HcmV?d00001 diff --git a/.image/通知公告.jpg b/.image/通知公告.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97bb42fe41da44237cc541af4701efbecd23ea97 GIT binary patch literal 78637 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 literal 0 HcmV?d00001 diff --git a/.image/部门管理.jpg b/.image/部门管理.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6eab2330c23e4e9367b956ac0a2eb01707a2aaae GIT binary patch literal 111242 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 literal 0 HcmV?d00001 diff --git a/.image/链路追踪.jpg b/.image/链路追踪.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12f7aa8efcb23a75153f321c128f4f1274e69579 GIT binary patch literal 82434 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

    HzTxxWr(Ojy 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 literal 0 HcmV?d00001 diff --git a/.image/错误日志.jpg b/.image/错误日志.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb615ea3f88a92ea71b1239ff06bdfbbfa7be375 GIT binary patch literal 112243 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�#6A^`TB`c9XBrxE&0M2x! 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 + Coverage Status + Downloads + Downloads + Downloads +

    -闻荫的微服务基础框架-postgres版本 \ No newline at end of file +**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!** + +**「我喜欢写代码,乐此不疲」** +**「我喜欢做开源,以此为乐」** + +我 🐶 在上海艰苦奋斗,早中晚在 top3 大厂认真搬砖,夜里为开源做贡献。 + +如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 + +## 🐰 版本说明 + +| 版本 | JDK 8 + Spring Boot 2.7 | JDK 17/21 + Spring Boot 3.2 | +|-----------------------------------------------------------------------|--------------------------------------------------------------------------|--------------------------------------------------------------------------------------| +| 【完整版】[win-cloud](https://gitee.com/zhijiantianya/win-cloud) | [`master`](https://gitee.com/zhijiantianya/win-cloud/tree/master/) 分支 | [`master-jdk17`](https://gitee.com/zhijiantianya/win-cloud/tree/master-jdk17/) 分支 | +| 【精简版】[win-cloud-mini](https://gitee.com/wincode/win-cloud-mini) | [`master`](https://gitee.com/wincode/win-cloud-mini/tree/master/) 分支 | [`master-jdk17`](https://gitee.com/wincode/win-cloud-mini/tree/master-jdk17/) 分支 | + +* 【完整版】:包括系统功能、基础设施、会员中心、数据报表、工作流程、商城系统、微信公众号、CRM、ERP 等功能 +* 【精简版】:只包括系统功能、基础设施功能,不包括会员中心、数据报表、工作流程、商城系统、微信公众号、CRM、ERP 等功能 + +可参考 [《迁移文档》](https://cloud.iocoder.cn/migrate-module/) ,只需要 5-10 分钟,即可将【完整版】按需迁移到【精简版】 + +## 🐶 新手必读 + +* 演示地址【Vue3 + element-plus】: +* 演示地址【Vue3 + vben(ant-design-vue)】: +* 演示地址【Vue2 + element-ui】: +* 启动文档: +* 视频教程: + +## 🐯 平台简介 + +**芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。 + +> 有任何问题,或者想要的功能,可以在 _Issues_ 中提给艿艿。 +> +> 😜 给项目点点 Star 吧,这对我们真的很重要! + +![架构图](/.image/common/win-cloud-architecture.png) + +* Java 后端:`master` 分支为 JDK 8 + Spring Boot 2.7,`master-jdk17` 分支为 JDK 17/21 + Spring Boot 3.2 +* 管理后台的电脑端:Vue3 提供 [element-plus](https://gitee.com/wincode/win-ui-admin-vue3)、[vben(ant-design-vue)](https://gitee.com/wincode/win-ui-admin-vben) 两个版本,Vue2 提供 [element-ui](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/win-ui-admin) 版本 +* 管理后台的移动端:采用 [uni-app](https://github.com/dcloudio/uni-app) 方案,一份代码多终端适配,同时支持 APP、小程序、H5! +* 后端采用 Spring Cloud Alibaba 微服务架构,注册中心 + 配置中心 Nacos,定时任务 XXL-Job,服务保障 Sentinel,服务网关 Gateway,分布式事务 Seata +* 数据库可使用 MySQL、Oracle、PostgreSQL、SQL Server、MariaDB、国产达梦 DM、TiDB 等,基于 MyBatis Plus、Redis + Redisson 操作 +* 消息队列可使用 Event、Redis、RabbitMQ、Kafka、RocketMQ 等 +* 权限认证使用 Spring Security & Token & Redis,支持多终端、多种用户的认证系统,支持 SSO 单点登录 +* 支持加载动态权限菜单,按钮级别权限控制,Redis 缓存提升性能 +* 支持 SaaS 多租户系统,可自定义每个租户的权限,提供透明化的多租户底层封装 +* 高效率开发,使用代码生成器可以一键生成 Java、Vue 前后端代码、SQL 脚本、接口文档,支持单表、树表、主子表 +* 实时通信,采用 Spring WebSocket 实现,内置 Token 身份校验,支持 WebSocket 集群 +* 集成微信小程序、微信公众号、企业微信、钉钉等三方登陆,集成支付宝、微信等支付与退款 +* 集成阿里云、腾讯云等短信渠道,集成 MinIO、阿里云、腾讯云、七牛云等云存储服务 +* 集成报表设计器、大屏设计器,通过拖拽即可生成酷炫的报表与大屏 + +## 🐳 项目关系 + +![架构演进](/.image/common/win-roadmap.png) + +三个项目的功能对比,可见社区共同整理的 [国产开源项目对比](https://www.yuque.com/xiatian-bsgny/lm0ec1/wqf8mn) 表格。 + +### 后端项目 + +| 项目 | Star | 简介 | +|-----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------| +| [ruoyi-vue-pro](https://gitee.com/zhijiantianya/ruoyi-vue-pro) | [![Gitee star](https://gitee.com/zhijiantianya/ruoyi-vue-pro/badge/star.svg?theme=white)](https://gitee.com/zhijiantianya/ruoyi-vue-pro) [![GitHub stars](https://img.shields.io/github/stars/YunaiV/ruoyi-vue-pro.svg?style=social&label=Stars)](https://github.com/YunaiV/ruoyi-vue-pro) | 基于 Spring Boot 多模块架构 | +| [win-cloud](https://gitee.com/zhijiantianya/win-cloud) | [![Gitee star](https://gitee.com/zhijiantianya/win-cloud/badge/star.svg?theme=white)](https://gitee.com/zhijiantianya/win-cloud) [![GitHub stars](https://img.shields.io/github/stars/YunaiV/win-cloud.svg?style=social&label=Stars)](https://github.com/YunaiV/win-cloud) | 基于 Spring Cloud 微服务架构 | +| [Spring-Boot-Labs](https://gitee.com/wincode/SpringBoot-Labs) | [![Gitee star](https://gitee.com/wincode/SpringBoot-Labs/badge/star.svg?theme=white)](https://gitee.com/zhijiantianya/win-cloud) [![GitHub stars](https://img.shields.io/github/stars/wincode/SpringBoot-Labs.svg?style=social&label=Stars)](https://github.com/wincode/SpringBoot-Labs) | 系统学习 Spring Boot & Cloud 专栏 | + +### 前端项目 + +| 项目 | Star | 简介 | +|----------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------| +| [win-ui-admin-vue3](https://gitee.com/wincode/win-ui-admin-vue3) | [![Gitee star](https://gitee.com/wincode/win-ui-admin-vue3/badge/star.svg?theme=white)](https://gitee.com/wincode/win-ui-admin-vue3) [![GitHub stars](https://img.shields.io/github/stars/wincode/win-ui-admin-vue3.svg?style=social&label=Stars)](https://github.com/wincode/win-ui-admin-vue3) | 基于 Vue3 + element-plus 实现的管理后台 | +| [win-ui-admin-vben](https://gitee.com/wincode/win-ui-admin-vben) | [![Gitee star](https://gitee.com/wincode/win-ui-admin-vben/badge/star.svg?theme=white)](https://gitee.com/wincode/win-ui-admin-vben) [![GitHub stars](https://img.shields.io/github/stars/wincode/win-ui-admin-vben.svg?style=social&label=Stars)](https://github.com/wincode/win-ui-admin-vben) | 基于 Vue3 + vben(ant-design-vue) 实现的管理后台 | +| [win-mall-uniapp](https://gitee.com/wincode/win-mall-uniapp) | [![Gitee star](https://gitee.com/wincode/win-mall-uniapp/badge/star.svg?theme=white)](https://gitee.com/wincode/win-mall-uniapp) [![GitHub stars](https://img.shields.io/github/stars/wincode/win-mall-uniapp.svg?style=social&label=Stars)](https://github.com/wincode/win-mall-uniapp) | 基于 uni-app 实现的商城小程序 | +| [win-ui-admin-vue2](https://gitee.com/wincode/win-ui-admin-vue2) | [![Gitee star](https://gitee.com/wincode/win-ui-admin-vue2/badge/star.svg?theme=white)](https://gitee.com/wincode/win-ui-admin-vue2) [![GitHub stars](https://img.shields.io/github/stars/wincode/win-ui-admin-vue2.svg?style=social&label=Stars)](https://github.com/wincode/win-ui-admin-vue2) | 基于 Vue2 + element-ui 实现的管理后台 | +| [win-ui-admin-uniapp](https://gitee.com/wincode/win-ui-admin-uniapp) | [![Gitee star](https://gitee.com/wincode/win-ui-admin-uniapp/badge/star.svg?theme=white)](https://gitee.com/wincode/win-ui-admin-uniapp) [![GitHub stars](https://img.shields.io/github/stars/wincode/win-ui-admin-uniapp.svg?style=social&label=Stars)](https://github.com/wincode/win-ui-admin-uniapp) | 基于 Vue2 + element-ui 实现的管理后台 | +| [win-ui-go-view](https://gitee.com/wincode/win-ui-go-view) | [![Gitee star](https://gitee.com/wincode/win-ui-go-view/badge/star.svg?theme=white)](https://gitee.com/wincode/win-ui-go-view) [![GitHub stars](https://img.shields.io/github/stars/wincode/win-ui-go-view.svg?style=social&label=Stars)](https://github.com/wincode/win-ui-go-view) | 基于 Vue3 + naive-ui 实现的大屏报表 | + +## 😎 开源协议 + +**为什么推荐使用本项目?** + +① 本项目采用比 Apache 2.0 更宽松的 [MIT License](https://gitee.com/zhijiantianya/ruoyi-vue-pro/blob/master/LICENSE) 开源协议,个人与企业可 100% 免费使用,不用保留类作者、Copyright 信息。 + +② 代码全部开源,不会像其他项目一样,只开源部分代码,让你无法了解整个项目的架构设计。[国产开源项目对比](https://www.yuque.com/xiatian-bsgny/lm0ec1/wqf8mn) + +![开源项目对比](/.image/common/project-vs.png) + +③ 代码整洁、架构整洁,遵循《阿里巴巴 Java 开发手册》规范,代码注释详细,57000 行 Java 代码,22000 行代码注释。 + +## 🤝 项目外包 + +我们也是接外包滴,如果你有项目想要外包,可以微信联系【**Aix9975**】。 + +团队包含专业的项目经理、架构师、前端工程师、后端工程师、测试工程师、运维工程师,可以提供全流程的外包服务。 + +项目可以是商城、SCRM 系统、OA 系统、物流系统、ERP 系统、CMS 系统、HIS 系统、支付系统、IM 聊天、微信公众号、微信小程序等等。 + +## 🐼 内置功能 + +系统内置多种多种业务功能,可以用于快速你的业务系统: + +![功能分层](/.image/common/ruoyi-vue-pro-biz.png) + +* 通用模块(必选):系统功能、基础设施 +* 通用模块(可选):工作流程、支付系统、数据报表、会员中心 +* 业务系统(按需):ERP 系统、CRM 系统、商城系统、微信公众号 + +> 友情提示:本项目基于 RuoYi-Vue 修改,**重构优化**后端的代码,**美化**前端的界面。 +> +> * 额外新增的功能,我们使用 🚀 标记。 +> * 重新实现的功能,我们使用 ⭐️ 标记。 + +🙂 所有功能,都通过 **单元测试** 保证高质量。 + +### 系统功能 + +| | 功能 | 描述 | +|-----|-------|---------------------------------| +| | 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置 | +| ⭐️ | 在线用户 | 当前系统中活跃用户状态监控,支持手动踢下线 | +| | 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 | +| | 菜单管理 | 配置系统菜单、操作权限、按钮权限标识等,本地缓存提供性能 | +| | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 | +| | 岗位管理 | 配置系统用户所属担任职务 | +| 🚀 | 租户管理 | 配置系统租户,支持 SaaS 场景下的多租户功能 | +| 🚀 | 租户套餐 | 配置租户套餐,自定每个租户的菜单、操作、按钮的权限 | +| | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 | +| 🚀 | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、腾讯云等主流短信平台 | +| 🚀 | 邮件管理 | 邮箱账号、邮件模版、邮件发送日志,支持所有邮件平台 | +| 🚀 | 站内信 | 系统内的消息通知,提供站内信模版、站内信消息 | +| 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 | +| ⭐️ | 登录日志 | 系统登录日志记录查询,包含登录异常 | +| 🚀 | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 | +| | 通知公告 | 系统通知公告信息发布维护 | +| 🚀 | 敏感词 | 配置系统敏感词,支持标签分组 | +| 🚀 | 应用管理 | 管理 SSO 单点登录的应用,支持多种 OAuth2 授权方式 | +| 🚀 | 地区管理 | 展示省份、城市、区镇等城市信息,支持 IP 对应城市 | + +![功能图](/.image/common/system-feature.png) + +### 工作流程 + +| | 功能 | 描述 | +|-----|-------|----------------------------------------| +| 🚀 | 流程模型 | 配置工作流的流程模型,支持文件导入与在线设计流程图,提供 7 种任务分配规则 | +| 🚀 | 流程表单 | 拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件 | +| 🚀 | 用户分组 | 自定义用户分组,可用于工作流的审批分组 | +| 🚀 | 我的流程 | 查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线 | +| 🚀 | 待办任务 | 查看自己【未】审批的工作任务,支持通过、不通过、转发、委派、退回等操作 | +| 🚀 | 已办任务 | 查看自己【已】审批的工作任务,未来会支持回退操作 | +| 🚀 | OA 请假 | 作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批 | + +![功能图](/.image/common/bpm-feature.png) + +### 支付系统 + +| | 功能 | 描述 | +|-----|------|---------------------------| +| 🚀 | 应用信息 | 配置商户的应用信息,对接支付宝、微信等多个支付渠道 | +| 🚀 | 支付订单 | 查看用户发起的支付宝、微信等的【支付】订单 | +| 🚀 | 退款订单 | 查看用户发起的支付宝、微信等的【退款】订单 | +| 🚀 | 回调通知 | 查看支付回调业务的【支付】【退款】的通知结果 | +| 🚀 | 接入示例 | 提供接入支付系统的【支付】【退款】的功能实战 | + +### 基础设施 + +| | 功能 | 描述 | +|----|-----------|----------------------------------------------| +| 🚀 | 代码生成 | 前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 | +| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 | +| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 | +| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 | +| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 | +| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 | +| 🚀 | 文件服务 | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等 | +| 🚀 | WebSocket | 提供 WebSocket 接入示例,支持一对一、一对多发送方式 | +| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 | +| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 | +| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 | +| 🚀 | 消息队列 | 基于 Redis 实现消息队列,Stream 提供集群消费,Pub/Sub 提供广播消费 | +| 🚀 | Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 | +| 🚀 | 链路追踪 | 接入 SkyWalking 组件,实现链路追踪 | +| 🚀 | 日志中心 | 接入 SkyWalking 组件,实现日志中心 | +| 🚀 | 服务保障 | 基于 Redis 实现分布式锁、幂等、限流功能,满足高并发场景 | +| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 | +| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 | + +![功能图](/.image/common/infra-feature.png) + +### 数据报表 + +| | 功能 | 描述 | +|-----|-------|--------------------| +| 🚀 | 报表设计器 | 支持数据报表、图形报表、打印设计等 | +| 🚀 | 大屏设计器 | 拖拽生成数据大屏,内置几十种图表组件 | + +### 微信公众号 + +| | 功能 | 描述 | +|-----|--------|-------------------------------| +| 🚀 | 账号管理 | 配置接入的微信公众号,可支持多个公众号 | +| 🚀 | 数据统计 | 统计公众号的用户增减、累计用户、消息概况、接口分析等数据 | +| 🚀 | 粉丝管理 | 查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作 | +| 🚀 | 消息管理 | 查看粉丝发送的消息列表,可主动回复粉丝消息 | +| 🚀 | 自动回复 | 自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复 | +| 🚀 | 标签管理 | 对公众号的标签进行创建、查询、修改、删除等操作 | +| 🚀 | 菜单管理 | 自定义公众号的菜单,也可以从公众号同步菜单 | +| 🚀 | 素材管理 | 管理公众号的图片、语音、视频等素材,支持在线播放语音、视频 | +| 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 | +| 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 | + +### 商城系统 + +![功能图](/.image/common/mall-feature.png) + +![功能图](/.image/common/mall-preview.png) + +演示地址: + +### 会员中心 + +| | 功能 | 描述 | +|-----|------|----------------------------------| +| 🚀 | 会员管理 | 会员是 C 端的消费者,该功能用于会员的搜索与管理 | +| 🚀 | 会员标签 | 对会员的标签进行创建、查询、修改、删除等操作 | +| 🚀 | 会员等级 | 对会员的等级、成长值进行管理,可用于订单折扣等会员权益 | +| 🚀 | 会员分组 | 对会员进行分组,用于用户画像、内容推送等运营手段 | +| 🚀 | 积分签到 | 回馈给签到、消费等行为的积分,会员可订单抵现、积分兑换等途径消耗 | + +### ERP 系统 + +![功能图](/.image/common/erp-feature.png) + +演示地址: + +### ERP 系统 + +![功能图](/.image/common/crm-feature.png) + +演示地址: + +## 🐨 技术栈 + +### 微服务 + +| 项目 | 说明 | +|--------------------------------------------------------------------------|--------------------| +| `win-dependencies` | Maven 依赖版本管理 | +| `win-framework` | Java 框架拓展 | +| `win-server` | 管理后台 + 用户 APP 的服务端 | +| `win-module-system` | 系统功能的 Module 模块 | +| `win-module-member` | 会员中心的 Module 模块 | +| `win-module-infra` | 基础设施的 Module 模块 | +| `win-module-bpm` | 工作流程的 Module 模块 | +| `win-module-pay` | 支付系统的 Module 模块 | +| `win-module-mall` | 商城系统的 Module 模块 | +| `win-module-mp` | 微信公众号的 Module 模块 | +| `win-module-report` | 大屏报表 Module 模块 | + +### 框架 + +| 框架 | 说明 | 版本 | 学习指南 | +|---------------------------------------------------------------------------------------------|------------------|-------------|---------------------------------------------------------------------| +| [Spring Cloud Alibaba](https://github.com/alibaba/spring-cloud-alibaba) | 微服务框架 | 2022.0.0.0 | [文档](https://github.com/YunaiV/SpringBoot-Labs) | +| [Nacos](https://github.com/alibaba/nacos) | 配置中心 & 注册中心 | 2.2.1 | [文档](https://www.iocoder.cn/categories/Nacos/?win) | +| [RocketMQ](https://github.com/apache/rocketmq) | 消息队列 | 4.9.4 | [文档](https://www.iocoder.cn/categories/RocketMQ/?win) | +| [Sentinel](https://github.com/alibaba/sentinel) | 服务保障 | 1.8.6 | [文档](https://www.iocoder.cn/categories/Sentinel/?win) | +| [XXL Job](https://github.com/xuxueli/xxl-job) | 定时任务 | 2.4.0 | [文档](https://www.iocoder.cn/XXL-JOB/good-collection/?win) | +| [Spring Cloud Gateway](https://github.com/spring-cloud/spring-cloud-gateway) | 服务网关 | 4.1.0 | [文档](https://www.iocoder.cn/categories/Spring-Cloud-Gateway/?win) | +| [Seata](https://github.com/seata/seata) | 分布式事务 | 1.6.1 | [文档](https://www.iocoder.cn/categories/Seata/?win) | +| [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 / 8.0+ | | +| [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.20 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?win) | +| [MyBatis Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.5.4.1 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?win) | +| [Dynamic Datasource](https://dynamic-datasource.com/) | 动态数据源 | 4.2.0 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?win) | +| [Redis](https://redis.io/) | key-value 数据库 | 5.0 / 6.0 | | +| [Redisson](https://github.com/redisson/redisson) | Redis 客户端 | 3.25.0 | [文档](http://www.iocoder.cn/Spring-Boot/Redis/?win) | +| [Spring MVC](https://github.com/spring-projects/spring-framework/tree/master/spring-webmvc) | MVC 框架 | 6.1.1 | [文档](http://www.iocoder.cn/SpringMVC/MVC/?win) | +| [Spring Security](https://github.com/spring-projects/spring-security) | Spring 安全框架 | 6.2.0 | [文档](http://www.iocoder.cn/Spring-Boot/Spring-Security/?win) | +| [Hibernate Validator](https://github.com/hibernate/hibernate-validator) | 参数校验组件 | 8.0.1 | [文档](http://www.iocoder.cn/Spring-Boot/Validation/?win) | +| [Flowable](https://github.com/flowable/flowable-engine) | 工作流引擎 | 7.0.0 | [文档](https://doc.iocoder.cn/bpm/) | +| [Knife4j](https://gitee.com/xiaoym/knife4j) | Swagger 增强 UI 实现 | 4.4.0 | [文档](http://www.iocoder.cn/Spring-Boot/Swagger/?win) | +| [SkyWalking](https://skywalking.apache.org/) | 分布式应用追踪系统 | 9.0.0 | [文档](http://www.iocoder.cn/Spring-Boot/SkyWalking/?win) | +| [Spring Boot Admin](https://github.com/codecentric/spring-boot-admin) | Spring Boot 监控平台 | 3.6.1 | [文档](http://www.iocoder.cn/Spring-Boot/Admin/?win) | +| [Jackson](https://github.com/FasterXML/jackson) | JSON 工具库 | 2.15.3 | | +| [MapStruct](https://mapstruct.org/) | Java Bean 转换 | 1.5.5.Final | [文档](http://www.iocoder.cn/Spring-Boot/MapStruct/?win) | +| [Lombok](https://projectlombok.org/) | 消除冗长的 Java 代码 | 1.18.30 | [文档](http://www.iocoder.cn/Spring-Boot/Lombok/?win) | +| [JUnit](https://junit.org/junit5/) | Java 单元测试框架 | 5.10.1 | - | +| [Mockito](https://github.com/mockito/mockito) | Java Mock 框架 | 5.7.0 | - | + +## 🐷 演示图 + +### 系统功能 + +| 模块 | biu | biu | biu | +|----------|-----------------------------|---------------------------|--------------------------| +| 登录 & 首页 | ![登录](/.image/登录.jpg) | ![首页](/.image/首页.jpg) | ![个人中心](/.image/个人中心.jpg) | +| 用户 & 应用 | ![用户管理](/.image/用户管理.jpg) | ![令牌管理](/.image/令牌管理.jpg) | ![应用管理](/.image/应用管理.jpg) | +| 租户 & 套餐 | ![租户管理](/.image/租户管理.jpg) | ![租户套餐](/.image/租户套餐.png) | - | +| 部门 & 岗位 | ![部门管理](/.image/部门管理.jpg) | ![岗位管理](/.image/岗位管理.jpg) | - | +| 菜单 & 角色 | ![菜单管理](/.image/菜单管理.jpg) | ![角色管理](/.image/角色管理.jpg) | - | +| 审计日志 | ![操作日志](/.image/操作日志.jpg) | ![登录日志](/.image/登录日志.jpg) | - | +| 短信 | ![短信渠道](/.image/短信渠道.jpg) | ![短信模板](/.image/短信模板.jpg) | ![短信日志](/.image/短信日志.jpg) | +| 字典 & 敏感词 | ![字典类型](/.image/字典类型.jpg) | ![字典数据](/.image/字典数据.jpg) | ![敏感词](/.image/敏感词.jpg) | +| 错误码 & 通知 | ![错误码管理](/.image/错误码管理.jpg) | ![通知公告](/.image/通知公告.jpg) | - | + +### 工作流程 + +| 模块 | biu | biu | biu | +|---------|---------------------------------|---------------------------------|---------------------------------| +| 流程模型 | ![流程模型-列表](/.image/流程模型-列表.jpg) | ![流程模型-设计](/.image/流程模型-设计.jpg) | ![流程模型-定义](/.image/流程模型-定义.jpg) | +| 表单 & 分组 | ![流程表单](/.image/流程表单.jpg) | ![用户分组](/.image/用户分组.jpg) | - | +| 我的流程 | ![我的流程-列表](/.image/我的流程-列表.jpg) | ![我的流程-发起](/.image/我的流程-发起.jpg) | ![我的流程-详情](/.image/我的流程-详情.jpg) | +| 待办 & 已办 | ![任务列表-审批](/.image/任务列表-审批.jpg) | ![任务列表-待办](/.image/任务列表-待办.jpg) | ![任务列表-已办](/.image/任务列表-已办.jpg) | +| OA 请假 | ![OA请假-列表](/.image/OA请假-列表.jpg) | ![OA请假-发起](/.image/OA请假-发起.jpg) | ![OA请假-详情](/.image/OA请假-详情.jpg) | + +### 基础设施 + +| 模块 | biu | biu | biu | +|---------------|-------------------------------|-----------------------------|---------------------------| +| 代码生成 | ![代码生成](/.image/代码生成.jpg) | ![生成效果](/.image/生成效果.jpg) | - | +| 文档 | ![系统接口](/.image/系统接口.jpg) | ![数据库文档](/.image/数据库文档.jpg) | - | +| 文件 & 配置 | ![文件配置](/.image/文件配置.jpg) | ![文件管理](/.image/文件管理2.jpg) | ![配置管理](/.image/配置管理.jpg) | +| 定时任务 | ![定时任务](/.image/定时任务.jpg) | ![任务日志](/.image/任务日志.jpg) | - | +| API 日志 | ![访问日志](/.image/访问日志.jpg) | ![错误日志](/.image/错误日志.jpg) | - | +| MySQL & Redis | ![MySQL](/.image/MySQL.jpg) | ![Redis](/.image/Redis.jpg) | - | +| 监控平台 | ![Java监控](/.image/Java监控.jpg) | ![链路追踪](/.image/链路追踪.jpg) | ![日志中心](/.image/日志中心.jpg) | + +### 支付系统 + +| 模块 | biu | biu | biu | +|---------|---------------------------|---------------------------------|---------------------------------| +| 商家 & 应用 | ![商户信息](/.image/商户信息.jpg) | ![应用信息-列表](/.image/应用信息-列表.jpg) | ![应用信息-编辑](/.image/应用信息-编辑.jpg) | +| 支付 & 退款 | ![支付订单](/.image/支付订单.jpg) | ![退款订单](/.image/退款订单.jpg) | --- | +### 数据报表 + +| 模块 | biu | biu | biu | +|-------|---------------------------------|---------------------------------|---------------------------------------| +| 报表设计器 | ![数据报表](/.image/报表设计器-数据报表.jpg) | ![图形报表](/.image/报表设计器-图形报表.jpg) | ![报表设计器-打印设计](/.image/报表设计器-打印设计.jpg) | +| 大屏设计器 | ![大屏列表](/.image/大屏设计器-列表.jpg) | ![大屏预览](/.image/大屏设计器-预览.jpg) | ![大屏编辑](/.image/大屏设计器-编辑.jpg) | + +### 移动端(管理后台) + +| biu | biu | biu | +|----------------------------------|----------------------------------|----------------------------------| +| ![](/.image/admin-uniapp/01.png) | ![](/.image/admin-uniapp/02.png) | ![](/.image/admin-uniapp/03.png) | +| ![](/.image/admin-uniapp/04.png) | ![](/.image/admin-uniapp/05.png) | ![](/.image/admin-uniapp/06.png) | +| ![](/.image/admin-uniapp/07.png) | ![](/.image/admin-uniapp/08.png) | ![](/.image/admin-uniapp/09.png) | + +目前已经实现登录、我的、工作台、编辑资料、头像修改、密码修改、常见问题、关于我们等基础功能。 diff --git a/lombok.config b/lombok.config new file mode 100644 index 0000000..a8e8ce6 --- /dev/null +++ b/lombok.config @@ -0,0 +1,4 @@ +config.stopBubbling = true +lombok.tostring.callsuper=CALL +lombok.equalsandhashcode.callsuper=CALL +lombok.accessors.chain=true diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..edf7025 --- /dev/null +++ b/pom.xml @@ -0,0 +1,149 @@ + + + 4.0.0 + com.win + win + ${revision} + pom + + win-dependencies + win-gateway + win-framework + + win-module-system + win-module-infra + win-module-mes + + win-module-bpm + + win-module-report + win-module-scp + + + + + + + ${project.artifactId} + 芋道项目基础脚手架 + https://github.com/YunaiV/ruoyi-vue-pro + + + 2.1.0-snapshot + + 17 + ${java.version} + ${java.version} + 3.2.2 + 3.11.0 + 1.5.0 + + 1.18.30 + 3.2.0 + 1.5.5.Final + UTF-8 + + + + + + com.win + win-dependencies + ${revision} + pom + import + + + + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + + + org.springframework.boot + spring-boot-configuration-processor + ${spring.boot.version} + + + org.projectlombok + lombok + ${lombok.version} + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + + + + false + + -parameters + + + + + + + + + + org.codehaus.mojo + flatten-maven-plugin + ${flatten-maven-plugin.version} + + resolveCiFriendliesOnly + true + + + + + flatten + + flatten + process-resources + + + + clean + + flatten.clean + clean + + + + + + + + + + huaweicloud + huawei + https://mirrors.huaweicloud.com/repository/maven/ + + + aliyunmaven + aliyun + https://maven.aliyun.com/repository/public + + + + diff --git a/script/docker/docker-compose.yml b/script/docker/docker-compose.yml new file mode 100644 index 0000000..97846df --- /dev/null +++ b/script/docker/docker-compose.yml @@ -0,0 +1,162 @@ +version: '3' +services: + win-gateway: + image: win-gateway + container_name: win-gateway + environment: + - TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间) + - JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking + - SW_AGENT_NAME=win-gateway + - SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/** + - SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址 + - SPRING_PROFILES_ACTIVE=test # 指定程序运行环境 + - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址 + - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间 + - SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址 + - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间 + volumes: + - /docker/win-cloud/logs:/root/logs/ + - /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent + restart: always + network_mode: host # 以主机网络环境运行 + win-system: + image: win-module-system-biz + container_name: win-system + environment: + - TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间) + - JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking + - SW_AGENT_NAME=win-gateway + - SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/** + - SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址 + - SPRING_PROFILES_ACTIVE=test # 指定程序运行环境 + - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址 + - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间 + - SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址 + - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间 + volumes: + - /docker/win-cloud/logs:/root/logs/ + - /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent + healthcheck: + test: [ "CMD","curl","-f","http://localhost:48081" ] + interval: 30s + timeout: 10s + retries: 5 + start_period: 60s + restart: always + network_mode: host + win-infra: + image: win-module-infra-biz + container_name: win-infra + environment: + - TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间) + - JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking + - SW_AGENT_NAME=win-gateway + - SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/** + - SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址 + - SPRING_PROFILES_ACTIVE=test # 指定程序运行环境 + - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址 + - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间 + - SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址 + - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间 + volumes: + - /docker/win-cloud/logs:/root/logs/ + - /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent + restart: always + network_mode: host + healthcheck: + test: [ "CMD","curl","-f","http://localhost:48082" ] + interval: 30s + timeout: 10s + retries: 5 + start_period: 60s + depends_on: + win-system: + condition: service_healthy + win-report: + image: win-module-report-biz + container_name: win-report + environment: + - TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间) + - JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking + - SW_AGENT_NAME=win-gateway + - SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/** + - SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址 + - SPRING_PROFILES_ACTIVE=test # 指定程序运行环境 + - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址 + - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间 + - SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址 + - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间 + volumes: + - /docker/win-cloud/logs:/root/logs/ + - /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent + restart: always + network_mode: host + depends_on: + win-infra: + condition: service_healthy + win-bpm: + image: win-module-bpm-biz + container_name: win-bpm + environment: + - TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间) + - JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking + - SW_AGENT_NAME=win-gateway + - SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/** + - SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址 + - SPRING_PROFILES_ACTIVE=test # 指定程序运行环境 + - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址 + - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间 + - SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址 + - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间 + volumes: + - /docker/win-cloud/logs:/root/logs/ + - /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent + restart: always + network_mode: host + depends_on: + win-infra: + condition: service_healthy + win-pay: + image: win-module-pay-biz + container_name: win-pay + environment: + - TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间) + - JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking + - SW_AGENT_NAME=win-gateway + - SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/** + - SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址 + - SPRING_PROFILES_ACTIVE=test # 指定程序运行环境 + - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址 + - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间 + - SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址 + - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间 + volumes: + - /docker/win-cloud/logs:/root/logs/ + - /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent + restart: always + network_mode: host + depends_on: + win-infra: + condition: service_healthy + win-mp: + image: win-module-mp-biz + container_name: win-mp + environment: + - TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间) + - JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking + - SW_AGENT_NAME=win-gateway + - SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/** + - SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址 + - SPRING_PROFILES_ACTIVE=test # 指定程序运行环境 + - SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址 + - SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间 + - SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址 + - SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间 + volumes: + - /docker/win-cloud/logs:/root/logs/ + - /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent + restart: always + network_mode: host + depends_on: + win-infra: + condition: service_healthy \ No newline at end of file diff --git a/script/idea/http-client.env.json b/script/idea/http-client.env.json new file mode 100644 index 0000000..33c15fe --- /dev/null +++ b/script/idea/http-client.env.json @@ -0,0 +1,28 @@ +{ + "local": { + "baseUrl": "http://127.0.0.1:48080/admin-api", + "systemBaseUrl": "http://127.0.0.1:48081/admin-api", + "infaBaseUrl": "http://127.0.0.1:48082/admin-api", + + "token": "test1", + "adminTenentId": "1", + "tag": "${HOSTNAME}", + + "appApi": "http://127.0.0.1:48080/app-api", + "appToken": "test1", + "appTenentId": "1" + }, + "gateway": { + "baseUrl": "http://127.0.0.1:48080/admin-api", + "systemBaseUrl": "http://127.0.0.1:48080/admin-api", + "infaBaseUrl": "http://127.0.0.1:48080/admin-api", + + "token": "test1", + "adminTenentId": "1", + "tag": "${HOSTNAME}", + + "appApi": "http://127.0.0.1:8888/app-api", + "appToken": "test1", + "appTenentId": "1" + } +} diff --git a/sql/db2/README.md b/sql/db2/README.md new file mode 100644 index 0000000..5b60d1e --- /dev/null +++ b/sql/db2/README.md @@ -0,0 +1,3 @@ +暂未适配 IBM DB2 数据库,如果你有需要,可以微信联系 wangwenbin-server 一起建设。 + +你需要把表结构与数据导入到 DM 数据库,我来测试与适配代码。 diff --git a/sql/dm/flowable-patch/src/main/java/liquibase/database/core/DmDatabase.java b/sql/dm/flowable-patch/src/main/java/liquibase/database/core/DmDatabase.java new file mode 100644 index 0000000..fbc4c6b --- /dev/null +++ b/sql/dm/flowable-patch/src/main/java/liquibase/database/core/DmDatabase.java @@ -0,0 +1,598 @@ +package liquibase.database.core; + +import java.lang.reflect.Method; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import liquibase.CatalogAndSchema; +import liquibase.Scope; +import liquibase.database.AbstractJdbcDatabase; +import liquibase.database.DatabaseConnection; +import liquibase.database.OfflineConnection; +import liquibase.database.jvm.JdbcConnection; +import liquibase.exception.DatabaseException; +import liquibase.exception.UnexpectedLiquibaseException; +import liquibase.exception.ValidationErrors; +import liquibase.executor.ExecutorService; +import liquibase.statement.DatabaseFunction; +import liquibase.statement.SequenceCurrentValueFunction; +import liquibase.statement.SequenceNextValueFunction; +import liquibase.statement.core.RawCallStatement; +import liquibase.statement.core.RawSqlStatement; +import liquibase.structure.DatabaseObject; +import liquibase.structure.core.Catalog; +import liquibase.structure.core.Index; +import liquibase.structure.core.PrimaryKey; +import liquibase.structure.core.Schema; +import liquibase.util.JdbcUtils; +import liquibase.util.StringUtil; + +public class DmDatabase extends AbstractJdbcDatabase { + private static final String PRODUCT_NAME = "DM DBMS"; + + @Override + protected String getDefaultDatabaseProductName() { + return PRODUCT_NAME; + } + + /** + * Is this AbstractDatabase subclass the correct one to use for the given connection. + * + * @param conn + */ + @Override + public boolean isCorrectDatabaseImplementation(DatabaseConnection conn) throws DatabaseException { + return PRODUCT_NAME.equalsIgnoreCase(conn.getDatabaseProductName()); + } + + /** + * If this database understands the given url, return the default driver class name. Otherwise return null. + * + * @param url + */ + @Override + public String getDefaultDriver(String url) { + if(url.startsWith("jdbc:dm")) { + return "dm.jdbc.driver.DmDriver"; + } + + return null; + } + + /** + * Returns an all-lower-case short name of the product. Used for end-user selecting of database type + * such as the DBMS precondition. + */ + @Override + public String getShortName() { + return "dm"; + } + + @Override + public Integer getDefaultPort() { + return 5236; + } + + /** + * Returns whether this database support initially deferrable columns. + */ + @Override + public boolean supportsInitiallyDeferrableColumns() { + return true; + } + + @Override + public boolean supportsTablespaces() { + return true; + } + + @Override + public int getPriority() { + return PRIORITY_DEFAULT; + } + + private static final Pattern PROXY_USER = Pattern.compile(".*(?:thin|oci)\\:(.+)/@.*"); + + protected final int SHORT_IDENTIFIERS_LENGTH = 30; + protected final int LONG_IDENTIFIERS_LEGNTH = 128; + public static final int ORACLE_12C_MAJOR_VERSION = 12; + + private Set reservedWords = new HashSet<>(); + private Set userDefinedTypes; + private Map savedSessionNlsSettings; + + private Boolean canAccessDbaRecycleBin; + private Integer databaseMajorVersion; + private Integer databaseMinorVersion; + + /** + * Default constructor for an object that represents the Oracle Database DBMS. + */ + public DmDatabase() { + super.unquotedObjectsAreUppercased = true; + //noinspection HardCodedStringLiteral + super.setCurrentDateTimeFunction("SYSTIMESTAMP"); + // Setting list of Oracle's native functions + //noinspection HardCodedStringLiteral + dateFunctions.add(new DatabaseFunction("SYSDATE")); + //noinspection HardCodedStringLiteral + dateFunctions.add(new DatabaseFunction("SYSTIMESTAMP")); + //noinspection HardCodedStringLiteral + dateFunctions.add(new DatabaseFunction("CURRENT_TIMESTAMP")); + //noinspection HardCodedStringLiteral + super.sequenceNextValueFunction = "%s.nextval"; + //noinspection HardCodedStringLiteral + super.sequenceCurrentValueFunction = "%s.currval"; + } + + private void tryProxySession(final String url, final Connection con) { + Matcher m = PROXY_USER.matcher(url); + if (m.matches()) { + Properties props = new Properties(); + props.put("PROXY_USER_NAME", m.group(1)); + try { + Method method = con.getClass().getMethod("openProxySession", int.class, Properties.class); + method.setAccessible(true); + method.invoke(con, 1, props); + } catch (Exception e) { + Scope.getCurrentScope().getLog(getClass()).info("Could not open proxy session on OracleDatabase: " + e.getCause().getMessage()); + } + } + } + + @Override + public int getDatabaseMajorVersion() throws DatabaseException { + if (databaseMajorVersion == null) { + return super.getDatabaseMajorVersion(); + } else { + return databaseMajorVersion; + } + } + + @Override + public int getDatabaseMinorVersion() throws DatabaseException { + if (databaseMinorVersion == null) { + return super.getDatabaseMinorVersion(); + } else { + return databaseMinorVersion; + } + } + + @Override + public String getJdbcCatalogName(CatalogAndSchema schema) { + return null; + } + + @Override + public String getJdbcSchemaName(CatalogAndSchema schema) { + return correctObjectName((schema.getCatalogName() == null) ? schema.getSchemaName() : schema.getCatalogName(), Schema.class); + } + + @Override + protected String getAutoIncrementClause(final String generationType, final Boolean defaultOnNull) { + if (StringUtil.isEmpty(generationType)) { + return super.getAutoIncrementClause(); + } + + String autoIncrementClause = "GENERATED %s AS IDENTITY"; // %s -- [ ALWAYS | BY DEFAULT [ ON NULL ] ] + String generationStrategy = generationType; + if (Boolean.TRUE.equals(defaultOnNull) && generationType.toUpperCase().equals("BY DEFAULT")) { + generationStrategy += " ON NULL"; + } + return String.format(autoIncrementClause, generationStrategy); + } + + @Override + public String generatePrimaryKeyName(String tableName) { + if (tableName.length() > 27) { + //noinspection HardCodedStringLiteral + return "PK_" + tableName.toUpperCase(Locale.US).substring(0, 27); + } else { + //noinspection HardCodedStringLiteral + return "PK_" + tableName.toUpperCase(Locale.US); + } + } + + @Override + public boolean isReservedWord(String objectName) { + return reservedWords.contains(objectName.toUpperCase()); + } + + @Override + public boolean supportsSequences() { + return true; + } + + /** + * Oracle supports catalogs in liquibase terms + * + * @return false + */ + @Override + public boolean supportsSchemas() { + return false; + } + + @Override + protected String getConnectionCatalogName() throws DatabaseException { + if (getConnection() instanceof OfflineConnection) { + return getConnection().getCatalog(); + } + try { + //noinspection HardCodedStringLiteral + return Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", this).queryForObject(new RawCallStatement("select sys_context( 'userenv', 'current_schema' ) from dual"), String.class); + } catch (Exception e) { + //noinspection HardCodedStringLiteral + Scope.getCurrentScope().getLog(getClass()).info("Error getting default schema", e); + } + return null; + } + + @Override + public String getDefaultCatalogName() {//NOPMD + return (super.getDefaultCatalogName() == null) ? null : super.getDefaultCatalogName().toUpperCase(Locale.US); + } + + /** + *

    Returns an Oracle date literal with the same value as a string formatted using ISO 8601.

    + * + *

    Convert an ISO8601 date string to one of the following results: + * to_date('1995-05-23', 'YYYY-MM-DD') + * to_date('1995-05-23 09:23:59', 'YYYY-MM-DD HH24:MI:SS')

    + *

    + * Implementation restriction:
    + * Currently, only the following subsets of ISO8601 are supported:
    + *

      + *
    • YYYY-MM-DD
    • + *
    • YYYY-MM-DDThh:mm:ss
    • + *
    + */ + @Override + public String getDateLiteral(String isoDate) { + String normalLiteral = super.getDateLiteral(isoDate); + + if (isDateOnly(isoDate)) { + return "TO_DATE(" + normalLiteral + ", 'YYYY-MM-DD')"; + } else if (isTimeOnly(isoDate)) { + return "TO_DATE(" + normalLiteral + ", 'HH24:MI:SS')"; + } else if (isTimestamp(isoDate)) { + return "TO_TIMESTAMP(" + normalLiteral + ", 'YYYY-MM-DD HH24:MI:SS.FF')"; + } else if (isDateTime(isoDate)) { + int seppos = normalLiteral.lastIndexOf('.'); + if (seppos != -1) { + normalLiteral = normalLiteral.substring(0, seppos) + "'"; + } + return "TO_DATE(" + normalLiteral + ", 'YYYY-MM-DD HH24:MI:SS')"; + } + return "UNSUPPORTED:" + isoDate; + } + + @Override + public boolean isSystemObject(DatabaseObject example) { + if (example == null) { + return false; + } + + if (this.isLiquibaseObject(example)) { + return false; + } + + if (example instanceof Schema) { + //noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral + if ("SYSTEM".equals(example.getName()) || "SYS".equals(example.getName()) || "CTXSYS".equals(example.getName()) || "XDB".equals(example.getName())) { + return true; + } + //noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral + if ("SYSTEM".equals(example.getSchema().getCatalogName()) || "SYS".equals(example.getSchema().getCatalogName()) || "CTXSYS".equals(example.getSchema().getCatalogName()) || "XDB".equals(example.getSchema().getCatalogName())) { + return true; + } + } else if (isSystemObject(example.getSchema())) { + return true; + } + if (example instanceof Catalog) { + //noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral + if (("SYSTEM".equals(example.getName()) || "SYS".equals(example.getName()) || "CTXSYS".equals(example.getName()) || "XDB".equals(example.getName()))) { + return true; + } + } else if (example.getName() != null) { + //noinspection HardCodedStringLiteral + if (example.getName().startsWith("BIN$")) { //oracle deleted table + boolean filteredInOriginalQuery = this.canAccessDbaRecycleBin(); + if (!filteredInOriginalQuery) { + filteredInOriginalQuery = StringUtil.trimToEmpty(example.getSchema().getName()).equalsIgnoreCase(this.getConnection().getConnectionUserName()); + } + + if (filteredInOriginalQuery) { + return !((example instanceof PrimaryKey) || (example instanceof Index) || (example instanceof + liquibase.statement.UniqueConstraint)); + } else { + return true; + } + } else //noinspection HardCodedStringLiteral + if (example.getName().startsWith("AQ$")) { //oracle AQ tables + return true; + } else //noinspection HardCodedStringLiteral + if (example.getName().startsWith("DR$")) { //oracle index tables + return true; + } else //noinspection HardCodedStringLiteral + if (example.getName().startsWith("SYS_IOT_OVER")) { //oracle system table + return true; + } else //noinspection HardCodedStringLiteral,HardCodedStringLiteral + if ((example.getName().startsWith("MDRT_") || example.getName().startsWith("MDRS_")) && example.getName().endsWith("$")) { + // CORE-1768 - Oracle creates these for spatial indices and will remove them when the index is removed. + return true; + } else //noinspection HardCodedStringLiteral + if (example.getName().startsWith("MLOG$_")) { //Created by materliaized view logs for every table that is part of a materialized view. Not available for DDL operations. + return true; + } else //noinspection HardCodedStringLiteral + if (example.getName().startsWith("RUPD$_")) { //Created by materialized view log tables using primary keys. Not available for DDL operations. + return true; + } else //noinspection HardCodedStringLiteral + if (example.getName().startsWith("WM$_")) { //Workspace Manager backup tables. + return true; + } else //noinspection HardCodedStringLiteral + if ("CREATE$JAVA$LOB$TABLE".equals(example.getName())) { //This table contains the name of the Java object, the date it was loaded, and has a BLOB column to store the Java object. + return true; + } else //noinspection HardCodedStringLiteral + if ("JAVA$CLASS$MD5$TABLE".equals(example.getName())) { //This is a hash table that tracks the loading of Java objects into a schema. + return true; + } else //noinspection HardCodedStringLiteral + if (example.getName().startsWith("ISEQ$$_")) { //System-generated sequence + return true; + } else //noinspection HardCodedStringLiteral + if (example.getName().startsWith("USLOG$")) { //for update materialized view + return true; + } else if (example.getName().startsWith("SYS_FBA")) { //for Flashback tables + return true; + } + } + + return super.isSystemObject(example); + } + + @Override + public boolean supportsAutoIncrement() { + // Oracle supports Identity beginning with version 12c + boolean isAutoIncrementSupported = false; + + try { + if (getDatabaseMajorVersion() >= 12) { + isAutoIncrementSupported = true; + } + + // Returning true will generate create table command with 'IDENTITY' clause, example: + // CREATE TABLE AutoIncTest (IDPrimaryKey NUMBER(19) GENERATED BY DEFAULT AS IDENTITY NOT NULL, TypeID NUMBER(3) NOT NULL, Description NVARCHAR2(50), CONSTRAINT PK_AutoIncTest PRIMARY KEY (IDPrimaryKey)); + + // While returning false will continue to generate create table command without 'IDENTITY' clause, example: + // CREATE TABLE AutoIncTest (IDPrimaryKey NUMBER(19) NOT NULL, TypeID NUMBER(3) NOT NULL, Description NVARCHAR2(50), CONSTRAINT PK_AutoIncTest PRIMARY KEY (IDPrimaryKey)); + + } catch (DatabaseException ex) { + isAutoIncrementSupported = false; + } + + return isAutoIncrementSupported; + } + + +// public Set findUniqueConstraints(String schema) throws DatabaseException { +// Set returnSet = new HashSet(); +// +// List maps = new Executor(this).queryForList(new RawSqlStatement("SELECT UC.CONSTRAINT_NAME, UCC.TABLE_NAME, UCC.COLUMN_NAME FROM USER_CONSTRAINTS UC, USER_CONS_COLUMNS UCC WHERE UC.CONSTRAINT_NAME=UCC.CONSTRAINT_NAME AND CONSTRAINT_TYPE='U' ORDER BY UC.CONSTRAINT_NAME")); +// +// UniqueConstraint constraint = null; +// for (Map map : maps) { +// if (constraint == null || !constraint.getName().equals(constraint.getName())) { +// returnSet.add(constraint); +// Table table = new Table((String) map.get("TABLE_NAME")); +// constraint = new UniqueConstraint(map.get("CONSTRAINT_NAME").toString(), table); +// } +// } +// if (constraint != null) { +// returnSet.add(constraint); +// } +// +// return returnSet; +// } + + @Override + public boolean supportsRestrictForeignKeys() { + return false; + } + + @Override + public int getDataTypeMaxParameters(String dataTypeName) { + //noinspection HardCodedStringLiteral + if ("BINARY_FLOAT".equals(dataTypeName.toUpperCase())) { + return 0; + } + //noinspection HardCodedStringLiteral + if ("BINARY_DOUBLE".equals(dataTypeName.toUpperCase())) { + return 0; + } + return super.getDataTypeMaxParameters(dataTypeName); + } + + public String getSystemTableWhereClause(String tableNameColumn) { + List clauses = new ArrayList(Arrays.asList("BIN$", + "AQ$", + "DR$", + "SYS_IOT_OVER", + "MLOG$_", + "RUPD$_", + "WM$_", + "ISEQ$$_", + "USLOG$", + "SYS_FBA")); + + for (int i = 0;i getUserDefinedTypes() { + if (userDefinedTypes == null) { + userDefinedTypes = new HashSet<>(); + if ((getConnection() != null) && !(getConnection() instanceof OfflineConnection)) { + try { + try { + //noinspection HardCodedStringLiteral + userDefinedTypes.addAll(Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", this).queryForList(new RawSqlStatement("SELECT DISTINCT TYPE_NAME FROM ALL_TYPES"), String.class)); + } catch (DatabaseException e) { //fall back to USER_TYPES if the user cannot see ALL_TYPES + //noinspection HardCodedStringLiteral + userDefinedTypes.addAll(Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", this).queryForList(new RawSqlStatement("SELECT TYPE_NAME FROM USER_TYPES"), String.class)); + } + } catch (DatabaseException e) { + //ignore error + } + } + } + + return userDefinedTypes; + } + + @Override + public String generateDatabaseFunctionValue(DatabaseFunction databaseFunction) { + //noinspection HardCodedStringLiteral + if ((databaseFunction != null) && "current_timestamp".equalsIgnoreCase(databaseFunction.toString())) { + return databaseFunction.toString(); + } + if ((databaseFunction instanceof SequenceNextValueFunction) || (databaseFunction instanceof + SequenceCurrentValueFunction)) { + String quotedSeq = super.generateDatabaseFunctionValue(databaseFunction); + // replace "myschema.my_seq".nextval with "myschema"."my_seq".nextval + return quotedSeq.replaceFirst("\"([^\\.\"]+)\\.([^\\.\"]+)\"", "\"$1\".\"$2\""); + + } + + return super.generateDatabaseFunctionValue(databaseFunction); + } + + @Override + public ValidationErrors validate() { + ValidationErrors errors = super.validate(); + DatabaseConnection connection = getConnection(); + if ((connection == null) || (connection instanceof OfflineConnection)) { + //noinspection HardCodedStringLiteral + Scope.getCurrentScope().getLog(getClass()).info("Cannot validate offline database"); + return errors; + } + + if (!canAccessDbaRecycleBin()) { + errors.addWarning(getDbaRecycleBinWarning()); + } + + return errors; + + } + + public String getDbaRecycleBinWarning() { + //noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral, + // HardCodedStringLiteral + //noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral + return "Liquibase needs to access the DBA_RECYCLEBIN table so we can automatically handle the case where " + + "constraints are deleted and restored. Since Oracle doesn't properly restore the original table names " + + "referenced in the constraint, we use the information from the DBA_RECYCLEBIN to automatically correct this" + + " issue.\n" + + "\n" + + "The user you used to connect to the database (" + getConnection().getConnectionUserName() + + ") needs to have \"SELECT ON SYS.DBA_RECYCLEBIN\" permissions set before we can perform this operation. " + + "Please run the following SQL to set the appropriate permissions, and try running the command again.\n" + + "\n" + + " GRANT SELECT ON SYS.DBA_RECYCLEBIN TO " + getConnection().getConnectionUserName() + ";"; + } + + public boolean canAccessDbaRecycleBin() { + if (canAccessDbaRecycleBin == null) { + DatabaseConnection connection = getConnection(); + if ((connection == null) || (connection instanceof OfflineConnection)) { + return false; + } + + Statement statement = null; + try { + statement = ((JdbcConnection) connection).createStatement(); + @SuppressWarnings("HardCodedStringLiteral") ResultSet resultSet = statement.executeQuery("select 1 from dba_recyclebin where 0=1"); + resultSet.close(); //don't need to do anything with the result set, just make sure statement ran. + this.canAccessDbaRecycleBin = true; + } catch (Exception e) { + //noinspection HardCodedStringLiteral + if ((e instanceof SQLException) && e.getMessage().startsWith("ORA-00942")) { //ORA-00942: table or view does not exist + this.canAccessDbaRecycleBin = false; + } else { + //noinspection HardCodedStringLiteral + Scope.getCurrentScope().getLog(getClass()).warning("Cannot check dba_recyclebin access", e); + this.canAccessDbaRecycleBin = false; + } + } finally { + JdbcUtils.close(null, statement); + } + } + + return canAccessDbaRecycleBin; + } + + @Override + public boolean supportsNotNullConstraintNames() { + return true; + } + + /** + * Tests if the given String would be a valid identifier in Oracle DBMS. In Oracle, a valid identifier has + * the following form (case-insensitive comparison): + * 1st character: A-Z + * 2..n characters: A-Z0-9$_# + * The maximum length of an identifier differs by Oracle version and object type. + */ + public boolean isValidOracleIdentifier(String identifier, Class type) { + if ((identifier == null) || (identifier.length() < 1)) + return false; + + if (!identifier.matches("^(i?)[A-Z][A-Z0-9\\$\\_\\#]*$")) + return false; + + /* + * @todo It seems we currently do not have a class for tablespace identifiers, and all other classes + * we do know seem to be supported as 12cR2 long identifiers, so: + */ + return (identifier.length() <= LONG_IDENTIFIERS_LEGNTH); + } + + /** + * Returns the maximum number of bytes (NOT: characters) for an identifier. For Oracle <=12c Release 20, this + * is 30 bytes, and starting from 12cR2, up to 128 (except for tablespaces, PDB names and some other rather rare + * object types). + * + * @return the maximum length of an object identifier, in bytes + */ + public int getIdentifierMaximumLength() { + try { + if (getDatabaseMajorVersion() < ORACLE_12C_MAJOR_VERSION) { + return SHORT_IDENTIFIERS_LENGTH; + } else if ((getDatabaseMajorVersion() == ORACLE_12C_MAJOR_VERSION) && (getDatabaseMinorVersion() <= 1)) { + return SHORT_IDENTIFIERS_LENGTH; + } else { + return LONG_IDENTIFIERS_LEGNTH; + } + } catch (DatabaseException ex) { + throw new UnexpectedLiquibaseException("Cannot determine the Oracle database version number", ex); + } + + } +} diff --git a/sql/dm/flowable-patch/src/main/java/liquibase/datatype/core/BooleanType.java b/sql/dm/flowable-patch/src/main/java/liquibase/datatype/core/BooleanType.java new file mode 100644 index 0000000..cda2492 --- /dev/null +++ b/sql/dm/flowable-patch/src/main/java/liquibase/datatype/core/BooleanType.java @@ -0,0 +1,165 @@ +package liquibase.datatype.core; + +import liquibase.change.core.LoadDataChange; +import liquibase.database.Database; +import liquibase.database.core.*; +import liquibase.datatype.DataTypeInfo; +import liquibase.datatype.DatabaseDataType; +import liquibase.datatype.LiquibaseDataType; +import liquibase.exception.UnexpectedLiquibaseException; +import liquibase.statement.DatabaseFunction; +import liquibase.util.StringUtil; + +import java.util.Locale; +import java.util.regex.Pattern; + +@DataTypeInfo(name = "boolean", aliases = {"java.sql.Types.BOOLEAN", "java.lang.Boolean", "bit", "bool"}, minParameters = 0, maxParameters = 0, priority = LiquibaseDataType.PRIORITY_DEFAULT) +public class BooleanType extends LiquibaseDataType { + + @Override + public DatabaseDataType toDatabaseDataType(Database database) { + String originalDefinition = StringUtil.trimToEmpty(getRawDefinition()); + if ((database instanceof Firebird3Database)) { + return new DatabaseDataType("BOOLEAN"); + } + + if ((database instanceof Db2zDatabase) || (database instanceof FirebirdDatabase)) { + return new DatabaseDataType("SMALLINT"); + } else if (database instanceof MSSQLDatabase) { + return new DatabaseDataType(database.escapeDataTypeName("bit")); + } else if (database instanceof MySQLDatabase) { + if (originalDefinition.toLowerCase(Locale.US).startsWith("bit")) { + return new DatabaseDataType("BIT", getParameters()); + } + return new DatabaseDataType("BIT", 1); + } else if (database instanceof OracleDatabase) { + return new DatabaseDataType("NUMBER", 1); + } else if ((database instanceof SybaseASADatabase) || (database instanceof SybaseDatabase)) { + return new DatabaseDataType("BIT"); + } else if (database instanceof DerbyDatabase) { + if (((DerbyDatabase) database).supportsBooleanDataType()) { + return new DatabaseDataType("BOOLEAN"); + } else { + return new DatabaseDataType("SMALLINT"); + } + } else if (database instanceof DB2Database) { + if (((DB2Database) database).supportsBooleanDataType()) + return new DatabaseDataType("BOOLEAN"); + else + return new DatabaseDataType("SMALLINT"); + } else if (database instanceof HsqlDatabase) { + return new DatabaseDataType("BOOLEAN"); + } else if (database instanceof PostgresDatabase) { + if (originalDefinition.toLowerCase(Locale.US).startsWith("bit")) { + return new DatabaseDataType("BIT", getParameters()); + } + } else if (database instanceof DmDatabase) { // dhb52: DM Support + return new DatabaseDataType("bit"); + } + + return super.toDatabaseDataType(database); + } + + @Override + public String objectToSql(Object value, Database database) { + if ((value == null) || "null".equals(value.toString().toLowerCase(Locale.US))) { + return null; + } + + String returnValue; + if (value instanceof String) { + value = ((String) value).replaceAll("'", ""); + if ("true".equals(((String) value).toLowerCase(Locale.US)) || "1".equals(value) || "b'1'".equals(((String) value).toLowerCase(Locale.US)) || "t".equals(((String) value).toLowerCase(Locale.US)) || ((String) value).toLowerCase(Locale.US).equals(this.getTrueBooleanValue(database).toLowerCase(Locale.US))) { + returnValue = this.getTrueBooleanValue(database); + } else if ("false".equals(((String) value).toLowerCase(Locale.US)) || "0".equals(value) || "b'0'".equals( + ((String) value).toLowerCase(Locale.US)) || "f".equals(((String) value).toLowerCase(Locale.US)) || ((String) value).toLowerCase(Locale.US).equals(this.getFalseBooleanValue(database).toLowerCase(Locale.US))) { + returnValue = this.getFalseBooleanValue(database); + } else if (database instanceof PostgresDatabase && Pattern.matches("b?([01])\\1*(::bit|::\"bit\")?", (String) value)) { + returnValue = "b'" + + value.toString() + .replace("b", "") + .replace("\"", "") + .replace("::it", "") + + "'::\"bit\""; + } else { + throw new UnexpectedLiquibaseException("Unknown boolean value: " + value); + } + } else if (value instanceof Long) { + if (Long.valueOf(1).equals(value)) { + returnValue = this.getTrueBooleanValue(database); + } else { + returnValue = this.getFalseBooleanValue(database); + } + } else if (value instanceof Number) { + if (value.equals(1) || "1".equals(value.toString()) || "1.0".equals(value.toString())) { + returnValue = this.getTrueBooleanValue(database); + } else { + returnValue = this.getFalseBooleanValue(database); + } + } else if (value instanceof DatabaseFunction) { + return value.toString(); + } else if (value instanceof Boolean) { + if (((Boolean) value)) { + returnValue = this.getTrueBooleanValue(database); + } else { + returnValue = this.getFalseBooleanValue(database); + } + } else { + throw new UnexpectedLiquibaseException("Cannot convert type " + value.getClass() + " to a boolean value"); + } + + return returnValue; + } + + protected boolean isNumericBoolean(Database database) { + if (database instanceof Firebird3Database) { + return false; + } + if (database instanceof DerbyDatabase) { + return !((DerbyDatabase) database).supportsBooleanDataType(); + } else if (database instanceof DB2Database) { + return !((DB2Database) database).supportsBooleanDataType(); + } + return (database instanceof Db2zDatabase) + || (database instanceof FirebirdDatabase) + || (database instanceof MSSQLDatabase) + || (database instanceof MySQLDatabase) + || (database instanceof OracleDatabase) + || (database instanceof SQLiteDatabase) + || (database instanceof SybaseASADatabase) + || (database instanceof SybaseDatabase) + || (database instanceof DmDatabase); // dhb52: DM Support + } + + /** + * The database-specific value to use for "false" "boolean" columns. + */ + public String getFalseBooleanValue(Database database) { + if (isNumericBoolean(database)) { + return "0"; + } + if (database instanceof InformixDatabase) { + return "'f'"; + } + return "FALSE"; + } + + /** + * The database-specific value to use for "true" "boolean" columns. + */ + public String getTrueBooleanValue(Database database) { + if (isNumericBoolean(database)) { + return "1"; + } + if (database instanceof InformixDatabase) { + return "'t'"; + } + return "TRUE"; + } + + @Override + public LoadDataChange.LOAD_DATA_TYPE getLoadTypeName() { + return LoadDataChange.LOAD_DATA_TYPE.BOOLEAN; + } + +} diff --git a/sql/dm/flowable-patch/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfiguration.java b/sql/dm/flowable-patch/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfiguration.java new file mode 100644 index 0000000..33c52d5 --- /dev/null +++ b/sql/dm/flowable-patch/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfiguration.java @@ -0,0 +1,2068 @@ +/* Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.flowable.common.engine.impl; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.time.Duration; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.ServiceLoader; +import java.util.Set; + +import javax.naming.InitialContext; +import javax.sql.DataSource; + +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.builder.xml.XMLConfigBuilder; +import org.apache.ibatis.builder.xml.XMLMapperBuilder; +import org.apache.ibatis.datasource.pooled.PooledDataSource; +import org.apache.ibatis.mapping.Environment; +import org.apache.ibatis.plugin.Interceptor; +import org.apache.ibatis.session.Configuration; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory; +import org.apache.ibatis.transaction.TransactionFactory; +import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; +import org.apache.ibatis.transaction.managed.ManagedTransactionFactory; +import org.apache.ibatis.type.ArrayTypeHandler; +import org.apache.ibatis.type.BigDecimalTypeHandler; +import org.apache.ibatis.type.BlobInputStreamTypeHandler; +import org.apache.ibatis.type.BlobTypeHandler; +import org.apache.ibatis.type.BooleanTypeHandler; +import org.apache.ibatis.type.ByteTypeHandler; +import org.apache.ibatis.type.ClobTypeHandler; +import org.apache.ibatis.type.DateOnlyTypeHandler; +import org.apache.ibatis.type.DateTypeHandler; +import org.apache.ibatis.type.DoubleTypeHandler; +import org.apache.ibatis.type.FloatTypeHandler; +import org.apache.ibatis.type.IntegerTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.LongTypeHandler; +import org.apache.ibatis.type.NClobTypeHandler; +import org.apache.ibatis.type.NStringTypeHandler; +import org.apache.ibatis.type.ShortTypeHandler; +import org.apache.ibatis.type.SqlxmlTypeHandler; +import org.apache.ibatis.type.StringTypeHandler; +import org.apache.ibatis.type.TimeOnlyTypeHandler; +import org.apache.ibatis.type.TypeHandlerRegistry; +import org.flowable.common.engine.api.FlowableException; +import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType; +import org.flowable.common.engine.api.delegate.event.FlowableEventDispatcher; +import org.flowable.common.engine.api.delegate.event.FlowableEventListener; +import org.flowable.common.engine.api.engine.EngineLifecycleListener; +import org.flowable.common.engine.impl.agenda.AgendaOperationRunner; +import org.flowable.common.engine.impl.cfg.CommandExecutorImpl; +import org.flowable.common.engine.impl.cfg.IdGenerator; +import org.flowable.common.engine.impl.cfg.TransactionContextFactory; +import org.flowable.common.engine.impl.cfg.standalone.StandaloneMybatisTransactionContextFactory; +import org.flowable.common.engine.impl.db.CommonDbSchemaManager; +import org.flowable.common.engine.impl.db.DbSqlSessionFactory; +import org.flowable.common.engine.impl.db.LogSqlExecutionTimePlugin; +import org.flowable.common.engine.impl.db.MybatisTypeAliasConfigurator; +import org.flowable.common.engine.impl.db.MybatisTypeHandlerConfigurator; +import org.flowable.common.engine.impl.db.SchemaManager; +import org.flowable.common.engine.impl.event.EventDispatchAction; +import org.flowable.common.engine.impl.event.FlowableEventDispatcherImpl; +import org.flowable.common.engine.impl.interceptor.Command; +import org.flowable.common.engine.impl.interceptor.CommandConfig; +import org.flowable.common.engine.impl.interceptor.CommandContextFactory; +import org.flowable.common.engine.impl.interceptor.CommandContextInterceptor; +import org.flowable.common.engine.impl.interceptor.CommandExecutor; +import org.flowable.common.engine.impl.interceptor.CommandInterceptor; +import org.flowable.common.engine.impl.interceptor.CrDbRetryInterceptor; +import org.flowable.common.engine.impl.interceptor.DefaultCommandInvoker; +import org.flowable.common.engine.impl.interceptor.LogInterceptor; +import org.flowable.common.engine.impl.interceptor.SessionFactory; +import org.flowable.common.engine.impl.interceptor.TransactionContextInterceptor; +import org.flowable.common.engine.impl.lock.LockManager; +import org.flowable.common.engine.impl.lock.LockManagerImpl; +import org.flowable.common.engine.impl.logging.LoggingListener; +import org.flowable.common.engine.impl.logging.LoggingSession; +import org.flowable.common.engine.impl.logging.LoggingSessionFactory; +import org.flowable.common.engine.impl.persistence.GenericManagerFactory; +import org.flowable.common.engine.impl.persistence.StrongUuidGenerator; +import org.flowable.common.engine.impl.persistence.cache.EntityCache; +import org.flowable.common.engine.impl.persistence.cache.EntityCacheImpl; +import org.flowable.common.engine.impl.persistence.entity.ByteArrayEntityManager; +import org.flowable.common.engine.impl.persistence.entity.ByteArrayEntityManagerImpl; +import org.flowable.common.engine.impl.persistence.entity.Entity; +import org.flowable.common.engine.impl.persistence.entity.PropertyEntityManager; +import org.flowable.common.engine.impl.persistence.entity.PropertyEntityManagerImpl; +import org.flowable.common.engine.impl.persistence.entity.TableDataManager; +import org.flowable.common.engine.impl.persistence.entity.TableDataManagerImpl; +import org.flowable.common.engine.impl.persistence.entity.data.ByteArrayDataManager; +import org.flowable.common.engine.impl.persistence.entity.data.PropertyDataManager; +import org.flowable.common.engine.impl.persistence.entity.data.impl.MybatisByteArrayDataManager; +import org.flowable.common.engine.impl.persistence.entity.data.impl.MybatisPropertyDataManager; +import org.flowable.common.engine.impl.runtime.Clock; +import org.flowable.common.engine.impl.service.CommonEngineServiceImpl; +import org.flowable.common.engine.impl.util.DefaultClockImpl; +import org.flowable.common.engine.impl.util.IoUtil; +import org.flowable.common.engine.impl.util.ReflectUtil; +import org.flowable.eventregistry.api.EventRegistryEventConsumer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; + +public abstract class AbstractEngineConfiguration { + + protected final Logger logger = LoggerFactory.getLogger(getClass()); + + /** The tenant id indicating 'no tenant' */ + public static final String NO_TENANT_ID = ""; + + /** + * Checks the version of the DB schema against the library when the form engine is being created and throws an exception if the versions don't match. + */ + public static final String DB_SCHEMA_UPDATE_FALSE = "false"; + public static final String DB_SCHEMA_UPDATE_CREATE = "create"; + public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop"; + + /** + * Creates the schema when the form engine is being created and drops the schema when the form engine is being closed. + */ + public static final String DB_SCHEMA_UPDATE_DROP_CREATE = "drop-create"; + + /** + * Upon building of the process engine, a check is performed and an update of the schema is performed if it is necessary. + */ + public static final String DB_SCHEMA_UPDATE_TRUE = "true"; + + protected boolean forceCloseMybatisConnectionPool = true; + + protected String databaseType; + protected String jdbcDriver = "org.h2.Driver"; + protected String jdbcUrl = "jdbc:h2:tcp://localhost/~/flowable"; + protected String jdbcUsername = "sa"; + protected String jdbcPassword = ""; + protected String dataSourceJndiName; + protected int jdbcMaxActiveConnections = 16; + protected int jdbcMaxIdleConnections = 8; + protected int jdbcMaxCheckoutTime; + protected int jdbcMaxWaitTime; + protected boolean jdbcPingEnabled; + protected String jdbcPingQuery; + protected int jdbcPingConnectionNotUsedFor; + protected int jdbcDefaultTransactionIsolationLevel; + protected DataSource dataSource; + protected SchemaManager commonSchemaManager; + protected SchemaManager schemaManager; + protected Command schemaManagementCmd; + + protected String databaseSchemaUpdate = DB_SCHEMA_UPDATE_FALSE; + + /** + * Whether to use a lock when performing the database schema create or update operations. + */ + protected boolean useLockForDatabaseSchemaUpdate = false; + + protected String xmlEncoding = "UTF-8"; + + // COMMAND EXECUTORS /////////////////////////////////////////////// + + protected CommandExecutor commandExecutor; + protected Collection defaultCommandInterceptors; + protected CommandConfig defaultCommandConfig; + protected CommandConfig schemaCommandConfig; + protected CommandContextFactory commandContextFactory; + protected CommandInterceptor commandInvoker; + + protected AgendaOperationRunner agendaOperationRunner = (commandContext, runnable) -> runnable.run(); + + protected List customPreCommandInterceptors; + protected List customPostCommandInterceptors; + protected List commandInterceptors; + + protected Map engineConfigurations = new HashMap<>(); + protected Map serviceConfigurations = new HashMap<>(); + + protected ClassLoader classLoader; + /** + * Either use Class.forName or ClassLoader.loadClass for class loading. See http://forums.activiti.org/content/reflectutilloadclass-and-custom- classloader + */ + protected boolean useClassForNameClassLoading = true; + + protected List engineLifecycleListeners; + + // Event Registry ////////////////////////////////////////////////// + protected Map eventRegistryEventConsumers = new HashMap<>(); + + // MYBATIS SQL SESSION FACTORY ///////////////////////////////////// + + protected boolean isDbHistoryUsed = true; + protected DbSqlSessionFactory dbSqlSessionFactory; + protected SqlSessionFactory sqlSessionFactory; + protected TransactionFactory transactionFactory; + protected TransactionContextFactory transactionContextFactory; + + /** + * If set to true, enables bulk insert (grouping sql inserts together). Default true. + * For some databases (eg DB2+z/OS) needs to be set to false. + */ + protected boolean isBulkInsertEnabled = true; + + /** + * Some databases have a limit of how many parameters one sql insert can have (eg SQL Server, 2000 params (!= insert statements) ). Tweak this parameter in case of exceptions indicating too much + * is being put into one bulk insert, or make it higher if your database can cope with it and there are inserts with a huge amount of data. + *

    + * By default: 100 (55 for mssql server as it has a hard limit of 2000 parameters in a statement) + */ + protected int maxNrOfStatementsInBulkInsert = 100; + + public int DEFAULT_MAX_NR_OF_STATEMENTS_BULK_INSERT_SQL_SERVER = 55; // currently Execution has most params (35). 2000 / 35 = 57. + + protected String mybatisMappingFile; + protected Set> customMybatisMappers; + protected Set customMybatisXMLMappers; + protected List customMybatisInterceptors; + + protected Set dependentEngineMyBatisXmlMappers; + protected List dependentEngineMybatisTypeAliasConfigs; + protected List dependentEngineMybatisTypeHandlerConfigs; + + // SESSION FACTORIES /////////////////////////////////////////////// + protected List customSessionFactories; + protected Map, SessionFactory> sessionFactories; + + protected boolean enableEventDispatcher = true; + protected FlowableEventDispatcher eventDispatcher; + protected List eventListeners; + protected Map> typedEventListeners; + protected List additionalEventDispatchActions; + + protected LoggingListener loggingListener; + + protected boolean transactionsExternallyManaged; + + /** + * Flag that can be set to configure or not a relational database is used. This is useful for custom implementations that do not use relational databases at all. + * + * If true (default), the {@link AbstractEngineConfiguration#getDatabaseSchemaUpdate()} value will be used to determine what needs to happen wrt the database schema. + * + * If false, no validation or schema creation will be done. That means that the database schema must have been created 'manually' before but the engine does not validate whether the schema is + * correct. The {@link AbstractEngineConfiguration#getDatabaseSchemaUpdate()} value will not be used. + */ + protected boolean usingRelationalDatabase = true; + + /** + * Flag that can be set to configure whether or not a schema is used. This is useful for custom implementations that do not use relational databases at all. + * Setting {@link #usingRelationalDatabase} to true will automatically imply using a schema. + */ + protected boolean usingSchemaMgmt = true; + + /** + * Allows configuring a database table prefix which is used for all runtime operations of the process engine. For example, if you specify a prefix named 'PRE1.', Flowable will query for executions + * in a table named 'PRE1.ACT_RU_EXECUTION_'. + * + *

    + * NOTE: the prefix is not respected by automatic database schema management. If you use {@link AbstractEngineConfiguration#DB_SCHEMA_UPDATE_CREATE_DROP} or + * {@link AbstractEngineConfiguration#DB_SCHEMA_UPDATE_TRUE}, Flowable will create the database tables using the default names, regardless of the prefix configured here. + */ + protected String databaseTablePrefix = ""; + + /** + * Escape character for doing wildcard searches. + * + * This will be added at then end of queries that include for example a LIKE clause. For example: SELECT * FROM table WHERE column LIKE '%\%%' ESCAPE '\'; + */ + protected String databaseWildcardEscapeCharacter; + + /** + * database catalog to use + */ + protected String databaseCatalog = ""; + + /** + * In some situations you want to set the schema to use for table checks / generation if the database metadata doesn't return that correctly, see https://jira.codehaus.org/browse/ACT-1220, + * https://jira.codehaus.org/browse/ACT-1062 + */ + protected String databaseSchema; + + /** + * Set to true in case the defined databaseTablePrefix is a schema-name, instead of an actual table name prefix. This is relevant for checking if Flowable-tables exist, the databaseTablePrefix + * will not be used here - since the schema is taken into account already, adding a prefix for the table-check will result in wrong table-names. + */ + protected boolean tablePrefixIsSchema; + + /** + * Set to true if the latest version of a definition should be retrieved, ignoring a possible parent deployment id value + */ + protected boolean alwaysLookupLatestDefinitionVersion; + + /** + * Set to true if by default lookups should fallback to the default tenant (an empty string by default or a defined tenant value) + */ + protected boolean fallbackToDefaultTenant; + + /** + * Default tenant provider that is executed when looking up definitions, in case the global or local fallback to default tenant value is true + */ + protected DefaultTenantProvider defaultTenantProvider = (tenantId, scope, scopeKey) -> NO_TENANT_ID; + + /** + * Enables the MyBatis plugin that logs the execution time of sql statements. + */ + protected boolean enableLogSqlExecutionTime; + + protected Properties databaseTypeMappings = getDefaultDatabaseTypeMappings(); + + /** + * Duration between the checks when acquiring a lock. + */ + protected Duration lockPollRate = Duration.ofSeconds(10); + + /** + * Duration to wait for the DB Schema lock before giving up. + */ + protected Duration schemaLockWaitTime = Duration.ofMinutes(5); + + // DATA MANAGERS ////////////////////////////////////////////////////////////////// + + protected PropertyDataManager propertyDataManager; + protected ByteArrayDataManager byteArrayDataManager; + protected TableDataManager tableDataManager; + + // ENTITY MANAGERS //////////////////////////////////////////////////////////////// + + protected PropertyEntityManager propertyEntityManager; + protected ByteArrayEntityManager byteArrayEntityManager; + + protected List customPreDeployers; + protected List customPostDeployers; + protected List deployers; + + // CONFIGURATORS //////////////////////////////////////////////////////////// + + protected boolean enableConfiguratorServiceLoader = true; // Enabled by default. In certain environments this should be set to false (eg osgi) + protected List configurators; // The injected configurators + protected List allConfigurators; // Including auto-discovered configurators + protected EngineConfigurator idmEngineConfigurator; + protected EngineConfigurator eventRegistryConfigurator; + + public static final String PRODUCT_NAME_POSTGRES = "PostgreSQL"; + public static final String PRODUCT_NAME_CRDB = "CockroachDB"; + + public static final String DATABASE_TYPE_H2 = "h2"; + public static final String DATABASE_TYPE_HSQL = "hsql"; + public static final String DATABASE_TYPE_MYSQL = "mysql"; + public static final String DATABASE_TYPE_ORACLE = "oracle"; + public static final String DATABASE_TYPE_POSTGRES = "postgres"; + public static final String DATABASE_TYPE_MSSQL = "mssql"; + public static final String DATABASE_TYPE_DB2 = "db2"; + public static final String DATABASE_TYPE_COCKROACHDB = "cockroachdb"; + + public static Properties getDefaultDatabaseTypeMappings() { + Properties databaseTypeMappings = new Properties(); + databaseTypeMappings.setProperty("H2", DATABASE_TYPE_H2); + databaseTypeMappings.setProperty("HSQL Database Engine", DATABASE_TYPE_HSQL); + databaseTypeMappings.setProperty("MySQL", DATABASE_TYPE_MYSQL); + databaseTypeMappings.setProperty("MariaDB", DATABASE_TYPE_MYSQL); + databaseTypeMappings.setProperty("Oracle", DATABASE_TYPE_ORACLE); + databaseTypeMappings.setProperty(PRODUCT_NAME_POSTGRES, DATABASE_TYPE_POSTGRES); + databaseTypeMappings.setProperty("Microsoft SQL Server", DATABASE_TYPE_MSSQL); + databaseTypeMappings.setProperty(DATABASE_TYPE_DB2, DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/NT", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/NT64", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2 UDP", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/LINUX", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/LINUX390", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/LINUXX8664", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/LINUXZ64", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/LINUXPPC64", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/LINUXPPC64LE", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/400 SQL", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/6000", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2 UDB iSeries", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/AIX64", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/HPUX", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/HP64", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/SUN", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/SUN64", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/PTX", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2/2", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty("DB2 UDB AS400", DATABASE_TYPE_DB2); + databaseTypeMappings.setProperty(PRODUCT_NAME_CRDB, DATABASE_TYPE_COCKROACHDB); + databaseTypeMappings.setProperty("DM DBMS", DATABASE_TYPE_ORACLE); // dhb52: DM support + return databaseTypeMappings; + } + + protected Map beans; + + protected IdGenerator idGenerator; + protected boolean usePrefixId; + + protected Clock clock; + protected ObjectMapper objectMapper; + + // Variables + + public static final int DEFAULT_GENERIC_MAX_LENGTH_STRING = 4000; + public static final int DEFAULT_ORACLE_MAX_LENGTH_STRING = 2000; + + /** + * Define a max length for storing String variable types in the database. Mainly used for the Oracle NVARCHAR2 limit of 2000 characters + */ + protected int maxLengthStringVariableType = -1; + + protected void initEngineConfigurations() { + addEngineConfiguration(getEngineCfgKey(), getEngineScopeType(), this); + } + + // DataSource + // /////////////////////////////////////////////////////////////// + + protected void initDataSource() { + if (dataSource == null) { + if (dataSourceJndiName != null) { + try { + dataSource = (DataSource) new InitialContext().lookup(dataSourceJndiName); + } catch (Exception e) { + throw new FlowableException("couldn't lookup datasource from " + dataSourceJndiName + ": " + e.getMessage(), e); + } + + } else if (jdbcUrl != null) { + if ((jdbcDriver == null) || (jdbcUsername == null)) { + throw new FlowableException("DataSource or JDBC properties have to be specified in a process engine configuration"); + } + + logger.debug("initializing datasource to db: {}", jdbcUrl); + + if (logger.isInfoEnabled()) { + logger.info("Configuring Datasource with following properties (omitted password for security)"); + logger.info("datasource driver : {}", jdbcDriver); + logger.info("datasource url : {}", jdbcUrl); + logger.info("datasource user name : {}", jdbcUsername); + } + + PooledDataSource pooledDataSource = new PooledDataSource(this.getClass().getClassLoader(), jdbcDriver, jdbcUrl, jdbcUsername, jdbcPassword); + + if (jdbcMaxActiveConnections > 0) { + pooledDataSource.setPoolMaximumActiveConnections(jdbcMaxActiveConnections); + } + if (jdbcMaxIdleConnections > 0) { + pooledDataSource.setPoolMaximumIdleConnections(jdbcMaxIdleConnections); + } + if (jdbcMaxCheckoutTime > 0) { + pooledDataSource.setPoolMaximumCheckoutTime(jdbcMaxCheckoutTime); + } + if (jdbcMaxWaitTime > 0) { + pooledDataSource.setPoolTimeToWait(jdbcMaxWaitTime); + } + if (jdbcPingEnabled) { + pooledDataSource.setPoolPingEnabled(true); + if (jdbcPingQuery != null) { + pooledDataSource.setPoolPingQuery(jdbcPingQuery); + } + pooledDataSource.setPoolPingConnectionsNotUsedFor(jdbcPingConnectionNotUsedFor); + } + if (jdbcDefaultTransactionIsolationLevel > 0) { + pooledDataSource.setDefaultTransactionIsolationLevel(jdbcDefaultTransactionIsolationLevel); + } + dataSource = pooledDataSource; + } + } + + if (databaseType == null) { + initDatabaseType(); + } + } + + public void initDatabaseType() { + Connection connection = null; + try { + connection = dataSource.getConnection(); + DatabaseMetaData databaseMetaData = connection.getMetaData(); + String databaseProductName = databaseMetaData.getDatabaseProductName(); + logger.debug("database product name: '{}'", databaseProductName); + + // CRDB does not expose the version through the jdbc driver, so we need to fetch it through version(). + if (PRODUCT_NAME_POSTGRES.equalsIgnoreCase(databaseProductName)) { + try (PreparedStatement preparedStatement = connection.prepareStatement("select version() as version;"); + ResultSet resultSet = preparedStatement.executeQuery()) { + String version = null; + if (resultSet.next()) { + version = resultSet.getString("version"); + } + + if (StringUtils.isNotEmpty(version) && version.toLowerCase().startsWith(PRODUCT_NAME_CRDB.toLowerCase())) { + databaseProductName = PRODUCT_NAME_CRDB; + logger.info("CockroachDB version '{}' detected", version); + } + } + } + + databaseType = databaseTypeMappings.getProperty(databaseProductName); + if (databaseType == null) { + throw new FlowableException("couldn't deduct database type from database product name '" + databaseProductName + "'"); + } + logger.debug("using database type: {}", databaseType); + + } catch (SQLException e) { + throw new RuntimeException("Exception while initializing Database connection", e); + } finally { + try { + if (connection != null) { + connection.close(); + } + } catch (SQLException e) { + logger.error("Exception while closing the Database connection", e); + } + } + + // Special care for MSSQL, as it has a hard limit of 2000 params per statement (incl bulk statement). + // Especially with executions, with 100 as default, this limit is passed. + if (DATABASE_TYPE_MSSQL.equals(databaseType)) { + maxNrOfStatementsInBulkInsert = DEFAULT_MAX_NR_OF_STATEMENTS_BULK_INSERT_SQL_SERVER; + } + } + + public void initSchemaManager() { + if (this.commonSchemaManager == null) { + this.commonSchemaManager = new CommonDbSchemaManager(); + } + } + + // session factories //////////////////////////////////////////////////////// + + public void addSessionFactory(SessionFactory sessionFactory) { + sessionFactories.put(sessionFactory.getSessionType(), sessionFactory); + } + + public void initCommandContextFactory() { + if (commandContextFactory == null) { + commandContextFactory = new CommandContextFactory(); + } + } + + public void initTransactionContextFactory() { + if (transactionContextFactory == null) { + transactionContextFactory = new StandaloneMybatisTransactionContextFactory(); + } + } + + public void initCommandExecutors() { + initDefaultCommandConfig(); + initSchemaCommandConfig(); + initCommandInvoker(); + initCommandInterceptors(); + initCommandExecutor(); + } + + + public void initDefaultCommandConfig() { + if (defaultCommandConfig == null) { + defaultCommandConfig = new CommandConfig(); + } + } + + public void initSchemaCommandConfig() { + if (schemaCommandConfig == null) { + schemaCommandConfig = new CommandConfig(); + } + } + + public void initCommandInvoker() { + if (commandInvoker == null) { + commandInvoker = new DefaultCommandInvoker(); + } + } + + public void initCommandInterceptors() { + if (commandInterceptors == null) { + commandInterceptors = new ArrayList<>(); + if (customPreCommandInterceptors != null) { + commandInterceptors.addAll(customPreCommandInterceptors); + } + commandInterceptors.addAll(getDefaultCommandInterceptors()); + if (customPostCommandInterceptors != null) { + commandInterceptors.addAll(customPostCommandInterceptors); + } + commandInterceptors.add(commandInvoker); + } + } + + public Collection getDefaultCommandInterceptors() { + if (defaultCommandInterceptors == null) { + List interceptors = new ArrayList<>(); + interceptors.add(new LogInterceptor()); + + if (DATABASE_TYPE_COCKROACHDB.equals(databaseType)) { + interceptors.add(new CrDbRetryInterceptor()); + } + + CommandInterceptor transactionInterceptor = createTransactionInterceptor(); + if (transactionInterceptor != null) { + interceptors.add(transactionInterceptor); + } + + if (commandContextFactory != null) { + String engineCfgKey = getEngineCfgKey(); + CommandContextInterceptor commandContextInterceptor = new CommandContextInterceptor(commandContextFactory, + classLoader, useClassForNameClassLoading, clock, objectMapper); + engineConfigurations.put(engineCfgKey, this); + commandContextInterceptor.setEngineCfgKey(engineCfgKey); + commandContextInterceptor.setEngineConfigurations(engineConfigurations); + interceptors.add(commandContextInterceptor); + } + + if (transactionContextFactory != null) { + interceptors.add(new TransactionContextInterceptor(transactionContextFactory)); + } + + List additionalCommandInterceptors = getAdditionalDefaultCommandInterceptors(); + if (additionalCommandInterceptors != null) { + interceptors.addAll(additionalCommandInterceptors); + } + + defaultCommandInterceptors = interceptors; + } + return defaultCommandInterceptors; + } + + public abstract String getEngineCfgKey(); + + public abstract String getEngineScopeType(); + + public List getAdditionalDefaultCommandInterceptors() { + return null; + } + + public void initCommandExecutor() { + if (commandExecutor == null) { + CommandInterceptor first = initInterceptorChain(commandInterceptors); + commandExecutor = new CommandExecutorImpl(getDefaultCommandConfig(), first); + } + } + + public CommandInterceptor initInterceptorChain(List chain) { + if (chain == null || chain.isEmpty()) { + throw new FlowableException("invalid command interceptor chain configuration: " + chain); + } + for (int i = 0; i < chain.size() - 1; i++) { + chain.get(i).setNext(chain.get(i + 1)); + } + return chain.get(0); + } + + public abstract CommandInterceptor createTransactionInterceptor(); + + + public void initBeans() { + if (beans == null) { + beans = new HashMap<>(); + } + } + + // id generator + // ///////////////////////////////////////////////////////////// + + public void initIdGenerator() { + if (idGenerator == null) { + idGenerator = new StrongUuidGenerator(); + } + } + + public void initObjectMapper() { + if (objectMapper == null) { + objectMapper = new ObjectMapper(); + objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + } + } + + public void initClock() { + if (clock == null) { + clock = new DefaultClockImpl(); + } + } + + // Data managers /////////////////////////////////////////////////////////// + + public void initDataManagers() { + if (propertyDataManager == null) { + propertyDataManager = new MybatisPropertyDataManager(idGenerator); + } + + if (byteArrayDataManager == null) { + byteArrayDataManager = new MybatisByteArrayDataManager(idGenerator); + } + } + + // Entity managers ////////////////////////////////////////////////////////// + + public void initEntityManagers() { + if (propertyEntityManager == null) { + propertyEntityManager = new PropertyEntityManagerImpl(this, propertyDataManager); + } + + if (byteArrayEntityManager == null) { + byteArrayEntityManager = new ByteArrayEntityManagerImpl(byteArrayDataManager, getEngineCfgKey(), this::getEventDispatcher); + } + + if (tableDataManager == null) { + tableDataManager = new TableDataManagerImpl(this); + } + } + + // services + // ///////////////////////////////////////////////////////////////// + + protected void initService(Object service) { + if (service instanceof CommonEngineServiceImpl) { + ((CommonEngineServiceImpl) service).setCommandExecutor(commandExecutor); + } + } + + // myBatis SqlSessionFactory + // //////////////////////////////////////////////// + + public void initSessionFactories() { + if (sessionFactories == null) { + sessionFactories = new HashMap<>(); + + if (usingRelationalDatabase) { + initDbSqlSessionFactory(); + } + + addSessionFactory(new GenericManagerFactory(EntityCache.class, EntityCacheImpl.class)); + + if (isLoggingSessionEnabled()) { + if (!sessionFactories.containsKey(LoggingSession.class)) { + LoggingSessionFactory loggingSessionFactory = new LoggingSessionFactory(); + loggingSessionFactory.setLoggingListener(loggingListener); + loggingSessionFactory.setObjectMapper(objectMapper); + sessionFactories.put(LoggingSession.class, loggingSessionFactory); + } + } + + commandContextFactory.setSessionFactories(sessionFactories); + + } else { + if (usingRelationalDatabase) { + initDbSqlSessionFactoryEntitySettings(); + } + } + + if (customSessionFactories != null) { + for (SessionFactory sessionFactory : customSessionFactories) { + addSessionFactory(sessionFactory); + } + } + } + + public void initDbSqlSessionFactory() { + if (dbSqlSessionFactory == null) { + dbSqlSessionFactory = createDbSqlSessionFactory(); + } + dbSqlSessionFactory.setDatabaseType(databaseType); + dbSqlSessionFactory.setSqlSessionFactory(sqlSessionFactory); + dbSqlSessionFactory.setDbHistoryUsed(isDbHistoryUsed); + dbSqlSessionFactory.setDatabaseTablePrefix(databaseTablePrefix); + dbSqlSessionFactory.setTablePrefixIsSchema(tablePrefixIsSchema); + dbSqlSessionFactory.setDatabaseCatalog(databaseCatalog); + dbSqlSessionFactory.setDatabaseSchema(databaseSchema); + dbSqlSessionFactory.setMaxNrOfStatementsInBulkInsert(maxNrOfStatementsInBulkInsert); + + initDbSqlSessionFactoryEntitySettings(); + + addSessionFactory(dbSqlSessionFactory); + } + + public DbSqlSessionFactory createDbSqlSessionFactory() { + return new DbSqlSessionFactory(usePrefixId); + } + + protected abstract void initDbSqlSessionFactoryEntitySettings(); + + protected void defaultInitDbSqlSessionFactoryEntitySettings(List> insertOrder, List> deleteOrder) { + if (insertOrder != null) { + for (Class clazz : insertOrder) { + dbSqlSessionFactory.getInsertionOrder().add(clazz); + + if (isBulkInsertEnabled) { + dbSqlSessionFactory.getBulkInserteableEntityClasses().add(clazz); + } + } + } + + if (deleteOrder != null) { + for (Class clazz : deleteOrder) { + dbSqlSessionFactory.getDeletionOrder().add(clazz); + } + } + } + + public void initTransactionFactory() { + if (transactionFactory == null) { + if (transactionsExternallyManaged) { + transactionFactory = new ManagedTransactionFactory(); + Properties properties = new Properties(); + properties.put("closeConnection", "false"); + this.transactionFactory.setProperties(properties); + } else { + transactionFactory = new JdbcTransactionFactory(); + } + } + } + + public void initSqlSessionFactory() { + if (sqlSessionFactory == null) { + InputStream inputStream = null; + try { + inputStream = getMyBatisXmlConfigurationStream(); + + Environment environment = new Environment("default", transactionFactory, dataSource); + Reader reader = new InputStreamReader(inputStream); + Properties properties = new Properties(); + properties.put("prefix", databaseTablePrefix); + + String wildcardEscapeClause = ""; + if ((databaseWildcardEscapeCharacter != null) && (databaseWildcardEscapeCharacter.length() != 0)) { + wildcardEscapeClause = " escape '" + databaseWildcardEscapeCharacter + "'"; + } + properties.put("wildcardEscapeClause", wildcardEscapeClause); + + // set default properties + properties.put("limitBefore", ""); + properties.put("limitAfter", ""); + properties.put("limitBetween", ""); + properties.put("limitBeforeNativeQuery", ""); + properties.put("limitAfterNativeQuery", ""); + properties.put("blobType", "BLOB"); + properties.put("boolValue", "TRUE"); + + if (databaseType != null) { + properties.load(getResourceAsStream(pathToEngineDbProperties())); + } + + Configuration configuration = initMybatisConfiguration(environment, reader, properties); + sqlSessionFactory = new DefaultSqlSessionFactory(configuration); + + } catch (Exception e) { + throw new FlowableException("Error while building ibatis SqlSessionFactory: " + e.getMessage(), e); + } finally { + IoUtil.closeSilently(inputStream); + } + } else { + // This is needed when the SQL Session Factory is created by another engine. + // When custom XML Mappers are registered with this engine they need to be loaded in the configuration as well + applyCustomMybatisCustomizations(sqlSessionFactory.getConfiguration()); + } + } + + public String pathToEngineDbProperties() { + return "org/flowable/common/db/properties/" + databaseType + ".properties"; + } + + public Configuration initMybatisConfiguration(Environment environment, Reader reader, Properties properties) { + XMLConfigBuilder parser = new XMLConfigBuilder(reader, "", properties); + Configuration configuration = parser.getConfiguration(); + + if (databaseType != null) { + configuration.setDatabaseId(databaseType); + } + + configuration.setEnvironment(environment); + + initMybatisTypeHandlers(configuration); + initCustomMybatisInterceptors(configuration); + if (isEnableLogSqlExecutionTime()) { + initMyBatisLogSqlExecutionTimePlugin(configuration); + } + + configuration = parseMybatisConfiguration(parser); + return configuration; + } + + public void initCustomMybatisMappers(Configuration configuration) { + if (getCustomMybatisMappers() != null) { + for (Class clazz : getCustomMybatisMappers()) { + if (!configuration.hasMapper(clazz)) { + configuration.addMapper(clazz); + } + } + } + } + + public void initMybatisTypeHandlers(Configuration configuration) { + // When mapping into Map there is currently a problem with MyBatis. + // It will return objects which are driver specific. + // Therefore we are registering the mappings between Object.class and the specific jdbc type here. + // see https://github.com/mybatis/mybatis-3/issues/2216 for more info + TypeHandlerRegistry handlerRegistry = configuration.getTypeHandlerRegistry(); + + handlerRegistry.register(Object.class, JdbcType.BOOLEAN, new BooleanTypeHandler()); + handlerRegistry.register(Object.class, JdbcType.BIT, new BooleanTypeHandler()); + + handlerRegistry.register(Object.class, JdbcType.TINYINT, new ByteTypeHandler()); + + handlerRegistry.register(Object.class, JdbcType.SMALLINT, new ShortTypeHandler()); + + handlerRegistry.register(Object.class, JdbcType.INTEGER, new IntegerTypeHandler()); + + handlerRegistry.register(Object.class, JdbcType.FLOAT, new FloatTypeHandler()); + + handlerRegistry.register(Object.class, JdbcType.DOUBLE, new DoubleTypeHandler()); + + handlerRegistry.register(Object.class, JdbcType.CHAR, new StringTypeHandler()); + handlerRegistry.register(Object.class, JdbcType.CLOB, new ClobTypeHandler()); + handlerRegistry.register(Object.class, JdbcType.VARCHAR, new StringTypeHandler()); + handlerRegistry.register(Object.class, JdbcType.LONGVARCHAR, new StringTypeHandler()); + handlerRegistry.register(Object.class, JdbcType.NVARCHAR, new NStringTypeHandler()); + handlerRegistry.register(Object.class, JdbcType.NCHAR, new NStringTypeHandler()); + handlerRegistry.register(Object.class, JdbcType.NCLOB, new NClobTypeHandler()); + + handlerRegistry.register(Object.class, JdbcType.ARRAY, new ArrayTypeHandler()); + + handlerRegistry.register(Object.class, JdbcType.BIGINT, new LongTypeHandler()); + + handlerRegistry.register(Object.class, JdbcType.REAL, new BigDecimalTypeHandler()); + handlerRegistry.register(Object.class, JdbcType.DECIMAL, new BigDecimalTypeHandler()); + handlerRegistry.register(Object.class, JdbcType.NUMERIC, new BigDecimalTypeHandler()); + + handlerRegistry.register(Object.class, JdbcType.BLOB, new BlobInputStreamTypeHandler()); + handlerRegistry.register(Object.class, JdbcType.LONGVARBINARY, new BlobTypeHandler()); + + handlerRegistry.register(Object.class, JdbcType.DATE, new DateOnlyTypeHandler()); + handlerRegistry.register(Object.class, JdbcType.TIME, new TimeOnlyTypeHandler()); + handlerRegistry.register(Object.class, JdbcType.TIMESTAMP, new DateTypeHandler()); + + handlerRegistry.register(Object.class, JdbcType.SQLXML, new SqlxmlTypeHandler()); + } + + public void initCustomMybatisInterceptors(Configuration configuration) { + if (customMybatisInterceptors!=null){ + for (Interceptor interceptor :customMybatisInterceptors){ + configuration.addInterceptor(interceptor); + } + } + } + + public void initMyBatisLogSqlExecutionTimePlugin(Configuration configuration) { + configuration.addInterceptor(new LogSqlExecutionTimePlugin()); + } + + public Configuration parseMybatisConfiguration(XMLConfigBuilder parser) { + Configuration configuration = parser.parse(); + + applyCustomMybatisCustomizations(configuration); + return configuration; + } + + protected void applyCustomMybatisCustomizations(Configuration configuration) { + initCustomMybatisMappers(configuration); + + if (dependentEngineMybatisTypeAliasConfigs != null) { + for (MybatisTypeAliasConfigurator typeAliasConfig : dependentEngineMybatisTypeAliasConfigs) { + typeAliasConfig.configure(configuration.getTypeAliasRegistry()); + } + } + if (dependentEngineMybatisTypeHandlerConfigs != null) { + for (MybatisTypeHandlerConfigurator typeHandlerConfig : dependentEngineMybatisTypeHandlerConfigs) { + typeHandlerConfig.configure(configuration.getTypeHandlerRegistry()); + } + } + + parseDependentEngineMybatisXMLMappers(configuration); + parseCustomMybatisXMLMappers(configuration); + } + + public void parseCustomMybatisXMLMappers(Configuration configuration) { + if (getCustomMybatisXMLMappers() != null) { + for (String resource : getCustomMybatisXMLMappers()) { + parseMybatisXmlMapping(configuration, resource); + } + } + } + + public void parseDependentEngineMybatisXMLMappers(Configuration configuration) { + if (getDependentEngineMyBatisXmlMappers() != null) { + for (String resource : getDependentEngineMyBatisXmlMappers()) { + parseMybatisXmlMapping(configuration, resource); + } + } + } + + protected void parseMybatisXmlMapping(Configuration configuration, String resource) { + // see XMLConfigBuilder.mapperElement() + XMLMapperBuilder mapperParser = new XMLMapperBuilder(getResourceAsStream(resource), configuration, resource, configuration.getSqlFragments()); + mapperParser.parse(); + } + + protected InputStream getResourceAsStream(String resource) { + ClassLoader classLoader = getClassLoader(); + if (classLoader != null) { + return getClassLoader().getResourceAsStream(resource); + } else { + return this.getClass().getClassLoader().getResourceAsStream(resource); + } + } + + public void setMybatisMappingFile(String file) { + this.mybatisMappingFile = file; + } + + public String getMybatisMappingFile() { + return mybatisMappingFile; + } + + public abstract InputStream getMyBatisXmlConfigurationStream(); + + public void initConfigurators() { + + allConfigurators = new ArrayList<>(); + allConfigurators.addAll(getEngineSpecificEngineConfigurators()); + + // Configurators that are explicitly added to the config + if (configurators != null) { + allConfigurators.addAll(configurators); + } + + // Auto discovery through ServiceLoader + if (enableConfiguratorServiceLoader) { + ClassLoader classLoader = getClassLoader(); + if (classLoader == null) { + classLoader = ReflectUtil.getClassLoader(); + } + + ServiceLoader configuratorServiceLoader = ServiceLoader.load(EngineConfigurator.class, classLoader); + int nrOfServiceLoadedConfigurators = 0; + for (EngineConfigurator configurator : configuratorServiceLoader) { + allConfigurators.add(configurator); + nrOfServiceLoadedConfigurators++; + } + + if (nrOfServiceLoadedConfigurators > 0) { + logger.info("Found {} auto-discoverable Process Engine Configurator{}", nrOfServiceLoadedConfigurators, nrOfServiceLoadedConfigurators > 1 ? "s" : ""); + } + + if (!allConfigurators.isEmpty()) { + + // Order them according to the priorities (useful for dependent + // configurator) + allConfigurators.sort(new Comparator() { + + @Override + public int compare(EngineConfigurator configurator1, EngineConfigurator configurator2) { + int priority1 = configurator1.getPriority(); + int priority2 = configurator2.getPriority(); + + if (priority1 < priority2) { + return -1; + } else if (priority1 > priority2) { + return 1; + } + return 0; + } + }); + + // Execute the configurators + logger.info("Found {} Engine Configurators in total:", allConfigurators.size()); + for (EngineConfigurator configurator : allConfigurators) { + logger.info("{} (priority:{})", configurator.getClass(), configurator.getPriority()); + } + + } + + } + } + + public void close() { + if (forceCloseMybatisConnectionPool && dataSource instanceof PooledDataSource) { + /* + * When the datasource is created by a Flowable engine (i.e. it's an instance of PooledDataSource), + * the connection pool needs to be closed when closing the engine. + * Note that calling forceCloseAll() multiple times (as is the case when running with multiple engine) is ok. + */ + ((PooledDataSource) dataSource).forceCloseAll(); + } + } + + protected List getEngineSpecificEngineConfigurators() { + // meant to be overridden if needed + return Collections.emptyList(); + } + + public void configuratorsBeforeInit() { + for (EngineConfigurator configurator : allConfigurators) { + logger.info("Executing beforeInit() of {} (priority:{})", configurator.getClass(), configurator.getPriority()); + configurator.beforeInit(this); + } + } + + public void configuratorsAfterInit() { + for (EngineConfigurator configurator : allConfigurators) { + logger.info("Executing configure() of {} (priority:{})", configurator.getClass(), configurator.getPriority()); + configurator.configure(this); + } + } + + public LockManager getLockManager(String lockName) { + return new LockManagerImpl(commandExecutor, lockName, getLockPollRate(), getEngineCfgKey()); + } + + // getters and setters + // ////////////////////////////////////////////////////// + + public abstract String getEngineName(); + + public ClassLoader getClassLoader() { + return classLoader; + } + + public AbstractEngineConfiguration setClassLoader(ClassLoader classLoader) { + this.classLoader = classLoader; + return this; + } + + public boolean isUseClassForNameClassLoading() { + return useClassForNameClassLoading; + } + + public AbstractEngineConfiguration setUseClassForNameClassLoading(boolean useClassForNameClassLoading) { + this.useClassForNameClassLoading = useClassForNameClassLoading; + return this; + } + + public void addEngineLifecycleListener(EngineLifecycleListener engineLifecycleListener) { + if (this.engineLifecycleListeners == null) { + this.engineLifecycleListeners = new ArrayList<>(); + } + this.engineLifecycleListeners.add(engineLifecycleListener); + } + + public List getEngineLifecycleListeners() { + return engineLifecycleListeners; + } + + public AbstractEngineConfiguration setEngineLifecycleListeners(List engineLifecycleListeners) { + this.engineLifecycleListeners = engineLifecycleListeners; + return this; + } + + public String getDatabaseType() { + return databaseType; + } + + public AbstractEngineConfiguration setDatabaseType(String databaseType) { + this.databaseType = databaseType; + return this; + } + + public DataSource getDataSource() { + return dataSource; + } + + public AbstractEngineConfiguration setDataSource(DataSource dataSource) { + this.dataSource = dataSource; + return this; + } + + public SchemaManager getSchemaManager() { + return schemaManager; + } + + public AbstractEngineConfiguration setSchemaManager(SchemaManager schemaManager) { + this.schemaManager = schemaManager; + return this; + } + + public SchemaManager getCommonSchemaManager() { + return commonSchemaManager; + } + + public AbstractEngineConfiguration setCommonSchemaManager(SchemaManager commonSchemaManager) { + this.commonSchemaManager = commonSchemaManager; + return this; + } + + public Command getSchemaManagementCmd() { + return schemaManagementCmd; + } + + public AbstractEngineConfiguration setSchemaManagementCmd(Command schemaManagementCmd) { + this.schemaManagementCmd = schemaManagementCmd; + return this; + } + + public String getJdbcDriver() { + return jdbcDriver; + } + + public AbstractEngineConfiguration setJdbcDriver(String jdbcDriver) { + this.jdbcDriver = jdbcDriver; + return this; + } + + public String getJdbcUrl() { + return jdbcUrl; + } + + public AbstractEngineConfiguration setJdbcUrl(String jdbcUrl) { + this.jdbcUrl = jdbcUrl; + return this; + } + + public String getJdbcUsername() { + return jdbcUsername; + } + + public AbstractEngineConfiguration setJdbcUsername(String jdbcUsername) { + this.jdbcUsername = jdbcUsername; + return this; + } + + public String getJdbcPassword() { + return jdbcPassword; + } + + public AbstractEngineConfiguration setJdbcPassword(String jdbcPassword) { + this.jdbcPassword = jdbcPassword; + return this; + } + + public int getJdbcMaxActiveConnections() { + return jdbcMaxActiveConnections; + } + + public AbstractEngineConfiguration setJdbcMaxActiveConnections(int jdbcMaxActiveConnections) { + this.jdbcMaxActiveConnections = jdbcMaxActiveConnections; + return this; + } + + public int getJdbcMaxIdleConnections() { + return jdbcMaxIdleConnections; + } + + public AbstractEngineConfiguration setJdbcMaxIdleConnections(int jdbcMaxIdleConnections) { + this.jdbcMaxIdleConnections = jdbcMaxIdleConnections; + return this; + } + + public int getJdbcMaxCheckoutTime() { + return jdbcMaxCheckoutTime; + } + + public AbstractEngineConfiguration setJdbcMaxCheckoutTime(int jdbcMaxCheckoutTime) { + this.jdbcMaxCheckoutTime = jdbcMaxCheckoutTime; + return this; + } + + public int getJdbcMaxWaitTime() { + return jdbcMaxWaitTime; + } + + public AbstractEngineConfiguration setJdbcMaxWaitTime(int jdbcMaxWaitTime) { + this.jdbcMaxWaitTime = jdbcMaxWaitTime; + return this; + } + + public boolean isJdbcPingEnabled() { + return jdbcPingEnabled; + } + + public AbstractEngineConfiguration setJdbcPingEnabled(boolean jdbcPingEnabled) { + this.jdbcPingEnabled = jdbcPingEnabled; + return this; + } + + public int getJdbcPingConnectionNotUsedFor() { + return jdbcPingConnectionNotUsedFor; + } + + public AbstractEngineConfiguration setJdbcPingConnectionNotUsedFor(int jdbcPingConnectionNotUsedFor) { + this.jdbcPingConnectionNotUsedFor = jdbcPingConnectionNotUsedFor; + return this; + } + + public int getJdbcDefaultTransactionIsolationLevel() { + return jdbcDefaultTransactionIsolationLevel; + } + + public AbstractEngineConfiguration setJdbcDefaultTransactionIsolationLevel(int jdbcDefaultTransactionIsolationLevel) { + this.jdbcDefaultTransactionIsolationLevel = jdbcDefaultTransactionIsolationLevel; + return this; + } + + public String getJdbcPingQuery() { + return jdbcPingQuery; + } + + public AbstractEngineConfiguration setJdbcPingQuery(String jdbcPingQuery) { + this.jdbcPingQuery = jdbcPingQuery; + return this; + } + + public String getDataSourceJndiName() { + return dataSourceJndiName; + } + + public AbstractEngineConfiguration setDataSourceJndiName(String dataSourceJndiName) { + this.dataSourceJndiName = dataSourceJndiName; + return this; + } + + public CommandConfig getSchemaCommandConfig() { + return schemaCommandConfig; + } + + public AbstractEngineConfiguration setSchemaCommandConfig(CommandConfig schemaCommandConfig) { + this.schemaCommandConfig = schemaCommandConfig; + return this; + } + + public boolean isTransactionsExternallyManaged() { + return transactionsExternallyManaged; + } + + public AbstractEngineConfiguration setTransactionsExternallyManaged(boolean transactionsExternallyManaged) { + this.transactionsExternallyManaged = transactionsExternallyManaged; + return this; + } + + public Map getBeans() { + return beans; + } + + public AbstractEngineConfiguration setBeans(Map beans) { + this.beans = beans; + return this; + } + + public IdGenerator getIdGenerator() { + return idGenerator; + } + + public AbstractEngineConfiguration setIdGenerator(IdGenerator idGenerator) { + this.idGenerator = idGenerator; + return this; + } + + public boolean isUsePrefixId() { + return usePrefixId; + } + + public AbstractEngineConfiguration setUsePrefixId(boolean usePrefixId) { + this.usePrefixId = usePrefixId; + return this; + } + + public String getXmlEncoding() { + return xmlEncoding; + } + + public AbstractEngineConfiguration setXmlEncoding(String xmlEncoding) { + this.xmlEncoding = xmlEncoding; + return this; + } + + public CommandConfig getDefaultCommandConfig() { + return defaultCommandConfig; + } + + public AbstractEngineConfiguration setDefaultCommandConfig(CommandConfig defaultCommandConfig) { + this.defaultCommandConfig = defaultCommandConfig; + return this; + } + + public CommandExecutor getCommandExecutor() { + return commandExecutor; + } + + public AbstractEngineConfiguration setCommandExecutor(CommandExecutor commandExecutor) { + this.commandExecutor = commandExecutor; + return this; + } + + public CommandContextFactory getCommandContextFactory() { + return commandContextFactory; + } + + public AbstractEngineConfiguration setCommandContextFactory(CommandContextFactory commandContextFactory) { + this.commandContextFactory = commandContextFactory; + return this; + } + + public CommandInterceptor getCommandInvoker() { + return commandInvoker; + } + + public AbstractEngineConfiguration setCommandInvoker(CommandInterceptor commandInvoker) { + this.commandInvoker = commandInvoker; + return this; + } + + public AgendaOperationRunner getAgendaOperationRunner() { + return agendaOperationRunner; + } + + public AbstractEngineConfiguration setAgendaOperationRunner(AgendaOperationRunner agendaOperationRunner) { + this.agendaOperationRunner = agendaOperationRunner; + return this; + } + + public List getCustomPreCommandInterceptors() { + return customPreCommandInterceptors; + } + + public AbstractEngineConfiguration setCustomPreCommandInterceptors(List customPreCommandInterceptors) { + this.customPreCommandInterceptors = customPreCommandInterceptors; + return this; + } + + public List getCustomPostCommandInterceptors() { + return customPostCommandInterceptors; + } + + public AbstractEngineConfiguration setCustomPostCommandInterceptors(List customPostCommandInterceptors) { + this.customPostCommandInterceptors = customPostCommandInterceptors; + return this; + } + + public List getCommandInterceptors() { + return commandInterceptors; + } + + public AbstractEngineConfiguration setCommandInterceptors(List commandInterceptors) { + this.commandInterceptors = commandInterceptors; + return this; + } + + public Map getEngineConfigurations() { + return engineConfigurations; + } + + public AbstractEngineConfiguration setEngineConfigurations(Map engineConfigurations) { + this.engineConfigurations = engineConfigurations; + return this; + } + + public void addEngineConfiguration(String key, String scopeType, AbstractEngineConfiguration engineConfiguration) { + if (engineConfigurations == null) { + engineConfigurations = new HashMap<>(); + } + engineConfigurations.put(key, engineConfiguration); + engineConfigurations.put(scopeType, engineConfiguration); + } + + public Map getServiceConfigurations() { + return serviceConfigurations; + } + + public AbstractEngineConfiguration setServiceConfigurations(Map serviceConfigurations) { + this.serviceConfigurations = serviceConfigurations; + return this; + } + + public void addServiceConfiguration(String key, AbstractServiceConfiguration serviceConfiguration) { + if (serviceConfigurations == null) { + serviceConfigurations = new HashMap<>(); + } + serviceConfigurations.put(key, serviceConfiguration); + } + + public Map getEventRegistryEventConsumers() { + return eventRegistryEventConsumers; + } + + public AbstractEngineConfiguration setEventRegistryEventConsumers(Map eventRegistryEventConsumers) { + this.eventRegistryEventConsumers = eventRegistryEventConsumers; + return this; + } + + public void addEventRegistryEventConsumer(String key, EventRegistryEventConsumer eventRegistryEventConsumer) { + if (eventRegistryEventConsumers == null) { + eventRegistryEventConsumers = new HashMap<>(); + } + eventRegistryEventConsumers.put(key, eventRegistryEventConsumer); + } + + public AbstractEngineConfiguration setDefaultCommandInterceptors(Collection defaultCommandInterceptors) { + this.defaultCommandInterceptors = defaultCommandInterceptors; + return this; + } + + public SqlSessionFactory getSqlSessionFactory() { + return sqlSessionFactory; + } + + public AbstractEngineConfiguration setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { + this.sqlSessionFactory = sqlSessionFactory; + return this; + } + + public boolean isDbHistoryUsed() { + return isDbHistoryUsed; + } + + public AbstractEngineConfiguration setDbHistoryUsed(boolean isDbHistoryUsed) { + this.isDbHistoryUsed = isDbHistoryUsed; + return this; + } + + public DbSqlSessionFactory getDbSqlSessionFactory() { + return dbSqlSessionFactory; + } + + public AbstractEngineConfiguration setDbSqlSessionFactory(DbSqlSessionFactory dbSqlSessionFactory) { + this.dbSqlSessionFactory = dbSqlSessionFactory; + return this; + } + + public TransactionFactory getTransactionFactory() { + return transactionFactory; + } + + public AbstractEngineConfiguration setTransactionFactory(TransactionFactory transactionFactory) { + this.transactionFactory = transactionFactory; + return this; + } + + public TransactionContextFactory getTransactionContextFactory() { + return transactionContextFactory; + } + + public AbstractEngineConfiguration setTransactionContextFactory(TransactionContextFactory transactionContextFactory) { + this.transactionContextFactory = transactionContextFactory; + return this; + } + + public int getMaxNrOfStatementsInBulkInsert() { + return maxNrOfStatementsInBulkInsert; + } + + public AbstractEngineConfiguration setMaxNrOfStatementsInBulkInsert(int maxNrOfStatementsInBulkInsert) { + this.maxNrOfStatementsInBulkInsert = maxNrOfStatementsInBulkInsert; + return this; + } + + public boolean isBulkInsertEnabled() { + return isBulkInsertEnabled; + } + + public AbstractEngineConfiguration setBulkInsertEnabled(boolean isBulkInsertEnabled) { + this.isBulkInsertEnabled = isBulkInsertEnabled; + return this; + } + + public Set> getCustomMybatisMappers() { + return customMybatisMappers; + } + + public AbstractEngineConfiguration setCustomMybatisMappers(Set> customMybatisMappers) { + this.customMybatisMappers = customMybatisMappers; + return this; + } + + public Set getCustomMybatisXMLMappers() { + return customMybatisXMLMappers; + } + + public AbstractEngineConfiguration setCustomMybatisXMLMappers(Set customMybatisXMLMappers) { + this.customMybatisXMLMappers = customMybatisXMLMappers; + return this; + } + + public Set getDependentEngineMyBatisXmlMappers() { + return dependentEngineMyBatisXmlMappers; + } + + public AbstractEngineConfiguration setCustomMybatisInterceptors(List customMybatisInterceptors) { + this.customMybatisInterceptors = customMybatisInterceptors; + return this; + } + + public List getCustomMybatisInterceptors() { + return customMybatisInterceptors; + } + + public AbstractEngineConfiguration setDependentEngineMyBatisXmlMappers(Set dependentEngineMyBatisXmlMappers) { + this.dependentEngineMyBatisXmlMappers = dependentEngineMyBatisXmlMappers; + return this; + } + + public List getDependentEngineMybatisTypeAliasConfigs() { + return dependentEngineMybatisTypeAliasConfigs; + } + + public AbstractEngineConfiguration setDependentEngineMybatisTypeAliasConfigs(List dependentEngineMybatisTypeAliasConfigs) { + this.dependentEngineMybatisTypeAliasConfigs = dependentEngineMybatisTypeAliasConfigs; + return this; + } + + public List getDependentEngineMybatisTypeHandlerConfigs() { + return dependentEngineMybatisTypeHandlerConfigs; + } + + public AbstractEngineConfiguration setDependentEngineMybatisTypeHandlerConfigs(List dependentEngineMybatisTypeHandlerConfigs) { + this.dependentEngineMybatisTypeHandlerConfigs = dependentEngineMybatisTypeHandlerConfigs; + return this; + } + + public List getCustomSessionFactories() { + return customSessionFactories; + } + + public AbstractEngineConfiguration addCustomSessionFactory(SessionFactory sessionFactory) { + if (customSessionFactories == null) { + customSessionFactories = new ArrayList<>(); + } + customSessionFactories.add(sessionFactory); + return this; + } + + public AbstractEngineConfiguration setCustomSessionFactories(List customSessionFactories) { + this.customSessionFactories = customSessionFactories; + return this; + } + + public boolean isUsingRelationalDatabase() { + return usingRelationalDatabase; + } + + public AbstractEngineConfiguration setUsingRelationalDatabase(boolean usingRelationalDatabase) { + this.usingRelationalDatabase = usingRelationalDatabase; + return this; + } + + public boolean isUsingSchemaMgmt() { + return usingSchemaMgmt; + } + + public AbstractEngineConfiguration setUsingSchemaMgmt(boolean usingSchema) { + this.usingSchemaMgmt = usingSchema; + return this; + } + + public String getDatabaseTablePrefix() { + return databaseTablePrefix; + } + + public AbstractEngineConfiguration setDatabaseTablePrefix(String databaseTablePrefix) { + this.databaseTablePrefix = databaseTablePrefix; + return this; + } + + public String getDatabaseWildcardEscapeCharacter() { + return databaseWildcardEscapeCharacter; + } + + public AbstractEngineConfiguration setDatabaseWildcardEscapeCharacter(String databaseWildcardEscapeCharacter) { + this.databaseWildcardEscapeCharacter = databaseWildcardEscapeCharacter; + return this; + } + + public String getDatabaseCatalog() { + return databaseCatalog; + } + + public AbstractEngineConfiguration setDatabaseCatalog(String databaseCatalog) { + this.databaseCatalog = databaseCatalog; + return this; + } + + public String getDatabaseSchema() { + return databaseSchema; + } + + public AbstractEngineConfiguration setDatabaseSchema(String databaseSchema) { + this.databaseSchema = databaseSchema; + return this; + } + + public boolean isTablePrefixIsSchema() { + return tablePrefixIsSchema; + } + + public AbstractEngineConfiguration setTablePrefixIsSchema(boolean tablePrefixIsSchema) { + this.tablePrefixIsSchema = tablePrefixIsSchema; + return this; + } + + public boolean isAlwaysLookupLatestDefinitionVersion() { + return alwaysLookupLatestDefinitionVersion; + } + + public AbstractEngineConfiguration setAlwaysLookupLatestDefinitionVersion(boolean alwaysLookupLatestDefinitionVersion) { + this.alwaysLookupLatestDefinitionVersion = alwaysLookupLatestDefinitionVersion; + return this; + } + + public boolean isFallbackToDefaultTenant() { + return fallbackToDefaultTenant; + } + + public AbstractEngineConfiguration setFallbackToDefaultTenant(boolean fallbackToDefaultTenant) { + this.fallbackToDefaultTenant = fallbackToDefaultTenant; + return this; + } + + /** + * @return name of the default tenant + * @deprecated use {@link AbstractEngineConfiguration#getDefaultTenantProvider()} instead + */ + @Deprecated + public String getDefaultTenantValue() { + return getDefaultTenantProvider().getDefaultTenant(null, null, null); + } + + public AbstractEngineConfiguration setDefaultTenantValue(String defaultTenantValue) { + this.defaultTenantProvider = (tenantId, scope, scopeKey) -> defaultTenantValue; + return this; + } + + public DefaultTenantProvider getDefaultTenantProvider() { + return defaultTenantProvider; + } + + public AbstractEngineConfiguration setDefaultTenantProvider(DefaultTenantProvider defaultTenantProvider) { + this.defaultTenantProvider = defaultTenantProvider; + return this; + } + + public boolean isEnableLogSqlExecutionTime() { + return enableLogSqlExecutionTime; + } + + public void setEnableLogSqlExecutionTime(boolean enableLogSqlExecutionTime) { + this.enableLogSqlExecutionTime = enableLogSqlExecutionTime; + } + + public Map, SessionFactory> getSessionFactories() { + return sessionFactories; + } + + public AbstractEngineConfiguration setSessionFactories(Map, SessionFactory> sessionFactories) { + this.sessionFactories = sessionFactories; + return this; + } + + public String getDatabaseSchemaUpdate() { + return databaseSchemaUpdate; + } + + public AbstractEngineConfiguration setDatabaseSchemaUpdate(String databaseSchemaUpdate) { + this.databaseSchemaUpdate = databaseSchemaUpdate; + return this; + } + + public boolean isUseLockForDatabaseSchemaUpdate() { + return useLockForDatabaseSchemaUpdate; + } + + public AbstractEngineConfiguration setUseLockForDatabaseSchemaUpdate(boolean useLockForDatabaseSchemaUpdate) { + this.useLockForDatabaseSchemaUpdate = useLockForDatabaseSchemaUpdate; + return this; + } + + public boolean isEnableEventDispatcher() { + return enableEventDispatcher; + } + + public AbstractEngineConfiguration setEnableEventDispatcher(boolean enableEventDispatcher) { + this.enableEventDispatcher = enableEventDispatcher; + return this; + } + + public FlowableEventDispatcher getEventDispatcher() { + return eventDispatcher; + } + + public AbstractEngineConfiguration setEventDispatcher(FlowableEventDispatcher eventDispatcher) { + this.eventDispatcher = eventDispatcher; + return this; + } + + public List getEventListeners() { + return eventListeners; + } + + public AbstractEngineConfiguration setEventListeners(List eventListeners) { + this.eventListeners = eventListeners; + return this; + } + + public Map> getTypedEventListeners() { + return typedEventListeners; + } + + public AbstractEngineConfiguration setTypedEventListeners(Map> typedEventListeners) { + this.typedEventListeners = typedEventListeners; + return this; + } + + public List getAdditionalEventDispatchActions() { + return additionalEventDispatchActions; + } + + public AbstractEngineConfiguration setAdditionalEventDispatchActions(List additionalEventDispatchActions) { + this.additionalEventDispatchActions = additionalEventDispatchActions; + return this; + } + + public void initEventDispatcher() { + if (this.eventDispatcher == null) { + this.eventDispatcher = new FlowableEventDispatcherImpl(); + } + + initAdditionalEventDispatchActions(); + + this.eventDispatcher.setEnabled(enableEventDispatcher); + + initEventListeners(); + initTypedEventListeners(); + } + + protected void initEventListeners() { + if (eventListeners != null) { + for (FlowableEventListener listenerToAdd : eventListeners) { + this.eventDispatcher.addEventListener(listenerToAdd); + } + } + } + + protected void initAdditionalEventDispatchActions() { + if (this.additionalEventDispatchActions == null) { + this.additionalEventDispatchActions = new ArrayList<>(); + } + } + + protected void initTypedEventListeners() { + if (typedEventListeners != null) { + for (Map.Entry> listenersToAdd : typedEventListeners.entrySet()) { + // Extract types from the given string + FlowableEngineEventType[] types = FlowableEngineEventType.getTypesFromString(listenersToAdd.getKey()); + + for (FlowableEventListener listenerToAdd : listenersToAdd.getValue()) { + this.eventDispatcher.addEventListener(listenerToAdd, types); + } + } + } + } + + public boolean isLoggingSessionEnabled() { + return loggingListener != null; + } + + public LoggingListener getLoggingListener() { + return loggingListener; + } + + public void setLoggingListener(LoggingListener loggingListener) { + this.loggingListener = loggingListener; + } + + public Clock getClock() { + return clock; + } + + public AbstractEngineConfiguration setClock(Clock clock) { + this.clock = clock; + return this; + } + + public ObjectMapper getObjectMapper() { + return objectMapper; + } + + public AbstractEngineConfiguration setObjectMapper(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + return this; + } + + public int getMaxLengthString() { + if (maxLengthStringVariableType == -1) { + if ("oracle".equalsIgnoreCase(databaseType)) { + return DEFAULT_ORACLE_MAX_LENGTH_STRING; + } else { + return DEFAULT_GENERIC_MAX_LENGTH_STRING; + } + } else { + return maxLengthStringVariableType; + } + } + + public int getMaxLengthStringVariableType() { + return maxLengthStringVariableType; + } + + public AbstractEngineConfiguration setMaxLengthStringVariableType(int maxLengthStringVariableType) { + this.maxLengthStringVariableType = maxLengthStringVariableType; + return this; + } + + public PropertyDataManager getPropertyDataManager() { + return propertyDataManager; + } + + public Duration getLockPollRate() { + return lockPollRate; + } + + public AbstractEngineConfiguration setLockPollRate(Duration lockPollRate) { + this.lockPollRate = lockPollRate; + return this; + } + + public Duration getSchemaLockWaitTime() { + return schemaLockWaitTime; + } + + public void setSchemaLockWaitTime(Duration schemaLockWaitTime) { + this.schemaLockWaitTime = schemaLockWaitTime; + } + + public AbstractEngineConfiguration setPropertyDataManager(PropertyDataManager propertyDataManager) { + this.propertyDataManager = propertyDataManager; + return this; + } + + public PropertyEntityManager getPropertyEntityManager() { + return propertyEntityManager; + } + + public AbstractEngineConfiguration setPropertyEntityManager(PropertyEntityManager propertyEntityManager) { + this.propertyEntityManager = propertyEntityManager; + return this; + } + + public ByteArrayDataManager getByteArrayDataManager() { + return byteArrayDataManager; + } + + public AbstractEngineConfiguration setByteArrayDataManager(ByteArrayDataManager byteArrayDataManager) { + this.byteArrayDataManager = byteArrayDataManager; + return this; + } + + public ByteArrayEntityManager getByteArrayEntityManager() { + return byteArrayEntityManager; + } + + public AbstractEngineConfiguration setByteArrayEntityManager(ByteArrayEntityManager byteArrayEntityManager) { + this.byteArrayEntityManager = byteArrayEntityManager; + return this; + } + + public TableDataManager getTableDataManager() { + return tableDataManager; + } + + public AbstractEngineConfiguration setTableDataManager(TableDataManager tableDataManager) { + this.tableDataManager = tableDataManager; + return this; + } + + public List getDeployers() { + return deployers; + } + + public AbstractEngineConfiguration setDeployers(List deployers) { + this.deployers = deployers; + return this; + } + + public List getCustomPreDeployers() { + return customPreDeployers; + } + + public AbstractEngineConfiguration setCustomPreDeployers(List customPreDeployers) { + this.customPreDeployers = customPreDeployers; + return this; + } + + public List getCustomPostDeployers() { + return customPostDeployers; + } + + public AbstractEngineConfiguration setCustomPostDeployers(List customPostDeployers) { + this.customPostDeployers = customPostDeployers; + return this; + } + + public boolean isEnableConfiguratorServiceLoader() { + return enableConfiguratorServiceLoader; + } + + public AbstractEngineConfiguration setEnableConfiguratorServiceLoader(boolean enableConfiguratorServiceLoader) { + this.enableConfiguratorServiceLoader = enableConfiguratorServiceLoader; + return this; + } + + public List getConfigurators() { + return configurators; + } + + public AbstractEngineConfiguration addConfigurator(EngineConfigurator configurator) { + if (configurators == null) { + configurators = new ArrayList<>(); + } + configurators.add(configurator); + return this; + } + + /** + * @return All {@link EngineConfigurator} instances. Will only contain values after init of the engine. + * Use the {@link #getConfigurators()} or {@link #addConfigurator(EngineConfigurator)} methods otherwise. + */ + public List getAllConfigurators() { + return allConfigurators; + } + + public AbstractEngineConfiguration setConfigurators(List configurators) { + this.configurators = configurators; + return this; + } + + public EngineConfigurator getIdmEngineConfigurator() { + return idmEngineConfigurator; + } + + public AbstractEngineConfiguration setIdmEngineConfigurator(EngineConfigurator idmEngineConfigurator) { + this.idmEngineConfigurator = idmEngineConfigurator; + return this; + } + + public EngineConfigurator getEventRegistryConfigurator() { + return eventRegistryConfigurator; + } + + public AbstractEngineConfiguration setEventRegistryConfigurator(EngineConfigurator eventRegistryConfigurator) { + this.eventRegistryConfigurator = eventRegistryConfigurator; + return this; + } + + public AbstractEngineConfiguration setForceCloseMybatisConnectionPool(boolean forceCloseMybatisConnectionPool) { + this.forceCloseMybatisConnectionPool = forceCloseMybatisConnectionPool; + return this; + } + + public boolean isForceCloseMybatisConnectionPool() { + return forceCloseMybatisConnectionPool; + } +} diff --git a/sql/dm/flowable-patch/src/main/resources/META-INF/package-info.md b/sql/dm/flowable-patch/src/main/resources/META-INF/package-info.md new file mode 100644 index 0000000..1932c7a --- /dev/null +++ b/sql/dm/flowable-patch/src/main/resources/META-INF/package-info.md @@ -0,0 +1 @@ +防止IDEA将`.`和`/`混为一谈 \ No newline at end of file diff --git a/sql/dm/flowable-patch/src/main/resources/META-INF/services/liquibase.database.Database b/sql/dm/flowable-patch/src/main/resources/META-INF/services/liquibase.database.Database new file mode 100644 index 0000000..efbcfcc --- /dev/null +++ b/sql/dm/flowable-patch/src/main/resources/META-INF/services/liquibase.database.Database @@ -0,0 +1,21 @@ +liquibase.database.core.CockroachDatabase +liquibase.database.core.DB2Database +liquibase.database.core.Db2zDatabase +liquibase.database.core.DerbyDatabase +liquibase.database.core.Firebird3Database +liquibase.database.core.FirebirdDatabase +liquibase.database.core.H2Database +liquibase.database.core.HsqlDatabase +liquibase.database.core.InformixDatabase +liquibase.database.core.Ingres9Database +liquibase.database.core.MSSQLDatabase +liquibase.database.core.MariaDBDatabase +liquibase.database.core.MockDatabase +liquibase.database.core.MySQLDatabase +liquibase.database.core.OracleDatabase +liquibase.database.core.PostgresDatabase +liquibase.database.core.SQLiteDatabase +liquibase.database.core.SybaseASADatabase +liquibase.database.core.SybaseDatabase +liquibase.database.core.DmDatabase +liquibase.database.core.UnsupportedDatabase diff --git a/sql/dm/ruoyi-vue-pro-dm8.sql b/sql/dm/ruoyi-vue-pro-dm8.sql new file mode 100644 index 0000000..585d679 --- /dev/null +++ b/sql/dm/ruoyi-vue-pro-dm8.sql @@ -0,0 +1,4349 @@ +/* + Win Database Transfer Tool + + Source Server Type : MySQL + + Target Server Type : DM8 + + Date: 2024-05-03 22:21:06 +*/ + + +-- ---------------------------- +-- Table structure for infra_api_access_log +-- ---------------------------- +CREATE TABLE infra_api_access_log +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + trace_id varchar(64) DEFAULT '' NULL, + user_id bigint DEFAULT 0 NOT NULL, + user_type smallint DEFAULT 0 NOT NULL, + application_name varchar(50) NOT NULL, + request_method varchar(16) DEFAULT '' NULL, + request_url varchar(255) DEFAULT '' NULL, + request_params text NULL, + response_body text NULL, + user_ip varchar(50) NOT NULL, + user_agent varchar(512) NOT NULL, + operate_module varchar(50) DEFAULT NULL NULL, + operate_name varchar(50) DEFAULT NULL NULL, + operate_type smallint DEFAULT 0 NULL, + begin_time datetime NOT NULL, + end_time datetime NOT NULL, + duration int NOT NULL, + result_code int DEFAULT 0 NOT NULL, + result_msg varchar(512) DEFAULT '' NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +CREATE INDEX idx_infra_api_access_log_01 ON infra_api_access_log (create_time); + +COMMENT ON COLUMN infra_api_access_log.id IS '��־����'; +COMMENT ON COLUMN infra_api_access_log.trace_id IS '��·׷�ٱ��'; +COMMENT ON COLUMN infra_api_access_log.user_id IS '�û����'; +COMMENT ON COLUMN infra_api_access_log.user_type IS '�û�����'; +COMMENT ON COLUMN infra_api_access_log.application_name IS 'Ӧ����'; +COMMENT ON COLUMN infra_api_access_log.request_method IS '���󷽷���'; +COMMENT ON COLUMN infra_api_access_log.request_url IS '�����ַ'; +COMMENT ON COLUMN infra_api_access_log.request_params IS '�������'; +COMMENT ON COLUMN infra_api_access_log.response_body IS '��Ӧ���'; +COMMENT ON COLUMN infra_api_access_log.user_ip IS '�û� IP'; +COMMENT ON COLUMN infra_api_access_log.user_agent IS '����� UA'; +COMMENT ON COLUMN infra_api_access_log.operate_module IS '����ģ��'; +COMMENT ON COLUMN infra_api_access_log.operate_name IS '������'; +COMMENT ON COLUMN infra_api_access_log.operate_type IS '��������'; +COMMENT ON COLUMN infra_api_access_log.begin_time IS '��ʼ����ʱ��'; +COMMENT ON COLUMN infra_api_access_log.end_time IS '��������ʱ��'; +COMMENT ON COLUMN infra_api_access_log.duration IS 'ִ��ʱ��'; +COMMENT ON COLUMN infra_api_access_log.result_code IS '�����'; +COMMENT ON COLUMN infra_api_access_log.result_msg IS '�����ʾ'; +COMMENT ON COLUMN infra_api_access_log.creator IS '������'; +COMMENT ON COLUMN infra_api_access_log.create_time IS '����ʱ��'; +COMMENT ON COLUMN infra_api_access_log.updater IS '������'; +COMMENT ON COLUMN infra_api_access_log.update_time IS '����ʱ��'; +COMMENT ON COLUMN infra_api_access_log.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN infra_api_access_log.tenant_id IS '�⻧���'; +COMMENT ON TABLE infra_api_access_log IS 'API ������־��'; + +-- ---------------------------- +-- Table structure for infra_api_error_log +-- ---------------------------- +CREATE TABLE infra_api_error_log +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + trace_id varchar(64) NOT NULL, + user_id int DEFAULT 0 NOT NULL, + user_type smallint DEFAULT 0 NOT NULL, + application_name varchar(50) NOT NULL, + request_method varchar(16) NOT NULL, + request_url varchar(255) NOT NULL, + request_params varchar(8000) NOT NULL, + user_ip varchar(50) NOT NULL, + user_agent varchar(512) NOT NULL, + exception_time datetime NOT NULL, + exception_name varchar(128) DEFAULT '' NULL, + exception_message text NOT NULL, + exception_root_cause_message text NOT NULL, + exception_stack_trace text NOT NULL, + exception_class_name varchar(512) NOT NULL, + exception_file_name varchar(512) NOT NULL, + exception_method_name varchar(512) NOT NULL, + exception_line_number int NOT NULL, + process_status smallint NOT NULL, + process_time datetime DEFAULT NULL NULL, + process_user_id int DEFAULT 0 NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN infra_api_error_log.id IS '���'; +COMMENT ON COLUMN infra_api_error_log.trace_id IS '��·׷�ٱ�� + * + * һ����˵��ͨ����·׷�ٱ�ţ����Խ�������־��������־����·׷����־��logger ��ӡ��־�ȣ������һ�𣬴Ӷ������Ŵ�'; +COMMENT ON COLUMN infra_api_error_log.user_id IS '�û����'; +COMMENT ON COLUMN infra_api_error_log.user_type IS '�û�����'; +COMMENT ON COLUMN infra_api_error_log.application_name IS 'Ӧ���� + * + * Ŀǰ��ȡ spring.application.name'; +COMMENT ON COLUMN infra_api_error_log.request_method IS '���󷽷���'; +COMMENT ON COLUMN infra_api_error_log.request_url IS '�����ַ'; +COMMENT ON COLUMN infra_api_error_log.request_params IS '�������'; +COMMENT ON COLUMN infra_api_error_log.user_ip IS '�û� IP'; +COMMENT ON COLUMN infra_api_error_log.user_agent IS '����� UA'; +COMMENT ON COLUMN infra_api_error_log.exception_time IS '�쳣����ʱ��'; +COMMENT ON COLUMN infra_api_error_log.exception_name IS '�쳣�� + * + * {@link Throwable#getClass()} ����ȫ��'; +COMMENT ON COLUMN infra_api_error_log.exception_message IS '�쳣���µ���Ϣ + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getMessage(Throwable)}'; +COMMENT ON COLUMN infra_api_error_log.exception_root_cause_message IS '�쳣���µĸ���Ϣ + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getRootCauseMessage(Throwable)}'; +COMMENT ON COLUMN infra_api_error_log.exception_stack_trace IS '�쳣��ջ�켣 + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getServiceException(Exception)}'; +COMMENT ON COLUMN infra_api_error_log.exception_class_name IS '�쳣��������ȫ�� + * + * {@link StackTraceElement#getClassName()}'; +COMMENT ON COLUMN infra_api_error_log.exception_file_name IS '�쳣���������ļ� + * + * {@link StackTraceElement#getFileName()}'; +COMMENT ON COLUMN infra_api_error_log.exception_method_name IS '�쳣�����ķ����� + * + * {@link StackTraceElement#getMethodName()}'; +COMMENT ON COLUMN infra_api_error_log.exception_line_number IS '�쳣�����ķ��������� + * + * {@link StackTraceElement#getLineNumber()}'; +COMMENT ON COLUMN infra_api_error_log.process_status IS '����״̬'; +COMMENT ON COLUMN infra_api_error_log.process_time IS '����ʱ��'; +COMMENT ON COLUMN infra_api_error_log.process_user_id IS '�����û����'; +COMMENT ON COLUMN infra_api_error_log.creator IS '������'; +COMMENT ON COLUMN infra_api_error_log.create_time IS '����ʱ��'; +COMMENT ON COLUMN infra_api_error_log.updater IS '������'; +COMMENT ON COLUMN infra_api_error_log.update_time IS '����ʱ��'; +COMMENT ON COLUMN infra_api_error_log.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN infra_api_error_log.tenant_id IS '�⻧���'; +COMMENT ON TABLE infra_api_error_log IS 'ϵͳ�쳣��־'; + +-- ---------------------------- +-- Table structure for infra_codegen_column +-- ---------------------------- +CREATE TABLE infra_codegen_column +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + table_id bigint NOT NULL, + column_name varchar(200) NOT NULL, + data_type varchar(100) NOT NULL, + column_comment varchar(500) NOT NULL, + nullable bit NOT NULL, + primary_key bit NOT NULL, + ordinal_position int NOT NULL, + java_type varchar(32) NOT NULL, + java_field varchar(64) NOT NULL, + dict_type varchar(200) DEFAULT '' NULL, + example varchar(64) DEFAULT NULL NULL, + create_operation bit NOT NULL, + update_operation bit NOT NULL, + list_operation bit NOT NULL, + list_operation_condition varchar(32) DEFAULT '=' NOT NULL, + list_operation_result bit NOT NULL, + html_type varchar(32) NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN infra_codegen_column.id IS '���'; +COMMENT ON COLUMN infra_codegen_column.table_id IS '����'; +COMMENT ON COLUMN infra_codegen_column.column_name IS '�ֶ���'; +COMMENT ON COLUMN infra_codegen_column.data_type IS '�ֶ�����'; +COMMENT ON COLUMN infra_codegen_column.column_comment IS '�ֶ�����'; +COMMENT ON COLUMN infra_codegen_column.nullable IS '�Ƿ�����Ϊ��'; +COMMENT ON COLUMN infra_codegen_column.primary_key IS '�Ƿ�����'; +COMMENT ON COLUMN infra_codegen_column.ordinal_position IS '����'; +COMMENT ON COLUMN infra_codegen_column.java_type IS 'Java ��������'; +COMMENT ON COLUMN infra_codegen_column.java_field IS 'Java ������'; +COMMENT ON COLUMN infra_codegen_column.dict_type IS '�ֵ�����'; +COMMENT ON COLUMN infra_codegen_column.example IS '����ʾ��'; +COMMENT ON COLUMN infra_codegen_column.create_operation IS '�Ƿ�Ϊ Create �����������ֶ�'; +COMMENT ON COLUMN infra_codegen_column.update_operation IS '�Ƿ�Ϊ Update ���²������ֶ�'; +COMMENT ON COLUMN infra_codegen_column.list_operation IS '�Ƿ�Ϊ List ��ѯ�������ֶ�'; +COMMENT ON COLUMN infra_codegen_column.list_operation_condition IS 'List ��ѯ��������������'; +COMMENT ON COLUMN infra_codegen_column.list_operation_result IS '�Ƿ�Ϊ List ��ѯ�����ķ����ֶ�'; +COMMENT ON COLUMN infra_codegen_column.html_type IS '��ʾ����'; +COMMENT ON COLUMN infra_codegen_column.creator IS '������'; +COMMENT ON COLUMN infra_codegen_column.create_time IS '����ʱ��'; +COMMENT ON COLUMN infra_codegen_column.updater IS '������'; +COMMENT ON COLUMN infra_codegen_column.update_time IS '����ʱ��'; +COMMENT ON COLUMN infra_codegen_column.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE infra_codegen_column IS '�������ɱ��ֶζ���'; + +-- ---------------------------- +-- Table structure for infra_codegen_table +-- ---------------------------- +CREATE TABLE infra_codegen_table +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + data_source_config_id bigint NOT NULL, + scene smallint DEFAULT 1 NOT NULL, + table_name varchar(200) DEFAULT '' NULL, + table_comment varchar(500) DEFAULT '' NULL, + remark varchar(500) DEFAULT NULL NULL, + module_name varchar(30) NOT NULL, + business_name varchar(30) NOT NULL, + class_name varchar(100) DEFAULT '' NULL, + class_comment varchar(50) NOT NULL, + author varchar(50) NOT NULL, + template_type smallint DEFAULT 1 NOT NULL, + front_type smallint NOT NULL, + parent_menu_id bigint DEFAULT NULL NULL, + master_table_id bigint DEFAULT NULL NULL, + sub_join_column_id bigint DEFAULT NULL NULL, + sub_join_many bit DEFAULT NULL NULL, + tree_parent_column_id bigint DEFAULT NULL NULL, + tree_name_column_id bigint DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN infra_codegen_table.id IS '���'; +COMMENT ON COLUMN infra_codegen_table.data_source_config_id IS '����Դ���õı��'; +COMMENT ON COLUMN infra_codegen_table.scene IS '���ɳ���'; +COMMENT ON COLUMN infra_codegen_table.table_name IS '������'; +COMMENT ON COLUMN infra_codegen_table.table_comment IS '������'; +COMMENT ON COLUMN infra_codegen_table.remark IS '��ע'; +COMMENT ON COLUMN infra_codegen_table.module_name IS 'ģ����'; +COMMENT ON COLUMN infra_codegen_table.business_name IS 'ҵ����'; +COMMENT ON COLUMN infra_codegen_table.class_name IS '������'; +COMMENT ON COLUMN infra_codegen_table.class_comment IS '������'; +COMMENT ON COLUMN infra_codegen_table.author IS '����'; +COMMENT ON COLUMN infra_codegen_table.template_type IS 'ģ������'; +COMMENT ON COLUMN infra_codegen_table.front_type IS 'ǰ������'; +COMMENT ON COLUMN infra_codegen_table.parent_menu_id IS '���˵����'; +COMMENT ON COLUMN infra_codegen_table.master_table_id IS '����ı��'; +COMMENT ON COLUMN infra_codegen_table.sub_join_column_id IS '�ӱ����������ֶα��'; +COMMENT ON COLUMN infra_codegen_table.sub_join_many IS '�������ӱ��Ƿ�һ�Զ�'; +COMMENT ON COLUMN infra_codegen_table.tree_parent_column_id IS '����ĸ��ֶα��'; +COMMENT ON COLUMN infra_codegen_table.tree_name_column_id IS '����������ֶα��'; +COMMENT ON COLUMN infra_codegen_table.creator IS '������'; +COMMENT ON COLUMN infra_codegen_table.create_time IS '����ʱ��'; +COMMENT ON COLUMN infra_codegen_table.updater IS '������'; +COMMENT ON COLUMN infra_codegen_table.update_time IS '����ʱ��'; +COMMENT ON COLUMN infra_codegen_table.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE infra_codegen_table IS '�������ɱ���'; + +-- ---------------------------- +-- Table structure for infra_config +-- ---------------------------- +CREATE TABLE infra_config +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + category varchar(50) NOT NULL, + type smallint NOT NULL, + name varchar(100) DEFAULT '' NULL, + config_key varchar(100) DEFAULT '' NULL, + value varchar(500) DEFAULT '' NULL, + visible bit NOT NULL, + remark varchar(500) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN infra_config.id IS '��������'; +COMMENT ON COLUMN infra_config.category IS '��������'; +COMMENT ON COLUMN infra_config.type IS '��������'; +COMMENT ON COLUMN infra_config.name IS '��������'; +COMMENT ON COLUMN infra_config.config_key IS '��������'; +COMMENT ON COLUMN infra_config.value IS '������ֵ'; +COMMENT ON COLUMN infra_config.visible IS '�Ƿ�ɼ�'; +COMMENT ON COLUMN infra_config.remark IS '��ע'; +COMMENT ON COLUMN infra_config.creator IS '������'; +COMMENT ON COLUMN infra_config.create_time IS '����ʱ��'; +COMMENT ON COLUMN infra_config.updater IS '������'; +COMMENT ON COLUMN infra_config.update_time IS '����ʱ��'; +COMMENT ON COLUMN infra_config.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE infra_config IS '�������ñ�'; + +-- ---------------------------- +-- Records of infra_config +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT infra_config ON; +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (2, 'biz', 1, '�û�����-�˺ų�ʼ����', 'sys.user.init-password', '123456', '0', '��ʼ������ 123456', 'admin', '2021-01-05 17:03:48', '1', '2024-04-03 17:22:28', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (7, 'url', 2, 'MySQL ��صĵ�ַ', 'url.druid', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:33:38', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (8, 'url', 2, 'SkyWalking ��صĵ�ַ', 'url.skywalking', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:57:03', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (9, 'url', 2, 'Spring Boot Admin ��صĵ�ַ', 'url.spring-boot-admin', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:52:07', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (10, 'url', 2, 'Swagger �ӿ��ĵ��ĵ�ַ', 'url.swagger', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:59:00', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (11, 'ui', 2, '��Ѷ��ͼ key', 'tencent.lbs.key', 'TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E', '1', '��Ѷ��ͼ key', '1', '2023-06-03 19:16:27', '1', '2023-06-03 19:16:27', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (12, 'test2', 2, 'test3', 'test4', 'test5', '1', 'test6', '1', '2023-12-03 09:55:16', '1', '2023-12-03 09:55:27', '0'); +COMMIT; +SET IDENTITY_INSERT infra_config OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for infra_data_source_config +-- ---------------------------- +CREATE TABLE infra_data_source_config +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(100) DEFAULT '' NULL, + url varchar(1024) NOT NULL, + username varchar(255) NOT NULL, + password varchar(255) DEFAULT '' NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN infra_data_source_config.id IS '�������'; +COMMENT ON COLUMN infra_data_source_config.name IS '��������'; +COMMENT ON COLUMN infra_data_source_config.url IS '����Դ����'; +COMMENT ON COLUMN infra_data_source_config.username IS '�û���'; +COMMENT ON COLUMN infra_data_source_config.password IS '����'; +COMMENT ON COLUMN infra_data_source_config.creator IS '������'; +COMMENT ON COLUMN infra_data_source_config.create_time IS '����ʱ��'; +COMMENT ON COLUMN infra_data_source_config.updater IS '������'; +COMMENT ON COLUMN infra_data_source_config.update_time IS '����ʱ��'; +COMMENT ON COLUMN infra_data_source_config.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE infra_data_source_config IS '����Դ���ñ�'; + +-- ---------------------------- +-- Table structure for infra_file +-- ---------------------------- +CREATE TABLE infra_file +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + config_id bigint DEFAULT NULL NULL, + name varchar(256) DEFAULT NULL NULL, + path varchar(512) NOT NULL, + url varchar(1024) NOT NULL, + type varchar(128) DEFAULT NULL NULL, + size int NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN infra_file.id IS '�ļ����'; +COMMENT ON COLUMN infra_file.config_id IS '���ñ��'; +COMMENT ON COLUMN infra_file.name IS '�ļ���'; +COMMENT ON COLUMN infra_file.path IS '�ļ�·��'; +COMMENT ON COLUMN infra_file.url IS '�ļ� URL'; +COMMENT ON COLUMN infra_file.type IS '�ļ�����'; +COMMENT ON COLUMN infra_file.size IS '�ļ���С'; +COMMENT ON COLUMN infra_file.creator IS '������'; +COMMENT ON COLUMN infra_file.create_time IS '����ʱ��'; +COMMENT ON COLUMN infra_file.updater IS '������'; +COMMENT ON COLUMN infra_file.update_time IS '����ʱ��'; +COMMENT ON COLUMN infra_file.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE infra_file IS '�ļ���'; + +-- ---------------------------- +-- Table structure for infra_file_config +-- ---------------------------- +CREATE TABLE infra_file_config +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(63) NOT NULL, + storage smallint NOT NULL, + remark varchar(255) DEFAULT NULL NULL, + master bit NOT NULL, + config varchar(4096) NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN infra_file_config.id IS '���'; +COMMENT ON COLUMN infra_file_config.name IS '������'; +COMMENT ON COLUMN infra_file_config.storage IS '�洢��'; +COMMENT ON COLUMN infra_file_config.remark IS '��ע'; +COMMENT ON COLUMN infra_file_config.master IS '�Ƿ�Ϊ������'; +COMMENT ON COLUMN infra_file_config.config IS '�洢����'; +COMMENT ON COLUMN infra_file_config.creator IS '������'; +COMMENT ON COLUMN infra_file_config.create_time IS '����ʱ��'; +COMMENT ON COLUMN infra_file_config.updater IS '������'; +COMMENT ON COLUMN infra_file_config.update_time IS '����ʱ��'; +COMMENT ON COLUMN infra_file_config.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE infra_file_config IS '�ļ����ñ�'; + +-- ---------------------------- +-- Records of infra_file_config +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT infra_file_config ON; +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (4, '���ݿ�', 1, '�������ݿ�', '0', '{"@class":"com.win.module.infra.framework.file.core.client.db.DBFileClientConfig","domain":"http://127.0.0.1:48080"}', '1', '2022-03-15 23:56:24', '1', '2024-02-28 22:54:07', '0'); +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (22, '��ţ�洢��', 20, '', '1', '{"@class":"com.win.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"s3.cn-south-1.qiniucs.com","domain":"http://test.win.iocoder.cn","bucket":"ruoyi-vue-pro","accessKey":"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS","accessSecret":"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY"}', '1', '2024-01-13 22:11:12', '1', '2024-04-03 19:38:34', '0'); +COMMIT; +SET IDENTITY_INSERT infra_file_config OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for infra_file_content +-- ---------------------------- +CREATE TABLE infra_file_content +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + config_id bigint NOT NULL, + path varchar(512) NOT NULL, + content varchar(10240) NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN infra_file_content.id IS '���'; +COMMENT ON COLUMN infra_file_content.config_id IS '���ñ��'; +COMMENT ON COLUMN infra_file_content.path IS '�ļ�·��'; +COMMENT ON COLUMN infra_file_content.content IS '�ļ�����'; +COMMENT ON COLUMN infra_file_content.creator IS '������'; +COMMENT ON COLUMN infra_file_content.create_time IS '����ʱ��'; +COMMENT ON COLUMN infra_file_content.updater IS '������'; +COMMENT ON COLUMN infra_file_content.update_time IS '����ʱ��'; +COMMENT ON COLUMN infra_file_content.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE infra_file_content IS '�ļ���'; + +-- ---------------------------- +-- Table structure for infra_job +-- ---------------------------- +CREATE TABLE infra_job +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(32) NOT NULL, + status smallint NOT NULL, + handler_name varchar(64) NOT NULL, + handler_param varchar(255) DEFAULT NULL NULL, + cron_expression varchar(32) NOT NULL, + retry_count int DEFAULT 0 NOT NULL, + retry_interval int DEFAULT 0 NOT NULL, + monitor_timeout int DEFAULT 0 NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN infra_job.id IS '������'; +COMMENT ON COLUMN infra_job.name IS '��������'; +COMMENT ON COLUMN infra_job.status IS '����״̬'; +COMMENT ON COLUMN infra_job.handler_name IS '������������'; +COMMENT ON COLUMN infra_job.handler_param IS '�������IJ���'; +COMMENT ON COLUMN infra_job.cron_expression IS 'CRON ���ʽ'; +COMMENT ON COLUMN infra_job.retry_count IS '���Դ���'; +COMMENT ON COLUMN infra_job.retry_interval IS '���Լ��'; +COMMENT ON COLUMN infra_job.monitor_timeout IS '��س�ʱʱ��'; +COMMENT ON COLUMN infra_job.creator IS '������'; +COMMENT ON COLUMN infra_job.create_time IS '����ʱ��'; +COMMENT ON COLUMN infra_job.updater IS '������'; +COMMENT ON COLUMN infra_job.update_time IS '����ʱ��'; +COMMENT ON COLUMN infra_job.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE infra_job IS '��ʱ�����'; + +-- ---------------------------- +-- Records of infra_job +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT infra_job ON; +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (5, '֧��֪ͨ Job', 2, 'payNotifyJob', NULL, '* * * * * ?', 0, 0, 0, '1', '2021-10-27 08:34:42', '1', '2023-07-09 20:51:41', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (17, '֧������ͬ�� Job', 2, 'payOrderSyncJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-22 14:36:26', '1', '2023-07-22 15:39:08', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (18, '֧���������� Job', 2, 'payOrderExpireJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-22 15:36:23', '1', '2023-07-22 15:39:54', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (19, '�˿����ͬ�� Job', 2, 'payRefundSyncJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-23 21:03:44', '1', '2023-07-23 21:09:00', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (21, '���׶������Զ����� Job', 2, 'tradeOrderAutoCancelJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-25 23:43:26', '1', '2023-09-26 19:23:30', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (22, '���׶������Զ��ջ� Job', 2, 'tradeOrderAutoReceiveJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 19:23:53', '1', '2023-09-26 23:38:08', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (23, '���׶������Զ����� Job', 2, 'tradeOrderAutoCommentJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 23:38:29', '1', '2023-09-27 11:03:10', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (24, 'Ӷ��ⶳ Job', 2, 'brokerageRecordUnfreezeJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-28 22:01:46', '1', '2023-09-28 22:01:56', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (25, '������־���� Job', 2, 'accessLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 10:59:41', '1', '2023-10-03 11:01:10', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (26, '������־���� Job', 2, 'errorLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 11:00:43', '1', '2023-10-03 11:01:12', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (27, '������־���� Job', 2, 'jobLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 11:01:33', '1', '2023-10-03 11:01:42', '0'); +COMMIT; +SET IDENTITY_INSERT infra_job OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for infra_job_log +-- ---------------------------- +CREATE TABLE infra_job_log +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + job_id bigint NOT NULL, + handler_name varchar(64) NOT NULL, + handler_param varchar(255) DEFAULT NULL NULL, + execute_index smallint DEFAULT 1 NOT NULL, + begin_time datetime NOT NULL, + end_time datetime DEFAULT NULL NULL, + duration int DEFAULT NULL NULL, + status smallint NOT NULL, + result varchar(4000) DEFAULT '' NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN infra_job_log.id IS '��־���'; +COMMENT ON COLUMN infra_job_log.job_id IS '������'; +COMMENT ON COLUMN infra_job_log.handler_name IS '������������'; +COMMENT ON COLUMN infra_job_log.handler_param IS '�������IJ���'; +COMMENT ON COLUMN infra_job_log.execute_index IS '�ڼ���ִ��'; +COMMENT ON COLUMN infra_job_log.begin_time IS '��ʼִ��ʱ��'; +COMMENT ON COLUMN infra_job_log.end_time IS '����ִ��ʱ��'; +COMMENT ON COLUMN infra_job_log.duration IS 'ִ��ʱ��'; +COMMENT ON COLUMN infra_job_log.status IS '����״̬'; +COMMENT ON COLUMN infra_job_log.result IS '�������'; +COMMENT ON COLUMN infra_job_log.creator IS '������'; +COMMENT ON COLUMN infra_job_log.create_time IS '����ʱ��'; +COMMENT ON COLUMN infra_job_log.updater IS '������'; +COMMENT ON COLUMN infra_job_log.update_time IS '����ʱ��'; +COMMENT ON COLUMN infra_job_log.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE infra_job_log IS '��ʱ������־��'; + +-- ---------------------------- +-- Table structure for system_dept +-- ---------------------------- +CREATE TABLE system_dept +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(30) DEFAULT '' NULL, + parent_id bigint DEFAULT 0 NOT NULL, + sort int DEFAULT 0 NOT NULL, + leader_user_id bigint DEFAULT NULL NULL, + phone varchar(11) DEFAULT NULL NULL, + email varchar(50) DEFAULT NULL NULL, + status smallint NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_dept.id IS '����id'; +COMMENT ON COLUMN system_dept.name IS '��������'; +COMMENT ON COLUMN system_dept.parent_id IS '������id'; +COMMENT ON COLUMN system_dept.sort IS '��ʾ˳��'; +COMMENT ON COLUMN system_dept.leader_user_id IS '������'; +COMMENT ON COLUMN system_dept.phone IS '��ϵ�绰'; +COMMENT ON COLUMN system_dept.email IS '����'; +COMMENT ON COLUMN system_dept.status IS '����״̬��0���� 1ͣ�ã�'; +COMMENT ON COLUMN system_dept.creator IS '������'; +COMMENT ON COLUMN system_dept.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_dept.updater IS '������'; +COMMENT ON COLUMN system_dept.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_dept.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_dept.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_dept IS '���ű�'; + +-- ---------------------------- +-- Records of system_dept +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_dept ON; +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (100, '���Դ��', 0, 0, 1, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2023-11-14 23:30:36', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (101, '�����ܹ�˾', 100, 1, 104, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2023-12-02 09:53:35', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (102, '��ɳ�ֹ�˾', 100, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:40', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (103, '�з�����', 101, 1, 104, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2024-03-24 20:56:04', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (104, '�г�����', 101, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:38', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (105, '���Բ���', 101, 3, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2022-05-16 20:25:15', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (106, '������', 101, 4, 103, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '103', '2022-01-15 21:32:22', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (107, '��ά����', 101, 5, 1, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2023-12-02 09:28:22', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (108, '�г�����', 102, 1, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2022-02-16 08:35:45', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (109, '������', 102, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:29', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (110, '�²���', 0, 1, NULL, NULL, NULL, 0, '110', '2022-02-23 20:46:30', '110', '2022-02-23 20:46:30', '0', 121); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (111, '��������', 0, 1, NULL, NULL, NULL, 0, '113', '2022-03-07 21:44:50', '113', '2022-03-07 21:44:50', '0', 122); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (112, '��Ʒ����', 101, 100, 1, NULL, NULL, 1, '1', '2023-12-02 09:45:13', '1', '2023-12-02 09:45:31', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (113, '֧�ֲ���', 102, 3, 104, NULL, NULL, 1, '1', '2023-12-02 09:47:38', '1', '2023-12-02 09:47:38', '0', 1); +COMMIT; +SET IDENTITY_INSERT system_dept OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_dict_data +-- ---------------------------- +CREATE TABLE system_dict_data +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + sort int DEFAULT 0 NOT NULL, + label varchar(100) DEFAULT '' NULL, + value varchar(100) DEFAULT '' NULL, + dict_type varchar(100) DEFAULT '' NULL, + status smallint DEFAULT 0 NOT NULL, + color_type varchar(100) DEFAULT '' NULL, + css_class varchar(100) DEFAULT '' NULL, + remark varchar(500) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN system_dict_data.id IS '�ֵ����'; +COMMENT ON COLUMN system_dict_data.sort IS '�ֵ�����'; +COMMENT ON COLUMN system_dict_data.label IS '�ֵ��ǩ'; +COMMENT ON COLUMN system_dict_data.value IS '�ֵ��ֵ'; +COMMENT ON COLUMN system_dict_data.dict_type IS '�ֵ�����'; +COMMENT ON COLUMN system_dict_data.status IS '״̬��0���� 1ͣ�ã�'; +COMMENT ON COLUMN system_dict_data.color_type IS '��ɫ����'; +COMMENT ON COLUMN system_dict_data.css_class IS 'css ��ʽ'; +COMMENT ON COLUMN system_dict_data.remark IS '��ע'; +COMMENT ON COLUMN system_dict_data.creator IS '������'; +COMMENT ON COLUMN system_dict_data.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_dict_data.updater IS '������'; +COMMENT ON COLUMN system_dict_data.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_dict_data.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE system_dict_data IS '�ֵ����ݱ�'; + +-- ---------------------------- +-- Records of system_dict_data +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_dict_data ON; +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1, 1, '��', '1', 'system_user_sex', 0, 'default', 'A', '�Ա���', 'admin', '2021-01-05 17:03:48', '1', '2022-03-29 00:14:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2, 2, 'Ů', '2', 'system_user_sex', 0, 'success', '', '�Ա�Ů', 'admin', '2021-01-05 17:03:48', '1', '2023-11-15 23:30:37', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (8, 1, '����', '1', 'infra_job_status', 0, 'success', '', '����״̬', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:33:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (9, 2, '��ͣ', '2', 'infra_job_status', 0, 'danger', '', 'ͣ��״̬', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:33:45', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (12, 1, 'ϵͳ����', '1', 'infra_config_type', 0, 'danger', '', '�������� - ϵͳ����', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:06:02', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (13, 2, '�Զ���', '2', 'infra_config_type', 0, 'primary', '', '�������� - �Զ���', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:06:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (14, 1, '֪ͨ', '1', 'system_notice_type', 0, 'success', '', '֪ͨ', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:05:57', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (15, 2, '����', '2', 'system_notice_type', 0, 'info', '', '����', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:06:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (16, 0, '����', '0', 'infra_operate_type', 0, 'default', '', '��������', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:19', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (17, 1, '��ѯ', '1', 'infra_operate_type', 0, 'info', '', '��ѯ����', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (18, 2, '����', '2', 'infra_operate_type', 0, 'primary', '', '��������', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:21', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (19, 3, '�޸�', '3', 'infra_operate_type', 0, 'warning', '', '�޸IJ���', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (20, 4, 'ɾ��', '4', 'infra_operate_type', 0, 'danger', '', 'ɾ������', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:23', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (22, 5, '����', '5', 'infra_operate_type', 0, 'default', '', '��������', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:24', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (23, 6, '����', '6', 'infra_operate_type', 0, 'default', '', '�������', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:25', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (27, 1, '����', '0', 'common_status', 0, 'primary', '', '����״̬', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 08:00:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (28, 2, '�ر�', '1', 'common_status', 0, 'info', '', '�ر�״̬', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 08:00:44', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (29, 1, 'Ŀ¼', '1', 'system_menu_type', 0, '', '', 'Ŀ¼', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:45', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (30, 2, '�˵�', '2', 'system_menu_type', 0, '', '', '�˵�', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:41', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (31, 3, '��ť', '3', 'system_menu_type', 0, '', '', '��ť', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (32, 1, '����', '1', 'system_role_type', 0, 'danger', '', '���ý�ɫ', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:02:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (33, 2, '�Զ���', '2', 'system_role_type', 0, 'primary', '', '�Զ����ɫ', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:02:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (34, 1, 'ȫ������Ȩ��', '1', 'system_data_scope', 0, '', '', 'ȫ������Ȩ��', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (35, 2, 'ָ����������Ȩ��', '2', 'system_data_scope', 0, '', '', 'ָ����������Ȩ��', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (36, 3, '����������Ȩ��', '3', 'system_data_scope', 0, '', '', '����������Ȩ��', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (37, 4, '�����ż���������Ȩ��', '4', 'system_data_scope', 0, '', '', '�����ż���������Ȩ��', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:21', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (38, 5, '����������Ȩ��', '5', 'system_data_scope', 0, '', '', '����������Ȩ��', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:23', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (39, 0, '�ɹ�', '0', 'system_login_result', 0, 'success', '', '��½��� - �ɹ�', '', '2021-01-18 06:17:36', '1', '2022-02-16 13:23:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (40, 10, '�˺Ż����벻��ȷ', '10', 'system_login_result', 0, 'primary', '', '��½��� - �˺Ż����벻��ȷ', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:27', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (41, 20, '�û�������', '20', 'system_login_result', 0, 'warning', '', '��½��� - �û�������', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:23:57', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (42, 30, '��֤�벻����', '30', 'system_login_result', 0, 'info', '', '��½��� - ��֤�벻����', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (43, 31, '��֤�벻��ȷ', '31', 'system_login_result', 0, 'info', '', '��½��� - ��֤�벻��ȷ', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:11', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (44, 100, 'δ֪�쳣', '100', 'system_login_result', 0, 'danger', '', '��½��� - δ֪�쳣', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:23', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (45, 1, '��', 'true', 'infra_boolean_string', 0, 'danger', '', 'Boolean �Ƿ����� - ��', '', '2021-01-19 03:20:55', '1', '2022-03-15 23:01:45', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (46, 1, '��', 'false', 'infra_boolean_string', 0, 'info', '', 'Boolean �Ƿ����� - ��', '', '2021-01-19 03:20:55', '1', '2022-03-15 23:09:45', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (50, 1, '������ɾ�IJ飩', '1', 'infra_codegen_template_type', 0, '', '', NULL, '', '2021-02-05 07:09:06', '', '2022-03-10 16:33:15', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (51, 2, '������ɾ�IJ飩', '2', 'infra_codegen_template_type', 0, '', '', NULL, '', '2021-02-05 07:14:46', '', '2022-03-10 16:33:19', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (53, 0, '��ʼ����', '0', 'infra_job_status', 0, 'primary', '', NULL, '', '2021-02-07 07:46:49', '1', '2022-02-16 19:33:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (57, 0, '������', '0', 'infra_job_log_status', 0, 'primary', '', 'RUNNING', '', '2021-02-08 10:04:24', '1', '2022-02-16 19:07:48', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (58, 1, '�ɹ�', '1', 'infra_job_log_status', 0, 'success', '', NULL, '', '2021-02-08 10:06:57', '1', '2022-02-16 19:07:52', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (59, 2, 'ʧ��', '2', 'infra_job_log_status', 0, 'warning', '', 'ʧ��', '', '2021-02-08 10:07:38', '1', '2022-02-16 19:07:56', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (60, 1, '��Ա', '1', 'user_type', 0, 'primary', '', NULL, '', '2021-02-26 00:16:27', '1', '2022-02-16 10:22:19', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (61, 2, '����Ա', '2', 'user_type', 0, 'success', '', NULL, '', '2021-02-26 00:16:34', '1', '2022-02-16 10:22:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (62, 0, 'δ����', '0', 'infra_api_error_log_process_status', 0, 'primary', '', NULL, '', '2021-02-26 07:07:19', '1', '2022-02-16 20:14:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (63, 1, '�Ѵ���', '1', 'infra_api_error_log_process_status', 0, 'success', '', NULL, '', '2021-02-26 07:07:26', '1', '2022-02-16 20:14:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (64, 2, '�Ѻ���', '2', 'infra_api_error_log_process_status', 0, 'danger', '', NULL, '', '2021-02-26 07:07:34', '1', '2022-02-16 20:14:14', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (66, 2, '������', 'ALIYUN', 'system_sms_channel_code', 0, 'primary', '', NULL, '1', '2021-04-05 01:05:26', '1', '2022-02-16 10:09:52', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (67, 1, '��֤��', '1', 'system_sms_template_type', 0, 'warning', '', NULL, '1', '2021-04-05 21:50:57', '1', '2022-02-16 12:48:30', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (68, 2, '֪ͨ', '2', 'system_sms_template_type', 0, 'primary', '', NULL, '1', '2021-04-05 21:51:08', '1', '2022-02-16 12:48:27', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (69, 0, 'Ӫ��', '3', 'system_sms_template_type', 0, 'danger', '', NULL, '1', '2021-04-05 21:51:15', '1', '2022-02-16 12:48:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (70, 0, '��ʼ��', '0', 'system_sms_send_status', 0, 'primary', '', NULL, '1', '2021-04-11 20:18:33', '1', '2022-02-16 10:26:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (71, 1, '���ͳɹ�', '10', 'system_sms_send_status', 0, 'success', '', NULL, '1', '2021-04-11 20:18:43', '1', '2022-02-16 10:25:56', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (72, 2, '����ʧ��', '20', 'system_sms_send_status', 0, 'danger', '', NULL, '1', '2021-04-11 20:18:49', '1', '2022-02-16 10:26:03', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (73, 3, '������', '30', 'system_sms_send_status', 0, 'info', '', NULL, '1', '2021-04-11 20:19:44', '1', '2022-02-16 10:26:10', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (74, 0, '�ȴ����', '0', 'system_sms_receive_status', 0, 'primary', '', NULL, '1', '2021-04-11 20:27:43', '1', '2022-02-16 10:28:24', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (75, 1, '���ճɹ�', '10', 'system_sms_receive_status', 0, 'success', '', NULL, '1', '2021-04-11 20:29:25', '1', '2022-02-16 10:28:28', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (76, 2, '����ʧ��', '20', 'system_sms_receive_status', 0, 'danger', '', NULL, '1', '2021-04-11 20:29:31', '1', '2022-02-16 10:28:32', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (77, 0, '����(����)', 'DEBUG_DING_TALK', 'system_sms_channel_code', 0, 'info', '', NULL, '1', '2021-04-13 00:20:37', '1', '2022-02-16 10:10:00', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (80, 100, '�˺ŵ�¼', '100', 'system_login_type', 0, 'primary', '', '�˺ŵ�¼', '1', '2021-10-06 00:52:02', '1', '2022-02-16 13:11:34', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (81, 101, '�罻��¼', '101', 'system_login_type', 0, 'info', '', '�罻��¼', '1', '2021-10-06 00:52:17', '1', '2022-02-16 13:11:40', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (83, 200, '�����dz�', '200', 'system_login_type', 0, 'primary', '', '�����dz�', '1', '2021-10-06 00:52:58', '1', '2022-02-16 13:11:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (85, 202, 'ǿ�Ƶdz�', '202', 'system_login_type', 0, 'danger', '', 'ǿ���˳�', '1', '2021-10-06 00:53:41', '1', '2022-02-16 13:11:57', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (86, 0, '����', '1', 'bpm_oa_leave_type', 0, 'primary', '', NULL, '1', '2021-09-21 22:35:28', '1', '2022-02-16 10:00:41', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (87, 1, '�¼�', '2', 'bpm_oa_leave_type', 0, 'info', '', NULL, '1', '2021-09-21 22:36:11', '1', '2022-02-16 10:00:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (88, 2, '���', '3', 'bpm_oa_leave_type', 0, 'warning', '', NULL, '1', '2021-09-21 22:36:38', '1', '2022-02-16 10:00:53', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (113, 1, '΢�Ź��ں�֧��', 'wx_pub', 'pay_channel_code', 0, 'success', '', '΢�Ź��ں�֧��', '1', '2021-12-03 10:40:24', '1', '2023-07-19 20:08:47', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (114, 2, '΢��С����֧��', 'wx_lite', 'pay_channel_code', 0, 'success', '', '΢��С����֧��', '1', '2021-12-03 10:41:06', '1', '2023-07-19 20:08:50', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (115, 3, '΢�� App ֧��', 'wx_app', 'pay_channel_code', 0, 'success', '', '΢�� App ֧��', '1', '2021-12-03 10:41:20', '1', '2023-07-19 20:08:56', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (116, 10, '֧���� PC ��վ֧��', 'alipay_pc', 'pay_channel_code', 0, 'primary', '', '֧���� PC ��վ֧��', '1', '2021-12-03 10:42:09', '1', '2023-07-19 20:09:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (117, 11, '֧���� Wap ��վ֧��', 'alipay_wap', 'pay_channel_code', 0, 'primary', '', '֧���� Wap ��վ֧��', '1', '2021-12-03 10:42:26', '1', '2023-07-19 20:09:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (118, 12, '֧���� App ֧��', 'alipay_app', 'pay_channel_code', 0, 'primary', '', '֧���� App ֧��', '1', '2021-12-03 10:42:55', '1', '2023-07-19 20:09:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (119, 14, '֧����ɨ��֧��', 'alipay_qr', 'pay_channel_code', 0, 'primary', '', '֧����ɨ��֧��', '1', '2021-12-03 10:43:10', '1', '2023-07-19 20:09:28', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (120, 10, '֪ͨ�ɹ�', '10', 'pay_notify_status', 0, 'success', '', '֪ͨ�ɹ�', '1', '2021-12-03 11:02:41', '1', '2023-07-19 10:08:19', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (121, 20, '֪ͨʧ��', '20', 'pay_notify_status', 0, 'danger', '', '֪ͨʧ��', '1', '2021-12-03 11:02:59', '1', '2023-07-19 10:08:21', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (122, 0, '�ȴ�֪ͨ', '0', 'pay_notify_status', 0, 'info', '', 'δ֪ͨ', '1', '2021-12-03 11:03:10', '1', '2023-07-19 10:08:24', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (123, 10, '֧���ɹ�', '10', 'pay_order_status', 0, 'success', '', '֧���ɹ�', '1', '2021-12-03 11:18:29', '1', '2023-07-19 18:04:28', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (124, 30, '֧���ر�', '30', 'pay_order_status', 0, 'info', '', '֧���ر�', '1', '2021-12-03 11:18:42', '1', '2023-07-19 18:05:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (125, 0, '�ȴ�֧��', '0', 'pay_order_status', 0, 'info', '', 'δ֧��', '1', '2021-12-03 11:18:18', '1', '2023-07-19 18:04:15', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (600, 5, '��ҳ', '1', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (601, 4, '��ɱ�ҳ', '2', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (602, 3, '���ۻҳ', '3', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (603, 2, '��ʱ�ۿ�ҳ', '4', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (604, 1, '������ҳ', '5', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1118, 0, '�ȴ��˿�', '0', 'pay_refund_status', 0, 'info', '', '�ȴ��˿�', '1', '2021-12-10 16:44:59', '1', '2023-07-19 10:14:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1119, 20, '�˿�ʧ��', '20', 'pay_refund_status', 0, 'danger', '', '�˿�ʧ��', '1', '2021-12-10 16:45:10', '1', '2023-07-19 10:15:10', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1124, 10, '�˿�ɹ�', '10', 'pay_refund_status', 0, 'success', '', '�˿�ɹ�', '1', '2021-12-10 16:46:26', '1', '2023-07-19 10:15:00', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1127, 1, '������', '1', 'bpm_process_instance_status', 0, 'default', '', '����ʵ����״̬ - ������', '1', '2022-01-07 23:47:22', '1', '2024-03-16 16:11:45', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1128, 2, '����ͨ��', '2', 'bpm_process_instance_status', 0, 'success', '', '����ʵ����״̬ - �����', '1', '2022-01-07 23:47:49', '1', '2024-03-16 16:11:54', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1129, 1, '������', '1', 'bpm_task_status', 0, 'primary', '', '����ʵ���Ľ�� - ������', '1', '2022-01-07 23:48:32', '1', '2024-03-08 22:41:37', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1130, 2, '����ͨ��', '2', 'bpm_task_status', 0, 'success', '', '����ʵ���Ľ�� - ͨ��', '1', '2022-01-07 23:48:45', '1', '2024-03-08 22:41:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1131, 3, '������ͨ��', '3', 'bpm_task_status', 0, 'danger', '', '����ʵ���Ľ�� - ��ͨ��', '1', '2022-01-07 23:48:55', '1', '2024-03-08 22:41:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1132, 4, '��ȡ��', '4', 'bpm_task_status', 0, 'info', '', '����ʵ���Ľ�� - ����', '1', '2022-01-07 23:49:06', '1', '2024-03-08 22:41:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1133, 10, '���̱�', '10', 'bpm_model_form_type', 0, '', '', '���̵ı����� - ���̱�', '103', '2022-01-11 23:51:30', '103', '2022-01-11 23:51:30', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1134, 20, 'ҵ���', '20', 'bpm_model_form_type', 0, '', '', '���̵ı����� - ҵ���', '103', '2022-01-11 23:51:47', '103', '2022-01-11 23:51:47', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1135, 10, '��ɫ', '10', 'bpm_task_candidate_strategy', 0, 'info', '', '��������������� - ��ɫ', '103', '2022-01-12 23:21:22', '1', '2024-03-06 02:53:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1136, 20, '���ŵij�Ա', '20', 'bpm_task_candidate_strategy', 0, 'primary', '', '��������������� - ���ŵij�Ա', '103', '2022-01-12 23:21:47', '1', '2024-03-06 02:53:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1137, 21, '���ŵĸ�����', '21', 'bpm_task_candidate_strategy', 0, 'primary', '', '��������������� - ���ŵĸ�����', '103', '2022-01-12 23:33:36', '1', '2024-03-06 02:53:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1138, 30, '�û�', '30', 'bpm_task_candidate_strategy', 0, 'info', '', '��������������� - �û�', '103', '2022-01-12 23:34:02', '1', '2024-03-06 02:53:19', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1139, 40, '�û���', '40', 'bpm_task_candidate_strategy', 0, 'warning', '', '��������������� - �û���', '103', '2022-01-12 23:34:21', '1', '2024-03-06 02:53:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1140, 60, '���̱��ʽ', '60', 'bpm_task_candidate_strategy', 0, 'danger', '', '��������������� - ���̱��ʽ', '103', '2022-01-12 23:34:43', '1', '2024-03-06 02:53:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1141, 22, '��λ', '22', 'bpm_task_candidate_strategy', 0, 'success', '', '��������������� - ��λ', '103', '2022-01-14 18:41:55', '1', '2024-03-06 02:53:21', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1145, 1, '�����̨', '1', 'infra_codegen_scene', 0, '', '', '�������ɵij���ö�� - �����̨', '1', '2022-02-02 13:15:06', '1', '2022-03-10 16:32:59', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1146, 2, '�û� APP', '2', 'infra_codegen_scene', 0, '', '', '�������ɵij���ö�� - �û� APP', '1', '2022-02-02 13:15:19', '1', '2022-03-10 16:33:03', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1150, 1, '���ݿ�', '1', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:25:28', '1', '2022-03-15 00:25:28', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1151, 10, '���ش���', '10', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:25:41', '1', '2022-03-15 00:25:56', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1152, 11, 'FTP ������', '11', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:06', '1', '2022-03-15 00:26:10', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1153, 12, 'SFTP ������', '12', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:22', '1', '2022-03-15 00:26:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1154, 20, 'S3 ����洢', '20', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:31', '1', '2022-03-15 00:26:45', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1155, 103, '���ŵ�¼', '103', 'system_login_type', 0, 'default', '', NULL, '1', '2022-05-09 23:57:58', '1', '2022-05-09 23:58:09', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1156, 1, 'password', 'password', 'system_oauth2_grant_type', 0, 'default', '', '����ģʽ', '1', '2022-05-12 00:22:05', '1', '2022-05-11 16:26:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1157, 2, 'authorization_code', 'authorization_code', 'system_oauth2_grant_type', 0, 'primary', '', '��Ȩ��ģʽ', '1', '2022-05-12 00:22:59', '1', '2022-05-11 16:26:02', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1158, 3, 'implicit', 'implicit', 'system_oauth2_grant_type', 0, 'success', '', '��ģʽ', '1', '2022-05-12 00:23:40', '1', '2022-05-11 16:26:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1159, 4, 'client_credentials', 'client_credentials', 'system_oauth2_grant_type', 0, 'default', '', '�ͻ���ģʽ', '1', '2022-05-12 00:23:51', '1', '2022-05-11 16:26:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1160, 5, 'refresh_token', 'refresh_token', 'system_oauth2_grant_type', 0, 'info', '', 'ˢ��ģʽ', '1', '2022-05-12 00:24:02', '1', '2022-05-11 16:26:11', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1162, 1, '������', '1', 'product_spu_status', 0, 'success', '', '��Ʒ SPU ״̬ - ������', '1', '2022-10-24 21:19:47', '1', '2022-10-24 21:20:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1163, 0, '�ֿ���', '0', 'product_spu_status', 0, 'info', '', '��Ʒ SPU ״̬ - �ֿ���', '1', '2022-10-24 21:20:54', '1', '2022-10-24 21:21:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1164, 0, '����վ', '-1', 'product_spu_status', 0, 'default', '', '��Ʒ SPU ״̬ - ����վ', '1', '2022-10-24 21:21:11', '1', '2022-10-24 21:21:11', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1165, 1, '����', '1', 'promotion_discount_type', 0, 'success', '', '�Ż����� - ����', '1', '2022-11-01 12:46:41', '1', '2022-11-01 12:50:11', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1166, 2, '�ۿ�', '2', 'promotion_discount_type', 0, 'primary', '', '�Ż����� - �ۿ�', '1', '2022-11-01 12:46:51', '1', '2022-11-01 12:50:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1167, 1, '�̶�����', '1', 'promotion_coupon_template_validity_type', 0, 'default', '', '�Ż݄�ģ������������� - �̶�����', '1', '2022-11-02 00:07:34', '1', '2022-11-04 00:07:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1168, 2, '��ȡ֮��', '2', 'promotion_coupon_template_validity_type', 0, 'default', '', '�Ż݄�ģ������������� - ��ȡ֮��', '1', '2022-11-02 00:07:54', '1', '2022-11-04 00:07:52', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1169, 1, 'ͨ�Ä�', '1', 'promotion_product_scope', 0, 'default', '', 'Ӫ������Ʒ��Χ - ȫ����Ʒ����', '1', '2022-11-02 00:28:22', '1', '2023-09-28 00:27:42', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1170, 2, '��Ʒ��', '2', 'promotion_product_scope', 0, 'default', '', 'Ӫ������Ʒ��Χ - ָ����Ʒ����', '1', '2022-11-02 00:28:34', '1', '2023-09-28 00:27:44', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1171, 1, 'δʹ��', '1', 'promotion_coupon_status', 0, 'primary', '', '�Ż݄���״̬ - ����ȡ', '1', '2022-11-04 00:15:08', '1', '2023-10-03 12:54:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1172, 2, '��ʹ��', '2', 'promotion_coupon_status', 0, 'success', '', '�Ż݄���״̬ - ��ʹ��', '1', '2022-11-04 00:15:21', '1', '2022-11-04 19:16:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1173, 3, '�ѹ���', '3', 'promotion_coupon_status', 0, 'info', '', '�Ż݄���״̬ - �ѹ���', '1', '2022-11-04 00:15:43', '1', '2022-11-04 19:16:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1174, 1, 'ֱ����ȡ', '1', 'promotion_coupon_take_type', 0, 'primary', '', '�Ż݄�����ȡ��ʽ - ֱ����ȡ', '1', '2022-11-04 19:13:00', '1', '2022-11-04 19:13:25', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1175, 2, 'ָ������', '2', 'promotion_coupon_take_type', 0, 'success', '', '�Ż݄�����ȡ��ʽ - ָ������', '1', '2022-11-04 19:13:13', '1', '2022-11-04 19:14:48', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1176, 10, 'δ��ʼ', '10', 'promotion_activity_status', 0, 'primary', '', '�������״̬ö�� - δ��ʼ', '1', '2022-11-04 22:54:49', '1', '2022-11-04 22:55:53', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1177, 20, '������', '20', 'promotion_activity_status', 0, 'success', '', '�������״̬ö�� - ������', '1', '2022-11-04 22:55:06', '1', '2022-11-04 22:55:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1178, 30, '�ѽ���', '30', 'promotion_activity_status', 0, 'info', '', '�������״̬ö�� - �ѽ���', '1', '2022-11-04 22:55:41', '1', '2022-11-04 22:55:41', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1179, 40, '�ѹر�', '40', 'promotion_activity_status', 0, 'warning', '', '�������״̬ö�� - �ѹر�', '1', '2022-11-04 22:56:10', '1', '2022-11-04 22:56:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1180, 10, '�� N Ԫ', '10', 'promotion_condition_type', 0, 'primary', '', 'Ӫ������������ - �� N Ԫ', '1', '2022-11-04 22:59:45', '1', '2022-11-04 22:59:45', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1181, 20, '�� N ��', '20', 'promotion_condition_type', 0, 'success', '', 'Ӫ������������ - �� N ��', '1', '2022-11-04 23:00:02', '1', '2022-11-04 23:00:02', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1182, 10, '�����ۺ�', '10', 'trade_after_sale_status', 0, 'primary', '', '�����ۺ�״̬ - �����ۺ�', '1', '2022-11-19 20:53:33', '1', '2022-11-19 20:54:42', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1183, 20, '��Ʒ���˻�', '20', 'trade_after_sale_status', 0, 'primary', '', '�����ۺ�״̬ - ��Ʒ���˻�', '1', '2022-11-19 20:54:36', '1', '2022-11-19 20:58:58', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1184, 30, '�̼Ҵ��ջ�', '30', 'trade_after_sale_status', 0, 'primary', '', '�����ۺ�״̬ - �̼Ҵ��ջ�', '1', '2022-11-19 20:56:56', '1', '2022-11-19 20:59:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1185, 40, '�ȴ��˿�', '40', 'trade_after_sale_status', 0, 'primary', '', '�����ۺ�״̬ - �ȴ��˿�', '1', '2022-11-19 20:59:54', '1', '2022-11-19 21:00:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1186, 50, '�˿�ɹ�', '50', 'trade_after_sale_status', 0, 'default', '', '�����ۺ�״̬ - �˿�ɹ�', '1', '2022-11-19 21:00:33', '1', '2022-11-19 21:00:33', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1187, 61, '���ȡ��', '61', 'trade_after_sale_status', 0, 'info', '', '�����ۺ�״̬ - ���ȡ��', '1', '2022-11-19 21:01:29', '1', '2022-11-19 21:01:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1188, 62, '�̼Ҿܾ�', '62', 'trade_after_sale_status', 0, 'info', '', '�����ۺ�״̬ - �̼Ҿܾ�', '1', '2022-11-19 21:02:17', '1', '2022-11-19 21:02:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1189, 63, '�̼Ҿ��ջ�', '63', 'trade_after_sale_status', 0, 'info', '', '�����ۺ�״̬ - �̼Ҿ��ջ�', '1', '2022-11-19 21:02:37', '1', '2022-11-19 21:03:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1190, 10, '�����˿�', '10', 'trade_after_sale_type', 0, 'success', '', '�����ۺ������ - �����˿�', '1', '2022-11-19 21:05:05', '1', '2022-11-19 21:38:23', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1191, 20, '�ۺ��˿�', '20', 'trade_after_sale_type', 0, 'primary', '', '�����ۺ������ - �ۺ��˿�', '1', '2022-11-19 21:05:32', '1', '2022-11-19 21:38:32', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1192, 10, '���˿�', '10', 'trade_after_sale_way', 0, 'primary', '', '�����ۺ�ķ�ʽ - ���˿�', '1', '2022-11-19 21:39:19', '1', '2022-11-19 21:39:19', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1193, 20, '�˻��˿�', '20', 'trade_after_sale_way', 0, 'success', '', '�����ۺ�ķ�ʽ - �˻��˿�', '1', '2022-11-19 21:39:38', '1', '2022-11-19 21:39:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1194, 10, '΢��С����', '10', 'terminal', 0, 'default', '', '�ն� - ΢��С����', '1', '2022-12-10 10:51:11', '1', '2022-12-10 10:51:57', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1195, 20, 'H5 ��ҳ', '20', 'terminal', 0, 'default', '', '�ն� - H5 ��ҳ', '1', '2022-12-10 10:51:30', '1', '2022-12-10 10:51:59', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1196, 11, '΢�Ź��ں�', '11', 'terminal', 0, 'default', '', '�ն� - ΢�Ź��ں�', '1', '2022-12-10 10:54:16', '1', '2022-12-10 10:52:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1197, 31, 'ƻ�� App', '31', 'terminal', 0, 'default', '', '�ն� - ƻ�� App', '1', '2022-12-10 10:54:42', '1', '2022-12-10 10:52:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1198, 32, '��׿ App', '32', 'terminal', 0, 'default', '', '�ն� - ��׿ App', '1', '2022-12-10 10:55:02', '1', '2022-12-10 10:59:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1199, 0, '��ͨ����', '0', 'trade_order_type', 0, 'default', '', '���׶��������� - ��ͨ����', '1', '2022-12-10 16:34:14', '1', '2022-12-10 16:34:14', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1200, 1, '��ɱ����', '1', 'trade_order_type', 0, 'default', '', '���׶��������� - ��ɱ����', '1', '2022-12-10 16:34:26', '1', '2022-12-10 16:34:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1201, 2, 'ƴ�Ŷ���', '2', 'trade_order_type', 0, 'default', '', '���׶��������� - ƴ�Ŷ���', '1', '2022-12-10 16:34:36', '1', '2022-12-10 16:34:36', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1202, 3, '���۶���', '3', 'trade_order_type', 0, 'default', '', '���׶��������� - ���۶���', '1', '2022-12-10 16:34:48', '1', '2022-12-10 16:34:48', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1203, 0, '��֧��', '0', 'trade_order_status', 0, 'default', '', '���׶���״̬ - ��֧��', '1', '2022-12-10 16:49:29', '1', '2022-12-10 16:49:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1204, 10, '������', '10', 'trade_order_status', 0, 'primary', '', '���׶���״̬ - ������', '1', '2022-12-10 16:49:53', '1', '2022-12-10 16:51:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1205, 20, '�ѷ���', '20', 'trade_order_status', 0, 'primary', '', '���׶���״̬ - �ѷ���', '1', '2022-12-10 16:50:13', '1', '2022-12-10 16:51:31', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1206, 30, '�����', '30', 'trade_order_status', 0, 'success', '', '���׶���״̬ - �����', '1', '2022-12-10 16:50:30', '1', '2022-12-10 16:51:06', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1207, 40, '��ȡ��', '40', 'trade_order_status', 0, 'danger', '', '���׶���״̬ - ��ȡ��', '1', '2022-12-10 16:50:50', '1', '2022-12-10 16:51:00', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1208, 0, 'δ�ۺ�', '0', 'trade_order_item_after_sale_status', 0, 'info', '', '���׶�������ۺ�״̬ - δ�ۺ�', '1', '2022-12-10 20:58:42', '1', '2022-12-10 20:59:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1209, 1, '�ۺ���', '1', 'trade_order_item_after_sale_status', 0, 'primary', '', '���׶�������ۺ�״̬ - �ۺ���', '1', '2022-12-10 20:59:21', '1', '2022-12-10 20:59:21', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1210, 2, '���˿�', '2', 'trade_order_item_after_sale_status', 0, 'success', '', '���׶�������ۺ�״̬ - ���˿�', '1', '2022-12-10 20:59:46', '1', '2022-12-10 20:59:46', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1211, 1, '��ȫƥ��', '1', 'mp_auto_reply_request_match', 0, 'primary', '', '���ں��Զ��ظ�������ؼ���ƥ��ģʽ - ��ȫƥ��', '1', '2023-01-16 23:30:39', '1', '2023-01-16 23:31:00', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1212, 2, '��ƥ��', '2', 'mp_auto_reply_request_match', 0, 'success', '', '���ں��Զ��ظ�������ؼ���ƥ��ģʽ - ��ƥ��', '1', '2023-01-16 23:30:55', '1', '2023-01-16 23:31:10', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1213, 1, '�ı�', 'text', 'mp_message_type', 0, 'default', '', '���ںŵ���Ϣ���� - �ı�', '1', '2023-01-17 22:17:32', '1', '2023-01-17 22:17:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1214, 2, 'ͼƬ', 'image', 'mp_message_type', 0, 'default', '', '���ںŵ���Ϣ���� - ͼƬ', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:19:47', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1215, 3, '����', 'voice', 'mp_message_type', 0, 'default', '', '���ںŵ���Ϣ���� - ����', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:20:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1216, 4, '��Ƶ', 'video', 'mp_message_type', 0, 'default', '', '���ںŵ���Ϣ���� - ��Ƶ', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:21:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1217, 5, 'С��Ƶ', 'shortvideo', 'mp_message_type', 0, 'default', '', '���ںŵ���Ϣ���� - С��Ƶ', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:19:59', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1218, 6, 'ͼ��', 'news', 'mp_message_type', 0, 'default', '', '���ںŵ���Ϣ���� - ͼ��', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:22:54', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1219, 7, '����', 'music', 'mp_message_type', 0, 'default', '', '���ںŵ���Ϣ���� - ����', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:22:54', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1220, 8, '����λ��', 'location', 'mp_message_type', 0, 'default', '', '���ںŵ���Ϣ���� - ����λ��', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:23:51', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1221, 9, '����', 'link', 'mp_message_type', 0, 'default', '', '���ںŵ���Ϣ���� - ����', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:24:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1222, 10, '�¼�', 'event', 'mp_message_type', 0, 'default', '', '���ںŵ���Ϣ���� - �¼�', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:24:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1223, 0, '��ʼ��', '0', 'system_mail_send_status', 0, 'primary', '', '�ʼ�����״̬ - ��ʼ��\n', '1', '2023-01-26 09:53:49', '1', '2023-01-26 16:36:14', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1224, 10, '���ͳɹ�', '10', 'system_mail_send_status', 0, 'success', '', '�ʼ�����״̬ - ���ͳɹ�', '1', '2023-01-26 09:54:28', '1', '2023-01-26 16:36:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1225, 20, '����ʧ��', '20', 'system_mail_send_status', 0, 'danger', '', '�ʼ�����״̬ - ����ʧ��', '1', '2023-01-26 09:54:50', '1', '2023-01-26 16:36:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1226, 30, '������', '30', 'system_mail_send_status', 0, 'info', '', '�ʼ�����״̬ - ������', '1', '2023-01-26 09:55:06', '1', '2023-01-26 16:36:36', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1227, 1, '֪ͨ����', '1', 'system_notify_template_type', 0, 'primary', '', 'վ����ģ������� - ֪ͨ����', '1', '2023-01-28 10:35:59', '1', '2023-01-28 10:35:59', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1228, 2, 'ϵͳ��Ϣ', '2', 'system_notify_template_type', 0, 'success', '', 'վ����ģ������� - ϵͳ��Ϣ', '1', '2023-01-28 10:36:20', '1', '2023-01-28 10:36:25', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1230, 13, '֧��������֧��', 'alipay_bar', 'pay_channel_code', 0, 'primary', '', '֧��������֧��', '1', '2023-02-18 23:32:24', '1', '2023-07-19 20:09:23', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1231, 10, 'Vue2 Element UI ��׼ģ��', '10', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:03:55', '1', '2023-04-13 00:03:55', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1232, 20, 'Vue3 Element Plus ��׼ģ��', '20', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:04:08', '1', '2023-04-13 00:04:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1233, 21, 'Vue3 Element Plus Schema ģ��', '21', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:04:26', '1', '2023-04-13 00:04:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1234, 30, 'Vue3 vben ģ��', '30', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:04:26', '1', '2023-04-13 00:04:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1244, 0, '����', '1', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:46:40', '1', '2023-05-21 22:46:40', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1245, 1, '������', '2', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:46:58', '1', '2023-05-21 22:46:58', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1246, 2, '�����', '3', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:47:18', '1', '2023-05-21 22:47:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1335, 11, '�������ֵֿ�', '11', 'member_point_biz_type', 0, '', '', '', '1', '2023-06-10 12:15:27', '1', '2023-10-11 07:41:43', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1336, 1, 'ǩ��', '1', 'member_point_biz_type', 0, '', '', '', '1', '2023-06-10 12:15:48', '1', '2023-08-20 11:59:53', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1341, 20, '���˿�', '20', 'pay_order_status', 0, 'danger', '', '���˿�', '1', '2023-07-19 18:05:37', '1', '2023-07-19 18:05:37', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1342, 21, '����ɹ������ǽ��ʧ��', '21', 'pay_notify_status', 0, 'warning', '', '����ɹ������ǽ��ʧ��', '1', '2023-07-19 18:10:47', '1', '2023-07-19 18:11:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1343, 22, '����ʧ��', '22', 'pay_notify_status', 0, 'warning', '', NULL, '1', '2023-07-19 18:11:05', '1', '2023-07-19 18:11:27', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1344, 4, '΢��ɨ��֧��', 'wx_native', 'pay_channel_code', 0, 'success', '', '΢��ɨ��֧��', '1', '2023-07-19 20:07:47', '1', '2023-07-19 20:09:03', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1345, 5, '΢������֧��', 'wx_bar', 'pay_channel_code', 0, 'success', '', '΢������֧��\n', '1', '2023-07-19 20:08:06', '1', '2023-07-19 20:09:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1346, 1, '֧����', '1', 'pay_notify_type', 0, 'primary', '', '֧����', '1', '2023-07-20 12:23:17', '1', '2023-07-20 12:23:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1347, 2, '�˿', '2', 'pay_notify_type', 0, 'danger', '', NULL, '1', '2023-07-20 12:23:26', '1', '2023-07-20 12:23:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1348, 20, 'ģ��֧��', 'mock', 'pay_channel_code', 0, 'default', '', 'ģ��֧��', '1', '2023-07-29 11:10:51', '1', '2023-07-29 03:14:10', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1349, 12, '�������ֵֿۣ�����ȡ����', '12', 'member_point_biz_type', 0, '', '', '', '1', '2023-08-20 12:00:03', '1', '2023-10-11 07:42:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1350, 0, '����Ա����', '0', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1351, 1, '���½���', '1', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1352, 11, '�µ�����', '11', 'member_experience_biz_type', 0, 'success', '', NULL, '', '2023-08-22 12:41:01', '1', '2023-10-11 07:45:09', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1353, 12, '�µ�����������ȡ����', '12', 'member_experience_biz_type', 0, 'warning', '', NULL, '', '2023-08-22 12:41:01', '1', '2023-10-11 07:45:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1354, 4, 'ǩ������', '4', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1355, 5, '�齱����', '5', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1356, 1, '��ݷ���', '1', 'trade_delivery_type', 0, '', '', '', '1', '2023-08-23 00:04:55', '1', '2023-08-23 00:04:55', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1357, 2, '�û�����', '2', 'trade_delivery_type', 0, '', '', '', '1', '2023-08-23 00:05:05', '1', '2023-08-23 00:05:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1358, 3, 'Ʒ����', '3', 'promotion_product_scope', 0, 'default', '', '', '1', '2023-09-01 23:43:07', '1', '2023-09-28 00:27:47', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1359, 1, '���˷���', '1', 'brokerage_enabled_condition', 0, '', '', '�����û������Է���', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1360, 2, 'ָ������', '2', 'brokerage_enabled_condition', 0, '', '', '���ɺ�̨�ֶ������ƹ�Ա', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1361, 1, '�״ΰ�', '1', 'brokerage_bind_mode', 0, '', '', 'ֻҪ�û�û���ƹ��ˣ���ʱ�����԰��ƹ��ϵ', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1362, 2, 'ע���', '2', 'brokerage_bind_mode', 0, '', '', '�����û�ע��ʱ���ܰ��ƹ��ϵ', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1363, 3, '���ǰ�', '3', 'brokerage_bind_mode', 0, '', '', '����û��Ѿ����ƹ��ˣ��ƹ��˻ᱻ���', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1364, 1, 'Ǯ��', '1', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1365, 2, '���п�', '2', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1366, 3, '΢��', '3', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1367, 4, '֧����', '4', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1368, 1, '������Ӷ', '1', 'brokerage_record_biz_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1369, 2, '��������', '2', 'brokerage_record_biz_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1370, 3, '�������ֲ���', '3', 'brokerage_record_biz_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1371, 0, '������', '0', 'brokerage_record_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1372, 1, '�ѽ���', '1', 'brokerage_record_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1373, 2, '��ȡ��', '2', 'brokerage_record_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1374, 0, '�����', '0', 'brokerage_withdraw_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1375, 10, '���ͨ��', '10', 'brokerage_withdraw_status', 0, 'success', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1376, 11, '���ֳɹ�', '11', 'brokerage_withdraw_status', 0, 'success', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1377, 20, '��˲�ͨ��', '20', 'brokerage_withdraw_status', 0, 'danger', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1378, 21, '����ʧ��', '21', 'brokerage_withdraw_status', 0, 'danger', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1379, 0, '��������', '0', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1380, 1, '��������', '1', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1381, 2, 'ũҵ����', '2', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1382, 3, '�й�����', '3', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1383, 4, '��ͨ����', '4', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1384, 5, '��������', '5', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1385, 21, 'Ǯ��', 'wallet', 'pay_channel_code', 0, 'primary', '', '', '1', '2023-10-01 21:46:19', '1', '2023-10-01 21:48:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1386, 1, '������', '1', 'promotion_bargain_record_status', 0, 'default', '', '', '1', '2023-10-05 10:41:26', '1', '2023-10-05 10:41:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1387, 2, '���۳ɹ�', '2', 'promotion_bargain_record_status', 0, 'success', '', '', '1', '2023-10-05 10:41:39', '1', '2023-10-05 10:41:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1388, 3, '����ʧ��', '3', 'promotion_bargain_record_status', 0, 'warning', '', '', '1', '2023-10-05 10:41:57', '1', '2023-10-05 10:41:57', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1389, 1, 'ƴ����', '1', 'promotion_combination_record_status', 0, '', '', '', '1', '2023-10-08 07:24:44', '1', '2023-10-08 07:24:44', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1390, 2, 'ƴ�ųɹ�', '2', 'promotion_combination_record_status', 0, 'success', '', '', '1', '2023-10-08 07:24:56', '1', '2023-10-08 07:24:56', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1391, 3, 'ƴ��ʧ��', '3', 'promotion_combination_record_status', 0, 'warning', '', '', '1', '2023-10-08 07:25:11', '1', '2023-10-08 07:25:11', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1392, 2, '����Ա�޸�', '2', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:41:34', '1', '2023-10-11 07:41:34', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1393, 13, '�������ֵֿۣ������˿', '13', 'member_point_biz_type', 0, '', '', '', '1', '2023-10-11 07:42:29', '1', '2023-10-11 07:42:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1394, 21, '�������ֽ���', '21', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:42:44', '1', '2023-10-11 07:42:44', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1395, 22, '�������ֽ���������ȡ����', '22', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:42:55', '1', '2023-10-11 07:43:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1396, 23, '�������ֽ����������˿', '23', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:43:16', '1', '2023-10-11 07:43:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1397, 13, '�µ������������˿', '13', 'member_experience_biz_type', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1398, 5, '����ת��', '5', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:24', '1', '2023-10-18 21:55:24', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1399, 6, '֧����', '6', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:38', '1', '2023-10-18 21:55:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1400, 7, '΢��֧��', '7', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:53', '1', '2023-10-18 21:55:53', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1401, 8, '����', '8', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:56:06', '1', '2023-10-18 21:56:06', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1402, 1, 'IT', '1', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:15', '1', '2024-02-18 23:30:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1403, 2, '����ҵ', '2', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:29', '1', '2024-02-18 23:30:43', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1404, 3, '���ز�', '3', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:41', '1', '2024-02-18 23:30:48', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1405, 4, '��ҵ����', '4', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:54', '1', '2024-02-18 23:30:54', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1406, 5, '����/����', '5', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:03', '1', '2024-02-18 23:31:00', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1407, 6, '����', '6', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:13', '1', '2024-02-18 23:31:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1408, 7, '����', '7', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:27', '1', '2024-02-18 23:31:13', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1409, 8, '�Ļ���ý', '8', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:37', '1', '2024-02-18 23:31:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1422, 1, 'A ���ص�ͻ���', '1', 'crm_customer_level', 0, 'primary', '', '', '1', '2023-10-28 23:07:13', '1', '2023-10-28 23:07:13', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1423, 2, 'B ����ͨ�ͻ���', '2', 'crm_customer_level', 0, 'info', '', '', '1', '2023-10-28 23:07:35', '1', '2023-10-28 23:07:35', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1424, 3, 'C �������ȿͻ���', '3', 'crm_customer_level', 0, 'default', '', '', '1', '2023-10-28 23:07:53', '1', '2023-10-28 23:07:53', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1425, 1, '����', '1', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:29', '1', '2023-10-28 23:08:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1426, 2, '��������', '2', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:39', '1', '2023-10-28 23:08:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1427, 3, '���', '3', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:47', '1', '2023-10-28 23:08:47', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1428, 4, 'ת����', '4', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:58', '1', '2023-10-28 23:08:58', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1429, 5, '����ע��', '5', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:12', '1', '2023-10-28 23:09:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1430, 6, '������ѯ', '6', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:22', '1', '2023-10-28 23:09:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1431, 7, 'ԤԼ����', '7', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:39', '1', '2023-10-28 23:09:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1432, 8, 'İ��', '8', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:04', '1', '2023-10-28 23:10:04', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1433, 9, '�绰��ѯ', '9', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:18', '1', '2023-10-28 23:10:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1434, 10, '�ʼ���ѯ', '10', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:33', '1', '2023-10-28 23:10:33', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1435, 10, 'Gitee', '10', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:04:42', '1', '2023-11-04 13:04:42', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1436, 20, '����', '20', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:04:54', '1', '2023-11-04 13:04:54', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1437, 30, '��ҵ΢��', '30', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:09', '1', '2023-11-04 13:05:09', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1438, 31, '΢�Ź���ƽ̨', '31', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:18', '1', '2023-11-04 13:05:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1439, 32, '΢�ſ���ƽ̨', '32', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:30', '1', '2023-11-04 13:05:30', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1440, 34, '΢��С����', '34', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:38', '1', '2023-11-04 13:07:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1441, 1, '�ϼ�', '1', 'crm_product_status', 0, 'success', '', '', '1', '2023-10-30 21:49:34', '1', '2023-10-30 21:49:34', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1442, 0, '�¼�', '0', 'crm_product_status', 0, 'success', '', '', '1', '2023-10-30 21:49:13', '1', '2023-10-30 21:49:13', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1443, 15, '�ӱ�', '15', 'infra_codegen_template_type', 0, 'default', '', '', '1', '2023-11-13 23:06:16', '1', '2023-11-13 23:06:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1444, 10, '������׼ģʽ��', '10', 'infra_codegen_template_type', 0, 'default', '', '', '1', '2023-11-14 12:32:49', '1', '2023-11-14 12:32:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1445, 11, '����ERP ģʽ��', '11', 'infra_codegen_template_type', 0, 'default', '', '', '1', '2023-11-14 12:33:05', '1', '2023-11-14 12:33:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1446, 12, '������Ƕģʽ��', '12', 'infra_codegen_template_type', 0, '', '', '', '1', '2023-11-14 12:33:31', '1', '2023-11-14 12:33:31', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1447, 1, '������', '1', 'crm_permission_level', 0, 'default', '', '', '1', '2023-11-30 09:53:12', '1', '2023-11-30 09:53:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1448, 2, 'ֻ��', '2', 'crm_permission_level', 0, '', '', '', '1', '2023-11-30 09:53:29', '1', '2023-11-30 09:53:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1449, 3, '��д', '3', 'crm_permission_level', 0, '', '', '', '1', '2023-11-30 09:53:36', '1', '2023-11-30 09:53:36', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1450, 0, 'δ�ύ', '0', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:56:59', '1', '2023-11-30 18:56:59', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1451, 10, '������', '10', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:10', '1', '2023-11-30 18:57:10', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1452, 20, '���ͨ��', '20', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:24', '1', '2023-11-30 18:57:24', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1453, 30, '��˲�ͨ��', '30', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:32', '1', '2023-11-30 18:57:32', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1454, 40, '��ȡ��', '40', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:42', '1', '2023-11-30 18:57:42', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1456, 1, '֧Ʊ', '1', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:29', '1', '2023-10-18 21:54:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1457, 2, '�ֽ�', '2', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:41', '1', '2023-10-18 21:54:41', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1458, 3, '�������', '3', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:53', '1', '2023-10-18 21:54:53', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1459, 4, '���', '4', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:07', '1', '2023-10-18 21:55:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1460, 5, '����ת��', '5', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:24', '1', '2023-10-18 21:55:24', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1461, 1, '��', '1', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:02:26', '1', '2023-12-05 23:02:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1462, 2, '��', '2', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:02:34', '1', '2023-12-05 23:02:34', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1463, 3, 'ֻ', '3', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:02:57', '1', '2023-12-05 23:02:57', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1464, 4, '��', '4', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:05', '1', '2023-12-05 23:03:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1465, 5, 'ö', '5', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:14', '1', '2023-12-05 23:03:14', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1466, 6, 'ƿ', '6', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:20', '1', '2023-12-05 23:03:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1467, 7, '��', '7', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:30', '1', '2023-12-05 23:03:30', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1468, 8, '̨', '8', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:41', '1', '2023-12-05 23:03:41', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1469, 9, '��', '9', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:48', '1', '2023-12-05 23:03:48', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1470, 10, 'ǧ��', '10', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:03', '1', '2023-12-05 23:04:03', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1471, 11, '��', '11', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:12', '1', '2023-12-05 23:04:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1472, 12, '��', '12', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:25', '1', '2023-12-05 23:04:25', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1473, 13, '��', '13', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:34', '1', '2023-12-05 23:04:34', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1474, 1, '��绰', '1', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:48:20', '1', '2024-01-15 20:48:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1475, 2, '������', '2', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:48:31', '1', '2024-01-15 20:48:31', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1476, 3, '���Űݷ�', '3', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:49:07', '1', '2024-01-15 20:49:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1477, 4, '΢�Ź�ͨ', '4', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:49:15', '1', '2024-01-15 20:49:15', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1478, 4, 'Ǯ�����', '4', 'pay_transfer_type', 0, 'info', '', '', '1', '2023-10-28 16:28:37', '1', '2023-10-28 16:28:37', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1479, 3, '���п�', '3', 'pay_transfer_type', 0, 'default', '', '', '1', '2023-10-28 16:28:21', '1', '2023-10-28 16:28:21', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1480, 2, '΢�����', '2', 'pay_transfer_type', 0, 'info', '', '', '1', '2023-10-28 16:28:07', '1', '2023-10-28 16:28:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1481, 1, '֧�������', '1', 'pay_transfer_type', 0, 'default', '', '', '1', '2023-10-28 16:27:44', '1', '2023-10-28 16:27:44', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1482, 4, 'ת��ʧ��', '30', 'pay_transfer_status', 0, 'warning', '', '', '1', '2023-10-28 16:24:16', '1', '2023-10-28 16:24:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1483, 3, 'ת�˳ɹ�', '20', 'pay_transfer_status', 0, 'success', '', '', '1', '2023-10-28 16:23:50', '1', '2023-10-28 16:23:50', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1484, 2, 'ת�˽�����', '10', 'pay_transfer_status', 0, 'info', '', '', '1', '2023-10-28 16:23:12', '1', '2023-10-28 16:23:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1485, 1, '�ȴ�ת��', '0', 'pay_transfer_status', 0, 'default', '', '', '1', '2023-10-28 16:21:43', '1', '2023-10-28 16:23:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1486, 10, '�������', '10', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-05 18:07:25', '1', '2024-02-05 18:07:43', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1487, 11, '������⣨���ϣ�', '11', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-05 18:08:07', '1', '2024-02-05 19:20:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1488, 20, '��������', '20', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-05 18:08:51', '1', '2024-02-05 18:08:51', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1489, 21, '�������⣨���ϣ�', '21', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-05 18:09:00', '1', '2024-02-05 19:20:10', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1490, 10, 'δ���', '10', 'erp_audit_status', 0, 'default', '', '', '1', '2024-02-06 00:00:21', '1', '2024-02-06 00:00:21', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1491, 20, '�����', '20', 'erp_audit_status', 0, 'success', '', '', '1', '2024-02-06 00:00:35', '1', '2024-02-06 00:00:35', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1492, 30, '�������', '30', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-07 20:34:19', '1', '2024-02-07 12:36:31', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1493, 31, '������⣨���ϣ�', '31', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-07 20:34:29', '1', '2024-02-07 20:37:11', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1494, 32, '��������', '32', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-07 20:34:38', '1', '2024-02-07 12:36:33', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1495, 33, '�������⣨���ϣ�', '33', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-07 20:34:49', '1', '2024-02-07 20:37:06', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1496, 40, '��ӯ���', '40', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-08 08:53:00', '1', '2024-02-08 08:53:09', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1497, 41, '��ӯ��⣨���ϣ�', '41', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-08 08:53:39', '1', '2024-02-16 19:40:54', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1498, 42, '�̿�����', '42', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-08 08:54:16', '1', '2024-02-08 08:54:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1499, 43, '�̿����⣨���ϣ�', '43', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-08 08:54:31', '1', '2024-02-16 19:40:46', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1500, 50, '���۳���', '50', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-11 21:47:25', '1', '2024-02-11 21:50:40', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1501, 51, '���۳��⣨���ϣ�', '51', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-11 21:47:37', '1', '2024-02-11 21:51:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1502, 60, '�����˻����', '60', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-12 06:51:05', '1', '2024-02-12 06:51:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1503, 61, '�����˻���⣨���ϣ�', '61', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-12 06:51:18', '1', '2024-02-12 06:51:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1504, 70, '�ɹ����', '70', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-16 13:10:02', '1', '2024-02-16 13:10:02', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1505, 71, '�ɹ���⣨���ϣ�', '71', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-16 13:10:10', '1', '2024-02-16 19:40:40', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1506, 80, '�ɹ��˻�����', '80', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-16 13:10:17', '1', '2024-02-16 13:10:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1507, 81, '�ɹ��˻����⣨���ϣ�', '81', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-16 13:10:26', '1', '2024-02-16 19:40:33', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1509, 3, '������ͨ��', '3', 'bpm_process_instance_status', 0, 'danger', '', '', '1', '2024-03-16 16:12:06', '1', '2024-03-16 16:12:06', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1510, 4, '��ȡ��', '4', 'bpm_process_instance_status', 0, 'warning', '', '', '1', '2024-03-16 16:12:22', '1', '2024-03-16 16:12:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1511, 5, '���˻�', '5', 'bpm_task_status', 0, 'warning', '', '', '1', '2024-03-16 19:10:46', '1', '2024-03-08 22:41:40', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1512, 6, 'ί����', '6', 'bpm_task_status', 0, 'primary', '', '', '1', '2024-03-17 10:06:22', '1', '2024-03-08 22:41:40', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1513, 7, '����ͨ����', '7', 'bpm_task_status', 0, 'success', '', '', '1', '2024-03-17 10:06:47', '1', '2024-03-08 22:41:41', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1514, 0, '������', '0', 'bpm_task_status', 0, 'info', '', '', '1', '2024-03-17 10:07:11', '1', '2024-03-08 22:41:42', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1515, 35, '��������ѡ', '35', 'bpm_task_candidate_strategy', 0, '', '', '', '1', '2024-03-22 19:45:16', '1', '2024-03-22 19:45:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1516, 1, 'ִ�м�����', 'execution', 'bpm_process_listener_type', 0, 'primary', '', '', '1', '2024-03-23 12:54:03', '1', '2024-03-23 19:14:19', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1517, 1, '���������', 'task', 'bpm_process_listener_type', 0, 'success', '', '', '1', '2024-03-23 12:54:13', '1', '2024-03-23 19:14:24', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1526, 1, 'Java ��', 'class', 'bpm_process_listener_value_type', 0, 'primary', '', '', '1', '2024-03-23 15:08:45', '1', '2024-03-23 19:14:32', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1527, 2, '���ʽ', 'expression', 'bpm_process_listener_value_type', 0, 'success', '', '', '1', '2024-03-23 15:09:06', '1', '2024-03-23 19:14:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1528, 3, '������ʽ', 'delegateExpression', 'bpm_process_listener_value_type', 0, 'info', '', '', '1', '2024-03-23 15:11:23', '1', '2024-03-23 19:14:41', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1529, 1, '��', '1', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:50:26', '1', '2024-03-29 22:50:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1530, 2, '��', '2', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:50:36', '1', '2024-03-29 22:50:36', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1531, 3, '��', '3', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:50:46', '1', '2024-03-29 22:50:54', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1532, 4, '����', '4', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:51:01', '1', '2024-03-29 22:51:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1533, 5, '��', '5', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:51:07', '1', '2024-03-29 22:51:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1534, 1, 'Ӯ��', '1', 'crm_business_end_status_type', 0, 'success', '', '', '1', '2024-04-13 23:26:57', '1', '2024-04-13 23:26:57', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1535, 2, '�䵥', '2', 'crm_business_end_status_type', 0, 'primary', '', '', '1', '2024-04-13 23:27:31', '1', '2024-04-13 23:27:31', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1536, 3, '��Ч', '3', 'crm_business_end_status_type', 0, 'info', '', '', '1', '2024-04-13 23:27:59', '1', '2024-04-13 23:27:59', '0'); +COMMIT; +SET IDENTITY_INSERT system_dict_data OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_dict_type +-- ---------------------------- +CREATE TABLE system_dict_type +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(100) DEFAULT '' NULL, + type varchar(100) DEFAULT '' NULL, + status smallint DEFAULT 0 NOT NULL, + remark varchar(500) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + deleted_time datetime DEFAULT NULL NULL +); + +COMMENT ON COLUMN system_dict_type.id IS '�ֵ�����'; +COMMENT ON COLUMN system_dict_type.name IS '�ֵ�����'; +COMMENT ON COLUMN system_dict_type.type IS '�ֵ�����'; +COMMENT ON COLUMN system_dict_type.status IS '״̬��0���� 1ͣ�ã�'; +COMMENT ON COLUMN system_dict_type.remark IS '��ע'; +COMMENT ON COLUMN system_dict_type.creator IS '������'; +COMMENT ON COLUMN system_dict_type.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_dict_type.updater IS '������'; +COMMENT ON COLUMN system_dict_type.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_dict_type.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_dict_type.deleted_time IS 'ɾ��ʱ��'; +COMMENT ON TABLE system_dict_type IS '�ֵ����ͱ�'; + +-- ---------------------------- +-- Records of system_dict_type +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_dict_type ON; +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1, '�û��Ա�', 'system_user_sex', 0, NULL, 'admin', '2021-01-05 17:03:48', '1', '2022-05-16 20:29:32', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (6, '��������', 'infra_config_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:36:54', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (7, '֪ͨ����', 'system_notice_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:35:26', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (9, '��������', 'infra_operate_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:01', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (10, 'ϵͳ״̬', 'common_status', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:21:28', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (11, 'Boolean �Ƿ�����', 'infra_boolean_string', 0, 'boolean ת�Ƿ�', '', '2021-01-19 03:20:08', '', '2022-02-01 16:37:10', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (104, '��½���', 'system_login_result', 0, '��½���', '', '2021-01-18 06:17:11', '', '2022-02-01 16:36:00', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (106, '��������ģ������', 'infra_codegen_template_type', 0, NULL, '', '2021-02-05 07:08:06', '1', '2022-05-16 20:26:50', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (107, '��ʱ����״̬', 'infra_job_status', 0, NULL, '', '2021-02-07 07:44:16', '', '2022-02-01 16:51:11', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (108, '��ʱ������־״̬', 'infra_job_log_status', 0, NULL, '', '2021-02-08 10:03:51', '', '2022-02-01 16:50:43', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (109, '�û�����', 'user_type', 0, NULL, '', '2021-02-26 00:15:51', '', '2021-02-26 00:15:51', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (110, 'API �쳣���ݵĴ���״̬', 'infra_api_error_log_process_status', 0, NULL, '', '2021-02-26 07:07:01', '', '2022-02-01 16:50:53', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (111, '������������', 'system_sms_channel_code', 0, NULL, '1', '2021-04-05 01:04:50', '1', '2022-02-16 02:09:08', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (112, '����ģ�������', 'system_sms_template_type', 0, NULL, '1', '2021-04-05 21:50:43', '1', '2022-02-01 16:35:06', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (113, '���ŷ���״̬', 'system_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:03', '1', '2022-02-01 16:35:09', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (114, '���Ž���״̬', 'system_sms_receive_status', 0, NULL, '1', '2021-04-11 20:27:14', '1', '2022-02-01 16:35:14', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (116, '��½��־������', 'system_login_type', 0, '��½��־������', '1', '2021-10-06 00:50:46', '1', '2022-02-01 16:35:56', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (117, 'OA �������', 'bpm_oa_leave_type', 0, NULL, '1', '2021-09-21 22:34:33', '1', '2022-01-22 10:41:37', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (130, '֧��������������', 'pay_channel_code', 0, '֧�������ı���', '1', '2021-12-03 10:35:08', '1', '2023-07-10 10:11:39', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (131, '֧���ص�״̬', 'pay_notify_status', 0, '֧���ص�״̬�������˿�ص���', '1', '2021-12-03 10:53:29', '1', '2023-07-19 18:09:43', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (132, '֧������״̬', 'pay_order_status', 0, '֧������״̬', '1', '2021-12-03 11:17:50', '1', '2021-12-03 11:17:50', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (134, '�˿��״̬', 'pay_refund_status', 0, '�˿��״̬', '1', '2021-12-10 16:42:50', '1', '2023-07-19 10:13:17', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (139, '����ʵ����״̬', 'bpm_process_instance_status', 0, '����ʵ����״̬', '1', '2022-01-07 23:46:42', '1', '2022-01-07 23:46:42', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (140, '����ʵ���Ľ��', 'bpm_task_status', 0, '����ʵ���Ľ��', '1', '2022-01-07 23:48:10', '1', '2024-03-08 22:42:03', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (141, '���̵ı�����', 'bpm_model_form_type', 0, '���̵ı�����', '103', '2022-01-11 23:50:45', '103', '2022-01-11 23:50:45', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (142, '���������������', 'bpm_task_candidate_strategy', 0, 'BPM ����ĺ�ѡ�˵IJ���', '103', '2022-01-12 23:21:04', '103', '2024-03-06 02:53:59', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (144, '�������ɵij���ö��', 'infra_codegen_scene', 0, '�������ɵij���ö��', '1', '2022-02-02 13:14:45', '1', '2022-03-10 16:33:46', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (145, '��ɫ����', 'system_role_type', 0, '��ɫ����', '1', '2022-02-16 13:01:46', '1', '2022-02-16 13:01:46', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (146, '�ļ��洢��', 'infra_file_storage', 0, '�ļ��洢��', '1', '2022-03-15 00:24:38', '1', '2022-03-15 00:24:38', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (147, 'OAuth 2.0 ��Ȩ����', 'system_oauth2_grant_type', 0, 'OAuth 2.0 ��Ȩ���ͣ�ģʽ��', '1', '2022-05-12 00:20:52', '1', '2022-05-11 16:25:49', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (149, '��Ʒ SPU ״̬', 'product_spu_status', 0, '��Ʒ SPU ״̬', '1', '2022-10-24 21:19:04', '1', '2022-10-24 21:19:08', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (150, '�Ż�����', 'promotion_discount_type', 0, '�Ż�����', '1', '2022-11-01 12:46:06', '1', '2022-11-01 12:46:06', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (151, '�Ż݄�ģ�������������', 'promotion_coupon_template_validity_type', 0, '�Ż݄�ģ�������������', '1', '2022-11-02 00:06:20', '1', '2022-11-04 00:08:26', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (152, 'Ӫ������Ʒ��Χ', 'promotion_product_scope', 0, 'Ӫ������Ʒ��Χ', '1', '2022-11-02 00:28:01', '1', '2022-11-02 00:28:01', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (153, '�Ż݄���״̬', 'promotion_coupon_status', 0, '�Ż݄���״̬', '1', '2022-11-04 00:14:49', '1', '2022-11-04 00:14:49', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (154, '�Ż݄�����ȡ��ʽ', 'promotion_coupon_take_type', 0, '�Ż݄�����ȡ��ʽ', '1', '2022-11-04 19:12:27', '1', '2022-11-04 19:12:27', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (155, '�������״̬', 'promotion_activity_status', 0, '�������״̬', '1', '2022-11-04 22:54:23', '1', '2022-11-04 22:54:23', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (156, 'Ӫ������������', 'promotion_condition_type', 0, 'Ӫ������������', '1', '2022-11-04 22:59:23', '1', '2022-11-04 22:59:23', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (157, '�����ۺ�״̬', 'trade_after_sale_status', 0, '�����ۺ�״̬', '1', '2022-11-19 20:52:56', '1', '2022-11-19 20:52:56', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (158, '�����ۺ������', 'trade_after_sale_type', 0, '�����ۺ������', '1', '2022-11-19 21:04:09', '1', '2022-11-19 21:04:09', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (159, '�����ۺ�ķ�ʽ', 'trade_after_sale_way', 0, '�����ۺ�ķ�ʽ', '1', '2022-11-19 21:39:04', '1', '2022-11-19 21:39:04', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (160, '�ն�', 'terminal', 0, '�ն�', '1', '2022-12-10 10:50:50', '1', '2022-12-10 10:53:11', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (161, '���׶���������', 'trade_order_type', 0, '���׶���������', '1', '2022-12-10 16:33:54', '1', '2022-12-10 16:33:54', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (162, '���׶�����״̬', 'trade_order_status', 0, '���׶�����״̬', '1', '2022-12-10 16:48:44', '1', '2022-12-10 16:48:44', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (163, '���׶�������ۺ�״̬', 'trade_order_item_after_sale_status', 0, '���׶�������ۺ�״̬', '1', '2022-12-10 20:58:08', '1', '2022-12-10 20:58:08', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (164, '���ں��Զ��ظ�������ؼ���ƥ��ģʽ', 'mp_auto_reply_request_match', 0, '���ں��Զ��ظ�������ؼ���ƥ��ģʽ', '1', '2023-01-16 23:29:56', '1', '2023-01-16 23:29:56', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (165, '���ںŵ���Ϣ����', 'mp_message_type', 0, '���ںŵ���Ϣ����', '1', '2023-01-17 22:17:09', '1', '2023-01-17 22:17:09', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (166, '�ʼ�����״̬', 'system_mail_send_status', 0, '�ʼ�����״̬', '1', '2023-01-26 09:53:13', '1', '2023-01-26 09:53:13', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (167, 'վ����ģ�������', 'system_notify_template_type', 0, 'վ����ģ�������', '1', '2023-01-28 10:35:10', '1', '2023-01-28 10:35:10', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (168, '�������ɵ�ǰ������', 'infra_codegen_front_type', 0, '', '1', '2023-04-12 23:57:52', '1', '2023-04-12 23:57:52', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (170, '��ݼƷѷ�ʽ', 'trade_delivery_express_charge_mode', 0, '�����̳ǽ���ģ�����͹���', '1', '2023-05-21 22:45:03', '1', '2023-05-21 22:45:03', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (171, '����ҵ������', 'member_point_biz_type', 0, '', '1', '2023-06-10 12:15:00', '1', '2023-06-28 13:48:20', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (173, '֧��֪ͨ����', 'pay_notify_type', 0, NULL, '1', '2023-07-20 12:23:03', '1', '2023-07-20 12:23:03', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (174, '��Ա����ҵ������', 'member_experience_biz_type', 0, NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (175, '������������', 'trade_delivery_type', 0, '', '1', '2023-08-23 00:03:14', '1', '2023-08-23 00:03:14', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (176, '��Ӷģʽ', 'brokerage_enabled_condition', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (177, '������ϵ��ģʽ', 'brokerage_bind_mode', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (178, 'Ӷ����������', 'brokerage_withdraw_type', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (179, 'Ӷ���¼ҵ������', 'brokerage_record_biz_type', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (180, 'Ӷ���¼״̬', 'brokerage_record_status', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (181, 'Ӷ������״̬', 'brokerage_withdraw_status', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (182, 'Ӷ����������', 'brokerage_bank_name', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (183, '���ۼ�¼��״̬', 'promotion_bargain_record_status', 0, '', '1', '2023-10-05 10:41:08', '1', '2023-10-05 10:41:08', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (184, 'ƴ�ż�¼��״̬', 'promotion_combination_record_status', 0, '', '1', '2023-10-08 07:24:25', '1', '2023-10-08 07:24:25', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (185, '�ؿ�-�ؿʽ', 'crm_receivable_return_type', 0, '�ؿ�-�ؿʽ', '1', '2023-10-18 21:54:10', '1', '2023-10-18 21:54:10', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (186, 'CRM �ͻ���ҵ', 'crm_customer_industry', 0, 'CRM �ͻ�������ҵ', '1', '2023-10-28 22:57:07', '1', '2024-02-18 23:30:22', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (187, '�ͻ��ȼ�', 'crm_customer_level', 0, 'CRM �ͻ��ȼ�', '1', '2023-10-28 22:59:12', '1', '2023-10-28 15:11:16', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (188, '�ͻ���Դ', 'crm_customer_source', 0, 'CRM �ͻ���Դ', '1', '2023-10-28 23:00:34', '1', '2023-10-28 15:11:16', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (600, 'Banner λ��', 'promotion_banner_position', 0, '', '1', '2023-10-08 07:24:25', '1', '2023-11-04 13:04:02', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (601, '�罻����', 'system_social_type', 0, '', '1', '2023-11-04 13:03:54', '1', '2023-11-04 13:03:54', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (604, '��Ʒ״̬', 'crm_product_status', 0, '', '1', '2023-10-30 21:47:59', '1', '2023-10-30 21:48:45', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (605, 'CRM ����Ȩ�޵ļ���', 'crm_permission_level', 0, '', '1', '2023-11-30 09:51:59', '1', '2023-11-30 09:51:59', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (606, 'CRM ����״̬', 'crm_audit_status', 0, '', '1', '2023-11-30 18:56:23', '1', '2023-11-30 18:56:23', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (607, 'CRM ��Ʒ��λ', 'crm_product_unit', 0, '', '1', '2023-12-05 23:01:51', '1', '2023-12-05 23:01:51', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (608, 'CRM ������ʽ', 'crm_follow_up_type', 0, '', '1', '2024-01-15 20:48:05', '1', '2024-01-15 20:48:05', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (609, '֧��ת������', 'pay_transfer_type', 0, '', '1', '2023-10-28 16:27:18', '1', '2023-10-28 16:27:18', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (610, 'ת�˶���״̬', 'pay_transfer_status', 0, '', '1', '2023-10-28 16:18:32', '1', '2023-10-28 16:18:32', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (611, 'ERP �����ϸ��ҵ������', 'erp_stock_record_biz_type', 0, 'ERP �����ϸ��ҵ������', '1', '2024-02-05 18:07:02', '1', '2024-02-05 18:07:02', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (612, 'ERP ����״̬', 'erp_audit_status', 0, '', '1', '2024-02-06 00:00:07', '1', '2024-02-06 00:00:07', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (613, 'BPM ����������', 'bpm_process_listener_type', 0, '', '1', '2024-03-23 12:52:24', '1', '2024-03-09 15:54:28', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (615, 'BPM ������ֵ����', 'bpm_process_listener_value_type', 0, '', '1', '2024-03-23 13:00:31', '1', '2024-03-23 13:00:31', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (616, 'ʱ����', 'date_interval', 0, '', '1', '2024-03-29 22:50:09', '1', '2024-03-29 22:50:09', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (619, 'CRM �̻�����״̬����', 'crm_business_end_status_type', 0, '', '1', '2024-04-13 23:23:00', '1', '2024-04-13 23:23:00', '0', '1970-01-01 00:00:00'); +COMMIT; +SET IDENTITY_INSERT system_dict_type OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_login_log +-- ---------------------------- +CREATE TABLE system_login_log +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + log_type bigint NOT NULL, + trace_id varchar(64) DEFAULT '' NULL, + user_id bigint DEFAULT 0 NOT NULL, + user_type smallint DEFAULT 0 NOT NULL, + username varchar(50) DEFAULT '' NULL, + result smallint NOT NULL, + user_ip varchar(50) NOT NULL, + user_agent varchar(512) NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_login_log.id IS '����ID'; +COMMENT ON COLUMN system_login_log.log_type IS '��־����'; +COMMENT ON COLUMN system_login_log.trace_id IS '��·׷�ٱ��'; +COMMENT ON COLUMN system_login_log.user_id IS '�û����'; +COMMENT ON COLUMN system_login_log.user_type IS '�û�����'; +COMMENT ON COLUMN system_login_log.username IS '�û��˺�'; +COMMENT ON COLUMN system_login_log.result IS '��½���'; +COMMENT ON COLUMN system_login_log.user_ip IS '�û� IP'; +COMMENT ON COLUMN system_login_log.user_agent IS '����� UA'; +COMMENT ON COLUMN system_login_log.creator IS '������'; +COMMENT ON COLUMN system_login_log.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_login_log.updater IS '������'; +COMMENT ON COLUMN system_login_log.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_login_log.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_login_log.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_login_log IS 'ϵͳ���ʼ�¼'; + +-- ---------------------------- +-- Table structure for system_mail_account +-- ---------------------------- +CREATE TABLE system_mail_account +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + mail varchar(255) NOT NULL, + username varchar(255) NOT NULL, + password varchar(255) NOT NULL, + host varchar(255) NOT NULL, + port int NOT NULL, + ssl_enable bit DEFAULT '0' NOT NULL, + starttls_enable bit DEFAULT '0' NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN system_mail_account.id IS '����'; +COMMENT ON COLUMN system_mail_account.mail IS '����'; +COMMENT ON COLUMN system_mail_account.username IS '�û���'; +COMMENT ON COLUMN system_mail_account.password IS '����'; +COMMENT ON COLUMN system_mail_account.host IS 'SMTP ����������'; +COMMENT ON COLUMN system_mail_account.port IS 'SMTP �������˿�'; +COMMENT ON COLUMN system_mail_account.ssl_enable IS '�Ƿ��� SSL'; +COMMENT ON COLUMN system_mail_account.starttls_enable IS '�Ƿ��� STARTTLS'; +COMMENT ON COLUMN system_mail_account.creator IS '������'; +COMMENT ON COLUMN system_mail_account.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_mail_account.updater IS '������'; +COMMENT ON COLUMN system_mail_account.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_mail_account.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE system_mail_account IS '�����˺ű�'; + +-- ---------------------------- +-- Records of system_mail_account +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_mail_account ON; +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (1, '7684413@qq.com', '7684413@qq.com', '1234576', '127.0.0.1', 8080, '0', '0', '1', '2023-01-25 17:39:52', '1', '2024-04-24 09:13:56', '0'); +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (2, 'ydym_test@163.com', 'ydym_test@163.com', 'WBZTEINMIFVRYSOE', 'smtp.163.com', 465, '1', '0', '1', '2023-01-26 01:26:03', '1', '2023-04-12 22:39:38', '0'); +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (3, '76854114@qq.com', '3335', '11234', 'yunai1.cn', 466, '0', '0', '1', '2023-01-27 15:06:38', '1', '2023-01-27 07:08:36', '1'); +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (4, '7685413x@qq.com', '2', '3', '4', 5, '1', '0', '1', '2023-04-12 23:05:06', '1', '2023-04-12 15:05:11', '1'); +COMMIT; +SET IDENTITY_INSERT system_mail_account OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_mail_log +-- ---------------------------- +CREATE TABLE system_mail_log +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint DEFAULT NULL NULL, + user_type smallint DEFAULT NULL NULL, + to_mail varchar(255) NOT NULL, + account_id bigint NOT NULL, + from_mail varchar(255) NOT NULL, + template_id bigint NOT NULL, + template_code varchar(63) NOT NULL, + template_nickname varchar(255) DEFAULT NULL NULL, + template_title varchar(255) NOT NULL, + template_content varchar(10240) NOT NULL, + template_params varchar(255) NOT NULL, + send_status smallint DEFAULT 0 NOT NULL, + send_time datetime DEFAULT NULL NULL, + send_message_id varchar(255) DEFAULT NULL NULL, + send_exception varchar(4096) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN system_mail_log.id IS '���'; +COMMENT ON COLUMN system_mail_log.user_id IS '�û����'; +COMMENT ON COLUMN system_mail_log.user_type IS '�û�����'; +COMMENT ON COLUMN system_mail_log.to_mail IS '���������ַ'; +COMMENT ON COLUMN system_mail_log.account_id IS '�����˺ű��'; +COMMENT ON COLUMN system_mail_log.from_mail IS '���������ַ'; +COMMENT ON COLUMN system_mail_log.template_id IS 'ģ����'; +COMMENT ON COLUMN system_mail_log.template_code IS 'ģ�����'; +COMMENT ON COLUMN system_mail_log.template_nickname IS 'ģ�淢��������'; +COMMENT ON COLUMN system_mail_log.template_title IS '�ʼ�����'; +COMMENT ON COLUMN system_mail_log.template_content IS '�ʼ�����'; +COMMENT ON COLUMN system_mail_log.template_params IS '�ʼ�����'; +COMMENT ON COLUMN system_mail_log.send_status IS '����״̬'; +COMMENT ON COLUMN system_mail_log.send_time IS '����ʱ��'; +COMMENT ON COLUMN system_mail_log.send_message_id IS '���ͷ��ص���Ϣ ID'; +COMMENT ON COLUMN system_mail_log.send_exception IS '�����쳣'; +COMMENT ON COLUMN system_mail_log.creator IS '������'; +COMMENT ON COLUMN system_mail_log.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_mail_log.updater IS '������'; +COMMENT ON COLUMN system_mail_log.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_mail_log.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE system_mail_log IS '�ʼ���־��'; + +-- ---------------------------- +-- Table structure for system_mail_template +-- ---------------------------- +CREATE TABLE system_mail_template +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(63) NOT NULL, + code varchar(63) NOT NULL, + account_id bigint NOT NULL, + nickname varchar(255) DEFAULT NULL NULL, + title varchar(255) NOT NULL, + content varchar(10240) NOT NULL, + params varchar(255) NOT NULL, + status smallint NOT NULL, + remark varchar(255) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN system_mail_template.id IS '���'; +COMMENT ON COLUMN system_mail_template.name IS 'ģ������'; +COMMENT ON COLUMN system_mail_template.code IS 'ģ�����'; +COMMENT ON COLUMN system_mail_template.account_id IS '���͵������˺ű��'; +COMMENT ON COLUMN system_mail_template.nickname IS '����������'; +COMMENT ON COLUMN system_mail_template.title IS 'ģ�����'; +COMMENT ON COLUMN system_mail_template.content IS 'ģ������'; +COMMENT ON COLUMN system_mail_template.params IS '��������'; +COMMENT ON COLUMN system_mail_template.status IS '����״̬'; +COMMENT ON COLUMN system_mail_template.remark IS '��ע'; +COMMENT ON COLUMN system_mail_template.creator IS '������'; +COMMENT ON COLUMN system_mail_template.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_mail_template.updater IS '������'; +COMMENT ON COLUMN system_mail_template.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_mail_template.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE system_mail_template IS '�ʼ�ģ���'; + +-- ---------------------------- +-- Records of system_mail_template +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_mail_template ON; +INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (13, '��̨�û����ŵ�¼', 'admin-sms-login', 1, '������', '����Ҳ�', '

    ������֤����{code}��������{name}

    ', '["code","name"]', 0, '3', '1', '2021-10-11 08:10:00', '1', '2023-12-02 19:51:14', '0'); +INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (14, '����ģ��', 'test_01', 2, '��ܵ', 'һ������', '

    ���� {key01} ��


    �ǵĻ����Ͻ� {key02} һ�£�

    ', '["key01","key02"]', 0, NULL, '1', '2023-01-26 01:27:40', '1', '2023-01-27 10:32:16', '0'); +INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (15, '3', '2', 2, '7', '4', '

    45

    ', '[]', 1, '80', '1', '2023-01-27 15:50:35', '1', '2023-01-27 16:34:49', '0'); +COMMIT; +SET IDENTITY_INSERT system_mail_template OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_menu +-- ---------------------------- +CREATE TABLE system_menu +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(50) NOT NULL, + permission varchar(100) DEFAULT '' NULL, + type smallint NOT NULL, + sort int DEFAULT 0 NOT NULL, + parent_id bigint DEFAULT 0 NOT NULL, + path varchar(200) DEFAULT '' NULL, + icon varchar(100) DEFAULT '#' NULL, + component varchar(255) DEFAULT NULL NULL, + component_name varchar(255) DEFAULT NULL NULL, + status smallint DEFAULT 0 NOT NULL, + visible bit DEFAULT '1' NOT NULL, + keep_alive bit DEFAULT '1' NOT NULL, + always_show bit DEFAULT '1' NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN system_menu.id IS '�˵�ID'; +COMMENT ON COLUMN system_menu.name IS '�˵�����'; +COMMENT ON COLUMN system_menu.permission IS 'Ȩ�ޱ�ʶ'; +COMMENT ON COLUMN system_menu.type IS '�˵�����'; +COMMENT ON COLUMN system_menu.sort IS '��ʾ˳��'; +COMMENT ON COLUMN system_menu.parent_id IS '���˵�ID'; +COMMENT ON COLUMN system_menu.path IS '·�ɵ�ַ'; +COMMENT ON COLUMN system_menu.icon IS '�˵�ͼ��'; +COMMENT ON COLUMN system_menu.component IS '���·��'; +COMMENT ON COLUMN system_menu.component_name IS '�����'; +COMMENT ON COLUMN system_menu.status IS '�˵�״̬'; +COMMENT ON COLUMN system_menu.visible IS '�Ƿ�ɼ�'; +COMMENT ON COLUMN system_menu.keep_alive IS '�Ƿ񻺴�'; +COMMENT ON COLUMN system_menu.always_show IS '�Ƿ�������ʾ'; +COMMENT ON COLUMN system_menu.creator IS '������'; +COMMENT ON COLUMN system_menu.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_menu.updater IS '������'; +COMMENT ON COLUMN system_menu.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_menu.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE system_menu IS '�˵�Ȩ�ޱ�'; + +-- ---------------------------- +-- Records of system_menu +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_menu ON; +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1, 'ϵͳ����', '', 1, 10, 0, '/system', 'ep:tools', NULL, NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:04:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2, '������ʩ', '', 1, 20, 0, '/infra', 'ep:monitor', NULL, NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-03-01 08:28:40', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5, 'OA ʾ��', '', 1, 40, 1185, 'oa', 'fa:road', NULL, NULL, 0, '1', '1', '1', 'admin', '2021-09-20 16:26:19', '1', '2024-02-29 12:38:13', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (100, '�û�����', 'system:user:list', 2, 1, 1, 'user', 'ep:avatar', 'system/user/index', 'SystemUser', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:02:04', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (101, '��ɫ����', '', 2, 2, 1, 'role', 'ep:user', 'system/role/index', 'SystemRole', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:03:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (102, '�˵�����', '', 2, 3, 1, 'menu', 'ep:menu', 'system/menu/index', 'SystemMenu', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:03:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (103, '���Ź���', '', 2, 4, 1, 'dept', 'fa:address-card', 'system/dept/index', 'SystemDept', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:06:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (104, '��λ����', '', 2, 5, 1, 'post', 'fa:address-book-o', 'system/post/index', 'SystemPost', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:06:39', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (105, '�ֵ����', '', 2, 6, 1, 'dict', 'ep:collection', 'system/dict/index', 'SystemDictType', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:07:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (106, '���ù���', '', 2, 8, 2, 'config', 'fa:connectdevelop', 'infra/config/index', 'InfraConfig', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:02:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (107, '֪ͨ����', '', 2, 4, 2739, 'notice', 'ep:takeaway-box', 'system/notice/index', 'SystemNotice', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-22 23:56:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (108, '�����־', '', 1, 9, 1, 'log', 'ep:document-copy', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:08:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (109, '���ƹ���', '', 2, 2, 1261, 'token', 'fa:key', 'system/oauth2/token/index', 'SystemTokenClient', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:13:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (110, '��ʱ����', '', 2, 7, 2, 'job', 'fa-solid:tasks', 'infra/job/index', 'InfraJob', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 08:57:36', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (111, 'MySQL ���', '', 2, 1, 2740, 'druid', 'fa-solid:box', 'infra/druid/index', 'InfraDruid', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:05:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (112, 'Java ���', '', 2, 3, 2740, 'admin-server', 'ep:coffee-cup', 'infra/server/index', 'InfraAdminServer', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:06:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (113, 'Redis ���', '', 2, 2, 2740, 'redis', 'fa:reddit-square', 'infra/redis/index', 'InfraRedis', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:06:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (114, '������', 'infra:build:list', 2, 2, 2, 'build', 'fa:wpforms', 'infra/build/index', 'InfraBuild', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 08:51:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (115, '��������', 'infra:codegen:query', 2, 1, 2, 'codegen', 'ep:document-copy', 'infra/codegen/index', 'InfraCodegen', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 08:51:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (116, 'API �ӿ�', 'infra:swagger:list', 2, 3, 2, 'swagger', 'fa:fighter-jet', 'infra/swagger/index', 'InfraSwagger', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:01:24', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (500, '������־', '', 2, 1, 108, 'operate-log', 'ep:position', 'system/operatelog/index', 'SystemOperateLog', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:09:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (501, '��¼��־', '', 2, 2, 108, 'login-log', 'ep:promotion', 'system/loginlog/index', 'SystemLoginLog', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:10:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1001, '�û���ѯ', 'system:user:query', 3, 1, 100, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1002, '�û�����', 'system:user:create', 3, 2, 100, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1003, '�û��޸�', 'system:user:update', 3, 3, 100, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1004, '�û�ɾ��', 'system:user:delete', 3, 4, 100, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1005, '�û�����', 'system:user:export', 3, 5, 100, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1006, '�û�����', 'system:user:import', 3, 6, 100, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1007, '��������', 'system:user:update-password', 3, 7, 100, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1008, '��ɫ��ѯ', 'system:role:query', 3, 1, 101, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1009, '��ɫ����', 'system:role:create', 3, 2, 101, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1010, '��ɫ�޸�', 'system:role:update', 3, 3, 101, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1011, '��ɫɾ��', 'system:role:delete', 3, 4, 101, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1012, '��ɫ����', 'system:role:export', 3, 5, 101, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1013, '�˵���ѯ', 'system:menu:query', 3, 1, 102, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1014, '�˵�����', 'system:menu:create', 3, 2, 102, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1015, '�˵��޸�', 'system:menu:update', 3, 3, 102, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1016, '�˵�ɾ��', 'system:menu:delete', 3, 4, 102, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1017, '���Ų�ѯ', 'system:dept:query', 3, 1, 103, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1018, '��������', 'system:dept:create', 3, 2, 103, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1019, '�����޸�', 'system:dept:update', 3, 3, 103, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1020, '����ɾ��', 'system:dept:delete', 3, 4, 103, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1021, '��λ��ѯ', 'system:post:query', 3, 1, 104, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1022, '��λ����', 'system:post:create', 3, 2, 104, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1023, '��λ�޸�', 'system:post:update', 3, 3, 104, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1024, '��λɾ��', 'system:post:delete', 3, 4, 104, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1025, '��λ����', 'system:post:export', 3, 5, 104, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1026, '�ֵ��ѯ', 'system:dict:query', 3, 1, 105, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1027, '�ֵ�����', 'system:dict:create', 3, 2, 105, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1028, '�ֵ��޸�', 'system:dict:update', 3, 3, 105, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1029, '�ֵ�ɾ��', 'system:dict:delete', 3, 4, 105, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1030, '�ֵ䵼��', 'system:dict:export', 3, 5, 105, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1031, '���ò�ѯ', 'infra:config:query', 3, 1, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1032, '��������', 'infra:config:create', 3, 2, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1033, '�����޸�', 'infra:config:update', 3, 3, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1034, '����ɾ��', 'infra:config:delete', 3, 4, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1035, '���õ���', 'infra:config:export', 3, 5, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1036, '�����ѯ', 'system:notice:query', 3, 1, 107, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1037, '��������', 'system:notice:create', 3, 2, 107, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1038, '�����޸�', 'system:notice:update', 3, 3, 107, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1039, '����ɾ��', 'system:notice:delete', 3, 4, 107, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1040, '������ѯ', 'system:operate-log:query', 3, 1, 500, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1042, '��־����', 'system:operate-log:export', 3, 2, 500, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1043, '��¼��ѯ', 'system:login-log:query', 3, 1, 501, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1045, '��־����', 'system:login-log:export', 3, 3, 501, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1046, '�����б�', 'system:oauth2-token:page', 3, 1, 109, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-05-09 23:54:42', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1048, '����ɾ��', 'system:oauth2-token:delete', 3, 2, 109, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-05-09 23:54:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1050, '��������', 'infra:job:create', 3, 2, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1051, '�����޸�', 'infra:job:update', 3, 3, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1052, '����ɾ��', 'infra:job:delete', 3, 4, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1053, '״̬�޸�', 'infra:job:update', 3, 5, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1054, '���񵼳�', 'infra:job:export', 3, 7, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1056, '�����޸�', 'infra:codegen:update', 3, 2, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1057, '����ɾ��', 'infra:codegen:delete', 3, 3, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1058, '�������', 'infra:codegen:create', 3, 2, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1059, 'Ԥ������', 'infra:codegen:preview', 3, 4, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1060, '���ɴ���', 'infra:codegen:download', 3, 5, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1063, '���ý�ɫ�˵�Ȩ��', 'system:permission:assign-role-menu', 3, 6, 101, '', '', '', NULL, 0, '1', '1', '1', '', '2021-01-06 17:53:44', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1064, '���ý�ɫ����Ȩ��', 'system:permission:assign-role-data-scope', 3, 7, 101, '', '', '', NULL, 0, '1', '1', '1', '', '2021-01-06 17:56:31', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1065, '�����û���ɫ', 'system:permission:assign-user-role', 3, 8, 101, '', '', '', NULL, 0, '1', '1', '1', '', '2021-01-07 10:23:28', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1066, '��� Redis �����Ϣ', 'infra:redis:get-monitor-info', 3, 1, 113, '', '', '', NULL, 0, '1', '1', '1', '', '2021-01-26 01:02:31', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1067, '��� Redis Key �б�', 'infra:redis:get-key-list', 3, 2, 113, '', '', '', NULL, 0, '1', '1', '1', '', '2021-01-26 01:02:52', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1070, '�������ɰ���', '', 1, 1, 2, 'demo', 'ep:aim', 'infra/testDemo/index', NULL, 0, '1', '1', '1', '', '2021-02-06 12:42:49', '1', '2023-11-15 23:45:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1075, '���񴥷�', 'infra:job:trigger', 3, 8, 110, '', '', '', NULL, 0, '1', '1', '1', '', '2021-02-07 13:03:10', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1077, '��·׷��', '', 2, 4, 2740, 'skywalking', 'fa:eye', 'infra/skywalking/index', 'InfraSkyWalking', 0, '1', '1', '1', '', '2021-02-08 20:41:31', '1', '2024-04-23 00:07:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1078, '������־', '', 2, 1, 1083, 'api-access-log', 'ep:place', 'infra/apiAccessLog/index', 'InfraApiAccessLog', 0, '1', '1', '1', '', '2021-02-26 01:32:59', '1', '2024-02-29 08:54:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1082, '��־����', 'infra:api-access-log:export', 3, 2, 1078, '', '', '', NULL, 0, '1', '1', '1', '', '2021-02-26 01:32:59', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1083, 'API ��־', '', 2, 4, 2, 'log', 'fa:tasks', NULL, NULL, 0, '1', '1', '1', '', '2021-02-26 02:18:24', '1', '2024-04-22 23:58:36', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1084, '������־', 'infra:api-error-log:query', 2, 2, 1083, 'api-error-log', 'ep:warning-filled', 'infra/apiErrorLog/index', 'InfraApiErrorLog', 0, '1', '1', '1', '', '2021-02-26 07:53:20', '1', '2024-02-29 08:55:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1085, '��־����', 'infra:api-error-log:update-status', 3, 2, 1084, '', '', '', NULL, 0, '1', '1', '1', '', '2021-02-26 07:53:20', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1086, '��־����', 'infra:api-error-log:export', 3, 3, 1084, '', '', '', NULL, 0, '1', '1', '1', '', '2021-02-26 07:53:20', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1087, '�����ѯ', 'infra:job:query', 3, 1, 110, '', '', '', NULL, 0, '1', '1', '1', '1', '2021-03-10 01:26:19', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1088, '��־��ѯ', 'infra:api-access-log:query', 3, 1, 1078, '', '', '', NULL, 0, '1', '1', '1', '1', '2021-03-10 01:28:04', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1089, '��־��ѯ', 'infra:api-error-log:query', 3, 1, 1084, '', '', '', NULL, 0, '1', '1', '1', '1', '2021-03-10 01:29:09', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1090, '�ļ��б�', '', 2, 5, 1243, 'file', 'ep:upload-filled', 'infra/file/index', 'InfraFile', 0, '1', '1', '1', '', '2021-03-12 20:16:20', '1', '2024-02-29 08:53:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1091, '�ļ���ѯ', 'infra:file:query', 3, 1, 1090, '', '', '', NULL, 0, '1', '1', '1', '', '2021-03-12 20:16:20', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1092, '�ļ�ɾ��', 'infra:file:delete', 3, 4, 1090, '', '', '', NULL, 0, '1', '1', '1', '', '2021-03-12 20:16:20', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1093, '���Ź���', '', 1, 1, 2739, 'sms', 'ep:message', NULL, NULL, 0, '1', '1', '1', '1', '2021-04-05 01:10:16', '1', '2024-04-22 23:56:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1094, '��������', '', 2, 0, 1093, 'sms-channel', 'fa:stack-exchange', 'system/sms/channel/index', 'SystemSmsChannel', 0, '1', '1', '1', '', '2021-04-01 11:07:15', '1', '2024-02-29 01:15:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1095, '����������ѯ', 'system:sms-channel:query', 3, 1, 1094, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1096, '������������', 'system:sms-channel:create', 3, 2, 1094, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1097, '������������', 'system:sms-channel:update', 3, 3, 1094, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1098, '��������ɾ��', 'system:sms-channel:delete', 3, 4, 1094, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1100, '����ģ��', '', 2, 1, 1093, 'sms-template', 'ep:connection', 'system/sms/template/index', 'SystemSmsTemplate', 0, '1', '1', '1', '', '2021-04-01 17:35:17', '1', '2024-02-29 01:16:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1101, '����ģ���ѯ', 'system:sms-template:query', 3, 1, 1100, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1102, '����ģ�崴��', 'system:sms-template:create', 3, 2, 1100, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1103, '����ģ�����', 'system:sms-template:update', 3, 3, 1100, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1104, '����ģ��ɾ��', 'system:sms-template:delete', 3, 4, 1100, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1105, '����ģ�嵼��', 'system:sms-template:export', 3, 5, 1100, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1106, '���Ͳ��Զ���', 'system:sms-template:send-sms', 3, 6, 1100, '', '', '', NULL, 0, '1', '1', '1', '1', '2021-04-11 00:26:40', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1107, '������־', '', 2, 2, 1093, 'sms-log', 'fa:edit', 'system/sms/log/index', 'SystemSmsLog', 0, '1', '1', '1', '', '2021-04-11 08:37:05', '1', '2024-02-29 08:49:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1108, '������־��ѯ', 'system:sms-log:query', 3, 1, 1107, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-11 08:37:05', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1109, '������־����', 'system:sms-log:export', 3, 5, 1107, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-11 08:37:05', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1117, '֧������', '', 1, 30, 0, '/pay', 'ep:money', NULL, NULL, 0, '1', '1', '1', '1', '2021-12-25 16:43:41', '1', '2024-02-29 08:58:38', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1118, '��ٲ�ѯ', '', 2, 0, 5, 'leave', 'fa:leanpub', 'bpm/oa/leave/index', 'BpmOALeave', 0, '1', '1', '1', '', '2021-09-20 08:51:03', '1', '2024-02-29 12:38:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1119, '��������ѯ', 'bpm:oa-leave:query', 3, 1, 1118, '', '', '', NULL, 0, '1', '1', '1', '', '2021-09-20 08:51:03', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1120, '������봴��', 'bpm:oa-leave:create', 3, 2, 1118, '', '', '', NULL, 0, '1', '1', '1', '', '2021-09-20 08:51:03', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1126, 'Ӧ����Ϣ', '', 2, 1, 1117, 'app', 'fa:apple', 'pay/app/index', 'PayApp', 0, '1', '1', '1', '', '2021-11-10 01:13:30', '1', '2024-02-29 08:59:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1127, '֧��Ӧ����Ϣ��ѯ', 'pay:app:query', 3, 1, 1126, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1128, '֧��Ӧ����Ϣ����', 'pay:app:create', 3, 2, 1126, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1129, '֧��Ӧ����Ϣ����', 'pay:app:update', 3, 3, 1126, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1130, '֧��Ӧ����Ϣɾ��', 'pay:app:delete', 3, 4, 1126, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1132, '��Կ����', 'pay:channel:parsing', 3, 6, 1129, '', '', '', NULL, 0, '1', '1', '1', '1', '2021-11-08 15:15:47', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1133, '֧���̻���Ϣ��ѯ', 'pay:merchant:query', 3, 1, 1132, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1134, '֧���̻���Ϣ����', 'pay:merchant:create', 3, 2, 1132, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1135, '֧���̻���Ϣ����', 'pay:merchant:update', 3, 3, 1132, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1136, '֧���̻���Ϣɾ��', 'pay:merchant:delete', 3, 4, 1132, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1137, '֧���̻���Ϣ����', 'pay:merchant:export', 3, 5, 1132, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1138, '�⻧�б�', '', 2, 0, 1224, 'list', 'ep:house', 'system/tenant/index', 'SystemTenant', 0, '1', '1', '1', '', '2021-12-14 12:31:43', '1', '2024-02-29 01:01:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1139, '�⻧��ѯ', 'system:tenant:query', 3, 1, 1138, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1140, '�⻧����', 'system:tenant:create', 3, 2, 1138, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1141, '�⻧����', 'system:tenant:update', 3, 3, 1138, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1142, '�⻧ɾ��', 'system:tenant:delete', 3, 4, 1138, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1143, '�⻧����', 'system:tenant:export', 3, 5, 1138, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1150, '��Կ����', '', 3, 6, 1129, '', '', '', NULL, 0, '1', '1', '1', '1', '2021-11-08 15:15:47', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1161, '�˿��', '', 2, 3, 1117, 'refund', 'fa:registered', 'pay/refund/index', 'PayRefund', 0, '1', '1', '1', '', '2021-12-25 08:29:07', '1', '2024-02-29 08:59:20', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1162, '�˿����ѯ', 'pay:refund:query', 3, 1, 1161, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1163, '�˿������', 'pay:refund:create', 3, 2, 1161, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1164, '�˿������', 'pay:refund:update', 3, 3, 1161, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1165, '�˿��ɾ��', 'pay:refund:delete', 3, 4, 1161, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1166, '�˿������', 'pay:refund:export', 3, 5, 1161, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1173, '֧������', '', 2, 2, 1117, 'order', 'fa:cc-paypal', 'pay/order/index', 'PayOrder', 0, '1', '1', '1', '', '2021-12-25 08:49:43', '1', '2024-02-29 08:59:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1174, '֧��������ѯ', 'pay:order:query', 3, 1, 1173, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1175, '֧����������', 'pay:order:create', 3, 2, 1173, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1176, '֧����������', 'pay:order:update', 3, 3, 1173, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1177, '֧������ɾ��', 'pay:order:delete', 3, 4, 1173, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1178, '֧����������', 'pay:order:export', 3, 5, 1173, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1185, '��������', '', 1, 50, 0, '/bpm', 'fa:medium', NULL, NULL, 0, '1', '1', '1', '1', '2021-12-30 20:26:36', '1', '2024-02-29 12:43:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1186, '���̹���', '', 1, 10, 1185, 'manager', 'fa:dedent', NULL, NULL, 0, '1', '1', '1', '1', '2021-12-30 20:28:30', '1', '2024-02-29 12:36:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1187, '���̱�', '', 2, 2, 1186, 'form', 'fa:hdd-o', 'bpm/form/index', 'BpmForm', 0, '1', '1', '1', '', '2021-12-30 12:38:22', '1', '2024-03-19 12:25:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1188, '����ѯ', 'bpm:form:query', 3, 1, 1187, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1189, '������', 'bpm:form:create', 3, 2, 1187, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1190, '������', 'bpm:form:update', 3, 3, 1187, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1191, '��ɾ��', 'bpm:form:delete', 3, 4, 1187, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1192, '������', 'bpm:form:export', 3, 5, 1187, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1193, '����ģ��', '', 2, 1, 1186, 'model', 'fa-solid:project-diagram', 'bpm/model/index', 'BpmModel', 0, '1', '1', '1', '1', '2021-12-31 23:24:58', '1', '2024-03-19 12:25:19', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1194, 'ģ�Ͳ�ѯ', 'bpm:model:query', 3, 1, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-03 19:01:10', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1195, 'ģ�ʹ���', 'bpm:model:create', 3, 2, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-03 19:01:24', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1196, 'ģ�͵���', 'bpm:model:import', 3, 3, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-03 19:01:35', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1197, 'ģ�͸���', 'bpm:model:update', 3, 4, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-03 19:02:28', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1198, 'ģ��ɾ��', 'bpm:model:delete', 3, 5, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-03 19:02:43', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1199, 'ģ�ͷ���', 'bpm:model:deploy', 3, 6, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-03 19:03:24', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1200, '��������', '', 2, 20, 1185, 'task', 'fa:tasks', NULL, NULL, 0, '1', '1', '1', '1', '2022-01-07 23:51:48', '1', '2024-03-21 00:33:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1201, '�ҵ�����', '', 2, 1, 1200, 'my', 'fa-solid:book', 'bpm/processInstance/index', 'BpmProcessInstanceMy', 0, '1', '1', '1', '', '2022-01-07 15:53:44', '1', '2024-03-21 23:52:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1202, '����ʵ���IJ�ѯ', 'bpm:process-instance:query', 3, 1, 1201, '', '', '', NULL, 0, '1', '1', '1', '', '2022-01-07 15:53:44', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1207, '��������', '', 2, 10, 1200, 'todo', 'fa:slack', 'bpm/task/todo/index', 'BpmTodoTask', 0, '1', '1', '1', '1', '2022-01-08 10:33:37', '1', '2024-02-29 12:37:39', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1208, '�Ѱ�����', '', 2, 20, 1200, 'done', 'fa:delicious', 'bpm/task/done/index', 'BpmDoneTask', 0, '1', '1', '1', '1', '2022-01-08 10:34:13', '1', '2024-02-29 12:37:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1209, '�û�����', '', 2, 4, 1186, 'user-group', 'fa:user-secret', 'bpm/group/index', 'BpmUserGroup', 0, '1', '1', '1', '', '2022-01-14 02:14:20', '1', '2024-03-21 23:55:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1210, '�û����ѯ', 'bpm:user-group:query', 3, 1, 1209, '', '', '', NULL, 0, '1', '1', '1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1211, '�û��鴴��', 'bpm:user-group:create', 3, 2, 1209, '', '', '', NULL, 0, '1', '1', '1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1212, '�û������', 'bpm:user-group:update', 3, 3, 1209, '', '', '', NULL, 0, '1', '1', '1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1213, '�û���ɾ��', 'bpm:user-group:delete', 3, 4, 1209, '', '', '', NULL, 0, '1', '1', '1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1215, '���̶����ѯ', 'bpm:process-definition:query', 3, 10, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:21:43', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1216, '���������������ѯ', 'bpm:task-assign-rule:query', 3, 20, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:26:53', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1217, '�������������򴴽�', 'bpm:task-assign-rule:create', 3, 21, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:28:15', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1218, '�����������������', 'bpm:task-assign-rule:update', 3, 22, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:28:41', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1219, '����ʵ���Ĵ���', 'bpm:process-instance:create', 3, 2, 1201, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:36:15', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1220, '����ʵ����ȡ��', 'bpm:process-instance:cancel', 3, 3, 1201, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:36:33', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1221, '��������IJ�ѯ', 'bpm:task:query', 3, 1, 1207, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:38:52', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1222, '��������ĸ���', 'bpm:task:update', 3, 2, 1207, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:39:24', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1224, '�⻧����', '', 2, 0, 1, 'tenant', 'fa-solid:house-user', NULL, NULL, 0, '1', '1', '1', '1', '2022-02-20 01:41:13', '1', '2024-02-29 00:59:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1225, '�⻧�ײ�', '', 2, 0, 1224, 'package', 'fa:bars', 'system/tenantPackage/index', 'SystemTenantPackage', 0, '1', '1', '1', '', '2022-02-19 17:44:06', '1', '2024-02-29 01:01:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1226, '�⻧�ײͲ�ѯ', 'system:tenant-package:query', 3, 1, 1225, '', '', '', NULL, 0, '1', '1', '1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1227, '�⻧�ײʹ���', 'system:tenant-package:create', 3, 2, 1225, '', '', '', NULL, 0, '1', '1', '1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1228, '�⻧�ײ͸���', 'system:tenant-package:update', 3, 3, 1225, '', '', '', NULL, 0, '1', '1', '1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1229, '�⻧�ײ�ɾ��', 'system:tenant-package:delete', 3, 4, 1225, '', '', '', NULL, 0, '1', '1', '1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1237, '�ļ�����', '', 2, 0, 1243, 'file-config', 'fa-solid:file-signature', 'infra/fileConfig/index', 'InfraFileConfig', 0, '1', '1', '1', '', '2022-03-15 14:35:28', '1', '2024-02-29 08:52:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1238, '�ļ����ò�ѯ', 'infra:file-config:query', 3, 1, 1237, '', '', '', NULL, 0, '1', '1', '1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1239, '�ļ����ô���', 'infra:file-config:create', 3, 2, 1237, '', '', '', NULL, 0, '1', '1', '1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1240, '�ļ����ø���', 'infra:file-config:update', 3, 3, 1237, '', '', '', NULL, 0, '1', '1', '1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1241, '�ļ�����ɾ��', 'infra:file-config:delete', 3, 4, 1237, '', '', '', NULL, 0, '1', '1', '1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1242, '�ļ����õ���', 'infra:file-config:export', 3, 5, 1237, '', '', '', NULL, 0, '1', '1', '1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1243, '�ļ�����', '', 2, 6, 2, 'file', 'ep:files', NULL, '', 0, '1', '1', '1', '1', '2022-03-16 23:47:40', '1', '2024-04-23 00:02:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1254, '���߶�̬', '', 1, 0, 0, 'https://www.iocoder.cn', 'ep:avatar', NULL, NULL, 0, '1', '1', '1', '1', '2022-04-23 01:03:15', '1', '2023-12-08 23:40:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1255, '����Դ����', '', 2, 1, 2, 'data-source-config', 'ep:data-analysis', 'infra/dataSourceConfig/index', 'InfraDataSourceConfig', 0, '1', '1', '1', '', '2022-04-27 14:37:32', '1', '2024-02-29 08:51:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1256, '����Դ���ò�ѯ', 'infra:data-source-config:query', 3, 1, 1255, '', '', '', NULL, 0, '1', '1', '1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1257, '����Դ���ô���', 'infra:data-source-config:create', 3, 2, 1255, '', '', '', NULL, 0, '1', '1', '1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1258, '����Դ���ø���', 'infra:data-source-config:update', 3, 3, 1255, '', '', '', NULL, 0, '1', '1', '1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1259, '����Դ����ɾ��', 'infra:data-source-config:delete', 3, 4, 1255, '', '', '', NULL, 0, '1', '1', '1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1260, '����Դ���õ���', 'infra:data-source-config:export', 3, 5, 1255, '', '', '', NULL, 0, '1', '1', '1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1261, 'OAuth 2.0', '', 2, 10, 1, 'oauth2', 'fa:dashcube', NULL, NULL, 0, '1', '1', '1', '1', '2022-05-09 23:38:17', '1', '2024-02-29 01:12:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1263, 'Ӧ�ù���', '', 2, 0, 1261, 'oauth2/application', 'fa:hdd-o', 'system/oauth2/client/index', 'SystemOAuth2Client', 0, '1', '1', '1', '', '2022-05-10 16:26:33', '1', '2024-02-29 01:13:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1264, '�ͻ��˲�ѯ', 'system:oauth2-client:query', 3, 1, 1263, '', '', '', NULL, 0, '1', '1', '1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1265, '�ͻ��˴���', 'system:oauth2-client:create', 3, 2, 1263, '', '', '', NULL, 0, '1', '1', '1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1266, '�ͻ��˸���', 'system:oauth2-client:update', 3, 3, 1263, '', '', '', NULL, 0, '1', '1', '1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1267, '�ͻ���ɾ��', 'system:oauth2-client:delete', 3, 4, 1263, '', '', '', NULL, 0, '1', '1', '1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:33', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1281, '�������', '', 2, 40, 0, '/report', 'ep:pie-chart', NULL, NULL, 0, '1', '1', '1', '1', '2022-07-10 20:22:15', '1', '2024-02-29 12:33:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1282, '���������', '', 2, 1, 1281, 'jimu-report', 'ep:trend-charts', 'report/jmreport/index', 'GoView', 0, '1', '1', '1', '1', '2022-07-10 20:26:36', '1', '2024-02-29 12:33:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2000, '��Ʒ����', '', 1, 60, 2362, 'product', 'fa:product-hunt', NULL, NULL, 0, '1', '1', '1', '', '2022-07-29 15:53:53', '1', '2023-09-30 11:52:36', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2002, '��Ʒ����', '', 2, 2, 2000, 'category', 'ep:cellphone', 'mall/product/category/index', 'ProductCategory', 0, '1', '1', '1', '', '2022-07-29 15:53:53', '1', '2023-08-21 10:27:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2003, '�����ѯ', 'product:category:query', 3, 1, 2002, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-29 15:53:53', '', '2022-07-29 15:53:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2004, '���ഴ��', 'product:category:create', 3, 2, 2002, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-29 15:53:53', '', '2022-07-29 15:53:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2005, '�������', 'product:category:update', 3, 3, 2002, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-29 15:53:53', '', '2022-07-29 15:53:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2006, '����ɾ��', 'product:category:delete', 3, 4, 2002, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-29 15:53:53', '', '2022-07-29 15:53:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2008, '��ƷƷ��', '', 2, 3, 2000, 'brand', 'ep:chicken', 'mall/product/brand/index', 'ProductBrand', 0, '1', '1', '1', '', '2022-07-30 13:52:44', '1', '2023-08-21 10:27:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2009, 'Ʒ�Ʋ�ѯ', 'product:brand:query', 3, 1, 2008, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2010, 'Ʒ�ƴ���', 'product:brand:create', 3, 2, 2008, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2011, 'Ʒ�Ƹ���', 'product:brand:update', 3, 3, 2008, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2012, 'Ʒ��ɾ��', 'product:brand:delete', 3, 4, 2008, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2014, '��Ʒ�б�', '', 2, 1, 2000, 'spu', 'ep:apple', 'mall/product/spu/index', 'ProductSpu', 0, '1', '1', '1', '', '2022-07-30 14:22:58', '1', '2023-08-21 10:27:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2015, '��Ʒ��ѯ', 'product:spu:query', 3, 1, 2014, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2016, '��Ʒ����', 'product:spu:create', 3, 2, 2014, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2017, '��Ʒ����', 'product:spu:update', 3, 3, 2014, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2018, '��Ʒɾ��', 'product:spu:delete', 3, 4, 2014, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2019, '��Ʒ����', '', 2, 4, 2000, 'property', 'ep:cold-drink', 'mall/product/property/index', 'ProductProperty', 0, '1', '1', '1', '', '2022-08-01 14:55:35', '1', '2023-08-26 11:01:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2020, '����ѯ', 'product:property:query', 3, 1, 2019, '', '', '', NULL, 0, '1', '1', '1', '', '2022-08-01 14:55:35', '', '2022-12-12 20:26:24', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2021, '��񴴽�', 'product:property:create', 3, 2, 2019, '', '', '', NULL, 0, '1', '1', '1', '', '2022-08-01 14:55:35', '', '2022-12-12 20:26:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2022, '������', 'product:property:update', 3, 3, 2019, '', '', '', NULL, 0, '1', '1', '1', '', '2022-08-01 14:55:35', '', '2022-12-12 20:26:33', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2023, '���ɾ��', 'product:property:delete', 3, 4, 2019, '', '', '', NULL, 0, '1', '1', '1', '', '2022-08-01 14:55:35', '', '2022-12-12 20:26:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2025, 'Banner', '', 2, 100, 2387, 'banner', 'fa:bandcamp', 'mall/promotion/banner/index', NULL, 0, '1', '1', '1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2026, 'Banner��ѯ', 'promotion:banner:query', 3, 1, 2025, '', '', '', '', 0, '1', '1', '1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2027, 'Banner����', 'promotion:banner:create', 3, 2, 2025, '', '', '', '', 0, '1', '1', '1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2028, 'Banner����', 'promotion:banner:update', 3, 3, 2025, '', '', '', '', 0, '1', '1', '1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2029, 'Bannerɾ��', 'promotion:banner:delete', 3, 4, 2025, '', '', '', '', 0, '1', '1', '1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:36', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2030, 'Ӫ������', '', 1, 70, 2362, 'promotion', 'ep:present', NULL, NULL, 0, '1', '1', '1', '1', '2022-10-31 21:25:09', '1', '2023-09-30 11:54:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2032, '�Ż݄��б�', '', 2, 1, 2365, 'template', 'ep:discount', 'mall/promotion/coupon/template/index', 'PromotionCouponTemplate', 0, '1', '1', '1', '', '2022-10-31 22:27:14', '1', '2023-10-03 12:40:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2033, '�Ż݄�ģ���ѯ', 'promotion:coupon-template:query', 3, 1, 2032, '', '', '', NULL, 0, '1', '1', '1', '', '2022-10-31 22:27:14', '', '2022-10-31 22:27:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2034, '�Ż݄�ģ�崴��', 'promotion:coupon-template:create', 3, 2, 2032, '', '', '', NULL, 0, '1', '1', '1', '', '2022-10-31 22:27:14', '', '2022-10-31 22:27:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2035, '�Ż݄�ģ�����', 'promotion:coupon-template:update', 3, 3, 2032, '', '', '', NULL, 0, '1', '1', '1', '', '2022-10-31 22:27:14', '', '2022-10-31 22:27:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2036, '�Ż݄�ģ��ɾ��', 'promotion:coupon-template:delete', 3, 4, 2032, '', '', '', NULL, 0, '1', '1', '1', '', '2022-10-31 22:27:14', '', '2022-10-31 22:27:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2038, '��ȡ��¼', '', 2, 2, 2365, 'list', 'ep:collection-tag', 'mall/promotion/coupon/index', 'PromotionCoupon', 0, '1', '1', '1', '', '2022-11-03 23:21:31', '1', '2023-10-03 12:55:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2039, '�Ż݄���ѯ', 'promotion:coupon:query', 3, 1, 2038, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-03 23:21:31', '', '2022-11-03 23:21:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2040, '�Ż݄�ɾ��', 'promotion:coupon:delete', 3, 4, 2038, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-03 23:21:31', '', '2022-11-03 23:21:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2041, '������', '', 2, 10, 2390, 'reward-activity', 'ep:goblet-square-full', 'mall/promotion/rewardActivity/index', 'PromotionRewardActivity', 0, '1', '1', '1', '', '2022-11-04 23:47:49', '1', '2023-10-21 19:24:46', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2042, '�����ͻ��ѯ', 'promotion:reward-activity:query', 3, 1, 2041, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-04 23:47:49', '', '2022-11-04 23:47:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2043, '�����ͻ����', 'promotion:reward-activity:create', 3, 2, 2041, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-04 23:47:49', '', '2022-11-04 23:47:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2044, '�����ͻ����', 'promotion:reward-activity:update', 3, 3, 2041, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-04 23:47:50', '', '2022-11-04 23:47:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2045, '�����ͻɾ��', 'promotion:reward-activity:delete', 3, 4, 2041, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-04 23:47:50', '', '2022-11-04 23:47:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2046, '�����ͻ�ر�', 'promotion:reward-activity:close', 3, 5, 2041, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-11-05 10:42:53', '1', '2022-11-05 10:42:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2047, '��ʱ�ۿ�', '', 2, 7, 2390, 'discount-activity', 'ep:timer', 'mall/promotion/discountActivity/index', 'PromotionDiscountActivity', 0, '1', '1', '1', '', '2022-11-05 17:12:15', '1', '2023-10-21 19:24:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2048, '��ʱ�ۿۻ��ѯ', 'promotion:discount-activity:query', 3, 1, 2047, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-05 17:12:15', '', '2022-11-05 17:12:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2049, '��ʱ�ۿۻ����', 'promotion:discount-activity:create', 3, 2, 2047, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-05 17:12:15', '', '2022-11-05 17:12:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2050, '��ʱ�ۿۻ����', 'promotion:discount-activity:update', 3, 3, 2047, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-05 17:12:16', '', '2022-11-05 17:12:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2051, '��ʱ�ۿۻɾ��', 'promotion:discount-activity:delete', 3, 4, 2047, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-05 17:12:16', '', '2022-11-05 17:12:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2052, '��ʱ�ۿۻ�ر�', 'promotion:discount-activity:close', 3, 5, 2047, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-05 17:12:16', '', '2022-11-05 17:12:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2059, '��ɱ��Ʒ', '', 2, 2, 2209, 'activity', 'ep:basketball', 'mall/promotion/seckill/activity/index', 'PromotionSeckillActivity', 0, '1', '1', '1', '', '2022-11-06 22:24:49', '1', '2023-06-24 18:57:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2060, '��ɱ���ѯ', 'promotion:seckill-activity:query', 3, 1, 2059, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-06 22:24:49', '', '2022-11-06 22:24:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2061, '��ɱ�����', 'promotion:seckill-activity:create', 3, 2, 2059, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-06 22:24:49', '', '2022-11-06 22:24:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2062, '��ɱ�����', 'promotion:seckill-activity:update', 3, 3, 2059, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-06 22:24:49', '', '2022-11-06 22:24:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2063, '��ɱ�ɾ��', 'promotion:seckill-activity:delete', 3, 4, 2059, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-06 22:24:49', '', '2022-11-06 22:24:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2066, '��ɱʱ��', '', 2, 1, 2209, 'config', 'ep:baseball', 'mall/promotion/seckill/config/index', 'PromotionSeckillConfig', 0, '1', '1', '1', '', '2022-11-15 19:46:50', '1', '2023-06-24 18:57:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2067, '��ɱʱ�β�ѯ', 'promotion:seckill-config:query', 3, 1, 2066, '', '', '', '', 0, '1', '1', '1', '', '2022-11-15 19:46:51', '1', '2023-06-24 17:50:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2068, '��ɱʱ�δ���', 'promotion:seckill-config:create', 3, 2, 2066, '', '', '', '', 0, '1', '1', '1', '', '2022-11-15 19:46:51', '1', '2023-06-24 17:48:39', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2069, '��ɱʱ�θ���', 'promotion:seckill-config:update', 3, 3, 2066, '', '', '', '', 0, '1', '1', '1', '', '2022-11-15 19:46:51', '1', '2023-06-24 17:50:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2070, '��ɱʱ��ɾ��', 'promotion:seckill-config:delete', 3, 4, 2066, '', '', '', '', 0, '1', '1', '1', '', '2022-11-15 19:46:51', '1', '2023-06-24 17:50:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2072, '��������', '', 1, 65, 2362, 'trade', 'ep:eleme', NULL, NULL, 0, '1', '1', '1', '1', '2022-11-19 18:57:19', '1', '2023-09-30 11:54:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2073, '�ۺ��˿�', '', 2, 2, 2072, 'after-sale', 'ep:refrigerator', 'mall/trade/afterSale/index', 'TradeAfterSale', 0, '1', '1', '1', '', '2022-11-19 20:15:32', '1', '2023-10-01 21:42:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2074, '�ۺ��ѯ', 'trade:after-sale:query', 3, 1, 2073, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-19 20:15:33', '1', '2022-12-10 21:04:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2075, '��ɱ��ر�', 'promotion:seckill-activity:close', 3, 5, 2059, '', '', '', '', 0, '1', '1', '1', '1', '2022-11-28 20:20:15', '1', '2023-10-03 18:34:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2076, '�����б�', '', 2, 1, 2072, 'order', 'ep:list', 'mall/trade/order/index', 'TradeOrder', 0, '1', '1', '1', '1', '2022-12-10 21:05:44', '1', '2023-10-01 21:42:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2083, '��������', '', 2, 14, 1, 'area', 'fa:map-marker', 'system/area/index', 'SystemArea', 0, '1', '1', '1', '1', '2022-12-23 17:35:05', '1', '2024-02-29 08:50:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2084, '���ںŹ���', '', 1, 100, 0, '/mp', 'ep:compass', NULL, NULL, 0, '1', '1', '1', '1', '2023-01-01 20:11:04', '1', '2024-02-29 12:39:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2085, '�˺Ź���', '', 2, 1, 2084, 'account', 'fa:user', 'mp/account/index', 'MpAccount', 0, '1', '1', '1', '1', '2023-01-01 20:13:31', '1', '2024-02-29 12:42:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2086, '�����˺�', 'mp:account:create', 3, 1, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-01 20:21:40', '1', '2023-01-07 17:32:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2087, '�޸��˺�', 'mp:account:update', 3, 2, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-07 17:32:46', '1', '2023-01-07 17:32:46', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2088, '��ѯ�˺�', 'mp:account:query', 3, 0, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-07 17:33:07', '1', '2023-01-07 17:33:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2089, 'ɾ���˺�', 'mp:account:delete', 3, 3, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-07 17:33:21', '1', '2023-01-07 17:33:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2090, '���ɶ�ά��', 'mp:account:qr-code', 3, 4, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-07 17:33:58', '1', '2023-01-07 17:33:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2091, '��� API ���', 'mp:account:clear-quota', 3, 5, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-07 18:20:32', '1', '2023-01-07 18:20:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2092, '����ͳ��', 'mp:statistics:query', 2, 2, 2084, 'statistics', 'ep:trend-charts', 'mp/statistics/index', 'MpStatistics', 0, '1', '1', '1', '1', '2023-01-07 20:17:36', '1', '2024-02-29 12:42:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2093, '��ǩ����', '', 2, 3, 2084, 'tag', 'ep:collection-tag', 'mp/tag/index', 'MpTag', 0, '1', '1', '1', '1', '2023-01-08 11:37:32', '1', '2024-02-29 12:42:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2094, '��ѯ��ǩ', 'mp:tag:query', 3, 0, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 11:59:03', '1', '2023-01-08 11:59:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2095, '������ǩ', 'mp:tag:create', 3, 1, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 11:59:23', '1', '2023-01-08 11:59:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2096, '�޸ı�ǩ', 'mp:tag:update', 3, 2, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 11:59:41', '1', '2023-01-08 11:59:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2097, 'ɾ����ǩ', 'mp:tag:delete', 3, 3, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 12:00:04', '1', '2023-01-08 12:00:13', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2098, 'ͬ����ǩ', 'mp:tag:sync', 3, 4, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 12:00:29', '1', '2023-01-08 12:00:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2099, '��˿����', '', 2, 4, 2084, 'user', 'fa:user-secret', 'mp/user/index', 'MpUser', 0, '1', '1', '1', '1', '2023-01-08 16:51:20', '1', '2024-02-29 12:42:39', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2100, '��ѯ��˿', 'mp:user:query', 3, 0, 2099, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 17:16:59', '1', '2023-01-08 17:17:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2101, '�޸ķ�˿', 'mp:user:update', 3, 1, 2099, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 17:17:11', '1', '2023-01-08 17:17:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2102, 'ͬ����˿', 'mp:user:sync', 3, 2, 2099, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 17:17:40', '1', '2023-01-08 17:17:40', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2103, '��Ϣ����', '', 2, 5, 2084, 'message', 'ep:message', 'mp/message/index', 'MpMessage', 0, '1', '1', '1', '1', '2023-01-08 18:44:19', '1', '2024-02-29 12:42:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2104, 'ͼ�ķ����¼', '', 2, 10, 2084, 'free-publish', 'ep:edit-pen', 'mp/freePublish/index', 'MpFreePublish', 0, '1', '1', '1', '1', '2023-01-13 00:30:50', '1', '2024-02-29 12:43:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2105, '��ѯ�����б�', 'mp:free-publish:query', 3, 1, 2104, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-13 07:19:17', '1', '2023-01-13 07:19:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2106, '�����ݸ�', 'mp:free-publish:submit', 3, 2, 2104, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-13 07:19:46', '1', '2023-01-13 07:19:46', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2107, 'ɾ��������¼', 'mp:free-publish:delete', 3, 3, 2104, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-13 07:20:01', '1', '2023-01-13 07:20:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2108, 'ͼ�IJݸ���', '', 2, 9, 2084, 'draft', 'ep:edit', 'mp/draft/index', 'MpDraft', 0, '1', '1', '1', '1', '2023-01-13 07:40:21', '1', '2024-02-29 12:43:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2109, '�½��ݸ�', 'mp:draft:create', 3, 1, 2108, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-13 23:15:30', '1', '2023-01-13 23:15:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2110, '�޸IJݸ�', 'mp:draft:update', 3, 2, 2108, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 10:08:47', '1', '2023-01-14 10:08:47', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2111, '��ѯ�ݸ�', 'mp:draft:query', 3, 0, 2108, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 10:09:01', '1', '2023-01-14 10:09:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2112, 'ɾ���ݸ�', 'mp:draft:delete', 3, 3, 2108, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 10:09:19', '1', '2023-01-14 10:09:19', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2113, '�زĹ���', '', 2, 8, 2084, 'material', 'ep:basketball', 'mp/material/index', 'MpMaterial', 0, '1', '1', '1', '1', '2023-01-14 14:12:07', '1', '2024-02-29 12:43:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2114, '�ϴ���ʱ�ز�', 'mp:material:upload-temporary', 3, 1, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 15:33:55', '1', '2023-01-14 15:33:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2115, '�ϴ������ز�', 'mp:material:upload-permanent', 3, 2, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 15:34:14', '1', '2023-01-14 15:34:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2116, 'ɾ���ز�', 'mp:material:delete', 3, 3, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 15:35:37', '1', '2023-01-14 15:35:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2117, '�ϴ�ͼ��ͼƬ', 'mp:material:upload-news-image', 3, 4, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 15:36:31', '1', '2023-01-14 15:36:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2118, '��ѯ�ز�', 'mp:material:query', 3, 5, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 15:39:22', '1', '2023-01-14 15:39:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2119, '�˵�����', '', 2, 6, 2084, 'menu', 'ep:menu', 'mp/menu/index', 'MpMenu', 0, '1', '1', '1', '1', '2023-01-14 17:43:54', '1', '2024-02-29 12:42:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2120, '�Զ��ظ�', '', 2, 7, 2084, 'auto-reply', 'fa-solid:republican', 'mp/autoReply/index', 'MpAutoReply', 0, '1', '1', '1', '1', '2023-01-15 22:13:09', '1', '2024-02-29 12:43:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2121, '��ѯ�ظ�', 'mp:auto-reply:query', 3, 0, 2120, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-16 22:28:41', '1', '2023-01-16 22:28:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2122, '�����ظ�', 'mp:auto-reply:create', 3, 1, 2120, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-16 22:28:54', '1', '2023-01-16 22:28:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2123, '�޸Ļظ�', 'mp:auto-reply:update', 3, 2, 2120, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-16 22:29:05', '1', '2023-01-16 22:29:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2124, 'ɾ���ظ�', 'mp:auto-reply:delete', 3, 3, 2120, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-16 22:29:34', '1', '2023-01-16 22:29:34', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2125, '��ѯ�˵�', 'mp:menu:query', 3, 0, 2119, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-17 23:05:41', '1', '2023-01-17 23:05:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2126, '����˵�', 'mp:menu:save', 3, 1, 2119, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-17 23:06:01', '1', '2023-01-17 23:06:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2127, 'ɾ���˵�', 'mp:menu:delete', 3, 2, 2119, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-17 23:06:16', '1', '2023-01-17 23:06:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2128, '��ѯ��Ϣ', 'mp:message:query', 3, 0, 2103, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-17 23:07:14', '1', '2023-01-17 23:07:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2129, '������Ϣ', 'mp:message:send', 3, 1, 2103, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-17 23:07:26', '1', '2023-01-17 23:07:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2130, '�������', '', 2, 2, 2739, 'mail', 'fa-solid:mail-bulk', NULL, NULL, 0, '1', '1', '1', '1', '2023-01-25 17:27:44', '1', '2024-04-22 23:56:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2131, '�����˺�', '', 2, 0, 2130, 'mail-account', 'fa:universal-access', 'system/mail/account/index', 'SystemMailAccount', 0, '1', '1', '1', '', '2023-01-25 09:33:48', '1', '2024-02-29 08:48:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2132, '�˺Ų�ѯ', 'system:mail-account:query', 3, 1, 2131, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2133, '�˺Ŵ���', 'system:mail-account:create', 3, 2, 2131, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2134, '�˺Ÿ���', 'system:mail-account:update', 3, 3, 2131, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2135, '�˺�ɾ��', 'system:mail-account:delete', 3, 4, 2131, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2136, '�ʼ�ģ��', '', 2, 0, 2130, 'mail-template', 'fa:tag', 'system/mail/template/index', 'SystemMailTemplate', 0, '1', '1', '1', '', '2023-01-25 12:05:31', '1', '2024-02-29 08:48:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2137, 'ģ���ѯ', 'system:mail-template:query', 3, 1, 2136, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2138, 'ģ�洴��', 'system:mail-template:create', 3, 2, 2136, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2139, 'ģ�����', 'system:mail-template:update', 3, 3, 2136, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2140, 'ģ��ɾ��', 'system:mail-template:delete', 3, 4, 2136, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2141, '�ʼ���¼', '', 2, 0, 2130, 'mail-log', 'fa:edit', 'system/mail/log/index', 'SystemMailLog', 0, '1', '1', '1', '', '2023-01-26 02:16:50', '1', '2024-02-29 08:48:51', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2142, '��־��ѯ', 'system:mail-log:query', 3, 1, 2141, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-26 02:16:50', '', '2023-01-26 02:16:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2143, '���Ͳ����ʼ�', 'system:mail-template:send-mail', 3, 5, 2136, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-26 23:29:15', '1', '2023-01-26 23:29:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2144, 'վ���Ź���', '', 1, 3, 2739, 'notify', 'ep:message-box', NULL, NULL, 0, '1', '1', '1', '1', '2023-01-28 10:25:18', '1', '2024-04-22 23:56:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2145, 'ģ�����', '', 2, 0, 2144, 'notify-template', 'fa:archive', 'system/notify/template/index', 'SystemNotifyTemplate', 0, '1', '1', '1', '', '2023-01-28 02:26:42', '1', '2024-02-29 08:49:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2146, 'վ����ģ���ѯ', 'system:notify-template:query', 3, 1, 2145, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2147, 'վ����ģ�崴��', 'system:notify-template:create', 3, 2, 2145, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2148, 'վ����ģ�����', 'system:notify-template:update', 3, 3, 2145, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2149, 'վ����ģ��ɾ��', 'system:notify-template:delete', 3, 4, 2145, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2150, '���Ͳ���վ����', 'system:notify-template:send-notify', 3, 5, 2145, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-28 10:54:43', '1', '2023-01-28 10:54:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2151, '��Ϣ��¼', '', 2, 0, 2144, 'notify-message', 'fa:edit', 'system/notify/message/index', 'SystemNotifyMessage', 0, '1', '1', '1', '', '2023-01-28 04:28:22', '1', '2024-02-29 08:49:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2152, 'վ������Ϣ��ѯ', 'system:notify-message:query', 3, 1, 2151, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-28 04:28:22', '', '2023-01-28 04:28:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2153, '���������', '', 2, 2, 1281, 'go-view', 'fa:area-chart', 'report/goview/index', 'JimuReport', 0, '1', '1', '1', '1', '2023-02-07 00:03:19', '1', '2024-02-29 12:34:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2154, '������Ŀ', 'report:go-view-project:create', 3, 1, 2153, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-02-07 19:25:14', '1', '2023-02-07 19:25:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2155, '������Ŀ', 'report:go-view-project:update', 3, 2, 2153, '', '', '', '', 0, '1', '1', '1', '1', '2023-02-07 19:25:34', '1', '2024-04-24 20:01:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2156, '��ѯ��Ŀ', 'report:go-view-project:query', 3, 0, 2153, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-02-07 19:25:53', '1', '2023-02-07 19:25:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2157, 'ʹ�� SQL ��ѯ����', 'report:go-view-data:get-by-sql', 3, 3, 2153, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-02-07 19:26:15', '1', '2023-02-07 19:26:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2158, 'ʹ�� HTTP ��ѯ����', 'report:go-view-data:get-by-http', 3, 4, 2153, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-02-07 19:26:35', '1', '2023-02-07 19:26:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2159, 'Boot �����ĵ�', '', 1, 1, 0, 'https://doc.iocoder.cn/', 'ep:document', NULL, NULL, 0, '1', '1', '1', '1', '2023-02-10 22:46:28', '1', '2023-12-02 21:32:20', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2160, 'Cloud �����ĵ�', '', 1, 2, 0, 'https://cloud.iocoder.cn', 'ep:document-copy', NULL, NULL, 0, '1', '1', '1', '1', '2023-02-10 22:47:07', '1', '2023-12-02 21:32:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2161, '����ʾ��', '', 1, 99, 1117, 'demo', 'fa-solid:dragon', 'pay/demo/index', NULL, 0, '1', '1', '1', '', '2023-02-11 14:21:42', '1', '2024-01-18 23:50:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2162, '��Ʒ����', 'product:spu:export', 3, 5, 2014, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2164, '���͹���', '', 1, 3, 2072, 'delivery', 'ep:shopping-cart', '', '', 0, '1', '1', '1', '1', '2023-05-18 09:18:02', '1', '2023-09-28 10:58:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2165, '��ݷ���', '', 1, 0, 2164, 'express', 'ep:bicycle', '', '', 0, '1', '1', '1', '1', '2023-05-18 09:22:06', '1', '2023-08-30 21:02:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2166, '�ŵ�����', '', 1, 1, 2164, 'pick-up-store', 'ep:add-location', '', '', 0, '1', '1', '1', '1', '2023-05-18 09:23:14', '1', '2023-08-30 21:03:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2167, '��ݹ�˾', '', 2, 0, 2165, 'express', 'ep:compass', 'mall/trade/delivery/express/index', 'Express', 0, '1', '1', '1', '1', '2023-05-18 09:27:21', '1', '2023-08-30 21:02:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2168, '��ݹ�˾��ѯ', 'trade:delivery:express:query', 3, 1, 2167, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2169, '��ݹ�˾����', 'trade:delivery:express:create', 3, 2, 2167, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2170, '��ݹ�˾����', 'trade:delivery:express:update', 3, 3, 2167, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2171, '��ݹ�˾ɾ��', 'trade:delivery:express:delete', 3, 4, 2167, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2172, '��ݹ�˾����', 'trade:delivery:express:export', 3, 5, 2167, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2173, '�˷�ģ��', 'trade:delivery:express-template:query', 2, 1, 2165, 'express-template', 'ep:coordinate', 'mall/trade/delivery/expressTemplate/index', 'ExpressTemplate', 0, '1', '1', '1', '1', '2023-05-20 06:48:10', '1', '2023-08-30 21:03:13', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2174, '����˷�ģ���ѯ', 'trade:delivery:express-template:query', 3, 1, 2173, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2175, '����˷�ģ�崴��', 'trade:delivery:express-template:create', 3, 2, 2173, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2176, '����˷�ģ�����', 'trade:delivery:express-template:update', 3, 3, 2173, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2177, '����˷�ģ��ɾ��', 'trade:delivery:express-template:delete', 3, 4, 2173, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2178, '����˷�ģ�嵼��', 'trade:delivery:express-template:export', 3, 5, 2173, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2179, '�ŵ����', '', 2, 1, 2166, 'pick-up-store', 'ep:basketball', 'mall/trade/delivery/pickUpStore/index', 'PickUpStore', 0, '1', '1', '1', '1', '2023-05-25 10:50:00', '1', '2023-08-30 21:03:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2180, '�����ŵ��ѯ', 'trade:delivery:pick-up-store:query', 3, 1, 2179, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2181, '�����ŵ괴��', 'trade:delivery:pick-up-store:create', 3, 2, 2179, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2182, '�����ŵ����', 'trade:delivery:pick-up-store:update', 3, 3, 2179, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2183, '�����ŵ�ɾ��', 'trade:delivery:pick-up-store:delete', 3, 4, 2179, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2184, '�����ŵ굼��', 'trade:delivery:pick-up-store:export', 3, 5, 2179, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2209, '��ɱ�', '', 2, 3, 2030, 'seckill', 'ep:place', '', '', 0, '1', '1', '1', '1', '2023-06-24 17:39:13', '1', '2023-06-24 18:55:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2262, '��Ա����', '', 1, 55, 0, '/member', 'ep:bicycle', NULL, NULL, 0, '1', '1', '1', '1', '2023-06-10 00:42:03', '1', '2023-08-20 09:23:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2275, '��Ա����', '', 2, 0, 2262, 'config', 'fa:archive', 'member/config/index', 'MemberConfig', 0, '1', '1', '1', '', '2023-06-10 02:07:44', '1', '2023-10-01 23:41:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2276, '��Ա���ò�ѯ', 'member:config:query', 3, 1, 2275, '', '', '', '', 0, '1', '1', '1', '', '2023-06-10 02:07:44', '1', '2024-04-24 19:48:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2277, '��Ա���ñ���', 'member:config:save', 3, 2, 2275, '', '', '', '', 0, '1', '1', '1', '', '2023-06-10 02:07:44', '1', '2024-04-24 19:49:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2281, 'ǩ������', '', 2, 2, 2300, 'config', 'ep:calendar', 'member/signin/config/index', 'SignInConfig', 0, '1', '1', '1', '', '2023-06-10 03:26:12', '1', '2023-08-20 19:25:51', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2282, '����ǩ�������ѯ', 'point:sign-in-config:query', 3, 1, 2281, '', '', '', NULL, 0, '1', '1', '1', '', '2023-06-10 03:26:12', '', '2023-06-10 03:26:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2283, '����ǩ�����򴴽�', 'point:sign-in-config:create', 3, 2, 2281, '', '', '', NULL, 0, '1', '1', '1', '', '2023-06-10 03:26:12', '', '2023-06-10 03:26:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2284, '����ǩ���������', 'point:sign-in-config:update', 3, 3, 2281, '', '', '', NULL, 0, '1', '1', '1', '', '2023-06-10 03:26:12', '', '2023-06-10 03:26:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2285, '����ǩ������ɾ��', 'point:sign-in-config:delete', 3, 4, 2281, '', '', '', NULL, 0, '1', '1', '1', '', '2023-06-10 03:26:12', '', '2023-06-10 03:26:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2287, '��Ա����', '', 2, 10, 2262, 'record', 'fa:asterisk', 'member/point/record/index', 'PointRecord', 0, '1', '1', '1', '', '2023-06-10 04:18:50', '1', '2023-10-01 23:42:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2288, '�û����ּ�¼��ѯ', 'point:record:query', 3, 1, 2287, '', '', '', NULL, 0, '1', '1', '1', '', '2023-06-10 04:18:50', '', '2023-06-10 04:18:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2293, 'ǩ����¼', '', 2, 3, 2300, 'record', 'ep:chicken', 'member/signin/record/index', 'SignInRecord', 0, '1', '1', '1', '', '2023-06-10 04:48:22', '1', '2023-08-20 19:26:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2294, '�û�ǩ�����ֲ�ѯ', 'point:sign-in-record:query', 3, 1, 2293, '', '', '', NULL, 0, '1', '1', '1', '', '2023-06-10 04:48:22', '', '2023-06-10 04:48:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2297, '�û�ǩ������ɾ��', 'point:sign-in-record:delete', 3, 4, 2293, '', '', '', NULL, 0, '1', '1', '1', '', '2023-06-10 04:48:22', '', '2023-06-10 04:48:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2300, '��Աǩ��', '', 1, 11, 2262, 'signin', 'ep:alarm-clock', '', '', 0, '1', '1', '1', '1', '2023-06-27 22:49:53', '1', '2023-08-20 09:23:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2301, '�ص�֪ͨ', '', 2, 5, 1117, 'notify', 'ep:mute-notification', 'pay/notify/index', 'PayNotify', 0, '1', '1', '1', '', '2023-07-20 04:41:32', '1', '2024-01-18 23:56:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2302, '֧��֪ͨ��ѯ', 'pay:notify:query', 3, 1, 2301, '', '', '', NULL, 0, '1', '1', '1', '', '2023-07-20 04:41:32', '', '2023-07-20 04:41:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2303, 'ƴ�Ż', '', 2, 3, 2030, 'combination', 'fa:group', '', '', 0, '1', '1', '1', '1', '2023-08-12 17:19:54', '1', '2023-08-12 17:20:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2304, 'ƴ����Ʒ', '', 2, 1, 2303, 'acitivity', 'ep:apple', 'mall/promotion/combination/activity/index', 'PromotionCombinationActivity', 0, '1', '1', '1', '1', '2023-08-12 17:22:03', '1', '2023-08-12 17:22:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2305, 'ƴ�Ż��ѯ', 'promotion:combination-activity:query', 3, 1, 2304, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-12 17:54:32', '1', '2023-11-24 11:57:40', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2306, 'ƴ�Ż����', 'promotion:combination-activity:create', 3, 2, 2304, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-12 17:54:49', '1', '2023-08-12 17:54:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2307, 'ƴ�Ż����', 'promotion:combination-activity:update', 3, 3, 2304, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-12 17:55:04', '1', '2023-08-12 17:55:04', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2308, 'ƴ�Żɾ��', 'promotion:combination-activity:delete', 3, 4, 2304, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-12 17:55:23', '1', '2023-08-12 17:55:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2309, 'ƴ�Ż�ر�', 'promotion:combination-activity:close', 3, 5, 2304, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-12 17:55:37', '1', '2023-10-06 10:51:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2310, '���ۻ', '', 2, 4, 2030, 'bargain', 'ep:box', '', '', 0, '1', '1', '1', '1', '2023-08-13 00:27:25', '1', '2023-08-13 00:27:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2311, '������Ʒ', '', 2, 1, 2310, 'activity', 'ep:burger', 'mall/promotion/bargain/activity/index', 'PromotionBargainActivity', 0, '1', '1', '1', '1', '2023-08-13 00:28:49', '1', '2023-10-05 01:16:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2312, '���ۻ��ѯ', 'promotion:bargain-activity:query', 3, 1, 2311, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-13 00:32:30', '1', '2023-08-13 00:32:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2313, '���ۻ����', 'promotion:bargain-activity:create', 3, 2, 2311, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-13 00:32:44', '1', '2023-08-13 00:32:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2314, '���ۻ����', 'promotion:bargain-activity:update', 3, 3, 2311, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-13 00:32:55', '1', '2023-08-13 00:32:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2315, '���ۻɾ��', 'promotion:bargain-activity:delete', 3, 4, 2311, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-13 00:34:50', '1', '2023-08-13 00:34:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2316, '���ۻ�ر�', 'promotion:bargain-activity:close', 3, 5, 2311, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-13 00:35:02', '1', '2023-08-13 00:35:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2317, '��Ա����', '', 2, 0, 2262, 'user', 'ep:avatar', 'member/user/index', 'MemberUser', 0, '1', '1', '1', '', '2023-08-19 04:12:15', '1', '2023-08-24 00:50:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2318, '��Ա�û���ѯ', 'member:user:query', 3, 1, 2317, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-19 04:12:15', '', '2023-08-19 04:12:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2319, '��Ա�û�����', 'member:user:update', 3, 3, 2317, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-19 04:12:15', '', '2023-08-19 04:12:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2320, '��Ա��ǩ', '', 2, 1, 2262, 'tag', 'ep:collection-tag', 'member/tag/index', 'MemberTag', 0, '1', '1', '1', '', '2023-08-20 01:03:08', '1', '2023-08-20 09:23:19', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2321, '��Ա��ǩ��ѯ', 'member:tag:query', 3, 1, 2320, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-20 01:03:08', '', '2023-08-20 01:03:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2322, '��Ա��ǩ����', 'member:tag:create', 3, 2, 2320, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-20 01:03:08', '', '2023-08-20 01:03:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2323, '��Ա��ǩ����', 'member:tag:update', 3, 3, 2320, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-20 01:03:08', '', '2023-08-20 01:03:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2324, '��Ա��ǩɾ��', 'member:tag:delete', 3, 4, 2320, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-20 01:03:08', '', '2023-08-20 01:03:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2325, '��Ա�ȼ�', '', 2, 2, 2262, 'level', 'fa:level-up', 'member/level/index', 'MemberLevel', 0, '1', '1', '1', '', '2023-08-22 12:41:01', '1', '2023-08-22 21:47:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2326, '��Ա�ȼ���ѯ', 'member:level:query', 3, 1, 2325, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 12:41:02', '', '2023-08-22 12:41:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2327, '��Ա�ȼ�����', 'member:level:create', 3, 2, 2325, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 12:41:02', '', '2023-08-22 12:41:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2328, '��Ա�ȼ�����', 'member:level:update', 3, 3, 2325, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 12:41:02', '', '2023-08-22 12:41:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2329, '��Ա�ȼ�ɾ��', 'member:level:delete', 3, 4, 2325, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 12:41:02', '', '2023-08-22 12:41:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2330, '��Ա����', '', 2, 3, 2262, 'group', 'fa:group', 'member/group/index', 'MemberGroup', 0, '1', '1', '1', '', '2023-08-22 13:50:06', '1', '2023-10-01 23:42:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2331, '�û������ѯ', 'member:group:query', 3, 1, 2330, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 13:50:06', '', '2023-08-22 13:50:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2332, '�û����鴴��', 'member:group:create', 3, 2, 2330, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 13:50:06', '', '2023-08-22 13:50:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2333, '�û��������', 'member:group:update', 3, 3, 2330, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 13:50:06', '', '2023-08-22 13:50:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2334, '�û�����ɾ��', 'member:group:delete', 3, 4, 2330, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 13:50:06', '', '2023-08-22 13:50:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2335, '�û��ȼ��޸�', 'member:user:update-level', 3, 5, 2317, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-23 16:49:05', '', '2023-08-23 16:50:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2336, '��Ʒ����', '', 2, 5, 2000, 'comment', 'ep:comment', 'mall/product/comment/index', 'ProductComment', 0, '1', '1', '1', '1', '2023-08-26 11:03:00', '1', '2023-08-26 11:03:38', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2337, '���۲�ѯ', 'product:comment:query', 3, 1, 2336, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-26 11:04:01', '1', '2023-08-26 11:04:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2338, '�������', 'product:comment:create', 3, 2, 2336, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-26 11:04:23', '1', '2023-08-26 11:08:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2339, '�̼һظ�', 'product:comment:update', 3, 3, 2336, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-26 11:04:37', '1', '2023-08-26 11:04:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2340, '��������', 'product:comment:update', 3, 4, 2336, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-26 11:04:55', '1', '2023-08-26 11:04:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2341, '�Ż݄�����', 'promotion:coupon:send', 3, 2, 2038, '', '', '', '', 0, '1', '1', '1', '1', '2023-09-02 00:03:14', '1', '2023-09-02 00:03:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2342, '��������', '', 2, 0, 2072, 'config', 'ep:setting', 'mall/trade/config/index', 'TradeConfig', 0, '1', '1', '1', '', '2023-09-28 02:46:22', '1', '2024-02-26 20:30:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2343, '�����������ò�ѯ', 'trade:config:query', 3, 1, 2342, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2344, '�����������ñ���', 'trade:config:save', 3, 2, 2342, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2345, '��������', '', 1, 4, 2072, 'brokerage', 'fa-solid:project-diagram', '', '', 0, '1', '1', '1', '', '2023-09-28 02:46:22', '1', '2023-09-28 10:58:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2346, '�����û�', '', 2, 0, 2345, 'brokerage-user', 'fa-solid:user-tie', 'mall/trade/brokerage/user/index', 'TradeBrokerageUser', 0, '1', '1', '1', '', '2023-09-28 02:46:22', '1', '2024-02-26 20:33:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2347, '�����û���ѯ', 'trade:brokerage-user:query', 3, 1, 2346, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2348, '�����û��ƹ��˲�ѯ', 'trade:brokerage-user:user-query', 3, 2, 2346, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2349, '�����û��ƹ㶩����ѯ', 'trade:brokerage-user:order-query', 3, 3, 2346, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2350, '�����û��޸��ƹ��ʸ�', 'trade:brokerage-user:update-brokerage-enable', 3, 4, 2346, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2351, '�����û��޸��ƹ�Ա', 'trade:brokerage-user:update-bind-user', 3, 5, 2346, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2352, '�����û�����ƹ�Ա', 'trade:brokerage-user:clear-bind-user', 3, 6, 2346, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2353, 'Ӷ���¼', '', 2, 1, 2345, 'brokerage-record', 'fa:money', 'mall/trade/brokerage/record/index', 'TradeBrokerageRecord', 0, '1', '1', '1', '', '2023-09-28 02:46:22', '1', '2024-02-26 20:33:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2354, 'Ӷ���¼��ѯ', 'trade:brokerage-record:query', 3, 1, 2353, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2355, 'Ӷ������', '', 2, 2, 2345, 'brokerage-withdraw', 'fa:credit-card', 'mall/trade/brokerage/withdraw/index', 'TradeBrokerageWithdraw', 0, '1', '1', '1', '', '2023-09-28 02:46:22', '1', '2024-02-26 20:33:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2356, 'Ӷ�����ֲ�ѯ', 'trade:brokerage-withdraw:query', 3, 1, 2355, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2357, 'Ӷ���������', 'trade:brokerage-withdraw:audit', 3, 2, 2355, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2358, 'ͳ������', '', 1, 75, 2362, 'statistics', 'ep:data-line', '', '', 0, '1', '1', '1', '', '2023-09-30 03:22:40', '1', '2023-09-30 11:54:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2359, '����ͳ��', '', 2, 4, 2358, 'trade', 'fa-solid:credit-card', 'mall/statistics/trade/index', 'TradeStatistics', 0, '1', '1', '1', '', '2023-09-30 03:22:40', '1', '2024-02-26 20:42:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2360, '����ͳ�Ʋ�ѯ', 'statistics:trade:query', 3, 1, 2359, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-30 03:22:40', '', '2023-09-30 03:22:40', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2361, '����ͳ�Ƶ���', 'statistics:trade:export', 3, 2, 2359, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-30 03:22:40', '', '2023-09-30 03:22:40', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2362, '�̳�ϵͳ', '', 1, 59, 0, '/mall', 'ep:shop', '', '', 0, '1', '1', '1', '1', '2023-09-30 11:52:02', '1', '2023-09-30 11:52:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2363, '�û������޸�', 'member:user:update-point', 3, 6, 2317, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-01 14:39:43', '', '2023-10-01 14:39:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2364, '�û�����޸�', 'member:user:update-balance', 3, 7, 2317, '', '', '', '', 0, '1', '1', '1', '', '2023-10-01 14:39:43', '1', '2023-10-01 22:42:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2365, '�Ż݄�', '', 1, 2, 2030, 'coupon', 'fa-solid:disease', '', '', 0, '1', '1', '1', '1', '2023-10-03 12:39:15', '1', '2023-10-05 00:16:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2366, '���ۼ�¼', '', 2, 2, 2310, 'record', 'ep:list', 'mall/promotion/bargain/record/index', 'PromotionBargainRecord', 0, '1', '1', '1', '', '2023-10-05 02:49:06', '1', '2023-10-05 10:50:38', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2367, '���ۼ�¼��ѯ', 'promotion:bargain-record:query', 3, 1, 2366, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-05 02:49:06', '', '2023-10-05 02:49:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2368, '������¼��ѯ', 'promotion:bargain-help:query', 3, 2, 2366, '', '', '', '', 0, '1', '1', '1', '1', '2023-10-05 12:27:49', '1', '2023-10-05 12:27:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2369, 'ƴ�ż�¼', 'promotion:combination-record:query', 2, 2, 2303, 'record', 'ep:avatar', 'mall/promotion/combination/record/index.vue', 'PromotionCombinationRecord', 0, '1', '1', '1', '1', '2023-10-08 07:10:22', '1', '2023-10-08 07:34:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2374, '��Աͳ��', '', 2, 2, 2358, 'member', 'ep:avatar', 'mall/statistics/member/index', 'MemberStatistics', 0, '1', '1', '1', '', '2023-10-11 04:39:24', '1', '2024-02-26 20:41:46', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2375, '��Աͳ�Ʋ�ѯ', 'statistics:member:query', 3, 1, 2374, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-11 04:39:24', '', '2023-10-11 04:39:24', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2376, '��������', 'trade:order:pick-up', 3, 10, 2076, '', '', '', '', 0, '1', '1', '1', '1', '2023-10-14 17:11:58', '1', '2023-10-14 17:11:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2377, '���·���', '', 2, 0, 2387, 'article/category', 'fa:certificate', 'mall/promotion/article/category/index', 'ArticleCategory', 0, '1', '1', '1', '', '2023-10-16 01:26:18', '1', '2023-10-16 09:38:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2378, '�����ѯ', 'promotion:article-category:query', 3, 1, 2377, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2379, '���ഴ��', 'promotion:article-category:create', 3, 2, 2377, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2380, '�������', 'promotion:article-category:update', 3, 3, 2377, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2381, '����ɾ��', 'promotion:article-category:delete', 3, 4, 2377, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2382, '�����б�', '', 2, 2, 2387, 'article', 'ep:connection', 'mall/promotion/article/index', 'Article', 0, '1', '1', '1', '', '2023-10-16 01:26:18', '1', '2023-10-16 09:41:19', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2383, '���¹����ѯ', 'promotion:article:query', 3, 1, 2382, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2384, '���¹�����', 'promotion:article:create', 3, 2, 2382, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2385, '���¹������', 'promotion:article:update', 3, 3, 2382, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2386, '���¹���ɾ��', 'promotion:article:delete', 3, 4, 2382, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2387, '���ݹ���', '', 1, 1, 2030, 'content', 'ep:collection', '', '', 0, '1', '1', '1', '1', '2023-10-16 09:37:31', '1', '2023-10-16 09:37:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2388, '�̳���ҳ', '', 2, 1, 2362, 'home', 'ep:home-filled', 'mall/home/index', 'MallHome', 0, '1', '1', '1', '', '2023-10-16 12:10:33', '', '2023-10-16 12:10:33', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2389, '��������', '', 2, 2, 2166, 'pick-up-order', 'ep:list', 'mall/trade/delivery/pickUpOrder/index', 'PickUpOrder', 0, '1', '1', '1', '', '2023-10-19 16:09:51', '', '2023-10-19 16:09:51', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2390, '�Żݻ', '', 1, 99, 2030, 'youhui', 'ep:aim', '', '', 0, '1', '1', '1', '1', '2023-10-21 19:23:49', '1', '2023-10-21 19:23:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2391, '�ͻ�����', '', 2, 10, 2397, 'customer', 'fa:address-book-o', 'crm/customer/index', 'CrmCustomer', 0, '1', '1', '1', '', '2023-10-29 09:04:21', '1', '2024-02-17 17:13:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2392, '�ͻ���ѯ', 'crm:customer:query', 3, 1, 2391, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2393, '�ͻ�����', 'crm:customer:create', 3, 2, 2391, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2394, '�ͻ�����', 'crm:customer:update', 3, 3, 2391, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2395, '�ͻ�ɾ��', 'crm:customer:delete', 3, 4, 2391, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2396, '�ͻ�����', 'crm:customer:export', 3, 5, 2391, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2397, 'CRM ϵͳ', '', 1, 200, 0, '/crm', 'ep:avatar', '', '', 0, '1', '1', '1', '1', '2023-10-29 17:08:30', '1', '2024-02-04 15:37:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2398, '��ͬ����', '', 2, 50, 2397, 'contract', 'ep:notebook', 'crm/contract/index', 'CrmContract', 0, '1', '1', '1', '', '2023-10-29 10:50:41', '1', '2024-02-17 17:15:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2399, '��ͬ��ѯ', 'crm:contract:query', 3, 1, 2398, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2400, '��ͬ����', 'crm:contract:create', 3, 2, 2398, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2401, '��ͬ����', 'crm:contract:update', 3, 3, 2398, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2402, '��ͬɾ��', 'crm:contract:delete', 3, 4, 2398, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2403, '��ͬ����', 'crm:contract:export', 3, 5, 2398, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2404, '��������', '', 2, 8, 2397, 'clue', 'fa:pagelines', 'crm/clue/index', 'CrmClue', 0, '1', '1', '1', '', '2023-10-29 11:06:29', '1', '2024-02-17 17:15:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2405, '������ѯ', 'crm:clue:query', 3, 1, 2404, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2406, '��������', 'crm:clue:create', 3, 2, 2404, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2407, '��������', 'crm:clue:update', 3, 3, 2404, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2408, '����ɾ��', 'crm:clue:delete', 3, 4, 2404, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2409, '��������', 'crm:clue:export', 3, 5, 2404, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2410, '�̻�����', '', 2, 40, 2397, 'business', 'fa:bus', 'crm/business/index', 'CrmBusiness', 0, '1', '1', '1', '', '2023-10-29 11:12:35', '1', '2024-02-17 17:14:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2411, '�̻���ѯ', 'crm:business:query', 3, 1, 2410, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2412, '�̻�����', 'crm:business:create', 3, 2, 2410, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2413, '�̻�����', 'crm:business:update', 3, 3, 2410, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2414, '�̻�ɾ��', 'crm:business:delete', 3, 4, 2410, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2415, '�̻�����', 'crm:business:export', 3, 5, 2410, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2416, '��ϵ�˹���', '', 2, 20, 2397, 'contact', 'fa:address-book-o', 'crm/contact/index', 'CrmContact', 0, '1', '1', '1', '', '2023-10-29 11:14:56', '1', '2024-02-17 17:13:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2417, '��ϵ�˲�ѯ', 'crm:contact:query', 3, 1, 2416, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2418, '��ϵ�˴���', 'crm:contact:create', 3, 2, 2416, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2419, '��ϵ�˸���', 'crm:contact:update', 3, 3, 2416, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2420, '��ϵ��ɾ��', 'crm:contact:delete', 3, 4, 2416, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2421, '��ϵ�˵���', 'crm:contact:export', 3, 5, 2416, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2422, '�ؿ����', '', 2, 60, 2397, 'receivable', 'ep:money', 'crm/receivable/index', 'CrmReceivable', 0, '1', '1', '1', '', '2023-10-29 11:18:09', '1', '2024-02-17 17:16:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2423, '�ؿ�����ѯ', 'crm:receivable:query', 3, 1, 2422, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2424, '�ؿ������', 'crm:receivable:create', 3, 2, 2422, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2425, '�ؿ�������', 'crm:receivable:update', 3, 3, 2422, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2426, '�ؿ����ɾ��', 'crm:receivable:delete', 3, 4, 2422, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2427, '�ؿ������', 'crm:receivable:export', 3, 5, 2422, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2428, '�ؿ�ƻ�', '', 2, 61, 2397, 'receivable-plan', 'fa:money', 'crm/receivable/plan/index', 'CrmReceivablePlan', 0, '1', '1', '1', '', '2023-10-29 11:18:09', '1', '2024-02-17 17:16:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2429, '�ؿ�ƻ���ѯ', 'crm:receivable-plan:query', 3, 1, 2428, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2430, '�ؿ�ƻ�����', 'crm:receivable-plan:create', 3, 2, 2428, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2431, '�ؿ�ƻ�����', 'crm:receivable-plan:update', 3, 3, 2428, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2432, '�ؿ�ƻ�ɾ��', 'crm:receivable-plan:delete', 3, 4, 2428, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2433, '�ؿ�ƻ�����', 'crm:receivable-plan:export', 3, 5, 2428, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2435, '�̳�װ��', '', 2, 20, 2030, 'diy-template', 'fa6-solid:brush', 'mall/promotion/diy/template/index', 'DiyTemplate', 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2436, 'װ��ģ��', '', 2, 1, 2435, 'diy-template', 'fa6-solid:brush', 'mall/promotion/diy/template/index', 'DiyTemplate', 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2437, 'װ��ģ���ѯ', 'promotion:diy-template:query', 3, 1, 2436, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2438, 'װ��ģ�崴��', 'promotion:diy-template:create', 3, 2, 2436, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2439, 'װ��ģ�����', 'promotion:diy-template:update', 3, 3, 2436, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2440, 'װ��ģ��ɾ��', 'promotion:diy-template:delete', 3, 4, 2436, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2441, 'װ��ģ��ʹ��', 'promotion:diy-template:use', 3, 5, 2436, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2442, 'װ��ҳ��', '', 2, 2, 2435, 'diy-page', 'foundation:page-edit', 'mall/promotion/diy/page/index', 'DiyPage', 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2443, 'װ��ҳ���ѯ', 'promotion:diy-page:query', 3, 1, 2442, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2444, 'װ��ҳ�洴��', 'promotion:diy-page:create', 3, 2, 2442, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:26', '', '2023-10-29 14:19:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2445, 'װ��ҳ�����', 'promotion:diy-page:update', 3, 3, 2442, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:26', '', '2023-10-29 14:19:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2446, 'װ��ҳ��ɾ��', 'promotion:diy-page:delete', 3, 4, 2442, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:26', '', '2023-10-29 14:19:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2447, '������¼', '', 1, 10, 1, 'social', 'fa:rocket', '', '', 0, '1', '1', '1', '1', '2023-11-04 12:12:01', '1', '2024-02-29 01:14:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2448, '����Ӧ��', '', 2, 1, 2447, 'client', 'ep:set-up', 'views/system/social/client/index.vue', 'SocialClient', 0, '1', '1', '1', '1', '2023-11-04 12:17:19', '1', '2023-11-04 12:17:19', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2449, '����Ӧ�ò�ѯ', 'system:social-client:query', 3, 1, 2448, '', '', '', '', 0, '1', '1', '1', '1', '2023-11-04 12:43:12', '1', '2023-11-04 12:43:33', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2450, '����Ӧ�ô���', 'system:social-client:create', 3, 2, 2448, '', '', '', '', 0, '1', '1', '1', '1', '2023-11-04 12:43:58', '1', '2023-11-04 12:43:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2451, '����Ӧ�ø���', 'system:social-client:update', 3, 3, 2448, '', '', '', '', 0, '1', '1', '1', '1', '2023-11-04 12:44:27', '1', '2023-11-04 12:44:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2452, '����Ӧ��ɾ��', 'system:social-client:delete', 3, 4, 2448, '', '', '', '', 0, '1', '1', '1', '1', '2023-11-04 12:44:43', '1', '2023-11-04 12:44:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2453, '�����û�', 'system:social-user:query', 2, 2, 2447, 'user', 'ep:avatar', 'system/social/user/index.vue', 'SocialUser', 0, '1', '1', '1', '1', '2023-11-04 14:01:05', '1', '2023-11-04 14:01:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2472, '���ӱ���Ƕ��', '', 2, 12, 1070, 'demo03-inner', 'fa:power-off', 'infra/demo/demo03/inner/index', 'Demo03StudentInner', 0, '1', '1', '1', '', '2023-11-13 04:39:51', '1', '2023-11-16 23:53:46', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2478, '������ɾ�IJ飩', '', 2, 1, 1070, 'demo01-contact', 'ep:bicycle', 'infra/demo/demo01/index', 'Demo01Contact', 0, '1', '1', '1', '', '2023-11-15 14:42:30', '1', '2023-11-16 20:34:40', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2479, 'ʾ����ϵ�˲�ѯ', 'infra:demo01-contact:query', 3, 1, 2478, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2480, 'ʾ����ϵ�˴���', 'infra:demo01-contact:create', 3, 2, 2478, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2481, 'ʾ����ϵ�˸���', 'infra:demo01-contact:update', 3, 3, 2478, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2482, 'ʾ����ϵ��ɾ��', 'infra:demo01-contact:delete', 3, 4, 2478, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2483, 'ʾ����ϵ�˵���', 'infra:demo01-contact:export', 3, 5, 2478, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2484, '������ɾ�IJ飩', '', 2, 2, 1070, 'demo02-category', 'fa:tree', 'infra/demo/demo02/index', 'Demo02Category', 0, '1', '1', '1', '', '2023-11-16 12:18:27', '1', '2023-11-16 20:35:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2485, 'ʾ�������ѯ', 'infra:demo02-category:query', 3, 1, 2484, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2486, 'ʾ�����ഴ��', 'infra:demo02-category:create', 3, 2, 2484, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2487, 'ʾ���������', 'infra:demo02-category:update', 3, 3, 2484, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2488, 'ʾ������ɾ��', 'infra:demo02-category:delete', 3, 4, 2484, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2489, 'ʾ�����ർ��', 'infra:demo02-category:export', 3, 5, 2484, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2490, '���ӱ���׼��', '', 2, 10, 1070, 'demo03-normal', 'fa:battery-3', 'infra/demo/demo03/normal/index', 'Demo03StudentNormal', 0, '1', '1', '1', '', '2023-11-16 12:53:37', '1', '2023-11-16 23:10:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2491, 'ѧ����ѯ', 'infra:demo03-student:query', 3, 1, 2490, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2492, 'ѧ������', 'infra:demo03-student:create', 3, 2, 2490, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2493, 'ѧ������', 'infra:demo03-student:update', 3, 3, 2490, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2494, 'ѧ��ɾ��', 'infra:demo03-student:delete', 3, 4, 2490, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2495, 'ѧ������', 'infra:demo03-student:export', 3, 5, 2490, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2497, '���ӱ�ERP��', '', 2, 11, 1070, 'demo03-erp', 'ep:calendar', 'infra/demo/demo03/erp/index', 'Demo03StudentERP', 0, '1', '1', '1', '', '2023-11-16 15:50:59', '1', '2023-11-17 13:19:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2516, '�ͻ���������', '', 2, 0, 2524, 'customer-pool-config', 'ep:data-analysis', 'crm/customer/poolConfig/index', 'CrmCustomerPoolConfig', 0, '1', '1', '1', '', '2023-11-18 13:33:31', '1', '2024-01-03 19:52:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2517, '�ͻ��������ñ���', 'crm:customer-pool-config:update', 3, 1, 2516, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-18 13:33:31', '', '2023-11-18 13:33:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2518, '�ͻ���������', '', 2, 1, 2524, 'customer-limit-config', 'ep:avatar', 'crm/customer/limitConfig/index', 'CrmCustomerLimitConfig', 0, '1', '1', '1', '', '2023-11-18 13:33:53', '1', '2024-02-24 16:43:33', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2519, '�ͻ��������ò�ѯ', 'crm:customer-limit-config:query', 3, 1, 2518, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2520, '�ͻ��������ô���', 'crm:customer-limit-config:create', 3, 2, 2518, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2521, '�ͻ��������ø���', 'crm:customer-limit-config:update', 3, 3, 2518, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2522, '�ͻ���������ɾ��', 'crm:customer-limit-config:delete', 3, 4, 2518, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2523, '�ͻ��������õ���', 'crm:customer-limit-config:export', 3, 5, 2518, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2524, 'ϵͳ����', '', 1, 999, 2397, 'config', 'ep:connection', '', '', 0, '1', '1', '1', '1', '2023-11-18 21:58:00', '1', '2024-02-17 17:14:34', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2525, 'WebSocket', '', 2, 5, 2, 'websocket', 'ep:connection', 'infra/webSocket/index', 'InfraWebSocket', 0, '1', '1', '1', '1', '2023-11-23 19:41:55', '1', '2024-04-23 00:02:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2526, '��Ʒ����', '', 2, 80, 2397, 'product', 'fa:product-hunt', 'crm/product/index', 'CrmProduct', 0, '1', '1', '1', '1', '2023-12-05 22:45:26', '1', '2024-02-20 20:36:20', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2527, '��Ʒ��ѯ', 'crm:product:query', 3, 1, 2526, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-05 22:47:16', '1', '2023-12-05 22:47:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2528, '��Ʒ����', 'crm:product:create', 3, 2, 2526, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-05 22:47:41', '1', '2023-12-05 22:47:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2529, '��Ʒ����', 'crm:product:update', 3, 3, 2526, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-05 22:48:03', '1', '2023-12-05 22:48:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2530, '��Ʒɾ��', 'crm:product:delete', 3, 4, 2526, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-05 22:48:17', '1', '2023-12-05 22:48:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2531, '��Ʒ����', 'crm:product:export', 3, 5, 2526, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-05 22:48:29', '1', '2023-12-05 22:48:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2532, '��Ʒ��������', '', 2, 3, 2524, 'product/category', 'fa-solid:window-restore', 'crm/product/category/index', 'CrmProductCategory', 0, '1', '1', '1', '1', '2023-12-06 12:52:36', '1', '2023-12-06 12:52:51', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2533, '��Ʒ�����ѯ', 'crm:product-category:query', 3, 1, 2532, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-06 12:53:23', '1', '2023-12-06 12:53:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2534, '��Ʒ���ഴ��', 'crm:product-category:create', 3, 2, 2532, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-06 12:53:41', '1', '2023-12-06 12:53:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2535, '��Ʒ�������', 'crm:product-category:update', 3, 3, 2532, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-06 12:53:59', '1', '2023-12-06 12:53:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2536, '��Ʒ����ɾ��', 'crm:product-category:delete', 3, 4, 2532, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-06 12:54:14', '1', '2023-12-06 12:54:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2543, '�����̻�', 'crm:contact:create-business', 3, 10, 2416, '', '', '', '', 0, '1', '1', '1', '1', '2024-01-02 17:28:25', '1', '2024-01-02 17:28:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2544, 'ȡ���̻�', 'crm:contact:delete-business', 3, 11, 2416, '', '', '', '', 0, '1', '1', '1', '1', '2024-01-02 17:28:43', '1', '2024-01-02 17:28:51', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2545, '��Ʒͳ��', '', 2, 3, 2358, 'product', 'fa:product-hunt', 'mall/statistics/product/index', 'ProductStatistics', 0, '1', '1', '1', '', '2023-12-15 18:54:28', '1', '2024-02-26 20:41:52', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2546, '�ͻ�����', '', 2, 30, 2397, 'customer/pool', 'fa-solid:swimming-pool', 'crm/customer/pool/index', 'CrmCustomerPool', 0, '1', '1', '1', '1', '2024-01-15 21:29:34', '1', '2024-02-17 17:14:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2547, '������ѯ', 'trade:order:query', 3, 1, 2076, '', '', '', '', 0, '1', '1', '1', '1', '2024-01-16 08:52:00', '1', '2024-01-16 08:52:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2548, '��������', 'trade:order:update', 3, 2, 2076, '', '', '', '', 0, '1', '1', '1', '1', '2024-01-16 08:52:21', '1', '2024-01-16 08:52:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2549, '֧��&�˿��', '', 2, 1, 2161, 'order', 'fa:paypal', 'pay/demo/order/index', '', 0, '1', '1', '1', '1', '2024-01-18 23:45:00', '1', '2024-01-18 23:47:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2550, 'ת�˰���', '', 2, 2, 2161, 'transfer', 'fa:transgender-alt', 'pay/demo/transfer/index', '', 0, '1', '1', '1', '1', '2024-01-18 23:51:16', '1', '2024-01-18 23:51:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2551, 'Ǯ������', '', 1, 4, 1117, 'wallet', 'ep:wallet', '', '', 0, '1', '1', '1', '', '2023-12-29 02:32:54', '1', '2024-02-29 08:58:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2552, '��ֵ�ײ�', '', 2, 2, 2551, 'wallet-recharge-package', 'fa:leaf', 'pay/wallet/rechargePackage/index', 'WalletRechargePackage', 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2553, 'Ǯ����ֵ�ײͲ�ѯ', 'pay:wallet-recharge-package:query', 3, 1, 2552, '', '', '', NULL, 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2554, 'Ǯ����ֵ�ײʹ���', 'pay:wallet-recharge-package:create', 3, 2, 2552, '', '', '', NULL, 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2555, 'Ǯ����ֵ�ײ͸���', 'pay:wallet-recharge-package:update', 3, 3, 2552, '', '', '', NULL, 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2556, 'Ǯ����ֵ�ײ�ɾ��', 'pay:wallet-recharge-package:delete', 3, 4, 2552, '', '', '', NULL, 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2557, 'Ǯ�����', '', 2, 1, 2551, 'wallet-balance', 'fa:leaf', 'pay/wallet/balance/index', 'WalletBalance', 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2558, 'Ǯ������ѯ', 'pay:wallet:query', 3, 1, 2557, '', '', '', NULL, 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2559, 'ת�˶���', '', 2, 3, 1117, 'transfer', 'ep:credit-card', 'pay/transfer/index', 'PayTransfer', 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2560, '����ͳ��', '', 1, 200, 2397, 'statistics', 'ep:data-line', '', '', 0, '1', '1', '1', '1', '2024-01-26 22:50:35', '1', '2024-02-24 20:10:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2561, '���а�', 'crm:statistics-rank:query', 2, 1, 2560, 'ranking', 'fa:area-chart', 'crm/statistics/rank/index', 'CrmStatisticsRank', 0, '1', '1', '1', '1', '2024-01-26 22:52:09', '1', '2024-04-24 19:39:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2562, '�ͻ�����', 'crm:customer:import', 3, 6, 2391, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-01 13:09:00', '1', '2024-02-01 13:09:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2563, 'ERP ϵͳ', '', 1, 300, 0, '/erp', 'fa-solid:store', '', '', 0, '1', '1', '1', '1', '2024-02-04 15:37:25', '1', '2024-02-04 15:37:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2564, '��Ʒ����', '', 1, 40, 2563, 'product', 'fa:product-hunt', '', '', 0, '1', '1', '1', '1', '2024-02-04 15:38:43', '1', '2024-02-04 15:38:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2565, '��Ʒ��Ϣ', '', 2, 0, 2564, 'product', 'fa-solid:apple-alt', 'erp/product/product/index', 'ErpProduct', 0, '1', '1', '1', '', '2024-02-04 07:52:15', '1', '2024-02-05 14:42:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2566, '��Ʒ��ѯ', 'erp:product:query', 3, 1, 2565, '', '', '', '', 0, '1', '1', '1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:21:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2567, '��Ʒ����', 'erp:product:create', 3, 2, 2565, '', '', '', '', 0, '1', '1', '1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:22:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2568, '��Ʒ����', 'erp:product:update', 3, 3, 2565, '', '', '', '', 0, '1', '1', '1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:22:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2569, '��Ʒɾ��', 'erp:product:delete', 3, 4, 2565, '', '', '', '', 0, '1', '1', '1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:22:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2570, '��Ʒ����', 'erp:product:export', 3, 5, 2565, '', '', '', '', 0, '1', '1', '1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:22:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2571, '��Ʒ����', '', 2, 1, 2564, 'product-category', 'fa:certificate', 'erp/product/category/index', 'ErpProductCategory', 0, '1', '1', '1', '', '2024-02-04 09:21:04', '1', '2024-02-04 17:24:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2572, '�����ѯ', 'erp:product-category:query', 3, 1, 2571, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2573, '���ഴ��', 'erp:product-category:create', 3, 2, 2571, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2574, '�������', 'erp:product-category:update', 3, 3, 2571, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2575, '����ɾ��', 'erp:product-category:delete', 3, 4, 2571, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2576, '���ർ��', 'erp:product-category:export', 3, 5, 2571, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2577, '��Ʒ��λ', '', 2, 2, 2564, 'unit', 'ep:opportunity', 'erp/product/unit/index', 'ErpProductUnit', 0, '1', '1', '1', '', '2024-02-04 11:54:08', '1', '2024-02-04 19:54:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2578, '��λ��ѯ', 'erp:product-unit:query', 3, 1, 2577, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2579, '��λ����', 'erp:product-unit:create', 3, 2, 2577, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2580, '��λ����', 'erp:product-unit:update', 3, 3, 2577, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2581, '��λɾ��', 'erp:product-unit:delete', 3, 4, 2577, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2582, '��λ����', 'erp:product-unit:export', 3, 5, 2577, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2583, '������', '', 1, 30, 2563, 'stock', 'fa:window-restore', '', '', 0, '1', '1', '1', '1', '2024-02-05 00:29:37', '1', '2024-02-05 00:29:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2584, '�ֿ���Ϣ', '', 2, 0, 2583, 'warehouse', 'ep:house', 'erp/stock/warehouse/index', 'ErpWarehouse', 0, '1', '1', '1', '', '2024-02-04 17:12:09', '1', '2024-02-05 01:12:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2585, '�ֿ��ѯ', 'erp:warehouse:query', 3, 1, 2584, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2586, '�ֿⴴ��', 'erp:warehouse:create', 3, 2, 2584, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2587, '�ֿ����', 'erp:warehouse:update', 3, 3, 2584, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2588, '�ֿ�ɾ��', 'erp:warehouse:delete', 3, 4, 2584, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2589, '�ֿ⵼��', 'erp:warehouse:export', 3, 5, 2584, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2590, '��Ʒ���', '', 2, 1, 2583, 'stock', 'ep:coffee', 'erp/stock/stock/index', 'ErpStock', 0, '1', '1', '1', '', '2024-02-05 06:40:50', '1', '2024-02-05 14:42:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2591, '����ѯ', 'erp:stock:query', 3, 1, 2590, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 06:40:50', '', '2024-02-05 06:40:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2592, '��浼��', 'erp:stock:export', 3, 5, 2590, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 06:40:50', '', '2024-02-05 06:40:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2593, '�������ϸ', '', 2, 2, 2583, 'record', 'fa-solid:blog', 'erp/stock/record/index', 'ErpStockRecord', 0, '1', '1', '1', '', '2024-02-05 10:27:21', '1', '2024-02-06 17:26:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2594, '�����ϸ��ѯ', 'erp:stock-record:query', 3, 1, 2593, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 10:27:21', '', '2024-02-05 10:27:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2595, '�����ϸ����', 'erp:stock-record:export', 3, 5, 2593, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 10:27:21', '', '2024-02-05 10:27:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2596, '�������', '', 2, 3, 2583, 'in', 'ep:zoom-in', 'erp/stock/in/index', 'ErpStockIn', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-07 19:06:51', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2597, '������ⵥ��ѯ', 'erp:stock-in:query', 3, 1, 2596, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2598, '������ⵥ����', 'erp:stock-in:create', 3, 2, 2596, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2599, '������ⵥ����', 'erp:stock-in:update', 3, 3, 2596, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2600, '������ⵥɾ��', 'erp:stock-in:delete', 3, 4, 2596, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2601, '������ⵥ����', 'erp:stock-in:export', 3, 5, 2596, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2602, '�ɹ�����', '', 1, 10, 2563, 'purchase', 'fa:buysellads', '', '', 0, '1', '1', '1', '1', '2024-02-06 16:01:01', '1', '2024-02-06 16:01:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2603, '��Ӧ����Ϣ', '', 2, 4, 2602, 'supplier', 'fa:superpowers', 'erp/purchase/supplier/index', 'ErpSupplier', 0, '1', '1', '1', '', '2024-02-06 08:21:55', '1', '2024-02-06 16:22:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2604, '��Ӧ�̲�ѯ', 'erp:supplier:query', 3, 1, 2603, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2605, '��Ӧ�̴���', 'erp:supplier:create', 3, 2, 2603, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2606, '��Ӧ�̸���', 'erp:supplier:update', 3, 3, 2603, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2607, '��Ӧ��ɾ��', 'erp:supplier:delete', 3, 4, 2603, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2608, '��Ӧ�̵���', 'erp:supplier:export', 3, 5, 2603, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2609, '������ⵥ����', 'erp:stock-in:update-status', 3, 6, 2596, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2610, '��������', '', 2, 4, 2583, 'out', 'ep:zoom-out', 'erp/stock/out/index', 'ErpStockOut', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-07 19:06:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2611, '�������ⵥ��ѯ', 'erp:stock-out:query', 3, 1, 2610, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:39', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2612, '�������ⵥ����', 'erp:stock-out:create', 3, 2, 2610, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:42', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2613, '�������ⵥ����', 'erp:stock-out:update', 3, 3, 2610, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2614, '�������ⵥɾ��', 'erp:stock-out:delete', 3, 4, 2610, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2615, '�������ⵥ����', 'erp:stock-out:export', 3, 5, 2610, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2616, '�������ⵥ����', 'erp:stock-out:update-status', 3, 6, 2610, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2617, '���۹���', '', 1, 20, 2563, 'sale', 'fa:sellsy', '', '', 0, '1', '1', '1', '1', '2024-02-07 15:12:32', '1', '2024-02-07 15:12:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2618, '�ͻ���Ϣ', '', 2, 4, 2617, 'customer', 'ep:avatar', 'erp/sale/customer/index', 'ErpCustomer', 0, '1', '1', '1', '', '2024-02-07 07:21:45', '1', '2024-02-07 15:22:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2619, '�ͻ���ѯ', 'erp:customer:query', 3, 1, 2618, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2620, '�ͻ�����', 'erp:customer:create', 3, 2, 2618, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2621, '�ͻ�����', 'erp:customer:update', 3, 3, 2618, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2622, '�ͻ�ɾ��', 'erp:customer:delete', 3, 4, 2618, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2623, '�ͻ�����', 'erp:customer:export', 3, 5, 2618, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2624, '������', '', 2, 5, 2583, 'move', 'ep:folder-remove', 'erp/stock/move/index', 'ErpStockMove', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-16 18:53:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2625, '�����ȵ���ѯ', 'erp:stock-move:query', 3, 1, 2624, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2626, '�����ȵ�����', 'erp:stock-move:create', 3, 2, 2624, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2627, '�����ȵ�����', 'erp:stock-move:update', 3, 3, 2624, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2628, '�����ȵ�ɾ��', 'erp:stock-move:delete', 3, 4, 2624, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2629, '�����ȵ�����', 'erp:stock-move:export', 3, 5, 2624, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2630, '�����ȵ�����', 'erp:stock-move:update-status', 3, 6, 2624, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2631, '����̵�', '', 2, 6, 2583, 'check', 'ep:circle-check-filled', 'erp/stock/check/index', 'ErpStockCheck', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-08 08:31:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2632, '����̵㵥��ѯ', 'erp:stock-check:query', 3, 1, 2631, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2633, '����̵㵥����', 'erp:stock-check:create', 3, 2, 2631, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2634, '����̵㵥����', 'erp:stock-check:update', 3, 3, 2631, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2635, '����̵㵥ɾ��', 'erp:stock-check:delete', 3, 4, 2631, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2636, '����̵㵥����', 'erp:stock-check:export', 3, 5, 2631, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2637, '����̵㵥����', 'erp:stock-check:update-status', 3, 6, 2631, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2638, '���۶���', '', 2, 1, 2617, 'order', 'fa:first-order', 'erp/sale/order/index', 'ErpSaleOrder', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-10 21:59:20', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2639, '���۶�����ѯ', 'erp:sale-order:query', 3, 1, 2638, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2640, '���۶�������', 'erp:sale-order:create', 3, 2, 2638, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2641, '���۶�������', 'erp:sale-order:update', 3, 3, 2638, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2642, '���۶���ɾ��', 'erp:sale-order:delete', 3, 4, 2638, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2643, '���۶�������', 'erp:sale-order:export', 3, 5, 2638, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2644, '���۶�������', 'erp:sale-order:update-status', 3, 6, 2638, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2645, '�������', '', 1, 50, 2563, 'finance', 'ep:money', '', '', 0, '1', '1', '1', '1', '2024-02-10 08:05:58', '1', '2024-02-10 08:06:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2646, '�����˻�', '', 2, 10, 2645, 'account', 'fa:universal-access', 'erp/finance/account/index', 'ErpAccount', 0, '1', '1', '1', '', '2024-02-10 00:15:07', '1', '2024-02-14 08:24:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2647, '�����˻���ѯ', 'erp:account:query', 3, 1, 2646, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2648, '�����˻�����', 'erp:account:create', 3, 2, 2646, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2649, '�����˻�����', 'erp:account:update', 3, 3, 2646, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2650, '�����˻�ɾ��', 'erp:account:delete', 3, 4, 2646, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2651, '�����˻�����', 'erp:account:export', 3, 5, 2646, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2652, '���۳���', '', 2, 2, 2617, 'out', 'ep:sold-out', 'erp/sale/out/index', 'ErpSaleOut', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-10 22:02:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2653, '���۳����ѯ', 'erp:sale-out:query', 3, 1, 2652, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2654, '���۳��ⴴ��', 'erp:sale-out:create', 3, 2, 2652, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2655, '���۳������', 'erp:sale-out:update', 3, 3, 2652, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2656, '���۳���ɾ��', 'erp:sale-out:delete', 3, 4, 2652, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2657, '���۳��⵼��', 'erp:sale-out:export', 3, 5, 2652, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2658, '���۳�������', 'erp:sale-out:update-status', 3, 6, 2652, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2659, '�����˻�', '', 2, 3, 2617, 'return', 'fa-solid:bone', 'erp/sale/return/index', 'ErpSaleReturn', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-12 06:12:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2660, '�����˻���ѯ', 'erp:sale-return:query', 3, 1, 2659, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2661, '�����˻�����', 'erp:sale-return:create', 3, 2, 2659, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2662, '�����˻�����', 'erp:sale-return:update', 3, 3, 2659, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2663, '�����˻�ɾ��', 'erp:sale-return:delete', 3, 4, 2659, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2664, '�����˻�����', 'erp:sale-return:export', 3, 5, 2659, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2665, '�����˻�����', 'erp:sale-return:update-status', 3, 6, 2659, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2666, '�ɹ�����', '', 2, 1, 2602, 'order', 'fa-solid:border-all', 'erp/purchase/order/index', 'ErpPurchaseOrder', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-12 08:51:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2667, '�ɹ�������ѯ', 'erp:purchase-order:query', 3, 1, 2666, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2668, '�ɹ���������', 'erp:purchase-order:create', 3, 2, 2666, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2669, '�ɹ���������', 'erp:purchase-order:update', 3, 3, 2666, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2670, '�ɹ�����ɾ��', 'erp:purchase-order:delete', 3, 4, 2666, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2671, '�ɹ���������', 'erp:purchase-order:export', 3, 5, 2666, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2672, '�ɹ���������', 'erp:purchase-order:update-status', 3, 6, 2666, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2673, '�ɹ����', '', 2, 2, 2602, 'in', 'fa-solid:gopuram', 'erp/purchase/in/index', 'ErpPurchaseIn', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-12 11:19:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2674, '�ɹ�����ѯ', 'erp:purchase-in:query', 3, 1, 2673, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2675, '�ɹ���ⴴ��', 'erp:purchase-in:create', 3, 2, 2673, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2676, '�ɹ�������', 'erp:purchase-in:update', 3, 3, 2673, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2677, '�ɹ����ɾ��', 'erp:purchase-in:delete', 3, 4, 2673, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2678, '�ɹ���⵼��', 'erp:purchase-in:export', 3, 5, 2673, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2679, '�ɹ��������', 'erp:purchase-in:update-status', 3, 6, 2673, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2680, '�ɹ��˻�', '', 2, 3, 2602, 'return', 'ep:minus', 'erp/purchase/return/index', 'ErpPurchaseReturn', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-12 20:51:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2681, '�ɹ��˻���ѯ', 'erp:purchase-return:query', 3, 1, 2680, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2682, '�ɹ��˻�����', 'erp:purchase-return:create', 3, 2, 2680, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2683, '�ɹ��˻�����', 'erp:purchase-return:update', 3, 3, 2680, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2684, '�ɹ��˻�ɾ��', 'erp:purchase-return:delete', 3, 4, 2680, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2685, '�ɹ��˻�����', 'erp:purchase-return:export', 3, 5, 2680, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2686, '�ɹ��˻�����', 'erp:purchase-return:update-status', 3, 6, 2680, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2687, '���', '', 2, 1, 2645, 'payment', 'ep:caret-right', 'erp/finance/payment/index', 'ErpFinancePayment', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-14 08:24:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2688, '�����ѯ', 'erp:finance-payment:query', 3, 1, 2687, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2689, '�������', 'erp:finance-payment:create', 3, 2, 2687, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2690, '�������', 'erp:finance-payment:update', 3, 3, 2687, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2691, '���ɾ��', 'erp:finance-payment:delete', 3, 4, 2687, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2692, '�������', 'erp:finance-payment:export', 3, 5, 2687, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2693, '�������', 'erp:finance-payment:update-status', 3, 6, 2687, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2694, '�տ', '', 2, 2, 2645, 'receipt', 'ep:expand', 'erp/finance/receipt/index', 'ErpFinanceReceipt', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-15 19:35:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2695, '�տ��ѯ', 'erp:finance-receipt:query', 3, 1, 2694, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2696, '�տ����', 'erp:finance-receipt:create', 3, 2, 2694, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2697, '�տ����', 'erp:finance-receipt:update', 3, 3, 2694, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2698, '�տɾ��', 'erp:finance-receipt:delete', 3, 4, 2694, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2699, '�տ����', 'erp:finance-receipt:export', 3, 5, 2694, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2700, '�տ����', 'erp:finance-receipt:update-status', 3, 6, 2694, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2701, '��������', '', 2, 0, 2397, 'backlog', 'fa-solid:tasks', 'crm/backlog/index', 'CrmBacklog', 0, '1', '1', '1', '1', '2024-02-17 17:17:11', '1', '2024-02-17 17:17:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2702, 'ERP ��ҳ', 'erp:statistics:query', 2, 0, 2563, 'home', 'ep:home-filled', 'erp/home/index.vue', 'ErpHome', 0, '1', '1', '1', '1', '2024-02-18 16:49:40', '1', '2024-02-26 21:12:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2703, '�̻�״̬����', '', 2, 4, 2524, 'business-status', 'fa-solid:charging-station', 'crm/business/status/index', 'CrmBusinessStatus', 0, '1', '1', '1', '1', '2024-02-21 20:15:17', '1', '2024-02-21 20:15:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2704, '�̻�״̬��ѯ', 'crm:business-status:query', 3, 1, 2703, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-21 20:35:36', '1', '2024-02-21 20:36:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2705, '�̻�״̬����', 'crm:business-status:create', 3, 2, 2703, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-21 20:35:57', '1', '2024-02-21 20:35:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2706, '�̻�״̬����', 'crm:business-status:update', 3, 3, 2703, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-21 20:36:21', '1', '2024-02-21 20:36:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2707, '�̻�״̬ɾ��', 'crm:business-status:delete', 3, 4, 2703, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-21 20:36:36', '1', '2024-02-21 20:36:36', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2708, '��ͬ����', '', 2, 5, 2524, 'contract-config', 'ep:connection', 'crm/contract/config/index', 'CrmContractConfig', 0, '1', '1', '1', '1', '2024-02-24 16:44:40', '1', '2024-02-24 16:44:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2709, '�ͻ��������ò�ѯ', 'crm:customer-pool-config:query', 3, 2, 2516, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-24 16:45:19', '1', '2024-02-24 16:45:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2710, '��ͬ���ø���', 'crm:contract-config:update', 3, 1, 2708, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-24 16:45:56', '1', '2024-02-24 16:45:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2711, '��ͬ���ò�ѯ', 'crm:contract-config:query', 3, 2, 2708, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-24 16:46:16', '1', '2024-02-24 16:46:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2712, '�ͻ�����', 'crm:statistics-customer:query', 2, 0, 2560, 'customer', 'ep:avatar', 'views/crm/statistics/customer/index.vue', 'CrmStatisticsCustomer', 0, '1', '1', '1', '1', '2024-03-09 16:43:56', '1', '2024-04-24 19:42:52', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2713, '�����ҵ�', 'bpm:process-instance-cc:query', 2, 30, 1200, 'copy', 'ep:copy-document', 'bpm/task/copy/index', 'BpmProcessInstanceCopy', 0, '1', '1', '1', '1', '2024-03-17 21:50:23', '1', '2024-04-24 19:55:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2714, '���̷���', '', 2, 3, 1186, 'category', 'fa:object-ungroup', 'bpm/category/index', 'BpmCategory', 0, '1', '1', '1', '', '2024-03-08 02:00:51', '1', '2024-03-21 23:51:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2715, '�����ѯ', 'bpm:category:query', 3, 1, 2714, '', '', '', '', 0, '1', '1', '1', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2716, '���ഴ��', 'bpm:category:create', 3, 2, 2714, '', '', '', '', 0, '1', '1', '1', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2717, '�������', 'bpm:category:update', 3, 3, 2714, '', '', '', '', 0, '1', '1', '1', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2718, '����ɾ��', 'bpm:category:delete', 3, 4, 2714, '', '', '', '', 0, '1', '1', '1', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2720, '��������', '', 2, 0, 1200, 'create', 'fa-solid:grin-stars', 'bpm/processInstance/create/index', 'BpmProcessInstanceCreate', 0, '1', '0', '1', '1', '2024-03-19 19:46:05', '1', '2024-03-23 19:03:42', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2721, '����ʵ��', '', 2, 10, 1186, 'process-instance/manager', 'fa:square', 'bpm/processInstance/manager/index', 'BpmProcessInstanceManager', 0, '1', '1', '1', '1', '2024-03-21 23:57:30', '1', '2024-03-21 23:57:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2722, '����ʵ���IJ�ѯ������Ա��', 'bpm:process-instance:manager-query', 3, 1, 2721, '', '', '', '', 0, '1', '1', '1', '1', '2024-03-22 08:18:27', '1', '2024-03-22 08:19:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2723, '����ʵ����ȡ��������Ա��', 'bpm:process-instance:cancel-by-admin', 3, 2, 2721, '', '', '', '', 0, '1', '1', '1', '1', '2024-03-22 08:19:25', '1', '2024-03-22 08:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2724, '��������', '', 2, 11, 1186, 'process-tasnk', 'ep:collection-tag', 'bpm/task/manager/index', 'BpmManagerTask', 0, '1', '1', '1', '1', '2024-03-22 08:43:22', '1', '2024-03-22 08:43:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2725, '��������IJ�ѯ������Ա��', 'bpm:task:mananger-query', 3, 1, 2724, '', '', '', '', 0, '1', '1', '1', '1', '2024-03-22 08:43:49', '1', '2024-03-22 08:43:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2726, '���̼�����', '', 2, 5, 1186, 'process-listener', 'fa:assistive-listening-systems', 'bpm/processListener/index', 'BpmProcessListener', 0, '1', '1', '1', '', '2024-03-09 16:05:34', '1', '2024-03-23 13:13:38', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2727, '���̼�������ѯ', 'bpm:process-listener:query', 3, 1, 2726, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2728, '���̼���������', 'bpm:process-listener:create', 3, 2, 2726, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2729, '���̼���������', 'bpm:process-listener:update', 3, 3, 2726, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2730, '���̼�����ɾ��', 'bpm:process-listener:delete', 3, 4, 2726, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2731, '���̱��ʽ', '', 2, 6, 1186, 'process-expression', 'fa:wpexplorer', 'bpm/processExpression/index', 'BpmProcessExpression', 0, '1', '1', '1', '', '2024-03-09 22:35:08', '1', '2024-03-23 19:43:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2732, '���̱��ʽ��ѯ', 'bpm:process-expression:query', 3, 1, 2731, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2733, '���̱��ʽ����', 'bpm:process-expression:create', 3, 2, 2731, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2734, '���̱��ʽ����', 'bpm:process-expression:update', 3, 3, 2731, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2735, '���̱��ʽɾ��', 'bpm:process-expression:delete', 3, 4, 2731, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2736, 'Ա��ҵ��', 'crm:statistics-performance:query', 2, 3, 2560, 'performance', 'ep:dish-dot', 'crm/statistics/performance/index', 'CrmStatisticsPerformance', 0, '1', '1', '1', '1', '2024-04-05 13:49:20', '1', '2024-04-24 19:42:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2737, '�ͻ�����', 'crm:statistics-portrait:query', 2, 4, 2560, 'portrait', 'ep:picture', 'crm/statistics/portrait/index', 'CrmStatisticsPortrait', 0, '1', '1', '1', '1', '2024-04-05 13:57:40', '1', '2024-04-24 19:42:24', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2738, '����©��', 'crm:statistics-funnel:query', 2, 5, 2560, 'funnel', 'ep:grape', 'crm/statistics/funnel/index', 'CrmStatisticsFunnel', 0, '1', '1', '1', '1', '2024-04-13 10:53:26', '1', '2024-04-24 19:39:33', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2739, '��Ϣ����', '', 1, 7, 1, 'messages', 'ep:chat-dot-round', '', '', 0, '1', '1', '1', '1', '2024-04-22 23:54:30', '1', '2024-04-23 09:36:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2740, '�������', '', 1, 10, 2, 'monitors', 'ep:monitor', '', '', 0, '1', '1', '1', '1', '2024-04-23 00:04:44', '1', '2024-04-23 00:04:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2741, '��ȡ�����ͻ�', 'crm:customer:receive', 3, 1, 2546, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:47:45', '1', '2024-04-24 19:47:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2742, '���乫���ͻ�', 'crm:customer:distribute', 3, 2, 2546, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:48:05', '1', '2024-04-24 19:48:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2743, '��Ʒͳ�Ʋ�ѯ', 'statistics:product:query', 3, 1, 2545, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:50:05', '1', '2024-04-24 19:50:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2744, '��Ʒͳ�Ƶ���', 'statistics:product:export', 3, 2, 2545, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:50:26', '1', '2024-04-24 19:50:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2745, '֧��������ѯ', 'pay:channel:query', 3, 10, 1126, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:53:01', '1', '2024-04-24 19:53:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2746, '֧����������', 'pay:channel:create', 3, 11, 1126, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:53:18', '1', '2024-04-24 19:53:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2747, '֧����������', 'pay:channel:update', 3, 12, 1126, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:53:32', '1', '2024-04-24 19:53:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2748, '֧������ɾ��', 'pay:channel:delete', 3, 13, 1126, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:54:34', '1', '2024-04-24 19:54:34', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2749, '��Ʒ�ղز�ѯ', 'product:favorite:query', 3, 10, 2014, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:55:47', '1', '2024-04-24 19:55:47', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2750, '��Ʒ�����ѯ', 'product:browse-history:query', 3, 20, 2014, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:57:43', '1', '2024-04-24 19:57:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2751, '�ۺ�ͬ��', 'trade:after-sale:agree', 3, 2, 2073, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:58:40', '1', '2024-04-24 19:58:40', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2752, '�ۺ�ͬ��', 'trade:after-sale:disagree', 3, 3, 2073, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:59:03', '1', '2024-04-24 19:59:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2753, '�ۺ�ȷ���˻�', 'trade:after-sale:receive', 3, 4, 2073, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 20:00:07', '1', '2024-04-24 20:00:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2754, '�ۺ�ȷ���˿�', 'trade:after-sale:refund', 3, 5, 2073, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 20:00:24', '1', '2024-04-24 20:00:24', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2755, 'ɾ����Ŀ', 'report:go-view-project:delete', 3, 2, 2153, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 20:01:37', '1', '2024-04-24 20:01:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2756, '��Ա�ȼ���¼��ѯ', 'member:level-record:query', 3, 10, 2325, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 20:02:32', '1', '2024-04-24 20:02:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2757, '��Ա�����¼��ѯ', 'member:experience-record:query', 3, 11, 2325, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 20:02:51', '1', '2024-04-24 20:02:51', '0'); +COMMIT; +SET IDENTITY_INSERT system_menu OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_notice +-- ---------------------------- +CREATE TABLE system_notice +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + title varchar(50) NOT NULL, + content text NOT NULL, + type smallint NOT NULL, + status smallint DEFAULT 0 NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_notice.id IS '����ID'; +COMMENT ON COLUMN system_notice.title IS '�������'; +COMMENT ON COLUMN system_notice.content IS '��������'; +COMMENT ON COLUMN system_notice.type IS '�������ͣ�1֪ͨ 2���棩'; +COMMENT ON COLUMN system_notice.status IS '����״̬��0���� 1�رգ�'; +COMMENT ON COLUMN system_notice.creator IS '������'; +COMMENT ON COLUMN system_notice.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_notice.updater IS '������'; +COMMENT ON COLUMN system_notice.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_notice.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_notice.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_notice IS '֪ͨ�����'; + +-- ---------------------------- +-- Records of system_notice +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_notice ON; +INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '����Ĺ���', '

    �°汾����133

    ', 1, 0, 'admin', '2021-01-05 17:03:48', '1', '2022-05-04 21:00:20', '0', 1); +INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 'ά��֪ͨ��2018-07-01 ϵͳ�賿ά��', '

    11112222

    ', 2, 1, 'admin', '2021-01-05 17:03:48', '1', '2023-12-02 20:07:26', '0', 1); +INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, '���Dz��Ա���', '

    ��������123

    ', 1, 0, '110', '2022-02-22 01:01:25', '110', '2022-02-22 01:01:46', '0', 121); +COMMIT; +SET IDENTITY_INSERT system_notice OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_notify_message +-- ---------------------------- +CREATE TABLE system_notify_message +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint NOT NULL, + user_type smallint NOT NULL, + template_id bigint NOT NULL, + template_code varchar(64) NOT NULL, + template_nickname varchar(63) NOT NULL, + template_content varchar(1024) NOT NULL, + template_type int NOT NULL, + template_params varchar(255) NOT NULL, + read_status bit NOT NULL, + read_time datetime DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_notify_message.id IS '�û�ID'; +COMMENT ON COLUMN system_notify_message.user_id IS '�û�id'; +COMMENT ON COLUMN system_notify_message.user_type IS '�û�����'; +COMMENT ON COLUMN system_notify_message.template_id IS 'ģ����'; +COMMENT ON COLUMN system_notify_message.template_code IS 'ģ�����'; +COMMENT ON COLUMN system_notify_message.template_nickname IS 'ģ�淢��������'; +COMMENT ON COLUMN system_notify_message.template_content IS 'ģ������'; +COMMENT ON COLUMN system_notify_message.template_type IS 'ģ������'; +COMMENT ON COLUMN system_notify_message.template_params IS 'ģ�����'; +COMMENT ON COLUMN system_notify_message.read_status IS '�Ƿ��Ѷ�'; +COMMENT ON COLUMN system_notify_message.read_time IS '�Ķ�ʱ��'; +COMMENT ON COLUMN system_notify_message.creator IS '������'; +COMMENT ON COLUMN system_notify_message.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_notify_message.updater IS '������'; +COMMENT ON COLUMN system_notify_message.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_notify_message.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_notify_message.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_notify_message IS 'վ������Ϣ��'; + +-- ---------------------------- +-- Records of system_notify_message +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_notify_message ON; +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 1, 2, 1, 'test', '123', '���� 1���ҿ�ʼ 2 ��', 1, '{"name":"1","what":"2"}', '1', '2023-02-10 00:47:04', '1', '2023-01-28 11:44:08', '1', '2023-02-10 00:47:04', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, 1, 2, 1, 'test', '123', '���� 1���ҿ�ʼ 2 ��', 1, '{"name":"1","what":"2"}', '1', '2023-02-10 00:47:04', '1', '2023-01-28 11:45:04', '1', '2023-02-10 00:47:04', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, 103, 2, 2, 'register', 'ϵͳ��Ϣ', '��ã���ӭ ���� ������ͥ��', 2, '{"name":"����"}', '0', NULL, '1', '2023-01-28 21:02:20', '1', '2023-01-28 21:02:20', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, 1, 2, 1, 'test', '123', '���� ��ܵ���ҿ�ʼ д���� ��', 1, '{"name":"��ܵ","what":"д����"}', '1', '2023-02-10 00:47:04', '1', '2023-01-28 22:21:42', '1', '2023-02-10 00:47:04', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, 1, 2, 1, 'test', '123', '���� ��ܵ���ҿ�ʼ д���� ��', 1, '{"name":"��ܵ","what":"д����"}', '1', '2023-01-29 10:52:06', '1', '2023-01-28 22:22:07', '1', '2023-01-29 10:52:06', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (7, 1, 2, 1, 'test', '123', '���� 2���ҿ�ʼ 3 ��', 1, '{"name":"2","what":"3"}', '1', '2023-01-29 10:52:06', '1', '2023-01-28 23:45:21', '1', '2023-01-29 10:52:06', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (8, 1, 2, 2, 'register', 'ϵͳ��Ϣ', '��ã���ӭ 123 ������ͥ��', 2, '{"name":"123"}', '1', '2023-01-29 10:52:06', '1', '2023-01-28 23:50:21', '1', '2023-01-29 10:52:06', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, 247, 1, 4, 'brokerage_withdraw_audit_approve', 'system', '����2023-09-28 08:35:46���֣�0.09Ԫ��������ͨ�����', 2, '{"reason":null,"createTime":"2023-09-28 08:35:46","price":"0.09"}', '0', NULL, '1', '2023-09-28 16:36:22', '1', '2023-09-28 16:36:22', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (10, 247, 1, 4, 'brokerage_withdraw_audit_approve', 'system', '����2023-09-30 20:59:40���֣�1.00Ԫ��������ͨ�����', 2, '{"reason":null,"createTime":"2023-09-30 20:59:40","price":"1.00"}', '0', NULL, '1', '2023-10-03 12:11:34', '1', '2023-10-03 12:11:34', '0', 1); +COMMIT; +SET IDENTITY_INSERT system_notify_message OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_notify_template +-- ---------------------------- +CREATE TABLE system_notify_template +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(63) NOT NULL, + code varchar(64) NOT NULL, + nickname varchar(255) NOT NULL, + content varchar(1024) NOT NULL, + type smallint NOT NULL, + params varchar(255) DEFAULT NULL NULL, + status smallint NOT NULL, + remark varchar(255) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN system_notify_template.id IS '����'; +COMMENT ON COLUMN system_notify_template.name IS 'ģ������'; +COMMENT ON COLUMN system_notify_template.code IS 'ģ�����'; +COMMENT ON COLUMN system_notify_template.nickname IS '����������'; +COMMENT ON COLUMN system_notify_template.content IS 'ģ������'; +COMMENT ON COLUMN system_notify_template.type IS '����'; +COMMENT ON COLUMN system_notify_template.params IS '��������'; +COMMENT ON COLUMN system_notify_template.status IS '״̬'; +COMMENT ON COLUMN system_notify_template.remark IS '��ע'; +COMMENT ON COLUMN system_notify_template.creator IS '������'; +COMMENT ON COLUMN system_notify_template.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_notify_template.updater IS '������'; +COMMENT ON COLUMN system_notify_template.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_notify_template.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE system_notify_template IS 'վ����ģ���'; + +-- ---------------------------- +-- Table structure for system_oauth2_access_token +-- ---------------------------- +CREATE TABLE system_oauth2_access_token +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint NOT NULL, + user_type smallint NOT NULL, + user_info varchar(512) NOT NULL, + access_token varchar(255) NOT NULL, + refresh_token varchar(32) NOT NULL, + client_id varchar(255) NOT NULL, + scopes varchar(255) DEFAULT NULL NULL, + expires_time datetime NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +CREATE INDEX idx_system_oauth2_access_token_01 ON system_oauth2_access_token (access_token); +CREATE INDEX idx_system_oauth2_access_token_02 ON system_oauth2_access_token (refresh_token); + +COMMENT ON COLUMN system_oauth2_access_token.id IS '���'; +COMMENT ON COLUMN system_oauth2_access_token.user_id IS '�û����'; +COMMENT ON COLUMN system_oauth2_access_token.user_type IS '�û�����'; +COMMENT ON COLUMN system_oauth2_access_token.user_info IS '�û���Ϣ'; +COMMENT ON COLUMN system_oauth2_access_token.access_token IS '��������'; +COMMENT ON COLUMN system_oauth2_access_token.refresh_token IS 'ˢ������'; +COMMENT ON COLUMN system_oauth2_access_token.client_id IS '�ͻ��˱��'; +COMMENT ON COLUMN system_oauth2_access_token.scopes IS '��Ȩ��Χ'; +COMMENT ON COLUMN system_oauth2_access_token.expires_time IS '����ʱ��'; +COMMENT ON COLUMN system_oauth2_access_token.creator IS '������'; +COMMENT ON COLUMN system_oauth2_access_token.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_oauth2_access_token.updater IS '������'; +COMMENT ON COLUMN system_oauth2_access_token.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_oauth2_access_token.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_oauth2_access_token.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_oauth2_access_token IS 'OAuth2 ��������'; + +-- ---------------------------- +-- Table structure for system_oauth2_approve +-- ---------------------------- +CREATE TABLE system_oauth2_approve +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint NOT NULL, + user_type smallint NOT NULL, + client_id varchar(255) NOT NULL, + scope varchar(255) DEFAULT '' NULL, + approved bit DEFAULT '0' NOT NULL, + expires_time datetime NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_oauth2_approve.id IS '���'; +COMMENT ON COLUMN system_oauth2_approve.user_id IS '�û����'; +COMMENT ON COLUMN system_oauth2_approve.user_type IS '�û�����'; +COMMENT ON COLUMN system_oauth2_approve.client_id IS '�ͻ��˱��'; +COMMENT ON COLUMN system_oauth2_approve.scope IS '��Ȩ��Χ'; +COMMENT ON COLUMN system_oauth2_approve.approved IS '�Ƿ����'; +COMMENT ON COLUMN system_oauth2_approve.expires_time IS '����ʱ��'; +COMMENT ON COLUMN system_oauth2_approve.creator IS '������'; +COMMENT ON COLUMN system_oauth2_approve.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_oauth2_approve.updater IS '������'; +COMMENT ON COLUMN system_oauth2_approve.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_oauth2_approve.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_oauth2_approve.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_oauth2_approve IS 'OAuth2 ��׼��'; + +-- ---------------------------- +-- Table structure for system_oauth2_client +-- ---------------------------- +CREATE TABLE system_oauth2_client +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + client_id varchar(255) NOT NULL, + secret varchar(255) NOT NULL, + name varchar(255) NOT NULL, + logo varchar(255) NOT NULL, + description varchar(255) DEFAULT NULL NULL, + status smallint NOT NULL, + access_token_validity_seconds int NOT NULL, + refresh_token_validity_seconds int NOT NULL, + redirect_uris varchar(255) NOT NULL, + authorized_grant_types varchar(255) NOT NULL, + scopes varchar(255) DEFAULT NULL NULL, + auto_approve_scopes varchar(255) DEFAULT NULL NULL, + authorities varchar(255) DEFAULT NULL NULL, + resource_ids varchar(255) DEFAULT NULL NULL, + additional_information varchar(4096) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN system_oauth2_client.id IS '���'; +COMMENT ON COLUMN system_oauth2_client.client_id IS '�ͻ��˱��'; +COMMENT ON COLUMN system_oauth2_client.secret IS '�ͻ�����Կ'; +COMMENT ON COLUMN system_oauth2_client.name IS 'Ӧ����'; +COMMENT ON COLUMN system_oauth2_client.logo IS 'Ӧ��ͼ��'; +COMMENT ON COLUMN system_oauth2_client.description IS 'Ӧ������'; +COMMENT ON COLUMN system_oauth2_client.status IS '״̬'; +COMMENT ON COLUMN system_oauth2_client.access_token_validity_seconds IS '�������Ƶ���Ч��'; +COMMENT ON COLUMN system_oauth2_client.refresh_token_validity_seconds IS 'ˢ�����Ƶ���Ч��'; +COMMENT ON COLUMN system_oauth2_client.redirect_uris IS '���ض���� URI ��ַ'; +COMMENT ON COLUMN system_oauth2_client.authorized_grant_types IS '��Ȩ����'; +COMMENT ON COLUMN system_oauth2_client.scopes IS '��Ȩ��Χ'; +COMMENT ON COLUMN system_oauth2_client.auto_approve_scopes IS '�Զ�ͨ������Ȩ��Χ'; +COMMENT ON COLUMN system_oauth2_client.authorities IS 'Ȩ��'; +COMMENT ON COLUMN system_oauth2_client.resource_ids IS '��Դ'; +COMMENT ON COLUMN system_oauth2_client.additional_information IS '������Ϣ'; +COMMENT ON COLUMN system_oauth2_client.creator IS '������'; +COMMENT ON COLUMN system_oauth2_client.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_oauth2_client.updater IS '������'; +COMMENT ON COLUMN system_oauth2_client.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_oauth2_client.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE system_oauth2_client IS 'OAuth2 �ͻ��˱�'; + +-- ---------------------------- +-- Records of system_oauth2_client +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_oauth2_client ON; +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (1, 'default', 'admin123', '���Դ��', 'http://test.win.iocoder.cn/a5e2e244368878a366b516805a4aabf1.png', '��������', 0, 1800, 2592000, '["https://www.iocoder.cn","https://doc.iocoder.cn"]', '["password","authorization_code","implicit","refresh_token"]', '["user.read","user.write"]', '[]', '["user.read","user.write"]', '[]', '{}', '1', '2022-05-11 21:47:12', '1', '2024-02-22 16:31:52', '0'); +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (40, 'test', 'test2', 'biubiu', 'http://test.win.iocoder.cn/277a899d573723f1fcdfb57340f00379.png', '��������', 0, 1800, 43200, '["https://www.iocoder.cn"]', '["password","authorization_code","implicit"]', '["user_info","projects"]', '["user_info"]', '[]', '[]', '{}', '1', '2022-05-12 00:28:20', '1', '2023-12-02 21:01:01', '0'); +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (41, 'win-sso-demo-by-code', 'test', '������Ȩ��ģʽ�����ʵ�� SSO �����¼��', 'http://test.win.iocoder.cn/fe4ed36596adad5120036ef61a6d0153654544d44af8dd4ad3ffe8f759933d6f.png', NULL, 0, 1800, 43200, '["http://127.0.0.1:18080"]', '["authorization_code","refresh_token"]', '["user.read","user.write"]', '[]', '[]', '[]', NULL, '1', '2022-09-29 13:28:31', '1', '2022-09-29 13:28:31', '0'); +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (42, 'win-sso-demo-by-password', 'test', '��������ģʽ�����ʵ�� SSO �����¼��', 'http://test.win.iocoder.cn/604bdc695e13b3b22745be704d1f2aa8ee05c5f26f9fead6d1ca49005afbc857.jpeg', NULL, 0, 1800, 43200, '["http://127.0.0.1:18080"]', '["password","refresh_token"]', '["user.read","user.write"]', '[]', '[]', '[]', NULL, '1', '2022-10-04 17:40:16', '1', '2022-10-04 20:31:21', '0'); +COMMIT; +SET IDENTITY_INSERT system_oauth2_client OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_oauth2_code +-- ---------------------------- +CREATE TABLE system_oauth2_code +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint NOT NULL, + user_type smallint NOT NULL, + code varchar(32) NOT NULL, + client_id varchar(255) NOT NULL, + scopes varchar(255) DEFAULT '' NULL, + expires_time datetime NOT NULL, + redirect_uri varchar(255) DEFAULT NULL NULL, + state varchar(255) DEFAULT '' NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_oauth2_code.id IS '���'; +COMMENT ON COLUMN system_oauth2_code.user_id IS '�û����'; +COMMENT ON COLUMN system_oauth2_code.user_type IS '�û�����'; +COMMENT ON COLUMN system_oauth2_code.code IS '��Ȩ��'; +COMMENT ON COLUMN system_oauth2_code.client_id IS '�ͻ��˱��'; +COMMENT ON COLUMN system_oauth2_code.scopes IS '��Ȩ��Χ'; +COMMENT ON COLUMN system_oauth2_code.expires_time IS '����ʱ��'; +COMMENT ON COLUMN system_oauth2_code.redirect_uri IS '���ض���� URI ��ַ'; +COMMENT ON COLUMN system_oauth2_code.state IS '״̬'; +COMMENT ON COLUMN system_oauth2_code.creator IS '������'; +COMMENT ON COLUMN system_oauth2_code.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_oauth2_code.updater IS '������'; +COMMENT ON COLUMN system_oauth2_code.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_oauth2_code.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_oauth2_code.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_oauth2_code IS 'OAuth2 ��Ȩ���'; + +-- ---------------------------- +-- Table structure for system_oauth2_refresh_token +-- ---------------------------- +CREATE TABLE system_oauth2_refresh_token +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint NOT NULL, + refresh_token varchar(32) NOT NULL, + user_type smallint NOT NULL, + client_id varchar(255) NOT NULL, + scopes varchar(255) DEFAULT NULL NULL, + expires_time datetime NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_oauth2_refresh_token.id IS '���'; +COMMENT ON COLUMN system_oauth2_refresh_token.user_id IS '�û����'; +COMMENT ON COLUMN system_oauth2_refresh_token.refresh_token IS 'ˢ������'; +COMMENT ON COLUMN system_oauth2_refresh_token.user_type IS '�û�����'; +COMMENT ON COLUMN system_oauth2_refresh_token.client_id IS '�ͻ��˱��'; +COMMENT ON COLUMN system_oauth2_refresh_token.scopes IS '��Ȩ��Χ'; +COMMENT ON COLUMN system_oauth2_refresh_token.expires_time IS '����ʱ��'; +COMMENT ON COLUMN system_oauth2_refresh_token.creator IS '������'; +COMMENT ON COLUMN system_oauth2_refresh_token.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_oauth2_refresh_token.updater IS '������'; +COMMENT ON COLUMN system_oauth2_refresh_token.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_oauth2_refresh_token.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_oauth2_refresh_token.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_oauth2_refresh_token IS 'OAuth2 ˢ������'; + +-- ---------------------------- +-- Table structure for system_operate_log +-- ---------------------------- +CREATE TABLE system_operate_log +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + trace_id varchar(64) DEFAULT '' NULL, + user_id bigint NOT NULL, + user_type smallint DEFAULT 0 NOT NULL, + type varchar(50) NOT NULL, + sub_type varchar(50) NOT NULL, + biz_id bigint NOT NULL, + action varchar(2000) DEFAULT '' NULL, + extra varchar(2000) DEFAULT '' NULL, + request_method varchar(16) DEFAULT '' NULL, + request_url varchar(255) DEFAULT '' NULL, + user_ip varchar(50) DEFAULT NULL NULL, + user_agent varchar(200) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_operate_log.id IS '��־����'; +COMMENT ON COLUMN system_operate_log.trace_id IS '��·׷�ٱ��'; +COMMENT ON COLUMN system_operate_log.user_id IS '�û����'; +COMMENT ON COLUMN system_operate_log.user_type IS '�û�����'; +COMMENT ON COLUMN system_operate_log.type IS '����ģ������'; +COMMENT ON COLUMN system_operate_log.sub_type IS '������'; +COMMENT ON COLUMN system_operate_log.biz_id IS '��������ģ����'; +COMMENT ON COLUMN system_operate_log.action IS '��������'; +COMMENT ON COLUMN system_operate_log.extra IS '��չ�ֶ�'; +COMMENT ON COLUMN system_operate_log.request_method IS '���󷽷���'; +COMMENT ON COLUMN system_operate_log.request_url IS '�����ַ'; +COMMENT ON COLUMN system_operate_log.user_ip IS '�û� IP'; +COMMENT ON COLUMN system_operate_log.user_agent IS '����� UA'; +COMMENT ON COLUMN system_operate_log.creator IS '������'; +COMMENT ON COLUMN system_operate_log.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_operate_log.updater IS '������'; +COMMENT ON COLUMN system_operate_log.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_operate_log.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_operate_log.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_operate_log IS '������־��¼ V2 �汾'; + +-- ---------------------------- +-- Table structure for system_post +-- ---------------------------- +CREATE TABLE system_post +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + code varchar(64) NOT NULL, + name varchar(50) NOT NULL, + sort int NOT NULL, + status smallint NOT NULL, + remark varchar(500) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_post.id IS '��λID'; +COMMENT ON COLUMN system_post.code IS '��λ����'; +COMMENT ON COLUMN system_post.name IS '��λ����'; +COMMENT ON COLUMN system_post.sort IS '��ʾ˳��'; +COMMENT ON COLUMN system_post.status IS '״̬��0���� 1ͣ�ã�'; +COMMENT ON COLUMN system_post.remark IS '��ע'; +COMMENT ON COLUMN system_post.creator IS '������'; +COMMENT ON COLUMN system_post.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_post.updater IS '������'; +COMMENT ON COLUMN system_post.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_post.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_post.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_post IS '��λ��Ϣ��'; + +-- ---------------------------- +-- Records of system_post +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_post ON; +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, 'ceo', '���³�', 1, 0, '', 'admin', '2021-01-06 17:03:48', '1', '2023-02-11 15:19:04', '0', 1); +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 'se', '��Ŀ����', 2, 0, '', 'admin', '2021-01-05 17:03:48', '1', '2023-11-15 09:18:20', '0', 1); +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, 'user', '��ͨԱ��', 4, 0, '111', 'admin', '2021-01-05 17:03:48', '1', '2023-12-02 10:04:37', '0', 1); +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, 'HR', '������Դ', 5, 0, '', '1', '2024-03-24 20:45:40', '1', '2024-03-24 20:45:40', '0', 1); +COMMIT; +SET IDENTITY_INSERT system_post OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_role +-- ---------------------------- +CREATE TABLE system_role +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(30) NOT NULL, + code varchar(100) NOT NULL, + sort int NOT NULL, + data_scope smallint DEFAULT 1 NOT NULL, + data_scope_dept_ids varchar(500) DEFAULT '' NULL, + status smallint NOT NULL, + type smallint NOT NULL, + remark varchar(500) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_role.id IS '��ɫID'; +COMMENT ON COLUMN system_role.name IS '��ɫ����'; +COMMENT ON COLUMN system_role.code IS '��ɫȨ���ַ���'; +COMMENT ON COLUMN system_role.sort IS '��ʾ˳��'; +COMMENT ON COLUMN system_role.data_scope IS '���ݷ�Χ��1��ȫ������Ȩ�� 2���Զ�����Ȩ�� 3������������Ȩ�� 4�������ż���������Ȩ�ޣ�'; +COMMENT ON COLUMN system_role.data_scope_dept_ids IS '���ݷ�Χ(ָ����������)'; +COMMENT ON COLUMN system_role.status IS '��ɫ״̬��0���� 1ͣ�ã�'; +COMMENT ON COLUMN system_role.type IS '��ɫ����'; +COMMENT ON COLUMN system_role.remark IS '��ע'; +COMMENT ON COLUMN system_role.creator IS '������'; +COMMENT ON COLUMN system_role.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_role.updater IS '������'; +COMMENT ON COLUMN system_role.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_role.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_role.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_role IS '��ɫ��Ϣ��'; + +-- ---------------------------- +-- Records of system_role +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_role ON; +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '��������Ա', 'super_admin', 1, 1, '', 0, 1, '��������Ա', 'admin', '2021-01-05 17:03:48', '', '2022-02-22 05:08:21', '0', 1); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '��ͨ��ɫ', 'common', 2, 2, '', 0, 1, '��ͨ��ɫ', 'admin', '2021-01-05 17:03:48', '', '2022-02-22 05:08:20', '0', 1); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, 'CRM ����Ա', 'crm_admin', 2, 1, '', 0, 1, 'CRM ר����ɫ', '1', '2024-02-24 10:51:13', '1', '2024-02-24 02:51:32', '0', 1); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (101, '�����˺�', 'test', 0, 1, '[]', 0, 2, '�������', '', '2021-01-06 13:49:35', '1', '2024-03-24 22:22:45', '0', 1); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (109, '�⻧����Ա', 'tenant_admin', 0, 1, '', 0, 1, 'ϵͳ�Զ�����', '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', '0', 121); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (111, '�⻧����Ա', 'tenant_admin', 0, 1, '', 0, 1, 'ϵͳ�Զ�����', '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', '0', 122); +COMMIT; +SET IDENTITY_INSERT system_role OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_role_menu +-- ---------------------------- +CREATE TABLE system_role_menu +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + role_id bigint NOT NULL, + menu_id bigint NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_role_menu.id IS '�������'; +COMMENT ON COLUMN system_role_menu.role_id IS '��ɫID'; +COMMENT ON COLUMN system_role_menu.menu_id IS '�˵�ID'; +COMMENT ON COLUMN system_role_menu.creator IS '������'; +COMMENT ON COLUMN system_role_menu.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_role_menu.updater IS '������'; +COMMENT ON COLUMN system_role_menu.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_role_menu.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_role_menu.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_role_menu IS '��ɫ�Ͳ˵�������'; + +-- ---------------------------- +-- Records of system_role_menu +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_role_menu ON; +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (263, 109, 1, '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (434, 2, 1, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (454, 2, 1093, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (455, 2, 1094, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (460, 2, 1100, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (467, 2, 1107, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (476, 2, 1117, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (477, 2, 100, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (478, 2, 101, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (479, 2, 102, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (480, 2, 1126, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (481, 2, 103, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (483, 2, 104, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (485, 2, 105, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (488, 2, 107, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (490, 2, 108, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (492, 2, 109, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (498, 2, 1138, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (523, 2, 1224, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (524, 2, 1225, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (541, 2, 500, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (543, 2, 501, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (675, 2, 2, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (689, 2, 1077, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (690, 2, 1078, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (692, 2, 1083, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (693, 2, 1084, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (699, 2, 1090, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (703, 2, 106, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (704, 2, 110, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (705, 2, 111, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (706, 2, 112, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (707, 2, 113, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1296, 110, 1, '110', '2022-02-23 00:23:55', '110', '2022-02-23 00:23:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1578, 111, 1, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1604, 101, 1216, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1605, 101, 1217, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1606, 101, 1218, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1607, 101, 1219, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1608, 101, 1220, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1609, 101, 1221, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1610, 101, 5, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1611, 101, 1222, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1612, 101, 1118, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1613, 101, 1119, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1614, 101, 1120, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1615, 101, 1185, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1616, 101, 1186, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1617, 101, 1187, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1618, 101, 1188, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1619, 101, 1189, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1620, 101, 1190, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1621, 101, 1191, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1622, 101, 1192, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1623, 101, 1193, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1624, 101, 1194, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1625, 101, 1195, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1626, 101, 1196, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1627, 101, 1197, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1628, 101, 1198, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1629, 101, 1199, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1630, 101, 1200, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1631, 101, 1201, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1632, 101, 1202, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1633, 101, 1207, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1634, 101, 1208, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1635, 101, 1209, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1636, 101, 1210, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1637, 101, 1211, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1638, 101, 1212, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1639, 101, 1213, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1640, 101, 1215, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1641, 101, 2, '1', '2022-04-01 22:21:24', '1', '2022-04-01 22:21:24', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1642, 101, 1031, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1643, 101, 1032, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1644, 101, 1033, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1645, 101, 1034, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1646, 101, 1035, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1647, 101, 1050, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1648, 101, 1051, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1649, 101, 1052, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1650, 101, 1053, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1651, 101, 1054, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1652, 101, 1056, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1653, 101, 1057, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1654, 101, 1058, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1655, 101, 1059, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1656, 101, 1060, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1657, 101, 1066, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1658, 101, 1067, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1659, 101, 1070, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1664, 101, 1075, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1666, 101, 1077, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1667, 101, 1078, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1668, 101, 1082, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1669, 101, 1083, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1670, 101, 1084, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1671, 101, 1085, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1672, 101, 1086, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1673, 101, 1087, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1674, 101, 1088, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1675, 101, 1089, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1679, 101, 1237, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1680, 101, 1238, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1681, 101, 1239, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1682, 101, 1240, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1683, 101, 1241, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1684, 101, 1242, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1685, 101, 1243, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1687, 101, 106, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1688, 101, 110, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1689, 101, 111, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1690, 101, 112, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1691, 101, 113, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1692, 101, 114, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1693, 101, 115, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1694, 101, 116, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1729, 109, 100, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1730, 109, 101, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1731, 109, 1063, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1732, 109, 1064, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1733, 109, 1001, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1734, 109, 1065, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1735, 109, 1002, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1736, 109, 1003, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1737, 109, 1004, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1738, 109, 1005, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1739, 109, 1006, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1740, 109, 1007, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1741, 109, 1008, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1742, 109, 1009, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1743, 109, 1010, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1744, 109, 1011, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1745, 109, 1012, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1746, 111, 100, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1747, 111, 101, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1748, 111, 1063, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1749, 111, 1064, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1750, 111, 1001, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1751, 111, 1065, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1752, 111, 1002, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1753, 111, 1003, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1754, 111, 1004, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1755, 111, 1005, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1756, 111, 1006, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1757, 111, 1007, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1758, 111, 1008, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1759, 111, 1009, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1760, 111, 1010, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1761, 111, 1011, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1762, 111, 1012, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1763, 109, 100, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1764, 109, 101, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1765, 109, 1063, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1766, 109, 1064, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1767, 109, 1001, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1768, 109, 1065, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1769, 109, 1002, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1770, 109, 1003, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1771, 109, 1004, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1772, 109, 1005, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1773, 109, 1006, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1774, 109, 1007, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1775, 109, 1008, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1776, 109, 1009, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1777, 109, 1010, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1778, 109, 1011, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1779, 109, 1012, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1780, 111, 100, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1781, 111, 101, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1782, 111, 1063, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1783, 111, 1064, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1784, 111, 1001, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1785, 111, 1065, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1786, 111, 1002, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1787, 111, 1003, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1788, 111, 1004, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1789, 111, 1005, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1790, 111, 1006, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1791, 111, 1007, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1792, 111, 1008, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1793, 111, 1009, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1794, 111, 1010, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1795, 111, 1011, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1796, 111, 1012, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1797, 109, 100, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1798, 109, 101, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1799, 109, 1063, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1800, 109, 1064, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1801, 109, 1001, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1802, 109, 1065, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1803, 109, 1002, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1804, 109, 1003, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1805, 109, 1004, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1806, 109, 1005, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1807, 109, 1006, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1808, 109, 1007, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1809, 109, 1008, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1810, 109, 1009, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1811, 109, 1010, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1812, 109, 1011, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1813, 109, 1012, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1814, 111, 100, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1815, 111, 101, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1816, 111, 1063, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1817, 111, 1064, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1818, 111, 1001, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1819, 111, 1065, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1820, 111, 1002, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1821, 111, 1003, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1822, 111, 1004, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1823, 111, 1005, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1824, 111, 1006, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1825, 111, 1007, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1826, 111, 1008, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1827, 111, 1009, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1828, 111, 1010, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1829, 111, 1011, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1830, 111, 1012, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1831, 109, 103, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1832, 109, 1017, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1833, 109, 1018, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1834, 109, 1019, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1835, 109, 1020, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1836, 111, 103, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1837, 111, 1017, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1838, 111, 1018, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1839, 111, 1019, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1840, 111, 1020, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1841, 109, 1036, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1842, 109, 1037, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1843, 109, 1038, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1844, 109, 1039, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1845, 109, 107, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1846, 111, 1036, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1847, 111, 1037, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1848, 111, 1038, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1849, 111, 1039, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1850, 111, 107, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1991, 2, 1024, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1992, 2, 1025, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1993, 2, 1026, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1994, 2, 1027, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1995, 2, 1028, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1996, 2, 1029, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1997, 2, 1030, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1998, 2, 1031, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1999, 2, 1032, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2000, 2, 1033, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2001, 2, 1034, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2002, 2, 1035, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2003, 2, 1036, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2004, 2, 1037, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2005, 2, 1038, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2006, 2, 1039, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2007, 2, 1040, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2008, 2, 1042, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2009, 2, 1043, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2010, 2, 1045, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2011, 2, 1046, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2012, 2, 1048, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2013, 2, 1050, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2014, 2, 1051, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2015, 2, 1052, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2016, 2, 1053, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2017, 2, 1054, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2018, 2, 1056, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2019, 2, 1057, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2020, 2, 1058, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2021, 2, 2083, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2022, 2, 1059, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2023, 2, 1060, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2024, 2, 1063, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2025, 2, 1064, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2026, 2, 1065, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2027, 2, 1066, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2028, 2, 1067, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2029, 2, 1070, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2034, 2, 1075, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2036, 2, 1082, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2037, 2, 1085, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2038, 2, 1086, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2039, 2, 1087, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2040, 2, 1088, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2041, 2, 1089, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2042, 2, 1091, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2043, 2, 1092, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2044, 2, 1095, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2045, 2, 1096, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2046, 2, 1097, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2047, 2, 1098, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2048, 2, 1101, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2049, 2, 1102, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2050, 2, 1103, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2051, 2, 1104, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2052, 2, 1105, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2053, 2, 1106, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2054, 2, 1108, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2055, 2, 1109, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2061, 2, 1127, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2062, 2, 1128, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2063, 2, 1129, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2064, 2, 1130, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2066, 2, 1132, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2067, 2, 1133, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2068, 2, 1134, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2069, 2, 1135, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2070, 2, 1136, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2071, 2, 1137, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2072, 2, 114, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2073, 2, 1139, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2074, 2, 115, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2075, 2, 1140, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2076, 2, 116, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2077, 2, 1141, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2078, 2, 1142, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2079, 2, 1143, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2080, 2, 1150, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2081, 2, 1161, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2082, 2, 1162, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2083, 2, 1163, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2084, 2, 1164, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2085, 2, 1165, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2086, 2, 1166, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2087, 2, 1173, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2088, 2, 1174, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2089, 2, 1175, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2090, 2, 1176, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2091, 2, 1177, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2092, 2, 1178, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2099, 2, 1226, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2100, 2, 1227, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2101, 2, 1228, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2102, 2, 1229, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2103, 2, 1237, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2104, 2, 1238, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2105, 2, 1239, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2106, 2, 1240, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2107, 2, 1241, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2108, 2, 1242, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2109, 2, 1243, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2116, 2, 1254, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2117, 2, 1255, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2118, 2, 1256, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2119, 2, 1257, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2120, 2, 1258, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2121, 2, 1259, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2122, 2, 1260, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2123, 2, 1261, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2124, 2, 1263, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2125, 2, 1264, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2126, 2, 1265, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2127, 2, 1266, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2128, 2, 1267, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2129, 2, 1001, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2130, 2, 1002, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2131, 2, 1003, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2132, 2, 1004, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2133, 2, 1005, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2134, 2, 1006, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2135, 2, 1007, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2136, 2, 1008, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2137, 2, 1009, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2138, 2, 1010, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2139, 2, 1011, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2140, 2, 1012, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2141, 2, 1013, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2142, 2, 1014, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2143, 2, 1015, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2144, 2, 1016, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2145, 2, 1017, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2146, 2, 1018, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2147, 2, 1019, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2148, 2, 1020, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2149, 2, 1021, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2150, 2, 1022, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2151, 2, 1023, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2152, 2, 1281, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2153, 2, 1282, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2154, 2, 2000, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2155, 2, 2002, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2156, 2, 2003, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2157, 2, 2004, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2158, 2, 2005, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2159, 2, 2006, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2160, 2, 2008, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2161, 2, 2009, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2162, 2, 2010, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2163, 2, 2011, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2164, 2, 2012, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2170, 2, 2019, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2171, 2, 2020, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2172, 2, 2021, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2173, 2, 2022, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2174, 2, 2023, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2175, 2, 2025, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2177, 2, 2027, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2178, 2, 2028, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2179, 2, 2029, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2180, 2, 2014, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2181, 2, 2015, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2182, 2, 2016, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2183, 2, 2017, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2184, 2, 2018, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2188, 101, 1024, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2189, 101, 1, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2190, 101, 1025, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2191, 101, 1026, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2192, 101, 1027, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2193, 101, 1028, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2194, 101, 1029, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2195, 101, 1030, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2196, 101, 1036, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2197, 101, 1037, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2198, 101, 1038, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2199, 101, 1039, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2200, 101, 1040, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2201, 101, 1042, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2202, 101, 1043, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2203, 101, 1045, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2204, 101, 1046, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2205, 101, 1048, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2206, 101, 2083, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2207, 101, 1063, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2208, 101, 1064, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2209, 101, 1065, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2210, 101, 1093, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2211, 101, 1094, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2212, 101, 1095, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2213, 101, 1096, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2214, 101, 1097, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2215, 101, 1098, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2216, 101, 1100, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2217, 101, 1101, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2218, 101, 1102, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2219, 101, 1103, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2220, 101, 1104, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2221, 101, 1105, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2222, 101, 1106, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2223, 101, 2130, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2224, 101, 1107, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2225, 101, 2131, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2226, 101, 1108, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2227, 101, 2132, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2228, 101, 1109, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2229, 101, 2133, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2230, 101, 2134, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2232, 101, 2135, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2234, 101, 2136, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2236, 101, 2137, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2238, 101, 2138, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2240, 101, 2139, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2242, 101, 2140, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2243, 101, 2141, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2244, 101, 2142, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2245, 101, 2143, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2246, 101, 2144, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2247, 101, 2145, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2248, 101, 2146, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2249, 101, 2147, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2250, 101, 100, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2251, 101, 2148, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2252, 101, 101, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2253, 101, 2149, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2254, 101, 102, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2255, 101, 2150, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2256, 101, 103, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2257, 101, 2151, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2258, 101, 104, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2259, 101, 2152, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2260, 101, 105, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2261, 101, 107, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2262, 101, 108, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2263, 101, 109, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2264, 101, 1138, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2265, 101, 1139, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2266, 101, 1140, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2267, 101, 1141, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2268, 101, 1142, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2269, 101, 1143, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2270, 101, 1224, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2271, 101, 1225, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2272, 101, 1226, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2273, 101, 1227, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2274, 101, 1228, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2275, 101, 1229, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2282, 101, 1261, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2283, 101, 1263, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2284, 101, 1264, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2285, 101, 1265, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2286, 101, 1266, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2287, 101, 1267, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2288, 101, 1001, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2289, 101, 1002, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2290, 101, 1003, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2291, 101, 1004, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2292, 101, 1005, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2293, 101, 1006, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2294, 101, 1007, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2295, 101, 1008, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2296, 101, 1009, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2297, 101, 1010, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2298, 101, 1011, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2299, 101, 1012, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2300, 101, 500, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2301, 101, 1013, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2302, 101, 501, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2303, 101, 1014, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2304, 101, 1015, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2305, 101, 1016, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2306, 101, 1017, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2307, 101, 1018, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2308, 101, 1019, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2309, 101, 1020, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2310, 101, 1021, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2311, 101, 1022, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2312, 101, 1023, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2929, 109, 1224, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2930, 109, 1225, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2931, 109, 1226, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2932, 109, 1227, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2933, 109, 1228, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2934, 109, 1229, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2935, 109, 1138, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2936, 109, 1139, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2937, 109, 1140, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2938, 109, 1141, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2939, 109, 1142, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2940, 109, 1143, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2941, 111, 1224, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2942, 111, 1225, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2943, 111, 1226, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2944, 111, 1227, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2945, 111, 1228, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2946, 111, 1229, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2947, 111, 1138, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2948, 111, 1139, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2949, 111, 1140, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2950, 111, 1141, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2951, 111, 1142, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2952, 111, 1143, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2993, 109, 2, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2994, 109, 1031, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2995, 109, 1032, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2996, 109, 1033, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2997, 109, 1034, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2998, 109, 1035, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2999, 109, 1050, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3000, 109, 1051, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3001, 109, 1052, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3002, 109, 1053, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3003, 109, 1054, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3004, 109, 1056, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3005, 109, 1057, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3006, 109, 1058, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3007, 109, 1059, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3008, 109, 1060, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3009, 109, 1066, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3010, 109, 1067, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3011, 109, 1070, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3012, 109, 1075, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3013, 109, 1076, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3014, 109, 1077, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3015, 109, 1078, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3016, 109, 1082, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3017, 109, 1083, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3018, 109, 1084, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3019, 109, 1085, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3020, 109, 1086, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3021, 109, 1087, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3022, 109, 1088, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3023, 109, 1089, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3024, 109, 1090, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3025, 109, 1091, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3026, 109, 1092, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3027, 109, 106, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3028, 109, 110, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3029, 109, 111, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3030, 109, 112, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3031, 109, 113, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3032, 109, 114, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3033, 109, 115, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3034, 109, 116, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3035, 109, 2472, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3036, 109, 2478, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3037, 109, 2479, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3038, 109, 2480, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3039, 109, 2481, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3040, 109, 2482, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3041, 109, 2483, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3042, 109, 2484, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3043, 109, 2485, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3044, 109, 2486, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3045, 109, 2487, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3046, 109, 2488, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3047, 109, 2489, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3048, 109, 2490, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3049, 109, 2491, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3050, 109, 2492, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3051, 109, 2493, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3052, 109, 2494, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3053, 109, 2495, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3054, 109, 2497, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3055, 109, 1237, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3056, 109, 1238, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3057, 109, 1239, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3058, 109, 1240, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3059, 109, 1241, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3060, 109, 1242, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3061, 109, 1243, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3062, 109, 2525, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3063, 109, 1255, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3064, 109, 1256, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3065, 109, 1257, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3066, 109, 1258, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3067, 109, 1259, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3068, 109, 1260, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3069, 111, 2, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3070, 111, 1031, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3071, 111, 1032, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3072, 111, 1033, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3073, 111, 1034, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3074, 111, 1035, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3075, 111, 1050, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3076, 111, 1051, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3077, 111, 1052, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3078, 111, 1053, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3079, 111, 1054, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3080, 111, 1056, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3081, 111, 1057, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3082, 111, 1058, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3083, 111, 1059, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3084, 111, 1060, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3085, 111, 1066, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3086, 111, 1067, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3087, 111, 1070, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3088, 111, 1075, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3089, 111, 1076, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3090, 111, 1077, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3091, 111, 1078, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3092, 111, 1082, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3093, 111, 1083, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3094, 111, 1084, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3095, 111, 1085, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3096, 111, 1086, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3097, 111, 1087, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3098, 111, 1088, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3099, 111, 1089, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3100, 111, 1090, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3101, 111, 1091, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3102, 111, 1092, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3103, 111, 106, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3104, 111, 110, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3105, 111, 111, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3106, 111, 112, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3107, 111, 113, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3108, 111, 114, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3109, 111, 115, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3110, 111, 116, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3111, 111, 2472, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3112, 111, 2478, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3113, 111, 2479, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3114, 111, 2480, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3115, 111, 2481, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3116, 111, 2482, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3117, 111, 2483, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3118, 111, 2484, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3119, 111, 2485, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3120, 111, 2486, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3121, 111, 2487, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3122, 111, 2488, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3123, 111, 2489, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3124, 111, 2490, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3125, 111, 2491, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3126, 111, 2492, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3127, 111, 2493, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3128, 111, 2494, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3129, 111, 2495, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3130, 111, 2497, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3131, 111, 1237, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3132, 111, 1238, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3133, 111, 1239, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3134, 111, 1240, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3135, 111, 1241, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3136, 111, 1242, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3137, 111, 1243, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3138, 111, 2525, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3139, 111, 1255, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3140, 111, 1256, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3141, 111, 1257, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3142, 111, 1258, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3143, 111, 1259, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3144, 111, 1260, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3221, 109, 102, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3222, 109, 1013, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3223, 109, 1014, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3224, 109, 1015, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3225, 109, 1016, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3226, 111, 102, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3227, 111, 1013, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3228, 111, 1014, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3229, 111, 1015, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3230, 111, 1016, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4163, 109, 5, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4164, 109, 1118, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4165, 109, 1119, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4166, 109, 1120, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4167, 109, 2713, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4168, 109, 2714, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4169, 109, 2715, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4170, 109, 2716, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4171, 109, 2717, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4172, 109, 2718, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4173, 109, 2720, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4174, 109, 1185, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4175, 109, 2721, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4176, 109, 1186, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4177, 109, 2722, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4178, 109, 1187, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4179, 109, 2723, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4180, 109, 1188, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4181, 109, 2724, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4182, 109, 1189, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4183, 109, 2725, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4184, 109, 1190, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4185, 109, 2726, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4186, 109, 1191, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4187, 109, 2727, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4188, 109, 1192, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4189, 109, 2728, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4190, 109, 1193, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4191, 109, 2729, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4192, 109, 1194, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4193, 109, 2730, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4194, 109, 1195, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4195, 109, 2731, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4196, 109, 1196, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4197, 109, 2732, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4198, 109, 1197, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4199, 109, 2733, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4200, 109, 1198, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4201, 109, 2734, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4202, 109, 1199, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4203, 109, 2735, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4204, 109, 1200, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4205, 109, 1201, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4206, 109, 1202, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4207, 109, 1207, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4208, 109, 1208, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4209, 109, 1209, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4210, 109, 1210, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4211, 109, 1211, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4212, 109, 1212, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4213, 109, 1213, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4214, 109, 1215, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4215, 109, 1216, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4216, 109, 1217, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4217, 109, 1218, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4218, 109, 1219, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4219, 109, 1220, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4220, 109, 1221, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4221, 109, 1222, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4222, 111, 5, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4223, 111, 1118, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4224, 111, 1119, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4225, 111, 1120, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4226, 111, 2713, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4227, 111, 2714, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4228, 111, 2715, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4229, 111, 2716, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4230, 111, 2717, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4231, 111, 2718, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4232, 111, 2720, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4233, 111, 1185, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4234, 111, 2721, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4235, 111, 1186, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4236, 111, 2722, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4237, 111, 1187, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4238, 111, 2723, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4239, 111, 1188, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4240, 111, 2724, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4241, 111, 1189, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4242, 111, 2725, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4243, 111, 1190, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4244, 111, 2726, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4245, 111, 1191, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4246, 111, 2727, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4247, 111, 1192, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4248, 111, 2728, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4249, 111, 1193, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4250, 111, 2729, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4251, 111, 1194, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4252, 111, 2730, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4253, 111, 1195, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4254, 111, 2731, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4255, 111, 1196, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4256, 111, 2732, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4257, 111, 1197, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4258, 111, 2733, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4259, 111, 1198, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4260, 111, 2734, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4261, 111, 1199, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4262, 111, 2735, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4263, 111, 1200, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4264, 111, 1201, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4265, 111, 1202, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4266, 111, 1207, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4267, 111, 1208, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4268, 111, 1209, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4269, 111, 1210, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4270, 111, 1211, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4271, 111, 1212, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4272, 111, 1213, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4273, 111, 1215, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4274, 111, 1216, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4275, 111, 1217, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4276, 111, 1218, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4277, 111, 1219, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4278, 111, 1220, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4279, 111, 1221, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4280, 111, 1222, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5777, 101, 2739, '1', '2024-04-30 09:38:37', '1', '2024-04-30 09:38:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5778, 101, 2740, '1', '2024-04-30 09:38:37', '1', '2024-04-30 09:38:37', '0', 1); +COMMIT; +SET IDENTITY_INSERT system_role_menu OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_sms_channel +-- ---------------------------- +CREATE TABLE system_sms_channel +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + signature varchar(12) NOT NULL, + code varchar(63) NOT NULL, + status smallint NOT NULL, + remark varchar(255) DEFAULT NULL NULL, + api_key varchar(128) NOT NULL, + api_secret varchar(128) DEFAULT NULL NULL, + callback_url varchar(255) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN system_sms_channel.id IS '���'; +COMMENT ON COLUMN system_sms_channel.signature IS '����ǩ��'; +COMMENT ON COLUMN system_sms_channel.code IS '��������'; +COMMENT ON COLUMN system_sms_channel.status IS '����״̬'; +COMMENT ON COLUMN system_sms_channel.remark IS '��ע'; +COMMENT ON COLUMN system_sms_channel.api_key IS '���� API ���˺�'; +COMMENT ON COLUMN system_sms_channel.api_secret IS '���� API ����Կ'; +COMMENT ON COLUMN system_sms_channel.callback_url IS '���ŷ��ͻص� URL'; +COMMENT ON COLUMN system_sms_channel.creator IS '������'; +COMMENT ON COLUMN system_sms_channel.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_sms_channel.updater IS '������'; +COMMENT ON COLUMN system_sms_channel.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_sms_channel.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE system_sms_channel IS '��������'; + +-- ---------------------------- +-- Records of system_sms_channel +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_sms_channel ON; +INSERT INTO system_sms_channel (id, signature, code, status, remark, api_key, api_secret, callback_url, creator, create_time, updater, update_time, deleted) VALUES (2, 'Ballcat', 'ALIYUN', 0, '��Ҫ��Ŷ��ֻ���ҿ����ã�������', 'LTAI5tCnKso2uG3kJ5gRav88', 'fGJ5SNXL7P1NHNRmJ7DJaMJGPyE55C', NULL, '', '2021-03-31 11:53:10', '1', '2023-12-02 22:10:17', '0'); +INSERT INTO system_sms_channel (id, signature, code, status, remark, api_key, api_secret, callback_url, creator, create_time, updater, update_time, deleted) VALUES (4, '��������', 'DEBUG_DING_TALK', 0, '123', '696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859', 'SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67', NULL, '1', '2021-04-13 00:23:14', '1', '2022-03-27 20:29:49', '0'); +INSERT INTO system_sms_channel (id, signature, code, status, remark, api_key, api_secret, callback_url, creator, create_time, updater, update_time, deleted) VALUES (6, '������ʾ', 'DEBUG_DING_TALK', 0, '������', '696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859', 'SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67', NULL, '1', '2022-04-10 23:07:59', '1', '2023-12-02 22:10:08', '0'); +COMMIT; +SET IDENTITY_INSERT system_sms_channel OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_sms_code +-- ---------------------------- +CREATE TABLE system_sms_code +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + mobile varchar(11) NOT NULL, + code varchar(6) NOT NULL, + create_ip varchar(15) NOT NULL, + scene smallint NOT NULL, + today_index smallint NOT NULL, + used smallint NOT NULL, + used_time datetime DEFAULT NULL NULL, + used_ip varchar(255) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +CREATE INDEX idx_system_sms_code_01 ON system_sms_code (mobile); + +COMMENT ON COLUMN system_sms_code.id IS '���'; +COMMENT ON COLUMN system_sms_code.mobile IS '�ֻ���'; +COMMENT ON COLUMN system_sms_code.code IS '��֤��'; +COMMENT ON COLUMN system_sms_code.create_ip IS '���� IP'; +COMMENT ON COLUMN system_sms_code.scene IS '���ͳ���'; +COMMENT ON COLUMN system_sms_code.today_index IS '���շ��͵ĵڼ���'; +COMMENT ON COLUMN system_sms_code.used IS '�Ƿ�ʹ��'; +COMMENT ON COLUMN system_sms_code.used_time IS 'ʹ��ʱ��'; +COMMENT ON COLUMN system_sms_code.used_ip IS 'ʹ�� IP'; +COMMENT ON COLUMN system_sms_code.creator IS '������'; +COMMENT ON COLUMN system_sms_code.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_sms_code.updater IS '������'; +COMMENT ON COLUMN system_sms_code.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_sms_code.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_sms_code.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_sms_code IS '�ֻ���֤��'; + +-- ---------------------------- +-- Table structure for system_sms_log +-- ---------------------------- +CREATE TABLE system_sms_log +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + channel_id bigint NOT NULL, + channel_code varchar(63) NOT NULL, + template_id bigint NOT NULL, + template_code varchar(63) NOT NULL, + template_type smallint NOT NULL, + template_content varchar(255) NOT NULL, + template_params varchar(255) NOT NULL, + api_template_id varchar(63) NOT NULL, + mobile varchar(11) NOT NULL, + user_id bigint DEFAULT NULL NULL, + user_type smallint DEFAULT NULL NULL, + send_status smallint DEFAULT 0 NOT NULL, + send_time datetime DEFAULT NULL NULL, + api_send_code varchar(63) DEFAULT NULL NULL, + api_send_msg varchar(255) DEFAULT NULL NULL, + api_request_id varchar(255) DEFAULT NULL NULL, + api_serial_no varchar(255) DEFAULT NULL NULL, + receive_status smallint DEFAULT 0 NOT NULL, + receive_time datetime DEFAULT NULL NULL, + api_receive_code varchar(63) DEFAULT NULL NULL, + api_receive_msg varchar(255) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN system_sms_log.id IS '���'; +COMMENT ON COLUMN system_sms_log.channel_id IS '�����������'; +COMMENT ON COLUMN system_sms_log.channel_code IS '������������'; +COMMENT ON COLUMN system_sms_log.template_id IS 'ģ����'; +COMMENT ON COLUMN system_sms_log.template_code IS 'ģ�����'; +COMMENT ON COLUMN system_sms_log.template_type IS '��������'; +COMMENT ON COLUMN system_sms_log.template_content IS '��������'; +COMMENT ON COLUMN system_sms_log.template_params IS '���Ų���'; +COMMENT ON COLUMN system_sms_log.api_template_id IS '���� API ��ģ����'; +COMMENT ON COLUMN system_sms_log.mobile IS '�ֻ���'; +COMMENT ON COLUMN system_sms_log.user_id IS '�û����'; +COMMENT ON COLUMN system_sms_log.user_type IS '�û�����'; +COMMENT ON COLUMN system_sms_log.send_status IS '����״̬'; +COMMENT ON COLUMN system_sms_log.send_time IS '����ʱ��'; +COMMENT ON COLUMN system_sms_log.api_send_code IS '���� API ���ͽ���ı���'; +COMMENT ON COLUMN system_sms_log.api_send_msg IS '���� API ����ʧ�ܵ���ʾ'; +COMMENT ON COLUMN system_sms_log.api_request_id IS '���� API ���ͷ��ص�Ψһ���� ID'; +COMMENT ON COLUMN system_sms_log.api_serial_no IS '���� API ���ͷ��ص����'; +COMMENT ON COLUMN system_sms_log.receive_status IS '����״̬'; +COMMENT ON COLUMN system_sms_log.receive_time IS '����ʱ��'; +COMMENT ON COLUMN system_sms_log.api_receive_code IS 'API ���ս���ı���'; +COMMENT ON COLUMN system_sms_log.api_receive_msg IS 'API ���ս����˵��'; +COMMENT ON COLUMN system_sms_log.creator IS '������'; +COMMENT ON COLUMN system_sms_log.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_sms_log.updater IS '������'; +COMMENT ON COLUMN system_sms_log.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_sms_log.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE system_sms_log IS '������־'; + +-- ---------------------------- +-- Table structure for system_sms_template +-- ---------------------------- +CREATE TABLE system_sms_template +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + type smallint NOT NULL, + status smallint NOT NULL, + code varchar(63) NOT NULL, + name varchar(63) NOT NULL, + content varchar(255) NOT NULL, + params varchar(255) NOT NULL, + remark varchar(255) DEFAULT NULL NULL, + api_template_id varchar(63) NOT NULL, + channel_id bigint NOT NULL, + channel_code varchar(63) NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN system_sms_template.id IS '���'; +COMMENT ON COLUMN system_sms_template.type IS 'ģ������'; +COMMENT ON COLUMN system_sms_template.status IS '����״̬'; +COMMENT ON COLUMN system_sms_template.code IS 'ģ�����'; +COMMENT ON COLUMN system_sms_template.name IS 'ģ������'; +COMMENT ON COLUMN system_sms_template.content IS 'ģ������'; +COMMENT ON COLUMN system_sms_template.params IS '��������'; +COMMENT ON COLUMN system_sms_template.remark IS '��ע'; +COMMENT ON COLUMN system_sms_template.api_template_id IS '���� API ��ģ����'; +COMMENT ON COLUMN system_sms_template.channel_id IS '�����������'; +COMMENT ON COLUMN system_sms_template.channel_code IS '������������'; +COMMENT ON COLUMN system_sms_template.creator IS '������'; +COMMENT ON COLUMN system_sms_template.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_sms_template.updater IS '������'; +COMMENT ON COLUMN system_sms_template.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_sms_template.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE system_sms_template IS '����ģ��'; + +-- ---------------------------- +-- Records of system_sms_template +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_sms_template ON; +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (2, 1, 0, 'test_01', '������֤�����', '���ڽ��е�¼����{operation}��������֤����{code}', '["operation","code"]', '���Ա�ע', '4383920', 6, 'DEBUG_DING_TALK', '', '2021-03-31 10:49:38', '1', '2023-12-02 22:32:47', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (3, 1, 0, 'test_02', '����֪ͨ', '������֤��{code}������֤��5��������Ч������й©�����ˣ�', '["code"]', NULL, 'SMS_207945135', 2, 'ALIYUN', '', '2021-03-31 11:56:30', '1', '2021-04-10 01:22:02', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (6, 3, 0, 'test-01', '����ģ��', '������ {name}', '["name"]', 'f������', '4383920', 6, 'DEBUG_DING_TALK', '1', '2021-04-10 01:07:21', '1', '2022-12-10 21:26:09', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (7, 3, 0, 'test-04', '������', '�ϼ�{name}��ţ��{code}', '["name","code"]', '��������', 'suibian', 4, 'DEBUG_DING_TALK', '1', '2021-04-13 00:29:53', '1', '2023-12-02 22:35:34', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (8, 1, 0, 'user-sms-login', 'ǰ̨�û����ŵ�¼', '������֤����{code}', '["code"]', NULL, '4372216', 6, 'DEBUG_DING_TALK', '1', '2021-10-11 08:10:00', '1', '2022-12-10 21:25:59', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (9, 2, 0, 'bpm_task_assigned', '�������������񱻷���', '���յ���һ���µĴ�������{processInstanceName}-{taskName}�������ˣ�{startUserNickname}���������ӣ�{detailUrl}', '["processInstanceName","taskName","startUserNickname","detailUrl"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-21 22:31:19', '1', '2022-01-22 00:03:36', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (10, 2, 0, 'bpm_process_instance_reject', '�������������̱���ͨ��', '�������̱�������ͨ����{processInstanceName}��ԭ��{reason}���鿴���ӣ�{detailUrl}', '["processInstanceName","reason","detailUrl"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:03:31', '1', '2022-05-01 12:33:14', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (11, 2, 0, 'bpm_process_instance_approve', '�������������̱�ͨ��', '�������̱�����ͨ����{processInstanceName}���鿴���ӣ�{detailUrl}', '["processInstanceName","detailUrl"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:04:31', '1', '2022-03-27 20:32:21', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (12, 2, 0, 'demo', '��ʾģ��', '�Ҿ��Dz���һ����', '[]', NULL, 'biubiubiu', 6, 'DEBUG_DING_TALK', '1', '2022-04-10 23:22:49', '1', '2023-03-24 23:45:07', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (14, 1, 0, 'user-update-mobile', '��Ա�û� - �޸��ֻ�', '������֤��{code}������֤�� 5 ��������Ч������й©�����ˣ�', '["code"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', '2023-08-19 18:58:01', '1', '2023-08-19 11:34:04', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (15, 1, 0, 'user-update-password', '��Ա�û� - �޸�����', '������֤��{code}������֤�� 5 ��������Ч������й©�����ˣ�', '["code"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', '2023-08-19 18:58:01', '1', '2023-08-19 11:34:18', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (16, 1, 0, 'user-reset-password', '��Ա�û� - ��������', '������֤��{code}������֤�� 5 ��������Ч������й©�����ˣ�', '["code"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', '2023-08-19 18:58:01', '1', '2023-12-02 22:35:27', '0'); +COMMIT; +SET IDENTITY_INSERT system_sms_template OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_social_client +-- ---------------------------- +CREATE TABLE system_social_client +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(255) NOT NULL, + social_type smallint NOT NULL, + user_type smallint NOT NULL, + client_id varchar(255) NOT NULL, + client_secret varchar(255) NOT NULL, + agent_id varchar(255) DEFAULT NULL NULL, + status smallint NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_social_client.id IS '���'; +COMMENT ON COLUMN system_social_client.name IS 'Ӧ����'; +COMMENT ON COLUMN system_social_client.social_type IS '�罻ƽ̨������'; +COMMENT ON COLUMN system_social_client.user_type IS '�û�����'; +COMMENT ON COLUMN system_social_client.client_id IS '�ͻ��˱��'; +COMMENT ON COLUMN system_social_client.client_secret IS '�ͻ�����Կ'; +COMMENT ON COLUMN system_social_client.agent_id IS '������'; +COMMENT ON COLUMN system_social_client.status IS '״̬'; +COMMENT ON COLUMN system_social_client.creator IS '������'; +COMMENT ON COLUMN system_social_client.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_social_client.updater IS '������'; +COMMENT ON COLUMN system_social_client.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_social_client.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_social_client.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_social_client IS '�罻�ͻ��˱�'; + +-- ---------------------------- +-- Records of system_social_client +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_social_client ON; +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '����', 20, 2, 'dingvrnreaje3yqvzhxg', 'i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI', NULL, 0, '', '2023-10-18 11:21:18', '1', '2023-12-20 21:28:26', '1', 1); +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '��������������', 20, 2, 'dingtsu9hpepjkbmthhw', 'FP_bnSq_HAHKCSncmJjw5hxhnzs6vaVDSZZn3egj6rdqTQ_hu5tQVJyLMpgCakdP', NULL, 0, '', '2023-10-18 11:21:18', '', '2023-12-20 21:28:26', '1', 121); +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, '΢�Ź��ں�', 31, 1, 'wx5b23ba7a5589ecbb', '2a7b3b20c537e52e74afd395eb85f61f', NULL, 0, '', '2023-10-18 16:07:46', '1', '2023-12-20 21:28:23', '1', 1); +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (43, '΢��С����', 34, 1, 'wx63c280fe3248a3e7', '6f270509224a7ae1296bbf1c8cb97aed', NULL, 0, '', '2023-10-19 13:37:41', '1', '2023-12-20 21:28:25', '1', 1); +COMMIT; +SET IDENTITY_INSERT system_social_client OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_social_user +-- ---------------------------- +CREATE TABLE system_social_user +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + type smallint NOT NULL, + openid varchar(32) NOT NULL, + token varchar(256) DEFAULT NULL NULL, + raw_token_info varchar(1024) NOT NULL, + nickname varchar(32) NOT NULL, + avatar varchar(255) DEFAULT NULL NULL, + raw_user_info varchar(1024) NOT NULL, + code varchar(256) NOT NULL, + state varchar(256) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_social_user.id IS '����(��������)'; +COMMENT ON COLUMN system_social_user.type IS '�罻ƽ̨������'; +COMMENT ON COLUMN system_social_user.openid IS '�罻 openid'; +COMMENT ON COLUMN system_social_user.token IS '�罻 token'; +COMMENT ON COLUMN system_social_user.raw_token_info IS 'ԭʼ Token ���ݣ�һ���� JSON ��ʽ'; +COMMENT ON COLUMN system_social_user.nickname IS '�û��dz�'; +COMMENT ON COLUMN system_social_user.avatar IS '�û�ͷ��'; +COMMENT ON COLUMN system_social_user.raw_user_info IS 'ԭʼ�û����ݣ�һ���� JSON ��ʽ'; +COMMENT ON COLUMN system_social_user.code IS '���һ�ε���֤ code'; +COMMENT ON COLUMN system_social_user.state IS '���һ�ε���֤ state'; +COMMENT ON COLUMN system_social_user.creator IS '������'; +COMMENT ON COLUMN system_social_user.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_social_user.updater IS '������'; +COMMENT ON COLUMN system_social_user.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_social_user.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_social_user.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_social_user IS '�罻�û���'; + +-- ---------------------------- +-- Table structure for system_social_user_bind +-- ---------------------------- +CREATE TABLE system_social_user_bind +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint NOT NULL, + user_type smallint NOT NULL, + social_type smallint NOT NULL, + social_user_id bigint NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_social_user_bind.id IS '����(��������)'; +COMMENT ON COLUMN system_social_user_bind.user_id IS '�û����'; +COMMENT ON COLUMN system_social_user_bind.user_type IS '�û�����'; +COMMENT ON COLUMN system_social_user_bind.social_type IS '�罻ƽ̨������'; +COMMENT ON COLUMN system_social_user_bind.social_user_id IS '�罻�û��ı��'; +COMMENT ON COLUMN system_social_user_bind.creator IS '������'; +COMMENT ON COLUMN system_social_user_bind.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_social_user_bind.updater IS '������'; +COMMENT ON COLUMN system_social_user_bind.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_social_user_bind.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_social_user_bind.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_social_user_bind IS '�罻�󶨱�'; + +-- ---------------------------- +-- Table structure for system_tenant +-- ---------------------------- +CREATE TABLE system_tenant +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(30) NOT NULL, + contact_user_id bigint DEFAULT NULL NULL, + contact_name varchar(30) NOT NULL, + contact_mobile varchar(500) DEFAULT NULL NULL, + status smallint DEFAULT 0 NOT NULL, + website varchar(256) DEFAULT '' NULL, + package_id bigint NOT NULL, + expire_time datetime NOT NULL, + account_count int NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN system_tenant.id IS '�⻧���'; +COMMENT ON COLUMN system_tenant.name IS '�⻧��'; +COMMENT ON COLUMN system_tenant.contact_user_id IS '��ϵ�˵��û����'; +COMMENT ON COLUMN system_tenant.contact_name IS '��ϵ��'; +COMMENT ON COLUMN system_tenant.contact_mobile IS '��ϵ�ֻ�'; +COMMENT ON COLUMN system_tenant.status IS '�⻧״̬��0���� 1ͣ�ã�'; +COMMENT ON COLUMN system_tenant.website IS '������'; +COMMENT ON COLUMN system_tenant.package_id IS '�⻧�ײͱ��'; +COMMENT ON COLUMN system_tenant.expire_time IS '����ʱ��'; +COMMENT ON COLUMN system_tenant.account_count IS '�˺�����'; +COMMENT ON COLUMN system_tenant.creator IS '������'; +COMMENT ON COLUMN system_tenant.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_tenant.updater IS '������'; +COMMENT ON COLUMN system_tenant.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_tenant.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE system_tenant IS '�⻧��'; + +-- ---------------------------- +-- Records of system_tenant +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_tenant ON; +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, website, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (1, '���Դ��', NULL, '��ܵ', '17321315478', 0, 'www.iocoder.cn', 0, '2099-02-19 17:14:16', 9999, '1', '2021-01-05 17:03:47', '1', '2023-11-06 11:41:41', '0'); +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, website, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (121, 'С�⻧', 110, 'С��2', '15601691300', 0, 'zsxq.iocoder.cn', 111, '2024-03-11 00:00:00', 20, '1', '2022-02-22 00:56:14', '1', '2023-11-06 11:41:47', '0'); +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, website, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (122, '�����⻧', 113, '���', '15601691300', 0, 'test.iocoder.cn', 111, '2022-04-30 00:00:00', 50, '1', '2022-03-07 21:37:58', '1', '2023-11-06 11:41:53', '0'); +COMMIT; +SET IDENTITY_INSERT system_tenant OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_tenant_package +-- ---------------------------- +CREATE TABLE system_tenant_package +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(30) NOT NULL, + status smallint DEFAULT 0 NOT NULL, + remark varchar(256) DEFAULT '' NULL, + menu_ids varchar(4096) NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL +); + +COMMENT ON COLUMN system_tenant_package.id IS '�ײͱ��'; +COMMENT ON COLUMN system_tenant_package.name IS '�ײ���'; +COMMENT ON COLUMN system_tenant_package.status IS '�⻧״̬��0���� 1ͣ�ã�'; +COMMENT ON COLUMN system_tenant_package.remark IS '��ע'; +COMMENT ON COLUMN system_tenant_package.menu_ids IS '�����IJ˵����'; +COMMENT ON COLUMN system_tenant_package.creator IS '������'; +COMMENT ON COLUMN system_tenant_package.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_tenant_package.updater IS '������'; +COMMENT ON COLUMN system_tenant_package.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_tenant_package.deleted IS '�Ƿ�ɾ��'; +COMMENT ON TABLE system_tenant_package IS '�⻧�ײͱ�'; + +-- ---------------------------- +-- Records of system_tenant_package +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_tenant_package ON; +INSERT INTO system_tenant_package (id, name, status, remark, menu_ids, creator, create_time, updater, update_time, deleted) VALUES (111, '��ͨ�ײ�', 0, 'С����', '[1,2,5,1031,1032,1033,1034,1035,1036,1037,1038,1039,1050,1051,1052,1053,1054,1056,1057,1058,1059,1060,1063,1064,1065,1066,1067,1070,1075,1076,1077,1078,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1118,1119,1120,100,101,102,103,106,107,110,111,112,113,1138,114,1139,115,1140,116,1141,1142,1143,2713,2714,2715,2716,2717,2718,2720,1185,2721,1186,2722,1187,2723,1188,2724,1189,2725,1190,2726,1191,2727,2472,1192,2728,1193,2729,1194,2730,1195,2731,1196,2732,1197,2733,2478,1198,2734,2479,1199,2735,2480,1200,2481,1201,2482,1202,2483,2484,2485,2486,2487,1207,2488,1208,2489,1209,2490,1210,2491,1211,2492,1212,2493,1213,2494,2495,1215,1216,2497,1217,1218,1219,1220,1221,1222,1224,1225,1226,1227,1228,1229,1237,1238,1239,1240,1241,1242,1243,2525,1255,1256,1001,1257,1002,1258,1003,1259,1004,1260,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020]', '1', '2022-02-22 00:54:00', '1', '2024-03-30 17:53:17', '0'); +COMMIT; +SET IDENTITY_INSERT system_tenant_package OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_user_post +-- ---------------------------- +CREATE TABLE system_user_post +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint DEFAULT 0 NOT NULL, + post_id bigint DEFAULT 0 NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_user_post.id IS 'id'; +COMMENT ON COLUMN system_user_post.user_id IS '�û�ID'; +COMMENT ON COLUMN system_user_post.post_id IS '��λID'; +COMMENT ON COLUMN system_user_post.creator IS '������'; +COMMENT ON COLUMN system_user_post.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_user_post.updater IS '������'; +COMMENT ON COLUMN system_user_post.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_user_post.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_user_post.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_user_post IS '�û���λ��'; + +-- ---------------------------- +-- Records of system_user_post +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_user_post ON; +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (112, 1, 1, 'admin', '2022-05-02 07:25:24', 'admin', '2022-05-02 07:25:24', '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (113, 100, 1, 'admin', '2022-05-02 07:25:24', 'admin', '2022-05-02 07:25:24', '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (115, 104, 1, '1', '2022-05-16 19:36:28', '1', '2022-05-16 19:36:28', '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (116, 117, 2, '1', '2022-07-09 17:40:26', '1', '2022-07-09 17:40:26', '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (117, 118, 1, '1', '2022-07-09 17:44:44', '1', '2022-07-09 17:44:44', '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (119, 114, 5, '1', '2024-03-24 20:45:51', '1', '2024-03-24 20:45:51', '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (123, 115, 1, '1', '2024-04-04 09:37:14', '1', '2024-04-04 09:37:14', '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (124, 115, 2, '1', '2024-04-04 09:37:14', '1', '2024-04-04 09:37:14', '0', 1); +COMMIT; +SET IDENTITY_INSERT system_user_post OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_user_role +-- ---------------------------- +CREATE TABLE system_user_role +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint NOT NULL, + role_id bigint NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NULL, + deleted bit DEFAULT '0' NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_user_role.id IS '�������'; +COMMENT ON COLUMN system_user_role.user_id IS '�û�ID'; +COMMENT ON COLUMN system_user_role.role_id IS '��ɫID'; +COMMENT ON COLUMN system_user_role.creator IS '������'; +COMMENT ON COLUMN system_user_role.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_user_role.updater IS '������'; +COMMENT ON COLUMN system_user_role.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_user_role.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_user_role.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_user_role IS '�û��ͽ�ɫ������'; + +-- ---------------------------- +-- Records of system_user_role +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_user_role ON; +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, 1, 1, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:17', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 2, 2, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:13', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, 100, 101, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:13', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, 100, 1, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:12', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, 100, 2, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:11', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (10, 103, 1, '1', '2022-01-11 13:19:45', '1', '2022-01-11 13:19:45', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (14, 110, 109, '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', '0', 121); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (15, 111, 110, '110', '2022-02-23 13:14:38', '110', '2022-02-23 13:14:38', '0', 121); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (16, 113, 111, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', '0', 122); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (18, 1, 2, '1', '2022-05-12 20:39:29', '1', '2022-05-12 20:39:29', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (20, 104, 101, '1', '2022-05-28 15:43:57', '1', '2022-05-28 15:43:57', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (22, 115, 2, '1', '2022-07-21 22:08:30', '1', '2022-07-21 22:08:30', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (35, 112, 1, '1', '2024-03-15 20:00:24', '1', '2024-03-15 20:00:24', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (36, 118, 1, '1', '2024-03-17 09:12:08', '1', '2024-03-17 09:12:08', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (38, 114, 101, '1', '2024-03-24 22:23:03', '1', '2024-03-24 22:23:03', '0', 1); +COMMIT; +SET IDENTITY_INSERT system_user_role OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_users +-- ---------------------------- +CREATE TABLE system_users +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + username varchar(30) NOT NULL, + password varchar(100) DEFAULT '' NULL, + nickname varchar(30) NOT NULL, + remark varchar(500) DEFAULT NULL NULL, + dept_id bigint DEFAULT NULL NULL, + post_ids varchar(255) DEFAULT NULL NULL, + email varchar(50) DEFAULT '' NULL, + mobile varchar(11) DEFAULT '' NULL, + sex smallint DEFAULT 0 NULL, + avatar varchar(512) DEFAULT '' NULL, + status smallint DEFAULT 0 NOT NULL, + login_ip varchar(50) DEFAULT '' NULL, + login_date datetime DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN system_users.id IS '�û�ID'; +COMMENT ON COLUMN system_users.username IS '�û��˺�'; +COMMENT ON COLUMN system_users.password IS '����'; +COMMENT ON COLUMN system_users.nickname IS '�û��dz�'; +COMMENT ON COLUMN system_users.remark IS '��ע'; +COMMENT ON COLUMN system_users.dept_id IS '����ID'; +COMMENT ON COLUMN system_users.post_ids IS '��λ�������'; +COMMENT ON COLUMN system_users.email IS '�û�����'; +COMMENT ON COLUMN system_users.mobile IS '�ֻ�����'; +COMMENT ON COLUMN system_users.sex IS '�û��Ա�'; +COMMENT ON COLUMN system_users.avatar IS 'ͷ���ַ'; +COMMENT ON COLUMN system_users.status IS '�ʺ�״̬��0���� 1ͣ�ã�'; +COMMENT ON COLUMN system_users.login_ip IS '����¼IP'; +COMMENT ON COLUMN system_users.login_date IS '����¼ʱ��'; +COMMENT ON COLUMN system_users.creator IS '������'; +COMMENT ON COLUMN system_users.create_time IS '����ʱ��'; +COMMENT ON COLUMN system_users.updater IS '������'; +COMMENT ON COLUMN system_users.update_time IS '����ʱ��'; +COMMENT ON COLUMN system_users.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN system_users.tenant_id IS '�⻧���'; +COMMENT ON TABLE system_users IS '�û���Ϣ��'; + +-- ---------------------------- +-- Records of system_users +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT system_users ON; +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, 'admin', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '���Դ��', '����Ա', 103, '[1]', 'aoteman@126.com', '18818260277', 2, 'http://test.win.iocoder.cn/96c787a2ce88bf6d0ce3cd8b6cf5314e80e7703cd41bf4af8cd2e2909dbd6b6d.png', 0, '0:0:0:0:0:0:0:1', '2024-04-29 21:50:32', 'admin', '2021-01-05 17:03:47', NULL, '2024-04-29 21:50:32', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (100, 'win', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '���', '��Ҫ����', 104, '[1]', 'win@iocoder.cn', '15601691300', 1, '', 1, '127.0.0.1', '2022-07-09 23:03:33', '', '2021-01-07 09:07:17', NULL, '2022-07-09 23:03:33', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (103, 'yuanma', '$2a$10$YMpimV4T6BtDhIaA8jSW.u8UTGBeGhc/qwXP4oxoMr4mOw9.qttt6', 'Դ��', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '0:0:0:0:0:0:0:1', '2024-03-18 21:09:04', '', '2021-01-13 23:50:35', NULL, '2024-03-18 21:09:04', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (104, 'test', '$2a$04$KhExCYl7lx6eWWZYKsibKOZ8IBJRyuNuCcEOLQ11RYhJKgHmlSwK.', '���Ժ�', NULL, 107, '[1,2]', '111@qq.com', '15601691200', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-26 07:11:35', '', '2021-01-21 02:13:53', NULL, '2024-03-26 07:11:35', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (107, 'admin107', '$2a$10$dYOOBKMO93v/.ReCqzyFg.o67Tqk.bbc2bhrpyBGkIw9aypCtr2pm', '��ܵ', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 22:59:33', '1', '2022-02-27 08:26:51', '0', 118); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (108, 'admin108', '$2a$10$y6mfvKoNYL1GXWak8nYwVOH.kCWqjactkzdoIDgiKl93WN3Ejg.Lu', '��ܵ', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:00:50', '1', '2022-02-27 08:26:53', '0', 119); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (109, 'admin109', '$2a$10$JAqvH0tEc0I7dfDVBI7zyuB4E3j.uH6daIjV53.vUS6PknFkDJkuK', '��ܵ', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:11:50', '1', '2022-02-27 08:26:56', '0', 120); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (110, 'admin110', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', 'С��', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-09-25 22:47:33', '1', '2022-02-22 00:56:14', NULL, '2022-09-25 22:47:33', '0', 121); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (111, 'test', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '�����û�', NULL, NULL, '[]', '', '', 0, '', 0, '0:0:0:0:0:0:0:1', '2023-12-30 11:42:17', '110', '2022-02-23 13:14:33', NULL, '2023-12-30 11:42:17', '0', 121); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (112, 'newobject', '$2a$04$dB0z8Q819fJWz0hbaLe6B.VfHCjYgWx6LFfET5lyz3JwcqlyCkQ4C', '�¶���', NULL, 100, '[]', '', '15601691235', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-16 23:11:38', '1', '2022-02-23 19:08:03', NULL, '2024-03-16 23:11:38', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (113, 'aoteman', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '���', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-03-19 18:38:51', '1', '2022-03-07 21:37:58', NULL, '2022-03-19 18:38:51', '0', 122); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (114, 'hrmgr', '$2a$10$TR4eybBioGRhBmDBWkqWLO6NIh3mzYa8KBKDDB5woiGYFVlRAi.fu', 'hr С���', NULL, NULL, '[5]', '', '15601691236', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-24 22:21:05', '1', '2022-03-19 21:50:58', NULL, '2024-03-24 22:21:05', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (115, 'aotemane', '$2a$04$GcyP0Vyzb2F2Yni5PuIK9ueGxM0tkZGMtDwVRwrNbtMvorzbpNsV2', '����', '11222', 102, '[1,2]', '7648@qq.com', '15601691229', 2, '', 0, '', NULL, '1', '2022-04-30 02:55:43', '1', '2024-04-04 09:37:14', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (117, 'admin123', '$2a$10$WI8Gg/lpZQIrOEZMHqka7OdFaD4Nx.B/qY8ZGTTUKrOJwaHFqibaC', '���Ժ�', '1111', 100, '[2]', '', '15601691234', 1, '', 0, '', NULL, '1', '2022-07-09 17:40:26', '1', '2022-07-09 17:40:26', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (118, 'goudan', '$2a$04$OB1SuphCdiLVRpiYRKeqH.8NYS7UIp5vmIv1W7U4w6toiFeOAATVK', '����', NULL, 103, '[1]', '', '15601691239', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-17 09:10:27', '1', '2022-07-09 17:44:43', '1', '2024-04-04 09:48:05', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (131, 'hh', '$2a$04$jyH9h6.gaw8mpOjPfHIpx.8as2Rzfcmdlj5rlJFwgCw4rsv/MTb2K', '�Ǻ�', NULL, 100, '[]', '777@qq.com', '15601882312', 1, '', 0, '', NULL, '1', '2024-04-27 08:45:56', '1', '2024-04-27 08:45:56', '0', 1); +COMMIT; +SET IDENTITY_INSERT system_users OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for win_demo01_contact +-- ---------------------------- +CREATE TABLE win_demo01_contact +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(100) DEFAULT '' NULL, + sex smallint NOT NULL, + birthday datetime NOT NULL, + description varchar(255) NOT NULL, + avatar varchar(512) DEFAULT NULL NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN win_demo01_contact.id IS '���'; +COMMENT ON COLUMN win_demo01_contact.name IS '����'; +COMMENT ON COLUMN win_demo01_contact.sex IS '�Ա�'; +COMMENT ON COLUMN win_demo01_contact.birthday IS '������'; +COMMENT ON COLUMN win_demo01_contact.description IS '���'; +COMMENT ON COLUMN win_demo01_contact.avatar IS 'ͷ��'; +COMMENT ON COLUMN win_demo01_contact.creator IS '������'; +COMMENT ON COLUMN win_demo01_contact.create_time IS '����ʱ��'; +COMMENT ON COLUMN win_demo01_contact.updater IS '������'; +COMMENT ON COLUMN win_demo01_contact.update_time IS '����ʱ��'; +COMMENT ON COLUMN win_demo01_contact.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN win_demo01_contact.tenant_id IS '�⻧���'; +COMMENT ON TABLE win_demo01_contact IS 'ʾ����ϵ�˱�'; + +-- ---------------------------- +-- Records of win_demo01_contact +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT win_demo01_contact ON; +INSERT INTO win_demo01_contact (id, name, sex, birthday, description, avatar, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '����', 2, '2023-11-07 00:00:00', '

    ���������ѽ

    ', 'http://127.0.0.1:48080/admin-api/infra/file/4/get/46f8fa1a37db3f3960d8910ff2fe3962ab3b2db87cf2f8ccb4dc8145b8bdf237.jpeg', '1', '2023-11-15 23:34:30', '1', '2023-11-15 23:47:39', '0', 1); +COMMIT; +SET IDENTITY_INSERT win_demo01_contact OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for win_demo02_category +-- ---------------------------- +CREATE TABLE win_demo02_category +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(100) DEFAULT '' NULL, + parent_id bigint NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN win_demo02_category.id IS '���'; +COMMENT ON COLUMN win_demo02_category.name IS '����'; +COMMENT ON COLUMN win_demo02_category.parent_id IS '�������'; +COMMENT ON COLUMN win_demo02_category.creator IS '������'; +COMMENT ON COLUMN win_demo02_category.create_time IS '����ʱ��'; +COMMENT ON COLUMN win_demo02_category.updater IS '������'; +COMMENT ON COLUMN win_demo02_category.update_time IS '����ʱ��'; +COMMENT ON COLUMN win_demo02_category.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN win_demo02_category.tenant_id IS '�⻧���'; +COMMENT ON TABLE win_demo02_category IS 'ʾ�������'; + +-- ---------------------------- +-- Records of win_demo02_category +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT win_demo02_category ON; +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '����', 0, '1', '2023-11-15 23:34:30', '1', '2023-11-16 20:24:23', '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '����', 0, '1', '2023-11-16 20:24:00', '1', '2023-11-16 20:24:15', '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, '�ֹ�', 0, '1', '2023-11-16 20:24:32', '1', '2023-11-16 20:24:32', '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, 'С����', 2, '1', '2023-11-16 20:24:39', '1', '2023-11-16 20:24:39', '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, '����', 2, '1', '2023-11-16 20:24:46', '1', '2023-11-16 20:24:46', '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, '11', 3, '1', '2023-11-24 19:29:34', '1', '2023-11-24 19:29:34', '0', 1); +COMMIT; +SET IDENTITY_INSERT win_demo02_category OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for win_demo03_course +-- ---------------------------- +CREATE TABLE win_demo03_course +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + student_id bigint NOT NULL, + name varchar(100) DEFAULT '' NULL, + score smallint NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN win_demo03_course.id IS '���'; +COMMENT ON COLUMN win_demo03_course.student_id IS 'ѧ�����'; +COMMENT ON COLUMN win_demo03_course.name IS '����'; +COMMENT ON COLUMN win_demo03_course.score IS '����'; +COMMENT ON COLUMN win_demo03_course.creator IS '������'; +COMMENT ON COLUMN win_demo03_course.create_time IS '����ʱ��'; +COMMENT ON COLUMN win_demo03_course.updater IS '������'; +COMMENT ON COLUMN win_demo03_course.update_time IS '����ʱ��'; +COMMENT ON COLUMN win_demo03_course.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN win_demo03_course.tenant_id IS '�⻧���'; +COMMENT ON TABLE win_demo03_course IS 'ѧ���γ̱�'; + +-- ---------------------------- +-- Records of win_demo03_course +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT win_demo03_course ON; +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 2, '����', 66, '1', '2023-11-16 23:21:49', '1', '2023-11-16 23:21:49', '0', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, 2, '��ѧ', 22, '1', '2023-11-16 23:21:49', '1', '2023-11-16 23:21:49', '0', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, 5, '����', 23, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:44:40', '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (7, 5, '�����', 11, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:44:40', '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (8, 5, '����', 23, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:47:09', '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, 5, '�����', 11, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:47:09', '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (10, 5, '����', 23, '1', '2023-11-16 23:22:46', '1', '2023-11-16 23:47:10', '0', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (11, 5, '�����', 11, '1', '2023-11-16 23:22:46', '1', '2023-11-16 23:47:10', '0', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (12, 2, '����', 33, '1', '2023-11-17 00:20:42', '1', '2023-11-16 16:20:45', '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (13, 9, '��ѩ', 12, '1', '2023-11-17 13:13:20', '1', '2023-11-17 13:13:20', '0', 1); +COMMIT; +SET IDENTITY_INSERT win_demo03_course OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for win_demo03_grade +-- ---------------------------- +CREATE TABLE win_demo03_grade +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + student_id bigint NOT NULL, + name varchar(100) DEFAULT '' NULL, + teacher varchar(255) NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN win_demo03_grade.id IS '���'; +COMMENT ON COLUMN win_demo03_grade.student_id IS 'ѧ�����'; +COMMENT ON COLUMN win_demo03_grade.name IS '����'; +COMMENT ON COLUMN win_demo03_grade.teacher IS '������'; +COMMENT ON COLUMN win_demo03_grade.creator IS '������'; +COMMENT ON COLUMN win_demo03_grade.create_time IS '����ʱ��'; +COMMENT ON COLUMN win_demo03_grade.updater IS '������'; +COMMENT ON COLUMN win_demo03_grade.update_time IS '����ʱ��'; +COMMENT ON COLUMN win_demo03_grade.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN win_demo03_grade.tenant_id IS '�⻧���'; +COMMENT ON TABLE win_demo03_grade IS 'ѧ���༶��'; + +-- ---------------------------- +-- Records of win_demo03_grade +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT win_demo03_grade ON; +INSERT INTO win_demo03_grade (id, student_id, name, teacher, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (7, 2, '���� 2 ��', '�ܽ���', '1', '2023-11-16 23:21:49', '1', '2023-11-16 23:21:49', '0', 1); +INSERT INTO win_demo03_grade (id, student_id, name, teacher, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (8, 5, '��Ϊ', 'ңң����', '1', '2023-11-16 23:22:46', '1', '2023-11-16 23:47:10', '0', 1); +INSERT INTO win_demo03_grade (id, student_id, name, teacher, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, 9, 'Сͼ', 'С��111', '1', '2023-11-17 13:10:23', '1', '2023-11-17 13:10:23', '0', 1); +COMMIT; +SET IDENTITY_INSERT win_demo03_grade OFF; +-- @formatter:on + +-- ---------------------------- +-- Table structure for win_demo03_student +-- ---------------------------- +CREATE TABLE win_demo03_student +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name varchar(100) DEFAULT '' NULL, + sex smallint NOT NULL, + birthday datetime NOT NULL, + description varchar(255) NOT NULL, + creator varchar(64) DEFAULT '' NULL, + create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar(64) DEFAULT '' NULL, + update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT '0' NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +); + +COMMENT ON COLUMN win_demo03_student.id IS '���'; +COMMENT ON COLUMN win_demo03_student.name IS '����'; +COMMENT ON COLUMN win_demo03_student.sex IS '�Ա�'; +COMMENT ON COLUMN win_demo03_student.birthday IS '��������'; +COMMENT ON COLUMN win_demo03_student.description IS '���'; +COMMENT ON COLUMN win_demo03_student.creator IS '������'; +COMMENT ON COLUMN win_demo03_student.create_time IS '����ʱ��'; +COMMENT ON COLUMN win_demo03_student.updater IS '������'; +COMMENT ON COLUMN win_demo03_student.update_time IS '����ʱ��'; +COMMENT ON COLUMN win_demo03_student.deleted IS '�Ƿ�ɾ��'; +COMMENT ON COLUMN win_demo03_student.tenant_id IS '�⻧���'; +COMMENT ON TABLE win_demo03_student IS 'ѧ����'; + +-- ---------------------------- +-- Records of win_demo03_student +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT win_demo03_student ON; +INSERT INTO win_demo03_student (id, name, sex, birthday, description, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 'С��', 1, '2023-11-16 00:00:00', '

    ����

    ', '1', '2023-11-16 23:21:49', '1', '2023-11-17 16:49:06', '0', 1); +INSERT INTO win_demo03_student (id, name, sex, birthday, description, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, '���', 2, '2023-11-13 00:00:00', '

    ���ڽ�������?

    ', '1', '2023-11-16 23:22:46', '1', '2023-11-17 16:49:07', '0', 1); +INSERT INTO win_demo03_student (id, name, sex, birthday, description, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, '��', 1, '2023-11-07 00:00:00', '

    ������

    ', '1', '2023-11-17 00:04:47', '1', '2023-11-17 16:49:08', '0', 1); +COMMIT; +SET IDENTITY_INSERT win_demo03_student OFF; +-- @formatter:on + diff --git a/sql/mysql/ruoyi-vue-pro.sql b/sql/mysql/ruoyi-vue-pro.sql new file mode 100644 index 0000000..bb28d6d --- /dev/null +++ b/sql/mysql/ruoyi-vue-pro.sql @@ -0,0 +1,3913 @@ +/* + Navicat Premium Data Transfer + + Source Server : 127.0.0.1 MySQL + Source Server Type : MySQL + Source Server Version : 80200 (8.2.0) + Source Host : 127.0.0.1:3306 + Source Schema : ruoyi-vue-pro + + Target Server Type : MySQL + Target Server Version : 80200 (8.2.0) + File Encoding : 65001 + + Date: 30/04/2024 09:54:18 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for QRTZ_BLOB_TRIGGERS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_BLOB_TRIGGERS`; +CREATE TABLE `QRTZ_BLOB_TRIGGERS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `BLOB_DATA` blob NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + INDEX `SCHED_NAME`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE, + CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; + +-- ---------------------------- +-- Records of QRTZ_BLOB_TRIGGERS +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for QRTZ_CALENDARS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_CALENDARS`; +CREATE TABLE `QRTZ_CALENDARS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `CALENDAR` blob NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; + +-- ---------------------------- +-- Records of QRTZ_CALENDARS +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for QRTZ_CRON_TRIGGERS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_CRON_TRIGGERS`; +CREATE TABLE `QRTZ_CRON_TRIGGERS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `CRON_EXPRESSION` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TIME_ZONE_ID` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; + +-- ---------------------------- +-- Records of QRTZ_CRON_TRIGGERS +-- ---------------------------- +BEGIN; +INSERT INTO `QRTZ_CRON_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `CRON_EXPRESSION`, `TIME_ZONE_ID`) VALUES ('schedulerName', 'accessLogCleanJob', 'DEFAULT', '0 0 0 * * ?', 'Asia/Shanghai'); +INSERT INTO `QRTZ_CRON_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `CRON_EXPRESSION`, `TIME_ZONE_ID`) VALUES ('schedulerName', 'brokerageRecordUnfreezeJob', 'DEFAULT', '0 * * * * ?', 'Asia/Shanghai'); +INSERT INTO `QRTZ_CRON_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `CRON_EXPRESSION`, `TIME_ZONE_ID`) VALUES ('schedulerName', 'errorLogCleanJob', 'DEFAULT', '0 0 0 * * ?', 'Asia/Shanghai'); +INSERT INTO `QRTZ_CRON_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `CRON_EXPRESSION`, `TIME_ZONE_ID`) VALUES ('schedulerName', 'jobLogCleanJob', 'DEFAULT', '0 0 0 * * ?', 'Asia/Shanghai'); +INSERT INTO `QRTZ_CRON_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `CRON_EXPRESSION`, `TIME_ZONE_ID`) VALUES ('schedulerName', 'payNotifyJob', 'DEFAULT', '* * * * * ?', 'Asia/Shanghai'); +INSERT INTO `QRTZ_CRON_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `CRON_EXPRESSION`, `TIME_ZONE_ID`) VALUES ('schedulerName', 'payOrderExpireJob', 'DEFAULT', '0 0/1 * * * ?', 'Asia/Shanghai'); +INSERT INTO `QRTZ_CRON_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `CRON_EXPRESSION`, `TIME_ZONE_ID`) VALUES ('schedulerName', 'payOrderSyncJob', 'DEFAULT', '0 0/1 * * * ?', 'Asia/Shanghai'); +INSERT INTO `QRTZ_CRON_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `CRON_EXPRESSION`, `TIME_ZONE_ID`) VALUES ('schedulerName', 'payRefundSyncJob', 'DEFAULT', '0 0/1 * * * ?', 'Asia/Shanghai'); +INSERT INTO `QRTZ_CRON_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `CRON_EXPRESSION`, `TIME_ZONE_ID`) VALUES ('schedulerName', 'tradeOrderAutoCancelJob', 'DEFAULT', '0 * * * * ?', 'Asia/Shanghai'); +INSERT INTO `QRTZ_CRON_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `CRON_EXPRESSION`, `TIME_ZONE_ID`) VALUES ('schedulerName', 'tradeOrderAutoCommentJob', 'DEFAULT', '0 * * * * ?', 'Asia/Shanghai'); +INSERT INTO `QRTZ_CRON_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `CRON_EXPRESSION`, `TIME_ZONE_ID`) VALUES ('schedulerName', 'tradeOrderAutoReceiveJob', 'DEFAULT', '0 * * * * ?', 'Asia/Shanghai'); +COMMIT; + +-- ---------------------------- +-- Table structure for QRTZ_FIRED_TRIGGERS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_FIRED_TRIGGERS`; +CREATE TABLE `QRTZ_FIRED_TRIGGERS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `ENTRY_ID` varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `FIRED_TIME` bigint NOT NULL, + `SCHED_TIME` bigint NOT NULL, + `PRIORITY` int NOT NULL, + `STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`) USING BTREE, + INDEX `IDX_QRTZ_FT_TRIG_INST_NAME`(`SCHED_NAME` ASC, `INSTANCE_NAME` ASC) USING BTREE, + INDEX `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY`(`SCHED_NAME` ASC, `INSTANCE_NAME` ASC, `REQUESTS_RECOVERY` ASC) USING BTREE, + INDEX `IDX_QRTZ_FT_J_G`(`SCHED_NAME` ASC, `JOB_NAME` ASC, `JOB_GROUP` ASC) USING BTREE, + INDEX `IDX_QRTZ_FT_JG`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE, + INDEX `IDX_QRTZ_FT_T_G`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE, + INDEX `IDX_QRTZ_FT_TG`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; + +-- ---------------------------- +-- Records of QRTZ_FIRED_TRIGGERS +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for QRTZ_JOB_DETAILS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_JOB_DETAILS`; +CREATE TABLE `QRTZ_JOB_DETAILS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `IS_DURABLE` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `JOB_DATA` blob NULL, + PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_J_REQ_RECOVERY`(`SCHED_NAME` ASC, `REQUESTS_RECOVERY` ASC) USING BTREE, + INDEX `IDX_QRTZ_J_GRP`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; + +-- ---------------------------- +-- Records of QRTZ_JOB_DETAILS +-- ---------------------------- +BEGIN; +INSERT INTO `QRTZ_JOB_DETAILS` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `JOB_CLASS_NAME`, `IS_DURABLE`, `IS_NONCONCURRENT`, `IS_UPDATE_DATA`, `REQUESTS_RECOVERY`, `JOB_DATA`) VALUES ('schedulerName', 'accessLogCleanJob', 'DEFAULT', NULL, 'com.win.framework.quartz.core.handler.JobHandlerInvoker', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000027400064A4F425F49447372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B020000787000000000000000197400104A4F425F48414E444C45525F4E414D457400116163636573734C6F67436C65616E4A6F627800); +INSERT INTO `QRTZ_JOB_DETAILS` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `JOB_CLASS_NAME`, `IS_DURABLE`, `IS_NONCONCURRENT`, `IS_UPDATE_DATA`, `REQUESTS_RECOVERY`, `JOB_DATA`) VALUES ('schedulerName', 'brokerageRecordUnfreezeJob', 'DEFAULT', NULL, 'com.win.framework.quartz.core.handler.JobHandlerInvoker', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000027400064A4F425F49447372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B020000787000000000000000187400104A4F425F48414E444C45525F4E414D4574001A62726F6B65726167655265636F7264556E667265657A654A6F627800); +INSERT INTO `QRTZ_JOB_DETAILS` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `JOB_CLASS_NAME`, `IS_DURABLE`, `IS_NONCONCURRENT`, `IS_UPDATE_DATA`, `REQUESTS_RECOVERY`, `JOB_DATA`) VALUES ('schedulerName', 'errorLogCleanJob', 'DEFAULT', NULL, 'com.win.framework.quartz.core.handler.JobHandlerInvoker', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000027400064A4F425F49447372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000000000001A7400104A4F425F48414E444C45525F4E414D457400106572726F724C6F67436C65616E4A6F627800); +INSERT INTO `QRTZ_JOB_DETAILS` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `JOB_CLASS_NAME`, `IS_DURABLE`, `IS_NONCONCURRENT`, `IS_UPDATE_DATA`, `REQUESTS_RECOVERY`, `JOB_DATA`) VALUES ('schedulerName', 'jobLogCleanJob', 'DEFAULT', NULL, 'com.win.framework.quartz.core.handler.JobHandlerInvoker', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000027400064A4F425F49447372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000000000001B7400104A4F425F48414E444C45525F4E414D4574000E6A6F624C6F67436C65616E4A6F627800); +INSERT INTO `QRTZ_JOB_DETAILS` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `JOB_CLASS_NAME`, `IS_DURABLE`, `IS_NONCONCURRENT`, `IS_UPDATE_DATA`, `REQUESTS_RECOVERY`, `JOB_DATA`) VALUES ('schedulerName', 'payNotifyJob', 'DEFAULT', NULL, 'com.win.framework.quartz.core.handler.JobHandlerInvoker', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000027400064A4F425F49447372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B020000787000000000000000057400104A4F425F48414E444C45525F4E414D4574000C7061794E6F746966794A6F627800); +INSERT INTO `QRTZ_JOB_DETAILS` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `JOB_CLASS_NAME`, `IS_DURABLE`, `IS_NONCONCURRENT`, `IS_UPDATE_DATA`, `REQUESTS_RECOVERY`, `JOB_DATA`) VALUES ('schedulerName', 'payOrderExpireJob', 'DEFAULT', NULL, 'com.win.framework.quartz.core.handler.JobHandlerInvoker', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000027400064A4F425F49447372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B020000787000000000000000127400104A4F425F48414E444C45525F4E414D457400117061794F726465724578706972654A6F627800); +INSERT INTO `QRTZ_JOB_DETAILS` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `JOB_CLASS_NAME`, `IS_DURABLE`, `IS_NONCONCURRENT`, `IS_UPDATE_DATA`, `REQUESTS_RECOVERY`, `JOB_DATA`) VALUES ('schedulerName', 'payOrderSyncJob', 'DEFAULT', NULL, 'com.win.framework.quartz.core.handler.JobHandlerInvoker', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000027400064A4F425F49447372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B020000787000000000000000117400104A4F425F48414E444C45525F4E414D4574000F7061794F7264657253796E634A6F627800); +INSERT INTO `QRTZ_JOB_DETAILS` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `JOB_CLASS_NAME`, `IS_DURABLE`, `IS_NONCONCURRENT`, `IS_UPDATE_DATA`, `REQUESTS_RECOVERY`, `JOB_DATA`) VALUES ('schedulerName', 'payRefundSyncJob', 'DEFAULT', NULL, 'com.win.framework.quartz.core.handler.JobHandlerInvoker', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000027400064A4F425F49447372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B020000787000000000000000137400104A4F425F48414E444C45525F4E414D45740010706179526566756E6453796E634A6F627800); +INSERT INTO `QRTZ_JOB_DETAILS` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `JOB_CLASS_NAME`, `IS_DURABLE`, `IS_NONCONCURRENT`, `IS_UPDATE_DATA`, `REQUESTS_RECOVERY`, `JOB_DATA`) VALUES ('schedulerName', 'tradeOrderAutoCancelJob', 'DEFAULT', NULL, 'com.win.framework.quartz.core.handler.JobHandlerInvoker', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000027400064A4F425F49447372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B020000787000000000000000157400104A4F425F48414E444C45525F4E414D4574001774726164654F726465724175746F43616E63656C4A6F627800); +INSERT INTO `QRTZ_JOB_DETAILS` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `JOB_CLASS_NAME`, `IS_DURABLE`, `IS_NONCONCURRENT`, `IS_UPDATE_DATA`, `REQUESTS_RECOVERY`, `JOB_DATA`) VALUES ('schedulerName', 'tradeOrderAutoCommentJob', 'DEFAULT', NULL, 'com.win.framework.quartz.core.handler.JobHandlerInvoker', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000027400064A4F425F49447372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B020000787000000000000000177400104A4F425F48414E444C45525F4E414D4574001874726164654F726465724175746F436F6D6D656E744A6F627800); +INSERT INTO `QRTZ_JOB_DETAILS` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `JOB_CLASS_NAME`, `IS_DURABLE`, `IS_NONCONCURRENT`, `IS_UPDATE_DATA`, `REQUESTS_RECOVERY`, `JOB_DATA`) VALUES ('schedulerName', 'tradeOrderAutoReceiveJob', 'DEFAULT', NULL, 'com.win.framework.quartz.core.handler.JobHandlerInvoker', '0', '1', '1', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000027400064A4F425F49447372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B020000787000000000000000167400104A4F425F48414E444C45525F4E414D4574001874726164654F726465724175746F526563656976654A6F627800); +COMMIT; + +-- ---------------------------- +-- Table structure for QRTZ_LOCKS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_LOCKS`; +CREATE TABLE `QRTZ_LOCKS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `LOCK_NAME` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `LOCK_NAME`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; + +-- ---------------------------- +-- Records of QRTZ_LOCKS +-- ---------------------------- +BEGIN; +INSERT INTO `QRTZ_LOCKS` (`SCHED_NAME`, `LOCK_NAME`) VALUES ('schedulerName', 'STATE_ACCESS'); +INSERT INTO `QRTZ_LOCKS` (`SCHED_NAME`, `LOCK_NAME`) VALUES ('schedulerName', 'TRIGGER_ACCESS'); +COMMIT; + +-- ---------------------------- +-- Table structure for QRTZ_PAUSED_TRIGGER_GRPS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_PAUSED_TRIGGER_GRPS`; +CREATE TABLE `QRTZ_PAUSED_TRIGGER_GRPS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; + +-- ---------------------------- +-- Records of QRTZ_PAUSED_TRIGGER_GRPS +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for QRTZ_SCHEDULER_STATE +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_SCHEDULER_STATE`; +CREATE TABLE `QRTZ_SCHEDULER_STATE` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `LAST_CHECKIN_TIME` bigint NOT NULL, + `CHECKIN_INTERVAL` bigint NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; + +-- ---------------------------- +-- Records of QRTZ_SCHEDULER_STATE +-- ---------------------------- +BEGIN; +INSERT INTO `QRTZ_SCHEDULER_STATE` (`SCHED_NAME`, `INSTANCE_NAME`, `LAST_CHECKIN_TIME`, `CHECKIN_INTERVAL`) VALUES ('schedulerName', 'MacBook-Pro.local1713489703551', 1713742509534, 15000); +COMMIT; + +-- ---------------------------- +-- Table structure for QRTZ_SIMPLE_TRIGGERS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_SIMPLE_TRIGGERS`; +CREATE TABLE `QRTZ_SIMPLE_TRIGGERS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `REPEAT_COUNT` bigint NOT NULL, + `REPEAT_INTERVAL` bigint NOT NULL, + `TIMES_TRIGGERED` bigint NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; + +-- ---------------------------- +-- Records of QRTZ_SIMPLE_TRIGGERS +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for QRTZ_SIMPROP_TRIGGERS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_SIMPROP_TRIGGERS`; +CREATE TABLE `QRTZ_SIMPROP_TRIGGERS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `STR_PROP_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `STR_PROP_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `STR_PROP_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `INT_PROP_1` int NULL DEFAULT NULL, + `INT_PROP_2` int NULL DEFAULT NULL, + `LONG_PROP_1` bigint NULL DEFAULT NULL, + `LONG_PROP_2` bigint NULL DEFAULT NULL, + `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL, + `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL, + `BOOL_PROP_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `BOOL_PROP_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; + +-- ---------------------------- +-- Records of QRTZ_SIMPROP_TRIGGERS +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for QRTZ_TRIGGERS +-- ---------------------------- +DROP TABLE IF EXISTS `QRTZ_TRIGGERS`; +CREATE TABLE `QRTZ_TRIGGERS` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `NEXT_FIRE_TIME` bigint NULL DEFAULT NULL, + `PREV_FIRE_TIME` bigint NULL DEFAULT NULL, + `PRIORITY` int NULL DEFAULT NULL, + `TRIGGER_STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `TRIGGER_TYPE` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `START_TIME` bigint NOT NULL, + `END_TIME` bigint NULL DEFAULT NULL, + `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `MISFIRE_INSTR` smallint NULL DEFAULT NULL, + `JOB_DATA` blob NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + INDEX `IDX_QRTZ_T_J`(`SCHED_NAME` ASC, `JOB_NAME` ASC, `JOB_GROUP` ASC) USING BTREE, + INDEX `IDX_QRTZ_T_JG`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE, + INDEX `IDX_QRTZ_T_C`(`SCHED_NAME` ASC, `CALENDAR_NAME` ASC) USING BTREE, + INDEX `IDX_QRTZ_T_G`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE, + INDEX `IDX_QRTZ_T_STATE`(`SCHED_NAME` ASC, `TRIGGER_STATE` ASC) USING BTREE, + INDEX `IDX_QRTZ_T_N_STATE`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE, + INDEX `IDX_QRTZ_T_N_G_STATE`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE, + INDEX `IDX_QRTZ_T_NEXT_FIRE_TIME`(`SCHED_NAME` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_ST`(`SCHED_NAME` ASC, `TRIGGER_STATE` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_MISFIRE`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC, `TRIGGER_STATE` ASC) USING BTREE, + INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE, + CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `QRTZ_JOB_DETAILS` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; + +-- ---------------------------- +-- Records of QRTZ_TRIGGERS +-- ---------------------------- +BEGIN; +INSERT INTO `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `NEXT_FIRE_TIME`, `PREV_FIRE_TIME`, `PRIORITY`, `TRIGGER_STATE`, `TRIGGER_TYPE`, `START_TIME`, `END_TIME`, `CALENDAR_NAME`, `MISFIRE_INSTR`, `JOB_DATA`) VALUES ('schedulerName', 'accessLogCleanJob', 'DEFAULT', 'accessLogCleanJob', 'DEFAULT', NULL, 1696348800000, -1, 5, 'PAUSED', 'CRON', 1696301981000, 0, NULL, 0, 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000037400114A4F425F48414E444C45525F504152414D7400007400124A4F425F52455452595F494E54455256414C737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000074000F4A4F425F52455452595F434F554E547371007E000A000000037800); +INSERT INTO `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `NEXT_FIRE_TIME`, `PREV_FIRE_TIME`, `PRIORITY`, `TRIGGER_STATE`, `TRIGGER_TYPE`, `START_TIME`, `END_TIME`, `CALENDAR_NAME`, `MISFIRE_INSTR`, `JOB_DATA`) VALUES ('schedulerName', 'brokerageRecordUnfreezeJob', 'DEFAULT', 'brokerageRecordUnfreezeJob', 'DEFAULT', NULL, 1695909720000, -1, 5, 'PAUSED', 'CRON', 1695909706000, 0, NULL, 0, 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000037400114A4F425F48414E444C45525F504152414D7400007400124A4F425F52455452595F494E54455256414C737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000074000F4A4F425F52455452595F434F554E547371007E000A000000037800); +INSERT INTO `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `NEXT_FIRE_TIME`, `PREV_FIRE_TIME`, `PRIORITY`, `TRIGGER_STATE`, `TRIGGER_TYPE`, `START_TIME`, `END_TIME`, `CALENDAR_NAME`, `MISFIRE_INSTR`, `JOB_DATA`) VALUES ('schedulerName', 'errorLogCleanJob', 'DEFAULT', 'errorLogCleanJob', 'DEFAULT', NULL, 1696348800000, -1, 5, 'PAUSED', 'CRON', 1696302043000, 0, NULL, 0, 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000037400114A4F425F48414E444C45525F504152414D7400007400124A4F425F52455452595F494E54455256414C737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000074000F4A4F425F52455452595F434F554E547371007E000A000000037800); +INSERT INTO `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `NEXT_FIRE_TIME`, `PREV_FIRE_TIME`, `PRIORITY`, `TRIGGER_STATE`, `TRIGGER_TYPE`, `START_TIME`, `END_TIME`, `CALENDAR_NAME`, `MISFIRE_INSTR`, `JOB_DATA`) VALUES ('schedulerName', 'jobLogCleanJob', 'DEFAULT', 'jobLogCleanJob', 'DEFAULT', NULL, 1696348800000, -1, 5, 'PAUSED', 'CRON', 1696302092000, 0, NULL, 0, 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000037400114A4F425F48414E444C45525F504152414D7400007400124A4F425F52455452595F494E54455256414C737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000074000F4A4F425F52455452595F434F554E547371007E000A000000037800); +INSERT INTO `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `NEXT_FIRE_TIME`, `PREV_FIRE_TIME`, `PRIORITY`, `TRIGGER_STATE`, `TRIGGER_TYPE`, `START_TIME`, `END_TIME`, `CALENDAR_NAME`, `MISFIRE_INSTR`, `JOB_DATA`) VALUES ('schedulerName', 'payNotifyJob', 'DEFAULT', 'payNotifyJob', 'DEFAULT', NULL, 1688907102000, 1688907101000, 5, 'PAUSED', 'CRON', 1635294882000, 0, NULL, 0, 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000037400114A4F425F48414E444C45525F504152414D707400124A4F425F52455452595F494E54455256414C737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000074000F4A4F425F52455452595F434F554E5471007E000B7800); +INSERT INTO `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `NEXT_FIRE_TIME`, `PREV_FIRE_TIME`, `PRIORITY`, `TRIGGER_STATE`, `TRIGGER_TYPE`, `START_TIME`, `END_TIME`, `CALENDAR_NAME`, `MISFIRE_INSTR`, `JOB_DATA`) VALUES ('schedulerName', 'payOrderExpireJob', 'DEFAULT', 'payOrderExpireJob', 'DEFAULT', NULL, 1690011600000, -1, 5, 'PAUSED', 'CRON', 1690011553000, 0, NULL, 0, 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000037400114A4F425F48414E444C45525F504152414D707400124A4F425F52455452595F494E54455256414C737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000074000F4A4F425F52455452595F434F554E5471007E000B7800); +INSERT INTO `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `NEXT_FIRE_TIME`, `PREV_FIRE_TIME`, `PRIORITY`, `TRIGGER_STATE`, `TRIGGER_TYPE`, `START_TIME`, `END_TIME`, `CALENDAR_NAME`, `MISFIRE_INSTR`, `JOB_DATA`) VALUES ('schedulerName', 'payOrderSyncJob', 'DEFAULT', 'payOrderSyncJob', 'DEFAULT', NULL, 1690011600000, 1690011540000, 5, 'PAUSED', 'CRON', 1690007785000, 0, NULL, 0, 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000037400114A4F425F48414E444C45525F504152414D707400124A4F425F52455452595F494E54455256414C737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000074000F4A4F425F52455452595F434F554E5471007E000B7800); +INSERT INTO `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `NEXT_FIRE_TIME`, `PREV_FIRE_TIME`, `PRIORITY`, `TRIGGER_STATE`, `TRIGGER_TYPE`, `START_TIME`, `END_TIME`, `CALENDAR_NAME`, `MISFIRE_INSTR`, `JOB_DATA`) VALUES ('schedulerName', 'payRefundSyncJob', 'DEFAULT', 'payRefundSyncJob', 'DEFAULT', NULL, 1690117560000, 1690117500000, 5, 'PAUSED', 'CRON', 1690117424000, 0, NULL, 0, 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000037400114A4F425F48414E444C45525F504152414D707400124A4F425F52455452595F494E54455256414C737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000074000F4A4F425F52455452595F434F554E5471007E000B7800); +INSERT INTO `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `NEXT_FIRE_TIME`, `PREV_FIRE_TIME`, `PRIORITY`, `TRIGGER_STATE`, `TRIGGER_TYPE`, `START_TIME`, `END_TIME`, `CALENDAR_NAME`, `MISFIRE_INSTR`, `JOB_DATA`) VALUES ('schedulerName', 'tradeOrderAutoCancelJob', 'DEFAULT', 'tradeOrderAutoCancelJob', 'DEFAULT', NULL, 1695727440000, 1695727380000, 5, 'PAUSED', 'CRON', 1695656605000, 0, NULL, 0, 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000037400114A4F425F48414E444C45525F504152414D7400007400124A4F425F52455452595F494E54455256414C737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000074000F4A4F425F52455452595F434F554E547371007E000A000000037800); +INSERT INTO `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `NEXT_FIRE_TIME`, `PREV_FIRE_TIME`, `PRIORITY`, `TRIGGER_STATE`, `TRIGGER_TYPE`, `START_TIME`, `END_TIME`, `CALENDAR_NAME`, `MISFIRE_INSTR`, `JOB_DATA`) VALUES ('schedulerName', 'tradeOrderAutoCommentJob', 'DEFAULT', 'tradeOrderAutoCommentJob', 'DEFAULT', NULL, 1695783840000, 1695783780000, 5, 'PAUSED', 'CRON', 1695742709000, 0, NULL, 0, 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000037400114A4F425F48414E444C45525F504152414D7400007400124A4F425F52455452595F494E54455256414C737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000074000F4A4F425F52455452595F434F554E547371007E000A000000037800); +INSERT INTO `QRTZ_TRIGGERS` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `NEXT_FIRE_TIME`, `PREV_FIRE_TIME`, `PRIORITY`, `TRIGGER_STATE`, `TRIGGER_TYPE`, `START_TIME`, `END_TIME`, `CALENDAR_NAME`, `MISFIRE_INSTR`, `JOB_DATA`) VALUES ('schedulerName', 'tradeOrderAutoReceiveJob', 'DEFAULT', 'tradeOrderAutoReceiveJob', 'DEFAULT', NULL, 1695742740000, 1695742680000, 5, 'PAUSED', 'CRON', 1695727433000, 0, NULL, 0, 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C770800000010000000037400114A4F425F48414E444C45525F504152414D7400007400124A4F425F52455452595F494E54455256414C737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000074000F4A4F425F52455452595F434F554E547371007E000A000000037800); +COMMIT; + +-- ---------------------------- +-- Table structure for infra_api_access_log +-- ---------------------------- +DROP TABLE IF EXISTS `infra_api_access_log`; +CREATE TABLE `infra_api_access_log` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志主键', + `trace_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '链路追踪编号', + `user_id` bigint NOT NULL DEFAULT 0 COMMENT '用户编号', + `user_type` tinyint NOT NULL DEFAULT 0 COMMENT '用户类型', + `application_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用名', + `request_method` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '请求方法名', + `request_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '请求地址', + `request_params` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '请求参数', + `response_body` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '响应结果', + `user_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户 IP', + `user_agent` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '浏览器 UA', + `operate_module` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '操作模块', + `operate_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '操作名', + `operate_type` tinyint NULL DEFAULT 0 COMMENT '操作分类', + `begin_time` datetime NOT NULL COMMENT '开始请求时间', + `end_time` datetime NOT NULL COMMENT '结束请求时间', + `duration` int NOT NULL COMMENT '执行时长', + `result_code` int NOT NULL DEFAULT 0 COMMENT '结果码', + `result_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '结果提示', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_create_time`(`create_time` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 35934 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'API 访问日志表'; + +-- ---------------------------- +-- Records of infra_api_access_log +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for infra_api_error_log +-- ---------------------------- +DROP TABLE IF EXISTS `infra_api_error_log`; +CREATE TABLE `infra_api_error_log` ( + `id` int NOT NULL AUTO_INCREMENT COMMENT '编号', + `trace_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '链路追踪编号\n *\n * 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。', + `user_id` int NOT NULL DEFAULT 0 COMMENT '用户编号', + `user_type` tinyint NOT NULL DEFAULT 0 COMMENT '用户类型', + `application_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用名\n *\n * 目前读取 spring.application.name', + `request_method` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求方法名', + `request_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求地址', + `request_params` varchar(8000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求参数', + `user_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户 IP', + `user_agent` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '浏览器 UA', + `exception_time` datetime NOT NULL COMMENT '异常发生时间', + `exception_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '异常名\n *\n * {@link Throwable#getClass()} 的类全名', + `exception_message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常导致的消息\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getMessage(Throwable)}', + `exception_root_cause_message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常导致的根消息\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getRootCauseMessage(Throwable)}', + `exception_stack_trace` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常的栈轨迹\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getServiceException(Exception)}', + `exception_class_name` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常发生的类全名\n *\n * {@link StackTraceElement#getClassName()}', + `exception_file_name` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常发生的类文件\n *\n * {@link StackTraceElement#getFileName()}', + `exception_method_name` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常发生的方法名\n *\n * {@link StackTraceElement#getMethodName()}', + `exception_line_number` int NOT NULL COMMENT '异常发生的方法所在行\n *\n * {@link StackTraceElement#getLineNumber()}', + `process_status` tinyint NOT NULL COMMENT '处理状态', + `process_time` datetime NULL DEFAULT NULL COMMENT '处理时间', + `process_user_id` int NULL DEFAULT 0 COMMENT '处理用户编号', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 16530 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '系统异常日志'; + +-- ---------------------------- +-- Records of infra_api_error_log +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for infra_codegen_column +-- ---------------------------- +DROP TABLE IF EXISTS `infra_codegen_column`; +CREATE TABLE `infra_codegen_column` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `table_id` bigint NOT NULL COMMENT '表编号', + `column_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字段名', + `data_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字段类型', + `column_comment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字段描述', + `nullable` bit(1) NOT NULL COMMENT '是否允许为空', + `primary_key` bit(1) NOT NULL COMMENT '是否主键', + `ordinal_position` int NOT NULL COMMENT '排序', + `java_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Java 属性类型', + `java_field` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Java 属性名', + `dict_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '字典类型', + `example` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '数据示例', + `create_operation` bit(1) NOT NULL COMMENT '是否为 Create 创建操作的字段', + `update_operation` bit(1) NOT NULL COMMENT '是否为 Update 更新操作的字段', + `list_operation` bit(1) NOT NULL COMMENT '是否为 List 查询操作的字段', + `list_operation_condition` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '=' COMMENT 'List 查询操作的条件类型', + `list_operation_result` bit(1) NOT NULL COMMENT '是否为 List 查询操作的返回字段', + `html_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '显示类型', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2305 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '代码生成表字段定义'; + +-- ---------------------------- +-- Records of infra_codegen_column +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for infra_codegen_table +-- ---------------------------- +DROP TABLE IF EXISTS `infra_codegen_table`; +CREATE TABLE `infra_codegen_table` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `data_source_config_id` bigint NOT NULL COMMENT '数据源配置的编号', + `scene` tinyint NOT NULL DEFAULT 1 COMMENT '生成场景', + `table_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '表名称', + `table_comment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '表描述', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `module_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模块名', + `business_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '业务名', + `class_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '类名称', + `class_comment` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '类描述', + `author` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '作者', + `template_type` tinyint NOT NULL DEFAULT 1 COMMENT '模板类型', + `front_type` tinyint NOT NULL COMMENT '前端类型', + `parent_menu_id` bigint NULL DEFAULT NULL COMMENT '父菜单编号', + `master_table_id` bigint NULL DEFAULT NULL COMMENT '主表的编号', + `sub_join_column_id` bigint NULL DEFAULT NULL COMMENT '子表关联主表的字段编号', + `sub_join_many` bit(1) NULL DEFAULT NULL COMMENT '主表与子表是否一对多', + `tree_parent_column_id` bigint NULL DEFAULT NULL COMMENT '树表的父字段编号', + `tree_name_column_id` bigint NULL DEFAULT NULL COMMENT '树表的名字字段编号', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 176 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '代码生成表定义'; + +-- ---------------------------- +-- Records of infra_codegen_table +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for infra_config +-- ---------------------------- +DROP TABLE IF EXISTS `infra_config`; +CREATE TABLE `infra_config` ( + `id` int NOT NULL AUTO_INCREMENT COMMENT '参数主键', + `category` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '参数分组', + `type` tinyint NOT NULL COMMENT '参数类型', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '参数名称', + `config_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '参数键名', + `value` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '参数键值', + `visible` bit(1) NOT NULL COMMENT '是否可见', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '参数配置表'; + +-- ---------------------------- +-- Records of infra_config +-- ---------------------------- +BEGIN; +INSERT INTO `infra_config` (`id`, `category`, `type`, `name`, `config_key`, `value`, `visible`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2, 'biz', 1, '用户管理-账号初始密码', 'sys.user.init-password', '123456', b'0', '初始化密码 123456', 'admin', '2021-01-05 17:03:48', '1', '2024-04-03 17:22:28', b'0'); +INSERT INTO `infra_config` (`id`, `category`, `type`, `name`, `config_key`, `value`, `visible`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (7, 'url', 2, 'MySQL 监控的地址', 'url.druid', '', b'1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:33:38', b'0'); +INSERT INTO `infra_config` (`id`, `category`, `type`, `name`, `config_key`, `value`, `visible`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (8, 'url', 2, 'SkyWalking 监控的地址', 'url.skywalking', '', b'1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:57:03', b'0'); +INSERT INTO `infra_config` (`id`, `category`, `type`, `name`, `config_key`, `value`, `visible`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (9, 'url', 2, 'Spring Boot Admin 监控的地址', 'url.spring-boot-admin', '', b'1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:52:07', b'0'); +INSERT INTO `infra_config` (`id`, `category`, `type`, `name`, `config_key`, `value`, `visible`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (10, 'url', 2, 'Swagger 接口文档的地址', 'url.swagger', '', b'1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:59:00', b'0'); +INSERT INTO `infra_config` (`id`, `category`, `type`, `name`, `config_key`, `value`, `visible`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (11, 'ui', 2, '腾讯地图 key', 'tencent.lbs.key', 'TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E', b'1', '腾讯地图 key', '1', '2023-06-03 19:16:27', '1', '2023-06-03 19:16:27', b'0'); +INSERT INTO `infra_config` (`id`, `category`, `type`, `name`, `config_key`, `value`, `visible`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (12, 'test2', 2, 'test3', 'test4', 'test5', b'1', 'test6', '1', '2023-12-03 09:55:16', '1', '2023-12-03 09:55:27', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for infra_data_source_config +-- ---------------------------- +DROP TABLE IF EXISTS `infra_data_source_config`; +CREATE TABLE `infra_data_source_config` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键编号', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '参数名称', + `url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '数据源连接', + `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名', + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '密码', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '数据源配置表'; + +-- ---------------------------- +-- Records of infra_data_source_config +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for infra_file +-- ---------------------------- +DROP TABLE IF EXISTS `infra_file`; +CREATE TABLE `infra_file` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '文件编号', + `config_id` bigint NULL DEFAULT NULL COMMENT '配置编号', + `name` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '文件名', + `path` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件路径', + `url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件 URL', + `type` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '文件类型', + `size` int NOT NULL COMMENT '文件大小', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1307 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '文件表'; + +-- ---------------------------- +-- Records of infra_file +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for infra_file_config +-- ---------------------------- +DROP TABLE IF EXISTS `infra_file_config`; +CREATE TABLE `infra_file_config` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `name` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '配置名', + `storage` tinyint NOT NULL COMMENT '存储器', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `master` bit(1) NOT NULL COMMENT '是否为主配置', + `config` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '存储配置', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 24 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '文件配置表'; + +-- ---------------------------- +-- Records of infra_file_config +-- ---------------------------- +BEGIN; +INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (4, '数据库', 1, '我是数据库', b'0', '{\"@class\":\"com.win.module.infra.framework.file.core.client.db.DBFileClientConfig\",\"domain\":\"http://127.0.0.1:48080\"}', '1', '2022-03-15 23:56:24', '1', '2024-02-28 22:54:07', b'0'); +INSERT INTO `infra_file_config` (`id`, `name`, `storage`, `remark`, `master`, `config`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (22, '七牛存储器', 20, '', b'1', '{\"@class\":\"com.win.module.infra.framework.file.core.client.s3.S3FileClientConfig\",\"endpoint\":\"s3.cn-south-1.qiniucs.com\",\"domain\":\"http://test.win.iocoder.cn\",\"bucket\":\"ruoyi-vue-pro\",\"accessKey\":\"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS\",\"accessSecret\":\"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY\"}', '1', '2024-01-13 22:11:12', '1', '2024-04-03 19:38:34', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for infra_file_content +-- ---------------------------- +DROP TABLE IF EXISTS `infra_file_content`; +CREATE TABLE `infra_file_content` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `config_id` bigint NOT NULL COMMENT '配置编号', + `path` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件路径', + `content` mediumblob NOT NULL COMMENT '文件内容', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 283 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '文件表'; + +-- ---------------------------- +-- Records of infra_file_content +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for infra_job +-- ---------------------------- +DROP TABLE IF EXISTS `infra_job`; +CREATE TABLE `infra_job` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务编号', + `name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务名称', + `status` tinyint NOT NULL COMMENT '任务状态', + `handler_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处理器的名字', + `handler_param` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '处理器的参数', + `cron_expression` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'CRON 表达式', + `retry_count` int NOT NULL DEFAULT 0 COMMENT '重试次数', + `retry_interval` int NOT NULL DEFAULT 0 COMMENT '重试间隔', + `monitor_timeout` int NOT NULL DEFAULT 0 COMMENT '监控超时时间', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 32 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '定时任务表'; + +-- ---------------------------- +-- Records of infra_job +-- ---------------------------- +BEGIN; +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (5, '支付通知 Job', 2, 'payNotifyJob', NULL, '* * * * * ?', 0, 0, 0, '1', '2021-10-27 08:34:42', '1', '2023-07-09 20:51:41', b'0'); +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (17, '支付订单同步 Job', 2, 'payOrderSyncJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-22 14:36:26', '1', '2023-07-22 15:39:08', b'0'); +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (18, '支付订单过期 Job', 2, 'payOrderExpireJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-22 15:36:23', '1', '2023-07-22 15:39:54', b'0'); +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (19, '退款订单的同步 Job', 2, 'payRefundSyncJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-23 21:03:44', '1', '2023-07-23 21:09:00', b'0'); +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (21, '交易订单的自动过期 Job', 2, 'tradeOrderAutoCancelJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-25 23:43:26', '1', '2023-09-26 19:23:30', b'0'); +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (22, '交易订单的自动收货 Job', 2, 'tradeOrderAutoReceiveJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 19:23:53', '1', '2023-09-26 23:38:08', b'0'); +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (23, '交易订单的自动评论 Job', 2, 'tradeOrderAutoCommentJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 23:38:29', '1', '2023-09-27 11:03:10', b'0'); +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (24, '佣金解冻 Job', 2, 'brokerageRecordUnfreezeJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-28 22:01:46', '1', '2023-09-28 22:01:56', b'0'); +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (25, '访问日志清理 Job', 2, 'accessLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 10:59:41', '1', '2023-10-03 11:01:10', b'0'); +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (26, '错误日志清理 Job', 2, 'errorLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 11:00:43', '1', '2023-10-03 11:01:12', b'0'); +INSERT INTO `infra_job` (`id`, `name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (27, '任务日志清理 Job', 2, 'jobLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 11:01:33', '1', '2023-10-03 11:01:42', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for infra_job_log +-- ---------------------------- +DROP TABLE IF EXISTS `infra_job_log`; +CREATE TABLE `infra_job_log` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志编号', + `job_id` bigint NOT NULL COMMENT '任务编号', + `handler_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处理器的名字', + `handler_param` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '处理器的参数', + `execute_index` tinyint NOT NULL DEFAULT 1 COMMENT '第几次执行', + `begin_time` datetime NOT NULL COMMENT '开始执行时间', + `end_time` datetime NULL DEFAULT NULL COMMENT '结束执行时间', + `duration` int NULL DEFAULT NULL COMMENT '执行时长', + `status` tinyint NOT NULL COMMENT '任务状态', + `result` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '结果数据', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 395 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '定时任务日志表'; + +-- ---------------------------- +-- Records of infra_job_log +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for system_dept +-- ---------------------------- +DROP TABLE IF EXISTS `system_dept`; +CREATE TABLE `system_dept` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '部门id', + `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '部门名称', + `parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父部门id', + `sort` int NOT NULL DEFAULT 0 COMMENT '显示顺序', + `leader_user_id` bigint NULL DEFAULT NULL COMMENT '负责人', + `phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '联系电话', + `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱', + `status` tinyint NOT NULL COMMENT '部门状态(0正常 1停用)', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 114 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '部门表'; + +-- ---------------------------- +-- Records of system_dept +-- ---------------------------- +BEGIN; +INSERT INTO `system_dept` (`id`, `name`, `parent_id`, `sort`, `leader_user_id`, `phone`, `email`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (100, '芋道源码', 0, 0, 1, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2023-11-14 23:30:36', b'0', 1); +INSERT INTO `system_dept` (`id`, `name`, `parent_id`, `sort`, `leader_user_id`, `phone`, `email`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (101, '深圳总公司', 100, 1, 104, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2023-12-02 09:53:35', b'0', 1); +INSERT INTO `system_dept` (`id`, `name`, `parent_id`, `sort`, `leader_user_id`, `phone`, `email`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (102, '长沙分公司', 100, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:40', b'0', 1); +INSERT INTO `system_dept` (`id`, `name`, `parent_id`, `sort`, `leader_user_id`, `phone`, `email`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (103, '研发部门', 101, 1, 104, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2024-03-24 20:56:04', b'0', 1); +INSERT INTO `system_dept` (`id`, `name`, `parent_id`, `sort`, `leader_user_id`, `phone`, `email`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (104, '市场部门', 101, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:38', b'0', 1); +INSERT INTO `system_dept` (`id`, `name`, `parent_id`, `sort`, `leader_user_id`, `phone`, `email`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (105, '测试部门', 101, 3, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2022-05-16 20:25:15', b'0', 1); +INSERT INTO `system_dept` (`id`, `name`, `parent_id`, `sort`, `leader_user_id`, `phone`, `email`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (106, '财务部门', 101, 4, 103, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '103', '2022-01-15 21:32:22', b'0', 1); +INSERT INTO `system_dept` (`id`, `name`, `parent_id`, `sort`, `leader_user_id`, `phone`, `email`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (107, '运维部门', 101, 5, 1, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2023-12-02 09:28:22', b'0', 1); +INSERT INTO `system_dept` (`id`, `name`, `parent_id`, `sort`, `leader_user_id`, `phone`, `email`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (108, '市场部门', 102, 1, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2022-02-16 08:35:45', b'0', 1); +INSERT INTO `system_dept` (`id`, `name`, `parent_id`, `sort`, `leader_user_id`, `phone`, `email`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (109, '财务部门', 102, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:29', b'0', 1); +INSERT INTO `system_dept` (`id`, `name`, `parent_id`, `sort`, `leader_user_id`, `phone`, `email`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (110, '新部门', 0, 1, NULL, NULL, NULL, 0, '110', '2022-02-23 20:46:30', '110', '2022-02-23 20:46:30', b'0', 121); +INSERT INTO `system_dept` (`id`, `name`, `parent_id`, `sort`, `leader_user_id`, `phone`, `email`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (111, '顶级部门', 0, 1, NULL, NULL, NULL, 0, '113', '2022-03-07 21:44:50', '113', '2022-03-07 21:44:50', b'0', 122); +INSERT INTO `system_dept` (`id`, `name`, `parent_id`, `sort`, `leader_user_id`, `phone`, `email`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (112, '产品部门', 101, 100, 1, NULL, NULL, 1, '1', '2023-12-02 09:45:13', '1', '2023-12-02 09:45:31', b'0', 1); +INSERT INTO `system_dept` (`id`, `name`, `parent_id`, `sort`, `leader_user_id`, `phone`, `email`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (113, '支持部门', 102, 3, 104, NULL, NULL, 1, '1', '2023-12-02 09:47:38', '1', '2023-12-02 09:47:38', b'0', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for system_dict_data +-- ---------------------------- +DROP TABLE IF EXISTS `system_dict_data`; +CREATE TABLE `system_dict_data` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '字典编码', + `sort` int NOT NULL DEFAULT 0 COMMENT '字典排序', + `label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '字典标签', + `value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '字典键值', + `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '字典类型', + `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态(0正常 1停用)', + `color_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '颜色类型', + `css_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT 'css 样式', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1537 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '字典数据表'; + +-- ---------------------------- +-- Records of system_dict_data +-- ---------------------------- +BEGIN; +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1, 1, '男', '1', 'system_user_sex', 0, 'default', 'A', '性别男', 'admin', '2021-01-05 17:03:48', '1', '2022-03-29 00:14:39', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2, 2, '女', '2', 'system_user_sex', 0, 'success', '', '性别女', 'admin', '2021-01-05 17:03:48', '1', '2023-11-15 23:30:37', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (8, 1, '正常', '1', 'infra_job_status', 0, 'success', '', '正常状态', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:33:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (9, 2, '暂停', '2', 'infra_job_status', 0, 'danger', '', '停用状态', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:33:45', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (12, 1, '系统内置', '1', 'infra_config_type', 0, 'danger', '', '参数类型 - 系统内置', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:06:02', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (13, 2, '自定义', '2', 'infra_config_type', 0, 'primary', '', '参数类型 - 自定义', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:06:07', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (14, 1, '通知', '1', 'system_notice_type', 0, 'success', '', '通知', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:05:57', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (15, 2, '公告', '2', 'system_notice_type', 0, 'info', '', '公告', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:06:01', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (16, 0, '其它', '0', 'infra_operate_type', 0, 'default', '', '其它操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:19', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (17, 1, '查询', '1', 'infra_operate_type', 0, 'info', '', '查询操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:20', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (18, 2, '新增', '2', 'infra_operate_type', 0, 'primary', '', '新增操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:21', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (19, 3, '修改', '3', 'infra_operate_type', 0, 'warning', '', '修改操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:22', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (20, 4, '删除', '4', 'infra_operate_type', 0, 'danger', '', '删除操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:23', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (22, 5, '导出', '5', 'infra_operate_type', 0, 'default', '', '导出操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:24', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (23, 6, '导入', '6', 'infra_operate_type', 0, 'default', '', '导入操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:25', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (27, 1, '开启', '0', 'common_status', 0, 'primary', '', '开启状态', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 08:00:39', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (28, 2, '关闭', '1', 'common_status', 0, 'info', '', '关闭状态', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 08:00:44', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (29, 1, '目录', '1', 'system_menu_type', 0, '', '', '目录', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:45', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (30, 2, '菜单', '2', 'system_menu_type', 0, '', '', '菜单', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:41', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (31, 3, '按钮', '3', 'system_menu_type', 0, '', '', '按钮', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:39', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (32, 1, '内置', '1', 'system_role_type', 0, 'danger', '', '内置角色', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:02:08', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (33, 2, '自定义', '2', 'system_role_type', 0, 'primary', '', '自定义角色', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:02:12', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (34, 1, '全部数据权限', '1', 'system_data_scope', 0, '', '', '全部数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:17', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (35, 2, '指定部门数据权限', '2', 'system_data_scope', 0, '', '', '指定部门数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:18', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (36, 3, '本部门数据权限', '3', 'system_data_scope', 0, '', '', '本部门数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:16', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (37, 4, '本部门及以下数据权限', '4', 'system_data_scope', 0, '', '', '本部门及以下数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:21', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (38, 5, '仅本人数据权限', '5', 'system_data_scope', 0, '', '', '仅本人数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:23', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (39, 0, '成功', '0', 'system_login_result', 0, 'success', '', '登陆结果 - 成功', '', '2021-01-18 06:17:36', '1', '2022-02-16 13:23:49', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (40, 10, '账号或密码不正确', '10', 'system_login_result', 0, 'primary', '', '登陆结果 - 账号或密码不正确', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:27', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (41, 20, '用户被禁用', '20', 'system_login_result', 0, 'warning', '', '登陆结果 - 用户被禁用', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:23:57', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (42, 30, '验证码不存在', '30', 'system_login_result', 0, 'info', '', '登陆结果 - 验证码不存在', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:07', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (43, 31, '验证码不正确', '31', 'system_login_result', 0, 'info', '', '登陆结果 - 验证码不正确', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:11', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (44, 100, '未知异常', '100', 'system_login_result', 0, 'danger', '', '登陆结果 - 未知异常', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:23', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (45, 1, '是', 'true', 'infra_boolean_string', 0, 'danger', '', 'Boolean 是否类型 - 是', '', '2021-01-19 03:20:55', '1', '2022-03-15 23:01:45', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (46, 1, '否', 'false', 'infra_boolean_string', 0, 'info', '', 'Boolean 是否类型 - 否', '', '2021-01-19 03:20:55', '1', '2022-03-15 23:09:45', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (50, 1, '单表(增删改查)', '1', 'infra_codegen_template_type', 0, '', '', NULL, '', '2021-02-05 07:09:06', '', '2022-03-10 16:33:15', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (51, 2, '树表(增删改查)', '2', 'infra_codegen_template_type', 0, '', '', NULL, '', '2021-02-05 07:14:46', '', '2022-03-10 16:33:19', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (53, 0, '初始化中', '0', 'infra_job_status', 0, 'primary', '', NULL, '', '2021-02-07 07:46:49', '1', '2022-02-16 19:33:29', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (57, 0, '运行中', '0', 'infra_job_log_status', 0, 'primary', '', 'RUNNING', '', '2021-02-08 10:04:24', '1', '2022-02-16 19:07:48', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (58, 1, '成功', '1', 'infra_job_log_status', 0, 'success', '', NULL, '', '2021-02-08 10:06:57', '1', '2022-02-16 19:07:52', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (59, 2, '失败', '2', 'infra_job_log_status', 0, 'warning', '', '失败', '', '2021-02-08 10:07:38', '1', '2022-02-16 19:07:56', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (60, 1, '会员', '1', 'user_type', 0, 'primary', '', NULL, '', '2021-02-26 00:16:27', '1', '2022-02-16 10:22:19', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (61, 2, '管理员', '2', 'user_type', 0, 'success', '', NULL, '', '2021-02-26 00:16:34', '1', '2022-02-16 10:22:22', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (62, 0, '未处理', '0', 'infra_api_error_log_process_status', 0, 'primary', '', NULL, '', '2021-02-26 07:07:19', '1', '2022-02-16 20:14:17', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (63, 1, '已处理', '1', 'infra_api_error_log_process_status', 0, 'success', '', NULL, '', '2021-02-26 07:07:26', '1', '2022-02-16 20:14:08', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (64, 2, '已忽略', '2', 'infra_api_error_log_process_status', 0, 'danger', '', NULL, '', '2021-02-26 07:07:34', '1', '2022-02-16 20:14:14', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (66, 2, '阿里云', 'ALIYUN', 'system_sms_channel_code', 0, 'primary', '', NULL, '1', '2021-04-05 01:05:26', '1', '2022-02-16 10:09:52', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (67, 1, '验证码', '1', 'system_sms_template_type', 0, 'warning', '', NULL, '1', '2021-04-05 21:50:57', '1', '2022-02-16 12:48:30', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (68, 2, '通知', '2', 'system_sms_template_type', 0, 'primary', '', NULL, '1', '2021-04-05 21:51:08', '1', '2022-02-16 12:48:27', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (69, 0, '营销', '3', 'system_sms_template_type', 0, 'danger', '', NULL, '1', '2021-04-05 21:51:15', '1', '2022-02-16 12:48:22', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (70, 0, '初始化', '0', 'system_sms_send_status', 0, 'primary', '', NULL, '1', '2021-04-11 20:18:33', '1', '2022-02-16 10:26:07', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (71, 1, '发送成功', '10', 'system_sms_send_status', 0, 'success', '', NULL, '1', '2021-04-11 20:18:43', '1', '2022-02-16 10:25:56', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (72, 2, '发送失败', '20', 'system_sms_send_status', 0, 'danger', '', NULL, '1', '2021-04-11 20:18:49', '1', '2022-02-16 10:26:03', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (73, 3, '不发送', '30', 'system_sms_send_status', 0, 'info', '', NULL, '1', '2021-04-11 20:19:44', '1', '2022-02-16 10:26:10', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (74, 0, '等待结果', '0', 'system_sms_receive_status', 0, 'primary', '', NULL, '1', '2021-04-11 20:27:43', '1', '2022-02-16 10:28:24', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (75, 1, '接收成功', '10', 'system_sms_receive_status', 0, 'success', '', NULL, '1', '2021-04-11 20:29:25', '1', '2022-02-16 10:28:28', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (76, 2, '接收失败', '20', 'system_sms_receive_status', 0, 'danger', '', NULL, '1', '2021-04-11 20:29:31', '1', '2022-02-16 10:28:32', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (77, 0, '调试(钉钉)', 'DEBUG_DING_TALK', 'system_sms_channel_code', 0, 'info', '', NULL, '1', '2021-04-13 00:20:37', '1', '2022-02-16 10:10:00', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (80, 100, '账号登录', '100', 'system_login_type', 0, 'primary', '', '账号登录', '1', '2021-10-06 00:52:02', '1', '2022-02-16 13:11:34', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (81, 101, '社交登录', '101', 'system_login_type', 0, 'info', '', '社交登录', '1', '2021-10-06 00:52:17', '1', '2022-02-16 13:11:40', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (83, 200, '主动登出', '200', 'system_login_type', 0, 'primary', '', '主动登出', '1', '2021-10-06 00:52:58', '1', '2022-02-16 13:11:49', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (85, 202, '强制登出', '202', 'system_login_type', 0, 'danger', '', '强制退出', '1', '2021-10-06 00:53:41', '1', '2022-02-16 13:11:57', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (86, 0, '病假', '1', 'bpm_oa_leave_type', 0, 'primary', '', NULL, '1', '2021-09-21 22:35:28', '1', '2022-02-16 10:00:41', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (87, 1, '事假', '2', 'bpm_oa_leave_type', 0, 'info', '', NULL, '1', '2021-09-21 22:36:11', '1', '2022-02-16 10:00:49', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (88, 2, '婚假', '3', 'bpm_oa_leave_type', 0, 'warning', '', NULL, '1', '2021-09-21 22:36:38', '1', '2022-02-16 10:00:53', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (113, 1, '微信公众号支付', 'wx_pub', 'pay_channel_code', 0, 'success', '', '微信公众号支付', '1', '2021-12-03 10:40:24', '1', '2023-07-19 20:08:47', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (114, 2, '微信小程序支付', 'wx_lite', 'pay_channel_code', 0, 'success', '', '微信小程序支付', '1', '2021-12-03 10:41:06', '1', '2023-07-19 20:08:50', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (115, 3, '微信 App 支付', 'wx_app', 'pay_channel_code', 0, 'success', '', '微信 App 支付', '1', '2021-12-03 10:41:20', '1', '2023-07-19 20:08:56', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (116, 10, '支付宝 PC 网站支付', 'alipay_pc', 'pay_channel_code', 0, 'primary', '', '支付宝 PC 网站支付', '1', '2021-12-03 10:42:09', '1', '2023-07-19 20:09:12', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (117, 11, '支付宝 Wap 网站支付', 'alipay_wap', 'pay_channel_code', 0, 'primary', '', '支付宝 Wap 网站支付', '1', '2021-12-03 10:42:26', '1', '2023-07-19 20:09:16', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (118, 12, '支付宝 App 支付', 'alipay_app', 'pay_channel_code', 0, 'primary', '', '支付宝 App 支付', '1', '2021-12-03 10:42:55', '1', '2023-07-19 20:09:20', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (119, 14, '支付宝扫码支付', 'alipay_qr', 'pay_channel_code', 0, 'primary', '', '支付宝扫码支付', '1', '2021-12-03 10:43:10', '1', '2023-07-19 20:09:28', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (120, 10, '通知成功', '10', 'pay_notify_status', 0, 'success', '', '通知成功', '1', '2021-12-03 11:02:41', '1', '2023-07-19 10:08:19', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (121, 20, '通知失败', '20', 'pay_notify_status', 0, 'danger', '', '通知失败', '1', '2021-12-03 11:02:59', '1', '2023-07-19 10:08:21', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (122, 0, '等待通知', '0', 'pay_notify_status', 0, 'info', '', '未通知', '1', '2021-12-03 11:03:10', '1', '2023-07-19 10:08:24', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (123, 10, '支付成功', '10', 'pay_order_status', 0, 'success', '', '支付成功', '1', '2021-12-03 11:18:29', '1', '2023-07-19 18:04:28', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (124, 30, '支付关闭', '30', 'pay_order_status', 0, 'info', '', '支付关闭', '1', '2021-12-03 11:18:42', '1', '2023-07-19 18:05:07', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (125, 0, '等待支付', '0', 'pay_order_status', 0, 'info', '', '未支付', '1', '2021-12-03 11:18:18', '1', '2023-07-19 18:04:15', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (600, 5, '首页', '1', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (601, 4, '秒杀活动页', '2', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (602, 3, '砍价活动页', '3', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (603, 2, '限时折扣页', '4', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (604, 1, '满减送页', '5', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1118, 0, '等待退款', '0', 'pay_refund_status', 0, 'info', '', '等待退款', '1', '2021-12-10 16:44:59', '1', '2023-07-19 10:14:39', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1119, 20, '退款失败', '20', 'pay_refund_status', 0, 'danger', '', '退款失败', '1', '2021-12-10 16:45:10', '1', '2023-07-19 10:15:10', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1124, 10, '退款成功', '10', 'pay_refund_status', 0, 'success', '', '退款成功', '1', '2021-12-10 16:46:26', '1', '2023-07-19 10:15:00', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1127, 1, '审批中', '1', 'bpm_process_instance_status', 0, 'default', '', '流程实例的状态 - 进行中', '1', '2022-01-07 23:47:22', '1', '2024-03-16 16:11:45', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1128, 2, '审批通过', '2', 'bpm_process_instance_status', 0, 'success', '', '流程实例的状态 - 已完成', '1', '2022-01-07 23:47:49', '1', '2024-03-16 16:11:54', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1129, 1, '审批中', '1', 'bpm_task_status', 0, 'primary', '', '流程实例的结果 - 处理中', '1', '2022-01-07 23:48:32', '1', '2024-03-08 22:41:37', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1130, 2, '审批通过', '2', 'bpm_task_status', 0, 'success', '', '流程实例的结果 - 通过', '1', '2022-01-07 23:48:45', '1', '2024-03-08 22:41:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1131, 3, '审批不通过', '3', 'bpm_task_status', 0, 'danger', '', '流程实例的结果 - 不通过', '1', '2022-01-07 23:48:55', '1', '2024-03-08 22:41:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1132, 4, '已取消', '4', 'bpm_task_status', 0, 'info', '', '流程实例的结果 - 撤销', '1', '2022-01-07 23:49:06', '1', '2024-03-08 22:41:39', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1133, 10, '流程表单', '10', 'bpm_model_form_type', 0, '', '', '流程的表单类型 - 流程表单', '103', '2022-01-11 23:51:30', '103', '2022-01-11 23:51:30', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1134, 20, '业务表单', '20', 'bpm_model_form_type', 0, '', '', '流程的表单类型 - 业务表单', '103', '2022-01-11 23:51:47', '103', '2022-01-11 23:51:47', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1135, 10, '角色', '10', 'bpm_task_candidate_strategy', 0, 'info', '', '任务分配规则的类型 - 角色', '103', '2022-01-12 23:21:22', '1', '2024-03-06 02:53:16', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1136, 20, '部门的成员', '20', 'bpm_task_candidate_strategy', 0, 'primary', '', '任务分配规则的类型 - 部门的成员', '103', '2022-01-12 23:21:47', '1', '2024-03-06 02:53:17', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1137, 21, '部门的负责人', '21', 'bpm_task_candidate_strategy', 0, 'primary', '', '任务分配规则的类型 - 部门的负责人', '103', '2022-01-12 23:33:36', '1', '2024-03-06 02:53:18', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1138, 30, '用户', '30', 'bpm_task_candidate_strategy', 0, 'info', '', '任务分配规则的类型 - 用户', '103', '2022-01-12 23:34:02', '1', '2024-03-06 02:53:19', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1139, 40, '用户组', '40', 'bpm_task_candidate_strategy', 0, 'warning', '', '任务分配规则的类型 - 用户组', '103', '2022-01-12 23:34:21', '1', '2024-03-06 02:53:20', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1140, 60, '流程表达式', '60', 'bpm_task_candidate_strategy', 0, 'danger', '', '任务分配规则的类型 - 流程表达式', '103', '2022-01-12 23:34:43', '1', '2024-03-06 02:53:20', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1141, 22, '岗位', '22', 'bpm_task_candidate_strategy', 0, 'success', '', '任务分配规则的类型 - 岗位', '103', '2022-01-14 18:41:55', '1', '2024-03-06 02:53:21', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1145, 1, '管理后台', '1', 'infra_codegen_scene', 0, '', '', '代码生成的场景枚举 - 管理后台', '1', '2022-02-02 13:15:06', '1', '2022-03-10 16:32:59', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1146, 2, '用户 APP', '2', 'infra_codegen_scene', 0, '', '', '代码生成的场景枚举 - 用户 APP', '1', '2022-02-02 13:15:19', '1', '2022-03-10 16:33:03', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1150, 1, '数据库', '1', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:25:28', '1', '2022-03-15 00:25:28', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1151, 10, '本地磁盘', '10', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:25:41', '1', '2022-03-15 00:25:56', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1152, 11, 'FTP 服务器', '11', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:06', '1', '2022-03-15 00:26:10', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1153, 12, 'SFTP 服务器', '12', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:22', '1', '2022-03-15 00:26:22', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1154, 20, 'S3 对象存储', '20', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:31', '1', '2022-03-15 00:26:45', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1155, 103, '短信登录', '103', 'system_login_type', 0, 'default', '', NULL, '1', '2022-05-09 23:57:58', '1', '2022-05-09 23:58:09', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1156, 1, 'password', 'password', 'system_oauth2_grant_type', 0, 'default', '', '密码模式', '1', '2022-05-12 00:22:05', '1', '2022-05-11 16:26:01', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1157, 2, 'authorization_code', 'authorization_code', 'system_oauth2_grant_type', 0, 'primary', '', '授权码模式', '1', '2022-05-12 00:22:59', '1', '2022-05-11 16:26:02', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1158, 3, 'implicit', 'implicit', 'system_oauth2_grant_type', 0, 'success', '', '简化模式', '1', '2022-05-12 00:23:40', '1', '2022-05-11 16:26:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1159, 4, 'client_credentials', 'client_credentials', 'system_oauth2_grant_type', 0, 'default', '', '客户端模式', '1', '2022-05-12 00:23:51', '1', '2022-05-11 16:26:08', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1160, 5, 'refresh_token', 'refresh_token', 'system_oauth2_grant_type', 0, 'info', '', '刷新模式', '1', '2022-05-12 00:24:02', '1', '2022-05-11 16:26:11', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1162, 1, '销售中', '1', 'product_spu_status', 0, 'success', '', '商品 SPU 状态 - 销售中', '1', '2022-10-24 21:19:47', '1', '2022-10-24 21:20:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1163, 0, '仓库中', '0', 'product_spu_status', 0, 'info', '', '商品 SPU 状态 - 仓库中', '1', '2022-10-24 21:20:54', '1', '2022-10-24 21:21:22', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1164, 0, '回收站', '-1', 'product_spu_status', 0, 'default', '', '商品 SPU 状态 - 回收站', '1', '2022-10-24 21:21:11', '1', '2022-10-24 21:21:11', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1165, 1, '满减', '1', 'promotion_discount_type', 0, 'success', '', '优惠类型 - 满减', '1', '2022-11-01 12:46:41', '1', '2022-11-01 12:50:11', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1166, 2, '折扣', '2', 'promotion_discount_type', 0, 'primary', '', '优惠类型 - 折扣', '1', '2022-11-01 12:46:51', '1', '2022-11-01 12:50:08', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1167, 1, '固定日期', '1', 'promotion_coupon_template_validity_type', 0, 'default', '', '优惠劵模板的有限期类型 - 固定日期', '1', '2022-11-02 00:07:34', '1', '2022-11-04 00:07:49', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1168, 2, '领取之后', '2', 'promotion_coupon_template_validity_type', 0, 'default', '', '优惠劵模板的有限期类型 - 领取之后', '1', '2022-11-02 00:07:54', '1', '2022-11-04 00:07:52', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1169, 1, '通用劵', '1', 'promotion_product_scope', 0, 'default', '', '营销的商品范围 - 全部商品参与', '1', '2022-11-02 00:28:22', '1', '2023-09-28 00:27:42', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1170, 2, '商品劵', '2', 'promotion_product_scope', 0, 'default', '', '营销的商品范围 - 指定商品参与', '1', '2022-11-02 00:28:34', '1', '2023-09-28 00:27:44', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1171, 1, '未使用', '1', 'promotion_coupon_status', 0, 'primary', '', '优惠劵的状态 - 已领取', '1', '2022-11-04 00:15:08', '1', '2023-10-03 12:54:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1172, 2, '已使用', '2', 'promotion_coupon_status', 0, 'success', '', '优惠劵的状态 - 已使用', '1', '2022-11-04 00:15:21', '1', '2022-11-04 19:16:08', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1173, 3, '已过期', '3', 'promotion_coupon_status', 0, 'info', '', '优惠劵的状态 - 已过期', '1', '2022-11-04 00:15:43', '1', '2022-11-04 19:16:12', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1174, 1, '直接领取', '1', 'promotion_coupon_take_type', 0, 'primary', '', '优惠劵的领取方式 - 直接领取', '1', '2022-11-04 19:13:00', '1', '2022-11-04 19:13:25', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1175, 2, '指定发放', '2', 'promotion_coupon_take_type', 0, 'success', '', '优惠劵的领取方式 - 指定发放', '1', '2022-11-04 19:13:13', '1', '2022-11-04 19:14:48', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1176, 10, '未开始', '10', 'promotion_activity_status', 0, 'primary', '', '促销活动的状态枚举 - 未开始', '1', '2022-11-04 22:54:49', '1', '2022-11-04 22:55:53', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1177, 20, '进行中', '20', 'promotion_activity_status', 0, 'success', '', '促销活动的状态枚举 - 进行中', '1', '2022-11-04 22:55:06', '1', '2022-11-04 22:55:20', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1178, 30, '已结束', '30', 'promotion_activity_status', 0, 'info', '', '促销活动的状态枚举 - 已结束', '1', '2022-11-04 22:55:41', '1', '2022-11-04 22:55:41', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1179, 40, '已关闭', '40', 'promotion_activity_status', 0, 'warning', '', '促销活动的状态枚举 - 已关闭', '1', '2022-11-04 22:56:10', '1', '2022-11-04 22:56:18', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1180, 10, '满 N 元', '10', 'promotion_condition_type', 0, 'primary', '', '营销的条件类型 - 满 N 元', '1', '2022-11-04 22:59:45', '1', '2022-11-04 22:59:45', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1181, 20, '满 N 件', '20', 'promotion_condition_type', 0, 'success', '', '营销的条件类型 - 满 N 件', '1', '2022-11-04 23:00:02', '1', '2022-11-04 23:00:02', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1182, 10, '申请售后', '10', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 申请售后', '1', '2022-11-19 20:53:33', '1', '2022-11-19 20:54:42', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1183, 20, '商品待退货', '20', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 商品待退货', '1', '2022-11-19 20:54:36', '1', '2022-11-19 20:58:58', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1184, 30, '商家待收货', '30', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 商家待收货', '1', '2022-11-19 20:56:56', '1', '2022-11-19 20:59:20', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1185, 40, '等待退款', '40', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 等待退款', '1', '2022-11-19 20:59:54', '1', '2022-11-19 21:00:01', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1186, 50, '退款成功', '50', 'trade_after_sale_status', 0, 'default', '', '交易售后状态 - 退款成功', '1', '2022-11-19 21:00:33', '1', '2022-11-19 21:00:33', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1187, 61, '买家取消', '61', 'trade_after_sale_status', 0, 'info', '', '交易售后状态 - 买家取消', '1', '2022-11-19 21:01:29', '1', '2022-11-19 21:01:29', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1188, 62, '商家拒绝', '62', 'trade_after_sale_status', 0, 'info', '', '交易售后状态 - 商家拒绝', '1', '2022-11-19 21:02:17', '1', '2022-11-19 21:02:17', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1189, 63, '商家拒收货', '63', 'trade_after_sale_status', 0, 'info', '', '交易售后状态 - 商家拒收货', '1', '2022-11-19 21:02:37', '1', '2022-11-19 21:03:07', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1190, 10, '售中退款', '10', 'trade_after_sale_type', 0, 'success', '', '交易售后的类型 - 售中退款', '1', '2022-11-19 21:05:05', '1', '2022-11-19 21:38:23', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1191, 20, '售后退款', '20', 'trade_after_sale_type', 0, 'primary', '', '交易售后的类型 - 售后退款', '1', '2022-11-19 21:05:32', '1', '2022-11-19 21:38:32', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1192, 10, '仅退款', '10', 'trade_after_sale_way', 0, 'primary', '', '交易售后的方式 - 仅退款', '1', '2022-11-19 21:39:19', '1', '2022-11-19 21:39:19', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1193, 20, '退货退款', '20', 'trade_after_sale_way', 0, 'success', '', '交易售后的方式 - 退货退款', '1', '2022-11-19 21:39:38', '1', '2022-11-19 21:39:49', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1194, 10, '微信小程序', '10', 'terminal', 0, 'default', '', '终端 - 微信小程序', '1', '2022-12-10 10:51:11', '1', '2022-12-10 10:51:57', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1195, 20, 'H5 网页', '20', 'terminal', 0, 'default', '', '终端 - H5 网页', '1', '2022-12-10 10:51:30', '1', '2022-12-10 10:51:59', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1196, 11, '微信公众号', '11', 'terminal', 0, 'default', '', '终端 - 微信公众号', '1', '2022-12-10 10:54:16', '1', '2022-12-10 10:52:01', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1197, 31, '苹果 App', '31', 'terminal', 0, 'default', '', '终端 - 苹果 App', '1', '2022-12-10 10:54:42', '1', '2022-12-10 10:52:18', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1198, 32, '安卓 App', '32', 'terminal', 0, 'default', '', '终端 - 安卓 App', '1', '2022-12-10 10:55:02', '1', '2022-12-10 10:59:17', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1199, 0, '普通订单', '0', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 普通订单', '1', '2022-12-10 16:34:14', '1', '2022-12-10 16:34:14', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1200, 1, '秒杀订单', '1', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 秒杀订单', '1', '2022-12-10 16:34:26', '1', '2022-12-10 16:34:26', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1201, 2, '拼团订单', '2', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 拼团订单', '1', '2022-12-10 16:34:36', '1', '2022-12-10 16:34:36', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1202, 3, '砍价订单', '3', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 砍价订单', '1', '2022-12-10 16:34:48', '1', '2022-12-10 16:34:48', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1203, 0, '待支付', '0', 'trade_order_status', 0, 'default', '', '交易订单状态 - 待支付', '1', '2022-12-10 16:49:29', '1', '2022-12-10 16:49:29', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1204, 10, '待发货', '10', 'trade_order_status', 0, 'primary', '', '交易订单状态 - 待发货', '1', '2022-12-10 16:49:53', '1', '2022-12-10 16:51:17', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1205, 20, '已发货', '20', 'trade_order_status', 0, 'primary', '', '交易订单状态 - 已发货', '1', '2022-12-10 16:50:13', '1', '2022-12-10 16:51:31', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1206, 30, '已完成', '30', 'trade_order_status', 0, 'success', '', '交易订单状态 - 已完成', '1', '2022-12-10 16:50:30', '1', '2022-12-10 16:51:06', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1207, 40, '已取消', '40', 'trade_order_status', 0, 'danger', '', '交易订单状态 - 已取消', '1', '2022-12-10 16:50:50', '1', '2022-12-10 16:51:00', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1208, 0, '未售后', '0', 'trade_order_item_after_sale_status', 0, 'info', '', '交易订单项的售后状态 - 未售后', '1', '2022-12-10 20:58:42', '1', '2022-12-10 20:59:29', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1209, 1, '售后中', '1', 'trade_order_item_after_sale_status', 0, 'primary', '', '交易订单项的售后状态 - 售后中', '1', '2022-12-10 20:59:21', '1', '2022-12-10 20:59:21', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1210, 2, '已退款', '2', 'trade_order_item_after_sale_status', 0, 'success', '', '交易订单项的售后状态 - 已退款', '1', '2022-12-10 20:59:46', '1', '2022-12-10 20:59:46', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1211, 1, '完全匹配', '1', 'mp_auto_reply_request_match', 0, 'primary', '', '公众号自动回复的请求关键字匹配模式 - 完全匹配', '1', '2023-01-16 23:30:39', '1', '2023-01-16 23:31:00', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1212, 2, '半匹配', '2', 'mp_auto_reply_request_match', 0, 'success', '', '公众号自动回复的请求关键字匹配模式 - 半匹配', '1', '2023-01-16 23:30:55', '1', '2023-01-16 23:31:10', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1213, 1, '文本', 'text', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 文本', '1', '2023-01-17 22:17:32', '1', '2023-01-17 22:17:39', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1214, 2, '图片', 'image', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 图片', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:19:47', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1215, 3, '语音', 'voice', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 语音', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:20:08', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1216, 4, '视频', 'video', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 视频', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:21:08', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1217, 5, '小视频', 'shortvideo', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 小视频', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:19:59', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1218, 6, '图文', 'news', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 图文', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:22:54', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1219, 7, '音乐', 'music', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 音乐', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:22:54', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1220, 8, '地理位置', 'location', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 地理位置', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:23:51', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1221, 9, '链接', 'link', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 链接', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:24:49', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1222, 10, '事件', 'event', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 事件', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:24:49', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1223, 0, '初始化', '0', 'system_mail_send_status', 0, 'primary', '', '邮件发送状态 - 初始化\n', '1', '2023-01-26 09:53:49', '1', '2023-01-26 16:36:14', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1224, 10, '发送成功', '10', 'system_mail_send_status', 0, 'success', '', '邮件发送状态 - 发送成功', '1', '2023-01-26 09:54:28', '1', '2023-01-26 16:36:22', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1225, 20, '发送失败', '20', 'system_mail_send_status', 0, 'danger', '', '邮件发送状态 - 发送失败', '1', '2023-01-26 09:54:50', '1', '2023-01-26 16:36:26', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1226, 30, '不发送', '30', 'system_mail_send_status', 0, 'info', '', '邮件发送状态 - 不发送', '1', '2023-01-26 09:55:06', '1', '2023-01-26 16:36:36', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1227, 1, '通知公告', '1', 'system_notify_template_type', 0, 'primary', '', '站内信模版的类型 - 通知公告', '1', '2023-01-28 10:35:59', '1', '2023-01-28 10:35:59', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1228, 2, '系统消息', '2', 'system_notify_template_type', 0, 'success', '', '站内信模版的类型 - 系统消息', '1', '2023-01-28 10:36:20', '1', '2023-01-28 10:36:25', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1230, 13, '支付宝条码支付', 'alipay_bar', 'pay_channel_code', 0, 'primary', '', '支付宝条码支付', '1', '2023-02-18 23:32:24', '1', '2023-07-19 20:09:23', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1231, 10, 'Vue2 Element UI 标准模版', '10', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:03:55', '1', '2023-04-13 00:03:55', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1232, 20, 'Vue3 Element Plus 标准模版', '20', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:04:08', '1', '2023-04-13 00:04:08', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1233, 21, 'Vue3 Element Plus Schema 模版', '21', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:04:26', '1', '2023-04-13 00:04:26', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1234, 30, 'Vue3 vben 模版', '30', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:04:26', '1', '2023-04-13 00:04:26', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1244, 0, '按件', '1', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:46:40', '1', '2023-05-21 22:46:40', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1245, 1, '按重量', '2', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:46:58', '1', '2023-05-21 22:46:58', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1246, 2, '按体积', '3', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:47:18', '1', '2023-05-21 22:47:18', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1335, 11, '订单积分抵扣', '11', 'member_point_biz_type', 0, '', '', '', '1', '2023-06-10 12:15:27', '1', '2023-10-11 07:41:43', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1336, 1, '签到', '1', 'member_point_biz_type', 0, '', '', '', '1', '2023-06-10 12:15:48', '1', '2023-08-20 11:59:53', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1341, 20, '已退款', '20', 'pay_order_status', 0, 'danger', '', '已退款', '1', '2023-07-19 18:05:37', '1', '2023-07-19 18:05:37', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1342, 21, '请求成功,但是结果失败', '21', 'pay_notify_status', 0, 'warning', '', '请求成功,但是结果失败', '1', '2023-07-19 18:10:47', '1', '2023-07-19 18:11:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1343, 22, '请求失败', '22', 'pay_notify_status', 0, 'warning', '', NULL, '1', '2023-07-19 18:11:05', '1', '2023-07-19 18:11:27', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1344, 4, '微信扫码支付', 'wx_native', 'pay_channel_code', 0, 'success', '', '微信扫码支付', '1', '2023-07-19 20:07:47', '1', '2023-07-19 20:09:03', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1345, 5, '微信条码支付', 'wx_bar', 'pay_channel_code', 0, 'success', '', '微信条码支付\n', '1', '2023-07-19 20:08:06', '1', '2023-07-19 20:09:08', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1346, 1, '支付单', '1', 'pay_notify_type', 0, 'primary', '', '支付单', '1', '2023-07-20 12:23:17', '1', '2023-07-20 12:23:17', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1347, 2, '退款单', '2', 'pay_notify_type', 0, 'danger', '', NULL, '1', '2023-07-20 12:23:26', '1', '2023-07-20 12:23:26', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1348, 20, '模拟支付', 'mock', 'pay_channel_code', 0, 'default', '', '模拟支付', '1', '2023-07-29 11:10:51', '1', '2023-07-29 03:14:10', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1349, 12, '订单积分抵扣(整单取消)', '12', 'member_point_biz_type', 0, '', '', '', '1', '2023-08-20 12:00:03', '1', '2023-10-11 07:42:01', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1350, 0, '管理员调整', '0', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1351, 1, '邀新奖励', '1', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1352, 11, '下单奖励', '11', 'member_experience_biz_type', 0, 'success', '', NULL, '', '2023-08-22 12:41:01', '1', '2023-10-11 07:45:09', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1353, 12, '下单奖励(整单取消)', '12', 'member_experience_biz_type', 0, 'warning', '', NULL, '', '2023-08-22 12:41:01', '1', '2023-10-11 07:45:01', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1354, 4, '签到奖励', '4', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1355, 5, '抽奖奖励', '5', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1356, 1, '快递发货', '1', 'trade_delivery_type', 0, '', '', '', '1', '2023-08-23 00:04:55', '1', '2023-08-23 00:04:55', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1357, 2, '用户自提', '2', 'trade_delivery_type', 0, '', '', '', '1', '2023-08-23 00:05:05', '1', '2023-08-23 00:05:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1358, 3, '品类劵', '3', 'promotion_product_scope', 0, 'default', '', '', '1', '2023-09-01 23:43:07', '1', '2023-09-28 00:27:47', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1359, 1, '人人分销', '1', 'brokerage_enabled_condition', 0, '', '', '所有用户都可以分销', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1360, 2, '指定分销', '2', 'brokerage_enabled_condition', 0, '', '', '仅可后台手动设置推广员', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1361, 1, '首次绑定', '1', 'brokerage_bind_mode', 0, '', '', '只要用户没有推广人,随时都可以绑定推广关系', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1362, 2, '注册绑定', '2', 'brokerage_bind_mode', 0, '', '', '仅新用户注册时才能绑定推广关系', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1363, 3, '覆盖绑定', '3', 'brokerage_bind_mode', 0, '', '', '如果用户已经有推广人,推广人会被变更', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1364, 1, '钱包', '1', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1365, 2, '银行卡', '2', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1366, 3, '微信', '3', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1367, 4, '支付宝', '4', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1368, 1, '订单返佣', '1', 'brokerage_record_biz_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1369, 2, '申请提现', '2', 'brokerage_record_biz_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1370, 3, '申请提现驳回', '3', 'brokerage_record_biz_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1371, 0, '待结算', '0', 'brokerage_record_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1372, 1, '已结算', '1', 'brokerage_record_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1373, 2, '已取消', '2', 'brokerage_record_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1374, 0, '审核中', '0', 'brokerage_withdraw_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1375, 10, '审核通过', '10', 'brokerage_withdraw_status', 0, 'success', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1376, 11, '提现成功', '11', 'brokerage_withdraw_status', 0, 'success', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1377, 20, '审核不通过', '20', 'brokerage_withdraw_status', 0, 'danger', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1378, 21, '提现失败', '21', 'brokerage_withdraw_status', 0, 'danger', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1379, 0, '工商银行', '0', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1380, 1, '建设银行', '1', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1381, 2, '农业银行', '2', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1382, 3, '中国银行', '3', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1383, 4, '交通银行', '4', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1384, 5, '招商银行', '5', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1385, 21, '钱包', 'wallet', 'pay_channel_code', 0, 'primary', '', '', '1', '2023-10-01 21:46:19', '1', '2023-10-01 21:48:01', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1386, 1, '砍价中', '1', 'promotion_bargain_record_status', 0, 'default', '', '', '1', '2023-10-05 10:41:26', '1', '2023-10-05 10:41:26', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1387, 2, '砍价成功', '2', 'promotion_bargain_record_status', 0, 'success', '', '', '1', '2023-10-05 10:41:39', '1', '2023-10-05 10:41:39', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1388, 3, '砍价失败', '3', 'promotion_bargain_record_status', 0, 'warning', '', '', '1', '2023-10-05 10:41:57', '1', '2023-10-05 10:41:57', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1389, 1, '拼团中', '1', 'promotion_combination_record_status', 0, '', '', '', '1', '2023-10-08 07:24:44', '1', '2023-10-08 07:24:44', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1390, 2, '拼团成功', '2', 'promotion_combination_record_status', 0, 'success', '', '', '1', '2023-10-08 07:24:56', '1', '2023-10-08 07:24:56', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1391, 3, '拼团失败', '3', 'promotion_combination_record_status', 0, 'warning', '', '', '1', '2023-10-08 07:25:11', '1', '2023-10-08 07:25:11', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1392, 2, '管理员修改', '2', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:41:34', '1', '2023-10-11 07:41:34', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1393, 13, '订单积分抵扣(单个退款)', '13', 'member_point_biz_type', 0, '', '', '', '1', '2023-10-11 07:42:29', '1', '2023-10-11 07:42:29', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1394, 21, '订单积分奖励', '21', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:42:44', '1', '2023-10-11 07:42:44', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1395, 22, '订单积分奖励(整单取消)', '22', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:42:55', '1', '2023-10-11 07:43:01', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1396, 23, '订单积分奖励(单个退款)', '23', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:43:16', '1', '2023-10-11 07:43:16', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1397, 13, '下单奖励(单个退款)', '13', 'member_experience_biz_type', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1398, 5, '网上转账', '5', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:24', '1', '2023-10-18 21:55:24', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1399, 6, '支付宝', '6', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:38', '1', '2023-10-18 21:55:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1400, 7, '微信支付', '7', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:53', '1', '2023-10-18 21:55:53', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1401, 8, '其他', '8', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:56:06', '1', '2023-10-18 21:56:06', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1402, 1, 'IT', '1', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:15', '1', '2024-02-18 23:30:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1403, 2, '金融业', '2', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:29', '1', '2024-02-18 23:30:43', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1404, 3, '房地产', '3', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:41', '1', '2024-02-18 23:30:48', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1405, 4, '商业服务', '4', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:54', '1', '2024-02-18 23:30:54', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1406, 5, '运输/物流', '5', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:03', '1', '2024-02-18 23:31:00', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1407, 6, '生产', '6', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:13', '1', '2024-02-18 23:31:08', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1408, 7, '政府', '7', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:27', '1', '2024-02-18 23:31:13', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1409, 8, '文化传媒', '8', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:37', '1', '2024-02-18 23:31:20', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1422, 1, 'A (重点客户)', '1', 'crm_customer_level', 0, 'primary', '', '', '1', '2023-10-28 23:07:13', '1', '2023-10-28 23:07:13', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1423, 2, 'B (普通客户)', '2', 'crm_customer_level', 0, 'info', '', '', '1', '2023-10-28 23:07:35', '1', '2023-10-28 23:07:35', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1424, 3, 'C (非优先客户)', '3', 'crm_customer_level', 0, 'default', '', '', '1', '2023-10-28 23:07:53', '1', '2023-10-28 23:07:53', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1425, 1, '促销', '1', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:29', '1', '2023-10-28 23:08:29', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1426, 2, '搜索引擎', '2', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:39', '1', '2023-10-28 23:08:39', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1427, 3, '广告', '3', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:47', '1', '2023-10-28 23:08:47', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1428, 4, '转介绍', '4', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:58', '1', '2023-10-28 23:08:58', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1429, 5, '线上注册', '5', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:12', '1', '2023-10-28 23:09:12', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1430, 6, '线上咨询', '6', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:22', '1', '2023-10-28 23:09:22', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1431, 7, '预约上门', '7', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:39', '1', '2023-10-28 23:09:39', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1432, 8, '陌拜', '8', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:04', '1', '2023-10-28 23:10:04', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1433, 9, '电话咨询', '9', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:18', '1', '2023-10-28 23:10:18', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1434, 10, '邮件咨询', '10', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:33', '1', '2023-10-28 23:10:33', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1435, 10, 'Gitee', '10', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:04:42', '1', '2023-11-04 13:04:42', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1436, 20, '钉钉', '20', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:04:54', '1', '2023-11-04 13:04:54', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1437, 30, '企业微信', '30', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:09', '1', '2023-11-04 13:05:09', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1438, 31, '微信公众平台', '31', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:18', '1', '2023-11-04 13:05:18', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1439, 32, '微信开放平台', '32', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:30', '1', '2023-11-04 13:05:30', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1440, 34, '微信小程序', '34', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:38', '1', '2023-11-04 13:07:16', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1441, 1, '上架', '1', 'crm_product_status', 0, 'success', '', '', '1', '2023-10-30 21:49:34', '1', '2023-10-30 21:49:34', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1442, 0, '下架', '0', 'crm_product_status', 0, 'success', '', '', '1', '2023-10-30 21:49:13', '1', '2023-10-30 21:49:13', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1443, 15, '子表', '15', 'infra_codegen_template_type', 0, 'default', '', '', '1', '2023-11-13 23:06:16', '1', '2023-11-13 23:06:16', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1444, 10, '主表(标准模式)', '10', 'infra_codegen_template_type', 0, 'default', '', '', '1', '2023-11-14 12:32:49', '1', '2023-11-14 12:32:49', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1445, 11, '主表(ERP 模式)', '11', 'infra_codegen_template_type', 0, 'default', '', '', '1', '2023-11-14 12:33:05', '1', '2023-11-14 12:33:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1446, 12, '主表(内嵌模式)', '12', 'infra_codegen_template_type', 0, '', '', '', '1', '2023-11-14 12:33:31', '1', '2023-11-14 12:33:31', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1447, 1, '负责人', '1', 'crm_permission_level', 0, 'default', '', '', '1', '2023-11-30 09:53:12', '1', '2023-11-30 09:53:12', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1448, 2, '只读', '2', 'crm_permission_level', 0, '', '', '', '1', '2023-11-30 09:53:29', '1', '2023-11-30 09:53:29', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1449, 3, '读写', '3', 'crm_permission_level', 0, '', '', '', '1', '2023-11-30 09:53:36', '1', '2023-11-30 09:53:36', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1450, 0, '未提交', '0', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:56:59', '1', '2023-11-30 18:56:59', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1451, 10, '审批中', '10', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:10', '1', '2023-11-30 18:57:10', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1452, 20, '审核通过', '20', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:24', '1', '2023-11-30 18:57:24', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1453, 30, '审核不通过', '30', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:32', '1', '2023-11-30 18:57:32', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1454, 40, '已取消', '40', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:42', '1', '2023-11-30 18:57:42', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1456, 1, '支票', '1', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:29', '1', '2023-10-18 21:54:29', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1457, 2, '现金', '2', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:41', '1', '2023-10-18 21:54:41', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1458, 3, '邮政汇款', '3', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:53', '1', '2023-10-18 21:54:53', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1459, 4, '电汇', '4', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:07', '1', '2023-10-18 21:55:07', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1460, 5, '网上转账', '5', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:24', '1', '2023-10-18 21:55:24', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1461, 1, '个', '1', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:02:26', '1', '2023-12-05 23:02:26', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1462, 2, '块', '2', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:02:34', '1', '2023-12-05 23:02:34', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1463, 3, '只', '3', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:02:57', '1', '2023-12-05 23:02:57', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1464, 4, '把', '4', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:05', '1', '2023-12-05 23:03:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1465, 5, '枚', '5', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:14', '1', '2023-12-05 23:03:14', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1466, 6, '瓶', '6', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:20', '1', '2023-12-05 23:03:20', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1467, 7, '盒', '7', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:30', '1', '2023-12-05 23:03:30', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1468, 8, '台', '8', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:41', '1', '2023-12-05 23:03:41', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1469, 9, '吨', '9', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:48', '1', '2023-12-05 23:03:48', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1470, 10, '千克', '10', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:03', '1', '2023-12-05 23:04:03', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1471, 11, '米', '11', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:12', '1', '2023-12-05 23:04:12', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1472, 12, '箱', '12', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:25', '1', '2023-12-05 23:04:25', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1473, 13, '套', '13', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:34', '1', '2023-12-05 23:04:34', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1474, 1, '打电话', '1', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:48:20', '1', '2024-01-15 20:48:20', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1475, 2, '发短信', '2', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:48:31', '1', '2024-01-15 20:48:31', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1476, 3, '上门拜访', '3', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:49:07', '1', '2024-01-15 20:49:07', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1477, 4, '微信沟通', '4', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:49:15', '1', '2024-01-15 20:49:15', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1478, 4, '钱包余额', '4', 'pay_transfer_type', 0, 'info', '', '', '1', '2023-10-28 16:28:37', '1', '2023-10-28 16:28:37', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1479, 3, '银行卡', '3', 'pay_transfer_type', 0, 'default', '', '', '1', '2023-10-28 16:28:21', '1', '2023-10-28 16:28:21', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1480, 2, '微信余额', '2', 'pay_transfer_type', 0, 'info', '', '', '1', '2023-10-28 16:28:07', '1', '2023-10-28 16:28:07', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1481, 1, '支付宝余额', '1', 'pay_transfer_type', 0, 'default', '', '', '1', '2023-10-28 16:27:44', '1', '2023-10-28 16:27:44', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1482, 4, '转账失败', '30', 'pay_transfer_status', 0, 'warning', '', '', '1', '2023-10-28 16:24:16', '1', '2023-10-28 16:24:16', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1483, 3, '转账成功', '20', 'pay_transfer_status', 0, 'success', '', '', '1', '2023-10-28 16:23:50', '1', '2023-10-28 16:23:50', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1484, 2, '转账进行中', '10', 'pay_transfer_status', 0, 'info', '', '', '1', '2023-10-28 16:23:12', '1', '2023-10-28 16:23:12', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1485, 1, '等待转账', '0', 'pay_transfer_status', 0, 'default', '', '', '1', '2023-10-28 16:21:43', '1', '2023-10-28 16:23:22', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1486, 10, '其它入库', '10', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-05 18:07:25', '1', '2024-02-05 18:07:43', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1487, 11, '其它入库(作废)', '11', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-05 18:08:07', '1', '2024-02-05 19:20:16', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1488, 20, '其它出库', '20', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-05 18:08:51', '1', '2024-02-05 18:08:51', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1489, 21, '其它出库(作废)', '21', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-05 18:09:00', '1', '2024-02-05 19:20:10', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1490, 10, '未审核', '10', 'erp_audit_status', 0, 'default', '', '', '1', '2024-02-06 00:00:21', '1', '2024-02-06 00:00:21', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1491, 20, '已审核', '20', 'erp_audit_status', 0, 'success', '', '', '1', '2024-02-06 00:00:35', '1', '2024-02-06 00:00:35', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1492, 30, '调拨入库', '30', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-07 20:34:19', '1', '2024-02-07 12:36:31', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1493, 31, '调拨入库(作废)', '31', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-07 20:34:29', '1', '2024-02-07 20:37:11', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1494, 32, '调拨出库', '32', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-07 20:34:38', '1', '2024-02-07 12:36:33', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1495, 33, '调拨出库(作废)', '33', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-07 20:34:49', '1', '2024-02-07 20:37:06', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1496, 40, '盘盈入库', '40', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-08 08:53:00', '1', '2024-02-08 08:53:09', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1497, 41, '盘盈入库(作废)', '41', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-08 08:53:39', '1', '2024-02-16 19:40:54', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1498, 42, '盘亏出库', '42', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-08 08:54:16', '1', '2024-02-08 08:54:16', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1499, 43, '盘亏出库(作废)', '43', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-08 08:54:31', '1', '2024-02-16 19:40:46', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1500, 50, '销售出库', '50', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-11 21:47:25', '1', '2024-02-11 21:50:40', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1501, 51, '销售出库(作废)', '51', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-11 21:47:37', '1', '2024-02-11 21:51:12', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1502, 60, '销售退货入库', '60', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-12 06:51:05', '1', '2024-02-12 06:51:05', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1503, 61, '销售退货入库(作废)', '61', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-12 06:51:18', '1', '2024-02-12 06:51:18', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1504, 70, '采购入库', '70', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-16 13:10:02', '1', '2024-02-16 13:10:02', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1505, 71, '采购入库(作废)', '71', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-16 13:10:10', '1', '2024-02-16 19:40:40', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1506, 80, '采购退货出库', '80', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-16 13:10:17', '1', '2024-02-16 13:10:17', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1507, 81, '采购退货出库(作废)', '81', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-16 13:10:26', '1', '2024-02-16 19:40:33', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1509, 3, '审批不通过', '3', 'bpm_process_instance_status', 0, 'danger', '', '', '1', '2024-03-16 16:12:06', '1', '2024-03-16 16:12:06', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1510, 4, '已取消', '4', 'bpm_process_instance_status', 0, 'warning', '', '', '1', '2024-03-16 16:12:22', '1', '2024-03-16 16:12:22', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1511, 5, '已退回', '5', 'bpm_task_status', 0, 'warning', '', '', '1', '2024-03-16 19:10:46', '1', '2024-03-08 22:41:40', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1512, 6, '委派中', '6', 'bpm_task_status', 0, 'primary', '', '', '1', '2024-03-17 10:06:22', '1', '2024-03-08 22:41:40', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1513, 7, '审批通过中', '7', 'bpm_task_status', 0, 'success', '', '', '1', '2024-03-17 10:06:47', '1', '2024-03-08 22:41:41', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1514, 0, '待审批', '0', 'bpm_task_status', 0, 'info', '', '', '1', '2024-03-17 10:07:11', '1', '2024-03-08 22:41:42', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1515, 35, '发起人自选', '35', 'bpm_task_candidate_strategy', 0, '', '', '', '1', '2024-03-22 19:45:16', '1', '2024-03-22 19:45:16', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1516, 1, '执行监听器', 'execution', 'bpm_process_listener_type', 0, 'primary', '', '', '1', '2024-03-23 12:54:03', '1', '2024-03-23 19:14:19', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1517, 1, '任务监听器', 'task', 'bpm_process_listener_type', 0, 'success', '', '', '1', '2024-03-23 12:54:13', '1', '2024-03-23 19:14:24', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1526, 1, 'Java 类', 'class', 'bpm_process_listener_value_type', 0, 'primary', '', '', '1', '2024-03-23 15:08:45', '1', '2024-03-23 19:14:32', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1527, 2, '表达式', 'expression', 'bpm_process_listener_value_type', 0, 'success', '', '', '1', '2024-03-23 15:09:06', '1', '2024-03-23 19:14:38', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1528, 3, '代理表达式', 'delegateExpression', 'bpm_process_listener_value_type', 0, 'info', '', '', '1', '2024-03-23 15:11:23', '1', '2024-03-23 19:14:41', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1529, 1, '天', '1', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:50:26', '1', '2024-03-29 22:50:26', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1530, 2, '周', '2', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:50:36', '1', '2024-03-29 22:50:36', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1531, 3, '月', '3', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:50:46', '1', '2024-03-29 22:50:54', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1532, 4, '季度', '4', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:51:01', '1', '2024-03-29 22:51:01', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1533, 5, '年', '5', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:51:07', '1', '2024-03-29 22:51:07', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1534, 1, '赢单', '1', 'crm_business_end_status_type', 0, 'success', '', '', '1', '2024-04-13 23:26:57', '1', '2024-04-13 23:26:57', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1535, 2, '输单', '2', 'crm_business_end_status_type', 0, 'primary', '', '', '1', '2024-04-13 23:27:31', '1', '2024-04-13 23:27:31', b'0'); +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1536, 3, '无效', '3', 'crm_business_end_status_type', 0, 'info', '', '', '1', '2024-04-13 23:27:59', '1', '2024-04-13 23:27:59', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for system_dict_type +-- ---------------------------- +DROP TABLE IF EXISTS `system_dict_type`; +CREATE TABLE `system_dict_type` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '字典主键', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '字典名称', + `type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '字典类型', + `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态(0正常 1停用)', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `deleted_time` datetime NULL DEFAULT NULL COMMENT '删除时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `dict_type`(`type` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 620 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '字典类型表'; + +-- ---------------------------- +-- Records of system_dict_type +-- ---------------------------- +BEGIN; +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (1, '用户性别', 'system_user_sex', 0, NULL, 'admin', '2021-01-05 17:03:48', '1', '2022-05-16 20:29:32', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (6, '参数类型', 'infra_config_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:36:54', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (7, '通知类型', 'system_notice_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:35:26', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (9, '操作类型', 'infra_operate_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:01', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (10, '系统状态', 'common_status', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:21:28', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (11, 'Boolean 是否类型', 'infra_boolean_string', 0, 'boolean 转是否', '', '2021-01-19 03:20:08', '', '2022-02-01 16:37:10', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (104, '登陆结果', 'system_login_result', 0, '登陆结果', '', '2021-01-18 06:17:11', '', '2022-02-01 16:36:00', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (106, '代码生成模板类型', 'infra_codegen_template_type', 0, NULL, '', '2021-02-05 07:08:06', '1', '2022-05-16 20:26:50', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (107, '定时任务状态', 'infra_job_status', 0, NULL, '', '2021-02-07 07:44:16', '', '2022-02-01 16:51:11', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (108, '定时任务日志状态', 'infra_job_log_status', 0, NULL, '', '2021-02-08 10:03:51', '', '2022-02-01 16:50:43', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (109, '用户类型', 'user_type', 0, NULL, '', '2021-02-26 00:15:51', '', '2021-02-26 00:15:51', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (110, 'API 异常数据的处理状态', 'infra_api_error_log_process_status', 0, NULL, '', '2021-02-26 07:07:01', '', '2022-02-01 16:50:53', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (111, '短信渠道编码', 'system_sms_channel_code', 0, NULL, '1', '2021-04-05 01:04:50', '1', '2022-02-16 02:09:08', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (112, '短信模板的类型', 'system_sms_template_type', 0, NULL, '1', '2021-04-05 21:50:43', '1', '2022-02-01 16:35:06', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (113, '短信发送状态', 'system_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:03', '1', '2022-02-01 16:35:09', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (114, '短信接收状态', 'system_sms_receive_status', 0, NULL, '1', '2021-04-11 20:27:14', '1', '2022-02-01 16:35:14', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (116, '登陆日志的类型', 'system_login_type', 0, '登陆日志的类型', '1', '2021-10-06 00:50:46', '1', '2022-02-01 16:35:56', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (117, 'OA 请假类型', 'bpm_oa_leave_type', 0, NULL, '1', '2021-09-21 22:34:33', '1', '2022-01-22 10:41:37', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (130, '支付渠道编码类型', 'pay_channel_code', 0, '支付渠道的编码', '1', '2021-12-03 10:35:08', '1', '2023-07-10 10:11:39', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (131, '支付回调状态', 'pay_notify_status', 0, '支付回调状态(包括退款回调)', '1', '2021-12-03 10:53:29', '1', '2023-07-19 18:09:43', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (132, '支付订单状态', 'pay_order_status', 0, '支付订单状态', '1', '2021-12-03 11:17:50', '1', '2021-12-03 11:17:50', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (134, '退款订单状态', 'pay_refund_status', 0, '退款订单状态', '1', '2021-12-10 16:42:50', '1', '2023-07-19 10:13:17', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (139, '流程实例的状态', 'bpm_process_instance_status', 0, '流程实例的状态', '1', '2022-01-07 23:46:42', '1', '2022-01-07 23:46:42', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (140, '流程实例的结果', 'bpm_task_status', 0, '流程实例的结果', '1', '2022-01-07 23:48:10', '1', '2024-03-08 22:42:03', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (141, '流程的表单类型', 'bpm_model_form_type', 0, '流程的表单类型', '103', '2022-01-11 23:50:45', '103', '2022-01-11 23:50:45', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (142, '任务分配规则的类型', 'bpm_task_candidate_strategy', 0, 'BPM 任务的候选人的策略', '103', '2022-01-12 23:21:04', '103', '2024-03-06 02:53:59', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (144, '代码生成的场景枚举', 'infra_codegen_scene', 0, '代码生成的场景枚举', '1', '2022-02-02 13:14:45', '1', '2022-03-10 16:33:46', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (145, '角色类型', 'system_role_type', 0, '角色类型', '1', '2022-02-16 13:01:46', '1', '2022-02-16 13:01:46', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (146, '文件存储器', 'infra_file_storage', 0, '文件存储器', '1', '2022-03-15 00:24:38', '1', '2022-03-15 00:24:38', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (147, 'OAuth 2.0 授权类型', 'system_oauth2_grant_type', 0, 'OAuth 2.0 授权类型(模式)', '1', '2022-05-12 00:20:52', '1', '2022-05-11 16:25:49', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (149, '商品 SPU 状态', 'product_spu_status', 0, '商品 SPU 状态', '1', '2022-10-24 21:19:04', '1', '2022-10-24 21:19:08', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (150, '优惠类型', 'promotion_discount_type', 0, '优惠类型', '1', '2022-11-01 12:46:06', '1', '2022-11-01 12:46:06', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (151, '优惠劵模板的有限期类型', 'promotion_coupon_template_validity_type', 0, '优惠劵模板的有限期类型', '1', '2022-11-02 00:06:20', '1', '2022-11-04 00:08:26', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (152, '营销的商品范围', 'promotion_product_scope', 0, '营销的商品范围', '1', '2022-11-02 00:28:01', '1', '2022-11-02 00:28:01', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (153, '优惠劵的状态', 'promotion_coupon_status', 0, '优惠劵的状态', '1', '2022-11-04 00:14:49', '1', '2022-11-04 00:14:49', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (154, '优惠劵的领取方式', 'promotion_coupon_take_type', 0, '优惠劵的领取方式', '1', '2022-11-04 19:12:27', '1', '2022-11-04 19:12:27', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (155, '促销活动的状态', 'promotion_activity_status', 0, '促销活动的状态', '1', '2022-11-04 22:54:23', '1', '2022-11-04 22:54:23', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (156, '营销的条件类型', 'promotion_condition_type', 0, '营销的条件类型', '1', '2022-11-04 22:59:23', '1', '2022-11-04 22:59:23', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (157, '交易售后状态', 'trade_after_sale_status', 0, '交易售后状态', '1', '2022-11-19 20:52:56', '1', '2022-11-19 20:52:56', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (158, '交易售后的类型', 'trade_after_sale_type', 0, '交易售后的类型', '1', '2022-11-19 21:04:09', '1', '2022-11-19 21:04:09', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (159, '交易售后的方式', 'trade_after_sale_way', 0, '交易售后的方式', '1', '2022-11-19 21:39:04', '1', '2022-11-19 21:39:04', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (160, '终端', 'terminal', 0, '终端', '1', '2022-12-10 10:50:50', '1', '2022-12-10 10:53:11', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (161, '交易订单的类型', 'trade_order_type', 0, '交易订单的类型', '1', '2022-12-10 16:33:54', '1', '2022-12-10 16:33:54', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (162, '交易订单的状态', 'trade_order_status', 0, '交易订单的状态', '1', '2022-12-10 16:48:44', '1', '2022-12-10 16:48:44', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (163, '交易订单项的售后状态', 'trade_order_item_after_sale_status', 0, '交易订单项的售后状态', '1', '2022-12-10 20:58:08', '1', '2022-12-10 20:58:08', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (164, '公众号自动回复的请求关键字匹配模式', 'mp_auto_reply_request_match', 0, '公众号自动回复的请求关键字匹配模式', '1', '2023-01-16 23:29:56', '1', '2023-01-16 23:29:56', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (165, '公众号的消息类型', 'mp_message_type', 0, '公众号的消息类型', '1', '2023-01-17 22:17:09', '1', '2023-01-17 22:17:09', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (166, '邮件发送状态', 'system_mail_send_status', 0, '邮件发送状态', '1', '2023-01-26 09:53:13', '1', '2023-01-26 09:53:13', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (167, '站内信模版的类型', 'system_notify_template_type', 0, '站内信模版的类型', '1', '2023-01-28 10:35:10', '1', '2023-01-28 10:35:10', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (168, '代码生成的前端类型', 'infra_codegen_front_type', 0, '', '1', '2023-04-12 23:57:52', '1', '2023-04-12 23:57:52', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (170, '快递计费方式', 'trade_delivery_express_charge_mode', 0, '用于商城交易模块配送管理', '1', '2023-05-21 22:45:03', '1', '2023-05-21 22:45:03', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (171, '积分业务类型', 'member_point_biz_type', 0, '', '1', '2023-06-10 12:15:00', '1', '2023-06-28 13:48:20', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (173, '支付通知类型', 'pay_notify_type', 0, NULL, '1', '2023-07-20 12:23:03', '1', '2023-07-20 12:23:03', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (174, '会员经验业务类型', 'member_experience_biz_type', 0, NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (175, '交易配送类型', 'trade_delivery_type', 0, '', '1', '2023-08-23 00:03:14', '1', '2023-08-23 00:03:14', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (176, '分佣模式', 'brokerage_enabled_condition', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (177, '分销关系绑定模式', 'brokerage_bind_mode', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (178, '佣金提现类型', 'brokerage_withdraw_type', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (179, '佣金记录业务类型', 'brokerage_record_biz_type', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (180, '佣金记录状态', 'brokerage_record_status', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (181, '佣金提现状态', 'brokerage_withdraw_status', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (182, '佣金提现银行', 'brokerage_bank_name', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (183, '砍价记录的状态', 'promotion_bargain_record_status', 0, '', '1', '2023-10-05 10:41:08', '1', '2023-10-05 10:41:08', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (184, '拼团记录的状态', 'promotion_combination_record_status', 0, '', '1', '2023-10-08 07:24:25', '1', '2023-10-08 07:24:25', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (185, '回款-回款方式', 'crm_receivable_return_type', 0, '回款-回款方式', '1', '2023-10-18 21:54:10', '1', '2023-10-18 21:54:10', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (186, 'CRM 客户行业', 'crm_customer_industry', 0, 'CRM 客户所属行业', '1', '2023-10-28 22:57:07', '1', '2024-02-18 23:30:22', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (187, '客户等级', 'crm_customer_level', 0, 'CRM 客户等级', '1', '2023-10-28 22:59:12', '1', '2023-10-28 15:11:16', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (188, '客户来源', 'crm_customer_source', 0, 'CRM 客户来源', '1', '2023-10-28 23:00:34', '1', '2023-10-28 15:11:16', b'0', NULL); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (600, 'Banner 位置', 'promotion_banner_position', 0, '', '1', '2023-10-08 07:24:25', '1', '2023-11-04 13:04:02', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (601, '社交类型', 'system_social_type', 0, '', '1', '2023-11-04 13:03:54', '1', '2023-11-04 13:03:54', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (604, '产品状态', 'crm_product_status', 0, '', '1', '2023-10-30 21:47:59', '1', '2023-10-30 21:48:45', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (605, 'CRM 数据权限的级别', 'crm_permission_level', 0, '', '1', '2023-11-30 09:51:59', '1', '2023-11-30 09:51:59', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (606, 'CRM 审批状态', 'crm_audit_status', 0, '', '1', '2023-11-30 18:56:23', '1', '2023-11-30 18:56:23', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (607, 'CRM 产品单位', 'crm_product_unit', 0, '', '1', '2023-12-05 23:01:51', '1', '2023-12-05 23:01:51', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (608, 'CRM 跟进方式', 'crm_follow_up_type', 0, '', '1', '2024-01-15 20:48:05', '1', '2024-01-15 20:48:05', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (609, '支付转账类型', 'pay_transfer_type', 0, '', '1', '2023-10-28 16:27:18', '1', '2023-10-28 16:27:18', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (610, '转账订单状态', 'pay_transfer_status', 0, '', '1', '2023-10-28 16:18:32', '1', '2023-10-28 16:18:32', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (611, 'ERP 库存明细的业务类型', 'erp_stock_record_biz_type', 0, 'ERP 库存明细的业务类型', '1', '2024-02-05 18:07:02', '1', '2024-02-05 18:07:02', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (612, 'ERP 审批状态', 'erp_audit_status', 0, '', '1', '2024-02-06 00:00:07', '1', '2024-02-06 00:00:07', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (613, 'BPM 监听器类型', 'bpm_process_listener_type', 0, '', '1', '2024-03-23 12:52:24', '1', '2024-03-09 15:54:28', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (615, 'BPM 监听器值类型', 'bpm_process_listener_value_type', 0, '', '1', '2024-03-23 13:00:31', '1', '2024-03-23 13:00:31', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (616, '时间间隔', 'date_interval', 0, '', '1', '2024-03-29 22:50:09', '1', '2024-03-29 22:50:09', b'0', '1970-01-01 00:00:00'); +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (619, 'CRM 商机结束状态类型', 'crm_business_end_status_type', 0, '', '1', '2024-04-13 23:23:00', '1', '2024-04-13 23:23:00', b'0', '1970-01-01 00:00:00'); +COMMIT; + +-- ---------------------------- +-- Table structure for system_login_log +-- ---------------------------- +DROP TABLE IF EXISTS `system_login_log`; +CREATE TABLE `system_login_log` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '访问ID', + `log_type` bigint NOT NULL COMMENT '日志类型', + `trace_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '链路追踪编号', + `user_id` bigint NOT NULL DEFAULT 0 COMMENT '用户编号', + `user_type` tinyint NOT NULL DEFAULT 0 COMMENT '用户类型', + `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户账号', + `result` tinyint NOT NULL COMMENT '登陆结果', + `user_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户 IP', + `user_agent` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '浏览器 UA', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3104 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '系统访问记录'; + +-- ---------------------------- +-- Records of system_login_log +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for system_mail_account +-- ---------------------------- +DROP TABLE IF EXISTS `system_mail_account`; +CREATE TABLE `system_mail_account` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `mail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮箱', + `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名', + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码', + `host` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SMTP 服务器域名', + `port` int NOT NULL COMMENT 'SMTP 服务器端口', + `ssl_enable` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否开启 SSL', + `starttls_enable` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否开启 STARTTLS', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '邮箱账号表'; + +-- ---------------------------- +-- Records of system_mail_account +-- ---------------------------- +BEGIN; +INSERT INTO `system_mail_account` (`id`, `mail`, `username`, `password`, `host`, `port`, `ssl_enable`, `starttls_enable`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1, '7684413@qq.com', '7684413@qq.com', '1234576', '127.0.0.1', 8080, b'0', b'0', '1', '2023-01-25 17:39:52', '1', '2024-04-24 09:13:56', b'0'); +INSERT INTO `system_mail_account` (`id`, `mail`, `username`, `password`, `host`, `port`, `ssl_enable`, `starttls_enable`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2, 'ydym_test@163.com', 'ydym_test@163.com', 'WBZTEINMIFVRYSOE', 'smtp.163.com', 465, b'1', b'0', '1', '2023-01-26 01:26:03', '1', '2023-04-12 22:39:38', b'0'); +INSERT INTO `system_mail_account` (`id`, `mail`, `username`, `password`, `host`, `port`, `ssl_enable`, `starttls_enable`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3, '76854114@qq.com', '3335', '11234', 'yunai1.cn', 466, b'0', b'0', '1', '2023-01-27 15:06:38', '1', '2023-01-27 07:08:36', b'1'); +INSERT INTO `system_mail_account` (`id`, `mail`, `username`, `password`, `host`, `port`, `ssl_enable`, `starttls_enable`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (4, '7685413x@qq.com', '2', '3', '4', 5, b'1', b'0', '1', '2023-04-12 23:05:06', '1', '2023-04-12 15:05:11', b'1'); +COMMIT; + +-- ---------------------------- +-- Table structure for system_mail_log +-- ---------------------------- +DROP TABLE IF EXISTS `system_mail_log`; +CREATE TABLE `system_mail_log` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `user_id` bigint NULL DEFAULT NULL COMMENT '用户编号', + `user_type` tinyint NULL DEFAULT NULL COMMENT '用户类型', + `to_mail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '接收邮箱地址', + `account_id` bigint NOT NULL COMMENT '邮箱账号编号', + `from_mail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '发送邮箱地址', + `template_id` bigint NOT NULL COMMENT '模板编号', + `template_code` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板编码', + `template_nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '模版发送人名称', + `template_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮件标题', + `template_content` varchar(10240) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮件内容', + `template_params` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮件参数', + `send_status` tinyint NOT NULL DEFAULT 0 COMMENT '发送状态', + `send_time` datetime NULL DEFAULT NULL COMMENT '发送时间', + `send_message_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '发送返回的消息 ID', + `send_exception` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '发送异常', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 356 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '邮件日志表'; + +-- ---------------------------- +-- Records of system_mail_log +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for system_mail_template +-- ---------------------------- +DROP TABLE IF EXISTS `system_mail_template`; +CREATE TABLE `system_mail_template` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `name` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板名称', + `code` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板编码', + `account_id` bigint NOT NULL COMMENT '发送的邮箱账号编号', + `nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '发送人名称', + `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板标题', + `content` varchar(10240) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板内容', + `params` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '参数数组', + `status` tinyint NOT NULL COMMENT '开启状态', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '邮件模版表'; + +-- ---------------------------- +-- Records of system_mail_template +-- ---------------------------- +BEGIN; +INSERT INTO `system_mail_template` (`id`, `name`, `code`, `account_id`, `nickname`, `title`, `content`, `params`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (13, '后台用户短信登录', 'admin-sms-login', 1, '奥特曼', '你猜我猜', '

    您的验证码是{code},名字是{name}

    ', '[\"code\",\"name\"]', 0, '3', '1', '2021-10-11 08:10:00', '1', '2023-12-02 19:51:14', b'0'); +INSERT INTO `system_mail_template` (`id`, `name`, `code`, `account_id`, `nickname`, `title`, `content`, `params`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (14, '测试模版', 'test_01', 2, '芋艿', '一个标题', '

    你是 {key01} 吗?


    是的话,赶紧 {key02} 一下!

    ', '[\"key01\",\"key02\"]', 0, NULL, '1', '2023-01-26 01:27:40', '1', '2023-01-27 10:32:16', b'0'); +INSERT INTO `system_mail_template` (`id`, `name`, `code`, `account_id`, `nickname`, `title`, `content`, `params`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (15, '3', '2', 2, '7', '4', '

    45

    ', '[]', 1, '80', '1', '2023-01-27 15:50:35', '1', '2023-01-27 16:34:49', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for system_menu +-- ---------------------------- +DROP TABLE IF EXISTS `system_menu`; +CREATE TABLE `system_menu` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '菜单ID', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单名称', + `permission` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '权限标识', + `type` tinyint NOT NULL COMMENT '菜单类型', + `sort` int NOT NULL DEFAULT 0 COMMENT '显示顺序', + `parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父菜单ID', + `path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '路由地址', + `icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '#' COMMENT '菜单图标', + `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '组件路径', + `component_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '组件名', + `status` tinyint NOT NULL DEFAULT 0 COMMENT '菜单状态', + `visible` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否可见', + `keep_alive` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否缓存', + `always_show` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否总是显示', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2758 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '菜单权限表'; + +-- ---------------------------- +-- Records of system_menu +-- ---------------------------- +BEGIN; +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1, '系统管理', '', 1, 10, 0, '/system', 'ep:tools', NULL, NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:04:23', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2, '基础设施', '', 1, 20, 0, '/infra', 'ep:monitor', NULL, NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-03-01 08:28:40', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (5, 'OA 示例', '', 1, 40, 1185, 'oa', 'fa:road', NULL, NULL, 0, b'1', b'1', b'1', 'admin', '2021-09-20 16:26:19', '1', '2024-02-29 12:38:13', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (100, '用户管理', 'system:user:list', 2, 1, 1, 'user', 'ep:avatar', 'system/user/index', 'SystemUser', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:02:04', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (101, '角色管理', '', 2, 2, 1, 'role', 'ep:user', 'system/role/index', 'SystemRole', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:03:28', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (102, '菜单管理', '', 2, 3, 1, 'menu', 'ep:menu', 'system/menu/index', 'SystemMenu', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:03:50', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (103, '部门管理', '', 2, 4, 1, 'dept', 'fa:address-card', 'system/dept/index', 'SystemDept', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:06:28', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (104, '岗位管理', '', 2, 5, 1, 'post', 'fa:address-book-o', 'system/post/index', 'SystemPost', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:06:39', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (105, '字典管理', '', 2, 6, 1, 'dict', 'ep:collection', 'system/dict/index', 'SystemDictType', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:07:12', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (106, '配置管理', '', 2, 8, 2, 'config', 'fa:connectdevelop', 'infra/config/index', 'InfraConfig', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:02:45', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (107, '通知公告', '', 2, 4, 2739, 'notice', 'ep:takeaway-box', 'system/notice/index', 'SystemNotice', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-22 23:56:17', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (108, '审计日志', '', 1, 9, 1, 'log', 'ep:document-copy', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:08:30', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (109, '令牌管理', '', 2, 2, 1261, 'token', 'fa:key', 'system/oauth2/token/index', 'SystemTokenClient', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:13:48', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (110, '定时任务', '', 2, 7, 2, 'job', 'fa-solid:tasks', 'infra/job/index', 'InfraJob', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 08:57:36', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (111, 'MySQL 监控', '', 2, 1, 2740, 'druid', 'fa-solid:box', 'infra/druid/index', 'InfraDruid', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:05:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (112, 'Java 监控', '', 2, 3, 2740, 'admin-server', 'ep:coffee-cup', 'infra/server/index', 'InfraAdminServer', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:06:57', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (113, 'Redis 监控', '', 2, 2, 2740, 'redis', 'fa:reddit-square', 'infra/redis/index', 'InfraRedis', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:06:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (114, '表单构建', 'infra:build:list', 2, 2, 2, 'build', 'fa:wpforms', 'infra/build/index', 'InfraBuild', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 08:51:35', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (115, '代码生成', 'infra:codegen:query', 2, 1, 2, 'codegen', 'ep:document-copy', 'infra/codegen/index', 'InfraCodegen', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 08:51:06', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (116, 'API 接口', 'infra:swagger:list', 2, 3, 2, 'swagger', 'fa:fighter-jet', 'infra/swagger/index', 'InfraSwagger', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:01:24', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (500, '操作日志', '', 2, 1, 108, 'operate-log', 'ep:position', 'system/operatelog/index', 'SystemOperateLog', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:09:59', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (501, '登录日志', '', 2, 2, 108, 'login-log', 'ep:promotion', 'system/loginlog/index', 'SystemLoginLog', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:10:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1001, '用户查询', 'system:user:query', 3, 1, 100, '', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1002, '用户新增', 'system:user:create', 3, 2, 100, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1003, '用户修改', 'system:user:update', 3, 3, 100, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1004, '用户删除', 'system:user:delete', 3, 4, 100, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1005, '用户导出', 'system:user:export', 3, 5, 100, '', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1006, '用户导入', 'system:user:import', 3, 6, 100, '', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1007, '重置密码', 'system:user:update-password', 3, 7, 100, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1008, '角色查询', 'system:role:query', 3, 1, 101, '', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1009, '角色新增', 'system:role:create', 3, 2, 101, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1010, '角色修改', 'system:role:update', 3, 3, 101, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1011, '角色删除', 'system:role:delete', 3, 4, 101, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1012, '角色导出', 'system:role:export', 3, 5, 101, '', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1013, '菜单查询', 'system:menu:query', 3, 1, 102, '', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1014, '菜单新增', 'system:menu:create', 3, 2, 102, '', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1015, '菜单修改', 'system:menu:update', 3, 3, 102, '', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1016, '菜单删除', 'system:menu:delete', 3, 4, 102, '', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1017, '部门查询', 'system:dept:query', 3, 1, 103, '', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1018, '部门新增', 'system:dept:create', 3, 2, 103, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1019, '部门修改', 'system:dept:update', 3, 3, 103, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1020, '部门删除', 'system:dept:delete', 3, 4, 103, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1021, '岗位查询', 'system:post:query', 3, 1, 104, '', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1022, '岗位新增', 'system:post:create', 3, 2, 104, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1023, '岗位修改', 'system:post:update', 3, 3, 104, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1024, '岗位删除', 'system:post:delete', 3, 4, 104, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1025, '岗位导出', 'system:post:export', 3, 5, 104, '', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1026, '字典查询', 'system:dict:query', 3, 1, 105, '#', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1027, '字典新增', 'system:dict:create', 3, 2, 105, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1028, '字典修改', 'system:dict:update', 3, 3, 105, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1029, '字典删除', 'system:dict:delete', 3, 4, 105, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1030, '字典导出', 'system:dict:export', 3, 5, 105, '#', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1031, '配置查询', 'infra:config:query', 3, 1, 106, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1032, '配置新增', 'infra:config:create', 3, 2, 106, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1033, '配置修改', 'infra:config:update', 3, 3, 106, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1034, '配置删除', 'infra:config:delete', 3, 4, 106, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1035, '配置导出', 'infra:config:export', 3, 5, 106, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1036, '公告查询', 'system:notice:query', 3, 1, 107, '#', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1037, '公告新增', 'system:notice:create', 3, 2, 107, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1038, '公告修改', 'system:notice:update', 3, 3, 107, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1039, '公告删除', 'system:notice:delete', 3, 4, 107, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1040, '操作查询', 'system:operate-log:query', 3, 1, 500, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1042, '日志导出', 'system:operate-log:export', 3, 2, 500, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1043, '登录查询', 'system:login-log:query', 3, 1, 501, '#', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1045, '日志导出', 'system:login-log:export', 3, 3, 501, '#', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1046, '令牌列表', 'system:oauth2-token:page', 3, 1, 109, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-05-09 23:54:42', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1048, '令牌删除', 'system:oauth2-token:delete', 3, 2, 109, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-05-09 23:54:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1050, '任务新增', 'infra:job:create', 3, 2, 110, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1051, '任务修改', 'infra:job:update', 3, 3, 110, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1052, '任务删除', 'infra:job:delete', 3, 4, 110, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1053, '状态修改', 'infra:job:update', 3, 5, 110, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1054, '任务导出', 'infra:job:export', 3, 7, 110, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1056, '生成修改', 'infra:codegen:update', 3, 2, 115, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1057, '生成删除', 'infra:codegen:delete', 3, 3, 115, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1058, '导入代码', 'infra:codegen:create', 3, 2, 115, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1059, '预览代码', 'infra:codegen:preview', 3, 4, 115, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1060, '生成代码', 'infra:codegen:download', 3, 5, 115, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1063, '设置角色菜单权限', 'system:permission:assign-role-menu', 3, 6, 101, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-01-06 17:53:44', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1064, '设置角色数据权限', 'system:permission:assign-role-data-scope', 3, 7, 101, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-01-06 17:56:31', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1065, '设置用户角色', 'system:permission:assign-user-role', 3, 8, 101, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-01-07 10:23:28', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1066, '获得 Redis 监控信息', 'infra:redis:get-monitor-info', 3, 1, 113, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-01-26 01:02:31', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1067, '获得 Redis Key 列表', 'infra:redis:get-key-list', 3, 2, 113, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-01-26 01:02:52', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1070, '代码生成案例', '', 1, 1, 2, 'demo', 'ep:aim', 'infra/testDemo/index', NULL, 0, b'1', b'1', b'1', '', '2021-02-06 12:42:49', '1', '2023-11-15 23:45:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1075, '任务触发', 'infra:job:trigger', 3, 8, 110, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-02-07 13:03:10', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1077, '链路追踪', '', 2, 4, 2740, 'skywalking', 'fa:eye', 'infra/skywalking/index', 'InfraSkyWalking', 0, b'1', b'1', b'1', '', '2021-02-08 20:41:31', '1', '2024-04-23 00:07:15', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1078, '访问日志', '', 2, 1, 1083, 'api-access-log', 'ep:place', 'infra/apiAccessLog/index', 'InfraApiAccessLog', 0, b'1', b'1', b'1', '', '2021-02-26 01:32:59', '1', '2024-02-29 08:54:57', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1082, '日志导出', 'infra:api-access-log:export', 3, 2, 1078, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-02-26 01:32:59', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1083, 'API 日志', '', 2, 4, 2, 'log', 'fa:tasks', NULL, NULL, 0, b'1', b'1', b'1', '', '2021-02-26 02:18:24', '1', '2024-04-22 23:58:36', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1084, '错误日志', 'infra:api-error-log:query', 2, 2, 1083, 'api-error-log', 'ep:warning-filled', 'infra/apiErrorLog/index', 'InfraApiErrorLog', 0, b'1', b'1', b'1', '', '2021-02-26 07:53:20', '1', '2024-02-29 08:55:17', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1085, '日志处理', 'infra:api-error-log:update-status', 3, 2, 1084, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-02-26 07:53:20', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1086, '日志导出', 'infra:api-error-log:export', 3, 3, 1084, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-02-26 07:53:20', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1087, '任务查询', 'infra:job:query', 3, 1, 110, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2021-03-10 01:26:19', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1088, '日志查询', 'infra:api-access-log:query', 3, 1, 1078, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2021-03-10 01:28:04', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1089, '日志查询', 'infra:api-error-log:query', 3, 1, 1084, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2021-03-10 01:29:09', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1090, '文件列表', '', 2, 5, 1243, 'file', 'ep:upload-filled', 'infra/file/index', 'InfraFile', 0, b'1', b'1', b'1', '', '2021-03-12 20:16:20', '1', '2024-02-29 08:53:02', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1091, '文件查询', 'infra:file:query', 3, 1, 1090, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-03-12 20:16:20', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1092, '文件删除', 'infra:file:delete', 3, 4, 1090, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-03-12 20:16:20', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1093, '短信管理', '', 1, 1, 2739, 'sms', 'ep:message', NULL, NULL, 0, b'1', b'1', b'1', '1', '2021-04-05 01:10:16', '1', '2024-04-22 23:56:03', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1094, '短信渠道', '', 2, 0, 1093, 'sms-channel', 'fa:stack-exchange', 'system/sms/channel/index', 'SystemSmsChannel', 0, b'1', b'1', b'1', '', '2021-04-01 11:07:15', '1', '2024-02-29 01:15:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1095, '短信渠道查询', 'system:sms-channel:query', 3, 1, 1094, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1096, '短信渠道创建', 'system:sms-channel:create', 3, 2, 1094, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1097, '短信渠道更新', 'system:sms-channel:update', 3, 3, 1094, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1098, '短信渠道删除', 'system:sms-channel:delete', 3, 4, 1094, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1100, '短信模板', '', 2, 1, 1093, 'sms-template', 'ep:connection', 'system/sms/template/index', 'SystemSmsTemplate', 0, b'1', b'1', b'1', '', '2021-04-01 17:35:17', '1', '2024-02-29 01:16:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1101, '短信模板查询', 'system:sms-template:query', 3, 1, 1100, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1102, '短信模板创建', 'system:sms-template:create', 3, 2, 1100, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1103, '短信模板更新', 'system:sms-template:update', 3, 3, 1100, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1104, '短信模板删除', 'system:sms-template:delete', 3, 4, 1100, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1105, '短信模板导出', 'system:sms-template:export', 3, 5, 1100, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1106, '发送测试短信', 'system:sms-template:send-sms', 3, 6, 1100, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2021-04-11 00:26:40', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1107, '短信日志', '', 2, 2, 1093, 'sms-log', 'fa:edit', 'system/sms/log/index', 'SystemSmsLog', 0, b'1', b'1', b'1', '', '2021-04-11 08:37:05', '1', '2024-02-29 08:49:02', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1108, '短信日志查询', 'system:sms-log:query', 3, 1, 1107, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-04-11 08:37:05', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1109, '短信日志导出', 'system:sms-log:export', 3, 5, 1107, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-04-11 08:37:05', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1117, '支付管理', '', 1, 30, 0, '/pay', 'ep:money', NULL, NULL, 0, b'1', b'1', b'1', '1', '2021-12-25 16:43:41', '1', '2024-02-29 08:58:38', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1118, '请假查询', '', 2, 0, 5, 'leave', 'fa:leanpub', 'bpm/oa/leave/index', 'BpmOALeave', 0, b'1', b'1', b'1', '', '2021-09-20 08:51:03', '1', '2024-02-29 12:38:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1119, '请假申请查询', 'bpm:oa-leave:query', 3, 1, 1118, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-09-20 08:51:03', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1120, '请假申请创建', 'bpm:oa-leave:create', 3, 2, 1118, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-09-20 08:51:03', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1126, '应用信息', '', 2, 1, 1117, 'app', 'fa:apple', 'pay/app/index', 'PayApp', 0, b'1', b'1', b'1', '', '2021-11-10 01:13:30', '1', '2024-02-29 08:59:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1127, '支付应用信息查询', 'pay:app:query', 3, 1, 1126, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1128, '支付应用信息创建', 'pay:app:create', 3, 2, 1126, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1129, '支付应用信息更新', 'pay:app:update', 3, 3, 1126, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1130, '支付应用信息删除', 'pay:app:delete', 3, 4, 1126, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1132, '秘钥解析', 'pay:channel:parsing', 3, 6, 1129, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2021-11-08 15:15:47', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1133, '支付商户信息查询', 'pay:merchant:query', 3, 1, 1132, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1134, '支付商户信息创建', 'pay:merchant:create', 3, 2, 1132, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1135, '支付商户信息更新', 'pay:merchant:update', 3, 3, 1132, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1136, '支付商户信息删除', 'pay:merchant:delete', 3, 4, 1132, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1137, '支付商户信息导出', 'pay:merchant:export', 3, 5, 1132, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1138, '租户列表', '', 2, 0, 1224, 'list', 'ep:house', 'system/tenant/index', 'SystemTenant', 0, b'1', b'1', b'1', '', '2021-12-14 12:31:43', '1', '2024-02-29 01:01:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1139, '租户查询', 'system:tenant:query', 3, 1, 1138, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1140, '租户创建', 'system:tenant:create', 3, 2, 1138, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1141, '租户更新', 'system:tenant:update', 3, 3, 1138, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1142, '租户删除', 'system:tenant:delete', 3, 4, 1138, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1143, '租户导出', 'system:tenant:export', 3, 5, 1138, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1150, '秘钥解析', '', 3, 6, 1129, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2021-11-08 15:15:47', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1161, '退款订单', '', 2, 3, 1117, 'refund', 'fa:registered', 'pay/refund/index', 'PayRefund', 0, b'1', b'1', b'1', '', '2021-12-25 08:29:07', '1', '2024-02-29 08:59:20', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1162, '退款订单查询', 'pay:refund:query', 3, 1, 1161, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1163, '退款订单创建', 'pay:refund:create', 3, 2, 1161, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1164, '退款订单更新', 'pay:refund:update', 3, 3, 1161, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1165, '退款订单删除', 'pay:refund:delete', 3, 4, 1161, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1166, '退款订单导出', 'pay:refund:export', 3, 5, 1161, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1173, '支付订单', '', 2, 2, 1117, 'order', 'fa:cc-paypal', 'pay/order/index', 'PayOrder', 0, b'1', b'1', b'1', '', '2021-12-25 08:49:43', '1', '2024-02-29 08:59:43', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1174, '支付订单查询', 'pay:order:query', 3, 1, 1173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1175, '支付订单创建', 'pay:order:create', 3, 2, 1173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1176, '支付订单更新', 'pay:order:update', 3, 3, 1173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1177, '支付订单删除', 'pay:order:delete', 3, 4, 1173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1178, '支付订单导出', 'pay:order:export', 3, 5, 1173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1185, '工作流程', '', 1, 50, 0, '/bpm', 'fa:medium', NULL, NULL, 0, b'1', b'1', b'1', '1', '2021-12-30 20:26:36', '1', '2024-02-29 12:43:43', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1186, '流程管理', '', 1, 10, 1185, 'manager', 'fa:dedent', NULL, NULL, 0, b'1', b'1', b'1', '1', '2021-12-30 20:28:30', '1', '2024-02-29 12:36:02', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1187, '流程表单', '', 2, 2, 1186, 'form', 'fa:hdd-o', 'bpm/form/index', 'BpmForm', 0, b'1', b'1', b'1', '', '2021-12-30 12:38:22', '1', '2024-03-19 12:25:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1188, '表单查询', 'bpm:form:query', 3, 1, 1187, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1189, '表单创建', 'bpm:form:create', 3, 2, 1187, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1190, '表单更新', 'bpm:form:update', 3, 3, 1187, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1191, '表单删除', 'bpm:form:delete', 3, 4, 1187, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1192, '表单导出', 'bpm:form:export', 3, 5, 1187, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1193, '流程模型', '', 2, 1, 1186, 'model', 'fa-solid:project-diagram', 'bpm/model/index', 'BpmModel', 0, b'1', b'1', b'1', '1', '2021-12-31 23:24:58', '1', '2024-03-19 12:25:19', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1194, '模型查询', 'bpm:model:query', 3, 1, 1193, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-01-03 19:01:10', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1195, '模型创建', 'bpm:model:create', 3, 2, 1193, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-01-03 19:01:24', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1196, '模型导入', 'bpm:model:import', 3, 3, 1193, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-01-03 19:01:35', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1197, '模型更新', 'bpm:model:update', 3, 4, 1193, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-01-03 19:02:28', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1198, '模型删除', 'bpm:model:delete', 3, 5, 1193, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-01-03 19:02:43', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1199, '模型发布', 'bpm:model:deploy', 3, 6, 1193, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-01-03 19:03:24', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1200, '审批中心', '', 2, 20, 1185, 'task', 'fa:tasks', NULL, NULL, 0, b'1', b'1', b'1', '1', '2022-01-07 23:51:48', '1', '2024-03-21 00:33:15', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1201, '我的流程', '', 2, 1, 1200, 'my', 'fa-solid:book', 'bpm/processInstance/index', 'BpmProcessInstanceMy', 0, b'1', b'1', b'1', '', '2022-01-07 15:53:44', '1', '2024-03-21 23:52:12', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1202, '流程实例的查询', 'bpm:process-instance:query', 3, 1, 1201, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-01-07 15:53:44', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1207, '待办任务', '', 2, 10, 1200, 'todo', 'fa:slack', 'bpm/task/todo/index', 'BpmTodoTask', 0, b'1', b'1', b'1', '1', '2022-01-08 10:33:37', '1', '2024-02-29 12:37:39', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1208, '已办任务', '', 2, 20, 1200, 'done', 'fa:delicious', 'bpm/task/done/index', 'BpmDoneTask', 0, b'1', b'1', b'1', '1', '2022-01-08 10:34:13', '1', '2024-02-29 12:37:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1209, '用户分组', '', 2, 4, 1186, 'user-group', 'fa:user-secret', 'bpm/group/index', 'BpmUserGroup', 0, b'1', b'1', b'1', '', '2022-01-14 02:14:20', '1', '2024-03-21 23:55:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1210, '用户组查询', 'bpm:user-group:query', 3, 1, 1209, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1211, '用户组创建', 'bpm:user-group:create', 3, 2, 1209, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1212, '用户组更新', 'bpm:user-group:update', 3, 3, 1209, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1213, '用户组删除', 'bpm:user-group:delete', 3, 4, 1209, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1215, '流程定义查询', 'bpm:process-definition:query', 3, 10, 1193, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-01-23 00:21:43', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1216, '流程任务分配规则查询', 'bpm:task-assign-rule:query', 3, 20, 1193, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-01-23 00:26:53', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1217, '流程任务分配规则创建', 'bpm:task-assign-rule:create', 3, 21, 1193, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-01-23 00:28:15', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1218, '流程任务分配规则更新', 'bpm:task-assign-rule:update', 3, 22, 1193, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-01-23 00:28:41', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1219, '流程实例的创建', 'bpm:process-instance:create', 3, 2, 1201, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-01-23 00:36:15', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1220, '流程实例的取消', 'bpm:process-instance:cancel', 3, 3, 1201, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-01-23 00:36:33', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1221, '流程任务的查询', 'bpm:task:query', 3, 1, 1207, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-01-23 00:38:52', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1222, '流程任务的更新', 'bpm:task:update', 3, 2, 1207, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-01-23 00:39:24', '1', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1224, '租户管理', '', 2, 0, 1, 'tenant', 'fa-solid:house-user', NULL, NULL, 0, b'1', b'1', b'1', '1', '2022-02-20 01:41:13', '1', '2024-02-29 00:59:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1225, '租户套餐', '', 2, 0, 1224, 'package', 'fa:bars', 'system/tenantPackage/index', 'SystemTenantPackage', 0, b'1', b'1', b'1', '', '2022-02-19 17:44:06', '1', '2024-02-29 01:01:43', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1226, '租户套餐查询', 'system:tenant-package:query', 3, 1, 1225, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1227, '租户套餐创建', 'system:tenant-package:create', 3, 2, 1225, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1228, '租户套餐更新', 'system:tenant-package:update', 3, 3, 1225, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1229, '租户套餐删除', 'system:tenant-package:delete', 3, 4, 1225, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1237, '文件配置', '', 2, 0, 1243, 'file-config', 'fa-solid:file-signature', 'infra/fileConfig/index', 'InfraFileConfig', 0, b'1', b'1', b'1', '', '2022-03-15 14:35:28', '1', '2024-02-29 08:52:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1238, '文件配置查询', 'infra:file-config:query', 3, 1, 1237, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1239, '文件配置创建', 'infra:file-config:create', 3, 2, 1237, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1240, '文件配置更新', 'infra:file-config:update', 3, 3, 1237, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1241, '文件配置删除', 'infra:file-config:delete', 3, 4, 1237, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1242, '文件配置导出', 'infra:file-config:export', 3, 5, 1237, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1243, '文件管理', '', 2, 6, 2, 'file', 'ep:files', NULL, '', 0, b'1', b'1', b'1', '1', '2022-03-16 23:47:40', '1', '2024-04-23 00:02:11', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1254, '作者动态', '', 1, 0, 0, 'https://www.iocoder.cn', 'ep:avatar', NULL, NULL, 0, b'1', b'1', b'1', '1', '2022-04-23 01:03:15', '1', '2023-12-08 23:40:01', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1255, '数据源配置', '', 2, 1, 2, 'data-source-config', 'ep:data-analysis', 'infra/dataSourceConfig/index', 'InfraDataSourceConfig', 0, b'1', b'1', b'1', '', '2022-04-27 14:37:32', '1', '2024-02-29 08:51:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1256, '数据源配置查询', 'infra:data-source-config:query', 3, 1, 1255, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1257, '数据源配置创建', 'infra:data-source-config:create', 3, 2, 1255, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1258, '数据源配置更新', 'infra:data-source-config:update', 3, 3, 1255, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1259, '数据源配置删除', 'infra:data-source-config:delete', 3, 4, 1255, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1260, '数据源配置导出', 'infra:data-source-config:export', 3, 5, 1255, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1261, 'OAuth 2.0', '', 2, 10, 1, 'oauth2', 'fa:dashcube', NULL, NULL, 0, b'1', b'1', b'1', '1', '2022-05-09 23:38:17', '1', '2024-02-29 01:12:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1263, '应用管理', '', 2, 0, 1261, 'oauth2/application', 'fa:hdd-o', 'system/oauth2/client/index', 'SystemOAuth2Client', 0, b'1', b'1', b'1', '', '2022-05-10 16:26:33', '1', '2024-02-29 01:13:14', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1264, '客户端查询', 'system:oauth2-client:query', 3, 1, 1263, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:06', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1265, '客户端创建', 'system:oauth2-client:create', 3, 2, 1263, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:23', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1266, '客户端更新', 'system:oauth2-client:update', 3, 3, 1263, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:28', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1267, '客户端删除', 'system:oauth2-client:delete', 3, 4, 1263, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:33', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1281, '报表管理', '', 2, 40, 0, '/report', 'ep:pie-chart', NULL, NULL, 0, b'1', b'1', b'1', '1', '2022-07-10 20:22:15', '1', '2024-02-29 12:33:03', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1282, '报表设计器', '', 2, 1, 1281, 'jimu-report', 'ep:trend-charts', 'report/jmreport/index', 'GoView', 0, b'1', b'1', b'1', '1', '2022-07-10 20:26:36', '1', '2024-02-29 12:33:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2000, '商品中心', '', 1, 60, 2362, 'product', 'fa:product-hunt', NULL, NULL, 0, b'1', b'1', b'1', '', '2022-07-29 15:53:53', '1', '2023-09-30 11:52:36', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2002, '商品分类', '', 2, 2, 2000, 'category', 'ep:cellphone', 'mall/product/category/index', 'ProductCategory', 0, b'1', b'1', b'1', '', '2022-07-29 15:53:53', '1', '2023-08-21 10:27:15', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2003, '分类查询', 'product:category:query', 3, 1, 2002, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-29 15:53:53', '', '2022-07-29 15:53:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2004, '分类创建', 'product:category:create', 3, 2, 2002, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-29 15:53:53', '', '2022-07-29 15:53:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2005, '分类更新', 'product:category:update', 3, 3, 2002, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-29 15:53:53', '', '2022-07-29 15:53:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2006, '分类删除', 'product:category:delete', 3, 4, 2002, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-29 15:53:53', '', '2022-07-29 15:53:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2008, '商品品牌', '', 2, 3, 2000, 'brand', 'ep:chicken', 'mall/product/brand/index', 'ProductBrand', 0, b'1', b'1', b'1', '', '2022-07-30 13:52:44', '1', '2023-08-21 10:27:28', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2009, '品牌查询', 'product:brand:query', 3, 1, 2008, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2010, '品牌创建', 'product:brand:create', 3, 2, 2008, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2011, '品牌更新', 'product:brand:update', 3, 3, 2008, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2012, '品牌删除', 'product:brand:delete', 3, 4, 2008, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2014, '商品列表', '', 2, 1, 2000, 'spu', 'ep:apple', 'mall/product/spu/index', 'ProductSpu', 0, b'1', b'1', b'1', '', '2022-07-30 14:22:58', '1', '2023-08-21 10:27:01', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2015, '商品查询', 'product:spu:query', 3, 1, 2014, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2016, '商品创建', 'product:spu:create', 3, 2, 2014, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2017, '商品更新', 'product:spu:update', 3, 3, 2014, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2018, '商品删除', 'product:spu:delete', 3, 4, 2014, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2019, '商品属性', '', 2, 4, 2000, 'property', 'ep:cold-drink', 'mall/product/property/index', 'ProductProperty', 0, b'1', b'1', b'1', '', '2022-08-01 14:55:35', '1', '2023-08-26 11:01:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2020, '规格查询', 'product:property:query', 3, 1, 2019, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-08-01 14:55:35', '', '2022-12-12 20:26:24', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2021, '规格创建', 'product:property:create', 3, 2, 2019, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-08-01 14:55:35', '', '2022-12-12 20:26:30', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2022, '规格更新', 'product:property:update', 3, 3, 2019, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-08-01 14:55:35', '', '2022-12-12 20:26:33', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2023, '规格删除', 'product:property:delete', 3, 4, 2019, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-08-01 14:55:35', '', '2022-12-12 20:26:37', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2025, 'Banner', '', 2, 100, 2387, 'banner', 'fa:bandcamp', 'mall/promotion/banner/index', NULL, 0, b'1', b'1', b'1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:06', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2026, 'Banner查询', 'promotion:banner:query', 3, 1, 2025, '', '', '', '', 0, b'1', b'1', b'1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2027, 'Banner创建', 'promotion:banner:create', 3, 2, 2025, '', '', '', '', 0, b'1', b'1', b'1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:23', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2028, 'Banner更新', 'promotion:banner:update', 3, 3, 2025, '', '', '', '', 0, b'1', b'1', b'1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:28', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2029, 'Banner删除', 'promotion:banner:delete', 3, 4, 2025, '', '', '', '', 0, b'1', b'1', b'1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:36', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2030, '营销中心', '', 1, 70, 2362, 'promotion', 'ep:present', NULL, NULL, 0, b'1', b'1', b'1', '1', '2022-10-31 21:25:09', '1', '2023-09-30 11:54:27', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2032, '优惠劵列表', '', 2, 1, 2365, 'template', 'ep:discount', 'mall/promotion/coupon/template/index', 'PromotionCouponTemplate', 0, b'1', b'1', b'1', '', '2022-10-31 22:27:14', '1', '2023-10-03 12:40:06', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2033, '优惠劵模板查询', 'promotion:coupon-template:query', 3, 1, 2032, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-10-31 22:27:14', '', '2022-10-31 22:27:14', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2034, '优惠劵模板创建', 'promotion:coupon-template:create', 3, 2, 2032, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-10-31 22:27:14', '', '2022-10-31 22:27:14', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2035, '优惠劵模板更新', 'promotion:coupon-template:update', 3, 3, 2032, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-10-31 22:27:14', '', '2022-10-31 22:27:14', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2036, '优惠劵模板删除', 'promotion:coupon-template:delete', 3, 4, 2032, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-10-31 22:27:14', '', '2022-10-31 22:27:14', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2038, '领取记录', '', 2, 2, 2365, 'list', 'ep:collection-tag', 'mall/promotion/coupon/index', 'PromotionCoupon', 0, b'1', b'1', b'1', '', '2022-11-03 23:21:31', '1', '2023-10-03 12:55:30', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2039, '优惠劵查询', 'promotion:coupon:query', 3, 1, 2038, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-03 23:21:31', '', '2022-11-03 23:21:31', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2040, '优惠劵删除', 'promotion:coupon:delete', 3, 4, 2038, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-03 23:21:31', '', '2022-11-03 23:21:31', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2041, '满减送', '', 2, 10, 2390, 'reward-activity', 'ep:goblet-square-full', 'mall/promotion/rewardActivity/index', 'PromotionRewardActivity', 0, b'1', b'1', b'1', '', '2022-11-04 23:47:49', '1', '2023-10-21 19:24:46', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2042, '满减送活动查询', 'promotion:reward-activity:query', 3, 1, 2041, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-04 23:47:49', '', '2022-11-04 23:47:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2043, '满减送活动创建', 'promotion:reward-activity:create', 3, 2, 2041, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-04 23:47:49', '', '2022-11-04 23:47:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2044, '满减送活动更新', 'promotion:reward-activity:update', 3, 3, 2041, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-04 23:47:50', '', '2022-11-04 23:47:50', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2045, '满减送活动删除', 'promotion:reward-activity:delete', 3, 4, 2041, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-04 23:47:50', '', '2022-11-04 23:47:50', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2046, '满减送活动关闭', 'promotion:reward-activity:close', 3, 5, 2041, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2022-11-05 10:42:53', '1', '2022-11-05 10:42:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2047, '限时折扣', '', 2, 7, 2390, 'discount-activity', 'ep:timer', 'mall/promotion/discountActivity/index', 'PromotionDiscountActivity', 0, b'1', b'1', b'1', '', '2022-11-05 17:12:15', '1', '2023-10-21 19:24:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2048, '限时折扣活动查询', 'promotion:discount-activity:query', 3, 1, 2047, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-05 17:12:15', '', '2022-11-05 17:12:15', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2049, '限时折扣活动创建', 'promotion:discount-activity:create', 3, 2, 2047, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-05 17:12:15', '', '2022-11-05 17:12:15', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2050, '限时折扣活动更新', 'promotion:discount-activity:update', 3, 3, 2047, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-05 17:12:16', '', '2022-11-05 17:12:16', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2051, '限时折扣活动删除', 'promotion:discount-activity:delete', 3, 4, 2047, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-05 17:12:16', '', '2022-11-05 17:12:16', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2052, '限时折扣活动关闭', 'promotion:discount-activity:close', 3, 5, 2047, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-05 17:12:16', '', '2022-11-05 17:12:16', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2059, '秒杀商品', '', 2, 2, 2209, 'activity', 'ep:basketball', 'mall/promotion/seckill/activity/index', 'PromotionSeckillActivity', 0, b'1', b'1', b'1', '', '2022-11-06 22:24:49', '1', '2023-06-24 18:57:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2060, '秒杀活动查询', 'promotion:seckill-activity:query', 3, 1, 2059, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-06 22:24:49', '', '2022-11-06 22:24:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2061, '秒杀活动创建', 'promotion:seckill-activity:create', 3, 2, 2059, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-06 22:24:49', '', '2022-11-06 22:24:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2062, '秒杀活动更新', 'promotion:seckill-activity:update', 3, 3, 2059, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-06 22:24:49', '', '2022-11-06 22:24:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2063, '秒杀活动删除', 'promotion:seckill-activity:delete', 3, 4, 2059, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-06 22:24:49', '', '2022-11-06 22:24:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2066, '秒杀时段', '', 2, 1, 2209, 'config', 'ep:baseball', 'mall/promotion/seckill/config/index', 'PromotionSeckillConfig', 0, b'1', b'1', b'1', '', '2022-11-15 19:46:50', '1', '2023-06-24 18:57:14', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2067, '秒杀时段查询', 'promotion:seckill-config:query', 3, 1, 2066, '', '', '', '', 0, b'1', b'1', b'1', '', '2022-11-15 19:46:51', '1', '2023-06-24 17:50:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2068, '秒杀时段创建', 'promotion:seckill-config:create', 3, 2, 2066, '', '', '', '', 0, b'1', b'1', b'1', '', '2022-11-15 19:46:51', '1', '2023-06-24 17:48:39', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2069, '秒杀时段更新', 'promotion:seckill-config:update', 3, 3, 2066, '', '', '', '', 0, b'1', b'1', b'1', '', '2022-11-15 19:46:51', '1', '2023-06-24 17:50:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2070, '秒杀时段删除', 'promotion:seckill-config:delete', 3, 4, 2066, '', '', '', '', 0, b'1', b'1', b'1', '', '2022-11-15 19:46:51', '1', '2023-06-24 17:50:32', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2072, '订单中心', '', 1, 65, 2362, 'trade', 'ep:eleme', NULL, NULL, 0, b'1', b'1', b'1', '1', '2022-11-19 18:57:19', '1', '2023-09-30 11:54:07', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2073, '售后退款', '', 2, 2, 2072, 'after-sale', 'ep:refrigerator', 'mall/trade/afterSale/index', 'TradeAfterSale', 0, b'1', b'1', b'1', '', '2022-11-19 20:15:32', '1', '2023-10-01 21:42:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2074, '售后查询', 'trade:after-sale:query', 3, 1, 2073, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-11-19 20:15:33', '1', '2022-12-10 21:04:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2075, '秒杀活动关闭', 'promotion:seckill-activity:close', 3, 5, 2059, '', '', '', '', 0, b'1', b'1', b'1', '1', '2022-11-28 20:20:15', '1', '2023-10-03 18:34:28', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2076, '订单列表', '', 2, 1, 2072, 'order', 'ep:list', 'mall/trade/order/index', 'TradeOrder', 0, b'1', b'1', b'1', '1', '2022-12-10 21:05:44', '1', '2023-10-01 21:42:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2083, '地区管理', '', 2, 14, 1, 'area', 'fa:map-marker', 'system/area/index', 'SystemArea', 0, b'1', b'1', b'1', '1', '2022-12-23 17:35:05', '1', '2024-02-29 08:50:28', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2084, '公众号管理', '', 1, 100, 0, '/mp', 'ep:compass', NULL, NULL, 0, b'1', b'1', b'1', '1', '2023-01-01 20:11:04', '1', '2024-02-29 12:39:30', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2085, '账号管理', '', 2, 1, 2084, 'account', 'fa:user', 'mp/account/index', 'MpAccount', 0, b'1', b'1', b'1', '1', '2023-01-01 20:13:31', '1', '2024-02-29 12:42:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2086, '新增账号', 'mp:account:create', 3, 1, 2085, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-01 20:21:40', '1', '2023-01-07 17:32:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2087, '修改账号', 'mp:account:update', 3, 2, 2085, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-07 17:32:46', '1', '2023-01-07 17:32:46', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2088, '查询账号', 'mp:account:query', 3, 0, 2085, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-07 17:33:07', '1', '2023-01-07 17:33:07', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2089, '删除账号', 'mp:account:delete', 3, 3, 2085, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-07 17:33:21', '1', '2023-01-07 17:33:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2090, '生成二维码', 'mp:account:qr-code', 3, 4, 2085, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-07 17:33:58', '1', '2023-01-07 17:33:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2091, '清空 API 配额', 'mp:account:clear-quota', 3, 5, 2085, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-07 18:20:32', '1', '2023-01-07 18:20:59', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2092, '数据统计', 'mp:statistics:query', 2, 2, 2084, 'statistics', 'ep:trend-charts', 'mp/statistics/index', 'MpStatistics', 0, b'1', b'1', b'1', '1', '2023-01-07 20:17:36', '1', '2024-02-29 12:42:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2093, '标签管理', '', 2, 3, 2084, 'tag', 'ep:collection-tag', 'mp/tag/index', 'MpTag', 0, b'1', b'1', b'1', '1', '2023-01-08 11:37:32', '1', '2024-02-29 12:42:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2094, '查询标签', 'mp:tag:query', 3, 0, 2093, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-08 11:59:03', '1', '2023-01-08 11:59:03', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2095, '新增标签', 'mp:tag:create', 3, 1, 2093, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-08 11:59:23', '1', '2023-01-08 11:59:23', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2096, '修改标签', 'mp:tag:update', 3, 2, 2093, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-08 11:59:41', '1', '2023-01-08 11:59:41', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2097, '删除标签', 'mp:tag:delete', 3, 3, 2093, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-08 12:00:04', '1', '2023-01-08 12:00:13', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2098, '同步标签', 'mp:tag:sync', 3, 4, 2093, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-08 12:00:29', '1', '2023-01-08 12:00:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2099, '粉丝管理', '', 2, 4, 2084, 'user', 'fa:user-secret', 'mp/user/index', 'MpUser', 0, b'1', b'1', b'1', '1', '2023-01-08 16:51:20', '1', '2024-02-29 12:42:39', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2100, '查询粉丝', 'mp:user:query', 3, 0, 2099, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-08 17:16:59', '1', '2023-01-08 17:17:23', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2101, '修改粉丝', 'mp:user:update', 3, 1, 2099, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-08 17:17:11', '1', '2023-01-08 17:17:11', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2102, '同步粉丝', 'mp:user:sync', 3, 2, 2099, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-08 17:17:40', '1', '2023-01-08 17:17:40', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2103, '消息管理', '', 2, 5, 2084, 'message', 'ep:message', 'mp/message/index', 'MpMessage', 0, b'1', b'1', b'1', '1', '2023-01-08 18:44:19', '1', '2024-02-29 12:42:50', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2104, '图文发表记录', '', 2, 10, 2084, 'free-publish', 'ep:edit-pen', 'mp/freePublish/index', 'MpFreePublish', 0, b'1', b'1', b'1', '1', '2023-01-13 00:30:50', '1', '2024-02-29 12:43:31', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2105, '查询发布列表', 'mp:free-publish:query', 3, 1, 2104, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-13 07:19:17', '1', '2023-01-13 07:19:17', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2106, '发布草稿', 'mp:free-publish:submit', 3, 2, 2104, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-13 07:19:46', '1', '2023-01-13 07:19:46', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2107, '删除发布记录', 'mp:free-publish:delete', 3, 3, 2104, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-13 07:20:01', '1', '2023-01-13 07:20:01', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2108, '图文草稿箱', '', 2, 9, 2084, 'draft', 'ep:edit', 'mp/draft/index', 'MpDraft', 0, b'1', b'1', b'1', '1', '2023-01-13 07:40:21', '1', '2024-02-29 12:43:26', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2109, '新建草稿', 'mp:draft:create', 3, 1, 2108, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-13 23:15:30', '1', '2023-01-13 23:15:44', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2110, '修改草稿', 'mp:draft:update', 3, 2, 2108, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-14 10:08:47', '1', '2023-01-14 10:08:47', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2111, '查询草稿', 'mp:draft:query', 3, 0, 2108, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-14 10:09:01', '1', '2023-01-14 10:09:01', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2112, '删除草稿', 'mp:draft:delete', 3, 3, 2108, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-14 10:09:19', '1', '2023-01-14 10:09:19', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2113, '素材管理', '', 2, 8, 2084, 'material', 'ep:basketball', 'mp/material/index', 'MpMaterial', 0, b'1', b'1', b'1', '1', '2023-01-14 14:12:07', '1', '2024-02-29 12:43:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2114, '上传临时素材', 'mp:material:upload-temporary', 3, 1, 2113, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-14 15:33:55', '1', '2023-01-14 15:33:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2115, '上传永久素材', 'mp:material:upload-permanent', 3, 2, 2113, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-14 15:34:14', '1', '2023-01-14 15:34:14', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2116, '删除素材', 'mp:material:delete', 3, 3, 2113, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-14 15:35:37', '1', '2023-01-14 15:35:37', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2117, '上传图文图片', 'mp:material:upload-news-image', 3, 4, 2113, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-14 15:36:31', '1', '2023-01-14 15:36:31', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2118, '查询素材', 'mp:material:query', 3, 5, 2113, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-14 15:39:22', '1', '2023-01-14 15:39:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2119, '菜单管理', '', 2, 6, 2084, 'menu', 'ep:menu', 'mp/menu/index', 'MpMenu', 0, b'1', b'1', b'1', '1', '2023-01-14 17:43:54', '1', '2024-02-29 12:42:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2120, '自动回复', '', 2, 7, 2084, 'auto-reply', 'fa-solid:republican', 'mp/autoReply/index', 'MpAutoReply', 0, b'1', b'1', b'1', '1', '2023-01-15 22:13:09', '1', '2024-02-29 12:43:10', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2121, '查询回复', 'mp:auto-reply:query', 3, 0, 2120, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-16 22:28:41', '1', '2023-01-16 22:28:41', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2122, '新增回复', 'mp:auto-reply:create', 3, 1, 2120, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-16 22:28:54', '1', '2023-01-16 22:28:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2123, '修改回复', 'mp:auto-reply:update', 3, 2, 2120, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-16 22:29:05', '1', '2023-01-16 22:29:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2124, '删除回复', 'mp:auto-reply:delete', 3, 3, 2120, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-16 22:29:34', '1', '2023-01-16 22:29:34', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2125, '查询菜单', 'mp:menu:query', 3, 0, 2119, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-17 23:05:41', '1', '2023-01-17 23:05:41', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2126, '保存菜单', 'mp:menu:save', 3, 1, 2119, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-17 23:06:01', '1', '2023-01-17 23:06:01', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2127, '删除菜单', 'mp:menu:delete', 3, 2, 2119, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-17 23:06:16', '1', '2023-01-17 23:06:16', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2128, '查询消息', 'mp:message:query', 3, 0, 2103, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-17 23:07:14', '1', '2023-01-17 23:07:14', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2129, '发送消息', 'mp:message:send', 3, 1, 2103, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-17 23:07:26', '1', '2023-01-17 23:07:26', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2130, '邮箱管理', '', 2, 2, 2739, 'mail', 'fa-solid:mail-bulk', NULL, NULL, 0, b'1', b'1', b'1', '1', '2023-01-25 17:27:44', '1', '2024-04-22 23:56:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2131, '邮箱账号', '', 2, 0, 2130, 'mail-account', 'fa:universal-access', 'system/mail/account/index', 'SystemMailAccount', 0, b'1', b'1', b'1', '', '2023-01-25 09:33:48', '1', '2024-02-29 08:48:16', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2132, '账号查询', 'system:mail-account:query', 3, 1, 2131, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2133, '账号创建', 'system:mail-account:create', 3, 2, 2131, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2134, '账号更新', 'system:mail-account:update', 3, 3, 2131, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2135, '账号删除', 'system:mail-account:delete', 3, 4, 2131, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2136, '邮件模版', '', 2, 0, 2130, 'mail-template', 'fa:tag', 'system/mail/template/index', 'SystemMailTemplate', 0, b'1', b'1', b'1', '', '2023-01-25 12:05:31', '1', '2024-02-29 08:48:41', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2137, '模版查询', 'system:mail-template:query', 3, 1, 2136, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2138, '模版创建', 'system:mail-template:create', 3, 2, 2136, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2139, '模版更新', 'system:mail-template:update', 3, 3, 2136, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2140, '模版删除', 'system:mail-template:delete', 3, 4, 2136, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2141, '邮件记录', '', 2, 0, 2130, 'mail-log', 'fa:edit', 'system/mail/log/index', 'SystemMailLog', 0, b'1', b'1', b'1', '', '2023-01-26 02:16:50', '1', '2024-02-29 08:48:51', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2142, '日志查询', 'system:mail-log:query', 3, 1, 2141, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-01-26 02:16:50', '', '2023-01-26 02:16:50', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2143, '发送测试邮件', 'system:mail-template:send-mail', 3, 5, 2136, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-26 23:29:15', '1', '2023-01-26 23:29:15', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2144, '站内信管理', '', 1, 3, 2739, 'notify', 'ep:message-box', NULL, NULL, 0, b'1', b'1', b'1', '1', '2023-01-28 10:25:18', '1', '2024-04-22 23:56:12', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2145, '模板管理', '', 2, 0, 2144, 'notify-template', 'fa:archive', 'system/notify/template/index', 'SystemNotifyTemplate', 0, b'1', b'1', b'1', '', '2023-01-28 02:26:42', '1', '2024-02-29 08:49:14', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2146, '站内信模板查询', 'system:notify-template:query', 3, 1, 2145, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2147, '站内信模板创建', 'system:notify-template:create', 3, 2, 2145, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2148, '站内信模板更新', 'system:notify-template:update', 3, 3, 2145, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2149, '站内信模板删除', 'system:notify-template:delete', 3, 4, 2145, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2150, '发送测试站内信', 'system:notify-template:send-notify', 3, 5, 2145, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-01-28 10:54:43', '1', '2023-01-28 10:54:43', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2151, '消息记录', '', 2, 0, 2144, 'notify-message', 'fa:edit', 'system/notify/message/index', 'SystemNotifyMessage', 0, b'1', b'1', b'1', '', '2023-01-28 04:28:22', '1', '2024-02-29 08:49:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2152, '站内信消息查询', 'system:notify-message:query', 3, 1, 2151, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-01-28 04:28:22', '', '2023-01-28 04:28:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2153, '大屏设计器', '', 2, 2, 1281, 'go-view', 'fa:area-chart', 'report/goview/index', 'JimuReport', 0, b'1', b'1', b'1', '1', '2023-02-07 00:03:19', '1', '2024-02-29 12:34:02', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2154, '创建项目', 'report:go-view-project:create', 3, 1, 2153, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-02-07 19:25:14', '1', '2023-02-07 19:25:14', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2155, '更新项目', 'report:go-view-project:update', 3, 2, 2153, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-02-07 19:25:34', '1', '2024-04-24 20:01:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2156, '查询项目', 'report:go-view-project:query', 3, 0, 2153, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-02-07 19:25:53', '1', '2023-02-07 19:25:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2157, '使用 SQL 查询数据', 'report:go-view-data:get-by-sql', 3, 3, 2153, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-02-07 19:26:15', '1', '2023-02-07 19:26:15', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2158, '使用 HTTP 查询数据', 'report:go-view-data:get-by-http', 3, 4, 2153, '', '', '', NULL, 0, b'1', b'1', b'1', '1', '2023-02-07 19:26:35', '1', '2023-02-07 19:26:35', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2159, 'Boot 开发文档', '', 1, 1, 0, 'https://doc.iocoder.cn/', 'ep:document', NULL, NULL, 0, b'1', b'1', b'1', '1', '2023-02-10 22:46:28', '1', '2023-12-02 21:32:20', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2160, 'Cloud 开发文档', '', 1, 2, 0, 'https://cloud.iocoder.cn', 'ep:document-copy', NULL, NULL, 0, b'1', b'1', b'1', '1', '2023-02-10 22:47:07', '1', '2023-12-02 21:32:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2161, '接入示例', '', 1, 99, 1117, 'demo', 'fa-solid:dragon', 'pay/demo/index', NULL, 0, b'1', b'1', b'1', '', '2023-02-11 14:21:42', '1', '2024-01-18 23:50:00', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2162, '商品导出', 'product:spu:export', 3, 5, 2014, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2164, '配送管理', '', 1, 3, 2072, 'delivery', 'ep:shopping-cart', '', '', 0, b'1', b'1', b'1', '1', '2023-05-18 09:18:02', '1', '2023-09-28 10:58:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2165, '快递发货', '', 1, 0, 2164, 'express', 'ep:bicycle', '', '', 0, b'1', b'1', b'1', '1', '2023-05-18 09:22:06', '1', '2023-08-30 21:02:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2166, '门店自提', '', 1, 1, 2164, 'pick-up-store', 'ep:add-location', '', '', 0, b'1', b'1', b'1', '1', '2023-05-18 09:23:14', '1', '2023-08-30 21:03:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2167, '快递公司', '', 2, 0, 2165, 'express', 'ep:compass', 'mall/trade/delivery/express/index', 'Express', 0, b'1', b'1', b'1', '1', '2023-05-18 09:27:21', '1', '2023-08-30 21:02:59', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2168, '快递公司查询', 'trade:delivery:express:query', 3, 1, 2167, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2169, '快递公司创建', 'trade:delivery:express:create', 3, 2, 2167, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2170, '快递公司更新', 'trade:delivery:express:update', 3, 3, 2167, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2171, '快递公司删除', 'trade:delivery:express:delete', 3, 4, 2167, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2172, '快递公司导出', 'trade:delivery:express:export', 3, 5, 2167, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2173, '运费模版', 'trade:delivery:express-template:query', 2, 1, 2165, 'express-template', 'ep:coordinate', 'mall/trade/delivery/expressTemplate/index', 'ExpressTemplate', 0, b'1', b'1', b'1', '1', '2023-05-20 06:48:10', '1', '2023-08-30 21:03:13', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2174, '快递运费模板查询', 'trade:delivery:express-template:query', 3, 1, 2173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2175, '快递运费模板创建', 'trade:delivery:express-template:create', 3, 2, 2173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2176, '快递运费模板更新', 'trade:delivery:express-template:update', 3, 3, 2173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2177, '快递运费模板删除', 'trade:delivery:express-template:delete', 3, 4, 2173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2178, '快递运费模板导出', 'trade:delivery:express-template:export', 3, 5, 2173, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2179, '门店管理', '', 2, 1, 2166, 'pick-up-store', 'ep:basketball', 'mall/trade/delivery/pickUpStore/index', 'PickUpStore', 0, b'1', b'1', b'1', '1', '2023-05-25 10:50:00', '1', '2023-08-30 21:03:28', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2180, '自提门店查询', 'trade:delivery:pick-up-store:query', 3, 1, 2179, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2181, '自提门店创建', 'trade:delivery:pick-up-store:create', 3, 2, 2179, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2182, '自提门店更新', 'trade:delivery:pick-up-store:update', 3, 3, 2179, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2183, '自提门店删除', 'trade:delivery:pick-up-store:delete', 3, 4, 2179, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2184, '自提门店导出', 'trade:delivery:pick-up-store:export', 3, 5, 2179, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2209, '秒杀活动', '', 2, 3, 2030, 'seckill', 'ep:place', '', '', 0, b'1', b'1', b'1', '1', '2023-06-24 17:39:13', '1', '2023-06-24 18:55:15', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2262, '会员中心', '', 1, 55, 0, '/member', 'ep:bicycle', NULL, NULL, 0, b'1', b'1', b'1', '1', '2023-06-10 00:42:03', '1', '2023-08-20 09:23:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2275, '会员配置', '', 2, 0, 2262, 'config', 'fa:archive', 'member/config/index', 'MemberConfig', 0, b'1', b'1', b'1', '', '2023-06-10 02:07:44', '1', '2023-10-01 23:41:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2276, '会员配置查询', 'member:config:query', 3, 1, 2275, '', '', '', '', 0, b'1', b'1', b'1', '', '2023-06-10 02:07:44', '1', '2024-04-24 19:48:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2277, '会员配置保存', 'member:config:save', 3, 2, 2275, '', '', '', '', 0, b'1', b'1', b'1', '', '2023-06-10 02:07:44', '1', '2024-04-24 19:49:28', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2281, '签到配置', '', 2, 2, 2300, 'config', 'ep:calendar', 'member/signin/config/index', 'SignInConfig', 0, b'1', b'1', b'1', '', '2023-06-10 03:26:12', '1', '2023-08-20 19:25:51', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2282, '积分签到规则查询', 'point:sign-in-config:query', 3, 1, 2281, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-06-10 03:26:12', '', '2023-06-10 03:26:12', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2283, '积分签到规则创建', 'point:sign-in-config:create', 3, 2, 2281, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-06-10 03:26:12', '', '2023-06-10 03:26:12', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2284, '积分签到规则更新', 'point:sign-in-config:update', 3, 3, 2281, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-06-10 03:26:12', '', '2023-06-10 03:26:12', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2285, '积分签到规则删除', 'point:sign-in-config:delete', 3, 4, 2281, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-06-10 03:26:12', '', '2023-06-10 03:26:12', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2287, '会员积分', '', 2, 10, 2262, 'record', 'fa:asterisk', 'member/point/record/index', 'PointRecord', 0, b'1', b'1', b'1', '', '2023-06-10 04:18:50', '1', '2023-10-01 23:42:11', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2288, '用户积分记录查询', 'point:record:query', 3, 1, 2287, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-06-10 04:18:50', '', '2023-06-10 04:18:50', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2293, '签到记录', '', 2, 3, 2300, 'record', 'ep:chicken', 'member/signin/record/index', 'SignInRecord', 0, b'1', b'1', b'1', '', '2023-06-10 04:48:22', '1', '2023-08-20 19:26:02', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2294, '用户签到积分查询', 'point:sign-in-record:query', 3, 1, 2293, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-06-10 04:48:22', '', '2023-06-10 04:48:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2297, '用户签到积分删除', 'point:sign-in-record:delete', 3, 4, 2293, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-06-10 04:48:22', '', '2023-06-10 04:48:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2300, '会员签到', '', 1, 11, 2262, 'signin', 'ep:alarm-clock', '', '', 0, b'1', b'1', b'1', '1', '2023-06-27 22:49:53', '1', '2023-08-20 09:23:48', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2301, '回调通知', '', 2, 5, 1117, 'notify', 'ep:mute-notification', 'pay/notify/index', 'PayNotify', 0, b'1', b'1', b'1', '', '2023-07-20 04:41:32', '1', '2024-01-18 23:56:48', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2302, '支付通知查询', 'pay:notify:query', 3, 1, 2301, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-07-20 04:41:32', '', '2023-07-20 04:41:32', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2303, '拼团活动', '', 2, 3, 2030, 'combination', 'fa:group', '', '', 0, b'1', b'1', b'1', '1', '2023-08-12 17:19:54', '1', '2023-08-12 17:20:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2304, '拼团商品', '', 2, 1, 2303, 'acitivity', 'ep:apple', 'mall/promotion/combination/activity/index', 'PromotionCombinationActivity', 0, b'1', b'1', b'1', '1', '2023-08-12 17:22:03', '1', '2023-08-12 17:22:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2305, '拼团活动查询', 'promotion:combination-activity:query', 3, 1, 2304, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-12 17:54:32', '1', '2023-11-24 11:57:40', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2306, '拼团活动创建', 'promotion:combination-activity:create', 3, 2, 2304, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-12 17:54:49', '1', '2023-08-12 17:54:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2307, '拼团活动更新', 'promotion:combination-activity:update', 3, 3, 2304, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-12 17:55:04', '1', '2023-08-12 17:55:04', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2308, '拼团活动删除', 'promotion:combination-activity:delete', 3, 4, 2304, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-12 17:55:23', '1', '2023-08-12 17:55:23', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2309, '拼团活动关闭', 'promotion:combination-activity:close', 3, 5, 2304, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-12 17:55:37', '1', '2023-10-06 10:51:57', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2310, '砍价活动', '', 2, 4, 2030, 'bargain', 'ep:box', '', '', 0, b'1', b'1', b'1', '1', '2023-08-13 00:27:25', '1', '2023-08-13 00:27:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2311, '砍价商品', '', 2, 1, 2310, 'activity', 'ep:burger', 'mall/promotion/bargain/activity/index', 'PromotionBargainActivity', 0, b'1', b'1', b'1', '1', '2023-08-13 00:28:49', '1', '2023-10-05 01:16:23', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2312, '砍价活动查询', 'promotion:bargain-activity:query', 3, 1, 2311, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-13 00:32:30', '1', '2023-08-13 00:32:30', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2313, '砍价活动创建', 'promotion:bargain-activity:create', 3, 2, 2311, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-13 00:32:44', '1', '2023-08-13 00:32:44', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2314, '砍价活动更新', 'promotion:bargain-activity:update', 3, 3, 2311, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-13 00:32:55', '1', '2023-08-13 00:32:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2315, '砍价活动删除', 'promotion:bargain-activity:delete', 3, 4, 2311, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-13 00:34:50', '1', '2023-08-13 00:34:50', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2316, '砍价活动关闭', 'promotion:bargain-activity:close', 3, 5, 2311, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-13 00:35:02', '1', '2023-08-13 00:35:02', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2317, '会员管理', '', 2, 0, 2262, 'user', 'ep:avatar', 'member/user/index', 'MemberUser', 0, b'1', b'1', b'1', '', '2023-08-19 04:12:15', '1', '2023-08-24 00:50:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2318, '会员用户查询', 'member:user:query', 3, 1, 2317, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-19 04:12:15', '', '2023-08-19 04:12:15', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2319, '会员用户更新', 'member:user:update', 3, 3, 2317, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-19 04:12:15', '', '2023-08-19 04:12:15', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2320, '会员标签', '', 2, 1, 2262, 'tag', 'ep:collection-tag', 'member/tag/index', 'MemberTag', 0, b'1', b'1', b'1', '', '2023-08-20 01:03:08', '1', '2023-08-20 09:23:19', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2321, '会员标签查询', 'member:tag:query', 3, 1, 2320, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-20 01:03:08', '', '2023-08-20 01:03:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2322, '会员标签创建', 'member:tag:create', 3, 2, 2320, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-20 01:03:08', '', '2023-08-20 01:03:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2323, '会员标签更新', 'member:tag:update', 3, 3, 2320, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-20 01:03:08', '', '2023-08-20 01:03:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2324, '会员标签删除', 'member:tag:delete', 3, 4, 2320, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-20 01:03:08', '', '2023-08-20 01:03:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2325, '会员等级', '', 2, 2, 2262, 'level', 'fa:level-up', 'member/level/index', 'MemberLevel', 0, b'1', b'1', b'1', '', '2023-08-22 12:41:01', '1', '2023-08-22 21:47:00', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2326, '会员等级查询', 'member:level:query', 3, 1, 2325, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-22 12:41:02', '', '2023-08-22 12:41:02', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2327, '会员等级创建', 'member:level:create', 3, 2, 2325, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-22 12:41:02', '', '2023-08-22 12:41:02', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2328, '会员等级更新', 'member:level:update', 3, 3, 2325, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-22 12:41:02', '', '2023-08-22 12:41:02', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2329, '会员等级删除', 'member:level:delete', 3, 4, 2325, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-22 12:41:02', '', '2023-08-22 12:41:02', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2330, '会员分组', '', 2, 3, 2262, 'group', 'fa:group', 'member/group/index', 'MemberGroup', 0, b'1', b'1', b'1', '', '2023-08-22 13:50:06', '1', '2023-10-01 23:42:01', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2331, '用户分组查询', 'member:group:query', 3, 1, 2330, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-22 13:50:06', '', '2023-08-22 13:50:06', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2332, '用户分组创建', 'member:group:create', 3, 2, 2330, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-22 13:50:06', '', '2023-08-22 13:50:06', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2333, '用户分组更新', 'member:group:update', 3, 3, 2330, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-22 13:50:06', '', '2023-08-22 13:50:06', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2334, '用户分组删除', 'member:group:delete', 3, 4, 2330, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-22 13:50:06', '', '2023-08-22 13:50:06', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2335, '用户等级修改', 'member:user:update-level', 3, 5, 2317, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-08-23 16:49:05', '', '2023-08-23 16:50:48', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2336, '商品评论', '', 2, 5, 2000, 'comment', 'ep:comment', 'mall/product/comment/index', 'ProductComment', 0, b'1', b'1', b'1', '1', '2023-08-26 11:03:00', '1', '2023-08-26 11:03:38', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2337, '评论查询', 'product:comment:query', 3, 1, 2336, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-26 11:04:01', '1', '2023-08-26 11:04:01', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2338, '添加自评', 'product:comment:create', 3, 2, 2336, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-26 11:04:23', '1', '2023-08-26 11:08:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2339, '商家回复', 'product:comment:update', 3, 3, 2336, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-26 11:04:37', '1', '2023-08-26 11:04:37', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2340, '显隐评论', 'product:comment:update', 3, 4, 2336, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-08-26 11:04:55', '1', '2023-08-26 11:04:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2341, '优惠劵发送', 'promotion:coupon:send', 3, 2, 2038, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-09-02 00:03:14', '1', '2023-09-02 00:03:14', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2342, '交易配置', '', 2, 0, 2072, 'config', 'ep:setting', 'mall/trade/config/index', 'TradeConfig', 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '1', '2024-02-26 20:30:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2343, '交易中心配置查询', 'trade:config:query', 3, 1, 2342, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2344, '交易中心配置保存', 'trade:config:save', 3, 2, 2342, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2345, '分销管理', '', 1, 4, 2072, 'brokerage', 'fa-solid:project-diagram', '', '', 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '1', '2023-09-28 10:58:44', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2346, '分销用户', '', 2, 0, 2345, 'brokerage-user', 'fa-solid:user-tie', 'mall/trade/brokerage/user/index', 'TradeBrokerageUser', 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '1', '2024-02-26 20:33:23', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2347, '分销用户查询', 'trade:brokerage-user:query', 3, 1, 2346, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2348, '分销用户推广人查询', 'trade:brokerage-user:user-query', 3, 2, 2346, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2349, '分销用户推广订单查询', 'trade:brokerage-user:order-query', 3, 3, 2346, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2350, '分销用户修改推广资格', 'trade:brokerage-user:update-brokerage-enable', 3, 4, 2346, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2351, '分销用户修改推广员', 'trade:brokerage-user:update-bind-user', 3, 5, 2346, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2352, '分销用户清除推广员', 'trade:brokerage-user:clear-bind-user', 3, 6, 2346, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2353, '佣金记录', '', 2, 1, 2345, 'brokerage-record', 'fa:money', 'mall/trade/brokerage/record/index', 'TradeBrokerageRecord', 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '1', '2024-02-26 20:33:30', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2354, '佣金记录查询', 'trade:brokerage-record:query', 3, 1, 2353, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2355, '佣金提现', '', 2, 2, 2345, 'brokerage-withdraw', 'fa:credit-card', 'mall/trade/brokerage/withdraw/index', 'TradeBrokerageWithdraw', 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '1', '2024-02-26 20:33:35', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2356, '佣金提现查询', 'trade:brokerage-withdraw:query', 3, 1, 2355, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2357, '佣金提现审核', 'trade:brokerage-withdraw:audit', 3, 2, 2355, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2358, '统计中心', '', 1, 75, 2362, 'statistics', 'ep:data-line', '', '', 0, b'1', b'1', b'1', '', '2023-09-30 03:22:40', '1', '2023-09-30 11:54:48', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2359, '交易统计', '', 2, 4, 2358, 'trade', 'fa-solid:credit-card', 'mall/statistics/trade/index', 'TradeStatistics', 0, b'1', b'1', b'1', '', '2023-09-30 03:22:40', '1', '2024-02-26 20:42:00', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2360, '交易统计查询', 'statistics:trade:query', 3, 1, 2359, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-09-30 03:22:40', '', '2023-09-30 03:22:40', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2361, '交易统计导出', 'statistics:trade:export', 3, 2, 2359, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-09-30 03:22:40', '', '2023-09-30 03:22:40', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2362, '商城系统', '', 1, 59, 0, '/mall', 'ep:shop', '', '', 0, b'1', b'1', b'1', '1', '2023-09-30 11:52:02', '1', '2023-09-30 11:52:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2363, '用户积分修改', 'member:user:update-point', 3, 6, 2317, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-01 14:39:43', '', '2023-10-01 14:39:43', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2364, '用户余额修改', 'member:user:update-balance', 3, 7, 2317, '', '', '', '', 0, b'1', b'1', b'1', '', '2023-10-01 14:39:43', '1', '2023-10-01 22:42:31', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2365, '优惠劵', '', 1, 2, 2030, 'coupon', 'fa-solid:disease', '', '', 0, b'1', b'1', b'1', '1', '2023-10-03 12:39:15', '1', '2023-10-05 00:16:07', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2366, '砍价记录', '', 2, 2, 2310, 'record', 'ep:list', 'mall/promotion/bargain/record/index', 'PromotionBargainRecord', 0, b'1', b'1', b'1', '', '2023-10-05 02:49:06', '1', '2023-10-05 10:50:38', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2367, '砍价记录查询', 'promotion:bargain-record:query', 3, 1, 2366, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-05 02:49:06', '', '2023-10-05 02:49:06', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2368, '助力记录查询', 'promotion:bargain-help:query', 3, 2, 2366, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-10-05 12:27:49', '1', '2023-10-05 12:27:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2369, '拼团记录', 'promotion:combination-record:query', 2, 2, 2303, 'record', 'ep:avatar', 'mall/promotion/combination/record/index.vue', 'PromotionCombinationRecord', 0, b'1', b'1', b'1', '1', '2023-10-08 07:10:22', '1', '2023-10-08 07:34:11', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2374, '会员统计', '', 2, 2, 2358, 'member', 'ep:avatar', 'mall/statistics/member/index', 'MemberStatistics', 0, b'1', b'1', b'1', '', '2023-10-11 04:39:24', '1', '2024-02-26 20:41:46', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2375, '会员统计查询', 'statistics:member:query', 3, 1, 2374, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-11 04:39:24', '', '2023-10-11 04:39:24', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2376, '订单核销', 'trade:order:pick-up', 3, 10, 2076, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-10-14 17:11:58', '1', '2023-10-14 17:11:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2377, '文章分类', '', 2, 0, 2387, 'article/category', 'fa:certificate', 'mall/promotion/article/category/index', 'ArticleCategory', 0, b'1', b'1', b'1', '', '2023-10-16 01:26:18', '1', '2023-10-16 09:38:26', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2378, '分类查询', 'promotion:article-category:query', 3, 1, 2377, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2379, '分类创建', 'promotion:article-category:create', 3, 2, 2377, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2380, '分类更新', 'promotion:article-category:update', 3, 3, 2377, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2381, '分类删除', 'promotion:article-category:delete', 3, 4, 2377, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2382, '文章列表', '', 2, 2, 2387, 'article', 'ep:connection', 'mall/promotion/article/index', 'Article', 0, b'1', b'1', b'1', '', '2023-10-16 01:26:18', '1', '2023-10-16 09:41:19', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2383, '文章管理查询', 'promotion:article:query', 3, 1, 2382, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2384, '文章管理创建', 'promotion:article:create', 3, 2, 2382, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2385, '文章管理更新', 'promotion:article:update', 3, 3, 2382, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2386, '文章管理删除', 'promotion:article:delete', 3, 4, 2382, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2387, '内容管理', '', 1, 1, 2030, 'content', 'ep:collection', '', '', 0, b'1', b'1', b'1', '1', '2023-10-16 09:37:31', '1', '2023-10-16 09:37:31', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2388, '商城首页', '', 2, 1, 2362, 'home', 'ep:home-filled', 'mall/home/index', 'MallHome', 0, b'1', b'1', b'1', '', '2023-10-16 12:10:33', '', '2023-10-16 12:10:33', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2389, '核销订单', '', 2, 2, 2166, 'pick-up-order', 'ep:list', 'mall/trade/delivery/pickUpOrder/index', 'PickUpOrder', 0, b'1', b'1', b'1', '', '2023-10-19 16:09:51', '', '2023-10-19 16:09:51', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2390, '优惠活动', '', 1, 99, 2030, 'youhui', 'ep:aim', '', '', 0, b'1', b'1', b'1', '1', '2023-10-21 19:23:49', '1', '2023-10-21 19:23:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2391, '客户管理', '', 2, 10, 2397, 'customer', 'fa:address-book-o', 'crm/customer/index', 'CrmCustomer', 0, b'1', b'1', b'1', '', '2023-10-29 09:04:21', '1', '2024-02-17 17:13:32', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2392, '客户查询', 'crm:customer:query', 3, 1, 2391, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2393, '客户创建', 'crm:customer:create', 3, 2, 2391, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2394, '客户更新', 'crm:customer:update', 3, 3, 2391, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2395, '客户删除', 'crm:customer:delete', 3, 4, 2391, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2396, '客户导出', 'crm:customer:export', 3, 5, 2391, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2397, 'CRM 系统', '', 1, 200, 0, '/crm', 'ep:avatar', '', '', 0, b'1', b'1', b'1', '1', '2023-10-29 17:08:30', '1', '2024-02-04 15:37:31', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2398, '合同管理', '', 2, 50, 2397, 'contract', 'ep:notebook', 'crm/contract/index', 'CrmContract', 0, b'1', b'1', b'1', '', '2023-10-29 10:50:41', '1', '2024-02-17 17:15:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2399, '合同查询', 'crm:contract:query', 3, 1, 2398, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2400, '合同创建', 'crm:contract:create', 3, 2, 2398, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2401, '合同更新', 'crm:contract:update', 3, 3, 2398, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2402, '合同删除', 'crm:contract:delete', 3, 4, 2398, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2403, '合同导出', 'crm:contract:export', 3, 5, 2398, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2404, '线索管理', '', 2, 8, 2397, 'clue', 'fa:pagelines', 'crm/clue/index', 'CrmClue', 0, b'1', b'1', b'1', '', '2023-10-29 11:06:29', '1', '2024-02-17 17:15:41', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2405, '线索查询', 'crm:clue:query', 3, 1, 2404, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2406, '线索创建', 'crm:clue:create', 3, 2, 2404, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2407, '线索更新', 'crm:clue:update', 3, 3, 2404, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2408, '线索删除', 'crm:clue:delete', 3, 4, 2404, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2409, '线索导出', 'crm:clue:export', 3, 5, 2404, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2410, '商机管理', '', 2, 40, 2397, 'business', 'fa:bus', 'crm/business/index', 'CrmBusiness', 0, b'1', b'1', b'1', '', '2023-10-29 11:12:35', '1', '2024-02-17 17:14:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2411, '商机查询', 'crm:business:query', 3, 1, 2410, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2412, '商机创建', 'crm:business:create', 3, 2, 2410, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2413, '商机更新', 'crm:business:update', 3, 3, 2410, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2414, '商机删除', 'crm:business:delete', 3, 4, 2410, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2415, '商机导出', 'crm:business:export', 3, 5, 2410, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2416, '联系人管理', '', 2, 20, 2397, 'contact', 'fa:address-book-o', 'crm/contact/index', 'CrmContact', 0, b'1', b'1', b'1', '', '2023-10-29 11:14:56', '1', '2024-02-17 17:13:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2417, '联系人查询', 'crm:contact:query', 3, 1, 2416, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2418, '联系人创建', 'crm:contact:create', 3, 2, 2416, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2419, '联系人更新', 'crm:contact:update', 3, 3, 2416, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2420, '联系人删除', 'crm:contact:delete', 3, 4, 2416, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2421, '联系人导出', 'crm:contact:export', 3, 5, 2416, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2422, '回款管理', '', 2, 60, 2397, 'receivable', 'ep:money', 'crm/receivable/index', 'CrmReceivable', 0, b'1', b'1', b'1', '', '2023-10-29 11:18:09', '1', '2024-02-17 17:16:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2423, '回款管理查询', 'crm:receivable:query', 3, 1, 2422, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2424, '回款管理创建', 'crm:receivable:create', 3, 2, 2422, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2425, '回款管理更新', 'crm:receivable:update', 3, 3, 2422, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2426, '回款管理删除', 'crm:receivable:delete', 3, 4, 2422, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2427, '回款管理导出', 'crm:receivable:export', 3, 5, 2422, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2428, '回款计划', '', 2, 61, 2397, 'receivable-plan', 'fa:money', 'crm/receivable/plan/index', 'CrmReceivablePlan', 0, b'1', b'1', b'1', '', '2023-10-29 11:18:09', '1', '2024-02-17 17:16:11', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2429, '回款计划查询', 'crm:receivable-plan:query', 3, 1, 2428, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2430, '回款计划创建', 'crm:receivable-plan:create', 3, 2, 2428, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2431, '回款计划更新', 'crm:receivable-plan:update', 3, 3, 2428, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2432, '回款计划删除', 'crm:receivable-plan:delete', 3, 4, 2428, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2433, '回款计划导出', 'crm:receivable-plan:export', 3, 5, 2428, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2435, '商城装修', '', 2, 20, 2030, 'diy-template', 'fa6-solid:brush', 'mall/promotion/diy/template/index', 'DiyTemplate', 0, b'1', b'1', b'1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2436, '装修模板', '', 2, 1, 2435, 'diy-template', 'fa6-solid:brush', 'mall/promotion/diy/template/index', 'DiyTemplate', 0, b'1', b'1', b'1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2437, '装修模板查询', 'promotion:diy-template:query', 3, 1, 2436, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2438, '装修模板创建', 'promotion:diy-template:create', 3, 2, 2436, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2439, '装修模板更新', 'promotion:diy-template:update', 3, 3, 2436, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2440, '装修模板删除', 'promotion:diy-template:delete', 3, 4, 2436, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2441, '装修模板使用', 'promotion:diy-template:use', 3, 5, 2436, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2442, '装修页面', '', 2, 2, 2435, 'diy-page', 'foundation:page-edit', 'mall/promotion/diy/page/index', 'DiyPage', 0, b'1', b'1', b'1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2443, '装修页面查询', 'promotion:diy-page:query', 3, 1, 2442, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2444, '装修页面创建', 'promotion:diy-page:create', 3, 2, 2442, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 14:19:26', '', '2023-10-29 14:19:26', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2445, '装修页面更新', 'promotion:diy-page:update', 3, 3, 2442, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 14:19:26', '', '2023-10-29 14:19:26', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2446, '装修页面删除', 'promotion:diy-page:delete', 3, 4, 2442, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-10-29 14:19:26', '', '2023-10-29 14:19:26', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2447, '三方登录', '', 1, 10, 1, 'social', 'fa:rocket', '', '', 0, b'1', b'1', b'1', '1', '2023-11-04 12:12:01', '1', '2024-02-29 01:14:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2448, '三方应用', '', 2, 1, 2447, 'client', 'ep:set-up', 'views/system/social/client/index.vue', 'SocialClient', 0, b'1', b'1', b'1', '1', '2023-11-04 12:17:19', '1', '2023-11-04 12:17:19', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2449, '三方应用查询', 'system:social-client:query', 3, 1, 2448, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-11-04 12:43:12', '1', '2023-11-04 12:43:33', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2450, '三方应用创建', 'system:social-client:create', 3, 2, 2448, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-11-04 12:43:58', '1', '2023-11-04 12:43:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2451, '三方应用更新', 'system:social-client:update', 3, 3, 2448, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-11-04 12:44:27', '1', '2023-11-04 12:44:27', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2452, '三方应用删除', 'system:social-client:delete', 3, 4, 2448, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-11-04 12:44:43', '1', '2023-11-04 12:44:43', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2453, '三方用户', 'system:social-user:query', 2, 2, 2447, 'user', 'ep:avatar', 'system/social/user/index.vue', 'SocialUser', 0, b'1', b'1', b'1', '1', '2023-11-04 14:01:05', '1', '2023-11-04 14:01:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2472, '主子表(内嵌)', '', 2, 12, 1070, 'demo03-inner', 'fa:power-off', 'infra/demo/demo03/inner/index', 'Demo03StudentInner', 0, b'1', b'1', b'1', '', '2023-11-13 04:39:51', '1', '2023-11-16 23:53:46', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2478, '单表(增删改查)', '', 2, 1, 1070, 'demo01-contact', 'ep:bicycle', 'infra/demo/demo01/index', 'Demo01Contact', 0, b'1', b'1', b'1', '', '2023-11-15 14:42:30', '1', '2023-11-16 20:34:40', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2479, '示例联系人查询', 'infra:demo01-contact:query', 3, 1, 2478, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2480, '示例联系人创建', 'infra:demo01-contact:create', 3, 2, 2478, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2481, '示例联系人更新', 'infra:demo01-contact:update', 3, 3, 2478, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2482, '示例联系人删除', 'infra:demo01-contact:delete', 3, 4, 2478, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2483, '示例联系人导出', 'infra:demo01-contact:export', 3, 5, 2478, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2484, '树表(增删改查)', '', 2, 2, 1070, 'demo02-category', 'fa:tree', 'infra/demo/demo02/index', 'Demo02Category', 0, b'1', b'1', b'1', '', '2023-11-16 12:18:27', '1', '2023-11-16 20:35:01', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2485, '示例分类查询', 'infra:demo02-category:query', 3, 1, 2484, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2486, '示例分类创建', 'infra:demo02-category:create', 3, 2, 2484, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2487, '示例分类更新', 'infra:demo02-category:update', 3, 3, 2484, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2488, '示例分类删除', 'infra:demo02-category:delete', 3, 4, 2484, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2489, '示例分类导出', 'infra:demo02-category:export', 3, 5, 2484, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2490, '主子表(标准)', '', 2, 10, 1070, 'demo03-normal', 'fa:battery-3', 'infra/demo/demo03/normal/index', 'Demo03StudentNormal', 0, b'1', b'1', b'1', '', '2023-11-16 12:53:37', '1', '2023-11-16 23:10:03', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2491, '学生查询', 'infra:demo03-student:query', 3, 1, 2490, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2492, '学生创建', 'infra:demo03-student:create', 3, 2, 2490, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2493, '学生更新', 'infra:demo03-student:update', 3, 3, 2490, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2494, '学生删除', 'infra:demo03-student:delete', 3, 4, 2490, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2495, '学生导出', 'infra:demo03-student:export', 3, 5, 2490, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2497, '主子表(ERP)', '', 2, 11, 1070, 'demo03-erp', 'ep:calendar', 'infra/demo/demo03/erp/index', 'Demo03StudentERP', 0, b'1', b'1', b'1', '', '2023-11-16 15:50:59', '1', '2023-11-17 13:19:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2516, '客户公海配置', '', 2, 0, 2524, 'customer-pool-config', 'ep:data-analysis', 'crm/customer/poolConfig/index', 'CrmCustomerPoolConfig', 0, b'1', b'1', b'1', '', '2023-11-18 13:33:31', '1', '2024-01-03 19:52:06', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2517, '客户公海配置保存', 'crm:customer-pool-config:update', 3, 1, 2516, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-18 13:33:31', '', '2023-11-18 13:33:31', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2518, '客户限制配置', '', 2, 1, 2524, 'customer-limit-config', 'ep:avatar', 'crm/customer/limitConfig/index', 'CrmCustomerLimitConfig', 0, b'1', b'1', b'1', '', '2023-11-18 13:33:53', '1', '2024-02-24 16:43:33', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2519, '客户限制配置查询', 'crm:customer-limit-config:query', 3, 1, 2518, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2520, '客户限制配置创建', 'crm:customer-limit-config:create', 3, 2, 2518, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2521, '客户限制配置更新', 'crm:customer-limit-config:update', 3, 3, 2518, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2522, '客户限制配置删除', 'crm:customer-limit-config:delete', 3, 4, 2518, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2523, '客户限制配置导出', 'crm:customer-limit-config:export', 3, 5, 2518, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2524, '系统配置', '', 1, 999, 2397, 'config', 'ep:connection', '', '', 0, b'1', b'1', b'1', '1', '2023-11-18 21:58:00', '1', '2024-02-17 17:14:34', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2525, 'WebSocket', '', 2, 5, 2, 'websocket', 'ep:connection', 'infra/webSocket/index', 'InfraWebSocket', 0, b'1', b'1', b'1', '1', '2023-11-23 19:41:55', '1', '2024-04-23 00:02:00', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2526, '产品管理', '', 2, 80, 2397, 'product', 'fa:product-hunt', 'crm/product/index', 'CrmProduct', 0, b'1', b'1', b'1', '1', '2023-12-05 22:45:26', '1', '2024-02-20 20:36:20', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2527, '产品查询', 'crm:product:query', 3, 1, 2526, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-12-05 22:47:16', '1', '2023-12-05 22:47:16', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2528, '产品创建', 'crm:product:create', 3, 2, 2526, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-12-05 22:47:41', '1', '2023-12-05 22:47:48', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2529, '产品更新', 'crm:product:update', 3, 3, 2526, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-12-05 22:48:03', '1', '2023-12-05 22:48:03', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2530, '产品删除', 'crm:product:delete', 3, 4, 2526, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-12-05 22:48:17', '1', '2023-12-05 22:48:17', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2531, '产品导出', 'crm:product:export', 3, 5, 2526, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-12-05 22:48:29', '1', '2023-12-05 22:48:29', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2532, '产品分类配置', '', 2, 3, 2524, 'product/category', 'fa-solid:window-restore', 'crm/product/category/index', 'CrmProductCategory', 0, b'1', b'1', b'1', '1', '2023-12-06 12:52:36', '1', '2023-12-06 12:52:51', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2533, '产品分类查询', 'crm:product-category:query', 3, 1, 2532, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-12-06 12:53:23', '1', '2023-12-06 12:53:23', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2534, '产品分类创建', 'crm:product-category:create', 3, 2, 2532, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-12-06 12:53:41', '1', '2023-12-06 12:53:41', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2535, '产品分类更新', 'crm:product-category:update', 3, 3, 2532, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-12-06 12:53:59', '1', '2023-12-06 12:53:59', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2536, '产品分类删除', 'crm:product-category:delete', 3, 4, 2532, '', '', '', '', 0, b'1', b'1', b'1', '1', '2023-12-06 12:54:14', '1', '2023-12-06 12:54:14', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2543, '关联商机', 'crm:contact:create-business', 3, 10, 2416, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-01-02 17:28:25', '1', '2024-01-02 17:28:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2544, '取关商机', 'crm:contact:delete-business', 3, 11, 2416, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-01-02 17:28:43', '1', '2024-01-02 17:28:51', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2545, '商品统计', '', 2, 3, 2358, 'product', 'fa:product-hunt', 'mall/statistics/product/index', 'ProductStatistics', 0, b'1', b'1', b'1', '', '2023-12-15 18:54:28', '1', '2024-02-26 20:41:52', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2546, '客户公海', '', 2, 30, 2397, 'customer/pool', 'fa-solid:swimming-pool', 'crm/customer/pool/index', 'CrmCustomerPool', 0, b'1', b'1', b'1', '1', '2024-01-15 21:29:34', '1', '2024-02-17 17:14:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2547, '订单查询', 'trade:order:query', 3, 1, 2076, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-01-16 08:52:00', '1', '2024-01-16 08:52:00', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2548, '订单更新', 'trade:order:update', 3, 2, 2076, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-01-16 08:52:21', '1', '2024-01-16 08:52:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2549, '支付&退款案例', '', 2, 1, 2161, 'order', 'fa:paypal', 'pay/demo/order/index', '', 0, b'1', b'1', b'1', '1', '2024-01-18 23:45:00', '1', '2024-01-18 23:47:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2550, '转账案例', '', 2, 2, 2161, 'transfer', 'fa:transgender-alt', 'pay/demo/transfer/index', '', 0, b'1', b'1', b'1', '1', '2024-01-18 23:51:16', '1', '2024-01-18 23:51:16', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2551, '钱包管理', '', 1, 4, 1117, 'wallet', 'ep:wallet', '', '', 0, b'1', b'1', b'1', '', '2023-12-29 02:32:54', '1', '2024-02-29 08:58:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2552, '充值套餐', '', 2, 2, 2551, 'wallet-recharge-package', 'fa:leaf', 'pay/wallet/rechargePackage/index', 'WalletRechargePackage', 0, b'1', b'1', b'1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2553, '钱包充值套餐查询', 'pay:wallet-recharge-package:query', 3, 1, 2552, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2554, '钱包充值套餐创建', 'pay:wallet-recharge-package:create', 3, 2, 2552, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2555, '钱包充值套餐更新', 'pay:wallet-recharge-package:update', 3, 3, 2552, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2556, '钱包充值套餐删除', 'pay:wallet-recharge-package:delete', 3, 4, 2552, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2557, '钱包余额', '', 2, 1, 2551, 'wallet-balance', 'fa:leaf', 'pay/wallet/balance/index', 'WalletBalance', 0, b'1', b'1', b'1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2558, '钱包余额查询', 'pay:wallet:query', 3, 1, 2557, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2559, '转账订单', '', 2, 3, 1117, 'transfer', 'ep:credit-card', 'pay/transfer/index', 'PayTransfer', 0, b'1', b'1', b'1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2560, '数据统计', '', 1, 200, 2397, 'statistics', 'ep:data-line', '', '', 0, b'1', b'1', b'1', '1', '2024-01-26 22:50:35', '1', '2024-02-24 20:10:07', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2561, '排行榜', 'crm:statistics-rank:query', 2, 1, 2560, 'ranking', 'fa:area-chart', 'crm/statistics/rank/index', 'CrmStatisticsRank', 0, b'1', b'1', b'1', '1', '2024-01-26 22:52:09', '1', '2024-04-24 19:39:11', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2562, '客户导入', 'crm:customer:import', 3, 6, 2391, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-02-01 13:09:00', '1', '2024-02-01 13:09:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2563, 'ERP 系统', '', 1, 300, 0, '/erp', 'fa-solid:store', '', '', 0, b'1', b'1', b'1', '1', '2024-02-04 15:37:25', '1', '2024-02-04 15:37:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2564, '产品管理', '', 1, 40, 2563, 'product', 'fa:product-hunt', '', '', 0, b'1', b'1', b'1', '1', '2024-02-04 15:38:43', '1', '2024-02-04 15:38:43', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2565, '产品信息', '', 2, 0, 2564, 'product', 'fa-solid:apple-alt', 'erp/product/product/index', 'ErpProduct', 0, b'1', b'1', b'1', '', '2024-02-04 07:52:15', '1', '2024-02-05 14:42:11', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2566, '产品查询', 'erp:product:query', 3, 1, 2565, '', '', '', '', 0, b'1', b'1', b'1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:21:57', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2567, '产品创建', 'erp:product:create', 3, 2, 2565, '', '', '', '', 0, b'1', b'1', b'1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:22:12', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2568, '产品更新', 'erp:product:update', 3, 3, 2565, '', '', '', '', 0, b'1', b'1', b'1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:22:16', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2569, '产品删除', 'erp:product:delete', 3, 4, 2565, '', '', '', '', 0, b'1', b'1', b'1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:22:22', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2570, '产品导出', 'erp:product:export', 3, 5, 2565, '', '', '', '', 0, b'1', b'1', b'1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:22:26', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2571, '产品分类', '', 2, 1, 2564, 'product-category', 'fa:certificate', 'erp/product/category/index', 'ErpProductCategory', 0, b'1', b'1', b'1', '', '2024-02-04 09:21:04', '1', '2024-02-04 17:24:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2572, '分类查询', 'erp:product-category:query', 3, 1, 2571, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2573, '分类创建', 'erp:product-category:create', 3, 2, 2571, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2574, '分类更新', 'erp:product-category:update', 3, 3, 2571, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2575, '分类删除', 'erp:product-category:delete', 3, 4, 2571, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2576, '分类导出', 'erp:product-category:export', 3, 5, 2571, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2577, '产品单位', '', 2, 2, 2564, 'unit', 'ep:opportunity', 'erp/product/unit/index', 'ErpProductUnit', 0, b'1', b'1', b'1', '', '2024-02-04 11:54:08', '1', '2024-02-04 19:54:37', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2578, '单位查询', 'erp:product-unit:query', 3, 1, 2577, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2579, '单位创建', 'erp:product-unit:create', 3, 2, 2577, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2580, '单位更新', 'erp:product-unit:update', 3, 3, 2577, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2581, '单位删除', 'erp:product-unit:delete', 3, 4, 2577, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2582, '单位导出', 'erp:product-unit:export', 3, 5, 2577, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2583, '库存管理', '', 1, 30, 2563, 'stock', 'fa:window-restore', '', '', 0, b'1', b'1', b'1', '1', '2024-02-05 00:29:37', '1', '2024-02-05 00:29:37', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2584, '仓库信息', '', 2, 0, 2583, 'warehouse', 'ep:house', 'erp/stock/warehouse/index', 'ErpWarehouse', 0, b'1', b'1', b'1', '', '2024-02-04 17:12:09', '1', '2024-02-05 01:12:53', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2585, '仓库查询', 'erp:warehouse:query', 3, 1, 2584, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2586, '仓库创建', 'erp:warehouse:create', 3, 2, 2584, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2587, '仓库更新', 'erp:warehouse:update', 3, 3, 2584, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2588, '仓库删除', 'erp:warehouse:delete', 3, 4, 2584, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2589, '仓库导出', 'erp:warehouse:export', 3, 5, 2584, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2590, '产品库存', '', 2, 1, 2583, 'stock', 'ep:coffee', 'erp/stock/stock/index', 'ErpStock', 0, b'1', b'1', b'1', '', '2024-02-05 06:40:50', '1', '2024-02-05 14:42:44', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2591, '库存查询', 'erp:stock:query', 3, 1, 2590, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 06:40:50', '', '2024-02-05 06:40:50', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2592, '库存导出', 'erp:stock:export', 3, 5, 2590, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 06:40:50', '', '2024-02-05 06:40:50', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2593, '出入库明细', '', 2, 2, 2583, 'record', 'fa-solid:blog', 'erp/stock/record/index', 'ErpStockRecord', 0, b'1', b'1', b'1', '', '2024-02-05 10:27:21', '1', '2024-02-06 17:26:11', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2594, '库存明细查询', 'erp:stock-record:query', 3, 1, 2593, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 10:27:21', '', '2024-02-05 10:27:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2595, '库存明细导出', 'erp:stock-record:export', 3, 5, 2593, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 10:27:21', '', '2024-02-05 10:27:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2596, '其它入库', '', 2, 3, 2583, 'in', 'ep:zoom-in', 'erp/stock/in/index', 'ErpStockIn', 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '1', '2024-02-07 19:06:51', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2597, '其它入库单查询', 'erp:stock-in:query', 3, 1, 2596, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2598, '其它入库单创建', 'erp:stock-in:create', 3, 2, 2596, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2599, '其它入库单更新', 'erp:stock-in:update', 3, 3, 2596, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2600, '其它入库单删除', 'erp:stock-in:delete', 3, 4, 2596, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2601, '其它入库单导出', 'erp:stock-in:export', 3, 5, 2596, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2602, '采购管理', '', 1, 10, 2563, 'purchase', 'fa:buysellads', '', '', 0, b'1', b'1', b'1', '1', '2024-02-06 16:01:01', '1', '2024-02-06 16:01:23', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2603, '供应商信息', '', 2, 4, 2602, 'supplier', 'fa:superpowers', 'erp/purchase/supplier/index', 'ErpSupplier', 0, b'1', b'1', b'1', '', '2024-02-06 08:21:55', '1', '2024-02-06 16:22:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2604, '供应商查询', 'erp:supplier:query', 3, 1, 2603, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2605, '供应商创建', 'erp:supplier:create', 3, 2, 2603, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2606, '供应商更新', 'erp:supplier:update', 3, 3, 2603, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2607, '供应商删除', 'erp:supplier:delete', 3, 4, 2603, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2608, '供应商导出', 'erp:supplier:export', 3, 5, 2603, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2609, '其它入库单审批', 'erp:stock-in:update-status', 3, 6, 2596, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2610, '其它出库', '', 2, 4, 2583, 'out', 'ep:zoom-out', 'erp/stock/out/index', 'ErpStockOut', 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '1', '2024-02-07 19:06:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2611, '其它出库单查询', 'erp:stock-out:query', 3, 1, 2610, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:39', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2612, '其它出库单创建', 'erp:stock-out:create', 3, 2, 2610, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:42', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2613, '其它出库单更新', 'erp:stock-out:update', 3, 3, 2610, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:44', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2614, '其它出库单删除', 'erp:stock-out:delete', 3, 4, 2610, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2615, '其它出库单导出', 'erp:stock-out:export', 3, 5, 2610, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:57', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2616, '其它出库单审批', 'erp:stock-out:update-status', 3, 6, 2610, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2617, '销售管理', '', 1, 20, 2563, 'sale', 'fa:sellsy', '', '', 0, b'1', b'1', b'1', '1', '2024-02-07 15:12:32', '1', '2024-02-07 15:12:32', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2618, '客户信息', '', 2, 4, 2617, 'customer', 'ep:avatar', 'erp/sale/customer/index', 'ErpCustomer', 0, b'1', b'1', b'1', '', '2024-02-07 07:21:45', '1', '2024-02-07 15:22:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2619, '客户查询', 'erp:customer:query', 3, 1, 2618, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2620, '客户创建', 'erp:customer:create', 3, 2, 2618, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2621, '客户更新', 'erp:customer:update', 3, 3, 2618, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2622, '客户删除', 'erp:customer:delete', 3, 4, 2618, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2623, '客户导出', 'erp:customer:export', 3, 5, 2618, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2624, '库存调拨', '', 2, 5, 2583, 'move', 'ep:folder-remove', 'erp/stock/move/index', 'ErpStockMove', 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '1', '2024-02-16 18:53:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2625, '库存调度单查询', 'erp:stock-move:query', 3, 1, 2624, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2626, '库存调度单创建', 'erp:stock-move:create', 3, 2, 2624, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2627, '库存调度单更新', 'erp:stock-move:update', 3, 3, 2624, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2628, '库存调度单删除', 'erp:stock-move:delete', 3, 4, 2624, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2629, '库存调度单导出', 'erp:stock-move:export', 3, 5, 2624, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2630, '库存调度单审批', 'erp:stock-move:update-status', 3, 6, 2624, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2631, '库存盘点', '', 2, 6, 2583, 'check', 'ep:circle-check-filled', 'erp/stock/check/index', 'ErpStockCheck', 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '1', '2024-02-08 08:31:09', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2632, '库存盘点单查询', 'erp:stock-check:query', 3, 1, 2631, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2633, '库存盘点单创建', 'erp:stock-check:create', 3, 2, 2631, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2634, '库存盘点单更新', 'erp:stock-check:update', 3, 3, 2631, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2635, '库存盘点单删除', 'erp:stock-check:delete', 3, 4, 2631, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2636, '库存盘点单导出', 'erp:stock-check:export', 3, 5, 2631, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2637, '库存盘点单审批', 'erp:stock-check:update-status', 3, 6, 2631, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2638, '销售订单', '', 2, 1, 2617, 'order', 'fa:first-order', 'erp/sale/order/index', 'ErpSaleOrder', 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '1', '2024-02-10 21:59:20', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2639, '销售订单查询', 'erp:sale-order:query', 3, 1, 2638, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2640, '销售订单创建', 'erp:sale-order:create', 3, 2, 2638, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2641, '销售订单更新', 'erp:sale-order:update', 3, 3, 2638, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2642, '销售订单删除', 'erp:sale-order:delete', 3, 4, 2638, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2643, '销售订单导出', 'erp:sale-order:export', 3, 5, 2638, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2644, '销售订单审批', 'erp:sale-order:update-status', 3, 6, 2638, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2645, '财务管理', '', 1, 50, 2563, 'finance', 'ep:money', '', '', 0, b'1', b'1', b'1', '1', '2024-02-10 08:05:58', '1', '2024-02-10 08:06:07', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2646, '结算账户', '', 2, 10, 2645, 'account', 'fa:universal-access', 'erp/finance/account/index', 'ErpAccount', 0, b'1', b'1', b'1', '', '2024-02-10 00:15:07', '1', '2024-02-14 08:24:31', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2647, '结算账户查询', 'erp:account:query', 3, 1, 2646, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2648, '结算账户创建', 'erp:account:create', 3, 2, 2646, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2649, '结算账户更新', 'erp:account:update', 3, 3, 2646, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2650, '结算账户删除', 'erp:account:delete', 3, 4, 2646, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2651, '结算账户导出', 'erp:account:export', 3, 5, 2646, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2652, '销售出库', '', 2, 2, 2617, 'out', 'ep:sold-out', 'erp/sale/out/index', 'ErpSaleOut', 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '1', '2024-02-10 22:02:07', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2653, '销售出库查询', 'erp:sale-out:query', 3, 1, 2652, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2654, '销售出库创建', 'erp:sale-out:create', 3, 2, 2652, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2655, '销售出库更新', 'erp:sale-out:update', 3, 3, 2652, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2656, '销售出库删除', 'erp:sale-out:delete', 3, 4, 2652, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2657, '销售出库导出', 'erp:sale-out:export', 3, 5, 2652, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2658, '销售出库审批', 'erp:sale-out:update-status', 3, 6, 2652, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2659, '销售退货', '', 2, 3, 2617, 'return', 'fa-solid:bone', 'erp/sale/return/index', 'ErpSaleReturn', 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '1', '2024-02-12 06:12:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2660, '销售退货查询', 'erp:sale-return:query', 3, 1, 2659, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2661, '销售退货创建', 'erp:sale-return:create', 3, 2, 2659, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2662, '销售退货更新', 'erp:sale-return:update', 3, 3, 2659, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2663, '销售退货删除', 'erp:sale-return:delete', 3, 4, 2659, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2664, '销售退货导出', 'erp:sale-return:export', 3, 5, 2659, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2665, '销售退货审批', 'erp:sale-return:update-status', 3, 6, 2659, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2666, '采购订单', '', 2, 1, 2602, 'order', 'fa-solid:border-all', 'erp/purchase/order/index', 'ErpPurchaseOrder', 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '1', '2024-02-12 08:51:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2667, '采购订单查询', 'erp:purchase-order:query', 3, 1, 2666, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2668, '采购订单创建', 'erp:purchase-order:create', 3, 2, 2666, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2669, '采购订单更新', 'erp:purchase-order:update', 3, 3, 2666, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2670, '采购订单删除', 'erp:purchase-order:delete', 3, 4, 2666, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2671, '采购订单导出', 'erp:purchase-order:export', 3, 5, 2666, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2672, '采购订单审批', 'erp:purchase-order:update-status', 3, 6, 2666, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2673, '采购入库', '', 2, 2, 2602, 'in', 'fa-solid:gopuram', 'erp/purchase/in/index', 'ErpPurchaseIn', 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '1', '2024-02-12 11:19:27', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2674, '采购入库查询', 'erp:purchase-in:query', 3, 1, 2673, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2675, '采购入库创建', 'erp:purchase-in:create', 3, 2, 2673, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2676, '采购入库更新', 'erp:purchase-in:update', 3, 3, 2673, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2677, '采购入库删除', 'erp:purchase-in:delete', 3, 4, 2673, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2678, '采购入库导出', 'erp:purchase-in:export', 3, 5, 2673, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2679, '采购入库审批', 'erp:purchase-in:update-status', 3, 6, 2673, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2680, '采购退货', '', 2, 3, 2602, 'return', 'ep:minus', 'erp/purchase/return/index', 'ErpPurchaseReturn', 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '1', '2024-02-12 20:51:02', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2681, '采购退货查询', 'erp:purchase-return:query', 3, 1, 2680, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2682, '采购退货创建', 'erp:purchase-return:create', 3, 2, 2680, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2683, '采购退货更新', 'erp:purchase-return:update', 3, 3, 2680, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2684, '采购退货删除', 'erp:purchase-return:delete', 3, 4, 2680, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2685, '采购退货导出', 'erp:purchase-return:export', 3, 5, 2680, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2686, '采购退货审批', 'erp:purchase-return:update-status', 3, 6, 2680, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2687, '付款单', '', 2, 1, 2645, 'payment', 'ep:caret-right', 'erp/finance/payment/index', 'ErpFinancePayment', 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '1', '2024-02-14 08:24:23', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2688, '付款单查询', 'erp:finance-payment:query', 3, 1, 2687, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2689, '付款单创建', 'erp:finance-payment:create', 3, 2, 2687, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2690, '付款单更新', 'erp:finance-payment:update', 3, 3, 2687, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2691, '付款单删除', 'erp:finance-payment:delete', 3, 4, 2687, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2692, '付款单导出', 'erp:finance-payment:export', 3, 5, 2687, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2693, '付款单审批', 'erp:finance-payment:update-status', 3, 6, 2687, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2694, '收款单', '', 2, 2, 2645, 'receipt', 'ep:expand', 'erp/finance/receipt/index', 'ErpFinanceReceipt', 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '1', '2024-02-15 19:35:45', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2695, '收款单查询', 'erp:finance-receipt:query', 3, 1, 2694, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2696, '收款单创建', 'erp:finance-receipt:create', 3, 2, 2694, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2697, '收款单更新', 'erp:finance-receipt:update', 3, 3, 2694, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2698, '收款单删除', 'erp:finance-receipt:delete', 3, 4, 2694, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2699, '收款单导出', 'erp:finance-receipt:export', 3, 5, 2694, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2700, '收款单审批', 'erp:finance-receipt:update-status', 3, 6, 2694, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2701, '待办事项', '', 2, 0, 2397, 'backlog', 'fa-solid:tasks', 'crm/backlog/index', 'CrmBacklog', 0, b'1', b'1', b'1', '1', '2024-02-17 17:17:11', '1', '2024-02-17 17:17:11', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2702, 'ERP 首页', 'erp:statistics:query', 2, 0, 2563, 'home', 'ep:home-filled', 'erp/home/index.vue', 'ErpHome', 0, b'1', b'1', b'1', '1', '2024-02-18 16:49:40', '1', '2024-02-26 21:12:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2703, '商机状态配置', '', 2, 4, 2524, 'business-status', 'fa-solid:charging-station', 'crm/business/status/index', 'CrmBusinessStatus', 0, b'1', b'1', b'1', '1', '2024-02-21 20:15:17', '1', '2024-02-21 20:15:17', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2704, '商机状态查询', 'crm:business-status:query', 3, 1, 2703, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-02-21 20:35:36', '1', '2024-02-21 20:36:06', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2705, '商机状态创建', 'crm:business-status:create', 3, 2, 2703, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-02-21 20:35:57', '1', '2024-02-21 20:35:57', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2706, '商机状态更新', 'crm:business-status:update', 3, 3, 2703, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-02-21 20:36:21', '1', '2024-02-21 20:36:21', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2707, '商机状态删除', 'crm:business-status:delete', 3, 4, 2703, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-02-21 20:36:36', '1', '2024-02-21 20:36:36', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2708, '合同配置', '', 2, 5, 2524, 'contract-config', 'ep:connection', 'crm/contract/config/index', 'CrmContractConfig', 0, b'1', b'1', b'1', '1', '2024-02-24 16:44:40', '1', '2024-02-24 16:44:48', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2709, '客户公海配置查询', 'crm:customer-pool-config:query', 3, 2, 2516, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-02-24 16:45:19', '1', '2024-02-24 16:45:28', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2710, '合同配置更新', 'crm:contract-config:update', 3, 1, 2708, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-02-24 16:45:56', '1', '2024-02-24 16:45:56', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2711, '合同配置查询', 'crm:contract-config:query', 3, 2, 2708, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-02-24 16:46:16', '1', '2024-02-24 16:46:16', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2712, '客户分析', 'crm:statistics-customer:query', 2, 0, 2560, 'customer', 'ep:avatar', 'views/crm/statistics/customer/index.vue', 'CrmStatisticsCustomer', 0, b'1', b'1', b'1', '1', '2024-03-09 16:43:56', '1', '2024-04-24 19:42:52', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2713, '抄送我的', 'bpm:process-instance-cc:query', 2, 30, 1200, 'copy', 'ep:copy-document', 'bpm/task/copy/index', 'BpmProcessInstanceCopy', 0, b'1', b'1', b'1', '1', '2024-03-17 21:50:23', '1', '2024-04-24 19:55:12', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2714, '流程分类', '', 2, 3, 1186, 'category', 'fa:object-ungroup', 'bpm/category/index', 'BpmCategory', 0, b'1', b'1', b'1', '', '2024-03-08 02:00:51', '1', '2024-03-21 23:51:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2715, '分类查询', 'bpm:category:query', 3, 1, 2714, '', '', '', '', 0, b'1', b'1', b'1', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2716, '分类创建', 'bpm:category:create', 3, 2, 2714, '', '', '', '', 0, b'1', b'1', b'1', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:31', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2717, '分类更新', 'bpm:category:update', 3, 3, 2714, '', '', '', '', 0, b'1', b'1', b'1', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:35', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2718, '分类删除', 'bpm:category:delete', 3, 4, 2714, '', '', '', '', 0, b'1', b'1', b'1', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:41', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2720, '发起流程', '', 2, 0, 1200, 'create', 'fa-solid:grin-stars', 'bpm/processInstance/create/index', 'BpmProcessInstanceCreate', 0, b'1', b'0', b'1', '1', '2024-03-19 19:46:05', '1', '2024-03-23 19:03:42', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2721, '流程实例', '', 2, 10, 1186, 'process-instance/manager', 'fa:square', 'bpm/processInstance/manager/index', 'BpmProcessInstanceManager', 0, b'1', b'1', b'1', '1', '2024-03-21 23:57:30', '1', '2024-03-21 23:57:30', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2722, '流程实例的查询(管理员)', 'bpm:process-instance:manager-query', 3, 1, 2721, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-03-22 08:18:27', '1', '2024-03-22 08:19:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2723, '流程实例的取消(管理员)', 'bpm:process-instance:cancel-by-admin', 3, 2, 2721, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-03-22 08:19:25', '1', '2024-03-22 08:19:25', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2724, '流程任务', '', 2, 11, 1186, 'process-tasnk', 'ep:collection-tag', 'bpm/task/manager/index', 'BpmManagerTask', 0, b'1', b'1', b'1', '1', '2024-03-22 08:43:22', '1', '2024-03-22 08:43:27', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2725, '流程任务的查询(管理员)', 'bpm:task:mananger-query', 3, 1, 2724, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-03-22 08:43:49', '1', '2024-03-22 08:43:49', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2726, '流程监听器', '', 2, 5, 1186, 'process-listener', 'fa:assistive-listening-systems', 'bpm/processListener/index', 'BpmProcessListener', 0, b'1', b'1', b'1', '', '2024-03-09 16:05:34', '1', '2024-03-23 13:13:38', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2727, '流程监听器查询', 'bpm:process-listener:query', 3, 1, 2726, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2728, '流程监听器创建', 'bpm:process-listener:create', 3, 2, 2726, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2729, '流程监听器更新', 'bpm:process-listener:update', 3, 3, 2726, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2730, '流程监听器删除', 'bpm:process-listener:delete', 3, 4, 2726, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2731, '流程表达式', '', 2, 6, 1186, 'process-expression', 'fa:wpexplorer', 'bpm/processExpression/index', 'BpmProcessExpression', 0, b'1', b'1', b'1', '', '2024-03-09 22:35:08', '1', '2024-03-23 19:43:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2732, '流程表达式查询', 'bpm:process-expression:query', 3, 1, 2731, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2733, '流程表达式创建', 'bpm:process-expression:create', 3, 2, 2731, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2734, '流程表达式更新', 'bpm:process-expression:update', 3, 3, 2731, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2735, '流程表达式删除', 'bpm:process-expression:delete', 3, 4, 2731, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2736, '员工业绩', 'crm:statistics-performance:query', 2, 3, 2560, 'performance', 'ep:dish-dot', 'crm/statistics/performance/index', 'CrmStatisticsPerformance', 0, b'1', b'1', b'1', '1', '2024-04-05 13:49:20', '1', '2024-04-24 19:42:43', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2737, '客户画像', 'crm:statistics-portrait:query', 2, 4, 2560, 'portrait', 'ep:picture', 'crm/statistics/portrait/index', 'CrmStatisticsPortrait', 0, b'1', b'1', b'1', '1', '2024-04-05 13:57:40', '1', '2024-04-24 19:42:24', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2738, '销售漏斗', 'crm:statistics-funnel:query', 2, 5, 2560, 'funnel', 'ep:grape', 'crm/statistics/funnel/index', 'CrmStatisticsFunnel', 0, b'1', b'1', b'1', '1', '2024-04-13 10:53:26', '1', '2024-04-24 19:39:33', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2739, '消息中心', '', 1, 7, 1, 'messages', 'ep:chat-dot-round', '', '', 0, b'1', b'1', b'1', '1', '2024-04-22 23:54:30', '1', '2024-04-23 09:36:35', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2740, '监控中心', '', 1, 10, 2, 'monitors', 'ep:monitor', '', '', 0, b'1', b'1', b'1', '1', '2024-04-23 00:04:44', '1', '2024-04-23 00:04:44', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2741, '领取公海客户', 'crm:customer:receive', 3, 1, 2546, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 19:47:45', '1', '2024-04-24 19:47:45', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2742, '分配公海客户', 'crm:customer:distribute', 3, 2, 2546, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 19:48:05', '1', '2024-04-24 19:48:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2743, '商品统计查询', 'statistics:product:query', 3, 1, 2545, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 19:50:05', '1', '2024-04-24 19:50:05', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2744, '商品统计导出', 'statistics:product:export', 3, 2, 2545, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 19:50:26', '1', '2024-04-24 19:50:26', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2745, '支付渠道查询', 'pay:channel:query', 3, 10, 1126, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 19:53:01', '1', '2024-04-24 19:53:01', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2746, '支付渠道创建', 'pay:channel:create', 3, 11, 1126, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 19:53:18', '1', '2024-04-24 19:53:18', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2747, '支付渠道更新', 'pay:channel:update', 3, 12, 1126, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 19:53:32', '1', '2024-04-24 19:53:58', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2748, '支付渠道删除', 'pay:channel:delete', 3, 13, 1126, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 19:54:34', '1', '2024-04-24 19:54:34', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2749, '商品收藏查询', 'product:favorite:query', 3, 10, 2014, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 19:55:47', '1', '2024-04-24 19:55:47', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2750, '商品浏览查询', 'product:browse-history:query', 3, 20, 2014, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 19:57:43', '1', '2024-04-24 19:57:43', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2751, '售后同意', 'trade:after-sale:agree', 3, 2, 2073, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 19:58:40', '1', '2024-04-24 19:58:40', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2752, '售后不同意', 'trade:after-sale:disagree', 3, 3, 2073, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 19:59:03', '1', '2024-04-24 19:59:03', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2753, '售后确认退货', 'trade:after-sale:receive', 3, 4, 2073, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 20:00:07', '1', '2024-04-24 20:00:07', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2754, '售后确认退款', 'trade:after-sale:refund', 3, 5, 2073, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 20:00:24', '1', '2024-04-24 20:00:24', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2755, '删除项目', 'report:go-view-project:delete', 3, 2, 2153, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 20:01:37', '1', '2024-04-24 20:01:37', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2756, '会员等级记录查询', 'member:level-record:query', 3, 10, 2325, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 20:02:32', '1', '2024-04-24 20:02:32', b'0'); +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2757, '会员经验记录查询', 'member:experience-record:query', 3, 11, 2325, '', '', '', '', 0, b'1', b'1', b'1', '1', '2024-04-24 20:02:51', '1', '2024-04-24 20:02:51', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for system_notice +-- ---------------------------- +DROP TABLE IF EXISTS `system_notice`; +CREATE TABLE `system_notice` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '公告ID', + `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '公告标题', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '公告内容', + `type` tinyint NOT NULL COMMENT '公告类型(1通知 2公告)', + `status` tinyint NOT NULL DEFAULT 0 COMMENT '公告状态(0正常 1关闭)', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '通知公告表'; + +-- ---------------------------- +-- Records of system_notice +-- ---------------------------- +BEGIN; +INSERT INTO `system_notice` (`id`, `title`, `content`, `type`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, '芋道的公众', '

    新版本内容133

    ', 1, 0, 'admin', '2021-01-05 17:03:48', '1', '2022-05-04 21:00:20', b'0', 1); +INSERT INTO `system_notice` (`id`, `title`, `content`, `type`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2, '维护通知:2018-07-01 系统凌晨维护', '

    \"\"11112222

    ', 2, 1, 'admin', '2021-01-05 17:03:48', '1', '2023-12-02 20:07:26', b'0', 1); +INSERT INTO `system_notice` (`id`, `title`, `content`, `type`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4, '我是测试标题', '

    哈哈哈哈123

    ', 1, 0, '110', '2022-02-22 01:01:25', '110', '2022-02-22 01:01:46', b'0', 121); +COMMIT; + +-- ---------------------------- +-- Table structure for system_notify_message +-- ---------------------------- +DROP TABLE IF EXISTS `system_notify_message`; +CREATE TABLE `system_notify_message` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `user_id` bigint NOT NULL COMMENT '用户id', + `user_type` tinyint NOT NULL COMMENT '用户类型', + `template_id` bigint NOT NULL COMMENT '模版编号', + `template_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板编码', + `template_nickname` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模版发送人名称', + `template_content` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模版内容', + `template_type` int NOT NULL COMMENT '模版类型', + `template_params` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模版参数', + `read_status` bit(1) NOT NULL COMMENT '是否已读', + `read_time` datetime NULL DEFAULT NULL COMMENT '阅读时间', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '站内信消息表'; + +-- ---------------------------- +-- Records of system_notify_message +-- ---------------------------- +BEGIN; +INSERT INTO `system_notify_message` (`id`, `user_id`, `user_type`, `template_id`, `template_code`, `template_nickname`, `template_content`, `template_type`, `template_params`, `read_status`, `read_time`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2, 1, 2, 1, 'test', '123', '我是 1,我开始 2 了', 1, '{\"name\":\"1\",\"what\":\"2\"}', b'1', '2023-02-10 00:47:04', '1', '2023-01-28 11:44:08', '1', '2023-02-10 00:47:04', b'0', 1); +INSERT INTO `system_notify_message` (`id`, `user_id`, `user_type`, `template_id`, `template_code`, `template_nickname`, `template_content`, `template_type`, `template_params`, `read_status`, `read_time`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3, 1, 2, 1, 'test', '123', '我是 1,我开始 2 了', 1, '{\"name\":\"1\",\"what\":\"2\"}', b'1', '2023-02-10 00:47:04', '1', '2023-01-28 11:45:04', '1', '2023-02-10 00:47:04', b'0', 1); +INSERT INTO `system_notify_message` (`id`, `user_id`, `user_type`, `template_id`, `template_code`, `template_nickname`, `template_content`, `template_type`, `template_params`, `read_status`, `read_time`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4, 103, 2, 2, 'register', '系统消息', '你好,欢迎 哈哈 加入大家庭!', 2, '{\"name\":\"哈哈\"}', b'0', NULL, '1', '2023-01-28 21:02:20', '1', '2023-01-28 21:02:20', b'0', 1); +INSERT INTO `system_notify_message` (`id`, `user_id`, `user_type`, `template_id`, `template_code`, `template_nickname`, `template_content`, `template_type`, `template_params`, `read_status`, `read_time`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (5, 1, 2, 1, 'test', '123', '我是 芋艿,我开始 写代码 了', 1, '{\"name\":\"芋艿\",\"what\":\"写代码\"}', b'1', '2023-02-10 00:47:04', '1', '2023-01-28 22:21:42', '1', '2023-02-10 00:47:04', b'0', 1); +INSERT INTO `system_notify_message` (`id`, `user_id`, `user_type`, `template_id`, `template_code`, `template_nickname`, `template_content`, `template_type`, `template_params`, `read_status`, `read_time`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6, 1, 2, 1, 'test', '123', '我是 芋艿,我开始 写代码 了', 1, '{\"name\":\"芋艿\",\"what\":\"写代码\"}', b'1', '2023-01-29 10:52:06', '1', '2023-01-28 22:22:07', '1', '2023-01-29 10:52:06', b'0', 1); +INSERT INTO `system_notify_message` (`id`, `user_id`, `user_type`, `template_id`, `template_code`, `template_nickname`, `template_content`, `template_type`, `template_params`, `read_status`, `read_time`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (7, 1, 2, 1, 'test', '123', '我是 2,我开始 3 了', 1, '{\"name\":\"2\",\"what\":\"3\"}', b'1', '2023-01-29 10:52:06', '1', '2023-01-28 23:45:21', '1', '2023-01-29 10:52:06', b'0', 1); +INSERT INTO `system_notify_message` (`id`, `user_id`, `user_type`, `template_id`, `template_code`, `template_nickname`, `template_content`, `template_type`, `template_params`, `read_status`, `read_time`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (8, 1, 2, 2, 'register', '系统消息', '你好,欢迎 123 加入大家庭!', 2, '{\"name\":\"123\"}', b'1', '2023-01-29 10:52:06', '1', '2023-01-28 23:50:21', '1', '2023-01-29 10:52:06', b'0', 1); +INSERT INTO `system_notify_message` (`id`, `user_id`, `user_type`, `template_id`, `template_code`, `template_nickname`, `template_content`, `template_type`, `template_params`, `read_status`, `read_time`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (9, 247, 1, 4, 'brokerage_withdraw_audit_approve', 'system', '您在2023-09-28 08:35:46提现¥0.09元的申请已通过审核', 2, '{\"reason\":null,\"createTime\":\"2023-09-28 08:35:46\",\"price\":\"0.09\"}', b'0', NULL, '1', '2023-09-28 16:36:22', '1', '2023-09-28 16:36:22', b'0', 1); +INSERT INTO `system_notify_message` (`id`, `user_id`, `user_type`, `template_id`, `template_code`, `template_nickname`, `template_content`, `template_type`, `template_params`, `read_status`, `read_time`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (10, 247, 1, 4, 'brokerage_withdraw_audit_approve', 'system', '您在2023-09-30 20:59:40提现¥1.00元的申请已通过审核', 2, '{\"reason\":null,\"createTime\":\"2023-09-30 20:59:40\",\"price\":\"1.00\"}', b'0', NULL, '1', '2023-10-03 12:11:34', '1', '2023-10-03 12:11:34', b'0', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for system_notify_template +-- ---------------------------- +DROP TABLE IF EXISTS `system_notify_template`; +CREATE TABLE `system_notify_template` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板名称', + `code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模版编码', + `nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '发送人名称', + `content` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模版内容', + `type` tinyint NOT NULL COMMENT '类型', + `params` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '参数数组', + `status` tinyint NOT NULL COMMENT '状态', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '站内信模板表'; + +-- ---------------------------- +-- Records of system_notify_template +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for system_oauth2_access_token +-- ---------------------------- +DROP TABLE IF EXISTS `system_oauth2_access_token`; +CREATE TABLE `system_oauth2_access_token` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `user_id` bigint NOT NULL COMMENT '用户编号', + `user_type` tinyint NOT NULL COMMENT '用户类型', + `user_info` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户信息', + `access_token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '访问令牌', + `refresh_token` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '刷新令牌', + `client_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端编号', + `scopes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '授权范围', + `expires_time` datetime NOT NULL COMMENT '过期时间', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_access_token`(`access_token` ASC) USING BTREE, + INDEX `idx_refresh_token`(`refresh_token` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 6620 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 访问令牌'; + +-- ---------------------------- +-- Records of system_oauth2_access_token +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for system_oauth2_approve +-- ---------------------------- +DROP TABLE IF EXISTS `system_oauth2_approve`; +CREATE TABLE `system_oauth2_approve` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `user_id` bigint NOT NULL COMMENT '用户编号', + `user_type` tinyint NOT NULL COMMENT '用户类型', + `client_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端编号', + `scope` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '授权范围', + `approved` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否接受', + `expires_time` datetime NOT NULL COMMENT '过期时间', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 82 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 批准表'; + +-- ---------------------------- +-- Records of system_oauth2_approve +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for system_oauth2_client +-- ---------------------------- +DROP TABLE IF EXISTS `system_oauth2_client`; +CREATE TABLE `system_oauth2_client` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `client_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端编号', + `secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端密钥', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用名', + `logo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用图标', + `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '应用描述', + `status` tinyint NOT NULL COMMENT '状态', + `access_token_validity_seconds` int NOT NULL COMMENT '访问令牌的有效期', + `refresh_token_validity_seconds` int NOT NULL COMMENT '刷新令牌的有效期', + `redirect_uris` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '可重定向的 URI 地址', + `authorized_grant_types` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '授权类型', + `scopes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '授权范围', + `auto_approve_scopes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '自动通过的授权范围', + `authorities` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '权限', + `resource_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '资源', + `additional_information` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '附加信息', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 43 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 客户端表'; + +-- ---------------------------- +-- Records of system_oauth2_client +-- ---------------------------- +BEGIN; +INSERT INTO `system_oauth2_client` (`id`, `client_id`, `secret`, `name`, `logo`, `description`, `status`, `access_token_validity_seconds`, `refresh_token_validity_seconds`, `redirect_uris`, `authorized_grant_types`, `scopes`, `auto_approve_scopes`, `authorities`, `resource_ids`, `additional_information`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1, 'default', 'admin123', '芋道源码', 'http://test.win.iocoder.cn/a5e2e244368878a366b516805a4aabf1.png', '我是描述', 0, 1800, 2592000, '[\"https://www.iocoder.cn\",\"https://doc.iocoder.cn\"]', '[\"password\",\"authorization_code\",\"implicit\",\"refresh_token\"]', '[\"user.read\",\"user.write\"]', '[]', '[\"user.read\",\"user.write\"]', '[]', '{}', '1', '2022-05-11 21:47:12', '1', '2024-02-22 16:31:52', b'0'); +INSERT INTO `system_oauth2_client` (`id`, `client_id`, `secret`, `name`, `logo`, `description`, `status`, `access_token_validity_seconds`, `refresh_token_validity_seconds`, `redirect_uris`, `authorized_grant_types`, `scopes`, `auto_approve_scopes`, `authorities`, `resource_ids`, `additional_information`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (40, 'test', 'test2', 'biubiu', 'http://test.win.iocoder.cn/277a899d573723f1fcdfb57340f00379.png', '啦啦啦啦', 0, 1800, 43200, '[\"https://www.iocoder.cn\"]', '[\"password\",\"authorization_code\",\"implicit\"]', '[\"user_info\",\"projects\"]', '[\"user_info\"]', '[]', '[]', '{}', '1', '2022-05-12 00:28:20', '1', '2023-12-02 21:01:01', b'0'); +INSERT INTO `system_oauth2_client` (`id`, `client_id`, `secret`, `name`, `logo`, `description`, `status`, `access_token_validity_seconds`, `refresh_token_validity_seconds`, `redirect_uris`, `authorized_grant_types`, `scopes`, `auto_approve_scopes`, `authorities`, `resource_ids`, `additional_information`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (41, 'win-sso-demo-by-code', 'test', '基于授权码模式,如何实现 SSO 单点登录?', 'http://test.win.iocoder.cn/fe4ed36596adad5120036ef61a6d0153654544d44af8dd4ad3ffe8f759933d6f.png', NULL, 0, 1800, 43200, '[\"http://127.0.0.1:18080\"]', '[\"authorization_code\",\"refresh_token\"]', '[\"user.read\",\"user.write\"]', '[]', '[]', '[]', NULL, '1', '2022-09-29 13:28:31', '1', '2022-09-29 13:28:31', b'0'); +INSERT INTO `system_oauth2_client` (`id`, `client_id`, `secret`, `name`, `logo`, `description`, `status`, `access_token_validity_seconds`, `refresh_token_validity_seconds`, `redirect_uris`, `authorized_grant_types`, `scopes`, `auto_approve_scopes`, `authorities`, `resource_ids`, `additional_information`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (42, 'win-sso-demo-by-password', 'test', '基于密码模式,如何实现 SSO 单点登录?', 'http://test.win.iocoder.cn/604bdc695e13b3b22745be704d1f2aa8ee05c5f26f9fead6d1ca49005afbc857.jpeg', NULL, 0, 1800, 43200, '[\"http://127.0.0.1:18080\"]', '[\"password\",\"refresh_token\"]', '[\"user.read\",\"user.write\"]', '[]', '[]', '[]', NULL, '1', '2022-10-04 17:40:16', '1', '2022-10-04 20:31:21', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for system_oauth2_code +-- ---------------------------- +DROP TABLE IF EXISTS `system_oauth2_code`; +CREATE TABLE `system_oauth2_code` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `user_id` bigint NOT NULL COMMENT '用户编号', + `user_type` tinyint NOT NULL COMMENT '用户类型', + `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '授权码', + `client_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端编号', + `scopes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '授权范围', + `expires_time` datetime NOT NULL COMMENT '过期时间', + `redirect_uri` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '可重定向的 URI 地址', + `state` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '状态', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 147 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 授权码表'; + +-- ---------------------------- +-- Records of system_oauth2_code +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for system_oauth2_refresh_token +-- ---------------------------- +DROP TABLE IF EXISTS `system_oauth2_refresh_token`; +CREATE TABLE `system_oauth2_refresh_token` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `user_id` bigint NOT NULL COMMENT '用户编号', + `refresh_token` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '刷新令牌', + `user_type` tinyint NOT NULL COMMENT '用户类型', + `client_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端编号', + `scopes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '授权范围', + `expires_time` datetime NOT NULL COMMENT '过期时间', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1483 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OAuth2 刷新令牌'; + +-- ---------------------------- +-- Records of system_oauth2_refresh_token +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for system_operate_log +-- ---------------------------- +DROP TABLE IF EXISTS `system_operate_log`; +CREATE TABLE `system_operate_log` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志主键', + `trace_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '链路追踪编号', + `user_id` bigint NOT NULL COMMENT '用户编号', + `user_type` tinyint NOT NULL DEFAULT 0 COMMENT '用户类型', + `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作模块类型', + `sub_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作名', + `biz_id` bigint NOT NULL COMMENT '操作数据模块编号', + `action` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '操作内容', + `extra` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '拓展字段', + `request_method` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '请求方法名', + `request_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '请求地址', + `user_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '用户 IP', + `user_agent` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '浏览器 UA', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 9038 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '操作日志记录 V2 版本'; + +-- ---------------------------- +-- Records of system_operate_log +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for system_post +-- ---------------------------- +DROP TABLE IF EXISTS `system_post`; +CREATE TABLE `system_post` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '岗位ID', + `code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '岗位编码', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '岗位名称', + `sort` int NOT NULL COMMENT '显示顺序', + `status` tinyint NOT NULL COMMENT '状态(0正常 1停用)', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '岗位信息表'; + +-- ---------------------------- +-- Records of system_post +-- ---------------------------- +BEGIN; +INSERT INTO `system_post` (`id`, `code`, `name`, `sort`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, 'ceo', '董事长', 1, 0, '', 'admin', '2021-01-06 17:03:48', '1', '2023-02-11 15:19:04', b'0', 1); +INSERT INTO `system_post` (`id`, `code`, `name`, `sort`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2, 'se', '项目经理', 2, 0, '', 'admin', '2021-01-05 17:03:48', '1', '2023-11-15 09:18:20', b'0', 1); +INSERT INTO `system_post` (`id`, `code`, `name`, `sort`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4, 'user', '普通员工', 4, 0, '111', 'admin', '2021-01-05 17:03:48', '1', '2023-12-02 10:04:37', b'0', 1); +INSERT INTO `system_post` (`id`, `code`, `name`, `sort`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (5, 'HR', '人力资源', 5, 0, '', '1', '2024-03-24 20:45:40', '1', '2024-03-24 20:45:40', b'0', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for system_role +-- ---------------------------- +DROP TABLE IF EXISTS `system_role`; +CREATE TABLE `system_role` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色ID', + `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色名称', + `code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色权限字符串', + `sort` int NOT NULL COMMENT '显示顺序', + `data_scope` tinyint NOT NULL DEFAULT 1 COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)', + `data_scope_dept_ids` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '数据范围(指定部门数组)', + `status` tinyint NOT NULL COMMENT '角色状态(0正常 1停用)', + `type` tinyint NOT NULL COMMENT '角色类型', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 153 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '角色信息表'; + +-- ---------------------------- +-- Records of system_role +-- ---------------------------- +BEGIN; +INSERT INTO `system_role` (`id`, `name`, `code`, `sort`, `data_scope`, `data_scope_dept_ids`, `status`, `type`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, '超级管理员', 'super_admin', 1, 1, '', 0, 1, '超级管理员', 'admin', '2021-01-05 17:03:48', '', '2022-02-22 05:08:21', b'0', 1); +INSERT INTO `system_role` (`id`, `name`, `code`, `sort`, `data_scope`, `data_scope_dept_ids`, `status`, `type`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2, '普通角色', 'common', 2, 2, '', 0, 1, '普通角色', 'admin', '2021-01-05 17:03:48', '', '2022-02-22 05:08:20', b'0', 1); +INSERT INTO `system_role` (`id`, `name`, `code`, `sort`, `data_scope`, `data_scope_dept_ids`, `status`, `type`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3, 'CRM 管理员', 'crm_admin', 2, 1, '', 0, 1, 'CRM 专属角色', '1', '2024-02-24 10:51:13', '1', '2024-02-24 02:51:32', b'0', 1); +INSERT INTO `system_role` (`id`, `name`, `code`, `sort`, `data_scope`, `data_scope_dept_ids`, `status`, `type`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (101, '测试账号', 'test', 0, 1, '[]', 0, 2, '我想测试', '', '2021-01-06 13:49:35', '1', '2024-03-24 22:22:45', b'0', 1); +INSERT INTO `system_role` (`id`, `name`, `code`, `sort`, `data_scope`, `data_scope_dept_ids`, `status`, `type`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (109, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', b'0', 121); +INSERT INTO `system_role` (`id`, `name`, `code`, `sort`, `data_scope`, `data_scope_dept_ids`, `status`, `type`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (111, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +COMMIT; + +-- ---------------------------- +-- Table structure for system_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `system_role_menu`; +CREATE TABLE `system_role_menu` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增编号', + `role_id` bigint NOT NULL COMMENT '角色ID', + `menu_id` bigint NOT NULL COMMENT '菜单ID', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5779 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '角色和菜单关联表'; + +-- ---------------------------- +-- Records of system_role_menu +-- ---------------------------- +BEGIN; +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (263, 109, 1, '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (434, 2, 1, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (454, 2, 1093, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (455, 2, 1094, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (460, 2, 1100, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (467, 2, 1107, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (476, 2, 1117, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (477, 2, 100, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (478, 2, 101, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (479, 2, 102, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (480, 2, 1126, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (481, 2, 103, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (483, 2, 104, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (485, 2, 105, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (488, 2, 107, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (490, 2, 108, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (492, 2, 109, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (498, 2, 1138, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (523, 2, 1224, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (524, 2, 1225, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (541, 2, 500, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (543, 2, 501, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (675, 2, 2, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (689, 2, 1077, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (690, 2, 1078, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (692, 2, 1083, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (693, 2, 1084, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (699, 2, 1090, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (703, 2, 106, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (704, 2, 110, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (705, 2, 111, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (706, 2, 112, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (707, 2, 113, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1296, 110, 1, '110', '2022-02-23 00:23:55', '110', '2022-02-23 00:23:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1578, 111, 1, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1604, 101, 1216, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1605, 101, 1217, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1606, 101, 1218, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1607, 101, 1219, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1608, 101, 1220, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1609, 101, 1221, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1610, 101, 5, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1611, 101, 1222, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1612, 101, 1118, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1613, 101, 1119, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1614, 101, 1120, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1615, 101, 1185, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1616, 101, 1186, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1617, 101, 1187, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1618, 101, 1188, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1619, 101, 1189, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1620, 101, 1190, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1621, 101, 1191, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1622, 101, 1192, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1623, 101, 1193, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1624, 101, 1194, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1625, 101, 1195, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1626, 101, 1196, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1627, 101, 1197, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1628, 101, 1198, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1629, 101, 1199, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1630, 101, 1200, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1631, 101, 1201, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1632, 101, 1202, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1633, 101, 1207, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1634, 101, 1208, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1635, 101, 1209, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1636, 101, 1210, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1637, 101, 1211, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1638, 101, 1212, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1639, 101, 1213, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1640, 101, 1215, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1641, 101, 2, '1', '2022-04-01 22:21:24', '1', '2022-04-01 22:21:24', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1642, 101, 1031, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1643, 101, 1032, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1644, 101, 1033, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1645, 101, 1034, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1646, 101, 1035, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1647, 101, 1050, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1648, 101, 1051, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1649, 101, 1052, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1650, 101, 1053, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1651, 101, 1054, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1652, 101, 1056, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1653, 101, 1057, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1654, 101, 1058, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1655, 101, 1059, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1656, 101, 1060, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1657, 101, 1066, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1658, 101, 1067, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1659, 101, 1070, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1664, 101, 1075, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1666, 101, 1077, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1667, 101, 1078, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1668, 101, 1082, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1669, 101, 1083, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1670, 101, 1084, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1671, 101, 1085, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1672, 101, 1086, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1673, 101, 1087, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1674, 101, 1088, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1675, 101, 1089, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1679, 101, 1237, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1680, 101, 1238, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1681, 101, 1239, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1682, 101, 1240, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1683, 101, 1241, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1684, 101, 1242, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1685, 101, 1243, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1687, 101, 106, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1688, 101, 110, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1689, 101, 111, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1690, 101, 112, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1691, 101, 113, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1692, 101, 114, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1693, 101, 115, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1694, 101, 116, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1729, 109, 100, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1730, 109, 101, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1731, 109, 1063, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1732, 109, 1064, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1733, 109, 1001, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1734, 109, 1065, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1735, 109, 1002, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1736, 109, 1003, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1737, 109, 1004, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1738, 109, 1005, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1739, 109, 1006, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1740, 109, 1007, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1741, 109, 1008, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1742, 109, 1009, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1743, 109, 1010, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1744, 109, 1011, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1745, 109, 1012, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1746, 111, 100, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1747, 111, 101, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1748, 111, 1063, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1749, 111, 1064, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1750, 111, 1001, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1751, 111, 1065, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1752, 111, 1002, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1753, 111, 1003, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1754, 111, 1004, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1755, 111, 1005, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1756, 111, 1006, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1757, 111, 1007, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1758, 111, 1008, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1759, 111, 1009, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1760, 111, 1010, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1761, 111, 1011, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1762, 111, 1012, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1763, 109, 100, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1764, 109, 101, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1765, 109, 1063, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1766, 109, 1064, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1767, 109, 1001, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1768, 109, 1065, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1769, 109, 1002, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1770, 109, 1003, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1771, 109, 1004, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1772, 109, 1005, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1773, 109, 1006, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1774, 109, 1007, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1775, 109, 1008, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1776, 109, 1009, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1777, 109, 1010, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1778, 109, 1011, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1779, 109, 1012, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1780, 111, 100, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1781, 111, 101, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1782, 111, 1063, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1783, 111, 1064, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1784, 111, 1001, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1785, 111, 1065, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1786, 111, 1002, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1787, 111, 1003, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1788, 111, 1004, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1789, 111, 1005, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1790, 111, 1006, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1791, 111, 1007, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1792, 111, 1008, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1793, 111, 1009, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1794, 111, 1010, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1795, 111, 1011, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1796, 111, 1012, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1797, 109, 100, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1798, 109, 101, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1799, 109, 1063, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1800, 109, 1064, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1801, 109, 1001, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1802, 109, 1065, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1803, 109, 1002, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1804, 109, 1003, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1805, 109, 1004, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1806, 109, 1005, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1807, 109, 1006, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1808, 109, 1007, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1809, 109, 1008, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1810, 109, 1009, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1811, 109, 1010, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1812, 109, 1011, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1813, 109, 1012, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1814, 111, 100, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1815, 111, 101, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1816, 111, 1063, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1817, 111, 1064, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1818, 111, 1001, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1819, 111, 1065, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1820, 111, 1002, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1821, 111, 1003, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1822, 111, 1004, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1823, 111, 1005, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1824, 111, 1006, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1825, 111, 1007, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1826, 111, 1008, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1827, 111, 1009, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1828, 111, 1010, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1829, 111, 1011, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1830, 111, 1012, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1831, 109, 103, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1832, 109, 1017, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1833, 109, 1018, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1834, 109, 1019, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1835, 109, 1020, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1836, 111, 103, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1837, 111, 1017, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1838, 111, 1018, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1839, 111, 1019, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1840, 111, 1020, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1841, 109, 1036, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1842, 109, 1037, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1843, 109, 1038, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1844, 109, 1039, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1845, 109, 107, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1846, 111, 1036, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1847, 111, 1037, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1848, 111, 1038, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1849, 111, 1039, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1850, 111, 107, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1991, 2, 1024, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1992, 2, 1025, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1993, 2, 1026, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1994, 2, 1027, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1995, 2, 1028, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1996, 2, 1029, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1997, 2, 1030, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1998, 2, 1031, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1999, 2, 1032, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2000, 2, 1033, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2001, 2, 1034, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2002, 2, 1035, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2003, 2, 1036, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2004, 2, 1037, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2005, 2, 1038, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2006, 2, 1039, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2007, 2, 1040, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2008, 2, 1042, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2009, 2, 1043, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2010, 2, 1045, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2011, 2, 1046, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2012, 2, 1048, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2013, 2, 1050, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2014, 2, 1051, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2015, 2, 1052, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2016, 2, 1053, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2017, 2, 1054, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2018, 2, 1056, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2019, 2, 1057, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2020, 2, 1058, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2021, 2, 2083, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2022, 2, 1059, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2023, 2, 1060, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2024, 2, 1063, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2025, 2, 1064, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2026, 2, 1065, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2027, 2, 1066, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2028, 2, 1067, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2029, 2, 1070, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2034, 2, 1075, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2036, 2, 1082, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2037, 2, 1085, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2038, 2, 1086, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2039, 2, 1087, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2040, 2, 1088, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2041, 2, 1089, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2042, 2, 1091, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2043, 2, 1092, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2044, 2, 1095, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2045, 2, 1096, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2046, 2, 1097, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2047, 2, 1098, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2048, 2, 1101, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2049, 2, 1102, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2050, 2, 1103, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2051, 2, 1104, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2052, 2, 1105, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2053, 2, 1106, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2054, 2, 1108, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2055, 2, 1109, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2061, 2, 1127, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2062, 2, 1128, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2063, 2, 1129, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2064, 2, 1130, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2066, 2, 1132, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2067, 2, 1133, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2068, 2, 1134, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2069, 2, 1135, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2070, 2, 1136, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2071, 2, 1137, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2072, 2, 114, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2073, 2, 1139, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2074, 2, 115, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2075, 2, 1140, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2076, 2, 116, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2077, 2, 1141, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2078, 2, 1142, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2079, 2, 1143, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2080, 2, 1150, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2081, 2, 1161, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2082, 2, 1162, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2083, 2, 1163, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2084, 2, 1164, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2085, 2, 1165, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2086, 2, 1166, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2087, 2, 1173, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2088, 2, 1174, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2089, 2, 1175, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2090, 2, 1176, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2091, 2, 1177, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2092, 2, 1178, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2099, 2, 1226, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2100, 2, 1227, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2101, 2, 1228, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2102, 2, 1229, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2103, 2, 1237, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2104, 2, 1238, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2105, 2, 1239, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2106, 2, 1240, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2107, 2, 1241, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2108, 2, 1242, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2109, 2, 1243, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2116, 2, 1254, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2117, 2, 1255, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2118, 2, 1256, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2119, 2, 1257, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2120, 2, 1258, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2121, 2, 1259, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2122, 2, 1260, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2123, 2, 1261, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2124, 2, 1263, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2125, 2, 1264, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2126, 2, 1265, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2127, 2, 1266, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2128, 2, 1267, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2129, 2, 1001, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2130, 2, 1002, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2131, 2, 1003, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2132, 2, 1004, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2133, 2, 1005, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2134, 2, 1006, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2135, 2, 1007, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2136, 2, 1008, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2137, 2, 1009, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2138, 2, 1010, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2139, 2, 1011, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2140, 2, 1012, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2141, 2, 1013, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2142, 2, 1014, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2143, 2, 1015, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2144, 2, 1016, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2145, 2, 1017, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2146, 2, 1018, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2147, 2, 1019, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2148, 2, 1020, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2149, 2, 1021, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2150, 2, 1022, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2151, 2, 1023, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2152, 2, 1281, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2153, 2, 1282, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2154, 2, 2000, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2155, 2, 2002, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2156, 2, 2003, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2157, 2, 2004, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2158, 2, 2005, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2159, 2, 2006, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2160, 2, 2008, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2161, 2, 2009, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2162, 2, 2010, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2163, 2, 2011, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2164, 2, 2012, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2170, 2, 2019, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2171, 2, 2020, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2172, 2, 2021, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2173, 2, 2022, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2174, 2, 2023, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2175, 2, 2025, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2177, 2, 2027, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2178, 2, 2028, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2179, 2, 2029, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2180, 2, 2014, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2181, 2, 2015, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2182, 2, 2016, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2183, 2, 2017, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2184, 2, 2018, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2188, 101, 1024, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2189, 101, 1, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2190, 101, 1025, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2191, 101, 1026, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2192, 101, 1027, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2193, 101, 1028, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2194, 101, 1029, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2195, 101, 1030, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2196, 101, 1036, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2197, 101, 1037, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2198, 101, 1038, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2199, 101, 1039, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2200, 101, 1040, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2201, 101, 1042, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2202, 101, 1043, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2203, 101, 1045, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2204, 101, 1046, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2205, 101, 1048, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2206, 101, 2083, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2207, 101, 1063, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2208, 101, 1064, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2209, 101, 1065, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2210, 101, 1093, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2211, 101, 1094, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2212, 101, 1095, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2213, 101, 1096, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2214, 101, 1097, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2215, 101, 1098, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2216, 101, 1100, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2217, 101, 1101, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2218, 101, 1102, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2219, 101, 1103, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2220, 101, 1104, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2221, 101, 1105, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2222, 101, 1106, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2223, 101, 2130, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2224, 101, 1107, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2225, 101, 2131, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2226, 101, 1108, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2227, 101, 2132, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2228, 101, 1109, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2229, 101, 2133, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2230, 101, 2134, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2232, 101, 2135, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2234, 101, 2136, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2236, 101, 2137, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2238, 101, 2138, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2240, 101, 2139, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2242, 101, 2140, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2243, 101, 2141, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2244, 101, 2142, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2245, 101, 2143, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2246, 101, 2144, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2247, 101, 2145, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2248, 101, 2146, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2249, 101, 2147, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2250, 101, 100, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2251, 101, 2148, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2252, 101, 101, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2253, 101, 2149, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2254, 101, 102, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2255, 101, 2150, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2256, 101, 103, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2257, 101, 2151, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2258, 101, 104, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2259, 101, 2152, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2260, 101, 105, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2261, 101, 107, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2262, 101, 108, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2263, 101, 109, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2264, 101, 1138, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2265, 101, 1139, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2266, 101, 1140, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2267, 101, 1141, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2268, 101, 1142, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2269, 101, 1143, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2270, 101, 1224, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2271, 101, 1225, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2272, 101, 1226, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2273, 101, 1227, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2274, 101, 1228, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2275, 101, 1229, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2282, 101, 1261, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2283, 101, 1263, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2284, 101, 1264, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2285, 101, 1265, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2286, 101, 1266, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2287, 101, 1267, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2288, 101, 1001, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2289, 101, 1002, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2290, 101, 1003, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2291, 101, 1004, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2292, 101, 1005, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2293, 101, 1006, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2294, 101, 1007, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2295, 101, 1008, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2296, 101, 1009, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2297, 101, 1010, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2298, 101, 1011, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2299, 101, 1012, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2300, 101, 500, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2301, 101, 1013, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2302, 101, 501, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2303, 101, 1014, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2304, 101, 1015, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2305, 101, 1016, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2306, 101, 1017, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2307, 101, 1018, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2308, 101, 1019, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2309, 101, 1020, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2310, 101, 1021, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2311, 101, 1022, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2312, 101, 1023, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2929, 109, 1224, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2930, 109, 1225, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2931, 109, 1226, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2932, 109, 1227, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2933, 109, 1228, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2934, 109, 1229, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2935, 109, 1138, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2936, 109, 1139, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2937, 109, 1140, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2938, 109, 1141, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2939, 109, 1142, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2940, 109, 1143, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2941, 111, 1224, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2942, 111, 1225, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2943, 111, 1226, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2944, 111, 1227, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2945, 111, 1228, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2946, 111, 1229, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2947, 111, 1138, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2948, 111, 1139, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2949, 111, 1140, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2950, 111, 1141, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2951, 111, 1142, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2952, 111, 1143, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2993, 109, 2, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2994, 109, 1031, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2995, 109, 1032, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2996, 109, 1033, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2997, 109, 1034, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2998, 109, 1035, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2999, 109, 1050, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3000, 109, 1051, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3001, 109, 1052, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3002, 109, 1053, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3003, 109, 1054, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3004, 109, 1056, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3005, 109, 1057, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3006, 109, 1058, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3007, 109, 1059, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3008, 109, 1060, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3009, 109, 1066, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3010, 109, 1067, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3011, 109, 1070, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3012, 109, 1075, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3013, 109, 1076, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3014, 109, 1077, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3015, 109, 1078, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3016, 109, 1082, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3017, 109, 1083, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3018, 109, 1084, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3019, 109, 1085, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3020, 109, 1086, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3021, 109, 1087, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3022, 109, 1088, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3023, 109, 1089, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3024, 109, 1090, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3025, 109, 1091, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3026, 109, 1092, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3027, 109, 106, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3028, 109, 110, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3029, 109, 111, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3030, 109, 112, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3031, 109, 113, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3032, 109, 114, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3033, 109, 115, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3034, 109, 116, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3035, 109, 2472, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3036, 109, 2478, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3037, 109, 2479, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3038, 109, 2480, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3039, 109, 2481, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3040, 109, 2482, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3041, 109, 2483, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3042, 109, 2484, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3043, 109, 2485, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3044, 109, 2486, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3045, 109, 2487, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3046, 109, 2488, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3047, 109, 2489, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3048, 109, 2490, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3049, 109, 2491, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3050, 109, 2492, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3051, 109, 2493, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3052, 109, 2494, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3053, 109, 2495, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3054, 109, 2497, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3055, 109, 1237, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3056, 109, 1238, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3057, 109, 1239, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3058, 109, 1240, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3059, 109, 1241, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3060, 109, 1242, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3061, 109, 1243, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3062, 109, 2525, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3063, 109, 1255, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3064, 109, 1256, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3065, 109, 1257, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3066, 109, 1258, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3067, 109, 1259, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3068, 109, 1260, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3069, 111, 2, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3070, 111, 1031, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3071, 111, 1032, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3072, 111, 1033, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3073, 111, 1034, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3074, 111, 1035, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3075, 111, 1050, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3076, 111, 1051, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3077, 111, 1052, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3078, 111, 1053, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3079, 111, 1054, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3080, 111, 1056, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3081, 111, 1057, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3082, 111, 1058, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3083, 111, 1059, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3084, 111, 1060, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3085, 111, 1066, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3086, 111, 1067, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3087, 111, 1070, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3088, 111, 1075, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3089, 111, 1076, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3090, 111, 1077, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3091, 111, 1078, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3092, 111, 1082, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3093, 111, 1083, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3094, 111, 1084, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3095, 111, 1085, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3096, 111, 1086, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3097, 111, 1087, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3098, 111, 1088, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3099, 111, 1089, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3100, 111, 1090, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3101, 111, 1091, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3102, 111, 1092, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3103, 111, 106, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3104, 111, 110, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3105, 111, 111, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3106, 111, 112, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3107, 111, 113, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3108, 111, 114, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3109, 111, 115, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3110, 111, 116, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3111, 111, 2472, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3112, 111, 2478, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3113, 111, 2479, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3114, 111, 2480, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3115, 111, 2481, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3116, 111, 2482, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3117, 111, 2483, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3118, 111, 2484, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3119, 111, 2485, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3120, 111, 2486, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3121, 111, 2487, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3122, 111, 2488, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3123, 111, 2489, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3124, 111, 2490, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3125, 111, 2491, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3126, 111, 2492, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3127, 111, 2493, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3128, 111, 2494, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3129, 111, 2495, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3130, 111, 2497, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3131, 111, 1237, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3132, 111, 1238, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3133, 111, 1239, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3134, 111, 1240, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3135, 111, 1241, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3136, 111, 1242, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3137, 111, 1243, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3138, 111, 2525, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3139, 111, 1255, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3140, 111, 1256, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3141, 111, 1257, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3142, 111, 1258, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3143, 111, 1259, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3144, 111, 1260, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3221, 109, 102, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3222, 109, 1013, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3223, 109, 1014, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3224, 109, 1015, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3225, 109, 1016, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3226, 111, 102, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3227, 111, 1013, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3228, 111, 1014, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3229, 111, 1015, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3230, 111, 1016, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4163, 109, 5, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4164, 109, 1118, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4165, 109, 1119, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4166, 109, 1120, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4167, 109, 2713, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4168, 109, 2714, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4169, 109, 2715, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4170, 109, 2716, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4171, 109, 2717, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4172, 109, 2718, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4173, 109, 2720, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4174, 109, 1185, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4175, 109, 2721, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4176, 109, 1186, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4177, 109, 2722, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4178, 109, 1187, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4179, 109, 2723, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4180, 109, 1188, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4181, 109, 2724, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4182, 109, 1189, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4183, 109, 2725, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4184, 109, 1190, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4185, 109, 2726, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4186, 109, 1191, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4187, 109, 2727, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4188, 109, 1192, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4189, 109, 2728, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4190, 109, 1193, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4191, 109, 2729, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4192, 109, 1194, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4193, 109, 2730, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4194, 109, 1195, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4195, 109, 2731, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4196, 109, 1196, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4197, 109, 2732, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4198, 109, 1197, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4199, 109, 2733, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4200, 109, 1198, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4201, 109, 2734, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4202, 109, 1199, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4203, 109, 2735, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4204, 109, 1200, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4205, 109, 1201, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4206, 109, 1202, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4207, 109, 1207, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4208, 109, 1208, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4209, 109, 1209, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4210, 109, 1210, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4211, 109, 1211, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4212, 109, 1212, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4213, 109, 1213, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4214, 109, 1215, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4215, 109, 1216, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4216, 109, 1217, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4217, 109, 1218, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4218, 109, 1219, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4219, 109, 1220, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4220, 109, 1221, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4221, 109, 1222, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', b'0', 121); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4222, 111, 5, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4223, 111, 1118, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4224, 111, 1119, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4225, 111, 1120, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4226, 111, 2713, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4227, 111, 2714, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4228, 111, 2715, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4229, 111, 2716, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4230, 111, 2717, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4231, 111, 2718, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4232, 111, 2720, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4233, 111, 1185, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4234, 111, 2721, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4235, 111, 1186, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4236, 111, 2722, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4237, 111, 1187, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4238, 111, 2723, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4239, 111, 1188, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4240, 111, 2724, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4241, 111, 1189, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4242, 111, 2725, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4243, 111, 1190, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4244, 111, 2726, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4245, 111, 1191, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4246, 111, 2727, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4247, 111, 1192, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4248, 111, 2728, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4249, 111, 1193, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4250, 111, 2729, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4251, 111, 1194, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4252, 111, 2730, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4253, 111, 1195, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4254, 111, 2731, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4255, 111, 1196, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4256, 111, 2732, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4257, 111, 1197, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4258, 111, 2733, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4259, 111, 1198, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4260, 111, 2734, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4261, 111, 1199, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4262, 111, 2735, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4263, 111, 1200, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4264, 111, 1201, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4265, 111, 1202, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4266, 111, 1207, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4267, 111, 1208, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4268, 111, 1209, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4269, 111, 1210, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4270, 111, 1211, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4271, 111, 1212, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4272, 111, 1213, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4273, 111, 1215, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4274, 111, 1216, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4275, 111, 1217, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4276, 111, 1218, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4277, 111, 1219, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4278, 111, 1220, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4279, 111, 1221, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4280, 111, 1222, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', b'0', 122); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (5777, 101, 2739, '1', '2024-04-30 09:38:37', '1', '2024-04-30 09:38:37', b'0', 1); +INSERT INTO `system_role_menu` (`id`, `role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (5778, 101, 2740, '1', '2024-04-30 09:38:37', '1', '2024-04-30 09:38:37', b'0', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for system_sms_channel +-- ---------------------------- +DROP TABLE IF EXISTS `system_sms_channel`; +CREATE TABLE `system_sms_channel` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `signature` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信签名', + `code` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '渠道编码', + `status` tinyint NOT NULL COMMENT '开启状态', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `api_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信 API 的账号', + `api_secret` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '短信 API 的秘钥', + `callback_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '短信发送回调 URL', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '短信渠道'; + +-- ---------------------------- +-- Records of system_sms_channel +-- ---------------------------- +BEGIN; +INSERT INTO `system_sms_channel` (`id`, `signature`, `code`, `status`, `remark`, `api_key`, `api_secret`, `callback_url`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2, 'Ballcat', 'ALIYUN', 0, '你要改哦,只有我可以用!!!!', 'LTAI5tCnKso2uG3kJ5gRav88', 'fGJ5SNXL7P1NHNRmJ7DJaMJGPyE55C', NULL, '', '2021-03-31 11:53:10', '1', '2023-12-02 22:10:17', b'0'); +INSERT INTO `system_sms_channel` (`id`, `signature`, `code`, `status`, `remark`, `api_key`, `api_secret`, `callback_url`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (4, '测试渠道', 'DEBUG_DING_TALK', 0, '123', '696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859', 'SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67', NULL, '1', '2021-04-13 00:23:14', '1', '2022-03-27 20:29:49', b'0'); +INSERT INTO `system_sms_channel` (`id`, `signature`, `code`, `status`, `remark`, `api_key`, `api_secret`, `callback_url`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (6, '测试演示', 'DEBUG_DING_TALK', 0, '仅测试', '696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859', 'SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67', NULL, '1', '2022-04-10 23:07:59', '1', '2023-12-02 22:10:08', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for system_sms_code +-- ---------------------------- +DROP TABLE IF EXISTS `system_sms_code`; +CREATE TABLE `system_sms_code` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `mobile` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '手机号', + `code` varchar(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '验证码', + `create_ip` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建 IP', + `scene` tinyint NOT NULL COMMENT '发送场景', + `today_index` tinyint NOT NULL COMMENT '今日发送的第几条', + `used` tinyint NOT NULL COMMENT '是否使用', + `used_time` datetime NULL DEFAULT NULL COMMENT '使用时间', + `used_ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '使用 IP', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_mobile`(`mobile` ASC) USING BTREE COMMENT '手机号' +) ENGINE = InnoDB AUTO_INCREMENT = 614 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '手机验证码'; + +-- ---------------------------- +-- Records of system_sms_code +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for system_sms_log +-- ---------------------------- +DROP TABLE IF EXISTS `system_sms_log`; +CREATE TABLE `system_sms_log` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `channel_id` bigint NOT NULL COMMENT '短信渠道编号', + `channel_code` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信渠道编码', + `template_id` bigint NOT NULL COMMENT '模板编号', + `template_code` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板编码', + `template_type` tinyint NOT NULL COMMENT '短信类型', + `template_content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信内容', + `template_params` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信参数', + `api_template_id` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信 API 的模板编号', + `mobile` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '手机号', + `user_id` bigint NULL DEFAULT NULL COMMENT '用户编号', + `user_type` tinyint NULL DEFAULT NULL COMMENT '用户类型', + `send_status` tinyint NOT NULL DEFAULT 0 COMMENT '发送状态', + `send_time` datetime NULL DEFAULT NULL COMMENT '发送时间', + `api_send_code` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '短信 API 发送结果的编码', + `api_send_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '短信 API 发送失败的提示', + `api_request_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '短信 API 发送返回的唯一请求 ID', + `api_serial_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '短信 API 发送返回的序号', + `receive_status` tinyint NOT NULL DEFAULT 0 COMMENT '接收状态', + `receive_time` datetime NULL DEFAULT NULL COMMENT '接收时间', + `api_receive_code` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'API 接收结果的编码', + `api_receive_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'API 接收结果的说明', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 962 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '短信日志'; + +-- ---------------------------- +-- Records of system_sms_log +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for system_sms_template +-- ---------------------------- +DROP TABLE IF EXISTS `system_sms_template`; +CREATE TABLE `system_sms_template` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `type` tinyint NOT NULL COMMENT '模板类型', + `status` tinyint NOT NULL COMMENT '开启状态', + `code` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板编码', + `name` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板名称', + `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板内容', + `params` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '参数数组', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `api_template_id` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信 API 的模板编号', + `channel_id` bigint NOT NULL COMMENT '短信渠道编号', + `channel_code` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信渠道编码', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '短信模板'; + +-- ---------------------------- +-- Records of system_sms_template +-- ---------------------------- +BEGIN; +INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (2, 1, 0, 'test_01', '测试验证码短信', '正在进行登录操作{operation},您的验证码是{code}', '[\"operation\",\"code\"]', '测试备注', '4383920', 6, 'DEBUG_DING_TALK', '', '2021-03-31 10:49:38', '1', '2023-12-02 22:32:47', b'0'); +INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (3, 1, 0, 'test_02', '公告通知', '您的验证码{code},该验证码5分钟内有效,请勿泄漏于他人!', '[\"code\"]', NULL, 'SMS_207945135', 2, 'ALIYUN', '', '2021-03-31 11:56:30', '1', '2021-04-10 01:22:02', b'0'); +INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (6, 3, 0, 'test-01', '测试模板', '哈哈哈 {name}', '[\"name\"]', 'f哈哈哈', '4383920', 6, 'DEBUG_DING_TALK', '1', '2021-04-10 01:07:21', '1', '2022-12-10 21:26:09', b'0'); +INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (7, 3, 0, 'test-04', '测试下', '老鸡{name},牛逼{code}', '[\"name\",\"code\"]', '哈哈哈哈', 'suibian', 4, 'DEBUG_DING_TALK', '1', '2021-04-13 00:29:53', '1', '2023-12-02 22:35:34', b'0'); +INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (8, 1, 0, 'user-sms-login', '前台用户短信登录', '您的验证码是{code}', '[\"code\"]', NULL, '4372216', 6, 'DEBUG_DING_TALK', '1', '2021-10-11 08:10:00', '1', '2022-12-10 21:25:59', b'0'); +INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (9, 2, 0, 'bpm_task_assigned', '【工作流】任务被分配', '您收到了一条新的待办任务:{processInstanceName}-{taskName},申请人:{startUserNickname},处理链接:{detailUrl}', '[\"processInstanceName\",\"taskName\",\"startUserNickname\",\"detailUrl\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-21 22:31:19', '1', '2022-01-22 00:03:36', b'0'); +INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (10, 2, 0, 'bpm_process_instance_reject', '【工作流】流程被不通过', '您的流程被审批不通过:{processInstanceName},原因:{reason},查看链接:{detailUrl}', '[\"processInstanceName\",\"reason\",\"detailUrl\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:03:31', '1', '2022-05-01 12:33:14', b'0'); +INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (11, 2, 0, 'bpm_process_instance_approve', '【工作流】流程被通过', '您的流程被审批通过:{processInstanceName},查看链接:{detailUrl}', '[\"processInstanceName\",\"detailUrl\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:04:31', '1', '2022-03-27 20:32:21', b'0'); +INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (12, 2, 0, 'demo', '演示模板', '我就是测试一下下', '[]', NULL, 'biubiubiu', 6, 'DEBUG_DING_TALK', '1', '2022-04-10 23:22:49', '1', '2023-03-24 23:45:07', b'0'); +INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (14, 1, 0, 'user-update-mobile', '会员用户 - 修改手机', '您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', '[\"code\"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', '2023-08-19 18:58:01', '1', '2023-08-19 11:34:04', b'0'); +INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (15, 1, 0, 'user-update-password', '会员用户 - 修改密码', '您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', '[\"code\"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', '2023-08-19 18:58:01', '1', '2023-08-19 11:34:18', b'0'); +INSERT INTO `system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (16, 1, 0, 'user-reset-password', '会员用户 - 重置密码', '您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', '[\"code\"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', '2023-08-19 18:58:01', '1', '2023-12-02 22:35:27', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for system_social_client +-- ---------------------------- +DROP TABLE IF EXISTS `system_social_client`; +CREATE TABLE `system_social_client` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用名', + `social_type` tinyint NOT NULL COMMENT '社交平台的类型', + `user_type` tinyint NOT NULL COMMENT '用户类型', + `client_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端编号', + `client_secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端密钥', + `agent_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '代理编号', + `status` tinyint NOT NULL COMMENT '状态', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 44 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '社交客户端表'; + +-- ---------------------------- +-- Records of system_social_client +-- ---------------------------- +BEGIN; +INSERT INTO `system_social_client` (`id`, `name`, `social_type`, `user_type`, `client_id`, `client_secret`, `agent_id`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, '钉钉', 20, 2, 'dingvrnreaje3yqvzhxg', 'i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI', NULL, 0, '', '2023-10-18 11:21:18', '1', '2023-12-20 21:28:26', b'1', 1); +INSERT INTO `system_social_client` (`id`, `name`, `social_type`, `user_type`, `client_id`, `client_secret`, `agent_id`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2, '钉钉(王土豆)', 20, 2, 'dingtsu9hpepjkbmthhw', 'FP_bnSq_HAHKCSncmJjw5hxhnzs6vaVDSZZn3egj6rdqTQ_hu5tQVJyLMpgCakdP', NULL, 0, '', '2023-10-18 11:21:18', '', '2023-12-20 21:28:26', b'1', 121); +INSERT INTO `system_social_client` (`id`, `name`, `social_type`, `user_type`, `client_id`, `client_secret`, `agent_id`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3, '微信公众号', 31, 1, 'wx5b23ba7a5589ecbb', '2a7b3b20c537e52e74afd395eb85f61f', NULL, 0, '', '2023-10-18 16:07:46', '1', '2023-12-20 21:28:23', b'1', 1); +INSERT INTO `system_social_client` (`id`, `name`, `social_type`, `user_type`, `client_id`, `client_secret`, `agent_id`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (43, '微信小程序', 34, 1, 'wx63c280fe3248a3e7', '6f270509224a7ae1296bbf1c8cb97aed', NULL, 0, '', '2023-10-19 13:37:41', '1', '2023-12-20 21:28:25', b'1', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for system_social_user +-- ---------------------------- +DROP TABLE IF EXISTS `system_social_user`; +CREATE TABLE `system_social_user` ( + `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键(自增策略)', + `type` tinyint NOT NULL COMMENT '社交平台的类型', + `openid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '社交 openid', + `token` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '社交 token', + `raw_token_info` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原始 Token 数据,一般是 JSON 格式', + `nickname` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户昵称', + `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '用户头像', + `raw_user_info` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原始用户数据,一般是 JSON 格式', + `code` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '最后一次的认证 code', + `state` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '最后一次的认证 state', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 36 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '社交用户表'; + +-- ---------------------------- +-- Records of system_social_user +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for system_social_user_bind +-- ---------------------------- +DROP TABLE IF EXISTS `system_social_user_bind`; +CREATE TABLE `system_social_user_bind` ( + `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键(自增策略)', + `user_id` bigint NOT NULL COMMENT '用户编号', + `user_type` tinyint NOT NULL COMMENT '用户类型', + `social_type` tinyint NOT NULL COMMENT '社交平台的类型', + `social_user_id` bigint NOT NULL COMMENT '社交用户的编号', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 119 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '社交绑定表'; + +-- ---------------------------- +-- Records of system_social_user_bind +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for system_tenant +-- ---------------------------- +DROP TABLE IF EXISTS `system_tenant`; +CREATE TABLE `system_tenant` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '租户编号', + `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户名', + `contact_user_id` bigint NULL DEFAULT NULL COMMENT '联系人的用户编号', + `contact_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '联系人', + `contact_mobile` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '联系手机', + `status` tinyint NOT NULL DEFAULT 0 COMMENT '租户状态(0正常 1停用)', + `website` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '绑定域名', + `package_id` bigint NOT NULL COMMENT '租户套餐编号', + `expire_time` datetime NOT NULL COMMENT '过期时间', + `account_count` int NOT NULL COMMENT '账号数量', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 162 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '租户表'; + +-- ---------------------------- +-- Records of system_tenant +-- ---------------------------- +BEGIN; +INSERT INTO `system_tenant` (`id`, `name`, `contact_user_id`, `contact_name`, `contact_mobile`, `status`, `website`, `package_id`, `expire_time`, `account_count`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1, '芋道源码', NULL, '芋艿', '17321315478', 0, 'www.iocoder.cn', 0, '2099-02-19 17:14:16', 9999, '1', '2021-01-05 17:03:47', '1', '2023-11-06 11:41:41', b'0'); +INSERT INTO `system_tenant` (`id`, `name`, `contact_user_id`, `contact_name`, `contact_mobile`, `status`, `website`, `package_id`, `expire_time`, `account_count`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (121, '小租户', 110, '小王2', '15601691300', 0, 'zsxq.iocoder.cn', 111, '2024-03-11 00:00:00', 20, '1', '2022-02-22 00:56:14', '1', '2023-11-06 11:41:47', b'0'); +INSERT INTO `system_tenant` (`id`, `name`, `contact_user_id`, `contact_name`, `contact_mobile`, `status`, `website`, `package_id`, `expire_time`, `account_count`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (122, '测试租户', 113, '芋道', '15601691300', 0, 'test.iocoder.cn', 111, '2022-04-30 00:00:00', 50, '1', '2022-03-07 21:37:58', '1', '2023-11-06 11:41:53', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for system_tenant_package +-- ---------------------------- +DROP TABLE IF EXISTS `system_tenant_package`; +CREATE TABLE `system_tenant_package` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '套餐编号', + `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '套餐名', + `status` tinyint NOT NULL DEFAULT 0 COMMENT '租户状态(0正常 1停用)', + `remark` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '备注', + `menu_ids` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '关联的菜单编号', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 112 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '租户套餐表'; + +-- ---------------------------- +-- Records of system_tenant_package +-- ---------------------------- +BEGIN; +INSERT INTO `system_tenant_package` (`id`, `name`, `status`, `remark`, `menu_ids`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (111, '普通套餐', 0, '小功能', '[1,2,5,1031,1032,1033,1034,1035,1036,1037,1038,1039,1050,1051,1052,1053,1054,1056,1057,1058,1059,1060,1063,1064,1065,1066,1067,1070,1075,1076,1077,1078,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1118,1119,1120,100,101,102,103,106,107,110,111,112,113,1138,114,1139,115,1140,116,1141,1142,1143,2713,2714,2715,2716,2717,2718,2720,1185,2721,1186,2722,1187,2723,1188,2724,1189,2725,1190,2726,1191,2727,2472,1192,2728,1193,2729,1194,2730,1195,2731,1196,2732,1197,2733,2478,1198,2734,2479,1199,2735,2480,1200,2481,1201,2482,1202,2483,2484,2485,2486,2487,1207,2488,1208,2489,1209,2490,1210,2491,1211,2492,1212,2493,1213,2494,2495,1215,1216,2497,1217,1218,1219,1220,1221,1222,1224,1225,1226,1227,1228,1229,1237,1238,1239,1240,1241,1242,1243,2525,1255,1256,1001,1257,1002,1258,1003,1259,1004,1260,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020]', '1', '2022-02-22 00:54:00', '1', '2024-03-30 17:53:17', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for system_user_post +-- ---------------------------- +DROP TABLE IF EXISTS `system_user_post`; +CREATE TABLE `system_user_post` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', + `user_id` bigint NOT NULL DEFAULT 0 COMMENT '用户ID', + `post_id` bigint NOT NULL DEFAULT 0 COMMENT '岗位ID', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 125 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户岗位表'; + +-- ---------------------------- +-- Records of system_user_post +-- ---------------------------- +BEGIN; +INSERT INTO `system_user_post` (`id`, `user_id`, `post_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (112, 1, 1, 'admin', '2022-05-02 07:25:24', 'admin', '2022-05-02 07:25:24', b'0', 1); +INSERT INTO `system_user_post` (`id`, `user_id`, `post_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (113, 100, 1, 'admin', '2022-05-02 07:25:24', 'admin', '2022-05-02 07:25:24', b'0', 1); +INSERT INTO `system_user_post` (`id`, `user_id`, `post_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (115, 104, 1, '1', '2022-05-16 19:36:28', '1', '2022-05-16 19:36:28', b'0', 1); +INSERT INTO `system_user_post` (`id`, `user_id`, `post_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (116, 117, 2, '1', '2022-07-09 17:40:26', '1', '2022-07-09 17:40:26', b'0', 1); +INSERT INTO `system_user_post` (`id`, `user_id`, `post_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (117, 118, 1, '1', '2022-07-09 17:44:44', '1', '2022-07-09 17:44:44', b'0', 1); +INSERT INTO `system_user_post` (`id`, `user_id`, `post_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (119, 114, 5, '1', '2024-03-24 20:45:51', '1', '2024-03-24 20:45:51', b'0', 1); +INSERT INTO `system_user_post` (`id`, `user_id`, `post_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (123, 115, 1, '1', '2024-04-04 09:37:14', '1', '2024-04-04 09:37:14', b'0', 1); +INSERT INTO `system_user_post` (`id`, `user_id`, `post_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (124, 115, 2, '1', '2024-04-04 09:37:14', '1', '2024-04-04 09:37:14', b'0', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for system_user_role +-- ---------------------------- +DROP TABLE IF EXISTS `system_user_role`; +CREATE TABLE `system_user_role` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增编号', + `user_id` bigint NOT NULL COMMENT '用户ID', + `role_id` bigint NOT NULL COMMENT '角色ID', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 46 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户和角色关联表'; + +-- ---------------------------- +-- Records of system_user_role +-- ---------------------------- +BEGIN; +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, 1, 1, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:17', b'0', 1); +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2, 2, 2, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:13', b'0', 1); +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4, 100, 101, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:13', b'0', 1); +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (5, 100, 1, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:12', b'0', 1); +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6, 100, 2, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:11', b'0', 1); +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (10, 103, 1, '1', '2022-01-11 13:19:45', '1', '2022-01-11 13:19:45', b'0', 1); +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (14, 110, 109, '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', b'0', 121); +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (15, 111, 110, '110', '2022-02-23 13:14:38', '110', '2022-02-23 13:14:38', b'0', 121); +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (16, 113, 111, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (18, 1, 2, '1', '2022-05-12 20:39:29', '1', '2022-05-12 20:39:29', b'0', 1); +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (20, 104, 101, '1', '2022-05-28 15:43:57', '1', '2022-05-28 15:43:57', b'0', 1); +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (22, 115, 2, '1', '2022-07-21 22:08:30', '1', '2022-07-21 22:08:30', b'0', 1); +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (35, 112, 1, '1', '2024-03-15 20:00:24', '1', '2024-03-15 20:00:24', b'0', 1); +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (36, 118, 1, '1', '2024-03-17 09:12:08', '1', '2024-03-17 09:12:08', b'0', 1); +INSERT INTO `system_user_role` (`id`, `user_id`, `role_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (38, 114, 101, '1', '2024-03-24 22:23:03', '1', '2024-03-24 22:23:03', b'0', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for system_users +-- ---------------------------- +DROP TABLE IF EXISTS `system_users`; +CREATE TABLE `system_users` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户账号', + `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '密码', + `nickname` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户昵称', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `dept_id` bigint NULL DEFAULT NULL COMMENT '部门ID', + `post_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '岗位编号数组', + `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '用户邮箱', + `mobile` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '手机号码', + `sex` tinyint NULL DEFAULT 0 COMMENT '用户性别', + `avatar` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '头像地址', + `status` tinyint NOT NULL DEFAULT 0 COMMENT '帐号状态(0正常 1停用)', + `login_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '最后登录IP', + `login_date` datetime NULL DEFAULT NULL COMMENT '最后登录时间', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `idx_username`(`username` ASC, `update_time` ASC, `tenant_id` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 139 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户信息表'; + +-- ---------------------------- +-- Records of system_users +-- ---------------------------- +BEGIN; +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, 'admin', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '18818260277', 2, 'http://test.win.iocoder.cn/96c787a2ce88bf6d0ce3cd8b6cf5314e80e7703cd41bf4af8cd2e2909dbd6b6d.png', 0, '0:0:0:0:0:0:0:1', '2024-04-29 21:50:32', 'admin', '2021-01-05 17:03:47', NULL, '2024-04-29 21:50:32', b'0', 1); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (100, 'win', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', 104, '[1]', 'win@iocoder.cn', '15601691300', 1, '', 1, '127.0.0.1', '2022-07-09 23:03:33', '', '2021-01-07 09:07:17', NULL, '2022-07-09 23:03:33', b'0', 1); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (103, 'yuanma', '$2a$10$YMpimV4T6BtDhIaA8jSW.u8UTGBeGhc/qwXP4oxoMr4mOw9.qttt6', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '0:0:0:0:0:0:0:1', '2024-03-18 21:09:04', '', '2021-01-13 23:50:35', NULL, '2024-03-18 21:09:04', b'0', 1); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (104, 'test', '$2a$04$KhExCYl7lx6eWWZYKsibKOZ8IBJRyuNuCcEOLQ11RYhJKgHmlSwK.', '测试号', NULL, 107, '[1,2]', '111@qq.com', '15601691200', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-26 07:11:35', '', '2021-01-21 02:13:53', NULL, '2024-03-26 07:11:35', b'0', 1); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (107, 'admin107', '$2a$10$dYOOBKMO93v/.ReCqzyFg.o67Tqk.bbc2bhrpyBGkIw9aypCtr2pm', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 22:59:33', '1', '2022-02-27 08:26:51', b'0', 118); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (108, 'admin108', '$2a$10$y6mfvKoNYL1GXWak8nYwVOH.kCWqjactkzdoIDgiKl93WN3Ejg.Lu', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:00:50', '1', '2022-02-27 08:26:53', b'0', 119); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (109, 'admin109', '$2a$10$JAqvH0tEc0I7dfDVBI7zyuB4E3j.uH6daIjV53.vUS6PknFkDJkuK', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:11:50', '1', '2022-02-27 08:26:56', b'0', 120); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (110, 'admin110', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '小王', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-09-25 22:47:33', '1', '2022-02-22 00:56:14', NULL, '2022-09-25 22:47:33', b'0', 121); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (111, 'test', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '测试用户', NULL, NULL, '[]', '', '', 0, '', 0, '0:0:0:0:0:0:0:1', '2023-12-30 11:42:17', '110', '2022-02-23 13:14:33', NULL, '2023-12-30 11:42:17', b'0', 121); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (112, 'newobject', '$2a$04$dB0z8Q819fJWz0hbaLe6B.VfHCjYgWx6LFfET5lyz3JwcqlyCkQ4C', '新对象', NULL, 100, '[]', '', '15601691235', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-16 23:11:38', '1', '2022-02-23 19:08:03', NULL, '2024-03-16 23:11:38', b'0', 1); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (113, 'aoteman', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-03-19 18:38:51', '1', '2022-03-07 21:37:58', NULL, '2022-03-19 18:38:51', b'0', 122); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (114, 'hrmgr', '$2a$10$TR4eybBioGRhBmDBWkqWLO6NIh3mzYa8KBKDDB5woiGYFVlRAi.fu', 'hr 小姐姐', NULL, NULL, '[5]', '', '15601691236', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-24 22:21:05', '1', '2022-03-19 21:50:58', NULL, '2024-03-24 22:21:05', b'0', 1); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (115, 'aotemane', '$2a$04$GcyP0Vyzb2F2Yni5PuIK9ueGxM0tkZGMtDwVRwrNbtMvorzbpNsV2', '阿呆', '11222', 102, '[1,2]', '7648@qq.com', '15601691229', 2, '', 0, '', NULL, '1', '2022-04-30 02:55:43', '1', '2024-04-04 09:37:14', b'0', 1); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (117, 'admin123', '$2a$10$WI8Gg/lpZQIrOEZMHqka7OdFaD4Nx.B/qY8ZGTTUKrOJwaHFqibaC', '测试号', '1111', 100, '[2]', '', '15601691234', 1, '', 0, '', NULL, '1', '2022-07-09 17:40:26', '1', '2022-07-09 17:40:26', b'0', 1); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (118, 'goudan', '$2a$04$OB1SuphCdiLVRpiYRKeqH.8NYS7UIp5vmIv1W7U4w6toiFeOAATVK', '狗蛋', NULL, 103, '[1]', '', '15601691239', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-17 09:10:27', '1', '2022-07-09 17:44:43', '1', '2024-04-04 09:48:05', b'0', 1); +INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `remark`, `dept_id`, `post_ids`, `email`, `mobile`, `sex`, `avatar`, `status`, `login_ip`, `login_date`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (131, 'hh', '$2a$04$jyH9h6.gaw8mpOjPfHIpx.8as2Rzfcmdlj5rlJFwgCw4rsv/MTb2K', '呵呵', NULL, 100, '[]', '777@qq.com', '15601882312', 1, '', 0, '', NULL, '1', '2024-04-27 08:45:56', '1', '2024-04-27 08:45:56', b'0', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for win_demo01_contact +-- ---------------------------- +DROP TABLE IF EXISTS `win_demo01_contact`; +CREATE TABLE `win_demo01_contact` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '名字', + `sex` tinyint(1) NOT NULL COMMENT '性别', + `birthday` datetime NOT NULL COMMENT '出生年', + `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '简介', + `avatar` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '头像', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '示例联系人表'; + +-- ---------------------------- +-- Records of win_demo01_contact +-- ---------------------------- +BEGIN; +INSERT INTO `win_demo01_contact` (`id`, `name`, `sex`, `birthday`, `description`, `avatar`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, '土豆', 2, '2023-11-07 00:00:00', '

    天蚕土豆!呀

    ', 'http://127.0.0.1:48080/admin-api/infra/file/4/get/46f8fa1a37db3f3960d8910ff2fe3962ab3b2db87cf2f8ccb4dc8145b8bdf237.jpeg', '1', '2023-11-15 23:34:30', '1', '2023-11-15 23:47:39', b'0', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for win_demo02_category +-- ---------------------------- +DROP TABLE IF EXISTS `win_demo02_category`; +CREATE TABLE `win_demo02_category` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '名字', + `parent_id` bigint NOT NULL COMMENT '父级编号', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '示例分类表'; + +-- ---------------------------- +-- Records of win_demo02_category +-- ---------------------------- +BEGIN; +INSERT INTO `win_demo02_category` (`id`, `name`, `parent_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (1, '土豆', 0, '1', '2023-11-15 23:34:30', '1', '2023-11-16 20:24:23', b'0', 1); +INSERT INTO `win_demo02_category` (`id`, `name`, `parent_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2, '番茄', 0, '1', '2023-11-16 20:24:00', '1', '2023-11-16 20:24:15', b'0', 1); +INSERT INTO `win_demo02_category` (`id`, `name`, `parent_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3, '怪怪', 0, '1', '2023-11-16 20:24:32', '1', '2023-11-16 20:24:32', b'0', 1); +INSERT INTO `win_demo02_category` (`id`, `name`, `parent_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (4, '小番茄', 2, '1', '2023-11-16 20:24:39', '1', '2023-11-16 20:24:39', b'0', 1); +INSERT INTO `win_demo02_category` (`id`, `name`, `parent_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (5, '大番茄', 2, '1', '2023-11-16 20:24:46', '1', '2023-11-16 20:24:46', b'0', 1); +INSERT INTO `win_demo02_category` (`id`, `name`, `parent_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6, '11', 3, '1', '2023-11-24 19:29:34', '1', '2023-11-24 19:29:34', b'0', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for win_demo03_course +-- ---------------------------- +DROP TABLE IF EXISTS `win_demo03_course`; +CREATE TABLE `win_demo03_course` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `student_id` bigint NOT NULL COMMENT '学生编号', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '名字', + `score` tinyint NOT NULL COMMENT '分数', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '学生课程表'; + +-- ---------------------------- +-- Records of win_demo03_course +-- ---------------------------- +BEGIN; +INSERT INTO `win_demo03_course` (`id`, `student_id`, `name`, `score`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2, 2, '语文', 66, '1', '2023-11-16 23:21:49', '1', '2023-11-16 23:21:49', b'0', 1); +INSERT INTO `win_demo03_course` (`id`, `student_id`, `name`, `score`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (3, 2, '数学', 22, '1', '2023-11-16 23:21:49', '1', '2023-11-16 23:21:49', b'0', 1); +INSERT INTO `win_demo03_course` (`id`, `student_id`, `name`, `score`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (6, 5, '体育', 23, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:44:40', b'1', 1); +INSERT INTO `win_demo03_course` (`id`, `student_id`, `name`, `score`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (7, 5, '计算机', 11, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:44:40', b'1', 1); +INSERT INTO `win_demo03_course` (`id`, `student_id`, `name`, `score`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (8, 5, '体育', 23, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:47:09', b'1', 1); +INSERT INTO `win_demo03_course` (`id`, `student_id`, `name`, `score`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (9, 5, '计算机', 11, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:47:09', b'1', 1); +INSERT INTO `win_demo03_course` (`id`, `student_id`, `name`, `score`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (10, 5, '体育', 23, '1', '2023-11-16 23:22:46', '1', '2023-11-16 23:47:10', b'0', 1); +INSERT INTO `win_demo03_course` (`id`, `student_id`, `name`, `score`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (11, 5, '计算机', 11, '1', '2023-11-16 23:22:46', '1', '2023-11-16 23:47:10', b'0', 1); +INSERT INTO `win_demo03_course` (`id`, `student_id`, `name`, `score`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (12, 2, '电脑', 33, '1', '2023-11-17 00:20:42', '1', '2023-11-16 16:20:45', b'1', 1); +INSERT INTO `win_demo03_course` (`id`, `student_id`, `name`, `score`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (13, 9, '滑雪', 12, '1', '2023-11-17 13:13:20', '1', '2023-11-17 13:13:20', b'0', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for win_demo03_grade +-- ---------------------------- +DROP TABLE IF EXISTS `win_demo03_grade`; +CREATE TABLE `win_demo03_grade` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `student_id` bigint NOT NULL COMMENT '学生编号', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '名字', + `teacher` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '班主任', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '学生班级表'; + +-- ---------------------------- +-- Records of win_demo03_grade +-- ---------------------------- +BEGIN; +INSERT INTO `win_demo03_grade` (`id`, `student_id`, `name`, `teacher`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (7, 2, '三年 2 班', '周杰伦', '1', '2023-11-16 23:21:49', '1', '2023-11-16 23:21:49', b'0', 1); +INSERT INTO `win_demo03_grade` (`id`, `student_id`, `name`, `teacher`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (8, 5, '华为', '遥遥领先', '1', '2023-11-16 23:22:46', '1', '2023-11-16 23:47:10', b'0', 1); +INSERT INTO `win_demo03_grade` (`id`, `student_id`, `name`, `teacher`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (9, 9, '小图', '小娃111', '1', '2023-11-17 13:10:23', '1', '2023-11-17 13:10:23', b'0', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for win_demo03_student +-- ---------------------------- +DROP TABLE IF EXISTS `win_demo03_student`; +CREATE TABLE `win_demo03_student` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '名字', + `sex` tinyint NOT NULL COMMENT '性别', + `birthday` datetime NOT NULL COMMENT '出生日期', + `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '简介', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '学生表'; + +-- ---------------------------- +-- Records of win_demo03_student +-- ---------------------------- +BEGIN; +INSERT INTO `win_demo03_student` (`id`, `name`, `sex`, `birthday`, `description`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (2, '小白', 1, '2023-11-16 00:00:00', '

    厉害

    ', '1', '2023-11-16 23:21:49', '1', '2023-11-17 16:49:06', b'0', 1); +INSERT INTO `win_demo03_student` (`id`, `name`, `sex`, `birthday`, `description`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (5, '大黑', 2, '2023-11-13 00:00:00', '

    你在教我做事?

    ', '1', '2023-11-16 23:22:46', '1', '2023-11-17 16:49:07', b'0', 1); +INSERT INTO `win_demo03_student` (`id`, `name`, `sex`, `birthday`, `description`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES (9, '小花', 1, '2023-11-07 00:00:00', '

    哈哈哈

    ', '1', '2023-11-17 00:04:47', '1', '2023-11-17 16:49:08', b'0', 1); +COMMIT; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/sql/oracle/ruoyi-vue-pro.sql b/sql/oracle/ruoyi-vue-pro.sql new file mode 100644 index 0000000..80ad0ef --- /dev/null +++ b/sql/oracle/ruoyi-vue-pro.sql @@ -0,0 +1,4582 @@ +/* + Win Database Transfer Tool + + Source Server Type : MySQL + + Target Server Type : Oracle + + Date: 2024-05-02 00:10:33 +*/ + + +-- ---------------------------- +-- Table structure for infra_api_access_log +-- ---------------------------- +CREATE TABLE infra_api_access_log +( + id number NOT NULL, + trace_id varchar2(64) DEFAULT '' NULL, + user_id number DEFAULT 0 NOT NULL, + user_type smallint DEFAULT 0 NOT NULL, + application_name varchar2(50) NOT NULL, + request_method varchar2(16) DEFAULT '' NULL, + request_url varchar2(255) DEFAULT '' NULL, + request_params clob NULL, + response_body clob NULL, + user_ip varchar2(50) NOT NULL, + user_agent varchar2(512) NOT NULL, + operate_module varchar2(50) DEFAULT NULL NULL, + operate_name varchar2(50) DEFAULT NULL NULL, + operate_type smallint DEFAULT 0 NULL, + begin_time date NOT NULL, + end_time date NOT NULL, + duration number NOT NULL, + result_code number DEFAULT 0 NOT NULL, + result_msg varchar2(512) DEFAULT '' NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE infra_api_access_log + ADD CONSTRAINT pk_infra_api_access_log PRIMARY KEY (id); + +CREATE INDEX idx_infra_api_access_log_01 ON infra_api_access_log (create_time); + +COMMENT ON COLUMN infra_api_access_log.id IS '日志主键'; +COMMENT ON COLUMN infra_api_access_log.trace_id IS '链路追踪编号'; +COMMENT ON COLUMN infra_api_access_log.user_id IS '用户编号'; +COMMENT ON COLUMN infra_api_access_log.user_type IS '用户类型'; +COMMENT ON COLUMN infra_api_access_log.application_name IS '应用名'; +COMMENT ON COLUMN infra_api_access_log.request_method IS '请求方法名'; +COMMENT ON COLUMN infra_api_access_log.request_url IS '请求地址'; +COMMENT ON COLUMN infra_api_access_log.request_params IS '请求参数'; +COMMENT ON COLUMN infra_api_access_log.response_body IS '响应结果'; +COMMENT ON COLUMN infra_api_access_log.user_ip IS '用户 IP'; +COMMENT ON COLUMN infra_api_access_log.user_agent IS '浏览器 UA'; +COMMENT ON COLUMN infra_api_access_log.operate_module IS '操作模块'; +COMMENT ON COLUMN infra_api_access_log.operate_name IS '操作名'; +COMMENT ON COLUMN infra_api_access_log.operate_type IS '操作分类'; +COMMENT ON COLUMN infra_api_access_log.begin_time IS '开始请求时间'; +COMMENT ON COLUMN infra_api_access_log.end_time IS '结束请求时间'; +COMMENT ON COLUMN infra_api_access_log.duration IS '执行时长'; +COMMENT ON COLUMN infra_api_access_log.result_code IS '结果码'; +COMMENT ON COLUMN infra_api_access_log.result_msg IS '结果提示'; +COMMENT ON COLUMN infra_api_access_log.creator IS '创建者'; +COMMENT ON COLUMN infra_api_access_log.create_time IS '创建时间'; +COMMENT ON COLUMN infra_api_access_log.updater IS '更新者'; +COMMENT ON COLUMN infra_api_access_log.update_time IS '更新时间'; +COMMENT ON COLUMN infra_api_access_log.deleted IS '是否删除'; +COMMENT ON COLUMN infra_api_access_log.tenant_id IS '租户编号'; +COMMENT ON TABLE infra_api_access_log IS 'API 访问日志表'; + +CREATE SEQUENCE infra_api_access_log_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for infra_api_error_log +-- ---------------------------- +CREATE TABLE infra_api_error_log +( + id number NOT NULL, + trace_id varchar2(64) NOT NULL, + user_id number DEFAULT 0 NOT NULL, + user_type smallint DEFAULT 0 NOT NULL, + application_name varchar2(50) NOT NULL, + request_method varchar2(16) NOT NULL, + request_url varchar2(255) NOT NULL, + request_params varchar2(4000) NOT NULL, + user_ip varchar2(50) NOT NULL, + user_agent varchar2(512) NOT NULL, + exception_time date NOT NULL, + exception_name varchar2(128) DEFAULT '' NULL, + exception_message clob NOT NULL, + exception_root_cause_message clob NOT NULL, + exception_stack_trace clob NOT NULL, + exception_class_name varchar2(512) NOT NULL, + exception_file_name varchar2(512) NOT NULL, + exception_method_name varchar2(512) NOT NULL, + exception_line_number number NOT NULL, + process_status smallint NOT NULL, + process_time date DEFAULT NULL NULL, + process_user_id number DEFAULT 0 NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE infra_api_error_log + ADD CONSTRAINT pk_infra_api_error_log PRIMARY KEY (id); + +COMMENT ON COLUMN infra_api_error_log.id IS '编号'; +COMMENT ON COLUMN infra_api_error_log.trace_id IS '链路追踪编号 + * + * 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。'; +COMMENT ON COLUMN infra_api_error_log.user_id IS '用户编号'; +COMMENT ON COLUMN infra_api_error_log.user_type IS '用户类型'; +COMMENT ON COLUMN infra_api_error_log.application_name IS '应用名 + * + * 目前读取 spring.application.name'; +COMMENT ON COLUMN infra_api_error_log.request_method IS '请求方法名'; +COMMENT ON COLUMN infra_api_error_log.request_url IS '请求地址'; +COMMENT ON COLUMN infra_api_error_log.request_params IS '请求参数'; +COMMENT ON COLUMN infra_api_error_log.user_ip IS '用户 IP'; +COMMENT ON COLUMN infra_api_error_log.user_agent IS '浏览器 UA'; +COMMENT ON COLUMN infra_api_error_log.exception_time IS '异常发生时间'; +COMMENT ON COLUMN infra_api_error_log.exception_name IS '异常名 + * + * {@link Throwable#getClass()} 的类全名'; +COMMENT ON COLUMN infra_api_error_log.exception_message IS '异常导致的消息 + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getMessage(Throwable)}'; +COMMENT ON COLUMN infra_api_error_log.exception_root_cause_message IS '异常导致的根消息 + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getRootCauseMessage(Throwable)}'; +COMMENT ON COLUMN infra_api_error_log.exception_stack_trace IS '异常的栈轨迹 + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getServiceException(Exception)}'; +COMMENT ON COLUMN infra_api_error_log.exception_class_name IS '异常发生的类全名 + * + * {@link StackTraceElement#getClassName()}'; +COMMENT ON COLUMN infra_api_error_log.exception_file_name IS '异常发生的类文件 + * + * {@link StackTraceElement#getFileName()}'; +COMMENT ON COLUMN infra_api_error_log.exception_method_name IS '异常发生的方法名 + * + * {@link StackTraceElement#getMethodName()}'; +COMMENT ON COLUMN infra_api_error_log.exception_line_number IS '异常发生的方法所在行 + * + * {@link StackTraceElement#getLineNumber()}'; +COMMENT ON COLUMN infra_api_error_log.process_status IS '处理状态'; +COMMENT ON COLUMN infra_api_error_log.process_time IS '处理时间'; +COMMENT ON COLUMN infra_api_error_log.process_user_id IS '处理用户编号'; +COMMENT ON COLUMN infra_api_error_log.creator IS '创建者'; +COMMENT ON COLUMN infra_api_error_log.create_time IS '创建时间'; +COMMENT ON COLUMN infra_api_error_log.updater IS '更新者'; +COMMENT ON COLUMN infra_api_error_log.update_time IS '更新时间'; +COMMENT ON COLUMN infra_api_error_log.deleted IS '是否删除'; +COMMENT ON COLUMN infra_api_error_log.tenant_id IS '租户编号'; +COMMENT ON TABLE infra_api_error_log IS '系统异常日志'; + +CREATE SEQUENCE infra_api_error_log_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for infra_codegen_column +-- ---------------------------- +CREATE TABLE infra_codegen_column +( + id number NOT NULL, + table_id number NOT NULL, + column_name varchar2(200) NOT NULL, + data_type varchar2(100) NOT NULL, + column_comment varchar2(500) NOT NULL, + nullable number(1, 0) NOT NULL, + primary_key number(1, 0) NOT NULL, + ordinal_position number NOT NULL, + java_type varchar2(32) NOT NULL, + java_field varchar2(64) NOT NULL, + dict_type varchar2(200) DEFAULT '' NULL, + example varchar2(64) DEFAULT NULL NULL, + create_operation number(1, 0) NOT NULL, + update_operation number(1, 0) NOT NULL, + list_operation number(1, 0) NOT NULL, + list_operation_condition varchar2(32) DEFAULT '=' NOT NULL, + list_operation_result number(1, 0) NOT NULL, + html_type varchar2(32) NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE infra_codegen_column + ADD CONSTRAINT pk_infra_codegen_column PRIMARY KEY (id); + +COMMENT ON COLUMN infra_codegen_column.id IS '编号'; +COMMENT ON COLUMN infra_codegen_column.table_id IS '表编号'; +COMMENT ON COLUMN infra_codegen_column.column_name IS '字段名'; +COMMENT ON COLUMN infra_codegen_column.data_type IS '字段类型'; +COMMENT ON COLUMN infra_codegen_column.column_comment IS '字段描述'; +COMMENT ON COLUMN infra_codegen_column.nullable IS '是否允许为空'; +COMMENT ON COLUMN infra_codegen_column.primary_key IS '是否主键'; +COMMENT ON COLUMN infra_codegen_column.ordinal_position IS '排序'; +COMMENT ON COLUMN infra_codegen_column.java_type IS 'Java 属性类型'; +COMMENT ON COLUMN infra_codegen_column.java_field IS 'Java 属性名'; +COMMENT ON COLUMN infra_codegen_column.dict_type IS '字典类型'; +COMMENT ON COLUMN infra_codegen_column.example IS '数据示例'; +COMMENT ON COLUMN infra_codegen_column.create_operation IS '是否为 Create 创建操作的字段'; +COMMENT ON COLUMN infra_codegen_column.update_operation IS '是否为 Update 更新操作的字段'; +COMMENT ON COLUMN infra_codegen_column.list_operation IS '是否为 List 查询操作的字段'; +COMMENT ON COLUMN infra_codegen_column.list_operation_condition IS 'List 查询操作的条件类型'; +COMMENT ON COLUMN infra_codegen_column.list_operation_result IS '是否为 List 查询操作的返回字段'; +COMMENT ON COLUMN infra_codegen_column.html_type IS '显示类型'; +COMMENT ON COLUMN infra_codegen_column.creator IS '创建者'; +COMMENT ON COLUMN infra_codegen_column.create_time IS '创建时间'; +COMMENT ON COLUMN infra_codegen_column.updater IS '更新者'; +COMMENT ON COLUMN infra_codegen_column.update_time IS '更新时间'; +COMMENT ON COLUMN infra_codegen_column.deleted IS '是否删除'; +COMMENT ON TABLE infra_codegen_column IS '代码生成表字段定义'; + +CREATE SEQUENCE infra_codegen_column_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for infra_codegen_table +-- ---------------------------- +CREATE TABLE infra_codegen_table +( + id number NOT NULL, + data_source_config_id number NOT NULL, + scene smallint DEFAULT 1 NOT NULL, + table_name varchar2(200) DEFAULT '' NULL, + table_comment varchar2(500) DEFAULT '' NULL, + remark varchar2(500) DEFAULT NULL NULL, + module_name varchar2(30) NOT NULL, + business_name varchar2(30) NOT NULL, + class_name varchar2(100) DEFAULT '' NULL, + class_comment varchar2(50) NOT NULL, + author varchar2(50) NOT NULL, + template_type smallint DEFAULT 1 NOT NULL, + front_type smallint NOT NULL, + parent_menu_id number DEFAULT NULL NULL, + master_table_id number DEFAULT NULL NULL, + sub_join_column_id number DEFAULT NULL NULL, + sub_join_many number(1, 0) DEFAULT NULL NULL, + tree_parent_column_id number DEFAULT NULL NULL, + tree_name_column_id number DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE infra_codegen_table + ADD CONSTRAINT pk_infra_codegen_table PRIMARY KEY (id); + +COMMENT ON COLUMN infra_codegen_table.id IS '编号'; +COMMENT ON COLUMN infra_codegen_table.data_source_config_id IS '数据源配置的编号'; +COMMENT ON COLUMN infra_codegen_table.scene IS '生成场景'; +COMMENT ON COLUMN infra_codegen_table.table_name IS '表名称'; +COMMENT ON COLUMN infra_codegen_table.table_comment IS '表描述'; +COMMENT ON COLUMN infra_codegen_table.remark IS '备注'; +COMMENT ON COLUMN infra_codegen_table.module_name IS '模块名'; +COMMENT ON COLUMN infra_codegen_table.business_name IS '业务名'; +COMMENT ON COLUMN infra_codegen_table.class_name IS '类名称'; +COMMENT ON COLUMN infra_codegen_table.class_comment IS '类描述'; +COMMENT ON COLUMN infra_codegen_table.author IS '作者'; +COMMENT ON COLUMN infra_codegen_table.template_type IS '模板类型'; +COMMENT ON COLUMN infra_codegen_table.front_type IS '前端类型'; +COMMENT ON COLUMN infra_codegen_table.parent_menu_id IS '父菜单编号'; +COMMENT ON COLUMN infra_codegen_table.master_table_id IS '主表的编号'; +COMMENT ON COLUMN infra_codegen_table.sub_join_column_id IS '子表关联主表的字段编号'; +COMMENT ON COLUMN infra_codegen_table.sub_join_many IS '主表与子表是否一对多'; +COMMENT ON COLUMN infra_codegen_table.tree_parent_column_id IS '树表的父字段编号'; +COMMENT ON COLUMN infra_codegen_table.tree_name_column_id IS '树表的名字字段编号'; +COMMENT ON COLUMN infra_codegen_table.creator IS '创建者'; +COMMENT ON COLUMN infra_codegen_table.create_time IS '创建时间'; +COMMENT ON COLUMN infra_codegen_table.updater IS '更新者'; +COMMENT ON COLUMN infra_codegen_table.update_time IS '更新时间'; +COMMENT ON COLUMN infra_codegen_table.deleted IS '是否删除'; +COMMENT ON TABLE infra_codegen_table IS '代码生成表定义'; + +CREATE SEQUENCE infra_codegen_table_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for infra_config +-- ---------------------------- +CREATE TABLE infra_config +( + id number NOT NULL, + category varchar2(50) NOT NULL, + type smallint NOT NULL, + name varchar2(100) DEFAULT '' NULL, + config_key varchar2(100) DEFAULT '' NULL, + value varchar2(500) DEFAULT '' NULL, + visible number(1, 0) NOT NULL, + remark varchar2(500) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE infra_config + ADD CONSTRAINT pk_infra_config PRIMARY KEY (id); + +COMMENT ON COLUMN infra_config.id IS '参数主键'; +COMMENT ON COLUMN infra_config.category IS '参数分组'; +COMMENT ON COLUMN infra_config.type IS '参数类型'; +COMMENT ON COLUMN infra_config.name IS '参数名称'; +COMMENT ON COLUMN infra_config.config_key IS '参数键名'; +COMMENT ON COLUMN infra_config.value IS '参数键值'; +COMMENT ON COLUMN infra_config.visible IS '是否可见'; +COMMENT ON COLUMN infra_config.remark IS '备注'; +COMMENT ON COLUMN infra_config.creator IS '创建者'; +COMMENT ON COLUMN infra_config.create_time IS '创建时间'; +COMMENT ON COLUMN infra_config.updater IS '更新者'; +COMMENT ON COLUMN infra_config.update_time IS '更新时间'; +COMMENT ON COLUMN infra_config.deleted IS '是否删除'; +COMMENT ON TABLE infra_config IS '参数配置表'; + +-- ---------------------------- +-- Records of infra_config +-- ---------------------------- +-- @formatter:off +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (2, 'biz', 1, '用户管理-账号初始密码', 'sys.user.init-password', '123456', '0', '初始化密码 123456', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-03 17:22:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (7, 'url', 2, 'MySQL 监控的地址', 'url.druid', '', '1', '', '1', to_date('2023-04-07 13:41:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-04-07 14:33:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (8, 'url', 2, 'SkyWalking 监控的地址', 'url.skywalking', '', '1', '', '1', to_date('2023-04-07 13:41:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-04-07 14:57:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (9, 'url', 2, 'Spring Boot Admin 监控的地址', 'url.spring-boot-admin', '', '1', '', '1', to_date('2023-04-07 13:41:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-04-07 14:52:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (10, 'url', 2, 'Swagger 接口文档的地址', 'url.swagger', '', '1', '', '1', to_date('2023-04-07 13:41:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-04-07 14:59:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (11, 'ui', 2, '腾讯地图 key', 'tencent.lbs.key', 'TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E', '1', '腾讯地图 key', '1', to_date('2023-06-03 19:16:27', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-06-03 19:16:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (12, 'test2', 2, 'test3', 'test4', 'test5', '1', 'test6', '1', to_date('2023-12-03 09:55:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-03 09:55:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE infra_config_seq + START WITH 13; + +-- ---------------------------- +-- Table structure for infra_data_source_config +-- ---------------------------- +CREATE TABLE infra_data_source_config +( + id number NOT NULL, + name varchar2(100) DEFAULT '' NULL, + url varchar2(1024) NOT NULL, + username varchar2(255) NOT NULL, + password varchar2(255) DEFAULT '' NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE infra_data_source_config + ADD CONSTRAINT pk_infra_data_source_config PRIMARY KEY (id); + +COMMENT ON COLUMN infra_data_source_config.id IS '主键编号'; +COMMENT ON COLUMN infra_data_source_config.name IS '参数名称'; +COMMENT ON COLUMN infra_data_source_config.url IS '数据源连接'; +COMMENT ON COLUMN infra_data_source_config.username IS '用户名'; +COMMENT ON COLUMN infra_data_source_config.password IS '密码'; +COMMENT ON COLUMN infra_data_source_config.creator IS '创建者'; +COMMENT ON COLUMN infra_data_source_config.create_time IS '创建时间'; +COMMENT ON COLUMN infra_data_source_config.updater IS '更新者'; +COMMENT ON COLUMN infra_data_source_config.update_time IS '更新时间'; +COMMENT ON COLUMN infra_data_source_config.deleted IS '是否删除'; +COMMENT ON TABLE infra_data_source_config IS '数据源配置表'; + +CREATE SEQUENCE infra_data_source_config_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for infra_file +-- ---------------------------- +CREATE TABLE infra_file +( + id number NOT NULL, + config_id number DEFAULT NULL NULL, + name varchar2(256) DEFAULT NULL NULL, + path varchar2(512) NOT NULL, + url varchar2(1024) NOT NULL, + type varchar2(128) DEFAULT NULL NULL, + "size" number NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE infra_file + ADD CONSTRAINT pk_infra_file PRIMARY KEY (id); + +COMMENT ON COLUMN infra_file.id IS '文件编号'; +COMMENT ON COLUMN infra_file.config_id IS '配置编号'; +COMMENT ON COLUMN infra_file.name IS '文件名'; +COMMENT ON COLUMN infra_file.path IS '文件路径'; +COMMENT ON COLUMN infra_file.url IS '文件 URL'; +COMMENT ON COLUMN infra_file.type IS '文件类型'; +COMMENT ON COLUMN infra_file.size IS '文件大小'; +COMMENT ON COLUMN infra_file.creator IS '创建者'; +COMMENT ON COLUMN infra_file.create_time IS '创建时间'; +COMMENT ON COLUMN infra_file.updater IS '更新者'; +COMMENT ON COLUMN infra_file.update_time IS '更新时间'; +COMMENT ON COLUMN infra_file.deleted IS '是否删除'; +COMMENT ON TABLE infra_file IS '文件表'; + +CREATE SEQUENCE infra_file_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for infra_file_config +-- ---------------------------- +CREATE TABLE infra_file_config +( + id number NOT NULL, + name varchar2(63) NOT NULL, + storage smallint NOT NULL, + remark varchar2(255) DEFAULT NULL NULL, + master number(1, 0) NOT NULL, + config varchar2(4000) NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE infra_file_config + ADD CONSTRAINT pk_infra_file_config PRIMARY KEY (id); + +COMMENT ON COLUMN infra_file_config.id IS '编号'; +COMMENT ON COLUMN infra_file_config.name IS '配置名'; +COMMENT ON COLUMN infra_file_config.storage IS '存储器'; +COMMENT ON COLUMN infra_file_config.remark IS '备注'; +COMMENT ON COLUMN infra_file_config.master IS '是否为主配置'; +COMMENT ON COLUMN infra_file_config.config IS '存储配置'; +COMMENT ON COLUMN infra_file_config.creator IS '创建者'; +COMMENT ON COLUMN infra_file_config.create_time IS '创建时间'; +COMMENT ON COLUMN infra_file_config.updater IS '更新者'; +COMMENT ON COLUMN infra_file_config.update_time IS '更新时间'; +COMMENT ON COLUMN infra_file_config.deleted IS '是否删除'; +COMMENT ON TABLE infra_file_config IS '文件配置表'; + +-- ---------------------------- +-- Records of infra_file_config +-- ---------------------------- +-- @formatter:off +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (4, '数据库', 1, '我是数据库', '0', '{"@class":"com.win.module.infra.framework.file.core.client.db.DBFileClientConfig","domain":"http://127.0.0.1:48080"}', '1', to_date('2022-03-15 23:56:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-28 22:54:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (22, '七牛存储器', 20, '', '1', '{"@class":"com.win.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"s3.cn-south-1.qiniucs.com","domain":"http://test.win.iocoder.cn","bucket":"ruoyi-vue-pro","accessKey":"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS","accessSecret":"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY"}', '1', to_date('2024-01-13 22:11:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-03 19:38:34', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE infra_file_config_seq + START WITH 23; + +-- ---------------------------- +-- Table structure for infra_file_content +-- ---------------------------- +CREATE TABLE infra_file_content +( + id number NOT NULL, + config_id number NOT NULL, + path varchar2(512) NOT NULL, + content blob NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE infra_file_content + ADD CONSTRAINT pk_infra_file_content PRIMARY KEY (id); + +COMMENT ON COLUMN infra_file_content.id IS '编号'; +COMMENT ON COLUMN infra_file_content.config_id IS '配置编号'; +COMMENT ON COLUMN infra_file_content.path IS '文件路径'; +COMMENT ON COLUMN infra_file_content.content IS '文件内容'; +COMMENT ON COLUMN infra_file_content.creator IS '创建者'; +COMMENT ON COLUMN infra_file_content.create_time IS '创建时间'; +COMMENT ON COLUMN infra_file_content.updater IS '更新者'; +COMMENT ON COLUMN infra_file_content.update_time IS '更新时间'; +COMMENT ON COLUMN infra_file_content.deleted IS '是否删除'; +COMMENT ON TABLE infra_file_content IS '文件表'; + +CREATE SEQUENCE infra_file_content_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for infra_job +-- ---------------------------- +CREATE TABLE infra_job +( + id number NOT NULL, + name varchar2(32) NOT NULL, + status smallint NOT NULL, + handler_name varchar2(64) NOT NULL, + handler_param varchar2(255) DEFAULT NULL NULL, + cron_expression varchar2(32) NOT NULL, + retry_count number DEFAULT 0 NOT NULL, + retry_interval number DEFAULT 0 NOT NULL, + monitor_timeout number DEFAULT 0 NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE infra_job + ADD CONSTRAINT pk_infra_job PRIMARY KEY (id); + +COMMENT ON COLUMN infra_job.id IS '任务编号'; +COMMENT ON COLUMN infra_job.name IS '任务名称'; +COMMENT ON COLUMN infra_job.status IS '任务状态'; +COMMENT ON COLUMN infra_job.handler_name IS '处理器的名字'; +COMMENT ON COLUMN infra_job.handler_param IS '处理器的参数'; +COMMENT ON COLUMN infra_job.cron_expression IS 'CRON 表达式'; +COMMENT ON COLUMN infra_job.retry_count IS '重试次数'; +COMMENT ON COLUMN infra_job.retry_interval IS '重试间隔'; +COMMENT ON COLUMN infra_job.monitor_timeout IS '监控超时时间'; +COMMENT ON COLUMN infra_job.creator IS '创建者'; +COMMENT ON COLUMN infra_job.create_time IS '创建时间'; +COMMENT ON COLUMN infra_job.updater IS '更新者'; +COMMENT ON COLUMN infra_job.update_time IS '更新时间'; +COMMENT ON COLUMN infra_job.deleted IS '是否删除'; +COMMENT ON TABLE infra_job IS '定时任务表'; + +-- ---------------------------- +-- Records of infra_job +-- ---------------------------- +-- @formatter:off +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (5, '支付通知 Job', 2, 'payNotifyJob', NULL, '* * * * * ?', 0, 0, 0, '1', to_date('2021-10-27 08:34:42', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-09 20:51:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (17, '支付订单同步 Job', 2, 'payOrderSyncJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', to_date('2023-07-22 14:36:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-22 15:39:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (18, '支付订单过期 Job', 2, 'payOrderExpireJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', to_date('2023-07-22 15:36:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-22 15:39:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (19, '退款订单的同步 Job', 2, 'payRefundSyncJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', to_date('2023-07-23 21:03:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-23 21:09:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (21, '交易订单的自动过期 Job', 2, 'tradeOrderAutoCancelJob', '', '0 * * * * ?', 3, 0, 0, '1', to_date('2023-09-25 23:43:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-26 19:23:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (22, '交易订单的自动收货 Job', 2, 'tradeOrderAutoReceiveJob', '', '0 * * * * ?', 3, 0, 0, '1', to_date('2023-09-26 19:23:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-26 23:38:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (23, '交易订单的自动评论 Job', 2, 'tradeOrderAutoCommentJob', '', '0 * * * * ?', 3, 0, 0, '1', to_date('2023-09-26 23:38:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-27 11:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (24, '佣金解冻 Job', 2, 'brokerageRecordUnfreezeJob', '', '0 * * * * ?', 3, 0, 0, '1', to_date('2023-09-28 22:01:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-28 22:01:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (25, '访问日志清理 Job', 2, 'accessLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', to_date('2023-10-03 10:59:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-03 11:01:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (26, '错误日志清理 Job', 2, 'errorLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', to_date('2023-10-03 11:00:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-03 11:01:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (27, '任务日志清理 Job', 2, 'jobLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', to_date('2023-10-03 11:01:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-03 11:01:42', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE infra_job_seq + START WITH 28; + +-- ---------------------------- +-- Table structure for infra_job_log +-- ---------------------------- +CREATE TABLE infra_job_log +( + id number NOT NULL, + job_id number NOT NULL, + handler_name varchar2(64) NOT NULL, + handler_param varchar2(255) DEFAULT NULL NULL, + execute_index smallint DEFAULT 1 NOT NULL, + begin_time date NOT NULL, + end_time date DEFAULT NULL NULL, + duration number DEFAULT NULL NULL, + status smallint NOT NULL, + result varchar2(4000) DEFAULT '' NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE infra_job_log + ADD CONSTRAINT pk_infra_job_log PRIMARY KEY (id); + +COMMENT ON COLUMN infra_job_log.id IS '日志编号'; +COMMENT ON COLUMN infra_job_log.job_id IS '任务编号'; +COMMENT ON COLUMN infra_job_log.handler_name IS '处理器的名字'; +COMMENT ON COLUMN infra_job_log.handler_param IS '处理器的参数'; +COMMENT ON COLUMN infra_job_log.execute_index IS '第几次执行'; +COMMENT ON COLUMN infra_job_log.begin_time IS '开始执行时间'; +COMMENT ON COLUMN infra_job_log.end_time IS '结束执行时间'; +COMMENT ON COLUMN infra_job_log.duration IS '执行时长'; +COMMENT ON COLUMN infra_job_log.status IS '任务状态'; +COMMENT ON COLUMN infra_job_log.result IS '结果数据'; +COMMENT ON COLUMN infra_job_log.creator IS '创建者'; +COMMENT ON COLUMN infra_job_log.create_time IS '创建时间'; +COMMENT ON COLUMN infra_job_log.updater IS '更新者'; +COMMENT ON COLUMN infra_job_log.update_time IS '更新时间'; +COMMENT ON COLUMN infra_job_log.deleted IS '是否删除'; +COMMENT ON TABLE infra_job_log IS '定时任务日志表'; + +CREATE SEQUENCE infra_job_log_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for system_dept +-- ---------------------------- +CREATE TABLE system_dept +( + id number NOT NULL, + name varchar2(30) DEFAULT '' NULL, + parent_id number DEFAULT 0 NOT NULL, + sort number DEFAULT 0 NOT NULL, + leader_user_id number DEFAULT NULL NULL, + phone varchar2(11) DEFAULT NULL NULL, + email varchar2(50) DEFAULT NULL NULL, + status smallint NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_dept + ADD CONSTRAINT pk_system_dept PRIMARY KEY (id); + +COMMENT ON COLUMN system_dept.id IS '部门id'; +COMMENT ON COLUMN system_dept.name IS '部门名称'; +COMMENT ON COLUMN system_dept.parent_id IS '父部门id'; +COMMENT ON COLUMN system_dept.sort IS '显示顺序'; +COMMENT ON COLUMN system_dept.leader_user_id IS '负责人'; +COMMENT ON COLUMN system_dept.phone IS '联系电话'; +COMMENT ON COLUMN system_dept.email IS '邮箱'; +COMMENT ON COLUMN system_dept.status IS '部门状态(0正常 1停用)'; +COMMENT ON COLUMN system_dept.creator IS '创建者'; +COMMENT ON COLUMN system_dept.create_time IS '创建时间'; +COMMENT ON COLUMN system_dept.updater IS '更新者'; +COMMENT ON COLUMN system_dept.update_time IS '更新时间'; +COMMENT ON COLUMN system_dept.deleted IS '是否删除'; +COMMENT ON COLUMN system_dept.tenant_id IS '租户编号'; +COMMENT ON TABLE system_dept IS '部门表'; + +-- ---------------------------- +-- Records of system_dept +-- ---------------------------- +-- @formatter:off +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (100, '芋道源码', 0, 0, 1, '15888888888', 'ry@qq.com', 0, 'admin', to_date('2021-01-05 17:03:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-14 23:30:36', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (101, '深圳总公司', 100, 1, 104, '15888888888', 'ry@qq.com', 0, 'admin', to_date('2021-01-05 17:03:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 09:53:35', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (102, '长沙分公司', 100, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', to_date('2021-01-05 17:03:47', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2021-12-15 05:01:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (103, '研发部门', 101, 1, 104, '15888888888', 'ry@qq.com', 0, 'admin', to_date('2021-01-05 17:03:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-24 20:56:04', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (104, '市场部门', 101, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', to_date('2021-01-05 17:03:47', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2021-12-15 05:01:38', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (105, '测试部门', 101, 3, NULL, '15888888888', 'ry@qq.com', 0, 'admin', to_date('2021-01-05 17:03:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-16 20:25:15', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (106, '财务部门', 101, 4, 103, '15888888888', 'ry@qq.com', 0, 'admin', to_date('2021-01-05 17:03:47', 'SYYYY-MM-DD HH24:MI:SS'), '103', to_date('2022-01-15 21:32:22', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (107, '运维部门', 101, 5, 1, '15888888888', 'ry@qq.com', 0, 'admin', to_date('2021-01-05 17:03:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 09:28:22', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (108, '市场部门', 102, 1, NULL, '15888888888', 'ry@qq.com', 0, 'admin', to_date('2021-01-05 17:03:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 08:35:45', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (109, '财务部门', 102, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', to_date('2021-01-05 17:03:47', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2021-12-15 05:01:29', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (110, '新部门', 0, 1, NULL, NULL, NULL, 0, '110', to_date('2022-02-23 20:46:30', 'SYYYY-MM-DD HH24:MI:SS'), '110', to_date('2022-02-23 20:46:30', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (111, '顶级部门', 0, 1, NULL, NULL, NULL, 0, '113', to_date('2022-03-07 21:44:50', 'SYYYY-MM-DD HH24:MI:SS'), '113', to_date('2022-03-07 21:44:50', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (112, '产品部门', 101, 100, 1, NULL, NULL, 1, '1', to_date('2023-12-02 09:45:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 09:45:31', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (113, '支持部门', 102, 3, 104, NULL, NULL, 1, '1', to_date('2023-12-02 09:47:38', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 09:47:38', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_dept_seq + START WITH 114; + +-- ---------------------------- +-- Table structure for system_dict_data +-- ---------------------------- +CREATE TABLE system_dict_data +( + id number NOT NULL, + sort number DEFAULT 0 NOT NULL, + label varchar2(100) DEFAULT '' NULL, + value varchar2(100) DEFAULT '' NULL, + dict_type varchar2(100) DEFAULT '' NULL, + status smallint DEFAULT 0 NOT NULL, + color_type varchar2(100) DEFAULT '' NULL, + css_class varchar2(100) DEFAULT '' NULL, + remark varchar2(500) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE system_dict_data + ADD CONSTRAINT pk_system_dict_data PRIMARY KEY (id); + +COMMENT ON COLUMN system_dict_data.id IS '字典编码'; +COMMENT ON COLUMN system_dict_data.sort IS '字典排序'; +COMMENT ON COLUMN system_dict_data.label IS '字典标签'; +COMMENT ON COLUMN system_dict_data.value IS '字典键值'; +COMMENT ON COLUMN system_dict_data.dict_type IS '字典类型'; +COMMENT ON COLUMN system_dict_data.status IS '状态(0正常 1停用)'; +COMMENT ON COLUMN system_dict_data.color_type IS '颜色类型'; +COMMENT ON COLUMN system_dict_data.css_class IS 'css 样式'; +COMMENT ON COLUMN system_dict_data.remark IS '备注'; +COMMENT ON COLUMN system_dict_data.creator IS '创建者'; +COMMENT ON COLUMN system_dict_data.create_time IS '创建时间'; +COMMENT ON COLUMN system_dict_data.updater IS '更新者'; +COMMENT ON COLUMN system_dict_data.update_time IS '更新时间'; +COMMENT ON COLUMN system_dict_data.deleted IS '是否删除'; +COMMENT ON TABLE system_dict_data IS '字典数据表'; + +-- ---------------------------- +-- Records of system_dict_data +-- ---------------------------- +-- @formatter:off +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1, 1, '男', '1', 'system_user_sex', 0, 'default', 'A', '性别男', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-29 00:14:39', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2, 2, '女', '2', 'system_user_sex', 0, 'success', '', '性别女', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-15 23:30:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (8, 1, '正常', '1', 'infra_job_status', 0, 'success', '', '正常状态', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 19:33:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (9, 2, '暂停', '2', 'infra_job_status', 0, 'danger', '', '停用状态', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 19:33:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (12, 1, '系统内置', '1', 'infra_config_type', 0, 'danger', '', '参数类型 - 系统内置', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 19:06:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (13, 2, '自定义', '2', 'infra_config_type', 0, 'primary', '', '参数类型 - 自定义', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 19:06:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (14, 1, '通知', '1', 'system_notice_type', 0, 'success', '', '通知', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:05:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (15, 2, '公告', '2', 'system_notice_type', 0, 'info', '', '公告', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:06:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (16, 0, '其它', '0', 'infra_operate_type', 0, 'default', '', '其它操作', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-14 12:44:19', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (17, 1, '查询', '1', 'infra_operate_type', 0, 'info', '', '查询操作', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-14 12:44:20', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (18, 2, '新增', '2', 'infra_operate_type', 0, 'primary', '', '新增操作', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-14 12:44:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (19, 3, '修改', '3', 'infra_operate_type', 0, 'warning', '', '修改操作', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-14 12:44:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (20, 4, '删除', '4', 'infra_operate_type', 0, 'danger', '', '删除操作', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-14 12:44:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (22, 5, '导出', '5', 'infra_operate_type', 0, 'default', '', '导出操作', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-14 12:44:24', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (23, 6, '导入', '6', 'infra_operate_type', 0, 'default', '', '导入操作', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-14 12:44:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (27, 1, '开启', '0', 'common_status', 0, 'primary', '', '开启状态', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 08:00:39', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (28, 2, '关闭', '1', 'common_status', 0, 'info', '', '关闭状态', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 08:00:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (29, 1, '目录', '1', 'system_menu_type', 0, '', '', '目录', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:43:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (30, 2, '菜单', '2', 'system_menu_type', 0, '', '', '菜单', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:43:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (31, 3, '按钮', '3', 'system_menu_type', 0, '', '', '按钮', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:43:39', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (32, 1, '内置', '1', 'system_role_type', 0, 'danger', '', '内置角色', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:02:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (33, 2, '自定义', '2', 'system_role_type', 0, 'primary', '', '自定义角色', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:02:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (34, 1, '全部数据权限', '1', 'system_data_scope', 0, '', '', '全部数据权限', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:47:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (35, 2, '指定部门数据权限', '2', 'system_data_scope', 0, '', '', '指定部门数据权限', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:47:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (36, 3, '本部门数据权限', '3', 'system_data_scope', 0, '', '', '本部门数据权限', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:47:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (37, 4, '本部门及以下数据权限', '4', 'system_data_scope', 0, '', '', '本部门及以下数据权限', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:47:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (38, 5, '仅本人数据权限', '5', 'system_data_scope', 0, '', '', '仅本人数据权限', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:47:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (39, 0, '成功', '0', 'system_login_result', 0, 'success', '', '登陆结果 - 成功', '', to_date('2021-01-18 06:17:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:23:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (40, 10, '账号或密码不正确', '10', 'system_login_result', 0, 'primary', '', '登陆结果 - 账号或密码不正确', '', to_date('2021-01-18 06:17:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:24:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (41, 20, '用户被禁用', '20', 'system_login_result', 0, 'warning', '', '登陆结果 - 用户被禁用', '', to_date('2021-01-18 06:17:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:23:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (42, 30, '验证码不存在', '30', 'system_login_result', 0, 'info', '', '登陆结果 - 验证码不存在', '', to_date('2021-01-18 06:17:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:24:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (43, 31, '验证码不正确', '31', 'system_login_result', 0, 'info', '', '登陆结果 - 验证码不正确', '', to_date('2021-01-18 06:17:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:24:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (44, 100, '未知异常', '100', 'system_login_result', 0, 'danger', '', '登陆结果 - 未知异常', '', to_date('2021-01-18 06:17:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:24:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (45, 1, '是', 'true', 'infra_boolean_string', 0, 'danger', '', 'Boolean 是否类型 - 是', '', to_date('2021-01-19 03:20:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-15 23:01:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (46, 1, '否', 'false', 'infra_boolean_string', 0, 'info', '', 'Boolean 是否类型 - 否', '', to_date('2021-01-19 03:20:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-15 23:09:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (50, 1, '单表(增删改查)', '1', 'infra_codegen_template_type', 0, '', '', NULL, '', to_date('2021-02-05 07:09:06', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-03-10 16:33:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (51, 2, '树表(增删改查)', '2', 'infra_codegen_template_type', 0, '', '', NULL, '', to_date('2021-02-05 07:14:46', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-03-10 16:33:19', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (53, 0, '初始化中', '0', 'infra_job_status', 0, 'primary', '', NULL, '', to_date('2021-02-07 07:46:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 19:33:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (57, 0, '运行中', '0', 'infra_job_log_status', 0, 'primary', '', 'RUNNING', '', to_date('2021-02-08 10:04:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 19:07:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (58, 1, '成功', '1', 'infra_job_log_status', 0, 'success', '', NULL, '', to_date('2021-02-08 10:06:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 19:07:52', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (59, 2, '失败', '2', 'infra_job_log_status', 0, 'warning', '', '失败', '', to_date('2021-02-08 10:07:38', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 19:07:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (60, 1, '会员', '1', 'user_type', 0, 'primary', '', NULL, '', to_date('2021-02-26 00:16:27', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 10:22:19', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (61, 2, '管理员', '2', 'user_type', 0, 'success', '', NULL, '', to_date('2021-02-26 00:16:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 10:22:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (62, 0, '未处理', '0', 'infra_api_error_log_process_status', 0, 'primary', '', NULL, '', to_date('2021-02-26 07:07:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 20:14:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (63, 1, '已处理', '1', 'infra_api_error_log_process_status', 0, 'success', '', NULL, '', to_date('2021-02-26 07:07:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 20:14:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (64, 2, '已忽略', '2', 'infra_api_error_log_process_status', 0, 'danger', '', NULL, '', to_date('2021-02-26 07:07:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 20:14:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (66, 2, '阿里云', 'ALIYUN', 'system_sms_channel_code', 0, 'primary', '', NULL, '1', to_date('2021-04-05 01:05:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 10:09:52', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (67, 1, '验证码', '1', 'system_sms_template_type', 0, 'warning', '', NULL, '1', to_date('2021-04-05 21:50:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 12:48:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (68, 2, '通知', '2', 'system_sms_template_type', 0, 'primary', '', NULL, '1', to_date('2021-04-05 21:51:08', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 12:48:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (69, 0, '营销', '3', 'system_sms_template_type', 0, 'danger', '', NULL, '1', to_date('2021-04-05 21:51:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 12:48:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (70, 0, '初始化', '0', 'system_sms_send_status', 0, 'primary', '', NULL, '1', to_date('2021-04-11 20:18:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 10:26:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (71, 1, '发送成功', '10', 'system_sms_send_status', 0, 'success', '', NULL, '1', to_date('2021-04-11 20:18:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 10:25:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (72, 2, '发送失败', '20', 'system_sms_send_status', 0, 'danger', '', NULL, '1', to_date('2021-04-11 20:18:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 10:26:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (73, 3, '不发送', '30', 'system_sms_send_status', 0, 'info', '', NULL, '1', to_date('2021-04-11 20:19:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 10:26:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (74, 0, '等待结果', '0', 'system_sms_receive_status', 0, 'primary', '', NULL, '1', to_date('2021-04-11 20:27:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 10:28:24', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (75, 1, '接收成功', '10', 'system_sms_receive_status', 0, 'success', '', NULL, '1', to_date('2021-04-11 20:29:25', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 10:28:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (76, 2, '接收失败', '20', 'system_sms_receive_status', 0, 'danger', '', NULL, '1', to_date('2021-04-11 20:29:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 10:28:32', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (77, 0, '调试(钉钉)', 'DEBUG_DING_TALK', 'system_sms_channel_code', 0, 'info', '', NULL, '1', to_date('2021-04-13 00:20:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 10:10:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (80, 100, '账号登录', '100', 'system_login_type', 0, 'primary', '', '账号登录', '1', to_date('2021-10-06 00:52:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:11:34', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (81, 101, '社交登录', '101', 'system_login_type', 0, 'info', '', '社交登录', '1', to_date('2021-10-06 00:52:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:11:40', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (83, 200, '主动登出', '200', 'system_login_type', 0, 'primary', '', '主动登出', '1', to_date('2021-10-06 00:52:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:11:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (85, 202, '强制登出', '202', 'system_login_type', 0, 'danger', '', '强制退出', '1', to_date('2021-10-06 00:53:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:11:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (86, 0, '病假', '1', 'bpm_oa_leave_type', 0, 'primary', '', NULL, '1', to_date('2021-09-21 22:35:28', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 10:00:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (87, 1, '事假', '2', 'bpm_oa_leave_type', 0, 'info', '', NULL, '1', to_date('2021-09-21 22:36:11', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 10:00:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (88, 2, '婚假', '3', 'bpm_oa_leave_type', 0, 'warning', '', NULL, '1', to_date('2021-09-21 22:36:38', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 10:00:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (113, 1, '微信公众号支付', 'wx_pub', 'pay_channel_code', 0, 'success', '', '微信公众号支付', '1', to_date('2021-12-03 10:40:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 20:08:47', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (114, 2, '微信小程序支付', 'wx_lite', 'pay_channel_code', 0, 'success', '', '微信小程序支付', '1', to_date('2021-12-03 10:41:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 20:08:50', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (115, 3, '微信 App 支付', 'wx_app', 'pay_channel_code', 0, 'success', '', '微信 App 支付', '1', to_date('2021-12-03 10:41:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 20:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (116, 10, '支付宝 PC 网站支付', 'alipay_pc', 'pay_channel_code', 0, 'primary', '', '支付宝 PC 网站支付', '1', to_date('2021-12-03 10:42:09', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 20:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (117, 11, '支付宝 Wap 网站支付', 'alipay_wap', 'pay_channel_code', 0, 'primary', '', '支付宝 Wap 网站支付', '1', to_date('2021-12-03 10:42:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 20:09:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (118, 12, '支付宝 App 支付', 'alipay_app', 'pay_channel_code', 0, 'primary', '', '支付宝 App 支付', '1', to_date('2021-12-03 10:42:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 20:09:20', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (119, 14, '支付宝扫码支付', 'alipay_qr', 'pay_channel_code', 0, 'primary', '', '支付宝扫码支付', '1', to_date('2021-12-03 10:43:10', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 20:09:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (120, 10, '通知成功', '10', 'pay_notify_status', 0, 'success', '', '通知成功', '1', to_date('2021-12-03 11:02:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 10:08:19', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (121, 20, '通知失败', '20', 'pay_notify_status', 0, 'danger', '', '通知失败', '1', to_date('2021-12-03 11:02:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 10:08:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (122, 0, '等待通知', '0', 'pay_notify_status', 0, 'info', '', '未通知', '1', to_date('2021-12-03 11:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 10:08:24', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (123, 10, '支付成功', '10', 'pay_order_status', 0, 'success', '', '支付成功', '1', to_date('2021-12-03 11:18:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 18:04:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (124, 30, '支付关闭', '30', 'pay_order_status', 0, 'info', '', '支付关闭', '1', to_date('2021-12-03 11:18:42', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 18:05:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (125, 0, '等待支付', '0', 'pay_order_status', 0, 'info', '', '未支付', '1', to_date('2021-12-03 11:18:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 18:04:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (600, 5, '首页', '1', 'promotion_banner_position', 0, 'warning', '', '', '1', to_date('2023-10-11 07:45:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:45:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (601, 4, '秒杀活动页', '2', 'promotion_banner_position', 0, 'warning', '', '', '1', to_date('2023-10-11 07:45:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:45:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (602, 3, '砍价活动页', '3', 'promotion_banner_position', 0, 'warning', '', '', '1', to_date('2023-10-11 07:45:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:45:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (603, 2, '限时折扣页', '4', 'promotion_banner_position', 0, 'warning', '', '', '1', to_date('2023-10-11 07:45:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:45:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (604, 1, '满减送页', '5', 'promotion_banner_position', 0, 'warning', '', '', '1', to_date('2023-10-11 07:45:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:45:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1118, 0, '等待退款', '0', 'pay_refund_status', 0, 'info', '', '等待退款', '1', to_date('2021-12-10 16:44:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 10:14:39', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1119, 20, '退款失败', '20', 'pay_refund_status', 0, 'danger', '', '退款失败', '1', to_date('2021-12-10 16:45:10', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 10:15:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1124, 10, '退款成功', '10', 'pay_refund_status', 0, 'success', '', '退款成功', '1', to_date('2021-12-10 16:46:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 10:15:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1127, 1, '审批中', '1', 'bpm_process_instance_status', 0, 'default', '', '流程实例的状态 - 进行中', '1', to_date('2022-01-07 23:47:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-16 16:11:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1128, 2, '审批通过', '2', 'bpm_process_instance_status', 0, 'success', '', '流程实例的状态 - 已完成', '1', to_date('2022-01-07 23:47:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-16 16:11:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1129, 1, '审批中', '1', 'bpm_task_status', 0, 'primary', '', '流程实例的结果 - 处理中', '1', to_date('2022-01-07 23:48:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-08 22:41:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1130, 2, '审批通过', '2', 'bpm_task_status', 0, 'success', '', '流程实例的结果 - 通过', '1', to_date('2022-01-07 23:48:45', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-08 22:41:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1131, 3, '审批不通过', '3', 'bpm_task_status', 0, 'danger', '', '流程实例的结果 - 不通过', '1', to_date('2022-01-07 23:48:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-08 22:41:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1132, 4, '已取消', '4', 'bpm_task_status', 0, 'info', '', '流程实例的结果 - 撤销', '1', to_date('2022-01-07 23:49:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-08 22:41:39', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1133, 10, '流程表单', '10', 'bpm_model_form_type', 0, '', '', '流程的表单类型 - 流程表单', '103', to_date('2022-01-11 23:51:30', 'SYYYY-MM-DD HH24:MI:SS'), '103', to_date('2022-01-11 23:51:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1134, 20, '业务表单', '20', 'bpm_model_form_type', 0, '', '', '流程的表单类型 - 业务表单', '103', to_date('2022-01-11 23:51:47', 'SYYYY-MM-DD HH24:MI:SS'), '103', to_date('2022-01-11 23:51:47', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1135, 10, '角色', '10', 'bpm_task_candidate_strategy', 0, 'info', '', '任务分配规则的类型 - 角色', '103', to_date('2022-01-12 23:21:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-06 02:53:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1136, 20, '部门的成员', '20', 'bpm_task_candidate_strategy', 0, 'primary', '', '任务分配规则的类型 - 部门的成员', '103', to_date('2022-01-12 23:21:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-06 02:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1137, 21, '部门的负责人', '21', 'bpm_task_candidate_strategy', 0, 'primary', '', '任务分配规则的类型 - 部门的负责人', '103', to_date('2022-01-12 23:33:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-06 02:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1138, 30, '用户', '30', 'bpm_task_candidate_strategy', 0, 'info', '', '任务分配规则的类型 - 用户', '103', to_date('2022-01-12 23:34:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-06 02:53:19', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1139, 40, '用户组', '40', 'bpm_task_candidate_strategy', 0, 'warning', '', '任务分配规则的类型 - 用户组', '103', to_date('2022-01-12 23:34:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-06 02:53:20', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1140, 60, '流程表达式', '60', 'bpm_task_candidate_strategy', 0, 'danger', '', '任务分配规则的类型 - 流程表达式', '103', to_date('2022-01-12 23:34:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-06 02:53:20', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1141, 22, '岗位', '22', 'bpm_task_candidate_strategy', 0, 'success', '', '任务分配规则的类型 - 岗位', '103', to_date('2022-01-14 18:41:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-06 02:53:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1145, 1, '管理后台', '1', 'infra_codegen_scene', 0, '', '', '代码生成的场景枚举 - 管理后台', '1', to_date('2022-02-02 13:15:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-10 16:32:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1146, 2, '用户 APP', '2', 'infra_codegen_scene', 0, '', '', '代码生成的场景枚举 - 用户 APP', '1', to_date('2022-02-02 13:15:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-10 16:33:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1150, 1, '数据库', '1', 'infra_file_storage', 0, 'default', '', NULL, '1', to_date('2022-03-15 00:25:28', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-15 00:25:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1151, 10, '本地磁盘', '10', 'infra_file_storage', 0, 'default', '', NULL, '1', to_date('2022-03-15 00:25:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-15 00:25:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1152, 11, 'FTP 服务器', '11', 'infra_file_storage', 0, 'default', '', NULL, '1', to_date('2022-03-15 00:26:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-15 00:26:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1153, 12, 'SFTP 服务器', '12', 'infra_file_storage', 0, 'default', '', NULL, '1', to_date('2022-03-15 00:26:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-15 00:26:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1154, 20, 'S3 对象存储', '20', 'infra_file_storage', 0, 'default', '', NULL, '1', to_date('2022-03-15 00:26:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-15 00:26:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1155, 103, '短信登录', '103', 'system_login_type', 0, 'default', '', NULL, '1', to_date('2022-05-09 23:57:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-09 23:58:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1156, 1, 'password', 'password', 'system_oauth2_grant_type', 0, 'default', '', '密码模式', '1', to_date('2022-05-12 00:22:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-11 16:26:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1157, 2, 'authorization_code', 'authorization_code', 'system_oauth2_grant_type', 0, 'primary', '', '授权码模式', '1', to_date('2022-05-12 00:22:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-11 16:26:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1158, 3, 'implicit', 'implicit', 'system_oauth2_grant_type', 0, 'success', '', '简化模式', '1', to_date('2022-05-12 00:23:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-11 16:26:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1159, 4, 'client_credentials', 'client_credentials', 'system_oauth2_grant_type', 0, 'default', '', '客户端模式', '1', to_date('2022-05-12 00:23:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-11 16:26:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1160, 5, 'refresh_token', 'refresh_token', 'system_oauth2_grant_type', 0, 'info', '', '刷新模式', '1', to_date('2022-05-12 00:24:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-11 16:26:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1162, 1, '销售中', '1', 'product_spu_status', 0, 'success', '', '商品 SPU 状态 - 销售中', '1', to_date('2022-10-24 21:19:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-10-24 21:20:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1163, 0, '仓库中', '0', 'product_spu_status', 0, 'info', '', '商品 SPU 状态 - 仓库中', '1', to_date('2022-10-24 21:20:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-10-24 21:21:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1164, 0, '回收站', '-1', 'product_spu_status', 0, 'default', '', '商品 SPU 状态 - 回收站', '1', to_date('2022-10-24 21:21:11', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-10-24 21:21:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1165, 1, '满减', '1', 'promotion_discount_type', 0, 'success', '', '优惠类型 - 满减', '1', to_date('2022-11-01 12:46:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-01 12:50:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1166, 2, '折扣', '2', 'promotion_discount_type', 0, 'primary', '', '优惠类型 - 折扣', '1', to_date('2022-11-01 12:46:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-01 12:50:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1167, 1, '固定日期', '1', 'promotion_coupon_template_validity_type', 0, 'default', '', '优惠劵模板的有限期类型 - 固定日期', '1', to_date('2022-11-02 00:07:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 00:07:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1168, 2, '领取之后', '2', 'promotion_coupon_template_validity_type', 0, 'default', '', '优惠劵模板的有限期类型 - 领取之后', '1', to_date('2022-11-02 00:07:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 00:07:52', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1169, 1, '通用劵', '1', 'promotion_product_scope', 0, 'default', '', '营销的商品范围 - 全部商品参与', '1', to_date('2022-11-02 00:28:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-28 00:27:42', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1170, 2, '商品劵', '2', 'promotion_product_scope', 0, 'default', '', '营销的商品范围 - 指定商品参与', '1', to_date('2022-11-02 00:28:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-28 00:27:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1171, 1, '未使用', '1', 'promotion_coupon_status', 0, 'primary', '', '优惠劵的状态 - 已领取', '1', to_date('2022-11-04 00:15:08', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-03 12:54:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1172, 2, '已使用', '2', 'promotion_coupon_status', 0, 'success', '', '优惠劵的状态 - 已使用', '1', to_date('2022-11-04 00:15:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 19:16:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1173, 3, '已过期', '3', 'promotion_coupon_status', 0, 'info', '', '优惠劵的状态 - 已过期', '1', to_date('2022-11-04 00:15:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 19:16:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1174, 1, '直接领取', '1', 'promotion_coupon_take_type', 0, 'primary', '', '优惠劵的领取方式 - 直接领取', '1', to_date('2022-11-04 19:13:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 19:13:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1175, 2, '指定发放', '2', 'promotion_coupon_take_type', 0, 'success', '', '优惠劵的领取方式 - 指定发放', '1', to_date('2022-11-04 19:13:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 19:14:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1176, 10, '未开始', '10', 'promotion_activity_status', 0, 'primary', '', '促销活动的状态枚举 - 未开始', '1', to_date('2022-11-04 22:54:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 22:55:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1177, 20, '进行中', '20', 'promotion_activity_status', 0, 'success', '', '促销活动的状态枚举 - 进行中', '1', to_date('2022-11-04 22:55:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 22:55:20', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1178, 30, '已结束', '30', 'promotion_activity_status', 0, 'info', '', '促销活动的状态枚举 - 已结束', '1', to_date('2022-11-04 22:55:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 22:55:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1179, 40, '已关闭', '40', 'promotion_activity_status', 0, 'warning', '', '促销活动的状态枚举 - 已关闭', '1', to_date('2022-11-04 22:56:10', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 22:56:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1180, 10, '满 N 元', '10', 'promotion_condition_type', 0, 'primary', '', '营销的条件类型 - 满 N 元', '1', to_date('2022-11-04 22:59:45', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 22:59:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1181, 20, '满 N 件', '20', 'promotion_condition_type', 0, 'success', '', '营销的条件类型 - 满 N 件', '1', to_date('2022-11-04 23:00:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 23:00:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1182, 10, '申请售后', '10', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 申请售后', '1', to_date('2022-11-19 20:53:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 20:54:42', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1183, 20, '商品待退货', '20', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 商品待退货', '1', to_date('2022-11-19 20:54:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 20:58:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1184, 30, '商家待收货', '30', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 商家待收货', '1', to_date('2022-11-19 20:56:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 20:59:20', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1185, 40, '等待退款', '40', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 等待退款', '1', to_date('2022-11-19 20:59:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 21:00:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1186, 50, '退款成功', '50', 'trade_after_sale_status', 0, 'default', '', '交易售后状态 - 退款成功', '1', to_date('2022-11-19 21:00:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 21:00:33', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1187, 61, '买家取消', '61', 'trade_after_sale_status', 0, 'info', '', '交易售后状态 - 买家取消', '1', to_date('2022-11-19 21:01:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 21:01:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1188, 62, '商家拒绝', '62', 'trade_after_sale_status', 0, 'info', '', '交易售后状态 - 商家拒绝', '1', to_date('2022-11-19 21:02:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 21:02:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1189, 63, '商家拒收货', '63', 'trade_after_sale_status', 0, 'info', '', '交易售后状态 - 商家拒收货', '1', to_date('2022-11-19 21:02:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 21:03:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1190, 10, '售中退款', '10', 'trade_after_sale_type', 0, 'success', '', '交易售后的类型 - 售中退款', '1', to_date('2022-11-19 21:05:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 21:38:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1191, 20, '售后退款', '20', 'trade_after_sale_type', 0, 'primary', '', '交易售后的类型 - 售后退款', '1', to_date('2022-11-19 21:05:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 21:38:32', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1192, 10, '仅退款', '10', 'trade_after_sale_way', 0, 'primary', '', '交易售后的方式 - 仅退款', '1', to_date('2022-11-19 21:39:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 21:39:19', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1193, 20, '退货退款', '20', 'trade_after_sale_way', 0, 'success', '', '交易售后的方式 - 退货退款', '1', to_date('2022-11-19 21:39:38', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 21:39:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1194, 10, '微信小程序', '10', 'terminal', 0, 'default', '', '终端 - 微信小程序', '1', to_date('2022-12-10 10:51:11', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 10:51:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1195, 20, 'H5 网页', '20', 'terminal', 0, 'default', '', '终端 - H5 网页', '1', to_date('2022-12-10 10:51:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 10:51:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1196, 11, '微信公众号', '11', 'terminal', 0, 'default', '', '终端 - 微信公众号', '1', to_date('2022-12-10 10:54:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 10:52:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1197, 31, '苹果 App', '31', 'terminal', 0, 'default', '', '终端 - 苹果 App', '1', to_date('2022-12-10 10:54:42', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 10:52:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1198, 32, '安卓 App', '32', 'terminal', 0, 'default', '', '终端 - 安卓 App', '1', to_date('2022-12-10 10:55:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 10:59:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1199, 0, '普通订单', '0', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 普通订单', '1', to_date('2022-12-10 16:34:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 16:34:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1200, 1, '秒杀订单', '1', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 秒杀订单', '1', to_date('2022-12-10 16:34:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 16:34:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1201, 2, '拼团订单', '2', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 拼团订单', '1', to_date('2022-12-10 16:34:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 16:34:36', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1202, 3, '砍价订单', '3', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 砍价订单', '1', to_date('2022-12-10 16:34:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 16:34:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1203, 0, '待支付', '0', 'trade_order_status', 0, 'default', '', '交易订单状态 - 待支付', '1', to_date('2022-12-10 16:49:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 16:49:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1204, 10, '待发货', '10', 'trade_order_status', 0, 'primary', '', '交易订单状态 - 待发货', '1', to_date('2022-12-10 16:49:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 16:51:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1205, 20, '已发货', '20', 'trade_order_status', 0, 'primary', '', '交易订单状态 - 已发货', '1', to_date('2022-12-10 16:50:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 16:51:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1206, 30, '已完成', '30', 'trade_order_status', 0, 'success', '', '交易订单状态 - 已完成', '1', to_date('2022-12-10 16:50:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 16:51:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1207, 40, '已取消', '40', 'trade_order_status', 0, 'danger', '', '交易订单状态 - 已取消', '1', to_date('2022-12-10 16:50:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 16:51:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1208, 0, '未售后', '0', 'trade_order_item_after_sale_status', 0, 'info', '', '交易订单项的售后状态 - 未售后', '1', to_date('2022-12-10 20:58:42', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 20:59:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1209, 1, '售后中', '1', 'trade_order_item_after_sale_status', 0, 'primary', '', '交易订单项的售后状态 - 售后中', '1', to_date('2022-12-10 20:59:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 20:59:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1210, 2, '已退款', '2', 'trade_order_item_after_sale_status', 0, 'success', '', '交易订单项的售后状态 - 已退款', '1', to_date('2022-12-10 20:59:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 20:59:46', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1211, 1, '完全匹配', '1', 'mp_auto_reply_request_match', 0, 'primary', '', '公众号自动回复的请求关键字匹配模式 - 完全匹配', '1', to_date('2023-01-16 23:30:39', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-16 23:31:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1212, 2, '半匹配', '2', 'mp_auto_reply_request_match', 0, 'success', '', '公众号自动回复的请求关键字匹配模式 - 半匹配', '1', to_date('2023-01-16 23:30:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-16 23:31:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1213, 1, '文本', 'text', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 文本', '1', to_date('2023-01-17 22:17:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 22:17:39', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1214, 2, '图片', 'image', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 图片', '1', to_date('2023-01-17 22:17:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 14:19:47', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1215, 3, '语音', 'voice', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 语音', '1', to_date('2023-01-17 22:17:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 14:20:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1216, 4, '视频', 'video', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 视频', '1', to_date('2023-01-17 22:17:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 14:21:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1217, 5, '小视频', 'shortvideo', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 小视频', '1', to_date('2023-01-17 22:17:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 14:19:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1218, 6, '图文', 'news', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 图文', '1', to_date('2023-01-17 22:17:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 14:22:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1219, 7, '音乐', 'music', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 音乐', '1', to_date('2023-01-17 22:17:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 14:22:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1220, 8, '地理位置', 'location', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 地理位置', '1', to_date('2023-01-17 22:17:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 14:23:51', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1221, 9, '链接', 'link', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 链接', '1', to_date('2023-01-17 22:17:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 14:24:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1222, 10, '事件', 'event', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 事件', '1', to_date('2023-01-17 22:17:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 14:24:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1223, 0, '初始化', '0', 'system_mail_send_status', 0, 'primary', '', '邮件发送状态 - 初始化\n', '1', to_date('2023-01-26 09:53:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-26 16:36:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1224, 10, '发送成功', '10', 'system_mail_send_status', 0, 'success', '', '邮件发送状态 - 发送成功', '1', to_date('2023-01-26 09:54:28', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-26 16:36:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1225, 20, '发送失败', '20', 'system_mail_send_status', 0, 'danger', '', '邮件发送状态 - 发送失败', '1', to_date('2023-01-26 09:54:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-26 16:36:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1226, 30, '不发送', '30', 'system_mail_send_status', 0, 'info', '', '邮件发送状态 - 不发送', '1', to_date('2023-01-26 09:55:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-26 16:36:36', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1227, 1, '通知公告', '1', 'system_notify_template_type', 0, 'primary', '', '站内信模版的类型 - 通知公告', '1', to_date('2023-01-28 10:35:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-28 10:35:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1228, 2, '系统消息', '2', 'system_notify_template_type', 0, 'success', '', '站内信模版的类型 - 系统消息', '1', to_date('2023-01-28 10:36:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-28 10:36:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1230, 13, '支付宝条码支付', 'alipay_bar', 'pay_channel_code', 0, 'primary', '', '支付宝条码支付', '1', to_date('2023-02-18 23:32:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 20:09:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1231, 10, 'Vue2 Element UI 标准模版', '10', 'infra_codegen_front_type', 0, '', '', '', '1', to_date('2023-04-13 00:03:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-04-13 00:03:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1232, 20, 'Vue3 Element Plus 标准模版', '20', 'infra_codegen_front_type', 0, '', '', '', '1', to_date('2023-04-13 00:04:08', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-04-13 00:04:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1233, 21, 'Vue3 Element Plus Schema 模版', '21', 'infra_codegen_front_type', 0, '', '', '', '1', to_date('2023-04-13 00:04:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-04-13 00:04:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1234, 30, 'Vue3 vben 模版', '30', 'infra_codegen_front_type', 0, '', '', '', '1', to_date('2023-04-13 00:04:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-04-13 00:04:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1244, 0, '按件', '1', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', to_date('2023-05-21 22:46:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-05-21 22:46:40', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1245, 1, '按重量', '2', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', to_date('2023-05-21 22:46:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-05-21 22:46:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1246, 2, '按体积', '3', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', to_date('2023-05-21 22:47:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-05-21 22:47:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1335, 11, '订单积分抵扣', '11', 'member_point_biz_type', 0, '', '', '', '1', to_date('2023-06-10 12:15:27', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:41:43', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1336, 1, '签到', '1', 'member_point_biz_type', 0, '', '', '', '1', to_date('2023-06-10 12:15:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-20 11:59:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1341, 20, '已退款', '20', 'pay_order_status', 0, 'danger', '', '已退款', '1', to_date('2023-07-19 18:05:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 18:05:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1342, 21, '请求成功,但是结果失败', '21', 'pay_notify_status', 0, 'warning', '', '请求成功,但是结果失败', '1', to_date('2023-07-19 18:10:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 18:11:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1343, 22, '请求失败', '22', 'pay_notify_status', 0, 'warning', '', NULL, '1', to_date('2023-07-19 18:11:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 18:11:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1344, 4, '微信扫码支付', 'wx_native', 'pay_channel_code', 0, 'success', '', '微信扫码支付', '1', to_date('2023-07-19 20:07:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 20:09:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1345, 5, '微信条码支付', 'wx_bar', 'pay_channel_code', 0, 'success', '', '微信条码支付\n', '1', to_date('2023-07-19 20:08:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 20:09:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1346, 1, '支付单', '1', 'pay_notify_type', 0, 'primary', '', '支付单', '1', to_date('2023-07-20 12:23:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-20 12:23:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1347, 2, '退款单', '2', 'pay_notify_type', 0, 'danger', '', NULL, '1', to_date('2023-07-20 12:23:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-20 12:23:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1348, 20, '模拟支付', 'mock', 'pay_channel_code', 0, 'default', '', '模拟支付', '1', to_date('2023-07-29 11:10:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-29 03:14:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1349, 12, '订单积分抵扣(整单取消)', '12', 'member_point_biz_type', 0, '', '', '', '1', to_date('2023-08-20 12:00:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:42:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1350, 0, '管理员调整', '0', 'member_experience_biz_type', 0, '', '', NULL, '', to_date('2023-08-22 12:41:01', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-22 12:41:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1351, 1, '邀新奖励', '1', 'member_experience_biz_type', 0, '', '', NULL, '', to_date('2023-08-22 12:41:01', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-22 12:41:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1352, 11, '下单奖励', '11', 'member_experience_biz_type', 0, 'success', '', NULL, '', to_date('2023-08-22 12:41:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:45:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1353, 12, '下单奖励(整单取消)', '12', 'member_experience_biz_type', 0, 'warning', '', NULL, '', to_date('2023-08-22 12:41:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:45:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1354, 4, '签到奖励', '4', 'member_experience_biz_type', 0, '', '', NULL, '', to_date('2023-08-22 12:41:01', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-22 12:41:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1355, 5, '抽奖奖励', '5', 'member_experience_biz_type', 0, '', '', NULL, '', to_date('2023-08-22 12:41:01', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-22 12:41:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1356, 1, '快递发货', '1', 'trade_delivery_type', 0, '', '', '', '1', to_date('2023-08-23 00:04:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-23 00:04:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1357, 2, '用户自提', '2', 'trade_delivery_type', 0, '', '', '', '1', to_date('2023-08-23 00:05:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-23 00:05:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1358, 3, '品类劵', '3', 'promotion_product_scope', 0, 'default', '', '', '1', to_date('2023-09-01 23:43:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-28 00:27:47', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1359, 1, '人人分销', '1', 'brokerage_enabled_condition', 0, '', '', '所有用户都可以分销', '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1360, 2, '指定分销', '2', 'brokerage_enabled_condition', 0, '', '', '仅可后台手动设置推广员', '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1361, 1, '首次绑定', '1', 'brokerage_bind_mode', 0, '', '', '只要用户没有推广人,随时都可以绑定推广关系', '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1362, 2, '注册绑定', '2', 'brokerage_bind_mode', 0, '', '', '仅新用户注册时才能绑定推广关系', '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1363, 3, '覆盖绑定', '3', 'brokerage_bind_mode', 0, '', '', '如果用户已经有推广人,推广人会被变更', '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1364, 1, '钱包', '1', 'brokerage_withdraw_type', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1365, 2, '银行卡', '2', 'brokerage_withdraw_type', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1366, 3, '微信', '3', 'brokerage_withdraw_type', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1367, 4, '支付宝', '4', 'brokerage_withdraw_type', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1368, 1, '订单返佣', '1', 'brokerage_record_biz_type', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1369, 2, '申请提现', '2', 'brokerage_record_biz_type', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1370, 3, '申请提现驳回', '3', 'brokerage_record_biz_type', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1371, 0, '待结算', '0', 'brokerage_record_status', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1372, 1, '已结算', '1', 'brokerage_record_status', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1373, 2, '已取消', '2', 'brokerage_record_status', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1374, 0, '审核中', '0', 'brokerage_withdraw_status', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1375, 10, '审核通过', '10', 'brokerage_withdraw_status', 0, 'success', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1376, 11, '提现成功', '11', 'brokerage_withdraw_status', 0, 'success', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1377, 20, '审核不通过', '20', 'brokerage_withdraw_status', 0, 'danger', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1378, 21, '提现失败', '21', 'brokerage_withdraw_status', 0, 'danger', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1379, 0, '工商银行', '0', 'brokerage_bank_name', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1380, 1, '建设银行', '1', 'brokerage_bank_name', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1381, 2, '农业银行', '2', 'brokerage_bank_name', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1382, 3, '中国银行', '3', 'brokerage_bank_name', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1383, 4, '交通银行', '4', 'brokerage_bank_name', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1384, 5, '招商银行', '5', 'brokerage_bank_name', 0, '', '', NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1385, 21, '钱包', 'wallet', 'pay_channel_code', 0, 'primary', '', '', '1', to_date('2023-10-01 21:46:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-01 21:48:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1386, 1, '砍价中', '1', 'promotion_bargain_record_status', 0, 'default', '', '', '1', to_date('2023-10-05 10:41:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-05 10:41:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1387, 2, '砍价成功', '2', 'promotion_bargain_record_status', 0, 'success', '', '', '1', to_date('2023-10-05 10:41:39', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-05 10:41:39', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1388, 3, '砍价失败', '3', 'promotion_bargain_record_status', 0, 'warning', '', '', '1', to_date('2023-10-05 10:41:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-05 10:41:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1389, 1, '拼团中', '1', 'promotion_combination_record_status', 0, '', '', '', '1', to_date('2023-10-08 07:24:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-08 07:24:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1390, 2, '拼团成功', '2', 'promotion_combination_record_status', 0, 'success', '', '', '1', to_date('2023-10-08 07:24:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-08 07:24:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1391, 3, '拼团失败', '3', 'promotion_combination_record_status', 0, 'warning', '', '', '1', to_date('2023-10-08 07:25:11', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-08 07:25:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1392, 2, '管理员修改', '2', 'member_point_biz_type', 0, 'default', '', '', '1', to_date('2023-10-11 07:41:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:41:34', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1393, 13, '订单积分抵扣(单个退款)', '13', 'member_point_biz_type', 0, '', '', '', '1', to_date('2023-10-11 07:42:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:42:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1394, 21, '订单积分奖励', '21', 'member_point_biz_type', 0, 'default', '', '', '1', to_date('2023-10-11 07:42:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:42:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1395, 22, '订单积分奖励(整单取消)', '22', 'member_point_biz_type', 0, 'default', '', '', '1', to_date('2023-10-11 07:42:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:43:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1396, 23, '订单积分奖励(单个退款)', '23', 'member_point_biz_type', 0, 'default', '', '', '1', to_date('2023-10-11 07:43:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:43:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1397, 13, '下单奖励(单个退款)', '13', 'member_experience_biz_type', 0, 'warning', '', '', '1', to_date('2023-10-11 07:45:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-11 07:45:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1398, 5, '网上转账', '5', 'crm_receivable_return_type', 0, 'default', '', '', '1', to_date('2023-10-18 21:55:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-18 21:55:24', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1399, 6, '支付宝', '6', 'crm_receivable_return_type', 0, 'default', '', '', '1', to_date('2023-10-18 21:55:38', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-18 21:55:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1400, 7, '微信支付', '7', 'crm_receivable_return_type', 0, 'default', '', '', '1', to_date('2023-10-18 21:55:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-18 21:55:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1401, 8, '其他', '8', 'crm_receivable_return_type', 0, 'default', '', '', '1', to_date('2023-10-18 21:56:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-18 21:56:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1402, 1, 'IT', '1', 'crm_customer_industry', 0, 'default', '', '', '1', to_date('2023-10-28 23:02:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-18 23:30:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1403, 2, '金融业', '2', 'crm_customer_industry', 0, 'default', '', '', '1', to_date('2023-10-28 23:02:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-18 23:30:43', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1404, 3, '房地产', '3', 'crm_customer_industry', 0, 'default', '', '', '1', to_date('2023-10-28 23:02:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-18 23:30:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1405, 4, '商业服务', '4', 'crm_customer_industry', 0, 'default', '', '', '1', to_date('2023-10-28 23:02:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-18 23:30:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1406, 5, '运输/物流', '5', 'crm_customer_industry', 0, 'default', '', '', '1', to_date('2023-10-28 23:03:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-18 23:31:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1407, 6, '生产', '6', 'crm_customer_industry', 0, 'default', '', '', '1', to_date('2023-10-28 23:03:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-18 23:31:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1408, 7, '政府', '7', 'crm_customer_industry', 0, 'default', '', '', '1', to_date('2023-10-28 23:03:27', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-18 23:31:13', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1409, 8, '文化传媒', '8', 'crm_customer_industry', 0, 'default', '', '', '1', to_date('2023-10-28 23:03:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-18 23:31:20', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1422, 1, 'A (重点客户)', '1', 'crm_customer_level', 0, 'primary', '', '', '1', to_date('2023-10-28 23:07:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 23:07:13', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1423, 2, 'B (普通客户)', '2', 'crm_customer_level', 0, 'info', '', '', '1', to_date('2023-10-28 23:07:35', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 23:07:35', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1424, 3, 'C (非优先客户)', '3', 'crm_customer_level', 0, 'default', '', '', '1', to_date('2023-10-28 23:07:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 23:07:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1425, 1, '促销', '1', 'crm_customer_source', 0, 'default', '', '', '1', to_date('2023-10-28 23:08:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 23:08:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1426, 2, '搜索引擎', '2', 'crm_customer_source', 0, 'default', '', '', '1', to_date('2023-10-28 23:08:39', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 23:08:39', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1427, 3, '广告', '3', 'crm_customer_source', 0, 'default', '', '', '1', to_date('2023-10-28 23:08:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 23:08:47', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1428, 4, '转介绍', '4', 'crm_customer_source', 0, 'default', '', '', '1', to_date('2023-10-28 23:08:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 23:08:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1429, 5, '线上注册', '5', 'crm_customer_source', 0, 'default', '', '', '1', to_date('2023-10-28 23:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 23:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1430, 6, '线上咨询', '6', 'crm_customer_source', 0, 'default', '', '', '1', to_date('2023-10-28 23:09:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 23:09:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1431, 7, '预约上门', '7', 'crm_customer_source', 0, 'default', '', '', '1', to_date('2023-10-28 23:09:39', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 23:09:39', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1432, 8, '陌拜', '8', 'crm_customer_source', 0, 'default', '', '', '1', to_date('2023-10-28 23:10:04', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 23:10:04', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1433, 9, '电话咨询', '9', 'crm_customer_source', 0, 'default', '', '', '1', to_date('2023-10-28 23:10:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 23:10:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1434, 10, '邮件咨询', '10', 'crm_customer_source', 0, 'default', '', '', '1', to_date('2023-10-28 23:10:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 23:10:33', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1435, 10, 'Gitee', '10', 'system_social_type', 0, '', '', '', '1', to_date('2023-11-04 13:04:42', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 13:04:42', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1436, 20, '钉钉', '20', 'system_social_type', 0, '', '', '', '1', to_date('2023-11-04 13:04:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 13:04:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1437, 30, '企业微信', '30', 'system_social_type', 0, '', '', '', '1', to_date('2023-11-04 13:05:09', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 13:05:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1438, 31, '微信公众平台', '31', 'system_social_type', 0, '', '', '', '1', to_date('2023-11-04 13:05:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 13:05:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1439, 32, '微信开放平台', '32', 'system_social_type', 0, '', '', '', '1', to_date('2023-11-04 13:05:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 13:05:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1440, 34, '微信小程序', '34', 'system_social_type', 0, '', '', '', '1', to_date('2023-11-04 13:05:38', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 13:07:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1441, 1, '上架', '1', 'crm_product_status', 0, 'success', '', '', '1', to_date('2023-10-30 21:49:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-30 21:49:34', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1442, 0, '下架', '0', 'crm_product_status', 0, 'success', '', '', '1', to_date('2023-10-30 21:49:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-30 21:49:13', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1443, 15, '子表', '15', 'infra_codegen_template_type', 0, 'default', '', '', '1', to_date('2023-11-13 23:06:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-13 23:06:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1444, 10, '主表(标准模式)', '10', 'infra_codegen_template_type', 0, 'default', '', '', '1', to_date('2023-11-14 12:32:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-14 12:32:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1445, 11, '主表(ERP 模式)', '11', 'infra_codegen_template_type', 0, 'default', '', '', '1', to_date('2023-11-14 12:33:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-14 12:33:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1446, 12, '主表(内嵌模式)', '12', 'infra_codegen_template_type', 0, '', '', '', '1', to_date('2023-11-14 12:33:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-14 12:33:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1447, 1, '负责人', '1', 'crm_permission_level', 0, 'default', '', '', '1', to_date('2023-11-30 09:53:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-30 09:53:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1448, 2, '只读', '2', 'crm_permission_level', 0, '', '', '', '1', to_date('2023-11-30 09:53:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-30 09:53:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1449, 3, '读写', '3', 'crm_permission_level', 0, '', '', '', '1', to_date('2023-11-30 09:53:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-30 09:53:36', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1450, 0, '未提交', '0', 'crm_audit_status', 0, '', '', '', '1', to_date('2023-11-30 18:56:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-30 18:56:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1451, 10, '审批中', '10', 'crm_audit_status', 0, '', '', '', '1', to_date('2023-11-30 18:57:10', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-30 18:57:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1452, 20, '审核通过', '20', 'crm_audit_status', 0, '', '', '', '1', to_date('2023-11-30 18:57:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-30 18:57:24', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1453, 30, '审核不通过', '30', 'crm_audit_status', 0, '', '', '', '1', to_date('2023-11-30 18:57:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-30 18:57:32', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1454, 40, '已取消', '40', 'crm_audit_status', 0, '', '', '', '1', to_date('2023-11-30 18:57:42', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-30 18:57:42', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1456, 1, '支票', '1', 'crm_receivable_return_type', 0, 'default', '', '', '1', to_date('2023-10-18 21:54:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-18 21:54:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1457, 2, '现金', '2', 'crm_receivable_return_type', 0, 'default', '', '', '1', to_date('2023-10-18 21:54:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-18 21:54:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1458, 3, '邮政汇款', '3', 'crm_receivable_return_type', 0, 'default', '', '', '1', to_date('2023-10-18 21:54:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-18 21:54:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1459, 4, '电汇', '4', 'crm_receivable_return_type', 0, 'default', '', '', '1', to_date('2023-10-18 21:55:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-18 21:55:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1460, 5, '网上转账', '5', 'crm_receivable_return_type', 0, 'default', '', '', '1', to_date('2023-10-18 21:55:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-18 21:55:24', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1461, 1, '个', '1', 'crm_product_unit', 0, '', '', '', '1', to_date('2023-12-05 23:02:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 23:02:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1462, 2, '块', '2', 'crm_product_unit', 0, '', '', '', '1', to_date('2023-12-05 23:02:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 23:02:34', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1463, 3, '只', '3', 'crm_product_unit', 0, '', '', '', '1', to_date('2023-12-05 23:02:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 23:02:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1464, 4, '把', '4', 'crm_product_unit', 0, '', '', '', '1', to_date('2023-12-05 23:03:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 23:03:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1465, 5, '枚', '5', 'crm_product_unit', 0, '', '', '', '1', to_date('2023-12-05 23:03:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 23:03:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1466, 6, '瓶', '6', 'crm_product_unit', 0, '', '', '', '1', to_date('2023-12-05 23:03:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 23:03:20', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1467, 7, '盒', '7', 'crm_product_unit', 0, '', '', '', '1', to_date('2023-12-05 23:03:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 23:03:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1468, 8, '台', '8', 'crm_product_unit', 0, '', '', '', '1', to_date('2023-12-05 23:03:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 23:03:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1469, 9, '吨', '9', 'crm_product_unit', 0, '', '', '', '1', to_date('2023-12-05 23:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 23:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1470, 10, '千克', '10', 'crm_product_unit', 0, '', '', '', '1', to_date('2023-12-05 23:04:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 23:04:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1471, 11, '米', '11', 'crm_product_unit', 0, '', '', '', '1', to_date('2023-12-05 23:04:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 23:04:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1472, 12, '箱', '12', 'crm_product_unit', 0, '', '', '', '1', to_date('2023-12-05 23:04:25', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 23:04:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1473, 13, '套', '13', 'crm_product_unit', 0, '', '', '', '1', to_date('2023-12-05 23:04:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 23:04:34', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1474, 1, '打电话', '1', 'crm_follow_up_type', 0, '', '', '', '1', to_date('2024-01-15 20:48:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-01-15 20:48:20', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1475, 2, '发短信', '2', 'crm_follow_up_type', 0, '', '', '', '1', to_date('2024-01-15 20:48:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-01-15 20:48:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1476, 3, '上门拜访', '3', 'crm_follow_up_type', 0, '', '', '', '1', to_date('2024-01-15 20:49:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-01-15 20:49:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1477, 4, '微信沟通', '4', 'crm_follow_up_type', 0, '', '', '', '1', to_date('2024-01-15 20:49:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-01-15 20:49:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1478, 4, '钱包余额', '4', 'pay_transfer_type', 0, 'info', '', '', '1', to_date('2023-10-28 16:28:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 16:28:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1479, 3, '银行卡', '3', 'pay_transfer_type', 0, 'default', '', '', '1', to_date('2023-10-28 16:28:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 16:28:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1480, 2, '微信余额', '2', 'pay_transfer_type', 0, 'info', '', '', '1', to_date('2023-10-28 16:28:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 16:28:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1481, 1, '支付宝余额', '1', 'pay_transfer_type', 0, 'default', '', '', '1', to_date('2023-10-28 16:27:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 16:27:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1482, 4, '转账失败', '30', 'pay_transfer_status', 0, 'warning', '', '', '1', to_date('2023-10-28 16:24:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 16:24:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1483, 3, '转账成功', '20', 'pay_transfer_status', 0, 'success', '', '', '1', to_date('2023-10-28 16:23:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 16:23:50', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1484, 2, '转账进行中', '10', 'pay_transfer_status', 0, 'info', '', '', '1', to_date('2023-10-28 16:23:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 16:23:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1485, 1, '等待转账', '0', 'pay_transfer_status', 0, 'default', '', '', '1', to_date('2023-10-28 16:21:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 16:23:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1486, 10, '其它入库', '10', 'erp_stock_record_biz_type', 0, '', '', '', '1', to_date('2024-02-05 18:07:25', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-05 18:07:43', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1487, 11, '其它入库(作废)', '11', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', to_date('2024-02-05 18:08:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-05 19:20:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1488, 20, '其它出库', '20', 'erp_stock_record_biz_type', 0, '', '', '', '1', to_date('2024-02-05 18:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-05 18:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1489, 21, '其它出库(作废)', '21', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', to_date('2024-02-05 18:09:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-05 19:20:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1490, 10, '未审核', '10', 'erp_audit_status', 0, 'default', '', '', '1', to_date('2024-02-06 00:00:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-06 00:00:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1491, 20, '已审核', '20', 'erp_audit_status', 0, 'success', '', '', '1', to_date('2024-02-06 00:00:35', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-06 00:00:35', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1492, 30, '调拨入库', '30', 'erp_stock_record_biz_type', 0, '', '', '', '1', to_date('2024-02-07 20:34:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-07 12:36:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1493, 31, '调拨入库(作废)', '31', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', to_date('2024-02-07 20:34:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-07 20:37:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1494, 32, '调拨出库', '32', 'erp_stock_record_biz_type', 0, '', '', '', '1', to_date('2024-02-07 20:34:38', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-07 12:36:33', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1495, 33, '调拨出库(作废)', '33', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', to_date('2024-02-07 20:34:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-07 20:37:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1496, 40, '盘盈入库', '40', 'erp_stock_record_biz_type', 0, '', '', '', '1', to_date('2024-02-08 08:53:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-08 08:53:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1497, 41, '盘盈入库(作废)', '41', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', to_date('2024-02-08 08:53:39', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-16 19:40:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1498, 42, '盘亏出库', '42', 'erp_stock_record_biz_type', 0, '', '', '', '1', to_date('2024-02-08 08:54:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-08 08:54:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1499, 43, '盘亏出库(作废)', '43', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', to_date('2024-02-08 08:54:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-16 19:40:46', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1500, 50, '销售出库', '50', 'erp_stock_record_biz_type', 0, '', '', '', '1', to_date('2024-02-11 21:47:25', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-11 21:50:40', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1501, 51, '销售出库(作废)', '51', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', to_date('2024-02-11 21:47:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-11 21:51:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1502, 60, '销售退货入库', '60', 'erp_stock_record_biz_type', 0, '', '', '', '1', to_date('2024-02-12 06:51:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-12 06:51:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1503, 61, '销售退货入库(作废)', '61', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', to_date('2024-02-12 06:51:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-12 06:51:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1504, 70, '采购入库', '70', 'erp_stock_record_biz_type', 0, '', '', '', '1', to_date('2024-02-16 13:10:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-16 13:10:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1505, 71, '采购入库(作废)', '71', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', to_date('2024-02-16 13:10:10', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-16 19:40:40', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1506, 80, '采购退货出库', '80', 'erp_stock_record_biz_type', 0, '', '', '', '1', to_date('2024-02-16 13:10:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-16 13:10:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1507, 81, '采购退货出库(作废)', '81', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', to_date('2024-02-16 13:10:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-16 19:40:33', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1509, 3, '审批不通过', '3', 'bpm_process_instance_status', 0, 'danger', '', '', '1', to_date('2024-03-16 16:12:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-16 16:12:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1510, 4, '已取消', '4', 'bpm_process_instance_status', 0, 'warning', '', '', '1', to_date('2024-03-16 16:12:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-16 16:12:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1511, 5, '已退回', '5', 'bpm_task_status', 0, 'warning', '', '', '1', to_date('2024-03-16 19:10:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-08 22:41:40', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1512, 6, '委派中', '6', 'bpm_task_status', 0, 'primary', '', '', '1', to_date('2024-03-17 10:06:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-08 22:41:40', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1513, 7, '审批通过中', '7', 'bpm_task_status', 0, 'success', '', '', '1', to_date('2024-03-17 10:06:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-08 22:41:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1514, 0, '待审批', '0', 'bpm_task_status', 0, 'info', '', '', '1', to_date('2024-03-17 10:07:11', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-08 22:41:42', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1515, 35, '发起人自选', '35', 'bpm_task_candidate_strategy', 0, '', '', '', '1', to_date('2024-03-22 19:45:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-22 19:45:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1516, 1, '执行监听器', 'execution', 'bpm_process_listener_type', 0, 'primary', '', '', '1', to_date('2024-03-23 12:54:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-23 19:14:19', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1517, 1, '任务监听器', 'task', 'bpm_process_listener_type', 0, 'success', '', '', '1', to_date('2024-03-23 12:54:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-23 19:14:24', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1526, 1, 'Java 类', 'class', 'bpm_process_listener_value_type', 0, 'primary', '', '', '1', to_date('2024-03-23 15:08:45', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-23 19:14:32', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1527, 2, '表达式', 'expression', 'bpm_process_listener_value_type', 0, 'success', '', '', '1', to_date('2024-03-23 15:09:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-23 19:14:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1528, 3, '代理表达式', 'delegateExpression', 'bpm_process_listener_value_type', 0, 'info', '', '', '1', to_date('2024-03-23 15:11:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-23 19:14:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1529, 1, '天', '1', 'date_interval', 0, '', '', '', '1', to_date('2024-03-29 22:50:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-29 22:50:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1530, 2, '周', '2', 'date_interval', 0, '', '', '', '1', to_date('2024-03-29 22:50:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-29 22:50:36', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1531, 3, '月', '3', 'date_interval', 0, '', '', '', '1', to_date('2024-03-29 22:50:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-29 22:50:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1532, 4, '季度', '4', 'date_interval', 0, '', '', '', '1', to_date('2024-03-29 22:51:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-29 22:51:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1533, 5, '年', '5', 'date_interval', 0, '', '', '', '1', to_date('2024-03-29 22:51:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-29 22:51:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1534, 1, '赢单', '1', 'crm_business_end_status_type', 0, 'success', '', '', '1', to_date('2024-04-13 23:26:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-13 23:26:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1535, 2, '输单', '2', 'crm_business_end_status_type', 0, 'primary', '', '', '1', to_date('2024-04-13 23:27:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-13 23:27:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1536, 3, '无效', '3', 'crm_business_end_status_type', 0, 'info', '', '', '1', to_date('2024-04-13 23:27:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-13 23:27:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_dict_data_seq + START WITH 1537; + +-- ---------------------------- +-- Table structure for system_dict_type +-- ---------------------------- +CREATE TABLE system_dict_type +( + id number NOT NULL, + name varchar2(100) DEFAULT '' NULL, + type varchar2(100) DEFAULT '' NULL, + status smallint DEFAULT 0 NOT NULL, + remark varchar2(500) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + deleted_time date DEFAULT NULL NULL +); + +ALTER TABLE system_dict_type + ADD CONSTRAINT pk_system_dict_type PRIMARY KEY (id); + +COMMENT ON COLUMN system_dict_type.id IS '字典主键'; +COMMENT ON COLUMN system_dict_type.name IS '字典名称'; +COMMENT ON COLUMN system_dict_type.type IS '字典类型'; +COMMENT ON COLUMN system_dict_type.status IS '状态(0正常 1停用)'; +COMMENT ON COLUMN system_dict_type.remark IS '备注'; +COMMENT ON COLUMN system_dict_type.creator IS '创建者'; +COMMENT ON COLUMN system_dict_type.create_time IS '创建时间'; +COMMENT ON COLUMN system_dict_type.updater IS '更新者'; +COMMENT ON COLUMN system_dict_type.update_time IS '更新时间'; +COMMENT ON COLUMN system_dict_type.deleted IS '是否删除'; +COMMENT ON COLUMN system_dict_type.deleted_time IS '删除时间'; +COMMENT ON TABLE system_dict_type IS '字典类型表'; + +-- ---------------------------- +-- Records of system_dict_type +-- ---------------------------- +-- @formatter:off +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1, '用户性别', 'system_user_sex', 0, NULL, 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-16 20:29:32', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (6, '参数类型', 'infra_config_type', 0, NULL, 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:36:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (7, '通知类型', 'system_notice_type', 0, NULL, 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:35:26', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (9, '操作类型', 'infra_operate_type', 0, NULL, 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-14 12:44:01', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (10, '系统状态', 'common_status', 0, NULL, 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:21:28', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (11, 'Boolean 是否类型', 'infra_boolean_string', 0, 'boolean 转是否', '', to_date('2021-01-19 03:20:08', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:37:10', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (104, '登陆结果', 'system_login_result', 0, '登陆结果', '', to_date('2021-01-18 06:17:11', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:36:00', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (106, '代码生成模板类型', 'infra_codegen_template_type', 0, NULL, '', to_date('2021-02-05 07:08:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-16 20:26:50', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (107, '定时任务状态', 'infra_job_status', 0, NULL, '', to_date('2021-02-07 07:44:16', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:51:11', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (108, '定时任务日志状态', 'infra_job_log_status', 0, NULL, '', to_date('2021-02-08 10:03:51', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:50:43', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (109, '用户类型', 'user_type', 0, NULL, '', to_date('2021-02-26 00:15:51', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2021-02-26 00:15:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (110, 'API 异常数据的处理状态', 'infra_api_error_log_process_status', 0, NULL, '', to_date('2021-02-26 07:07:01', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-01 16:50:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (111, '短信渠道编码', 'system_sms_channel_code', 0, NULL, '1', to_date('2021-04-05 01:04:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 02:09:08', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (112, '短信模板的类型', 'system_sms_template_type', 0, NULL, '1', to_date('2021-04-05 21:50:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-01 16:35:06', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (113, '短信发送状态', 'system_sms_send_status', 0, NULL, '1', to_date('2021-04-11 20:18:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-01 16:35:09', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (114, '短信接收状态', 'system_sms_receive_status', 0, NULL, '1', to_date('2021-04-11 20:27:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-01 16:35:14', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (116, '登陆日志的类型', 'system_login_type', 0, '登陆日志的类型', '1', to_date('2021-10-06 00:50:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-01 16:35:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (117, 'OA 请假类型', 'bpm_oa_leave_type', 0, NULL, '1', to_date('2021-09-21 22:34:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-01-22 10:41:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (130, '支付渠道编码类型', 'pay_channel_code', 0, '支付渠道的编码', '1', to_date('2021-12-03 10:35:08', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-10 10:11:39', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (131, '支付回调状态', 'pay_notify_status', 0, '支付回调状态(包括退款回调)', '1', to_date('2021-12-03 10:53:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 18:09:43', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (132, '支付订单状态', 'pay_order_status', 0, '支付订单状态', '1', to_date('2021-12-03 11:17:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2021-12-03 11:17:50', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (134, '退款订单状态', 'pay_refund_status', 0, '退款订单状态', '1', to_date('2021-12-10 16:42:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-19 10:13:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (139, '流程实例的状态', 'bpm_process_instance_status', 0, '流程实例的状态', '1', to_date('2022-01-07 23:46:42', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-01-07 23:46:42', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (140, '流程实例的结果', 'bpm_task_status', 0, '流程实例的结果', '1', to_date('2022-01-07 23:48:10', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-08 22:42:03', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (141, '流程的表单类型', 'bpm_model_form_type', 0, '流程的表单类型', '103', to_date('2022-01-11 23:50:45', 'SYYYY-MM-DD HH24:MI:SS'), '103', to_date('2022-01-11 23:50:45', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (142, '任务分配规则的类型', 'bpm_task_candidate_strategy', 0, 'BPM 任务的候选人的策略', '103', to_date('2022-01-12 23:21:04', 'SYYYY-MM-DD HH24:MI:SS'), '103', to_date('2024-03-06 02:53:59', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (144, '代码生成的场景枚举', 'infra_codegen_scene', 0, '代码生成的场景枚举', '1', to_date('2022-02-02 13:14:45', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-10 16:33:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (145, '角色类型', 'system_role_type', 0, '角色类型', '1', to_date('2022-02-16 13:01:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-16 13:01:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (146, '文件存储器', 'infra_file_storage', 0, '文件存储器', '1', to_date('2022-03-15 00:24:38', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-15 00:24:38', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (147, 'OAuth 2.0 授权类型', 'system_oauth2_grant_type', 0, 'OAuth 2.0 授权类型(模式)', '1', to_date('2022-05-12 00:20:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-11 16:25:49', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (149, '商品 SPU 状态', 'product_spu_status', 0, '商品 SPU 状态', '1', to_date('2022-10-24 21:19:04', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-10-24 21:19:08', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (150, '优惠类型', 'promotion_discount_type', 0, '优惠类型', '1', to_date('2022-11-01 12:46:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-01 12:46:06', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (151, '优惠劵模板的有限期类型', 'promotion_coupon_template_validity_type', 0, '优惠劵模板的有限期类型', '1', to_date('2022-11-02 00:06:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 00:08:26', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (152, '营销的商品范围', 'promotion_product_scope', 0, '营销的商品范围', '1', to_date('2022-11-02 00:28:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-02 00:28:01', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (153, '优惠劵的状态', 'promotion_coupon_status', 0, '优惠劵的状态', '1', to_date('2022-11-04 00:14:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 00:14:49', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (154, '优惠劵的领取方式', 'promotion_coupon_take_type', 0, '优惠劵的领取方式', '1', to_date('2022-11-04 19:12:27', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 19:12:27', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (155, '促销活动的状态', 'promotion_activity_status', 0, '促销活动的状态', '1', to_date('2022-11-04 22:54:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 22:54:23', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (156, '营销的条件类型', 'promotion_condition_type', 0, '营销的条件类型', '1', to_date('2022-11-04 22:59:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-04 22:59:23', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (157, '交易售后状态', 'trade_after_sale_status', 0, '交易售后状态', '1', to_date('2022-11-19 20:52:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 20:52:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (158, '交易售后的类型', 'trade_after_sale_type', 0, '交易售后的类型', '1', to_date('2022-11-19 21:04:09', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 21:04:09', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (159, '交易售后的方式', 'trade_after_sale_way', 0, '交易售后的方式', '1', to_date('2022-11-19 21:39:04', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-19 21:39:04', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (160, '终端', 'terminal', 0, '终端', '1', to_date('2022-12-10 10:50:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 10:53:11', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (161, '交易订单的类型', 'trade_order_type', 0, '交易订单的类型', '1', to_date('2022-12-10 16:33:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 16:33:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (162, '交易订单的状态', 'trade_order_status', 0, '交易订单的状态', '1', to_date('2022-12-10 16:48:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 16:48:44', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (163, '交易订单项的售后状态', 'trade_order_item_after_sale_status', 0, '交易订单项的售后状态', '1', to_date('2022-12-10 20:58:08', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 20:58:08', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (164, '公众号自动回复的请求关键字匹配模式', 'mp_auto_reply_request_match', 0, '公众号自动回复的请求关键字匹配模式', '1', to_date('2023-01-16 23:29:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-16 23:29:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (165, '公众号的消息类型', 'mp_message_type', 0, '公众号的消息类型', '1', to_date('2023-01-17 22:17:09', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 22:17:09', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (166, '邮件发送状态', 'system_mail_send_status', 0, '邮件发送状态', '1', to_date('2023-01-26 09:53:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-26 09:53:13', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (167, '站内信模版的类型', 'system_notify_template_type', 0, '站内信模版的类型', '1', to_date('2023-01-28 10:35:10', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-28 10:35:10', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (168, '代码生成的前端类型', 'infra_codegen_front_type', 0, '', '1', to_date('2023-04-12 23:57:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-04-12 23:57:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (170, '快递计费方式', 'trade_delivery_express_charge_mode', 0, '用于商城交易模块配送管理', '1', to_date('2023-05-21 22:45:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-05-21 22:45:03', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (171, '积分业务类型', 'member_point_biz_type', 0, '', '1', to_date('2023-06-10 12:15:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-06-28 13:48:20', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (173, '支付通知类型', 'pay_notify_type', 0, NULL, '1', to_date('2023-07-20 12:23:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-07-20 12:23:03', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (174, '会员经验业务类型', 'member_experience_biz_type', 0, NULL, '', to_date('2023-08-22 12:41:01', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-22 12:41:01', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (175, '交易配送类型', 'trade_delivery_type', 0, '', '1', to_date('2023-08-23 00:03:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-23 00:03:14', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (176, '分佣模式', 'brokerage_enabled_condition', 0, NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (177, '分销关系绑定模式', 'brokerage_bind_mode', 0, NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (178, '佣金提现类型', 'brokerage_withdraw_type', 0, NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (179, '佣金记录业务类型', 'brokerage_record_biz_type', 0, NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (180, '佣金记录状态', 'brokerage_record_status', 0, NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (181, '佣金提现状态', 'brokerage_withdraw_status', 0, NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (182, '佣金提现银行', 'brokerage_bank_name', 0, NULL, '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (183, '砍价记录的状态', 'promotion_bargain_record_status', 0, '', '1', to_date('2023-10-05 10:41:08', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-05 10:41:08', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (184, '拼团记录的状态', 'promotion_combination_record_status', 0, '', '1', to_date('2023-10-08 07:24:25', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-08 07:24:25', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (185, '回款-回款方式', 'crm_receivable_return_type', 0, '回款-回款方式', '1', to_date('2023-10-18 21:54:10', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-18 21:54:10', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (186, 'CRM 客户行业', 'crm_customer_industry', 0, 'CRM 客户所属行业', '1', to_date('2023-10-28 22:57:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-18 23:30:22', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (187, '客户等级', 'crm_customer_level', 0, 'CRM 客户等级', '1', to_date('2023-10-28 22:59:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 15:11:16', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (188, '客户来源', 'crm_customer_source', 0, 'CRM 客户来源', '1', to_date('2023-10-28 23:00:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 15:11:16', 'SYYYY-MM-DD HH24:MI:SS'), '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (600, 'Banner 位置', 'promotion_banner_position', 0, '', '1', to_date('2023-10-08 07:24:25', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 13:04:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (601, '社交类型', 'system_social_type', 0, '', '1', to_date('2023-11-04 13:03:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 13:03:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (604, '产品状态', 'crm_product_status', 0, '', '1', to_date('2023-10-30 21:47:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-30 21:48:45', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (605, 'CRM 数据权限的级别', 'crm_permission_level', 0, '', '1', to_date('2023-11-30 09:51:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-30 09:51:59', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (606, 'CRM 审批状态', 'crm_audit_status', 0, '', '1', to_date('2023-11-30 18:56:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-30 18:56:23', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (607, 'CRM 产品单位', 'crm_product_unit', 0, '', '1', to_date('2023-12-05 23:01:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 23:01:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (608, 'CRM 跟进方式', 'crm_follow_up_type', 0, '', '1', to_date('2024-01-15 20:48:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-01-15 20:48:05', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (609, '支付转账类型', 'pay_transfer_type', 0, '', '1', to_date('2023-10-28 16:27:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 16:27:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (610, '转账订单状态', 'pay_transfer_status', 0, '', '1', to_date('2023-10-28 16:18:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-28 16:18:32', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (611, 'ERP 库存明细的业务类型', 'erp_stock_record_biz_type', 0, 'ERP 库存明细的业务类型', '1', to_date('2024-02-05 18:07:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-05 18:07:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (612, 'ERP 审批状态', 'erp_audit_status', 0, '', '1', to_date('2024-02-06 00:00:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-06 00:00:07', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (613, 'BPM 监听器类型', 'bpm_process_listener_type', 0, '', '1', to_date('2024-03-23 12:52:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-09 15:54:28', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (615, 'BPM 监听器值类型', 'bpm_process_listener_value_type', 0, '', '1', to_date('2024-03-23 13:00:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-23 13:00:31', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (616, '时间间隔', 'date_interval', 0, '', '1', to_date('2024-03-29 22:50:09', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-29 22:50:09', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (619, 'CRM 商机结束状态类型', 'crm_business_end_status_type', 0, '', '1', to_date('2024-04-13 23:23:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-13 23:23:00', 'SYYYY-MM-DD HH24:MI:SS'), '0', to_date('1970-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_dict_type_seq + START WITH 620; + +-- ---------------------------- +-- Table structure for system_login_log +-- ---------------------------- +CREATE TABLE system_login_log +( + id number NOT NULL, + log_type number NOT NULL, + trace_id varchar2(64) DEFAULT '' NULL, + user_id number DEFAULT 0 NOT NULL, + user_type smallint DEFAULT 0 NOT NULL, + username varchar2(50) DEFAULT '' NULL, + result smallint NOT NULL, + user_ip varchar2(50) NOT NULL, + user_agent varchar2(512) NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_login_log + ADD CONSTRAINT pk_system_login_log PRIMARY KEY (id); + +COMMENT ON COLUMN system_login_log.id IS '访问ID'; +COMMENT ON COLUMN system_login_log.log_type IS '日志类型'; +COMMENT ON COLUMN system_login_log.trace_id IS '链路追踪编号'; +COMMENT ON COLUMN system_login_log.user_id IS '用户编号'; +COMMENT ON COLUMN system_login_log.user_type IS '用户类型'; +COMMENT ON COLUMN system_login_log.username IS '用户账号'; +COMMENT ON COLUMN system_login_log.result IS '登陆结果'; +COMMENT ON COLUMN system_login_log.user_ip IS '用户 IP'; +COMMENT ON COLUMN system_login_log.user_agent IS '浏览器 UA'; +COMMENT ON COLUMN system_login_log.creator IS '创建者'; +COMMENT ON COLUMN system_login_log.create_time IS '创建时间'; +COMMENT ON COLUMN system_login_log.updater IS '更新者'; +COMMENT ON COLUMN system_login_log.update_time IS '更新时间'; +COMMENT ON COLUMN system_login_log.deleted IS '是否删除'; +COMMENT ON COLUMN system_login_log.tenant_id IS '租户编号'; +COMMENT ON TABLE system_login_log IS '系统访问记录'; + +CREATE SEQUENCE system_login_log_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for system_mail_account +-- ---------------------------- +CREATE TABLE system_mail_account +( + id number NOT NULL, + mail varchar2(255) NOT NULL, + username varchar2(255) NOT NULL, + password varchar2(255) NOT NULL, + host varchar2(255) NOT NULL, + port number NOT NULL, + ssl_enable number(1, 0) DEFAULT '0' NOT NULL, + starttls_enable number(1, 0) DEFAULT '0' NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE system_mail_account + ADD CONSTRAINT pk_system_mail_account PRIMARY KEY (id); + +COMMENT ON COLUMN system_mail_account.id IS '主键'; +COMMENT ON COLUMN system_mail_account.mail IS '邮箱'; +COMMENT ON COLUMN system_mail_account.username IS '用户名'; +COMMENT ON COLUMN system_mail_account.password IS '密码'; +COMMENT ON COLUMN system_mail_account.host IS 'SMTP 服务器域名'; +COMMENT ON COLUMN system_mail_account.port IS 'SMTP 服务器端口'; +COMMENT ON COLUMN system_mail_account.ssl_enable IS '是否开启 SSL'; +COMMENT ON COLUMN system_mail_account.starttls_enable IS '是否开启 STARTTLS'; +COMMENT ON COLUMN system_mail_account.creator IS '创建者'; +COMMENT ON COLUMN system_mail_account.create_time IS '创建时间'; +COMMENT ON COLUMN system_mail_account.updater IS '更新者'; +COMMENT ON COLUMN system_mail_account.update_time IS '更新时间'; +COMMENT ON COLUMN system_mail_account.deleted IS '是否删除'; +COMMENT ON TABLE system_mail_account IS '邮箱账号表'; + +-- ---------------------------- +-- Records of system_mail_account +-- ---------------------------- +-- @formatter:off +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (1, '7684413@qq.com', '7684413@qq.com', '1234576', '127.0.0.1', 8080, '0', '0', '1', to_date('2023-01-25 17:39:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 09:13:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (2, 'ydym_test@163.com', 'ydym_test@163.com', 'WBZTEINMIFVRYSOE', 'smtp.163.com', 465, '1', '0', '1', to_date('2023-01-26 01:26:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-04-12 22:39:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (3, '76854114@qq.com', '3335', '11234', 'yunai1.cn', 466, '0', '0', '1', to_date('2023-01-27 15:06:38', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-27 07:08:36', 'SYYYY-MM-DD HH24:MI:SS'), '1'); +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (4, '7685413x@qq.com', '2', '3', '4', 5, '1', '0', '1', to_date('2023-04-12 23:05:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-04-12 15:05:11', 'SYYYY-MM-DD HH24:MI:SS'), '1'); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_mail_account_seq + START WITH 5; + +-- ---------------------------- +-- Table structure for system_mail_log +-- ---------------------------- +CREATE TABLE system_mail_log +( + id number NOT NULL, + user_id number DEFAULT NULL NULL, + user_type smallint DEFAULT NULL NULL, + to_mail varchar2(255) NOT NULL, + account_id number NOT NULL, + from_mail varchar2(255) NOT NULL, + template_id number NOT NULL, + template_code varchar2(63) NOT NULL, + template_nickname varchar2(255) DEFAULT NULL NULL, + template_title varchar2(255) NOT NULL, + template_content varchar2(4000) NOT NULL, + template_params varchar2(255) NOT NULL, + send_status smallint DEFAULT 0 NOT NULL, + send_time date DEFAULT NULL NULL, + send_message_id varchar2(255) DEFAULT NULL NULL, + send_exception varchar2(4000) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE system_mail_log + ADD CONSTRAINT pk_system_mail_log PRIMARY KEY (id); + +COMMENT ON COLUMN system_mail_log.id IS '编号'; +COMMENT ON COLUMN system_mail_log.user_id IS '用户编号'; +COMMENT ON COLUMN system_mail_log.user_type IS '用户类型'; +COMMENT ON COLUMN system_mail_log.to_mail IS '接收邮箱地址'; +COMMENT ON COLUMN system_mail_log.account_id IS '邮箱账号编号'; +COMMENT ON COLUMN system_mail_log.from_mail IS '发送邮箱地址'; +COMMENT ON COLUMN system_mail_log.template_id IS '模板编号'; +COMMENT ON COLUMN system_mail_log.template_code IS '模板编码'; +COMMENT ON COLUMN system_mail_log.template_nickname IS '模版发送人名称'; +COMMENT ON COLUMN system_mail_log.template_title IS '邮件标题'; +COMMENT ON COLUMN system_mail_log.template_content IS '邮件内容'; +COMMENT ON COLUMN system_mail_log.template_params IS '邮件参数'; +COMMENT ON COLUMN system_mail_log.send_status IS '发送状态'; +COMMENT ON COLUMN system_mail_log.send_time IS '发送时间'; +COMMENT ON COLUMN system_mail_log.send_message_id IS '发送返回的消息 ID'; +COMMENT ON COLUMN system_mail_log.send_exception IS '发送异常'; +COMMENT ON COLUMN system_mail_log.creator IS '创建者'; +COMMENT ON COLUMN system_mail_log.create_time IS '创建时间'; +COMMENT ON COLUMN system_mail_log.updater IS '更新者'; +COMMENT ON COLUMN system_mail_log.update_time IS '更新时间'; +COMMENT ON COLUMN system_mail_log.deleted IS '是否删除'; +COMMENT ON TABLE system_mail_log IS '邮件日志表'; + +CREATE SEQUENCE system_mail_log_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for system_mail_template +-- ---------------------------- +CREATE TABLE system_mail_template +( + id number NOT NULL, + name varchar2(63) NOT NULL, + code varchar2(63) NOT NULL, + account_id number NOT NULL, + nickname varchar2(255) DEFAULT NULL NULL, + title varchar2(255) NOT NULL, + content varchar2(4000) NOT NULL, + params varchar2(255) NOT NULL, + status smallint NOT NULL, + remark varchar2(255) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE system_mail_template + ADD CONSTRAINT pk_system_mail_template PRIMARY KEY (id); + +COMMENT ON COLUMN system_mail_template.id IS '编号'; +COMMENT ON COLUMN system_mail_template.name IS '模板名称'; +COMMENT ON COLUMN system_mail_template.code IS '模板编码'; +COMMENT ON COLUMN system_mail_template.account_id IS '发送的邮箱账号编号'; +COMMENT ON COLUMN system_mail_template.nickname IS '发送人名称'; +COMMENT ON COLUMN system_mail_template.title IS '模板标题'; +COMMENT ON COLUMN system_mail_template.content IS '模板内容'; +COMMENT ON COLUMN system_mail_template.params IS '参数数组'; +COMMENT ON COLUMN system_mail_template.status IS '开启状态'; +COMMENT ON COLUMN system_mail_template.remark IS '备注'; +COMMENT ON COLUMN system_mail_template.creator IS '创建者'; +COMMENT ON COLUMN system_mail_template.create_time IS '创建时间'; +COMMENT ON COLUMN system_mail_template.updater IS '更新者'; +COMMENT ON COLUMN system_mail_template.update_time IS '更新时间'; +COMMENT ON COLUMN system_mail_template.deleted IS '是否删除'; +COMMENT ON TABLE system_mail_template IS '邮件模版表'; + +-- ---------------------------- +-- Records of system_mail_template +-- ---------------------------- +-- @formatter:off +INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (13, '后台用户短信登录', 'admin-sms-login', 1, '奥特曼', '你猜我猜', '

    您的验证码是{code},名字是{name}

    ', '["code","name"]', 0, '3', '1', to_date('2021-10-11 08:10:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 19:51:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (14, '测试模版', 'test_01', 2, '芋艿', '一个标题', '

    你是 {key01} 吗?


    是的话,赶紧 {key02} 一下!

    ', '["key01","key02"]', 0, NULL, '1', to_date('2023-01-26 01:27:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-27 10:32:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (15, '3', '2', 2, '7', '4', '

    45

    ', '[]', 1, '80', '1', to_date('2023-01-27 15:50:35', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-27 16:34:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_mail_template_seq + START WITH 16; + +-- ---------------------------- +-- Table structure for system_menu +-- ---------------------------- +CREATE TABLE system_menu +( + id number NOT NULL, + name varchar2(50) NOT NULL, + permission varchar2(100) DEFAULT '' NULL, + type smallint NOT NULL, + sort number DEFAULT 0 NOT NULL, + parent_id number DEFAULT 0 NOT NULL, + path varchar2(200) DEFAULT '' NULL, + icon varchar2(100) DEFAULT '#' NULL, + component varchar2(255) DEFAULT NULL NULL, + component_name varchar2(255) DEFAULT NULL NULL, + status smallint DEFAULT 0 NOT NULL, + visible number(1, 0) DEFAULT '1' NOT NULL, + keep_alive number(1, 0) DEFAULT '1' NOT NULL, + always_show number(1, 0) DEFAULT '1' NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE system_menu + ADD CONSTRAINT pk_system_menu PRIMARY KEY (id); + +COMMENT ON COLUMN system_menu.id IS '菜单ID'; +COMMENT ON COLUMN system_menu.name IS '菜单名称'; +COMMENT ON COLUMN system_menu.permission IS '权限标识'; +COMMENT ON COLUMN system_menu.type IS '菜单类型'; +COMMENT ON COLUMN system_menu.sort IS '显示顺序'; +COMMENT ON COLUMN system_menu.parent_id IS '父菜单ID'; +COMMENT ON COLUMN system_menu.path IS '路由地址'; +COMMENT ON COLUMN system_menu.icon IS '菜单图标'; +COMMENT ON COLUMN system_menu.component IS '组件路径'; +COMMENT ON COLUMN system_menu.component_name IS '组件名'; +COMMENT ON COLUMN system_menu.status IS '菜单状态'; +COMMENT ON COLUMN system_menu.visible IS '是否可见'; +COMMENT ON COLUMN system_menu.keep_alive IS '是否缓存'; +COMMENT ON COLUMN system_menu.always_show IS '是否总是显示'; +COMMENT ON COLUMN system_menu.creator IS '创建者'; +COMMENT ON COLUMN system_menu.create_time IS '创建时间'; +COMMENT ON COLUMN system_menu.updater IS '更新者'; +COMMENT ON COLUMN system_menu.update_time IS '更新时间'; +COMMENT ON COLUMN system_menu.deleted IS '是否删除'; +COMMENT ON TABLE system_menu IS '菜单权限表'; + +-- ---------------------------- +-- Records of system_menu +-- ---------------------------- +-- @formatter:off +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1, '系统管理', '', 1, 10, 0, '/system', 'ep:tools', NULL, NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:04:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2, '基础设施', '', 1, 20, 0, '/infra', 'ep:monitor', NULL, NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-01 08:28:40', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5, 'OA 示例', '', 1, 40, 1185, 'oa', 'fa:road', NULL, NULL, 0, '1', '1', '1', 'admin', to_date('2021-09-20 16:26:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:38:13', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (100, '用户管理', 'system:user:list', 2, 1, 1, 'user', 'ep:avatar', 'system/user/index', 'SystemUser', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:02:04', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (101, '角色管理', '', 2, 2, 1, 'role', 'ep:user', 'system/role/index', 'SystemRole', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:03:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (102, '菜单管理', '', 2, 3, 1, 'menu', 'ep:menu', 'system/menu/index', 'SystemMenu', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:03:50', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (103, '部门管理', '', 2, 4, 1, 'dept', 'fa:address-card', 'system/dept/index', 'SystemDept', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:06:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (104, '岗位管理', '', 2, 5, 1, 'post', 'fa:address-book-o', 'system/post/index', 'SystemPost', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:06:39', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (105, '字典管理', '', 2, 6, 1, 'dict', 'ep:collection', 'system/dict/index', 'SystemDictType', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:07:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (106, '配置管理', '', 2, 8, 2, 'config', 'fa:connectdevelop', 'infra/config/index', 'InfraConfig', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-23 00:02:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (107, '通知公告', '', 2, 4, 2739, 'notice', 'ep:takeaway-box', 'system/notice/index', 'SystemNotice', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-22 23:56:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (108, '审计日志', '', 1, 9, 1, 'log', 'ep:document-copy', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:08:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (109, '令牌管理', '', 2, 2, 1261, 'token', 'fa:key', 'system/oauth2/token/index', 'SystemTokenClient', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:13:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (110, '定时任务', '', 2, 7, 2, 'job', 'fa-solid:tasks', 'infra/job/index', 'InfraJob', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:57:36', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (111, 'MySQL 监控', '', 2, 1, 2740, 'druid', 'fa-solid:box', 'infra/druid/index', 'InfraDruid', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-23 00:05:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (112, 'Java 监控', '', 2, 3, 2740, 'admin-server', 'ep:coffee-cup', 'infra/server/index', 'InfraAdminServer', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-23 00:06:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (113, 'Redis 监控', '', 2, 2, 2740, 'redis', 'fa:reddit-square', 'infra/redis/index', 'InfraRedis', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-23 00:06:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (114, '表单构建', 'infra:build:list', 2, 2, 2, 'build', 'fa:wpforms', 'infra/build/index', 'InfraBuild', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:51:35', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (115, '代码生成', 'infra:codegen:query', 2, 1, 2, 'codegen', 'ep:document-copy', 'infra/codegen/index', 'InfraCodegen', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:51:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (116, 'API 接口', 'infra:swagger:list', 2, 3, 2, 'swagger', 'fa:fighter-jet', 'infra/swagger/index', 'InfraSwagger', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-23 00:01:24', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (500, '操作日志', '', 2, 1, 108, 'operate-log', 'ep:position', 'system/operatelog/index', 'SystemOperateLog', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:09:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (501, '登录日志', '', 2, 2, 108, 'login-log', 'ep:promotion', 'system/loginlog/index', 'SystemLoginLog', 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:10:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1001, '用户查询', 'system:user:query', 3, 1, 100, '', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1002, '用户新增', 'system:user:create', 3, 2, 100, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1003, '用户修改', 'system:user:update', 3, 3, 100, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1004, '用户删除', 'system:user:delete', 3, 4, 100, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1005, '用户导出', 'system:user:export', 3, 5, 100, '', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1006, '用户导入', 'system:user:import', 3, 6, 100, '', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1007, '重置密码', 'system:user:update-password', 3, 7, 100, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1008, '角色查询', 'system:role:query', 3, 1, 101, '', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1009, '角色新增', 'system:role:create', 3, 2, 101, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1010, '角色修改', 'system:role:update', 3, 3, 101, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1011, '角色删除', 'system:role:delete', 3, 4, 101, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1012, '角色导出', 'system:role:export', 3, 5, 101, '', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1013, '菜单查询', 'system:menu:query', 3, 1, 102, '', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1014, '菜单新增', 'system:menu:create', 3, 2, 102, '', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1015, '菜单修改', 'system:menu:update', 3, 3, 102, '', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1016, '菜单删除', 'system:menu:delete', 3, 4, 102, '', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1017, '部门查询', 'system:dept:query', 3, 1, 103, '', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1018, '部门新增', 'system:dept:create', 3, 2, 103, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1019, '部门修改', 'system:dept:update', 3, 3, 103, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1020, '部门删除', 'system:dept:delete', 3, 4, 103, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1021, '岗位查询', 'system:post:query', 3, 1, 104, '', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1022, '岗位新增', 'system:post:create', 3, 2, 104, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1023, '岗位修改', 'system:post:update', 3, 3, 104, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1024, '岗位删除', 'system:post:delete', 3, 4, 104, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1025, '岗位导出', 'system:post:export', 3, 5, 104, '', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1026, '字典查询', 'system:dict:query', 3, 1, 105, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1027, '字典新增', 'system:dict:create', 3, 2, 105, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1028, '字典修改', 'system:dict:update', 3, 3, 105, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1029, '字典删除', 'system:dict:delete', 3, 4, 105, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1030, '字典导出', 'system:dict:export', 3, 5, 105, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1031, '配置查询', 'infra:config:query', 3, 1, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1032, '配置新增', 'infra:config:create', 3, 2, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1033, '配置修改', 'infra:config:update', 3, 3, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1034, '配置删除', 'infra:config:delete', 3, 4, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1035, '配置导出', 'infra:config:export', 3, 5, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1036, '公告查询', 'system:notice:query', 3, 1, 107, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1037, '公告新增', 'system:notice:create', 3, 2, 107, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1038, '公告修改', 'system:notice:update', 3, 3, 107, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1039, '公告删除', 'system:notice:delete', 3, 4, 107, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1040, '操作查询', 'system:operate-log:query', 3, 1, 500, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1042, '日志导出', 'system:operate-log:export', 3, 2, 500, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1043, '登录查询', 'system:login-log:query', 3, 1, 501, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1045, '日志导出', 'system:login-log:export', 3, 3, 501, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1046, '令牌列表', 'system:oauth2-token:page', 3, 1, 109, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-09 23:54:42', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1048, '令牌删除', 'system:oauth2-token:delete', 3, 2, 109, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-09 23:54:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1050, '任务新增', 'infra:job:create', 3, 2, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1051, '任务修改', 'infra:job:update', 3, 3, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1052, '任务删除', 'infra:job:delete', 3, 4, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1053, '状态修改', 'infra:job:update', 3, 5, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1054, '任务导出', 'infra:job:export', 3, 7, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1056, '生成修改', 'infra:codegen:update', 3, 2, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1057, '生成删除', 'infra:codegen:delete', 3, 3, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1058, '导入代码', 'infra:codegen:create', 3, 2, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1059, '预览代码', 'infra:codegen:preview', 3, 4, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1060, '生成代码', 'infra:codegen:download', 3, 5, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1063, '设置角色菜单权限', 'system:permission:assign-role-menu', 3, 6, 101, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-01-06 17:53:44', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1064, '设置角色数据权限', 'system:permission:assign-role-data-scope', 3, 7, 101, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-01-06 17:56:31', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1065, '设置用户角色', 'system:permission:assign-user-role', 3, 8, 101, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-01-07 10:23:28', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1066, '获得 Redis 监控信息', 'infra:redis:get-monitor-info', 3, 1, 113, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-01-26 01:02:31', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1067, '获得 Redis Key 列表', 'infra:redis:get-key-list', 3, 2, 113, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-01-26 01:02:52', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1070, '代码生成案例', '', 1, 1, 2, 'demo', 'ep:aim', 'infra/testDemo/index', NULL, 0, '1', '1', '1', '', to_date('2021-02-06 12:42:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-15 23:45:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1075, '任务触发', 'infra:job:trigger', 3, 8, 110, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-02-07 13:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1077, '链路追踪', '', 2, 4, 2740, 'skywalking', 'fa:eye', 'infra/skywalking/index', 'InfraSkyWalking', 0, '1', '1', '1', '', to_date('2021-02-08 20:41:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-23 00:07:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1078, '访问日志', '', 2, 1, 1083, 'api-access-log', 'ep:place', 'infra/apiAccessLog/index', 'InfraApiAccessLog', 0, '1', '1', '1', '', to_date('2021-02-26 01:32:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:54:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1082, '日志导出', 'infra:api-access-log:export', 3, 2, 1078, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-02-26 01:32:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1083, 'API 日志', '', 2, 4, 2, 'log', 'fa:tasks', NULL, NULL, 0, '1', '1', '1', '', to_date('2021-02-26 02:18:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-22 23:58:36', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1084, '错误日志', 'infra:api-error-log:query', 2, 2, 1083, 'api-error-log', 'ep:warning-filled', 'infra/apiErrorLog/index', 'InfraApiErrorLog', 0, '1', '1', '1', '', to_date('2021-02-26 07:53:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:55:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1085, '日志处理', 'infra:api-error-log:update-status', 3, 2, 1084, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-02-26 07:53:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1086, '日志导出', 'infra:api-error-log:export', 3, 3, 1084, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-02-26 07:53:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1087, '任务查询', 'infra:job:query', 3, 1, 110, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2021-03-10 01:26:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1088, '日志查询', 'infra:api-access-log:query', 3, 1, 1078, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2021-03-10 01:28:04', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1089, '日志查询', 'infra:api-error-log:query', 3, 1, 1084, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2021-03-10 01:29:09', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1090, '文件列表', '', 2, 5, 1243, 'file', 'ep:upload-filled', 'infra/file/index', 'InfraFile', 0, '1', '1', '1', '', to_date('2021-03-12 20:16:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:53:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1091, '文件查询', 'infra:file:query', 3, 1, 1090, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-03-12 20:16:20', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1092, '文件删除', 'infra:file:delete', 3, 4, 1090, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-03-12 20:16:20', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1093, '短信管理', '', 1, 1, 2739, 'sms', 'ep:message', NULL, NULL, 0, '1', '1', '1', '1', to_date('2021-04-05 01:10:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-22 23:56:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1094, '短信渠道', '', 2, 0, 1093, 'sms-channel', 'fa:stack-exchange', 'system/sms/channel/index', 'SystemSmsChannel', 0, '1', '1', '1', '', to_date('2021-04-01 11:07:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:15:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1095, '短信渠道查询', 'system:sms-channel:query', 3, 1, 1094, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-04-01 11:07:15', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1096, '短信渠道创建', 'system:sms-channel:create', 3, 2, 1094, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-04-01 11:07:15', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1097, '短信渠道更新', 'system:sms-channel:update', 3, 3, 1094, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-04-01 11:07:15', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1098, '短信渠道删除', 'system:sms-channel:delete', 3, 4, 1094, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-04-01 11:07:15', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1100, '短信模板', '', 2, 1, 1093, 'sms-template', 'ep:connection', 'system/sms/template/index', 'SystemSmsTemplate', 0, '1', '1', '1', '', to_date('2021-04-01 17:35:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:16:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1101, '短信模板查询', 'system:sms-template:query', 3, 1, 1100, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-04-01 17:35:17', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1102, '短信模板创建', 'system:sms-template:create', 3, 2, 1100, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-04-01 17:35:17', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1103, '短信模板更新', 'system:sms-template:update', 3, 3, 1100, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-04-01 17:35:17', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1104, '短信模板删除', 'system:sms-template:delete', 3, 4, 1100, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-04-01 17:35:17', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1105, '短信模板导出', 'system:sms-template:export', 3, 5, 1100, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-04-01 17:35:17', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1106, '发送测试短信', 'system:sms-template:send-sms', 3, 6, 1100, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2021-04-11 00:26:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1107, '短信日志', '', 2, 2, 1093, 'sms-log', 'fa:edit', 'system/sms/log/index', 'SystemSmsLog', 0, '1', '1', '1', '', to_date('2021-04-11 08:37:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:49:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1108, '短信日志查询', 'system:sms-log:query', 3, 1, 1107, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-04-11 08:37:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1109, '短信日志导出', 'system:sms-log:export', 3, 5, 1107, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-04-11 08:37:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1117, '支付管理', '', 1, 30, 0, '/pay', 'ep:money', NULL, NULL, 0, '1', '1', '1', '1', to_date('2021-12-25 16:43:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:58:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1118, '请假查询', '', 2, 0, 5, 'leave', 'fa:leanpub', 'bpm/oa/leave/index', 'BpmOALeave', 0, '1', '1', '1', '', to_date('2021-09-20 08:51:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:38:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1119, '请假申请查询', 'bpm:oa-leave:query', 3, 1, 1118, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-09-20 08:51:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1120, '请假申请创建', 'bpm:oa-leave:create', 3, 2, 1118, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-09-20 08:51:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1126, '应用信息', '', 2, 1, 1117, 'app', 'fa:apple', 'pay/app/index', 'PayApp', 0, '1', '1', '1', '', to_date('2021-11-10 01:13:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:59:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1127, '支付应用信息查询', 'pay:app:query', 3, 1, 1126, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-11-10 01:13:31', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1128, '支付应用信息创建', 'pay:app:create', 3, 2, 1126, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-11-10 01:13:31', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1129, '支付应用信息更新', 'pay:app:update', 3, 3, 1126, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-11-10 01:13:31', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1130, '支付应用信息删除', 'pay:app:delete', 3, 4, 1126, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-11-10 01:13:31', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1132, '秘钥解析', 'pay:channel:parsing', 3, 6, 1129, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2021-11-08 15:15:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1133, '支付商户信息查询', 'pay:merchant:query', 3, 1, 1132, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-11-10 01:13:41', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1134, '支付商户信息创建', 'pay:merchant:create', 3, 2, 1132, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-11-10 01:13:41', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1135, '支付商户信息更新', 'pay:merchant:update', 3, 3, 1132, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-11-10 01:13:41', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1136, '支付商户信息删除', 'pay:merchant:delete', 3, 4, 1132, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-11-10 01:13:41', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1137, '支付商户信息导出', 'pay:merchant:export', 3, 5, 1132, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-11-10 01:13:41', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1138, '租户列表', '', 2, 0, 1224, 'list', 'ep:house', 'system/tenant/index', 'SystemTenant', 0, '1', '1', '1', '', to_date('2021-12-14 12:31:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:01:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1139, '租户查询', 'system:tenant:query', 3, 1, 1138, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-14 12:31:44', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1140, '租户创建', 'system:tenant:create', 3, 2, 1138, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-14 12:31:44', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1141, '租户更新', 'system:tenant:update', 3, 3, 1138, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-14 12:31:44', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1142, '租户删除', 'system:tenant:delete', 3, 4, 1138, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-14 12:31:44', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1143, '租户导出', 'system:tenant:export', 3, 5, 1138, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-14 12:31:44', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1150, '秘钥解析', '', 3, 6, 1129, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2021-11-08 15:15:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1161, '退款订单', '', 2, 3, 1117, 'refund', 'fa:registered', 'pay/refund/index', 'PayRefund', 0, '1', '1', '1', '', to_date('2021-12-25 08:29:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:59:20', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1162, '退款订单查询', 'pay:refund:query', 3, 1, 1161, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-25 08:29:07', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1163, '退款订单创建', 'pay:refund:create', 3, 2, 1161, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-25 08:29:07', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1164, '退款订单更新', 'pay:refund:update', 3, 3, 1161, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-25 08:29:07', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1165, '退款订单删除', 'pay:refund:delete', 3, 4, 1161, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-25 08:29:07', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1166, '退款订单导出', 'pay:refund:export', 3, 5, 1161, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-25 08:29:07', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1173, '支付订单', '', 2, 2, 1117, 'order', 'fa:cc-paypal', 'pay/order/index', 'PayOrder', 0, '1', '1', '1', '', to_date('2021-12-25 08:49:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:59:43', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1174, '支付订单查询', 'pay:order:query', 3, 1, 1173, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-25 08:49:43', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1175, '支付订单创建', 'pay:order:create', 3, 2, 1173, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-25 08:49:43', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1176, '支付订单更新', 'pay:order:update', 3, 3, 1173, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-25 08:49:43', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1177, '支付订单删除', 'pay:order:delete', 3, 4, 1173, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-25 08:49:43', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1178, '支付订单导出', 'pay:order:export', 3, 5, 1173, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-25 08:49:43', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1185, '工作流程', '', 1, 50, 0, '/bpm', 'fa:medium', NULL, NULL, 0, '1', '1', '1', '1', to_date('2021-12-30 20:26:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:43:43', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1186, '流程管理', '', 1, 10, 1185, 'manager', 'fa:dedent', NULL, NULL, 0, '1', '1', '1', '1', to_date('2021-12-30 20:28:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:36:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1187, '流程表单', '', 2, 2, 1186, 'form', 'fa:hdd-o', 'bpm/form/index', 'BpmForm', 0, '1', '1', '1', '', to_date('2021-12-30 12:38:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-19 12:25:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1188, '表单查询', 'bpm:form:query', 3, 1, 1187, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-30 12:38:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1189, '表单创建', 'bpm:form:create', 3, 2, 1187, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-30 12:38:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1190, '表单更新', 'bpm:form:update', 3, 3, 1187, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-30 12:38:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1191, '表单删除', 'bpm:form:delete', 3, 4, 1187, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-30 12:38:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1192, '表单导出', 'bpm:form:export', 3, 5, 1187, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2021-12-30 12:38:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1193, '流程模型', '', 2, 1, 1186, 'model', 'fa-solid:project-diagram', 'bpm/model/index', 'BpmModel', 0, '1', '1', '1', '1', to_date('2021-12-31 23:24:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-19 12:25:19', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1194, '模型查询', 'bpm:model:query', 3, 1, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-01-03 19:01:10', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1195, '模型创建', 'bpm:model:create', 3, 2, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-01-03 19:01:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1196, '模型导入', 'bpm:model:import', 3, 3, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-01-03 19:01:35', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1197, '模型更新', 'bpm:model:update', 3, 4, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-01-03 19:02:28', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1198, '模型删除', 'bpm:model:delete', 3, 5, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-01-03 19:02:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1199, '模型发布', 'bpm:model:deploy', 3, 6, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-01-03 19:03:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1200, '审批中心', '', 2, 20, 1185, 'task', 'fa:tasks', NULL, NULL, 0, '1', '1', '1', '1', to_date('2022-01-07 23:51:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-21 00:33:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1201, '我的流程', '', 2, 1, 1200, 'my', 'fa-solid:book', 'bpm/processInstance/index', 'BpmProcessInstanceMy', 0, '1', '1', '1', '', to_date('2022-01-07 15:53:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-21 23:52:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1202, '流程实例的查询', 'bpm:process-instance:query', 3, 1, 1201, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-01-07 15:53:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1207, '待办任务', '', 2, 10, 1200, 'todo', 'fa:slack', 'bpm/task/todo/index', 'BpmTodoTask', 0, '1', '1', '1', '1', to_date('2022-01-08 10:33:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:37:39', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1208, '已办任务', '', 2, 20, 1200, 'done', 'fa:delicious', 'bpm/task/done/index', 'BpmDoneTask', 0, '1', '1', '1', '1', to_date('2022-01-08 10:34:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:37:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1209, '用户分组', '', 2, 4, 1186, 'user-group', 'fa:user-secret', 'bpm/group/index', 'BpmUserGroup', 0, '1', '1', '1', '', to_date('2022-01-14 02:14:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-21 23:55:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1210, '用户组查询', 'bpm:user-group:query', 3, 1, 1209, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-01-14 02:14:20', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1211, '用户组创建', 'bpm:user-group:create', 3, 2, 1209, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-01-14 02:14:20', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1212, '用户组更新', 'bpm:user-group:update', 3, 3, 1209, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-01-14 02:14:20', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1213, '用户组删除', 'bpm:user-group:delete', 3, 4, 1209, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-01-14 02:14:20', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1215, '流程定义查询', 'bpm:process-definition:query', 3, 10, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-01-23 00:21:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1216, '流程任务分配规则查询', 'bpm:task-assign-rule:query', 3, 20, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-01-23 00:26:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1217, '流程任务分配规则创建', 'bpm:task-assign-rule:create', 3, 21, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-01-23 00:28:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1218, '流程任务分配规则更新', 'bpm:task-assign-rule:update', 3, 22, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-01-23 00:28:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1219, '流程实例的创建', 'bpm:process-instance:create', 3, 2, 1201, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-01-23 00:36:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1220, '流程实例的取消', 'bpm:process-instance:cancel', 3, 3, 1201, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-01-23 00:36:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1221, '流程任务的查询', 'bpm:task:query', 3, 1, 1207, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-01-23 00:38:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1222, '流程任务的更新', 'bpm:task:update', 3, 2, 1207, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-01-23 00:39:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1224, '租户管理', '', 2, 0, 1, 'tenant', 'fa-solid:house-user', NULL, NULL, 0, '1', '1', '1', '1', to_date('2022-02-20 01:41:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 00:59:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1225, '租户套餐', '', 2, 0, 1224, 'package', 'fa:bars', 'system/tenantPackage/index', 'SystemTenantPackage', 0, '1', '1', '1', '', to_date('2022-02-19 17:44:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:01:43', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1226, '租户套餐查询', 'system:tenant-package:query', 3, 1, 1225, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-02-19 17:44:06', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1227, '租户套餐创建', 'system:tenant-package:create', 3, 2, 1225, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-02-19 17:44:06', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1228, '租户套餐更新', 'system:tenant-package:update', 3, 3, 1225, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-02-19 17:44:06', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1229, '租户套餐删除', 'system:tenant-package:delete', 3, 4, 1225, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-02-19 17:44:06', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1237, '文件配置', '', 2, 0, 1243, 'file-config', 'fa-solid:file-signature', 'infra/fileConfig/index', 'InfraFileConfig', 0, '1', '1', '1', '', to_date('2022-03-15 14:35:28', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:52:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1238, '文件配置查询', 'infra:file-config:query', 3, 1, 1237, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-03-15 14:35:28', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1239, '文件配置创建', 'infra:file-config:create', 3, 2, 1237, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-03-15 14:35:28', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1240, '文件配置更新', 'infra:file-config:update', 3, 3, 1237, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-03-15 14:35:28', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1241, '文件配置删除', 'infra:file-config:delete', 3, 4, 1237, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-03-15 14:35:28', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1242, '文件配置导出', 'infra:file-config:export', 3, 5, 1237, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-03-15 14:35:28', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-20 17:03:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1243, '文件管理', '', 2, 6, 2, 'file', 'ep:files', NULL, '', 0, '1', '1', '1', '1', to_date('2022-03-16 23:47:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-23 00:02:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1254, '作者动态', '', 1, 0, 0, 'https://www.iocoder.cn', 'ep:avatar', NULL, NULL, 0, '1', '1', '1', '1', to_date('2022-04-23 01:03:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-08 23:40:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1255, '数据源配置', '', 2, 1, 2, 'data-source-config', 'ep:data-analysis', 'infra/dataSourceConfig/index', 'InfraDataSourceConfig', 0, '1', '1', '1', '', to_date('2022-04-27 14:37:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:51:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1256, '数据源配置查询', 'infra:data-source-config:query', 3, 1, 1255, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-04-27 14:37:32', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-27 14:37:32', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1257, '数据源配置创建', 'infra:data-source-config:create', 3, 2, 1255, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-04-27 14:37:32', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-27 14:37:32', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1258, '数据源配置更新', 'infra:data-source-config:update', 3, 3, 1255, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-04-27 14:37:32', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-27 14:37:32', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1259, '数据源配置删除', 'infra:data-source-config:delete', 3, 4, 1255, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-04-27 14:37:32', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-27 14:37:32', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1260, '数据源配置导出', 'infra:data-source-config:export', 3, 5, 1255, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-04-27 14:37:32', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-04-27 14:37:32', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1261, 'OAuth 2.0', '', 2, 10, 1, 'oauth2', 'fa:dashcube', NULL, NULL, 0, '1', '1', '1', '1', to_date('2022-05-09 23:38:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:12:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1263, '应用管理', '', 2, 0, 1261, 'oauth2/application', 'fa:hdd-o', 'system/oauth2/client/index', 'SystemOAuth2Client', 0, '1', '1', '1', '', to_date('2022-05-10 16:26:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:13:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1264, '客户端查询', 'system:oauth2-client:query', 3, 1, 1263, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-05-10 16:26:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-11 00:31:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1265, '客户端创建', 'system:oauth2-client:create', 3, 2, 1263, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-05-10 16:26:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-11 00:31:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1266, '客户端更新', 'system:oauth2-client:update', 3, 3, 1263, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-05-10 16:26:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-11 00:31:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1267, '客户端删除', 'system:oauth2-client:delete', 3, 4, 1263, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-05-10 16:26:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-11 00:31:33', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1281, '报表管理', '', 2, 40, 0, '/report', 'ep:pie-chart', NULL, NULL, 0, '1', '1', '1', '1', to_date('2022-07-10 20:22:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:33:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1282, '报表设计器', '', 2, 1, 1281, 'jimu-report', 'ep:trend-charts', 'report/jmreport/index', 'GoView', 0, '1', '1', '1', '1', to_date('2022-07-10 20:26:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:33:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2000, '商品中心', '', 1, 60, 2362, 'product', 'fa:product-hunt', NULL, NULL, 0, '1', '1', '1', '', to_date('2022-07-29 15:53:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-30 11:52:36', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2002, '商品分类', '', 2, 2, 2000, 'category', 'ep:cellphone', 'mall/product/category/index', 'ProductCategory', 0, '1', '1', '1', '', to_date('2022-07-29 15:53:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-21 10:27:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2003, '分类查询', 'product:category:query', 3, 1, 2002, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-07-29 15:53:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-07-29 15:53:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2004, '分类创建', 'product:category:create', 3, 2, 2002, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-07-29 15:53:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-07-29 15:53:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2005, '分类更新', 'product:category:update', 3, 3, 2002, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-07-29 15:53:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-07-29 15:53:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2006, '分类删除', 'product:category:delete', 3, 4, 2002, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-07-29 15:53:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-07-29 15:53:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2008, '商品品牌', '', 2, 3, 2000, 'brand', 'ep:chicken', 'mall/product/brand/index', 'ProductBrand', 0, '1', '1', '1', '', to_date('2022-07-30 13:52:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-21 10:27:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2009, '品牌查询', 'product:brand:query', 3, 1, 2008, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-07-30 13:52:44', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-07-30 13:52:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2010, '品牌创建', 'product:brand:create', 3, 2, 2008, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-07-30 13:52:44', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-07-30 13:52:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2011, '品牌更新', 'product:brand:update', 3, 3, 2008, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-07-30 13:52:44', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-07-30 13:52:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2012, '品牌删除', 'product:brand:delete', 3, 4, 2008, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-07-30 13:52:44', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-07-30 13:52:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2014, '商品列表', '', 2, 1, 2000, 'spu', 'ep:apple', 'mall/product/spu/index', 'ProductSpu', 0, '1', '1', '1', '', to_date('2022-07-30 14:22:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-21 10:27:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2015, '商品查询', 'product:spu:query', 3, 1, 2014, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-07-30 14:22:58', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-07-30 14:22:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2016, '商品创建', 'product:spu:create', 3, 2, 2014, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-07-30 14:22:58', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-07-30 14:22:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2017, '商品更新', 'product:spu:update', 3, 3, 2014, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-07-30 14:22:58', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-07-30 14:22:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2018, '商品删除', 'product:spu:delete', 3, 4, 2014, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-07-30 14:22:58', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-07-30 14:22:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2019, '商品属性', '', 2, 4, 2000, 'property', 'ep:cold-drink', 'mall/product/property/index', 'ProductProperty', 0, '1', '1', '1', '', to_date('2022-08-01 14:55:35', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-26 11:01:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2020, '规格查询', 'product:property:query', 3, 1, 2019, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-08-01 14:55:35', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-12-12 20:26:24', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2021, '规格创建', 'product:property:create', 3, 2, 2019, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-08-01 14:55:35', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-12-12 20:26:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2022, '规格更新', 'product:property:update', 3, 3, 2019, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-08-01 14:55:35', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-12-12 20:26:33', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2023, '规格删除', 'product:property:delete', 3, 4, 2019, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-08-01 14:55:35', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-12-12 20:26:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2025, 'Banner', '', 2, 100, 2387, 'banner', 'fa:bandcamp', 'mall/promotion/banner/index', NULL, 0, '1', '1', '1', '', to_date('2022-08-01 14:56:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-24 20:20:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2026, 'Banner查询', 'promotion:banner:query', 3, 1, 2025, '', '', '', '', 0, '1', '1', '1', '', to_date('2022-08-01 14:56:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-24 20:20:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2027, 'Banner创建', 'promotion:banner:create', 3, 2, 2025, '', '', '', '', 0, '1', '1', '1', '', to_date('2022-08-01 14:56:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-24 20:20:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2028, 'Banner更新', 'promotion:banner:update', 3, 3, 2025, '', '', '', '', 0, '1', '1', '1', '', to_date('2022-08-01 14:56:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-24 20:20:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2029, 'Banner删除', 'promotion:banner:delete', 3, 4, 2025, '', '', '', '', 0, '1', '1', '1', '', to_date('2022-08-01 14:56:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-24 20:20:36', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2030, '营销中心', '', 1, 70, 2362, 'promotion', 'ep:present', NULL, NULL, 0, '1', '1', '1', '1', to_date('2022-10-31 21:25:09', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-30 11:54:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2032, '优惠劵列表', '', 2, 1, 2365, 'template', 'ep:discount', 'mall/promotion/coupon/template/index', 'PromotionCouponTemplate', 0, '1', '1', '1', '', to_date('2022-10-31 22:27:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-03 12:40:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2033, '优惠劵模板查询', 'promotion:coupon-template:query', 3, 1, 2032, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-10-31 22:27:14', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-10-31 22:27:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2034, '优惠劵模板创建', 'promotion:coupon-template:create', 3, 2, 2032, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-10-31 22:27:14', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-10-31 22:27:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2035, '优惠劵模板更新', 'promotion:coupon-template:update', 3, 3, 2032, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-10-31 22:27:14', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-10-31 22:27:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2036, '优惠劵模板删除', 'promotion:coupon-template:delete', 3, 4, 2032, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-10-31 22:27:14', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-10-31 22:27:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2038, '领取记录', '', 2, 2, 2365, 'list', 'ep:collection-tag', 'mall/promotion/coupon/index', 'PromotionCoupon', 0, '1', '1', '1', '', to_date('2022-11-03 23:21:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-03 12:55:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2039, '优惠劵查询', 'promotion:coupon:query', 3, 1, 2038, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-03 23:21:31', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-03 23:21:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2040, '优惠劵删除', 'promotion:coupon:delete', 3, 4, 2038, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-03 23:21:31', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-03 23:21:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2041, '满减送', '', 2, 10, 2390, 'reward-activity', 'ep:goblet-square-full', 'mall/promotion/rewardActivity/index', 'PromotionRewardActivity', 0, '1', '1', '1', '', to_date('2022-11-04 23:47:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-21 19:24:46', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2042, '满减送活动查询', 'promotion:reward-activity:query', 3, 1, 2041, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-04 23:47:49', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-04 23:47:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2043, '满减送活动创建', 'promotion:reward-activity:create', 3, 2, 2041, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-04 23:47:49', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-04 23:47:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2044, '满减送活动更新', 'promotion:reward-activity:update', 3, 3, 2041, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-04 23:47:50', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-04 23:47:50', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2045, '满减送活动删除', 'promotion:reward-activity:delete', 3, 4, 2041, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-04 23:47:50', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-04 23:47:50', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2046, '满减送活动关闭', 'promotion:reward-activity:close', 3, 5, 2041, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2022-11-05 10:42:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-11-05 10:42:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2047, '限时折扣', '', 2, 7, 2390, 'discount-activity', 'ep:timer', 'mall/promotion/discountActivity/index', 'PromotionDiscountActivity', 0, '1', '1', '1', '', to_date('2022-11-05 17:12:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-21 19:24:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2048, '限时折扣活动查询', 'promotion:discount-activity:query', 3, 1, 2047, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-05 17:12:15', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-05 17:12:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2049, '限时折扣活动创建', 'promotion:discount-activity:create', 3, 2, 2047, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-05 17:12:15', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-05 17:12:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2050, '限时折扣活动更新', 'promotion:discount-activity:update', 3, 3, 2047, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-05 17:12:16', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-05 17:12:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2051, '限时折扣活动删除', 'promotion:discount-activity:delete', 3, 4, 2047, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-05 17:12:16', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-05 17:12:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2052, '限时折扣活动关闭', 'promotion:discount-activity:close', 3, 5, 2047, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-05 17:12:16', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-05 17:12:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2059, '秒杀商品', '', 2, 2, 2209, 'activity', 'ep:basketball', 'mall/promotion/seckill/activity/index', 'PromotionSeckillActivity', 0, '1', '1', '1', '', to_date('2022-11-06 22:24:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-06-24 18:57:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2060, '秒杀活动查询', 'promotion:seckill-activity:query', 3, 1, 2059, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-06 22:24:49', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-06 22:24:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2061, '秒杀活动创建', 'promotion:seckill-activity:create', 3, 2, 2059, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-06 22:24:49', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-06 22:24:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2062, '秒杀活动更新', 'promotion:seckill-activity:update', 3, 3, 2059, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-06 22:24:49', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-06 22:24:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2063, '秒杀活动删除', 'promotion:seckill-activity:delete', 3, 4, 2059, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-06 22:24:49', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-11-06 22:24:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2066, '秒杀时段', '', 2, 1, 2209, 'config', 'ep:baseball', 'mall/promotion/seckill/config/index', 'PromotionSeckillConfig', 0, '1', '1', '1', '', to_date('2022-11-15 19:46:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-06-24 18:57:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2067, '秒杀时段查询', 'promotion:seckill-config:query', 3, 1, 2066, '', '', '', '', 0, '1', '1', '1', '', to_date('2022-11-15 19:46:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-06-24 17:50:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2068, '秒杀时段创建', 'promotion:seckill-config:create', 3, 2, 2066, '', '', '', '', 0, '1', '1', '1', '', to_date('2022-11-15 19:46:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-06-24 17:48:39', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2069, '秒杀时段更新', 'promotion:seckill-config:update', 3, 3, 2066, '', '', '', '', 0, '1', '1', '1', '', to_date('2022-11-15 19:46:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-06-24 17:50:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2070, '秒杀时段删除', 'promotion:seckill-config:delete', 3, 4, 2066, '', '', '', '', 0, '1', '1', '1', '', to_date('2022-11-15 19:46:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-06-24 17:50:32', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2072, '订单中心', '', 1, 65, 2362, 'trade', 'ep:eleme', NULL, NULL, 0, '1', '1', '1', '1', to_date('2022-11-19 18:57:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-30 11:54:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2073, '售后退款', '', 2, 2, 2072, 'after-sale', 'ep:refrigerator', 'mall/trade/afterSale/index', 'TradeAfterSale', 0, '1', '1', '1', '', to_date('2022-11-19 20:15:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-01 21:42:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2074, '售后查询', 'trade:after-sale:query', 3, 1, 2073, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-11-19 20:15:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 21:04:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2075, '秒杀活动关闭', 'promotion:seckill-activity:close', 3, 5, 2059, '', '', '', '', 0, '1', '1', '1', '1', to_date('2022-11-28 20:20:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-03 18:34:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2076, '订单列表', '', 2, 1, 2072, 'order', 'ep:list', 'mall/trade/order/index', 'TradeOrder', 0, '1', '1', '1', '1', to_date('2022-12-10 21:05:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-01 21:42:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2083, '地区管理', '', 2, 14, 1, 'area', 'fa:map-marker', 'system/area/index', 'SystemArea', 0, '1', '1', '1', '1', to_date('2022-12-23 17:35:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:50:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2084, '公众号管理', '', 1, 100, 0, '/mp', 'ep:compass', NULL, NULL, 0, '1', '1', '1', '1', to_date('2023-01-01 20:11:04', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:39:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2085, '账号管理', '', 2, 1, 2084, 'account', 'fa:user', 'mp/account/index', 'MpAccount', 0, '1', '1', '1', '1', to_date('2023-01-01 20:13:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:42:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2086, '新增账号', 'mp:account:create', 3, 1, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-01 20:21:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-07 17:32:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2087, '修改账号', 'mp:account:update', 3, 2, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-07 17:32:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-07 17:32:46', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2088, '查询账号', 'mp:account:query', 3, 0, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-07 17:33:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-07 17:33:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2089, '删除账号', 'mp:account:delete', 3, 3, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-07 17:33:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-07 17:33:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2090, '生成二维码', 'mp:account:qr-code', 3, 4, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-07 17:33:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-07 17:33:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2091, '清空 API 配额', 'mp:account:clear-quota', 3, 5, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-07 18:20:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-07 18:20:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2092, '数据统计', 'mp:statistics:query', 2, 2, 2084, 'statistics', 'ep:trend-charts', 'mp/statistics/index', 'MpStatistics', 0, '1', '1', '1', '1', to_date('2023-01-07 20:17:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:42:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2093, '标签管理', '', 2, 3, 2084, 'tag', 'ep:collection-tag', 'mp/tag/index', 'MpTag', 0, '1', '1', '1', '1', to_date('2023-01-08 11:37:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:42:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2094, '查询标签', 'mp:tag:query', 3, 0, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-08 11:59:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-08 11:59:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2095, '新增标签', 'mp:tag:create', 3, 1, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-08 11:59:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-08 11:59:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2096, '修改标签', 'mp:tag:update', 3, 2, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-08 11:59:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-08 11:59:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2097, '删除标签', 'mp:tag:delete', 3, 3, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-08 12:00:04', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-08 12:00:13', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2098, '同步标签', 'mp:tag:sync', 3, 4, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-08 12:00:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-08 12:00:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2099, '粉丝管理', '', 2, 4, 2084, 'user', 'fa:user-secret', 'mp/user/index', 'MpUser', 0, '1', '1', '1', '1', to_date('2023-01-08 16:51:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:42:39', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2100, '查询粉丝', 'mp:user:query', 3, 0, 2099, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-08 17:16:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-08 17:17:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2101, '修改粉丝', 'mp:user:update', 3, 1, 2099, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-08 17:17:11', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-08 17:17:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2102, '同步粉丝', 'mp:user:sync', 3, 2, 2099, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-08 17:17:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-08 17:17:40', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2103, '消息管理', '', 2, 5, 2084, 'message', 'ep:message', 'mp/message/index', 'MpMessage', 0, '1', '1', '1', '1', to_date('2023-01-08 18:44:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:42:50', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2104, '图文发表记录', '', 2, 10, 2084, 'free-publish', 'ep:edit-pen', 'mp/freePublish/index', 'MpFreePublish', 0, '1', '1', '1', '1', to_date('2023-01-13 00:30:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:43:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2105, '查询发布列表', 'mp:free-publish:query', 3, 1, 2104, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-13 07:19:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-13 07:19:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2106, '发布草稿', 'mp:free-publish:submit', 3, 2, 2104, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-13 07:19:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-13 07:19:46', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2107, '删除发布记录', 'mp:free-publish:delete', 3, 3, 2104, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-13 07:20:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-13 07:20:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2108, '图文草稿箱', '', 2, 9, 2084, 'draft', 'ep:edit', 'mp/draft/index', 'MpDraft', 0, '1', '1', '1', '1', to_date('2023-01-13 07:40:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:43:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2109, '新建草稿', 'mp:draft:create', 3, 1, 2108, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-13 23:15:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-13 23:15:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2110, '修改草稿', 'mp:draft:update', 3, 2, 2108, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-14 10:08:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-14 10:08:47', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2111, '查询草稿', 'mp:draft:query', 3, 0, 2108, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-14 10:09:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-14 10:09:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2112, '删除草稿', 'mp:draft:delete', 3, 3, 2108, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-14 10:09:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-14 10:09:19', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2113, '素材管理', '', 2, 8, 2084, 'material', 'ep:basketball', 'mp/material/index', 'MpMaterial', 0, '1', '1', '1', '1', to_date('2023-01-14 14:12:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:43:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2114, '上传临时素材', 'mp:material:upload-temporary', 3, 1, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-14 15:33:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-14 15:33:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2115, '上传永久素材', 'mp:material:upload-permanent', 3, 2, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-14 15:34:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-14 15:34:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2116, '删除素材', 'mp:material:delete', 3, 3, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-14 15:35:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-14 15:35:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2117, '上传图文图片', 'mp:material:upload-news-image', 3, 4, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-14 15:36:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-14 15:36:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2118, '查询素材', 'mp:material:query', 3, 5, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-14 15:39:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-14 15:39:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2119, '菜单管理', '', 2, 6, 2084, 'menu', 'ep:menu', 'mp/menu/index', 'MpMenu', 0, '1', '1', '1', '1', to_date('2023-01-14 17:43:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:42:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2120, '自动回复', '', 2, 7, 2084, 'auto-reply', 'fa-solid:republican', 'mp/autoReply/index', 'MpAutoReply', 0, '1', '1', '1', '1', to_date('2023-01-15 22:13:09', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:43:10', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2121, '查询回复', 'mp:auto-reply:query', 3, 0, 2120, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-16 22:28:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-16 22:28:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2122, '新增回复', 'mp:auto-reply:create', 3, 1, 2120, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-16 22:28:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-16 22:28:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2123, '修改回复', 'mp:auto-reply:update', 3, 2, 2120, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-16 22:29:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-16 22:29:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2124, '删除回复', 'mp:auto-reply:delete', 3, 3, 2120, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-16 22:29:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-16 22:29:34', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2125, '查询菜单', 'mp:menu:query', 3, 0, 2119, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-17 23:05:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 23:05:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2126, '保存菜单', 'mp:menu:save', 3, 1, 2119, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-17 23:06:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 23:06:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2127, '删除菜单', 'mp:menu:delete', 3, 2, 2119, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-17 23:06:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 23:06:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2128, '查询消息', 'mp:message:query', 3, 0, 2103, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-17 23:07:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 23:07:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2129, '发送消息', 'mp:message:send', 3, 1, 2103, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-17 23:07:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-17 23:07:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2130, '邮箱管理', '', 2, 2, 2739, 'mail', 'fa-solid:mail-bulk', NULL, NULL, 0, '1', '1', '1', '1', to_date('2023-01-25 17:27:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-22 23:56:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2131, '邮箱账号', '', 2, 0, 2130, 'mail-account', 'fa:universal-access', 'system/mail/account/index', 'SystemMailAccount', 0, '1', '1', '1', '', to_date('2023-01-25 09:33:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:48:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2132, '账号查询', 'system:mail-account:query', 3, 1, 2131, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-01-25 09:33:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-01-25 09:33:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2133, '账号创建', 'system:mail-account:create', 3, 2, 2131, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-01-25 09:33:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-01-25 09:33:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2134, '账号更新', 'system:mail-account:update', 3, 3, 2131, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-01-25 09:33:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-01-25 09:33:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2135, '账号删除', 'system:mail-account:delete', 3, 4, 2131, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-01-25 09:33:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-01-25 09:33:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2136, '邮件模版', '', 2, 0, 2130, 'mail-template', 'fa:tag', 'system/mail/template/index', 'SystemMailTemplate', 0, '1', '1', '1', '', to_date('2023-01-25 12:05:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:48:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2137, '模版查询', 'system:mail-template:query', 3, 1, 2136, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-01-25 12:05:31', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-01-25 12:05:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2138, '模版创建', 'system:mail-template:create', 3, 2, 2136, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-01-25 12:05:31', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-01-25 12:05:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2139, '模版更新', 'system:mail-template:update', 3, 3, 2136, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-01-25 12:05:31', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-01-25 12:05:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2140, '模版删除', 'system:mail-template:delete', 3, 4, 2136, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-01-25 12:05:31', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-01-25 12:05:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2141, '邮件记录', '', 2, 0, 2130, 'mail-log', 'fa:edit', 'system/mail/log/index', 'SystemMailLog', 0, '1', '1', '1', '', to_date('2023-01-26 02:16:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:48:51', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2142, '日志查询', 'system:mail-log:query', 3, 1, 2141, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-01-26 02:16:50', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-01-26 02:16:50', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2143, '发送测试邮件', 'system:mail-template:send-mail', 3, 5, 2136, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-26 23:29:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-26 23:29:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2144, '站内信管理', '', 1, 3, 2739, 'notify', 'ep:message-box', NULL, NULL, 0, '1', '1', '1', '1', to_date('2023-01-28 10:25:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-22 23:56:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2145, '模板管理', '', 2, 0, 2144, 'notify-template', 'fa:archive', 'system/notify/template/index', 'SystemNotifyTemplate', 0, '1', '1', '1', '', to_date('2023-01-28 02:26:42', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:49:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2146, '站内信模板查询', 'system:notify-template:query', 3, 1, 2145, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-01-28 02:26:42', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-01-28 02:26:42', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2147, '站内信模板创建', 'system:notify-template:create', 3, 2, 2145, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-01-28 02:26:42', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-01-28 02:26:42', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2148, '站内信模板更新', 'system:notify-template:update', 3, 3, 2145, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-01-28 02:26:42', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-01-28 02:26:42', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2149, '站内信模板删除', 'system:notify-template:delete', 3, 4, 2145, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-01-28 02:26:42', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-01-28 02:26:42', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2150, '发送测试站内信', 'system:notify-template:send-notify', 3, 5, 2145, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-01-28 10:54:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-28 10:54:43', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2151, '消息记录', '', 2, 0, 2144, 'notify-message', 'fa:edit', 'system/notify/message/index', 'SystemNotifyMessage', 0, '1', '1', '1', '', to_date('2023-01-28 04:28:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:49:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2152, '站内信消息查询', 'system:notify-message:query', 3, 1, 2151, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-01-28 04:28:22', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-01-28 04:28:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2153, '大屏设计器', '', 2, 2, 1281, 'go-view', 'fa:area-chart', 'report/goview/index', 'JimuReport', 0, '1', '1', '1', '1', to_date('2023-02-07 00:03:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 12:34:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2154, '创建项目', 'report:go-view-project:create', 3, 1, 2153, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-02-07 19:25:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-07 19:25:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2155, '更新项目', 'report:go-view-project:update', 3, 2, 2153, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-02-07 19:25:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 20:01:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2156, '查询项目', 'report:go-view-project:query', 3, 0, 2153, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-02-07 19:25:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-07 19:25:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2157, '使用 SQL 查询数据', 'report:go-view-data:get-by-sql', 3, 3, 2153, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-02-07 19:26:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-07 19:26:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2158, '使用 HTTP 查询数据', 'report:go-view-data:get-by-http', 3, 4, 2153, '', '', '', NULL, 0, '1', '1', '1', '1', to_date('2023-02-07 19:26:35', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-07 19:26:35', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2159, 'Boot 开发文档', '', 1, 1, 0, 'https://doc.iocoder.cn/', 'ep:document', NULL, NULL, 0, '1', '1', '1', '1', to_date('2023-02-10 22:46:28', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 21:32:20', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2160, 'Cloud 开发文档', '', 1, 2, 0, 'https://cloud.iocoder.cn', 'ep:document-copy', NULL, NULL, 0, '1', '1', '1', '1', to_date('2023-02-10 22:47:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 21:32:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2161, '接入示例', '', 1, 99, 1117, 'demo', 'fa-solid:dragon', 'pay/demo/index', NULL, 0, '1', '1', '1', '', to_date('2023-02-11 14:21:42', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-01-18 23:50:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2162, '商品导出', 'product:spu:export', 3, 5, 2014, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2022-07-30 14:22:58', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-07-30 14:22:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2164, '配送管理', '', 1, 3, 2072, 'delivery', 'ep:shopping-cart', '', '', 0, '1', '1', '1', '1', to_date('2023-05-18 09:18:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-28 10:58:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2165, '快递发货', '', 1, 0, 2164, 'express', 'ep:bicycle', '', '', 0, '1', '1', '1', '1', to_date('2023-05-18 09:22:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-30 21:02:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2166, '门店自提', '', 1, 1, 2164, 'pick-up-store', 'ep:add-location', '', '', 0, '1', '1', '1', '1', to_date('2023-05-18 09:23:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-30 21:03:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2167, '快递公司', '', 2, 0, 2165, 'express', 'ep:compass', 'mall/trade/delivery/express/index', 'Express', 0, '1', '1', '1', '1', to_date('2023-05-18 09:27:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-30 21:02:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2168, '快递公司查询', 'trade:delivery:express:query', 3, 1, 2167, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-18 09:37:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-18 09:37:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2169, '快递公司创建', 'trade:delivery:express:create', 3, 2, 2167, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-18 09:37:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-18 09:37:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2170, '快递公司更新', 'trade:delivery:express:update', 3, 3, 2167, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-18 09:37:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-18 09:37:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2171, '快递公司删除', 'trade:delivery:express:delete', 3, 4, 2167, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-18 09:37:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-18 09:37:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2172, '快递公司导出', 'trade:delivery:express:export', 3, 5, 2167, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-18 09:37:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-18 09:37:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2173, '运费模版', 'trade:delivery:express-template:query', 2, 1, 2165, 'express-template', 'ep:coordinate', 'mall/trade/delivery/expressTemplate/index', 'ExpressTemplate', 0, '1', '1', '1', '1', to_date('2023-05-20 06:48:10', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-30 21:03:13', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2174, '快递运费模板查询', 'trade:delivery:express-template:query', 3, 1, 2173, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-20 06:49:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-20 06:49:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2175, '快递运费模板创建', 'trade:delivery:express-template:create', 3, 2, 2173, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-20 06:49:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-20 06:49:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2176, '快递运费模板更新', 'trade:delivery:express-template:update', 3, 3, 2173, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-20 06:49:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-20 06:49:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2177, '快递运费模板删除', 'trade:delivery:express-template:delete', 3, 4, 2173, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-20 06:49:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-20 06:49:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2178, '快递运费模板导出', 'trade:delivery:express-template:export', 3, 5, 2173, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-20 06:49:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-20 06:49:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2179, '门店管理', '', 2, 1, 2166, 'pick-up-store', 'ep:basketball', 'mall/trade/delivery/pickUpStore/index', 'PickUpStore', 0, '1', '1', '1', '1', to_date('2023-05-25 10:50:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-30 21:03:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2180, '自提门店查询', 'trade:delivery:pick-up-store:query', 3, 1, 2179, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-25 10:53:29', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-25 10:53:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2181, '自提门店创建', 'trade:delivery:pick-up-store:create', 3, 2, 2179, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-25 10:53:29', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-25 10:53:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2182, '自提门店更新', 'trade:delivery:pick-up-store:update', 3, 3, 2179, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-25 10:53:29', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-25 10:53:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2183, '自提门店删除', 'trade:delivery:pick-up-store:delete', 3, 4, 2179, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-25 10:53:29', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-25 10:53:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2184, '自提门店导出', 'trade:delivery:pick-up-store:export', 3, 5, 2179, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-05-25 10:53:29', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-05-25 10:53:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2209, '秒杀活动', '', 2, 3, 2030, 'seckill', 'ep:place', '', '', 0, '1', '1', '1', '1', to_date('2023-06-24 17:39:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-06-24 18:55:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2262, '会员中心', '', 1, 55, 0, '/member', 'ep:bicycle', NULL, NULL, 0, '1', '1', '1', '1', to_date('2023-06-10 00:42:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-20 09:23:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2275, '会员配置', '', 2, 0, 2262, 'config', 'fa:archive', 'member/config/index', 'MemberConfig', 0, '1', '1', '1', '', to_date('2023-06-10 02:07:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-01 23:41:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2276, '会员配置查询', 'member:config:query', 3, 1, 2275, '', '', '', '', 0, '1', '1', '1', '', to_date('2023-06-10 02:07:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:48:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2277, '会员配置保存', 'member:config:save', 3, 2, 2275, '', '', '', '', 0, '1', '1', '1', '', to_date('2023-06-10 02:07:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:49:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2281, '签到配置', '', 2, 2, 2300, 'config', 'ep:calendar', 'member/signin/config/index', 'SignInConfig', 0, '1', '1', '1', '', to_date('2023-06-10 03:26:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-20 19:25:51', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2282, '积分签到规则查询', 'point:sign-in-config:query', 3, 1, 2281, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-06-10 03:26:12', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-06-10 03:26:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2283, '积分签到规则创建', 'point:sign-in-config:create', 3, 2, 2281, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-06-10 03:26:12', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-06-10 03:26:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2284, '积分签到规则更新', 'point:sign-in-config:update', 3, 3, 2281, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-06-10 03:26:12', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-06-10 03:26:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2285, '积分签到规则删除', 'point:sign-in-config:delete', 3, 4, 2281, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-06-10 03:26:12', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-06-10 03:26:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2287, '会员积分', '', 2, 10, 2262, 'record', 'fa:asterisk', 'member/point/record/index', 'PointRecord', 0, '1', '1', '1', '', to_date('2023-06-10 04:18:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-01 23:42:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2288, '用户积分记录查询', 'point:record:query', 3, 1, 2287, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-06-10 04:18:50', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-06-10 04:18:50', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2293, '签到记录', '', 2, 3, 2300, 'record', 'ep:chicken', 'member/signin/record/index', 'SignInRecord', 0, '1', '1', '1', '', to_date('2023-06-10 04:48:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-20 19:26:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2294, '用户签到积分查询', 'point:sign-in-record:query', 3, 1, 2293, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-06-10 04:48:22', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-06-10 04:48:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2297, '用户签到积分删除', 'point:sign-in-record:delete', 3, 4, 2293, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-06-10 04:48:22', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-06-10 04:48:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2300, '会员签到', '', 1, 11, 2262, 'signin', 'ep:alarm-clock', '', '', 0, '1', '1', '1', '1', to_date('2023-06-27 22:49:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-20 09:23:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2301, '回调通知', '', 2, 5, 1117, 'notify', 'ep:mute-notification', 'pay/notify/index', 'PayNotify', 0, '1', '1', '1', '', to_date('2023-07-20 04:41:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-01-18 23:56:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2302, '支付通知查询', 'pay:notify:query', 3, 1, 2301, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-07-20 04:41:32', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-07-20 04:41:32', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2303, '拼团活动', '', 2, 3, 2030, 'combination', 'fa:group', '', '', 0, '1', '1', '1', '1', to_date('2023-08-12 17:19:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-12 17:20:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2304, '拼团商品', '', 2, 1, 2303, 'acitivity', 'ep:apple', 'mall/promotion/combination/activity/index', 'PromotionCombinationActivity', 0, '1', '1', '1', '1', to_date('2023-08-12 17:22:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-12 17:22:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2305, '拼团活动查询', 'promotion:combination-activity:query', 3, 1, 2304, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-08-12 17:54:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-24 11:57:40', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2306, '拼团活动创建', 'promotion:combination-activity:create', 3, 2, 2304, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-08-12 17:54:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-12 17:54:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2307, '拼团活动更新', 'promotion:combination-activity:update', 3, 3, 2304, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-08-12 17:55:04', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-12 17:55:04', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2308, '拼团活动删除', 'promotion:combination-activity:delete', 3, 4, 2304, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-08-12 17:55:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-12 17:55:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2309, '拼团活动关闭', 'promotion:combination-activity:close', 3, 5, 2304, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-08-12 17:55:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-06 10:51:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2310, '砍价活动', '', 2, 4, 2030, 'bargain', 'ep:box', '', '', 0, '1', '1', '1', '1', to_date('2023-08-13 00:27:25', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-13 00:27:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2311, '砍价商品', '', 2, 1, 2310, 'activity', 'ep:burger', 'mall/promotion/bargain/activity/index', 'PromotionBargainActivity', 0, '1', '1', '1', '1', to_date('2023-08-13 00:28:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-05 01:16:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2312, '砍价活动查询', 'promotion:bargain-activity:query', 3, 1, 2311, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-08-13 00:32:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-13 00:32:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2313, '砍价活动创建', 'promotion:bargain-activity:create', 3, 2, 2311, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-08-13 00:32:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-13 00:32:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2314, '砍价活动更新', 'promotion:bargain-activity:update', 3, 3, 2311, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-08-13 00:32:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-13 00:32:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2315, '砍价活动删除', 'promotion:bargain-activity:delete', 3, 4, 2311, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-08-13 00:34:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-13 00:34:50', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2316, '砍价活动关闭', 'promotion:bargain-activity:close', 3, 5, 2311, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-08-13 00:35:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-13 00:35:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2317, '会员管理', '', 2, 0, 2262, 'user', 'ep:avatar', 'member/user/index', 'MemberUser', 0, '1', '1', '1', '', to_date('2023-08-19 04:12:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-24 00:50:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2318, '会员用户查询', 'member:user:query', 3, 1, 2317, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-19 04:12:15', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-19 04:12:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2319, '会员用户更新', 'member:user:update', 3, 3, 2317, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-19 04:12:15', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-19 04:12:15', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2320, '会员标签', '', 2, 1, 2262, 'tag', 'ep:collection-tag', 'member/tag/index', 'MemberTag', 0, '1', '1', '1', '', to_date('2023-08-20 01:03:08', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-20 09:23:19', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2321, '会员标签查询', 'member:tag:query', 3, 1, 2320, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-20 01:03:08', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-20 01:03:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2322, '会员标签创建', 'member:tag:create', 3, 2, 2320, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-20 01:03:08', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-20 01:03:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2323, '会员标签更新', 'member:tag:update', 3, 3, 2320, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-20 01:03:08', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-20 01:03:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2324, '会员标签删除', 'member:tag:delete', 3, 4, 2320, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-20 01:03:08', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-20 01:03:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2325, '会员等级', '', 2, 2, 2262, 'level', 'fa:level-up', 'member/level/index', 'MemberLevel', 0, '1', '1', '1', '', to_date('2023-08-22 12:41:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-22 21:47:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2326, '会员等级查询', 'member:level:query', 3, 1, 2325, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-22 12:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-22 12:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2327, '会员等级创建', 'member:level:create', 3, 2, 2325, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-22 12:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-22 12:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2328, '会员等级更新', 'member:level:update', 3, 3, 2325, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-22 12:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-22 12:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2329, '会员等级删除', 'member:level:delete', 3, 4, 2325, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-22 12:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-22 12:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2330, '会员分组', '', 2, 3, 2262, 'group', 'fa:group', 'member/group/index', 'MemberGroup', 0, '1', '1', '1', '', to_date('2023-08-22 13:50:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-01 23:42:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2331, '用户分组查询', 'member:group:query', 3, 1, 2330, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-22 13:50:06', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-22 13:50:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2332, '用户分组创建', 'member:group:create', 3, 2, 2330, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-22 13:50:06', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-22 13:50:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2333, '用户分组更新', 'member:group:update', 3, 3, 2330, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-22 13:50:06', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-22 13:50:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2334, '用户分组删除', 'member:group:delete', 3, 4, 2330, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-22 13:50:06', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-22 13:50:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2335, '用户等级修改', 'member:user:update-level', 3, 5, 2317, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-08-23 16:49:05', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-08-23 16:50:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2336, '商品评论', '', 2, 5, 2000, 'comment', 'ep:comment', 'mall/product/comment/index', 'ProductComment', 0, '1', '1', '1', '1', to_date('2023-08-26 11:03:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-26 11:03:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2337, '评论查询', 'product:comment:query', 3, 1, 2336, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-08-26 11:04:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-26 11:04:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2338, '添加自评', 'product:comment:create', 3, 2, 2336, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-08-26 11:04:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-26 11:08:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2339, '商家回复', 'product:comment:update', 3, 3, 2336, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-08-26 11:04:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-26 11:04:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2340, '显隐评论', 'product:comment:update', 3, 4, 2336, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-08-26 11:04:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-26 11:04:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2341, '优惠劵发送', 'promotion:coupon:send', 3, 2, 2038, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-09-02 00:03:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-02 00:03:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2342, '交易配置', '', 2, 0, 2072, 'config', 'ep:setting', 'mall/trade/config/index', 'TradeConfig', 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-26 20:30:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2343, '交易中心配置查询', 'trade:config:query', 3, 1, 2342, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2344, '交易中心配置保存', 'trade:config:save', 3, 2, 2342, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2345, '分销管理', '', 1, 4, 2072, 'brokerage', 'fa-solid:project-diagram', '', '', 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-28 10:58:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2346, '分销用户', '', 2, 0, 2345, 'brokerage-user', 'fa-solid:user-tie', 'mall/trade/brokerage/user/index', 'TradeBrokerageUser', 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-26 20:33:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2347, '分销用户查询', 'trade:brokerage-user:query', 3, 1, 2346, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2348, '分销用户推广人查询', 'trade:brokerage-user:user-query', 3, 2, 2346, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2349, '分销用户推广订单查询', 'trade:brokerage-user:order-query', 3, 3, 2346, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2350, '分销用户修改推广资格', 'trade:brokerage-user:update-brokerage-enable', 3, 4, 2346, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2351, '分销用户修改推广员', 'trade:brokerage-user:update-bind-user', 3, 5, 2346, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2352, '分销用户清除推广员', 'trade:brokerage-user:clear-bind-user', 3, 6, 2346, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2353, '佣金记录', '', 2, 1, 2345, 'brokerage-record', 'fa:money', 'mall/trade/brokerage/record/index', 'TradeBrokerageRecord', 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-26 20:33:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2354, '佣金记录查询', 'trade:brokerage-record:query', 3, 1, 2353, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2355, '佣金提现', '', 2, 2, 2345, 'brokerage-withdraw', 'fa:credit-card', 'mall/trade/brokerage/withdraw/index', 'TradeBrokerageWithdraw', 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-26 20:33:35', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2356, '佣金提现查询', 'trade:brokerage-withdraw:query', 3, 1, 2355, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2357, '佣金提现审核', 'trade:brokerage-withdraw:audit', 3, 2, 2355, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-28 02:46:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2358, '统计中心', '', 1, 75, 2362, 'statistics', 'ep:data-line', '', '', 0, '1', '1', '1', '', to_date('2023-09-30 03:22:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-30 11:54:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2359, '交易统计', '', 2, 4, 2358, 'trade', 'fa-solid:credit-card', 'mall/statistics/trade/index', 'TradeStatistics', 0, '1', '1', '1', '', to_date('2023-09-30 03:22:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-26 20:42:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2360, '交易统计查询', 'statistics:trade:query', 3, 1, 2359, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-09-30 03:22:40', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-30 03:22:40', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2361, '交易统计导出', 'statistics:trade:export', 3, 2, 2359, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-09-30 03:22:40', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-09-30 03:22:40', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2362, '商城系统', '', 1, 59, 0, '/mall', 'ep:shop', '', '', 0, '1', '1', '1', '1', to_date('2023-09-30 11:52:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-30 11:52:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2363, '用户积分修改', 'member:user:update-point', 3, 6, 2317, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-01 14:39:43', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-01 14:39:43', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2364, '用户余额修改', 'member:user:update-balance', 3, 7, 2317, '', '', '', '', 0, '1', '1', '1', '', to_date('2023-10-01 14:39:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-01 22:42:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2365, '优惠劵', '', 1, 2, 2030, 'coupon', 'fa-solid:disease', '', '', 0, '1', '1', '1', '1', to_date('2023-10-03 12:39:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-05 00:16:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2366, '砍价记录', '', 2, 2, 2310, 'record', 'ep:list', 'mall/promotion/bargain/record/index', 'PromotionBargainRecord', 0, '1', '1', '1', '', to_date('2023-10-05 02:49:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-05 10:50:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2367, '砍价记录查询', 'promotion:bargain-record:query', 3, 1, 2366, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-05 02:49:06', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-05 02:49:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2368, '助力记录查询', 'promotion:bargain-help:query', 3, 2, 2366, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-10-05 12:27:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-05 12:27:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2369, '拼团记录', 'promotion:combination-record:query', 2, 2, 2303, 'record', 'ep:avatar', 'mall/promotion/combination/record/index.vue', 'PromotionCombinationRecord', 0, '1', '1', '1', '1', to_date('2023-10-08 07:10:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-08 07:34:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2374, '会员统计', '', 2, 2, 2358, 'member', 'ep:avatar', 'mall/statistics/member/index', 'MemberStatistics', 0, '1', '1', '1', '', to_date('2023-10-11 04:39:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-26 20:41:46', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2375, '会员统计查询', 'statistics:member:query', 3, 1, 2374, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-11 04:39:24', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-11 04:39:24', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2376, '订单核销', 'trade:order:pick-up', 3, 10, 2076, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-10-14 17:11:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-14 17:11:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2377, '文章分类', '', 2, 0, 2387, 'article/category', 'fa:certificate', 'mall/promotion/article/category/index', 'ArticleCategory', 0, '1', '1', '1', '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-16 09:38:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2378, '分类查询', 'promotion:article-category:query', 3, 1, 2377, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2379, '分类创建', 'promotion:article-category:create', 3, 2, 2377, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2380, '分类更新', 'promotion:article-category:update', 3, 3, 2377, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2381, '分类删除', 'promotion:article-category:delete', 3, 4, 2377, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2382, '文章列表', '', 2, 2, 2387, 'article', 'ep:connection', 'mall/promotion/article/index', 'Article', 0, '1', '1', '1', '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-16 09:41:19', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2383, '文章管理查询', 'promotion:article:query', 3, 1, 2382, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2384, '文章管理创建', 'promotion:article:create', 3, 2, 2382, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2385, '文章管理更新', 'promotion:article:update', 3, 3, 2382, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2386, '文章管理删除', 'promotion:article:delete', 3, 4, 2382, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-16 01:26:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2387, '内容管理', '', 1, 1, 2030, 'content', 'ep:collection', '', '', 0, '1', '1', '1', '1', to_date('2023-10-16 09:37:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-16 09:37:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2388, '商城首页', '', 2, 1, 2362, 'home', 'ep:home-filled', 'mall/home/index', 'MallHome', 0, '1', '1', '1', '', to_date('2023-10-16 12:10:33', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-16 12:10:33', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2389, '核销订单', '', 2, 2, 2166, 'pick-up-order', 'ep:list', 'mall/trade/delivery/pickUpOrder/index', 'PickUpOrder', 0, '1', '1', '1', '', to_date('2023-10-19 16:09:51', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-19 16:09:51', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2390, '优惠活动', '', 1, 99, 2030, 'youhui', 'ep:aim', '', '', 0, '1', '1', '1', '1', to_date('2023-10-21 19:23:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-21 19:23:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2391, '客户管理', '', 2, 10, 2397, 'customer', 'fa:address-book-o', 'crm/customer/index', 'CrmCustomer', 0, '1', '1', '1', '', to_date('2023-10-29 09:04:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-17 17:13:32', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2392, '客户查询', 'crm:customer:query', 3, 1, 2391, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 09:04:21', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 09:04:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2393, '客户创建', 'crm:customer:create', 3, 2, 2391, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 09:04:21', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 09:04:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2394, '客户更新', 'crm:customer:update', 3, 3, 2391, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 09:04:21', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 09:04:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2395, '客户删除', 'crm:customer:delete', 3, 4, 2391, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 09:04:21', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 09:04:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2396, '客户导出', 'crm:customer:export', 3, 5, 2391, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 09:04:21', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 09:04:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2397, 'CRM 系统', '', 1, 200, 0, '/crm', 'ep:avatar', '', '', 0, '1', '1', '1', '1', to_date('2023-10-29 17:08:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-04 15:37:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2398, '合同管理', '', 2, 50, 2397, 'contract', 'ep:notebook', 'crm/contract/index', 'CrmContract', 0, '1', '1', '1', '', to_date('2023-10-29 10:50:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-17 17:15:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2399, '合同查询', 'crm:contract:query', 3, 1, 2398, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 10:50:41', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 10:50:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2400, '合同创建', 'crm:contract:create', 3, 2, 2398, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 10:50:41', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 10:50:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2401, '合同更新', 'crm:contract:update', 3, 3, 2398, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 10:50:41', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 10:50:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2402, '合同删除', 'crm:contract:delete', 3, 4, 2398, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 10:50:41', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 10:50:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2403, '合同导出', 'crm:contract:export', 3, 5, 2398, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 10:50:41', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 10:50:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2404, '线索管理', '', 2, 8, 2397, 'clue', 'fa:pagelines', 'crm/clue/index', 'CrmClue', 0, '1', '1', '1', '', to_date('2023-10-29 11:06:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-17 17:15:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2405, '线索查询', 'crm:clue:query', 3, 1, 2404, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:06:29', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:06:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2406, '线索创建', 'crm:clue:create', 3, 2, 2404, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:06:29', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:06:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2407, '线索更新', 'crm:clue:update', 3, 3, 2404, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:06:29', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:06:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2408, '线索删除', 'crm:clue:delete', 3, 4, 2404, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:06:29', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:06:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2409, '线索导出', 'crm:clue:export', 3, 5, 2404, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:06:29', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:06:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2410, '商机管理', '', 2, 40, 2397, 'business', 'fa:bus', 'crm/business/index', 'CrmBusiness', 0, '1', '1', '1', '', to_date('2023-10-29 11:12:35', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-17 17:14:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2411, '商机查询', 'crm:business:query', 3, 1, 2410, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:12:35', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:12:35', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2412, '商机创建', 'crm:business:create', 3, 2, 2410, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:12:35', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:12:35', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2413, '商机更新', 'crm:business:update', 3, 3, 2410, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:12:35', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:12:35', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2414, '商机删除', 'crm:business:delete', 3, 4, 2410, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:12:35', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:12:35', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2415, '商机导出', 'crm:business:export', 3, 5, 2410, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:12:35', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:12:35', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2416, '联系人管理', '', 2, 20, 2397, 'contact', 'fa:address-book-o', 'crm/contact/index', 'CrmContact', 0, '1', '1', '1', '', to_date('2023-10-29 11:14:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-17 17:13:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2417, '联系人查询', 'crm:contact:query', 3, 1, 2416, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:14:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:14:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2418, '联系人创建', 'crm:contact:create', 3, 2, 2416, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:14:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:14:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2419, '联系人更新', 'crm:contact:update', 3, 3, 2416, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:14:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:14:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2420, '联系人删除', 'crm:contact:delete', 3, 4, 2416, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:14:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:14:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2421, '联系人导出', 'crm:contact:export', 3, 5, 2416, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:14:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:14:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2422, '回款管理', '', 2, 60, 2397, 'receivable', 'ep:money', 'crm/receivable/index', 'CrmReceivable', 0, '1', '1', '1', '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-17 17:16:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2423, '回款管理查询', 'crm:receivable:query', 3, 1, 2422, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2424, '回款管理创建', 'crm:receivable:create', 3, 2, 2422, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2425, '回款管理更新', 'crm:receivable:update', 3, 3, 2422, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2426, '回款管理删除', 'crm:receivable:delete', 3, 4, 2422, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2427, '回款管理导出', 'crm:receivable:export', 3, 5, 2422, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2428, '回款计划', '', 2, 61, 2397, 'receivable-plan', 'fa:money', 'crm/receivable/plan/index', 'CrmReceivablePlan', 0, '1', '1', '1', '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-17 17:16:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2429, '回款计划查询', 'crm:receivable-plan:query', 3, 1, 2428, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2430, '回款计划创建', 'crm:receivable-plan:create', 3, 2, 2428, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2431, '回款计划更新', 'crm:receivable-plan:update', 3, 3, 2428, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2432, '回款计划删除', 'crm:receivable-plan:delete', 3, 4, 2428, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2433, '回款计划导出', 'crm:receivable-plan:export', 3, 5, 2428, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 11:18:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2435, '商城装修', '', 2, 20, 2030, 'diy-template', 'fa6-solid:brush', 'mall/promotion/diy/template/index', 'DiyTemplate', 0, '1', '1', '1', '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2436, '装修模板', '', 2, 1, 2435, 'diy-template', 'fa6-solid:brush', 'mall/promotion/diy/template/index', 'DiyTemplate', 0, '1', '1', '1', '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2437, '装修模板查询', 'promotion:diy-template:query', 3, 1, 2436, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2438, '装修模板创建', 'promotion:diy-template:create', 3, 2, 2436, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2439, '装修模板更新', 'promotion:diy-template:update', 3, 3, 2436, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2440, '装修模板删除', 'promotion:diy-template:delete', 3, 4, 2436, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2441, '装修模板使用', 'promotion:diy-template:use', 3, 5, 2436, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2442, '装修页面', '', 2, 2, 2435, 'diy-page', 'foundation:page-edit', 'mall/promotion/diy/page/index', 'DiyPage', 0, '1', '1', '1', '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2443, '装修页面查询', 'promotion:diy-page:query', 3, 1, 2442, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 14:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2444, '装修页面创建', 'promotion:diy-page:create', 3, 2, 2442, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 14:19:26', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 14:19:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2445, '装修页面更新', 'promotion:diy-page:update', 3, 3, 2442, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 14:19:26', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 14:19:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2446, '装修页面删除', 'promotion:diy-page:delete', 3, 4, 2442, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-10-29 14:19:26', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-10-29 14:19:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2447, '三方登录', '', 1, 10, 1, 'social', 'fa:rocket', '', '', 0, '1', '1', '1', '1', to_date('2023-11-04 12:12:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 01:14:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2448, '三方应用', '', 2, 1, 2447, 'client', 'ep:set-up', 'views/system/social/client/index.vue', 'SocialClient', 0, '1', '1', '1', '1', to_date('2023-11-04 12:17:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 12:17:19', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2449, '三方应用查询', 'system:social-client:query', 3, 1, 2448, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-11-04 12:43:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 12:43:33', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2450, '三方应用创建', 'system:social-client:create', 3, 2, 2448, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-11-04 12:43:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 12:43:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2451, '三方应用更新', 'system:social-client:update', 3, 3, 2448, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-11-04 12:44:27', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 12:44:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2452, '三方应用删除', 'system:social-client:delete', 3, 4, 2448, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-11-04 12:44:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 12:44:43', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2453, '三方用户', 'system:social-user:query', 2, 2, 2447, 'user', 'ep:avatar', 'system/social/user/index.vue', 'SocialUser', 0, '1', '1', '1', '1', to_date('2023-11-04 14:01:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-04 14:01:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2472, '主子表(内嵌)', '', 2, 12, 1070, 'demo03-inner', 'fa:power-off', 'infra/demo/demo03/inner/index', 'Demo03StudentInner', 0, '1', '1', '1', '', to_date('2023-11-13 04:39:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 23:53:46', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2478, '单表(增删改查)', '', 2, 1, 1070, 'demo01-contact', 'ep:bicycle', 'infra/demo/demo01/index', 'Demo01Contact', 0, '1', '1', '1', '', to_date('2023-11-15 14:42:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 20:34:40', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2479, '示例联系人查询', 'infra:demo01-contact:query', 3, 1, 2478, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-15 14:42:30', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-15 14:42:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2480, '示例联系人创建', 'infra:demo01-contact:create', 3, 2, 2478, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-15 14:42:30', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-15 14:42:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2481, '示例联系人更新', 'infra:demo01-contact:update', 3, 3, 2478, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-15 14:42:30', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-15 14:42:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2482, '示例联系人删除', 'infra:demo01-contact:delete', 3, 4, 2478, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-15 14:42:30', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-15 14:42:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2483, '示例联系人导出', 'infra:demo01-contact:export', 3, 5, 2478, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-15 14:42:30', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-15 14:42:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2484, '树表(增删改查)', '', 2, 2, 1070, 'demo02-category', 'fa:tree', 'infra/demo/demo02/index', 'Demo02Category', 0, '1', '1', '1', '', to_date('2023-11-16 12:18:27', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 20:35:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2485, '示例分类查询', 'infra:demo02-category:query', 3, 1, 2484, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-16 12:18:27', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-16 12:18:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2486, '示例分类创建', 'infra:demo02-category:create', 3, 2, 2484, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-16 12:18:27', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-16 12:18:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2487, '示例分类更新', 'infra:demo02-category:update', 3, 3, 2484, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-16 12:18:27', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-16 12:18:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2488, '示例分类删除', 'infra:demo02-category:delete', 3, 4, 2484, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-16 12:18:27', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-16 12:18:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2489, '示例分类导出', 'infra:demo02-category:export', 3, 5, 2484, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-16 12:18:27', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-16 12:18:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2490, '主子表(标准)', '', 2, 10, 1070, 'demo03-normal', 'fa:battery-3', 'infra/demo/demo03/normal/index', 'Demo03StudentNormal', 0, '1', '1', '1', '', to_date('2023-11-16 12:53:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 23:10:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2491, '学生查询', 'infra:demo03-student:query', 3, 1, 2490, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-16 12:53:37', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-16 12:53:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2492, '学生创建', 'infra:demo03-student:create', 3, 2, 2490, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-16 12:53:37', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-16 12:53:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2493, '学生更新', 'infra:demo03-student:update', 3, 3, 2490, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-16 12:53:37', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-16 12:53:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2494, '学生删除', 'infra:demo03-student:delete', 3, 4, 2490, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-16 12:53:37', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-16 12:53:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2495, '学生导出', 'infra:demo03-student:export', 3, 5, 2490, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-16 12:53:37', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-16 12:53:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2497, '主子表(ERP)', '', 2, 11, 1070, 'demo03-erp', 'ep:calendar', 'infra/demo/demo03/erp/index', 'Demo03StudentERP', 0, '1', '1', '1', '', to_date('2023-11-16 15:50:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-17 13:19:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2516, '客户公海配置', '', 2, 0, 2524, 'customer-pool-config', 'ep:data-analysis', 'crm/customer/poolConfig/index', 'CrmCustomerPoolConfig', 0, '1', '1', '1', '', to_date('2023-11-18 13:33:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-01-03 19:52:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2517, '客户公海配置保存', 'crm:customer-pool-config:update', 3, 1, 2516, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-18 13:33:31', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-18 13:33:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2518, '客户限制配置', '', 2, 1, 2524, 'customer-limit-config', 'ep:avatar', 'crm/customer/limitConfig/index', 'CrmCustomerLimitConfig', 0, '1', '1', '1', '', to_date('2023-11-18 13:33:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-24 16:43:33', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2519, '客户限制配置查询', 'crm:customer-limit-config:query', 3, 1, 2518, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-18 13:33:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-18 13:33:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2520, '客户限制配置创建', 'crm:customer-limit-config:create', 3, 2, 2518, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-18 13:33:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-18 13:33:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2521, '客户限制配置更新', 'crm:customer-limit-config:update', 3, 3, 2518, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-18 13:33:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-18 13:33:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2522, '客户限制配置删除', 'crm:customer-limit-config:delete', 3, 4, 2518, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-18 13:33:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-18 13:33:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2523, '客户限制配置导出', 'crm:customer-limit-config:export', 3, 5, 2518, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-11-18 13:33:53', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-11-18 13:33:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2524, '系统配置', '', 1, 999, 2397, 'config', 'ep:connection', '', '', 0, '1', '1', '1', '1', to_date('2023-11-18 21:58:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-17 17:14:34', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2525, 'WebSocket', '', 2, 5, 2, 'websocket', 'ep:connection', 'infra/webSocket/index', 'InfraWebSocket', 0, '1', '1', '1', '1', to_date('2023-11-23 19:41:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-23 00:02:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2526, '产品管理', '', 2, 80, 2397, 'product', 'fa:product-hunt', 'crm/product/index', 'CrmProduct', 0, '1', '1', '1', '1', to_date('2023-12-05 22:45:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-20 20:36:20', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2527, '产品查询', 'crm:product:query', 3, 1, 2526, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-12-05 22:47:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 22:47:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2528, '产品创建', 'crm:product:create', 3, 2, 2526, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-12-05 22:47:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 22:47:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2529, '产品更新', 'crm:product:update', 3, 3, 2526, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-12-05 22:48:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 22:48:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2530, '产品删除', 'crm:product:delete', 3, 4, 2526, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-12-05 22:48:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 22:48:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2531, '产品导出', 'crm:product:export', 3, 5, 2526, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-12-05 22:48:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-05 22:48:29', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2532, '产品分类配置', '', 2, 3, 2524, 'product/category', 'fa-solid:window-restore', 'crm/product/category/index', 'CrmProductCategory', 0, '1', '1', '1', '1', to_date('2023-12-06 12:52:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-06 12:52:51', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2533, '产品分类查询', 'crm:product-category:query', 3, 1, 2532, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-12-06 12:53:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-06 12:53:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2534, '产品分类创建', 'crm:product-category:create', 3, 2, 2532, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-12-06 12:53:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-06 12:53:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2535, '产品分类更新', 'crm:product-category:update', 3, 3, 2532, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-12-06 12:53:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-06 12:53:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2536, '产品分类删除', 'crm:product-category:delete', 3, 4, 2532, '', '', '', '', 0, '1', '1', '1', '1', to_date('2023-12-06 12:54:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-06 12:54:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2543, '关联商机', 'crm:contact:create-business', 3, 10, 2416, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-01-02 17:28:25', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-01-02 17:28:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2544, '取关商机', 'crm:contact:delete-business', 3, 11, 2416, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-01-02 17:28:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-01-02 17:28:51', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2545, '商品统计', '', 2, 3, 2358, 'product', 'fa:product-hunt', 'mall/statistics/product/index', 'ProductStatistics', 0, '1', '1', '1', '', to_date('2023-12-15 18:54:28', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-26 20:41:52', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2546, '客户公海', '', 2, 30, 2397, 'customer/pool', 'fa-solid:swimming-pool', 'crm/customer/pool/index', 'CrmCustomerPool', 0, '1', '1', '1', '1', to_date('2024-01-15 21:29:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-17 17:14:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2547, '订单查询', 'trade:order:query', 3, 1, 2076, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-01-16 08:52:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-01-16 08:52:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2548, '订单更新', 'trade:order:update', 3, 2, 2076, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-01-16 08:52:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-01-16 08:52:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2549, '支付&退款案例', '', 2, 1, 2161, 'order', 'fa:paypal', 'pay/demo/order/index', '', 0, '1', '1', '1', '1', to_date('2024-01-18 23:45:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-01-18 23:47:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2550, '转账案例', '', 2, 2, 2161, 'transfer', 'fa:transgender-alt', 'pay/demo/transfer/index', '', 0, '1', '1', '1', '1', to_date('2024-01-18 23:51:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-01-18 23:51:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2551, '钱包管理', '', 1, 4, 1117, 'wallet', 'ep:wallet', '', '', 0, '1', '1', '1', '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-29 08:58:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2552, '充值套餐', '', 2, 2, 2551, 'wallet-recharge-package', 'fa:leaf', 'pay/wallet/rechargePackage/index', 'WalletRechargePackage', 0, '1', '1', '1', '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2553, '钱包充值套餐查询', 'pay:wallet-recharge-package:query', 3, 1, 2552, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2554, '钱包充值套餐创建', 'pay:wallet-recharge-package:create', 3, 2, 2552, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2555, '钱包充值套餐更新', 'pay:wallet-recharge-package:update', 3, 3, 2552, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2556, '钱包充值套餐删除', 'pay:wallet-recharge-package:delete', 3, 4, 2552, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2557, '钱包余额', '', 2, 1, 2551, 'wallet-balance', 'fa:leaf', 'pay/wallet/balance/index', 'WalletBalance', 0, '1', '1', '1', '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2558, '钱包余额查询', 'pay:wallet:query', 3, 1, 2557, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2559, '转账订单', '', 2, 3, 1117, 'transfer', 'ep:credit-card', 'pay/transfer/index', 'PayTransfer', 0, '1', '1', '1', '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-12-29 02:32:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2560, '数据统计', '', 1, 200, 2397, 'statistics', 'ep:data-line', '', '', 0, '1', '1', '1', '1', to_date('2024-01-26 22:50:35', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-24 20:10:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2561, '排行榜', 'crm:statistics-rank:query', 2, 1, 2560, 'ranking', 'fa:area-chart', 'crm/statistics/rank/index', 'CrmStatisticsRank', 0, '1', '1', '1', '1', to_date('2024-01-26 22:52:09', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:39:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2562, '客户导入', 'crm:customer:import', 3, 6, 2391, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-02-01 13:09:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-01 13:09:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2563, 'ERP 系统', '', 1, 300, 0, '/erp', 'fa-solid:store', '', '', 0, '1', '1', '1', '1', to_date('2024-02-04 15:37:25', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-04 15:37:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2564, '产品管理', '', 1, 40, 2563, 'product', 'fa:product-hunt', '', '', 0, '1', '1', '1', '1', to_date('2024-02-04 15:38:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-04 15:38:43', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2565, '产品信息', '', 2, 0, 2564, 'product', 'fa-solid:apple-alt', 'erp/product/product/index', 'ErpProduct', 0, '1', '1', '1', '', to_date('2024-02-04 07:52:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-05 14:42:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2566, '产品查询', 'erp:product:query', 3, 1, 2565, '', '', '', '', 0, '1', '1', '1', '', to_date('2024-02-04 07:52:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-04 17:21:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2567, '产品创建', 'erp:product:create', 3, 2, 2565, '', '', '', '', 0, '1', '1', '1', '', to_date('2024-02-04 07:52:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-04 17:22:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2568, '产品更新', 'erp:product:update', 3, 3, 2565, '', '', '', '', 0, '1', '1', '1', '', to_date('2024-02-04 07:52:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-04 17:22:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2569, '产品删除', 'erp:product:delete', 3, 4, 2565, '', '', '', '', 0, '1', '1', '1', '', to_date('2024-02-04 07:52:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-04 17:22:22', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2570, '产品导出', 'erp:product:export', 3, 5, 2565, '', '', '', '', 0, '1', '1', '1', '', to_date('2024-02-04 07:52:15', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-04 17:22:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2571, '产品分类', '', 2, 1, 2564, 'product-category', 'fa:certificate', 'erp/product/category/index', 'ErpProductCategory', 0, '1', '1', '1', '', to_date('2024-02-04 09:21:04', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-04 17:24:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2572, '分类查询', 'erp:product-category:query', 3, 1, 2571, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 09:21:04', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 09:21:04', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2573, '分类创建', 'erp:product-category:create', 3, 2, 2571, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 09:21:04', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 09:21:04', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2574, '分类更新', 'erp:product-category:update', 3, 3, 2571, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 09:21:04', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 09:21:04', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2575, '分类删除', 'erp:product-category:delete', 3, 4, 2571, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 09:21:04', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 09:21:04', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2576, '分类导出', 'erp:product-category:export', 3, 5, 2571, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 09:21:04', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 09:21:04', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2577, '产品单位', '', 2, 2, 2564, 'unit', 'ep:opportunity', 'erp/product/unit/index', 'ErpProductUnit', 0, '1', '1', '1', '', to_date('2024-02-04 11:54:08', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-04 19:54:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2578, '单位查询', 'erp:product-unit:query', 3, 1, 2577, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 11:54:08', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 11:54:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2579, '单位创建', 'erp:product-unit:create', 3, 2, 2577, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 11:54:08', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 11:54:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2580, '单位更新', 'erp:product-unit:update', 3, 3, 2577, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 11:54:08', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 11:54:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2581, '单位删除', 'erp:product-unit:delete', 3, 4, 2577, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 11:54:08', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 11:54:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2582, '单位导出', 'erp:product-unit:export', 3, 5, 2577, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 11:54:08', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 11:54:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2583, '库存管理', '', 1, 30, 2563, 'stock', 'fa:window-restore', '', '', 0, '1', '1', '1', '1', to_date('2024-02-05 00:29:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-05 00:29:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2584, '仓库信息', '', 2, 0, 2583, 'warehouse', 'ep:house', 'erp/stock/warehouse/index', 'ErpWarehouse', 0, '1', '1', '1', '', to_date('2024-02-04 17:12:09', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-05 01:12:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2585, '仓库查询', 'erp:warehouse:query', 3, 1, 2584, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 17:12:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 17:12:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2586, '仓库创建', 'erp:warehouse:create', 3, 2, 2584, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 17:12:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 17:12:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2587, '仓库更新', 'erp:warehouse:update', 3, 3, 2584, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 17:12:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 17:12:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2588, '仓库删除', 'erp:warehouse:delete', 3, 4, 2584, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 17:12:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 17:12:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2589, '仓库导出', 'erp:warehouse:export', 3, 5, 2584, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-04 17:12:09', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-04 17:12:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2590, '产品库存', '', 2, 1, 2583, 'stock', 'ep:coffee', 'erp/stock/stock/index', 'ErpStock', 0, '1', '1', '1', '', to_date('2024-02-05 06:40:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-05 14:42:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2591, '库存查询', 'erp:stock:query', 3, 1, 2590, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 06:40:50', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-05 06:40:50', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2592, '库存导出', 'erp:stock:export', 3, 5, 2590, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 06:40:50', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-05 06:40:50', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2593, '出入库明细', '', 2, 2, 2583, 'record', 'fa-solid:blog', 'erp/stock/record/index', 'ErpStockRecord', 0, '1', '1', '1', '', to_date('2024-02-05 10:27:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-06 17:26:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2594, '库存明细查询', 'erp:stock-record:query', 3, 1, 2593, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 10:27:21', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-05 10:27:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2595, '库存明细导出', 'erp:stock-record:export', 3, 5, 2593, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 10:27:21', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-05 10:27:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2596, '其它入库', '', 2, 3, 2583, 'in', 'ep:zoom-in', 'erp/stock/in/index', 'ErpStockIn', 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-07 19:06:51', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2597, '其它入库单查询', 'erp:stock-in:query', 3, 1, 2596, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2598, '其它入库单创建', 'erp:stock-in:create', 3, 2, 2596, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2599, '其它入库单更新', 'erp:stock-in:update', 3, 3, 2596, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2600, '其它入库单删除', 'erp:stock-in:delete', 3, 4, 2596, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2601, '其它入库单导出', 'erp:stock-in:export', 3, 5, 2596, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2602, '采购管理', '', 1, 10, 2563, 'purchase', 'fa:buysellads', '', '', 0, '1', '1', '1', '1', to_date('2024-02-06 16:01:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-06 16:01:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2603, '供应商信息', '', 2, 4, 2602, 'supplier', 'fa:superpowers', 'erp/purchase/supplier/index', 'ErpSupplier', 0, '1', '1', '1', '', to_date('2024-02-06 08:21:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-06 16:22:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2604, '供应商查询', 'erp:supplier:query', 3, 1, 2603, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-06 08:21:55', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-06 08:21:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2605, '供应商创建', 'erp:supplier:create', 3, 2, 2603, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-06 08:21:55', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-06 08:21:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2606, '供应商更新', 'erp:supplier:update', 3, 3, 2603, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-06 08:21:55', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-06 08:21:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2607, '供应商删除', 'erp:supplier:delete', 3, 4, 2603, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-06 08:21:55', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-06 08:21:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2608, '供应商导出', 'erp:supplier:export', 3, 5, 2603, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-06 08:21:55', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-06 08:21:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2609, '其它入库单审批', 'erp:stock-in:update-status', 3, 6, 2596, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2610, '其它出库', '', 2, 4, 2583, 'out', 'ep:zoom-out', 'erp/stock/out/index', 'ErpStockOut', 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-07 19:06:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2611, '其它出库单查询', 'erp:stock-out:query', 3, 1, 2610, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 06:43:39', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2612, '其它出库单创建', 'erp:stock-out:create', 3, 2, 2610, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 06:43:42', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2613, '其它出库单更新', 'erp:stock-out:update', 3, 3, 2610, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 06:43:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2614, '其它出库单删除', 'erp:stock-out:delete', 3, 4, 2610, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 06:43:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2615, '其它出库单导出', 'erp:stock-out:export', 3, 5, 2610, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 06:43:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2616, '其它出库单审批', 'erp:stock-out:update-status', 3, 6, 2610, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 06:43:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2617, '销售管理', '', 1, 20, 2563, 'sale', 'fa:sellsy', '', '', 0, '1', '1', '1', '1', to_date('2024-02-07 15:12:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-07 15:12:32', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2618, '客户信息', '', 2, 4, 2617, 'customer', 'ep:avatar', 'erp/sale/customer/index', 'ErpCustomer', 0, '1', '1', '1', '', to_date('2024-02-07 07:21:45', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-07 15:22:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2619, '客户查询', 'erp:customer:query', 3, 1, 2618, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-07 07:21:45', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 07:21:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2620, '客户创建', 'erp:customer:create', 3, 2, 2618, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-07 07:21:45', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 07:21:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2621, '客户更新', 'erp:customer:update', 3, 3, 2618, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-07 07:21:45', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 07:21:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2622, '客户删除', 'erp:customer:delete', 3, 4, 2618, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-07 07:21:45', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 07:21:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2623, '客户导出', 'erp:customer:export', 3, 5, 2618, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-07 07:21:45', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 07:21:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2624, '库存调拨', '', 2, 5, 2583, 'move', 'ep:folder-remove', 'erp/stock/move/index', 'ErpStockMove', 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-16 18:53:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2625, '库存调度单查询', 'erp:stock-move:query', 3, 1, 2624, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2626, '库存调度单创建', 'erp:stock-move:create', 3, 2, 2624, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:52', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2627, '库存调度单更新', 'erp:stock-move:update', 3, 3, 2624, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2628, '库存调度单删除', 'erp:stock-move:delete', 3, 4, 2624, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2629, '库存调度单导出', 'erp:stock-move:export', 3, 5, 2624, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2630, '库存调度单审批', 'erp:stock-move:update-status', 3, 6, 2624, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:13:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2631, '库存盘点', '', 2, 6, 2583, 'check', 'ep:circle-check-filled', 'erp/stock/check/index', 'ErpStockCheck', 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-08 08:31:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2632, '库存盘点单查询', 'erp:stock-check:query', 3, 1, 2631, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2633, '库存盘点单创建', 'erp:stock-check:create', 3, 2, 2631, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:52', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2634, '库存盘点单更新', 'erp:stock-check:update', 3, 3, 2631, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2635, '库存盘点单删除', 'erp:stock-check:delete', 3, 4, 2631, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2636, '库存盘点单导出', 'erp:stock-check:export', 3, 5, 2631, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2637, '库存盘点单审批', 'erp:stock-check:update-status', 3, 6, 2631, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:13:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2638, '销售订单', '', 2, 1, 2617, 'order', 'fa:first-order', 'erp/sale/order/index', 'ErpSaleOrder', 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-10 21:59:20', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2639, '销售订单查询', 'erp:sale-order:query', 3, 1, 2638, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2640, '销售订单创建', 'erp:sale-order:create', 3, 2, 2638, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:52', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2641, '销售订单更新', 'erp:sale-order:update', 3, 3, 2638, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2642, '销售订单删除', 'erp:sale-order:delete', 3, 4, 2638, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2643, '销售订单导出', 'erp:sale-order:export', 3, 5, 2638, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2644, '销售订单审批', 'erp:sale-order:update-status', 3, 6, 2638, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:13:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2645, '财务管理', '', 1, 50, 2563, 'finance', 'ep:money', '', '', 0, '1', '1', '1', '1', to_date('2024-02-10 08:05:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-10 08:06:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2646, '结算账户', '', 2, 10, 2645, 'account', 'fa:universal-access', 'erp/finance/account/index', 'ErpAccount', 0, '1', '1', '1', '', to_date('2024-02-10 00:15:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-14 08:24:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2647, '结算账户查询', 'erp:account:query', 3, 1, 2646, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-10 00:15:07', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-10 00:15:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2648, '结算账户创建', 'erp:account:create', 3, 2, 2646, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-10 00:15:07', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-10 00:15:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2649, '结算账户更新', 'erp:account:update', 3, 3, 2646, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-10 00:15:07', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-10 00:15:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2650, '结算账户删除', 'erp:account:delete', 3, 4, 2646, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-10 00:15:07', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-10 00:15:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2651, '结算账户导出', 'erp:account:export', 3, 5, 2646, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-10 00:15:07', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-10 00:15:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2652, '销售出库', '', 2, 2, 2617, 'out', 'ep:sold-out', 'erp/sale/out/index', 'ErpSaleOut', 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-10 22:02:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2653, '销售出库查询', 'erp:sale-out:query', 3, 1, 2652, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2654, '销售出库创建', 'erp:sale-out:create', 3, 2, 2652, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:52', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2655, '销售出库更新', 'erp:sale-out:update', 3, 3, 2652, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2656, '销售出库删除', 'erp:sale-out:delete', 3, 4, 2652, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2657, '销售出库导出', 'erp:sale-out:export', 3, 5, 2652, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2658, '销售出库审批', 'erp:sale-out:update-status', 3, 6, 2652, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:13:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2659, '销售退货', '', 2, 3, 2617, 'return', 'fa-solid:bone', 'erp/sale/return/index', 'ErpSaleReturn', 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-12 06:12:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2660, '销售退货查询', 'erp:sale-return:query', 3, 1, 2659, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2661, '销售退货创建', 'erp:sale-return:create', 3, 2, 2659, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:52', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2662, '销售退货更新', 'erp:sale-return:update', 3, 3, 2659, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:55', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2663, '销售退货删除', 'erp:sale-return:delete', 3, 4, 2659, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2664, '销售退货导出', 'erp:sale-return:export', 3, 5, 2659, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:12:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2665, '销售退货审批', 'erp:sale-return:update-status', 3, 6, 2659, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-07 11:13:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2666, '采购订单', '', 2, 1, 2602, 'order', 'fa-solid:border-all', 'erp/purchase/order/index', 'ErpPurchaseOrder', 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-12 08:51:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2667, '采购订单查询', 'erp:purchase-order:query', 3, 1, 2666, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2668, '采购订单创建', 'erp:purchase-order:create', 3, 2, 2666, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:44:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2669, '采购订单更新', 'erp:purchase-order:update', 3, 3, 2666, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:44:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2670, '采购订单删除', 'erp:purchase-order:delete', 3, 4, 2666, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2671, '采购订单导出', 'erp:purchase-order:export', 3, 5, 2666, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2672, '采购订单审批', 'erp:purchase-order:update-status', 3, 6, 2666, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2673, '采购入库', '', 2, 2, 2602, 'in', 'fa-solid:gopuram', 'erp/purchase/in/index', 'ErpPurchaseIn', 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-12 11:19:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2674, '采购入库查询', 'erp:purchase-in:query', 3, 1, 2673, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2675, '采购入库创建', 'erp:purchase-in:create', 3, 2, 2673, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:44:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2676, '采购入库更新', 'erp:purchase-in:update', 3, 3, 2673, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:44:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2677, '采购入库删除', 'erp:purchase-in:delete', 3, 4, 2673, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2678, '采购入库导出', 'erp:purchase-in:export', 3, 5, 2673, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2679, '采购入库审批', 'erp:purchase-in:update-status', 3, 6, 2673, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2680, '采购退货', '', 2, 3, 2602, 'return', 'ep:minus', 'erp/purchase/return/index', 'ErpPurchaseReturn', 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-12 20:51:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2681, '采购退货查询', 'erp:purchase-return:query', 3, 1, 2680, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2682, '采购退货创建', 'erp:purchase-return:create', 3, 2, 2680, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:44:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2683, '采购退货更新', 'erp:purchase-return:update', 3, 3, 2680, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:44:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2684, '采购退货删除', 'erp:purchase-return:delete', 3, 4, 2680, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2685, '采购退货导出', 'erp:purchase-return:export', 3, 5, 2680, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2686, '采购退货审批', 'erp:purchase-return:update-status', 3, 6, 2680, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2687, '付款单', '', 2, 1, 2645, 'payment', 'ep:caret-right', 'erp/finance/payment/index', 'ErpFinancePayment', 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-14 08:24:23', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2688, '付款单查询', 'erp:finance-payment:query', 3, 1, 2687, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2689, '付款单创建', 'erp:finance-payment:create', 3, 2, 2687, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:44:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2690, '付款单更新', 'erp:finance-payment:update', 3, 3, 2687, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:44:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2691, '付款单删除', 'erp:finance-payment:delete', 3, 4, 2687, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2692, '付款单导出', 'erp:finance-payment:export', 3, 5, 2687, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2693, '付款单审批', 'erp:finance-payment:update-status', 3, 6, 2687, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2694, '收款单', '', 2, 2, 2645, 'receipt', 'ep:expand', 'erp/finance/receipt/index', 'ErpFinanceReceipt', 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-15 19:35:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2695, '收款单查询', 'erp:finance-receipt:query', 3, 1, 2694, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2696, '收款单创建', 'erp:finance-receipt:create', 3, 2, 2694, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:44:54', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2697, '收款单更新', 'erp:finance-receipt:update', 3, 3, 2694, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:44:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2698, '收款单删除', 'erp:finance-receipt:delete', 3, 4, 2694, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:00', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2699, '收款单导出', 'erp:finance-receipt:export', 3, 5, 2694, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2700, '收款单审批', 'erp:finance-receipt:update-status', 3, 6, 2694, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-02-05 16:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-02-12 00:45:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2701, '待办事项', '', 2, 0, 2397, 'backlog', 'fa-solid:tasks', 'crm/backlog/index', 'CrmBacklog', 0, '1', '1', '1', '1', to_date('2024-02-17 17:17:11', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-17 17:17:11', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2702, 'ERP 首页', 'erp:statistics:query', 2, 0, 2563, 'home', 'ep:home-filled', 'erp/home/index.vue', 'ErpHome', 0, '1', '1', '1', '1', to_date('2024-02-18 16:49:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-26 21:12:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2703, '商机状态配置', '', 2, 4, 2524, 'business-status', 'fa-solid:charging-station', 'crm/business/status/index', 'CrmBusinessStatus', 0, '1', '1', '1', '1', to_date('2024-02-21 20:15:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-21 20:15:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2704, '商机状态查询', 'crm:business-status:query', 3, 1, 2703, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-02-21 20:35:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-21 20:36:06', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2705, '商机状态创建', 'crm:business-status:create', 3, 2, 2703, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-02-21 20:35:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-21 20:35:57', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2706, '商机状态更新', 'crm:business-status:update', 3, 3, 2703, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-02-21 20:36:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-21 20:36:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2707, '商机状态删除', 'crm:business-status:delete', 3, 4, 2703, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-02-21 20:36:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-21 20:36:36', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2708, '合同配置', '', 2, 5, 2524, 'contract-config', 'ep:connection', 'crm/contract/config/index', 'CrmContractConfig', 0, '1', '1', '1', '1', to_date('2024-02-24 16:44:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-24 16:44:48', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2709, '客户公海配置查询', 'crm:customer-pool-config:query', 3, 2, 2516, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-02-24 16:45:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-24 16:45:28', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2710, '合同配置更新', 'crm:contract-config:update', 3, 1, 2708, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-02-24 16:45:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-24 16:45:56', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2711, '合同配置查询', 'crm:contract-config:query', 3, 2, 2708, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-02-24 16:46:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-24 16:46:16', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2712, '客户分析', 'crm:statistics-customer:query', 2, 0, 2560, 'customer', 'ep:avatar', 'views/crm/statistics/customer/index.vue', 'CrmStatisticsCustomer', 0, '1', '1', '1', '1', to_date('2024-03-09 16:43:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2713, '抄送我的', 'bpm:process-instance-cc:query', 2, 30, 1200, 'copy', 'ep:copy-document', 'bpm/task/copy/index', 'BpmProcessInstanceCopy', 0, '1', '1', '1', '1', to_date('2024-03-17 21:50:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:55:12', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2714, '流程分类', '', 2, 3, 1186, 'category', 'fa:object-ungroup', 'bpm/category/index', 'BpmCategory', 0, '1', '1', '1', '', to_date('2024-03-08 02:00:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-21 23:51:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2715, '分类查询', 'bpm:category:query', 3, 1, 2714, '', '', '', '', 0, '1', '1', '1', '', to_date('2024-03-08 02:00:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-19 14:36:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2716, '分类创建', 'bpm:category:create', 3, 2, 2714, '', '', '', '', 0, '1', '1', '1', '', to_date('2024-03-08 02:00:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-19 14:36:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2717, '分类更新', 'bpm:category:update', 3, 3, 2714, '', '', '', '', 0, '1', '1', '1', '', to_date('2024-03-08 02:00:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-19 14:36:35', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2718, '分类删除', 'bpm:category:delete', 3, 4, 2714, '', '', '', '', 0, '1', '1', '1', '', to_date('2024-03-08 02:00:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-19 14:36:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2720, '发起流程', '', 2, 0, 1200, 'create', 'fa-solid:grin-stars', 'bpm/processInstance/create/index', 'BpmProcessInstanceCreate', 0, '1', '0', '1', '1', to_date('2024-03-19 19:46:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-23 19:03:42', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2721, '流程实例', '', 2, 10, 1186, 'process-instance/manager', 'fa:square', 'bpm/processInstance/manager/index', 'BpmProcessInstanceManager', 0, '1', '1', '1', '1', to_date('2024-03-21 23:57:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-21 23:57:30', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2722, '流程实例的查询(管理员)', 'bpm:process-instance:manager-query', 3, 1, 2721, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-03-22 08:18:27', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-22 08:19:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2723, '流程实例的取消(管理员)', 'bpm:process-instance:cancel-by-admin', 3, 2, 2721, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-03-22 08:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-22 08:19:25', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2724, '流程任务', '', 2, 11, 1186, 'process-tasnk', 'ep:collection-tag', 'bpm/task/manager/index', 'BpmManagerTask', 0, '1', '1', '1', '1', to_date('2024-03-22 08:43:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-22 08:43:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2725, '流程任务的查询(管理员)', 'bpm:task:mananger-query', 3, 1, 2724, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-03-22 08:43:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-22 08:43:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2726, '流程监听器', '', 2, 5, 1186, 'process-listener', 'fa:assistive-listening-systems', 'bpm/processListener/index', 'BpmProcessListener', 0, '1', '1', '1', '', to_date('2024-03-09 16:05:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-23 13:13:38', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2727, '流程监听器查询', 'bpm:process-listener:query', 3, 1, 2726, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-03-09 16:05:34', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-03-09 16:05:34', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2728, '流程监听器创建', 'bpm:process-listener:create', 3, 2, 2726, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-03-09 16:05:34', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-03-09 16:05:34', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2729, '流程监听器更新', 'bpm:process-listener:update', 3, 3, 2726, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-03-09 16:05:34', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-03-09 16:05:34', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2730, '流程监听器删除', 'bpm:process-listener:delete', 3, 4, 2726, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-03-09 16:05:34', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-03-09 16:05:34', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2731, '流程表达式', '', 2, 6, 1186, 'process-expression', 'fa:wpexplorer', 'bpm/processExpression/index', 'BpmProcessExpression', 0, '1', '1', '1', '', to_date('2024-03-09 22:35:08', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-23 19:43:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2732, '流程表达式查询', 'bpm:process-expression:query', 3, 1, 2731, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-03-09 22:35:08', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-03-09 22:35:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2733, '流程表达式创建', 'bpm:process-expression:create', 3, 2, 2731, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-03-09 22:35:08', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-03-09 22:35:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2734, '流程表达式更新', 'bpm:process-expression:update', 3, 3, 2731, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-03-09 22:35:08', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-03-09 22:35:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2735, '流程表达式删除', 'bpm:process-expression:delete', 3, 4, 2731, '', '', '', NULL, 0, '1', '1', '1', '', to_date('2024-03-09 22:35:08', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2024-03-09 22:35:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2736, '员工业绩', 'crm:statistics-performance:query', 2, 3, 2560, 'performance', 'ep:dish-dot', 'crm/statistics/performance/index', 'CrmStatisticsPerformance', 0, '1', '1', '1', '1', to_date('2024-04-05 13:49:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:42:43', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2737, '客户画像', 'crm:statistics-portrait:query', 2, 4, 2560, 'portrait', 'ep:picture', 'crm/statistics/portrait/index', 'CrmStatisticsPortrait', 0, '1', '1', '1', '1', to_date('2024-04-05 13:57:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:42:24', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2738, '销售漏斗', 'crm:statistics-funnel:query', 2, 5, 2560, 'funnel', 'ep:grape', 'crm/statistics/funnel/index', 'CrmStatisticsFunnel', 0, '1', '1', '1', '1', to_date('2024-04-13 10:53:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:39:33', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2739, '消息中心', '', 1, 7, 1, 'messages', 'ep:chat-dot-round', '', '', 0, '1', '1', '1', '1', to_date('2024-04-22 23:54:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-23 09:36:35', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2740, '监控中心', '', 1, 10, 2, 'monitors', 'ep:monitor', '', '', 0, '1', '1', '1', '1', to_date('2024-04-23 00:04:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-23 00:04:44', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2741, '领取公海客户', 'crm:customer:receive', 3, 1, 2546, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 19:47:45', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:47:45', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2742, '分配公海客户', 'crm:customer:distribute', 3, 2, 2546, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 19:48:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:48:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2743, '商品统计查询', 'statistics:product:query', 3, 1, 2545, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 19:50:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:50:05', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2744, '商品统计导出', 'statistics:product:export', 3, 2, 2545, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 19:50:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:50:26', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2745, '支付渠道查询', 'pay:channel:query', 3, 10, 1126, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 19:53:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:53:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2746, '支付渠道创建', 'pay:channel:create', 3, 11, 1126, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 19:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2747, '支付渠道更新', 'pay:channel:update', 3, 12, 1126, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 19:53:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:53:58', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2748, '支付渠道删除', 'pay:channel:delete', 3, 13, 1126, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 19:54:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:54:34', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2749, '商品收藏查询', 'product:favorite:query', 3, 10, 2014, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 19:55:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:55:47', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2750, '商品浏览查询', 'product:browse-history:query', 3, 20, 2014, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 19:57:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:57:43', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2751, '售后同意', 'trade:after-sale:agree', 3, 2, 2073, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 19:58:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:58:40', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2752, '售后不同意', 'trade:after-sale:disagree', 3, 3, 2073, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 19:59:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 19:59:03', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2753, '售后确认退货', 'trade:after-sale:receive', 3, 4, 2073, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 20:00:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 20:00:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2754, '售后确认退款', 'trade:after-sale:refund', 3, 5, 2073, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 20:00:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 20:00:24', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2755, '删除项目', 'report:go-view-project:delete', 3, 2, 2153, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 20:01:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 20:01:37', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2756, '会员等级记录查询', 'member:level-record:query', 3, 10, 2325, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 20:02:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 20:02:32', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2757, '会员经验记录查询', 'member:experience-record:query', 3, 11, 2325, '', '', '', '', 0, '1', '1', '1', '1', to_date('2024-04-24 20:02:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-24 20:02:51', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_menu_seq + START WITH 2758; + +-- ---------------------------- +-- Table structure for system_notice +-- ---------------------------- +CREATE TABLE system_notice +( + id number NOT NULL, + title varchar2(50) NOT NULL, + content clob NOT NULL, + type smallint NOT NULL, + status smallint DEFAULT 0 NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_notice + ADD CONSTRAINT pk_system_notice PRIMARY KEY (id); + +COMMENT ON COLUMN system_notice.id IS '公告ID'; +COMMENT ON COLUMN system_notice.title IS '公告标题'; +COMMENT ON COLUMN system_notice.content IS '公告内容'; +COMMENT ON COLUMN system_notice.type IS '公告类型(1通知 2公告)'; +COMMENT ON COLUMN system_notice.status IS '公告状态(0正常 1关闭)'; +COMMENT ON COLUMN system_notice.creator IS '创建者'; +COMMENT ON COLUMN system_notice.create_time IS '创建时间'; +COMMENT ON COLUMN system_notice.updater IS '更新者'; +COMMENT ON COLUMN system_notice.update_time IS '更新时间'; +COMMENT ON COLUMN system_notice.deleted IS '是否删除'; +COMMENT ON COLUMN system_notice.tenant_id IS '租户编号'; +COMMENT ON TABLE system_notice IS '通知公告表'; + +-- ---------------------------- +-- Records of system_notice +-- ---------------------------- +-- @formatter:off +INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '芋道的公众', '

    新版本内容133

    ', 1, 0, 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-04 21:00:20', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '维护通知:2018-07-01 系统凌晨维护', '

    11112222

    ', 2, 1, 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 20:07:26', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, '我是测试标题', '

    哈哈哈哈123

    ', 1, 0, '110', to_date('2022-02-22 01:01:25', 'SYYYY-MM-DD HH24:MI:SS'), '110', to_date('2022-02-22 01:01:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_notice_seq + START WITH 5; + +-- ---------------------------- +-- Table structure for system_notify_message +-- ---------------------------- +CREATE TABLE system_notify_message +( + id number NOT NULL, + user_id number NOT NULL, + user_type smallint NOT NULL, + template_id number NOT NULL, + template_code varchar2(64) NOT NULL, + template_nickname varchar2(63) NOT NULL, + template_content varchar2(1024) NOT NULL, + template_type number NOT NULL, + template_params varchar2(255) NOT NULL, + read_status number(1, 0) NOT NULL, + read_time date DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_notify_message + ADD CONSTRAINT pk_system_notify_message PRIMARY KEY (id); + +COMMENT ON COLUMN system_notify_message.id IS '用户ID'; +COMMENT ON COLUMN system_notify_message.user_id IS '用户id'; +COMMENT ON COLUMN system_notify_message.user_type IS '用户类型'; +COMMENT ON COLUMN system_notify_message.template_id IS '模版编号'; +COMMENT ON COLUMN system_notify_message.template_code IS '模板编码'; +COMMENT ON COLUMN system_notify_message.template_nickname IS '模版发送人名称'; +COMMENT ON COLUMN system_notify_message.template_content IS '模版内容'; +COMMENT ON COLUMN system_notify_message.template_type IS '模版类型'; +COMMENT ON COLUMN system_notify_message.template_params IS '模版参数'; +COMMENT ON COLUMN system_notify_message.read_status IS '是否已读'; +COMMENT ON COLUMN system_notify_message.read_time IS '阅读时间'; +COMMENT ON COLUMN system_notify_message.creator IS '创建者'; +COMMENT ON COLUMN system_notify_message.create_time IS '创建时间'; +COMMENT ON COLUMN system_notify_message.updater IS '更新者'; +COMMENT ON COLUMN system_notify_message.update_time IS '更新时间'; +COMMENT ON COLUMN system_notify_message.deleted IS '是否删除'; +COMMENT ON COLUMN system_notify_message.tenant_id IS '租户编号'; +COMMENT ON TABLE system_notify_message IS '站内信消息表'; + +-- ---------------------------- +-- Records of system_notify_message +-- ---------------------------- +-- @formatter:off +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 1, 2, 1, 'test', '123', '我是 1,我开始 2 了', 1, '{"name":"1","what":"2"}', '1', to_date('2023-02-10 00:47:04', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-28 11:44:08', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-10 00:47:04', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, 1, 2, 1, 'test', '123', '我是 1,我开始 2 了', 1, '{"name":"1","what":"2"}', '1', to_date('2023-02-10 00:47:04', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-28 11:45:04', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-10 00:47:04', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, 103, 2, 2, 'register', '系统消息', '你好,欢迎 哈哈 加入大家庭!', 2, '{"name":"哈哈"}', '0', NULL, '1', to_date('2023-01-28 21:02:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-28 21:02:20', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, 1, 2, 1, 'test', '123', '我是 芋艿,我开始 写代码 了', 1, '{"name":"芋艿","what":"写代码"}', '1', to_date('2023-02-10 00:47:04', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-28 22:21:42', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-10 00:47:04', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, 1, 2, 1, 'test', '123', '我是 芋艿,我开始 写代码 了', 1, '{"name":"芋艿","what":"写代码"}', '1', to_date('2023-01-29 10:52:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-28 22:22:07', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-29 10:52:06', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (7, 1, 2, 1, 'test', '123', '我是 2,我开始 3 了', 1, '{"name":"2","what":"3"}', '1', to_date('2023-01-29 10:52:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-28 23:45:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-29 10:52:06', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (8, 1, 2, 2, 'register', '系统消息', '你好,欢迎 123 加入大家庭!', 2, '{"name":"123"}', '1', to_date('2023-01-29 10:52:06', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-28 23:50:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-29 10:52:06', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, 247, 1, 4, 'brokerage_withdraw_audit_approve', 'system', '您在2023-09-28 08:35:46提现¥0.09元的申请已通过审核', 2, '{"reason":null,"createTime":"2023-09-28 08:35:46","price":"0.09"}', '0', NULL, '1', to_date('2023-09-28 16:36:22', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-09-28 16:36:22', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (10, 247, 1, 4, 'brokerage_withdraw_audit_approve', 'system', '您在2023-09-30 20:59:40提现¥1.00元的申请已通过审核', 2, '{"reason":null,"createTime":"2023-09-30 20:59:40","price":"1.00"}', '0', NULL, '1', to_date('2023-10-03 12:11:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-10-03 12:11:34', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_notify_message_seq + START WITH 11; + +-- ---------------------------- +-- Table structure for system_notify_template +-- ---------------------------- +CREATE TABLE system_notify_template +( + id number NOT NULL, + name varchar2(63) NOT NULL, + code varchar2(64) NOT NULL, + nickname varchar2(255) NOT NULL, + content varchar2(1024) NOT NULL, + type smallint NOT NULL, + params varchar2(255) DEFAULT NULL NULL, + status smallint NOT NULL, + remark varchar2(255) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE system_notify_template + ADD CONSTRAINT pk_system_notify_template PRIMARY KEY (id); + +COMMENT ON COLUMN system_notify_template.id IS '主键'; +COMMENT ON COLUMN system_notify_template.name IS '模板名称'; +COMMENT ON COLUMN system_notify_template.code IS '模版编码'; +COMMENT ON COLUMN system_notify_template.nickname IS '发送人名称'; +COMMENT ON COLUMN system_notify_template.content IS '模版内容'; +COMMENT ON COLUMN system_notify_template.type IS '类型'; +COMMENT ON COLUMN system_notify_template.params IS '参数数组'; +COMMENT ON COLUMN system_notify_template.status IS '状态'; +COMMENT ON COLUMN system_notify_template.remark IS '备注'; +COMMENT ON COLUMN system_notify_template.creator IS '创建者'; +COMMENT ON COLUMN system_notify_template.create_time IS '创建时间'; +COMMENT ON COLUMN system_notify_template.updater IS '更新者'; +COMMENT ON COLUMN system_notify_template.update_time IS '更新时间'; +COMMENT ON COLUMN system_notify_template.deleted IS '是否删除'; +COMMENT ON TABLE system_notify_template IS '站内信模板表'; + +CREATE SEQUENCE system_notify_template_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for system_oauth2_access_token +-- ---------------------------- +CREATE TABLE system_oauth2_access_token +( + id number NOT NULL, + user_id number NOT NULL, + user_type smallint NOT NULL, + user_info varchar2(512) NOT NULL, + access_token varchar2(255) NOT NULL, + refresh_token varchar2(32) NOT NULL, + client_id varchar2(255) NOT NULL, + scopes varchar2(255) DEFAULT NULL NULL, + expires_time date NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_oauth2_access_token + ADD CONSTRAINT pk_system_oauth2_access_token PRIMARY KEY (id); + +CREATE INDEX idx_system_oauth2_access_token_01 ON system_oauth2_access_token (access_token); +CREATE INDEX idx_system_oauth2_access_token_02 ON system_oauth2_access_token (refresh_token); + +COMMENT ON COLUMN system_oauth2_access_token.id IS '编号'; +COMMENT ON COLUMN system_oauth2_access_token.user_id IS '用户编号'; +COMMENT ON COLUMN system_oauth2_access_token.user_type IS '用户类型'; +COMMENT ON COLUMN system_oauth2_access_token.user_info IS '用户信息'; +COMMENT ON COLUMN system_oauth2_access_token.access_token IS '访问令牌'; +COMMENT ON COLUMN system_oauth2_access_token.refresh_token IS '刷新令牌'; +COMMENT ON COLUMN system_oauth2_access_token.client_id IS '客户端编号'; +COMMENT ON COLUMN system_oauth2_access_token.scopes IS '授权范围'; +COMMENT ON COLUMN system_oauth2_access_token.expires_time IS '过期时间'; +COMMENT ON COLUMN system_oauth2_access_token.creator IS '创建者'; +COMMENT ON COLUMN system_oauth2_access_token.create_time IS '创建时间'; +COMMENT ON COLUMN system_oauth2_access_token.updater IS '更新者'; +COMMENT ON COLUMN system_oauth2_access_token.update_time IS '更新时间'; +COMMENT ON COLUMN system_oauth2_access_token.deleted IS '是否删除'; +COMMENT ON COLUMN system_oauth2_access_token.tenant_id IS '租户编号'; +COMMENT ON TABLE system_oauth2_access_token IS 'OAuth2 访问令牌'; + +CREATE SEQUENCE system_oauth2_access_token_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for system_oauth2_approve +-- ---------------------------- +CREATE TABLE system_oauth2_approve +( + id number NOT NULL, + user_id number NOT NULL, + user_type smallint NOT NULL, + client_id varchar2(255) NOT NULL, + scope varchar2(255) DEFAULT '' NULL, + approved number(1, 0) DEFAULT '0' NOT NULL, + expires_time date NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_oauth2_approve + ADD CONSTRAINT pk_system_oauth2_approve PRIMARY KEY (id); + +COMMENT ON COLUMN system_oauth2_approve.id IS '编号'; +COMMENT ON COLUMN system_oauth2_approve.user_id IS '用户编号'; +COMMENT ON COLUMN system_oauth2_approve.user_type IS '用户类型'; +COMMENT ON COLUMN system_oauth2_approve.client_id IS '客户端编号'; +COMMENT ON COLUMN system_oauth2_approve.scope IS '授权范围'; +COMMENT ON COLUMN system_oauth2_approve.approved IS '是否接受'; +COMMENT ON COLUMN system_oauth2_approve.expires_time IS '过期时间'; +COMMENT ON COLUMN system_oauth2_approve.creator IS '创建者'; +COMMENT ON COLUMN system_oauth2_approve.create_time IS '创建时间'; +COMMENT ON COLUMN system_oauth2_approve.updater IS '更新者'; +COMMENT ON COLUMN system_oauth2_approve.update_time IS '更新时间'; +COMMENT ON COLUMN system_oauth2_approve.deleted IS '是否删除'; +COMMENT ON COLUMN system_oauth2_approve.tenant_id IS '租户编号'; +COMMENT ON TABLE system_oauth2_approve IS 'OAuth2 批准表'; + +CREATE SEQUENCE system_oauth2_approve_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for system_oauth2_client +-- ---------------------------- +CREATE TABLE system_oauth2_client +( + id number NOT NULL, + client_id varchar2(255) NOT NULL, + secret varchar2(255) NOT NULL, + name varchar2(255) NOT NULL, + logo varchar2(255) NOT NULL, + description varchar2(255) DEFAULT NULL NULL, + status smallint NOT NULL, + access_token_validity_seconds number NOT NULL, + refresh_token_validity_seconds number NOT NULL, + redirect_uris varchar2(255) NOT NULL, + authorized_grant_types varchar2(255) NOT NULL, + scopes varchar2(255) DEFAULT NULL NULL, + auto_approve_scopes varchar2(255) DEFAULT NULL NULL, + authorities varchar2(255) DEFAULT NULL NULL, + resource_ids varchar2(255) DEFAULT NULL NULL, + additional_information varchar2(4000) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE system_oauth2_client + ADD CONSTRAINT pk_system_oauth2_client PRIMARY KEY (id); + +COMMENT ON COLUMN system_oauth2_client.id IS '编号'; +COMMENT ON COLUMN system_oauth2_client.client_id IS '客户端编号'; +COMMENT ON COLUMN system_oauth2_client.secret IS '客户端密钥'; +COMMENT ON COLUMN system_oauth2_client.name IS '应用名'; +COMMENT ON COLUMN system_oauth2_client.logo IS '应用图标'; +COMMENT ON COLUMN system_oauth2_client.description IS '应用描述'; +COMMENT ON COLUMN system_oauth2_client.status IS '状态'; +COMMENT ON COLUMN system_oauth2_client.access_token_validity_seconds IS '访问令牌的有效期'; +COMMENT ON COLUMN system_oauth2_client.refresh_token_validity_seconds IS '刷新令牌的有效期'; +COMMENT ON COLUMN system_oauth2_client.redirect_uris IS '可重定向的 URI 地址'; +COMMENT ON COLUMN system_oauth2_client.authorized_grant_types IS '授权类型'; +COMMENT ON COLUMN system_oauth2_client.scopes IS '授权范围'; +COMMENT ON COLUMN system_oauth2_client.auto_approve_scopes IS '自动通过的授权范围'; +COMMENT ON COLUMN system_oauth2_client.authorities IS '权限'; +COMMENT ON COLUMN system_oauth2_client.resource_ids IS '资源'; +COMMENT ON COLUMN system_oauth2_client.additional_information IS '附加信息'; +COMMENT ON COLUMN system_oauth2_client.creator IS '创建者'; +COMMENT ON COLUMN system_oauth2_client.create_time IS '创建时间'; +COMMENT ON COLUMN system_oauth2_client.updater IS '更新者'; +COMMENT ON COLUMN system_oauth2_client.update_time IS '更新时间'; +COMMENT ON COLUMN system_oauth2_client.deleted IS '是否删除'; +COMMENT ON TABLE system_oauth2_client IS 'OAuth2 客户端表'; + +-- ---------------------------- +-- Records of system_oauth2_client +-- ---------------------------- +-- @formatter:off +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (1, 'default', 'admin123', '芋道源码', 'http://test.win.iocoder.cn/a5e2e244368878a366b516805a4aabf1.png', '我是描述', 0, 1800, 2592000, '["https://www.iocoder.cn","https://doc.iocoder.cn"]', '["password","authorization_code","implicit","refresh_token"]', '["user.read","user.write"]', '[]', '["user.read","user.write"]', '[]', '{}', '1', to_date('2022-05-11 21:47:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-22 16:31:52', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (40, 'test', 'test2', 'biubiu', 'http://test.win.iocoder.cn/277a899d573723f1fcdfb57340f00379.png', '啦啦啦啦', 0, 1800, 43200, '["https://www.iocoder.cn"]', '["password","authorization_code","implicit"]', '["user_info","projects"]', '["user_info"]', '[]', '[]', '{}', '1', to_date('2022-05-12 00:28:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 21:01:01', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (41, 'win-sso-demo-by-code', 'test', '基于授权码模式,如何实现 SSO 单点登录?', 'http://test.win.iocoder.cn/fe4ed36596adad5120036ef61a6d0153654544d44af8dd4ad3ffe8f759933d6f.png', NULL, 0, 1800, 43200, '["http://127.0.0.1:18080"]', '["authorization_code","refresh_token"]', '["user.read","user.write"]', '[]', '[]', '[]', NULL, '1', to_date('2022-09-29 13:28:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-29 13:28:31', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (42, 'win-sso-demo-by-password', 'test', '基于密码模式,如何实现 SSO 单点登录?', 'http://test.win.iocoder.cn/604bdc695e13b3b22745be704d1f2aa8ee05c5f26f9fead6d1ca49005afbc857.jpeg', NULL, 0, 1800, 43200, '["http://127.0.0.1:18080"]', '["password","refresh_token"]', '["user.read","user.write"]', '[]', '[]', '[]', NULL, '1', to_date('2022-10-04 17:40:16', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-10-04 20:31:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_oauth2_client_seq + START WITH 43; + +-- ---------------------------- +-- Table structure for system_oauth2_code +-- ---------------------------- +CREATE TABLE system_oauth2_code +( + id number NOT NULL, + user_id number NOT NULL, + user_type smallint NOT NULL, + code varchar2(32) NOT NULL, + client_id varchar2(255) NOT NULL, + scopes varchar2(255) DEFAULT '' NULL, + expires_time date NOT NULL, + redirect_uri varchar2(255) DEFAULT NULL NULL, + state varchar2(255) DEFAULT '' NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_oauth2_code + ADD CONSTRAINT pk_system_oauth2_code PRIMARY KEY (id); + +COMMENT ON COLUMN system_oauth2_code.id IS '编号'; +COMMENT ON COLUMN system_oauth2_code.user_id IS '用户编号'; +COMMENT ON COLUMN system_oauth2_code.user_type IS '用户类型'; +COMMENT ON COLUMN system_oauth2_code.code IS '授权码'; +COMMENT ON COLUMN system_oauth2_code.client_id IS '客户端编号'; +COMMENT ON COLUMN system_oauth2_code.scopes IS '授权范围'; +COMMENT ON COLUMN system_oauth2_code.expires_time IS '过期时间'; +COMMENT ON COLUMN system_oauth2_code.redirect_uri IS '可重定向的 URI 地址'; +COMMENT ON COLUMN system_oauth2_code.state IS '状态'; +COMMENT ON COLUMN system_oauth2_code.creator IS '创建者'; +COMMENT ON COLUMN system_oauth2_code.create_time IS '创建时间'; +COMMENT ON COLUMN system_oauth2_code.updater IS '更新者'; +COMMENT ON COLUMN system_oauth2_code.update_time IS '更新时间'; +COMMENT ON COLUMN system_oauth2_code.deleted IS '是否删除'; +COMMENT ON COLUMN system_oauth2_code.tenant_id IS '租户编号'; +COMMENT ON TABLE system_oauth2_code IS 'OAuth2 授权码表'; + +CREATE SEQUENCE system_oauth2_code_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for system_oauth2_refresh_token +-- ---------------------------- +CREATE TABLE system_oauth2_refresh_token +( + id number NOT NULL, + user_id number NOT NULL, + refresh_token varchar2(32) NOT NULL, + user_type smallint NOT NULL, + client_id varchar2(255) NOT NULL, + scopes varchar2(255) DEFAULT NULL NULL, + expires_time date NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_oauth2_refresh_token + ADD CONSTRAINT pk_system_oauth2_refresh_token PRIMARY KEY (id); + +COMMENT ON COLUMN system_oauth2_refresh_token.id IS '编号'; +COMMENT ON COLUMN system_oauth2_refresh_token.user_id IS '用户编号'; +COMMENT ON COLUMN system_oauth2_refresh_token.refresh_token IS '刷新令牌'; +COMMENT ON COLUMN system_oauth2_refresh_token.user_type IS '用户类型'; +COMMENT ON COLUMN system_oauth2_refresh_token.client_id IS '客户端编号'; +COMMENT ON COLUMN system_oauth2_refresh_token.scopes IS '授权范围'; +COMMENT ON COLUMN system_oauth2_refresh_token.expires_time IS '过期时间'; +COMMENT ON COLUMN system_oauth2_refresh_token.creator IS '创建者'; +COMMENT ON COLUMN system_oauth2_refresh_token.create_time IS '创建时间'; +COMMENT ON COLUMN system_oauth2_refresh_token.updater IS '更新者'; +COMMENT ON COLUMN system_oauth2_refresh_token.update_time IS '更新时间'; +COMMENT ON COLUMN system_oauth2_refresh_token.deleted IS '是否删除'; +COMMENT ON COLUMN system_oauth2_refresh_token.tenant_id IS '租户编号'; +COMMENT ON TABLE system_oauth2_refresh_token IS 'OAuth2 刷新令牌'; + +CREATE SEQUENCE system_oauth2_refresh_token_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for system_operate_log +-- ---------------------------- +CREATE TABLE system_operate_log +( + id number NOT NULL, + trace_id varchar2(64) DEFAULT '' NULL, + user_id number NOT NULL, + user_type smallint DEFAULT 0 NOT NULL, + type varchar2(50) NOT NULL, + sub_type varchar2(50) NOT NULL, + biz_id number NOT NULL, + action varchar2(2000) DEFAULT '' NULL, + extra varchar2(2000) DEFAULT '' NULL, + request_method varchar2(16) DEFAULT '' NULL, + request_url varchar2(255) DEFAULT '' NULL, + user_ip varchar2(50) DEFAULT NULL NULL, + user_agent varchar2(200) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_operate_log + ADD CONSTRAINT pk_system_operate_log PRIMARY KEY (id); + +COMMENT ON COLUMN system_operate_log.id IS '日志主键'; +COMMENT ON COLUMN system_operate_log.trace_id IS '链路追踪编号'; +COMMENT ON COLUMN system_operate_log.user_id IS '用户编号'; +COMMENT ON COLUMN system_operate_log.user_type IS '用户类型'; +COMMENT ON COLUMN system_operate_log.type IS '操作模块类型'; +COMMENT ON COLUMN system_operate_log.sub_type IS '操作名'; +COMMENT ON COLUMN system_operate_log.biz_id IS '操作数据模块编号'; +COMMENT ON COLUMN system_operate_log.action IS '操作内容'; +COMMENT ON COLUMN system_operate_log.extra IS '拓展字段'; +COMMENT ON COLUMN system_operate_log.request_method IS '请求方法名'; +COMMENT ON COLUMN system_operate_log.request_url IS '请求地址'; +COMMENT ON COLUMN system_operate_log.user_ip IS '用户 IP'; +COMMENT ON COLUMN system_operate_log.user_agent IS '浏览器 UA'; +COMMENT ON COLUMN system_operate_log.creator IS '创建者'; +COMMENT ON COLUMN system_operate_log.create_time IS '创建时间'; +COMMENT ON COLUMN system_operate_log.updater IS '更新者'; +COMMENT ON COLUMN system_operate_log.update_time IS '更新时间'; +COMMENT ON COLUMN system_operate_log.deleted IS '是否删除'; +COMMENT ON COLUMN system_operate_log.tenant_id IS '租户编号'; +COMMENT ON TABLE system_operate_log IS '操作日志记录 V2 版本'; + +CREATE SEQUENCE system_operate_log_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for system_post +-- ---------------------------- +CREATE TABLE system_post +( + id number NOT NULL, + code varchar2(64) NOT NULL, + name varchar2(50) NOT NULL, + sort number NOT NULL, + status smallint NOT NULL, + remark varchar2(500) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_post + ADD CONSTRAINT pk_system_post PRIMARY KEY (id); + +COMMENT ON COLUMN system_post.id IS '岗位ID'; +COMMENT ON COLUMN system_post.code IS '岗位编码'; +COMMENT ON COLUMN system_post.name IS '岗位名称'; +COMMENT ON COLUMN system_post.sort IS '显示顺序'; +COMMENT ON COLUMN system_post.status IS '状态(0正常 1停用)'; +COMMENT ON COLUMN system_post.remark IS '备注'; +COMMENT ON COLUMN system_post.creator IS '创建者'; +COMMENT ON COLUMN system_post.create_time IS '创建时间'; +COMMENT ON COLUMN system_post.updater IS '更新者'; +COMMENT ON COLUMN system_post.update_time IS '更新时间'; +COMMENT ON COLUMN system_post.deleted IS '是否删除'; +COMMENT ON COLUMN system_post.tenant_id IS '租户编号'; +COMMENT ON TABLE system_post IS '岗位信息表'; + +-- ---------------------------- +-- Records of system_post +-- ---------------------------- +-- @formatter:off +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, 'ceo', '董事长', 1, 0, '', 'admin', to_date('2021-01-06 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-11 15:19:04', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 'se', '项目经理', 2, 0, '', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-15 09:18:20', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, 'user', '普通员工', 4, 0, '111', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 10:04:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, 'HR', '人力资源', 5, 0, '', '1', to_date('2024-03-24 20:45:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-24 20:45:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_post_seq + START WITH 6; + +-- ---------------------------- +-- Table structure for system_role +-- ---------------------------- +CREATE TABLE system_role +( + id number NOT NULL, + name varchar2(30) NOT NULL, + code varchar2(100) NOT NULL, + sort number NOT NULL, + data_scope smallint DEFAULT 1 NOT NULL, + data_scope_dept_ids varchar2(500) DEFAULT '' NULL, + status smallint NOT NULL, + type smallint NOT NULL, + remark varchar2(500) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_role + ADD CONSTRAINT pk_system_role PRIMARY KEY (id); + +COMMENT ON COLUMN system_role.id IS '角色ID'; +COMMENT ON COLUMN system_role.name IS '角色名称'; +COMMENT ON COLUMN system_role.code IS '角色权限字符串'; +COMMENT ON COLUMN system_role.sort IS '显示顺序'; +COMMENT ON COLUMN system_role.data_scope IS '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)'; +COMMENT ON COLUMN system_role.data_scope_dept_ids IS '数据范围(指定部门数组)'; +COMMENT ON COLUMN system_role.status IS '角色状态(0正常 1停用)'; +COMMENT ON COLUMN system_role.type IS '角色类型'; +COMMENT ON COLUMN system_role.remark IS '备注'; +COMMENT ON COLUMN system_role.creator IS '创建者'; +COMMENT ON COLUMN system_role.create_time IS '创建时间'; +COMMENT ON COLUMN system_role.updater IS '更新者'; +COMMENT ON COLUMN system_role.update_time IS '更新时间'; +COMMENT ON COLUMN system_role.deleted IS '是否删除'; +COMMENT ON COLUMN system_role.tenant_id IS '租户编号'; +COMMENT ON TABLE system_role IS '角色信息表'; + +-- ---------------------------- +-- Records of system_role +-- ---------------------------- +-- @formatter:off +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '超级管理员', 'super_admin', 1, 1, '', 0, 1, '超级管理员', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-22 05:08:21', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '普通角色', 'common', 2, 2, '', 0, 1, '普通角色', 'admin', to_date('2021-01-05 17:03:48', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-02-22 05:08:20', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, 'CRM 管理员', 'crm_admin', 2, 1, '', 0, 1, 'CRM 专属角色', '1', to_date('2024-02-24 10:51:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-02-24 02:51:32', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (101, '测试账号', 'test', 0, 1, '[]', 0, 2, '我想测试', '', to_date('2021-01-06 13:49:35', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-24 22:22:45', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (109, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', to_date('2022-02-22 00:56:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 00:56:14', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (111, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', to_date('2022-03-07 21:37:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-07 21:37:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_role_seq + START WITH 112; + +-- ---------------------------- +-- Table structure for system_role_menu +-- ---------------------------- +CREATE TABLE system_role_menu +( + id number NOT NULL, + role_id number NOT NULL, + menu_id number NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_role_menu + ADD CONSTRAINT pk_system_role_menu PRIMARY KEY (id); + +COMMENT ON COLUMN system_role_menu.id IS '自增编号'; +COMMENT ON COLUMN system_role_menu.role_id IS '角色ID'; +COMMENT ON COLUMN system_role_menu.menu_id IS '菜单ID'; +COMMENT ON COLUMN system_role_menu.creator IS '创建者'; +COMMENT ON COLUMN system_role_menu.create_time IS '创建时间'; +COMMENT ON COLUMN system_role_menu.updater IS '更新者'; +COMMENT ON COLUMN system_role_menu.update_time IS '更新时间'; +COMMENT ON COLUMN system_role_menu.deleted IS '是否删除'; +COMMENT ON COLUMN system_role_menu.tenant_id IS '租户编号'; +COMMENT ON TABLE system_role_menu IS '角色和菜单关联表'; + +-- ---------------------------- +-- Records of system_role_menu +-- ---------------------------- +-- @formatter:off +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (263, 109, 1, '1', to_date('2022-02-22 00:56:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 00:56:14', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (434, 2, 1, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (454, 2, 1093, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (455, 2, 1094, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (460, 2, 1100, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (467, 2, 1107, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (476, 2, 1117, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (477, 2, 100, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (478, 2, 101, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (479, 2, 102, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (480, 2, 1126, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (481, 2, 103, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (483, 2, 104, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (485, 2, 105, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (488, 2, 107, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (490, 2, 108, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (492, 2, 109, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (498, 2, 1138, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (523, 2, 1224, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (524, 2, 1225, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (541, 2, 500, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (543, 2, 501, '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:09:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (675, 2, 2, '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (689, 2, 1077, '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (690, 2, 1078, '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (692, 2, 1083, '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (693, 2, 1084, '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (699, 2, 1090, '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (703, 2, 106, '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (704, 2, 110, '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (705, 2, 111, '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (706, 2, 112, '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (707, 2, 113, '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 13:16:57', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1296, 110, 1, '110', to_date('2022-02-23 00:23:55', 'SYYYY-MM-DD HH24:MI:SS'), '110', to_date('2022-02-23 00:23:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1578, 111, 1, '1', to_date('2022-03-07 21:37:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-07 21:37:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1604, 101, 1216, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1605, 101, 1217, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1606, 101, 1218, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1607, 101, 1219, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1608, 101, 1220, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1609, 101, 1221, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1610, 101, 5, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1611, 101, 1222, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1612, 101, 1118, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1613, 101, 1119, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1614, 101, 1120, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1615, 101, 1185, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1616, 101, 1186, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1617, 101, 1187, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1618, 101, 1188, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1619, 101, 1189, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1620, 101, 1190, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1621, 101, 1191, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1622, 101, 1192, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1623, 101, 1193, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1624, 101, 1194, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1625, 101, 1195, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1626, 101, 1196, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1627, 101, 1197, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1628, 101, 1198, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1629, 101, 1199, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1630, 101, 1200, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1631, 101, 1201, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1632, 101, 1202, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1633, 101, 1207, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1634, 101, 1208, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1635, 101, 1209, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1636, 101, 1210, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1637, 101, 1211, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1638, 101, 1212, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1639, 101, 1213, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1640, 101, 1215, '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:45:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1641, 101, 2, '1', to_date('2022-04-01 22:21:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:24', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1642, 101, 1031, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1643, 101, 1032, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1644, 101, 1033, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1645, 101, 1034, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1646, 101, 1035, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1647, 101, 1050, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1648, 101, 1051, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1649, 101, 1052, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1650, 101, 1053, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1651, 101, 1054, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1652, 101, 1056, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1653, 101, 1057, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1654, 101, 1058, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1655, 101, 1059, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1656, 101, 1060, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1657, 101, 1066, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1658, 101, 1067, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1659, 101, 1070, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1664, 101, 1075, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1666, 101, 1077, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1667, 101, 1078, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1668, 101, 1082, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1669, 101, 1083, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1670, 101, 1084, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1671, 101, 1085, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1672, 101, 1086, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1673, 101, 1087, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1674, 101, 1088, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1675, 101, 1089, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1679, 101, 1237, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1680, 101, 1238, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1681, 101, 1239, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1682, 101, 1240, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1683, 101, 1241, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1684, 101, 1242, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1685, 101, 1243, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1687, 101, 106, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1688, 101, 110, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1689, 101, 111, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1690, 101, 112, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1691, 101, 113, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1692, 101, 114, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1693, 101, 115, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1694, 101, 116, '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-04-01 22:21:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1729, 109, 100, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1730, 109, 101, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1731, 109, 1063, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1732, 109, 1064, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1733, 109, 1001, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1734, 109, 1065, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1735, 109, 1002, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1736, 109, 1003, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1737, 109, 1004, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1738, 109, 1005, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1739, 109, 1006, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1740, 109, 1007, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1741, 109, 1008, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1742, 109, 1009, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1743, 109, 1010, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1744, 109, 1011, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1745, 109, 1012, '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1746, 111, 100, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1747, 111, 101, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1748, 111, 1063, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1749, 111, 1064, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1750, 111, 1001, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1751, 111, 1065, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1752, 111, 1002, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1753, 111, 1003, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1754, 111, 1004, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1755, 111, 1005, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1756, 111, 1006, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1757, 111, 1007, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1758, 111, 1008, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1759, 111, 1009, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1760, 111, 1010, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1761, 111, 1011, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1762, 111, 1012, '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1763, 109, 100, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1764, 109, 101, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1765, 109, 1063, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1766, 109, 1064, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1767, 109, 1001, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1768, 109, 1065, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1769, 109, 1002, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1770, 109, 1003, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1771, 109, 1004, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1772, 109, 1005, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1773, 109, 1006, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1774, 109, 1007, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1775, 109, 1008, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1776, 109, 1009, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1777, 109, 1010, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1778, 109, 1011, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1779, 109, 1012, '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1780, 111, 100, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1781, 111, 101, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1782, 111, 1063, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1783, 111, 1064, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1784, 111, 1001, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1785, 111, 1065, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1786, 111, 1002, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1787, 111, 1003, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1788, 111, 1004, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1789, 111, 1005, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1790, 111, 1006, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1791, 111, 1007, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1792, 111, 1008, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1793, 111, 1009, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1794, 111, 1010, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1795, 111, 1011, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1796, 111, 1012, '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:54', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1797, 109, 100, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1798, 109, 101, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1799, 109, 1063, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1800, 109, 1064, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1801, 109, 1001, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1802, 109, 1065, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1803, 109, 1002, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1804, 109, 1003, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1805, 109, 1004, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1806, 109, 1005, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1807, 109, 1006, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1808, 109, 1007, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1809, 109, 1008, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1810, 109, 1009, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1811, 109, 1010, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1812, 109, 1011, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1813, 109, 1012, '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:55', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1814, 111, 100, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1815, 111, 101, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1816, 111, 1063, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1817, 111, 1064, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1818, 111, 1001, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1819, 111, 1065, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1820, 111, 1002, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1821, 111, 1003, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1822, 111, 1004, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1823, 111, 1005, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1824, 111, 1006, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1825, 111, 1007, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1826, 111, 1008, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1827, 111, 1009, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1828, 111, 1010, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1829, 111, 1011, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1830, 111, 1012, '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:08:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1831, 109, 103, '1', to_date('2022-09-21 22:43:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:43:23', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1832, 109, 1017, '1', to_date('2022-09-21 22:43:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:43:23', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1833, 109, 1018, '1', to_date('2022-09-21 22:43:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:43:23', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1834, 109, 1019, '1', to_date('2022-09-21 22:43:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:43:23', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1835, 109, 1020, '1', to_date('2022-09-21 22:43:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:43:23', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1836, 111, 103, '1', to_date('2022-09-21 22:43:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:43:24', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1837, 111, 1017, '1', to_date('2022-09-21 22:43:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:43:24', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1838, 111, 1018, '1', to_date('2022-09-21 22:43:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:43:24', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1839, 111, 1019, '1', to_date('2022-09-21 22:43:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:43:24', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1840, 111, 1020, '1', to_date('2022-09-21 22:43:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:43:24', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1841, 109, 1036, '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1842, 109, 1037, '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1843, 109, 1038, '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1844, 109, 1039, '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1845, 109, 107, '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1846, 111, 1036, '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1847, 111, 1037, '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1848, 111, 1038, '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1849, 111, 1039, '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1850, 111, 107, '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-09-21 22:48:13', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1991, 2, 1024, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1992, 2, 1025, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1993, 2, 1026, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1994, 2, 1027, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1995, 2, 1028, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1996, 2, 1029, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1997, 2, 1030, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1998, 2, 1031, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1999, 2, 1032, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2000, 2, 1033, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2001, 2, 1034, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2002, 2, 1035, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2003, 2, 1036, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2004, 2, 1037, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2005, 2, 1038, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2006, 2, 1039, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2007, 2, 1040, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2008, 2, 1042, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2009, 2, 1043, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2010, 2, 1045, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2011, 2, 1046, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2012, 2, 1048, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2013, 2, 1050, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2014, 2, 1051, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2015, 2, 1052, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2016, 2, 1053, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2017, 2, 1054, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2018, 2, 1056, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2019, 2, 1057, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2020, 2, 1058, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2021, 2, 2083, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2022, 2, 1059, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2023, 2, 1060, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2024, 2, 1063, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2025, 2, 1064, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2026, 2, 1065, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2027, 2, 1066, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2028, 2, 1067, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2029, 2, 1070, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2034, 2, 1075, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2036, 2, 1082, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2037, 2, 1085, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2038, 2, 1086, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2039, 2, 1087, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2040, 2, 1088, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2041, 2, 1089, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2042, 2, 1091, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2043, 2, 1092, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2044, 2, 1095, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2045, 2, 1096, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2046, 2, 1097, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2047, 2, 1098, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2048, 2, 1101, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2049, 2, 1102, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2050, 2, 1103, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2051, 2, 1104, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2052, 2, 1105, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2053, 2, 1106, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2054, 2, 1108, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2055, 2, 1109, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2061, 2, 1127, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2062, 2, 1128, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2063, 2, 1129, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2064, 2, 1130, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2066, 2, 1132, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2067, 2, 1133, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2068, 2, 1134, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2069, 2, 1135, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2070, 2, 1136, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2071, 2, 1137, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2072, 2, 114, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2073, 2, 1139, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2074, 2, 115, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2075, 2, 1140, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2076, 2, 116, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2077, 2, 1141, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2078, 2, 1142, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2079, 2, 1143, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2080, 2, 1150, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2081, 2, 1161, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2082, 2, 1162, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2083, 2, 1163, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2084, 2, 1164, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2085, 2, 1165, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2086, 2, 1166, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2087, 2, 1173, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2088, 2, 1174, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2089, 2, 1175, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2090, 2, 1176, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2091, 2, 1177, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2092, 2, 1178, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2099, 2, 1226, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2100, 2, 1227, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2101, 2, 1228, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2102, 2, 1229, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2103, 2, 1237, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2104, 2, 1238, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2105, 2, 1239, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2106, 2, 1240, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2107, 2, 1241, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2108, 2, 1242, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2109, 2, 1243, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2116, 2, 1254, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2117, 2, 1255, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2118, 2, 1256, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2119, 2, 1257, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2120, 2, 1258, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2121, 2, 1259, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2122, 2, 1260, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2123, 2, 1261, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2124, 2, 1263, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2125, 2, 1264, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2126, 2, 1265, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2127, 2, 1266, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2128, 2, 1267, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2129, 2, 1001, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2130, 2, 1002, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2131, 2, 1003, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2132, 2, 1004, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2133, 2, 1005, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2134, 2, 1006, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2135, 2, 1007, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2136, 2, 1008, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2137, 2, 1009, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2138, 2, 1010, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2139, 2, 1011, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2140, 2, 1012, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2141, 2, 1013, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2142, 2, 1014, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2143, 2, 1015, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2144, 2, 1016, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2145, 2, 1017, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2146, 2, 1018, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2147, 2, 1019, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2148, 2, 1020, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2149, 2, 1021, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2150, 2, 1022, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2151, 2, 1023, '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:52', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2152, 2, 1281, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2153, 2, 1282, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2154, 2, 2000, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2155, 2, 2002, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2156, 2, 2003, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2157, 2, 2004, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2158, 2, 2005, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2159, 2, 2006, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2160, 2, 2008, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2161, 2, 2009, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2162, 2, 2010, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2163, 2, 2011, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2164, 2, 2012, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2170, 2, 2019, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2171, 2, 2020, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2172, 2, 2021, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2173, 2, 2022, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2174, 2, 2023, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2175, 2, 2025, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2177, 2, 2027, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2178, 2, 2028, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2179, 2, 2029, '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:42:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2180, 2, 2014, '1', to_date('2023-01-25 08:43:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:43:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2181, 2, 2015, '1', to_date('2023-01-25 08:43:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:43:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2182, 2, 2016, '1', to_date('2023-01-25 08:43:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:43:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2183, 2, 2017, '1', to_date('2023-01-25 08:43:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:43:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2184, 2, 2018, '1', to_date('2023-01-25 08:43:12', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-01-25 08:43:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2188, 101, 1024, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2189, 101, 1, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2190, 101, 1025, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2191, 101, 1026, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2192, 101, 1027, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2193, 101, 1028, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2194, 101, 1029, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2195, 101, 1030, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2196, 101, 1036, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2197, 101, 1037, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2198, 101, 1038, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2199, 101, 1039, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2200, 101, 1040, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2201, 101, 1042, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2202, 101, 1043, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2203, 101, 1045, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2204, 101, 1046, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2205, 101, 1048, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2206, 101, 2083, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2207, 101, 1063, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2208, 101, 1064, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2209, 101, 1065, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2210, 101, 1093, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2211, 101, 1094, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2212, 101, 1095, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2213, 101, 1096, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2214, 101, 1097, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2215, 101, 1098, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2216, 101, 1100, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2217, 101, 1101, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2218, 101, 1102, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2219, 101, 1103, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2220, 101, 1104, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2221, 101, 1105, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2222, 101, 1106, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2223, 101, 2130, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2224, 101, 1107, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2225, 101, 2131, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2226, 101, 1108, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2227, 101, 2132, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2228, 101, 1109, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2229, 101, 2133, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2230, 101, 2134, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2232, 101, 2135, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2234, 101, 2136, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2236, 101, 2137, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2238, 101, 2138, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2240, 101, 2139, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2242, 101, 2140, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2243, 101, 2141, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2244, 101, 2142, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2245, 101, 2143, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2246, 101, 2144, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2247, 101, 2145, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2248, 101, 2146, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2249, 101, 2147, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2250, 101, 100, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2251, 101, 2148, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2252, 101, 101, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2253, 101, 2149, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2254, 101, 102, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2255, 101, 2150, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2256, 101, 103, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2257, 101, 2151, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2258, 101, 104, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2259, 101, 2152, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2260, 101, 105, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2261, 101, 107, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2262, 101, 108, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2263, 101, 109, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2264, 101, 1138, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2265, 101, 1139, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2266, 101, 1140, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2267, 101, 1141, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2268, 101, 1142, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2269, 101, 1143, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2270, 101, 1224, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2271, 101, 1225, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2272, 101, 1226, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2273, 101, 1227, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2274, 101, 1228, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2275, 101, 1229, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2282, 101, 1261, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2283, 101, 1263, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2284, 101, 1264, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2285, 101, 1265, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2286, 101, 1266, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2287, 101, 1267, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2288, 101, 1001, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2289, 101, 1002, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2290, 101, 1003, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2291, 101, 1004, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2292, 101, 1005, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2293, 101, 1006, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2294, 101, 1007, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2295, 101, 1008, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2296, 101, 1009, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2297, 101, 1010, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2298, 101, 1011, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2299, 101, 1012, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2300, 101, 500, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2301, 101, 1013, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2302, 101, 501, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2303, 101, 1014, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2304, 101, 1015, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2305, 101, 1016, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2306, 101, 1017, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2307, 101, 1018, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2308, 101, 1019, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2309, 101, 1020, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2310, 101, 1021, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2311, 101, 1022, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2312, 101, 1023, '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-02-09 23:49:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2929, 109, 1224, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2930, 109, 1225, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2931, 109, 1226, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2932, 109, 1227, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2933, 109, 1228, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2934, 109, 1229, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2935, 109, 1138, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2936, 109, 1139, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2937, 109, 1140, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2938, 109, 1141, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2939, 109, 1142, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2940, 109, 1143, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2941, 111, 1224, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2942, 111, 1225, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2943, 111, 1226, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2944, 111, 1227, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2945, 111, 1228, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2946, 111, 1229, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2947, 111, 1138, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2948, 111, 1139, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2949, 111, 1140, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2950, 111, 1141, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2951, 111, 1142, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2952, 111, 1143, '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:19:40', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2993, 109, 2, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2994, 109, 1031, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2995, 109, 1032, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2996, 109, 1033, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2997, 109, 1034, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2998, 109, 1035, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2999, 109, 1050, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3000, 109, 1051, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3001, 109, 1052, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3002, 109, 1053, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3003, 109, 1054, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3004, 109, 1056, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3005, 109, 1057, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3006, 109, 1058, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3007, 109, 1059, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3008, 109, 1060, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3009, 109, 1066, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3010, 109, 1067, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3011, 109, 1070, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3012, 109, 1075, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3013, 109, 1076, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3014, 109, 1077, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3015, 109, 1078, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3016, 109, 1082, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3017, 109, 1083, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3018, 109, 1084, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3019, 109, 1085, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3020, 109, 1086, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3021, 109, 1087, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3022, 109, 1088, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3023, 109, 1089, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3024, 109, 1090, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3025, 109, 1091, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3026, 109, 1092, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3027, 109, 106, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3028, 109, 110, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3029, 109, 111, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3030, 109, 112, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3031, 109, 113, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3032, 109, 114, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3033, 109, 115, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3034, 109, 116, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3035, 109, 2472, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3036, 109, 2478, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3037, 109, 2479, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3038, 109, 2480, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3039, 109, 2481, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3040, 109, 2482, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3041, 109, 2483, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3042, 109, 2484, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3043, 109, 2485, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3044, 109, 2486, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3045, 109, 2487, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3046, 109, 2488, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3047, 109, 2489, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3048, 109, 2490, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3049, 109, 2491, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3050, 109, 2492, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3051, 109, 2493, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3052, 109, 2494, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3053, 109, 2495, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3054, 109, 2497, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3055, 109, 1237, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3056, 109, 1238, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3057, 109, 1239, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3058, 109, 1240, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3059, 109, 1241, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3060, 109, 1242, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3061, 109, 1243, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3062, 109, 2525, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3063, 109, 1255, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3064, 109, 1256, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3065, 109, 1257, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3066, 109, 1258, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3067, 109, 1259, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3068, 109, 1260, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3069, 111, 2, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3070, 111, 1031, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3071, 111, 1032, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3072, 111, 1033, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3073, 111, 1034, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3074, 111, 1035, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3075, 111, 1050, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3076, 111, 1051, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3077, 111, 1052, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3078, 111, 1053, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3079, 111, 1054, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3080, 111, 1056, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3081, 111, 1057, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3082, 111, 1058, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3083, 111, 1059, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3084, 111, 1060, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3085, 111, 1066, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3086, 111, 1067, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3087, 111, 1070, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3088, 111, 1075, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3089, 111, 1076, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3090, 111, 1077, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3091, 111, 1078, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3092, 111, 1082, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3093, 111, 1083, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3094, 111, 1084, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3095, 111, 1085, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3096, 111, 1086, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3097, 111, 1087, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3098, 111, 1088, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3099, 111, 1089, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3100, 111, 1090, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3101, 111, 1091, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3102, 111, 1092, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3103, 111, 106, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3104, 111, 110, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3105, 111, 111, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3106, 111, 112, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3107, 111, 113, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3108, 111, 114, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3109, 111, 115, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3110, 111, 116, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3111, 111, 2472, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3112, 111, 2478, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3113, 111, 2479, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3114, 111, 2480, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3115, 111, 2481, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3116, 111, 2482, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3117, 111, 2483, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3118, 111, 2484, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3119, 111, 2485, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3120, 111, 2486, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3121, 111, 2487, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3122, 111, 2488, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3123, 111, 2489, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3124, 111, 2490, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3125, 111, 2491, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3126, 111, 2492, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3127, 111, 2493, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3128, 111, 2494, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3129, 111, 2495, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3130, 111, 2497, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3131, 111, 1237, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3132, 111, 1238, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3133, 111, 1239, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3134, 111, 1240, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3135, 111, 1241, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3136, 111, 1242, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3137, 111, 1243, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3138, 111, 2525, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3139, 111, 1255, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3140, 111, 1256, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3141, 111, 1257, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3142, 111, 1258, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3143, 111, 1259, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3144, 111, 1260, '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 23:41:02', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3221, 109, 102, '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3222, 109, 1013, '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3223, 109, 1014, '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3224, 109, 1015, '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3225, 109, 1016, '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3226, 111, 102, '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3227, 111, 1013, '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3228, 111, 1014, '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3229, 111, 1015, '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3230, 111, 1016, '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-30 11:42:36', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4163, 109, 5, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4164, 109, 1118, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4165, 109, 1119, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4166, 109, 1120, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4167, 109, 2713, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4168, 109, 2714, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4169, 109, 2715, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4170, 109, 2716, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4171, 109, 2717, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4172, 109, 2718, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4173, 109, 2720, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4174, 109, 1185, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4175, 109, 2721, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4176, 109, 1186, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4177, 109, 2722, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4178, 109, 1187, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4179, 109, 2723, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4180, 109, 1188, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4181, 109, 2724, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4182, 109, 1189, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4183, 109, 2725, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4184, 109, 1190, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4185, 109, 2726, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4186, 109, 1191, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4187, 109, 2727, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4188, 109, 1192, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4189, 109, 2728, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4190, 109, 1193, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4191, 109, 2729, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4192, 109, 1194, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4193, 109, 2730, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4194, 109, 1195, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4195, 109, 2731, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4196, 109, 1196, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4197, 109, 2732, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4198, 109, 1197, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4199, 109, 2733, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4200, 109, 1198, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4201, 109, 2734, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4202, 109, 1199, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4203, 109, 2735, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4204, 109, 1200, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4205, 109, 1201, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4206, 109, 1202, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4207, 109, 1207, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4208, 109, 1208, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4209, 109, 1209, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4210, 109, 1210, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4211, 109, 1211, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4212, 109, 1212, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4213, 109, 1213, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4214, 109, 1215, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4215, 109, 1216, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4216, 109, 1217, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4217, 109, 1218, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4218, 109, 1219, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4219, 109, 1220, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4220, 109, 1221, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4221, 109, 1222, '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4222, 111, 5, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4223, 111, 1118, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4224, 111, 1119, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4225, 111, 1120, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4226, 111, 2713, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4227, 111, 2714, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4228, 111, 2715, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4229, 111, 2716, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4230, 111, 2717, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4231, 111, 2718, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4232, 111, 2720, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4233, 111, 1185, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4234, 111, 2721, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4235, 111, 1186, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4236, 111, 2722, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4237, 111, 1187, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4238, 111, 2723, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4239, 111, 1188, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4240, 111, 2724, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4241, 111, 1189, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4242, 111, 2725, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4243, 111, 1190, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4244, 111, 2726, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4245, 111, 1191, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4246, 111, 2727, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4247, 111, 1192, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4248, 111, 2728, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4249, 111, 1193, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4250, 111, 2729, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4251, 111, 1194, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4252, 111, 2730, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4253, 111, 1195, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4254, 111, 2731, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4255, 111, 1196, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4256, 111, 2732, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4257, 111, 1197, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4258, 111, 2733, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4259, 111, 1198, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4260, 111, 2734, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4261, 111, 1199, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4262, 111, 2735, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4263, 111, 1200, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4264, 111, 1201, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4265, 111, 1202, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4266, 111, 1207, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4267, 111, 1208, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4268, 111, 1209, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4269, 111, 1210, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4270, 111, 1211, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4271, 111, 1212, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4272, 111, 1213, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4273, 111, 1215, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4274, 111, 1216, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4275, 111, 1217, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4276, 111, 1218, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4277, 111, 1219, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4278, 111, 1220, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4279, 111, 1221, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4280, 111, 1222, '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:18', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5777, 101, 2739, '1', to_date('2024-04-30 09:38:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-30 09:38:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5778, 101, 2740, '1', to_date('2024-04-30 09:38:37', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-30 09:38:37', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_role_menu_seq + START WITH 5779; + +-- ---------------------------- +-- Table structure for system_sms_channel +-- ---------------------------- +CREATE TABLE system_sms_channel +( + id number NOT NULL, + signature varchar2(12) NOT NULL, + code varchar2(63) NOT NULL, + status smallint NOT NULL, + remark varchar2(255) DEFAULT NULL NULL, + api_key varchar2(128) NOT NULL, + api_secret varchar2(128) DEFAULT NULL NULL, + callback_url varchar2(255) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE system_sms_channel + ADD CONSTRAINT pk_system_sms_channel PRIMARY KEY (id); + +COMMENT ON COLUMN system_sms_channel.id IS '编号'; +COMMENT ON COLUMN system_sms_channel.signature IS '短信签名'; +COMMENT ON COLUMN system_sms_channel.code IS '渠道编码'; +COMMENT ON COLUMN system_sms_channel.status IS '开启状态'; +COMMENT ON COLUMN system_sms_channel.remark IS '备注'; +COMMENT ON COLUMN system_sms_channel.api_key IS '短信 API 的账号'; +COMMENT ON COLUMN system_sms_channel.api_secret IS '短信 API 的秘钥'; +COMMENT ON COLUMN system_sms_channel.callback_url IS '短信发送回调 URL'; +COMMENT ON COLUMN system_sms_channel.creator IS '创建者'; +COMMENT ON COLUMN system_sms_channel.create_time IS '创建时间'; +COMMENT ON COLUMN system_sms_channel.updater IS '更新者'; +COMMENT ON COLUMN system_sms_channel.update_time IS '更新时间'; +COMMENT ON COLUMN system_sms_channel.deleted IS '是否删除'; +COMMENT ON TABLE system_sms_channel IS '短信渠道'; + +-- ---------------------------- +-- Records of system_sms_channel +-- ---------------------------- +-- @formatter:off +INSERT INTO system_sms_channel (id, signature, code, status, remark, api_key, api_secret, callback_url, creator, create_time, updater, update_time, deleted) VALUES (2, 'Ballcat', 'ALIYUN', 0, '你要改哦,只有我可以用!!!!', 'LTAI5tCnKso2uG3kJ5gRav88', 'fGJ5SNXL7P1NHNRmJ7DJaMJGPyE55C', NULL, '', to_date('2021-03-31 11:53:10', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 22:10:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_sms_channel (id, signature, code, status, remark, api_key, api_secret, callback_url, creator, create_time, updater, update_time, deleted) VALUES (4, '测试渠道', 'DEBUG_DING_TALK', 0, '123', '696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859', 'SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67', NULL, '1', to_date('2021-04-13 00:23:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-27 20:29:49', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_sms_channel (id, signature, code, status, remark, api_key, api_secret, callback_url, creator, create_time, updater, update_time, deleted) VALUES (6, '测试演示', 'DEBUG_DING_TALK', 0, '仅测试', '696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859', 'SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67', NULL, '1', to_date('2022-04-10 23:07:59', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 22:10:08', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_sms_channel_seq + START WITH 7; + +-- ---------------------------- +-- Table structure for system_sms_code +-- ---------------------------- +CREATE TABLE system_sms_code +( + id number NOT NULL, + mobile varchar2(11) NOT NULL, + code varchar2(6) NOT NULL, + create_ip varchar2(15) NOT NULL, + scene smallint NOT NULL, + today_index smallint NOT NULL, + used smallint NOT NULL, + used_time date DEFAULT NULL NULL, + used_ip varchar2(255) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_sms_code + ADD CONSTRAINT pk_system_sms_code PRIMARY KEY (id); + +CREATE INDEX idx_system_sms_code_01 ON system_sms_code (mobile); + +COMMENT ON COLUMN system_sms_code.id IS '编号'; +COMMENT ON COLUMN system_sms_code.mobile IS '手机号'; +COMMENT ON COLUMN system_sms_code.code IS '验证码'; +COMMENT ON COLUMN system_sms_code.create_ip IS '创建 IP'; +COMMENT ON COLUMN system_sms_code.scene IS '发送场景'; +COMMENT ON COLUMN system_sms_code.today_index IS '今日发送的第几条'; +COMMENT ON COLUMN system_sms_code.used IS '是否使用'; +COMMENT ON COLUMN system_sms_code.used_time IS '使用时间'; +COMMENT ON COLUMN system_sms_code.used_ip IS '使用 IP'; +COMMENT ON COLUMN system_sms_code.creator IS '创建者'; +COMMENT ON COLUMN system_sms_code.create_time IS '创建时间'; +COMMENT ON COLUMN system_sms_code.updater IS '更新者'; +COMMENT ON COLUMN system_sms_code.update_time IS '更新时间'; +COMMENT ON COLUMN system_sms_code.deleted IS '是否删除'; +COMMENT ON COLUMN system_sms_code.tenant_id IS '租户编号'; +COMMENT ON COLUMN system_sms_code.idx_mobile IS '手机号'; +COMMENT ON TABLE system_sms_code IS '手机验证码'; + +CREATE SEQUENCE system_sms_code_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for system_sms_log +-- ---------------------------- +CREATE TABLE system_sms_log +( + id number NOT NULL, + channel_id number NOT NULL, + channel_code varchar2(63) NOT NULL, + template_id number NOT NULL, + template_code varchar2(63) NOT NULL, + template_type smallint NOT NULL, + template_content varchar2(255) NOT NULL, + template_params varchar2(255) NOT NULL, + api_template_id varchar2(63) NOT NULL, + mobile varchar2(11) NOT NULL, + user_id number DEFAULT NULL NULL, + user_type smallint DEFAULT NULL NULL, + send_status smallint DEFAULT 0 NOT NULL, + send_time date DEFAULT NULL NULL, + api_send_code varchar2(63) DEFAULT NULL NULL, + api_send_msg varchar2(255) DEFAULT NULL NULL, + api_request_id varchar2(255) DEFAULT NULL NULL, + api_serial_no varchar2(255) DEFAULT NULL NULL, + receive_status smallint DEFAULT 0 NOT NULL, + receive_time date DEFAULT NULL NULL, + api_receive_code varchar2(63) DEFAULT NULL NULL, + api_receive_msg varchar2(255) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE system_sms_log + ADD CONSTRAINT pk_system_sms_log PRIMARY KEY (id); + +COMMENT ON COLUMN system_sms_log.id IS '编号'; +COMMENT ON COLUMN system_sms_log.channel_id IS '短信渠道编号'; +COMMENT ON COLUMN system_sms_log.channel_code IS '短信渠道编码'; +COMMENT ON COLUMN system_sms_log.template_id IS '模板编号'; +COMMENT ON COLUMN system_sms_log.template_code IS '模板编码'; +COMMENT ON COLUMN system_sms_log.template_type IS '短信类型'; +COMMENT ON COLUMN system_sms_log.template_content IS '短信内容'; +COMMENT ON COLUMN system_sms_log.template_params IS '短信参数'; +COMMENT ON COLUMN system_sms_log.api_template_id IS '短信 API 的模板编号'; +COMMENT ON COLUMN system_sms_log.mobile IS '手机号'; +COMMENT ON COLUMN system_sms_log.user_id IS '用户编号'; +COMMENT ON COLUMN system_sms_log.user_type IS '用户类型'; +COMMENT ON COLUMN system_sms_log.send_status IS '发送状态'; +COMMENT ON COLUMN system_sms_log.send_time IS '发送时间'; +COMMENT ON COLUMN system_sms_log.api_send_code IS '短信 API 发送结果的编码'; +COMMENT ON COLUMN system_sms_log.api_send_msg IS '短信 API 发送失败的提示'; +COMMENT ON COLUMN system_sms_log.api_request_id IS '短信 API 发送返回的唯一请求 ID'; +COMMENT ON COLUMN system_sms_log.api_serial_no IS '短信 API 发送返回的序号'; +COMMENT ON COLUMN system_sms_log.receive_status IS '接收状态'; +COMMENT ON COLUMN system_sms_log.receive_time IS '接收时间'; +COMMENT ON COLUMN system_sms_log.api_receive_code IS 'API 接收结果的编码'; +COMMENT ON COLUMN system_sms_log.api_receive_msg IS 'API 接收结果的说明'; +COMMENT ON COLUMN system_sms_log.creator IS '创建者'; +COMMENT ON COLUMN system_sms_log.create_time IS '创建时间'; +COMMENT ON COLUMN system_sms_log.updater IS '更新者'; +COMMENT ON COLUMN system_sms_log.update_time IS '更新时间'; +COMMENT ON COLUMN system_sms_log.deleted IS '是否删除'; +COMMENT ON TABLE system_sms_log IS '短信日志'; + +CREATE SEQUENCE system_sms_log_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for system_sms_template +-- ---------------------------- +CREATE TABLE system_sms_template +( + id number NOT NULL, + type smallint NOT NULL, + status smallint NOT NULL, + code varchar2(63) NOT NULL, + name varchar2(63) NOT NULL, + content varchar2(255) NOT NULL, + params varchar2(255) NOT NULL, + remark varchar2(255) DEFAULT NULL NULL, + api_template_id varchar2(63) NOT NULL, + channel_id number NOT NULL, + channel_code varchar2(63) NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE system_sms_template + ADD CONSTRAINT pk_system_sms_template PRIMARY KEY (id); + +COMMENT ON COLUMN system_sms_template.id IS '编号'; +COMMENT ON COLUMN system_sms_template.type IS '模板类型'; +COMMENT ON COLUMN system_sms_template.status IS '开启状态'; +COMMENT ON COLUMN system_sms_template.code IS '模板编码'; +COMMENT ON COLUMN system_sms_template.name IS '模板名称'; +COMMENT ON COLUMN system_sms_template.content IS '模板内容'; +COMMENT ON COLUMN system_sms_template.params IS '参数数组'; +COMMENT ON COLUMN system_sms_template.remark IS '备注'; +COMMENT ON COLUMN system_sms_template.api_template_id IS '短信 API 的模板编号'; +COMMENT ON COLUMN system_sms_template.channel_id IS '短信渠道编号'; +COMMENT ON COLUMN system_sms_template.channel_code IS '短信渠道编码'; +COMMENT ON COLUMN system_sms_template.creator IS '创建者'; +COMMENT ON COLUMN system_sms_template.create_time IS '创建时间'; +COMMENT ON COLUMN system_sms_template.updater IS '更新者'; +COMMENT ON COLUMN system_sms_template.update_time IS '更新时间'; +COMMENT ON COLUMN system_sms_template.deleted IS '是否删除'; +COMMENT ON TABLE system_sms_template IS '短信模板'; + +-- ---------------------------- +-- Records of system_sms_template +-- ---------------------------- +-- @formatter:off +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (2, 1, 0, 'test_01', '测试验证码短信', '正在进行登录操作{operation},您的验证码是{code}', '["operation","code"]', '测试备注', '4383920', 6, 'DEBUG_DING_TALK', '', to_date('2021-03-31 10:49:38', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 22:32:47', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (3, 1, 0, 'test_02', '公告通知', '您的验证码{code},该验证码5分钟内有效,请勿泄漏于他人!', '["code"]', NULL, 'SMS_207945135', 2, 'ALIYUN', '', to_date('2021-03-31 11:56:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2021-04-10 01:22:02', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (6, 3, 0, 'test-01', '测试模板', '哈哈哈 {name}', '["name"]', 'f哈哈哈', '4383920', 6, 'DEBUG_DING_TALK', '1', to_date('2021-04-10 01:07:21', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 21:26:09', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (7, 3, 0, 'test-04', '测试下', '老鸡{name},牛逼{code}', '["name","code"]', '哈哈哈哈', 'suibian', 4, 'DEBUG_DING_TALK', '1', to_date('2021-04-13 00:29:53', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 22:35:34', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (8, 1, 0, 'user-sms-login', '前台用户短信登录', '您的验证码是{code}', '["code"]', NULL, '4372216', 6, 'DEBUG_DING_TALK', '1', to_date('2021-10-11 08:10:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-12-10 21:25:59', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (9, 2, 0, 'bpm_task_assigned', '【工作流】任务被分配', '您收到了一条新的待办任务:{processInstanceName}-{taskName},申请人:{startUserNickname},处理链接:{detailUrl}', '["processInstanceName","taskName","startUserNickname","detailUrl"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', to_date('2022-01-21 22:31:19', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-01-22 00:03:36', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (10, 2, 0, 'bpm_process_instance_reject', '【工作流】流程被不通过', '您的流程被审批不通过:{processInstanceName},原因:{reason},查看链接:{detailUrl}', '["processInstanceName","reason","detailUrl"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', to_date('2022-01-22 00:03:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-01 12:33:14', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (11, 2, 0, 'bpm_process_instance_approve', '【工作流】流程被通过', '您的流程被审批通过:{processInstanceName},查看链接:{detailUrl}', '["processInstanceName","detailUrl"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', to_date('2022-01-22 00:04:31', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-27 20:32:21', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (12, 2, 0, 'demo', '演示模板', '我就是测试一下下', '[]', NULL, 'biubiubiu', 6, 'DEBUG_DING_TALK', '1', to_date('2022-04-10 23:22:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-03-24 23:45:07', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (14, 1, 0, 'user-update-mobile', '会员用户 - 修改手机', '您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', '["code"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', to_date('2023-08-19 18:58:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-19 11:34:04', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (15, 1, 0, 'user-update-password', '会员用户 - 修改密码', '您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', '["code"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', to_date('2023-08-19 18:58:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-08-19 11:34:18', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (16, 1, 0, 'user-reset-password', '会员用户 - 重置密码', '您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', '["code"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', to_date('2023-08-19 18:58:01', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-02 22:35:27', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_sms_template_seq + START WITH 17; + +-- ---------------------------- +-- Table structure for system_social_client +-- ---------------------------- +CREATE TABLE system_social_client +( + id number NOT NULL, + name varchar2(255) NOT NULL, + social_type smallint NOT NULL, + user_type smallint NOT NULL, + client_id varchar2(255) NOT NULL, + client_secret varchar2(255) NOT NULL, + agent_id varchar2(255) DEFAULT NULL NULL, + status smallint NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_social_client + ADD CONSTRAINT pk_system_social_client PRIMARY KEY (id); + +COMMENT ON COLUMN system_social_client.id IS '编号'; +COMMENT ON COLUMN system_social_client.name IS '应用名'; +COMMENT ON COLUMN system_social_client.social_type IS '社交平台的类型'; +COMMENT ON COLUMN system_social_client.user_type IS '用户类型'; +COMMENT ON COLUMN system_social_client.client_id IS '客户端编号'; +COMMENT ON COLUMN system_social_client.client_secret IS '客户端密钥'; +COMMENT ON COLUMN system_social_client.agent_id IS '代理编号'; +COMMENT ON COLUMN system_social_client.status IS '状态'; +COMMENT ON COLUMN system_social_client.creator IS '创建者'; +COMMENT ON COLUMN system_social_client.create_time IS '创建时间'; +COMMENT ON COLUMN system_social_client.updater IS '更新者'; +COMMENT ON COLUMN system_social_client.update_time IS '更新时间'; +COMMENT ON COLUMN system_social_client.deleted IS '是否删除'; +COMMENT ON COLUMN system_social_client.tenant_id IS '租户编号'; +COMMENT ON TABLE system_social_client IS '社交客户端表'; + +-- ---------------------------- +-- Records of system_social_client +-- ---------------------------- +-- @formatter:off +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '钉钉', 20, 2, 'dingvrnreaje3yqvzhxg', 'i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI', NULL, 0, '', to_date('2023-10-18 11:21:18', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-20 21:28:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', 1); +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '钉钉(王土豆)', 20, 2, 'dingtsu9hpepjkbmthhw', 'FP_bnSq_HAHKCSncmJjw5hxhnzs6vaVDSZZn3egj6rdqTQ_hu5tQVJyLMpgCakdP', NULL, 0, '', to_date('2023-10-18 11:21:18', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2023-12-20 21:28:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', 121); +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, '微信公众号', 31, 1, 'wx5b23ba7a5589ecbb', '2a7b3b20c537e52e74afd395eb85f61f', NULL, 0, '', to_date('2023-10-18 16:07:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-20 21:28:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', 1); +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (43, '微信小程序', 34, 1, 'wx63c280fe3248a3e7', '6f270509224a7ae1296bbf1c8cb97aed', NULL, 0, '', to_date('2023-10-19 13:37:41', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-12-20 21:28:25', 'SYYYY-MM-DD HH24:MI:SS'), '1', 1); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_social_client_seq + START WITH 44; + +-- ---------------------------- +-- Table structure for system_social_user +-- ---------------------------- +CREATE TABLE system_social_user +( + id number NOT NULL, + type smallint NOT NULL, + openid varchar2(32) NOT NULL, + token varchar2(256) DEFAULT NULL NULL, + raw_token_info varchar2(1024) NOT NULL, + nickname varchar2(32) NOT NULL, + avatar varchar2(255) DEFAULT NULL NULL, + raw_user_info varchar2(1024) NOT NULL, + code varchar2(256) NOT NULL, + state varchar2(256) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_social_user + ADD CONSTRAINT pk_system_social_user PRIMARY KEY (id); + +COMMENT ON COLUMN system_social_user.id IS '主键(自增策略)'; +COMMENT ON COLUMN system_social_user.type IS '社交平台的类型'; +COMMENT ON COLUMN system_social_user.openid IS '社交 openid'; +COMMENT ON COLUMN system_social_user.token IS '社交 token'; +COMMENT ON COLUMN system_social_user.raw_token_info IS '原始 Token 数据,一般是 JSON 格式'; +COMMENT ON COLUMN system_social_user.nickname IS '用户昵称'; +COMMENT ON COLUMN system_social_user.avatar IS '用户头像'; +COMMENT ON COLUMN system_social_user.raw_user_info IS '原始用户数据,一般是 JSON 格式'; +COMMENT ON COLUMN system_social_user.code IS '最后一次的认证 code'; +COMMENT ON COLUMN system_social_user.state IS '最后一次的认证 state'; +COMMENT ON COLUMN system_social_user.creator IS '创建者'; +COMMENT ON COLUMN system_social_user.create_time IS '创建时间'; +COMMENT ON COLUMN system_social_user.updater IS '更新者'; +COMMENT ON COLUMN system_social_user.update_time IS '更新时间'; +COMMENT ON COLUMN system_social_user.deleted IS '是否删除'; +COMMENT ON COLUMN system_social_user.tenant_id IS '租户编号'; +COMMENT ON TABLE system_social_user IS '社交用户表'; + +CREATE SEQUENCE system_social_user_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for system_social_user_bind +-- ---------------------------- +CREATE TABLE system_social_user_bind +( + id number NOT NULL, + user_id number NOT NULL, + user_type smallint NOT NULL, + social_type smallint NOT NULL, + social_user_id number NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_social_user_bind + ADD CONSTRAINT pk_system_social_user_bind PRIMARY KEY (id); + +COMMENT ON COLUMN system_social_user_bind.id IS '主键(自增策略)'; +COMMENT ON COLUMN system_social_user_bind.user_id IS '用户编号'; +COMMENT ON COLUMN system_social_user_bind.user_type IS '用户类型'; +COMMENT ON COLUMN system_social_user_bind.social_type IS '社交平台的类型'; +COMMENT ON COLUMN system_social_user_bind.social_user_id IS '社交用户的编号'; +COMMENT ON COLUMN system_social_user_bind.creator IS '创建者'; +COMMENT ON COLUMN system_social_user_bind.create_time IS '创建时间'; +COMMENT ON COLUMN system_social_user_bind.updater IS '更新者'; +COMMENT ON COLUMN system_social_user_bind.update_time IS '更新时间'; +COMMENT ON COLUMN system_social_user_bind.deleted IS '是否删除'; +COMMENT ON COLUMN system_social_user_bind.tenant_id IS '租户编号'; +COMMENT ON TABLE system_social_user_bind IS '社交绑定表'; + +CREATE SEQUENCE system_social_user_bind_seq + START WITH 1; + +-- ---------------------------- +-- Table structure for system_tenant +-- ---------------------------- +CREATE TABLE system_tenant +( + id number NOT NULL, + name varchar2(30) NOT NULL, + contact_user_id number DEFAULT NULL NULL, + contact_name varchar2(30) NOT NULL, + contact_mobile varchar2(500) DEFAULT NULL NULL, + status smallint DEFAULT 0 NOT NULL, + website varchar2(256) DEFAULT '' NULL, + package_id number NOT NULL, + expire_time date NOT NULL, + account_count number NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE system_tenant + ADD CONSTRAINT pk_system_tenant PRIMARY KEY (id); + +COMMENT ON COLUMN system_tenant.id IS '租户编号'; +COMMENT ON COLUMN system_tenant.name IS '租户名'; +COMMENT ON COLUMN system_tenant.contact_user_id IS '联系人的用户编号'; +COMMENT ON COLUMN system_tenant.contact_name IS '联系人'; +COMMENT ON COLUMN system_tenant.contact_mobile IS '联系手机'; +COMMENT ON COLUMN system_tenant.status IS '租户状态(0正常 1停用)'; +COMMENT ON COLUMN system_tenant.website IS '绑定域名'; +COMMENT ON COLUMN system_tenant.package_id IS '租户套餐编号'; +COMMENT ON COLUMN system_tenant.expire_time IS '过期时间'; +COMMENT ON COLUMN system_tenant.account_count IS '账号数量'; +COMMENT ON COLUMN system_tenant.creator IS '创建者'; +COMMENT ON COLUMN system_tenant.create_time IS '创建时间'; +COMMENT ON COLUMN system_tenant.updater IS '更新者'; +COMMENT ON COLUMN system_tenant.update_time IS '更新时间'; +COMMENT ON COLUMN system_tenant.deleted IS '是否删除'; +COMMENT ON TABLE system_tenant IS '租户表'; + +-- ---------------------------- +-- Records of system_tenant +-- ---------------------------- +-- @formatter:off +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, website, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (1, '芋道源码', NULL, '芋艿', '17321315478', 0, 'www.iocoder.cn', 0, to_date('2099-02-19 17:14:16', 'SYYYY-MM-DD HH24:MI:SS'), 9999, '1', to_date('2021-01-05 17:03:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-06 11:41:41', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, website, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (121, '小租户', 110, '小王2', '15601691300', 0, 'zsxq.iocoder.cn', 111, to_date('2024-03-11 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), 20, '1', to_date('2022-02-22 00:56:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-06 11:41:47', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, website, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (122, '测试租户', 113, '芋道', '15601691300', 0, 'test.iocoder.cn', 111, to_date('2022-04-30 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), 50, '1', to_date('2022-03-07 21:37:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-06 11:41:53', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_tenant_seq + START WITH 123; + +-- ---------------------------- +-- Table structure for system_tenant_package +-- ---------------------------- +CREATE TABLE system_tenant_package +( + id number NOT NULL, + name varchar2(30) NOT NULL, + status smallint DEFAULT 0 NOT NULL, + remark varchar2(256) DEFAULT '' NULL, + menu_ids varchar2(4000) NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL +); + +ALTER TABLE system_tenant_package + ADD CONSTRAINT pk_system_tenant_package PRIMARY KEY (id); + +COMMENT ON COLUMN system_tenant_package.id IS '套餐编号'; +COMMENT ON COLUMN system_tenant_package.name IS '套餐名'; +COMMENT ON COLUMN system_tenant_package.status IS '租户状态(0正常 1停用)'; +COMMENT ON COLUMN system_tenant_package.remark IS '备注'; +COMMENT ON COLUMN system_tenant_package.menu_ids IS '关联的菜单编号'; +COMMENT ON COLUMN system_tenant_package.creator IS '创建者'; +COMMENT ON COLUMN system_tenant_package.create_time IS '创建时间'; +COMMENT ON COLUMN system_tenant_package.updater IS '更新者'; +COMMENT ON COLUMN system_tenant_package.update_time IS '更新时间'; +COMMENT ON COLUMN system_tenant_package.deleted IS '是否删除'; +COMMENT ON TABLE system_tenant_package IS '租户套餐表'; + +-- ---------------------------- +-- Records of system_tenant_package +-- ---------------------------- +-- @formatter:off +INSERT INTO system_tenant_package (id, name, status, remark, menu_ids, creator, create_time, updater, update_time, deleted) VALUES (111, '普通套餐', 0, '小功能', '[1,2,5,1031,1032,1033,1034,1035,1036,1037,1038,1039,1050,1051,1052,1053,1054,1056,1057,1058,1059,1060,1063,1064,1065,1066,1067,1070,1075,1076,1077,1078,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1118,1119,1120,100,101,102,103,106,107,110,111,112,113,1138,114,1139,115,1140,116,1141,1142,1143,2713,2714,2715,2716,2717,2718,2720,1185,2721,1186,2722,1187,2723,1188,2724,1189,2725,1190,2726,1191,2727,2472,1192,2728,1193,2729,1194,2730,1195,2731,1196,2732,1197,2733,2478,1198,2734,2479,1199,2735,2480,1200,2481,1201,2482,1202,2483,2484,2485,2486,2487,1207,2488,1208,2489,1209,2490,1210,2491,1211,2492,1212,2493,1213,2494,2495,1215,1216,2497,1217,1218,1219,1220,1221,1222,1224,1225,1226,1227,1228,1229,1237,1238,1239,1240,1241,1242,1243,2525,1255,1256,1001,1257,1002,1258,1003,1259,1004,1260,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020]', '1', to_date('2022-02-22 00:54:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-30 17:53:17', 'SYYYY-MM-DD HH24:MI:SS'), '0'); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_tenant_package_seq + START WITH 112; + +-- ---------------------------- +-- Table structure for system_user_post +-- ---------------------------- +CREATE TABLE system_user_post +( + id number NOT NULL, + user_id number DEFAULT 0 NOT NULL, + post_id number DEFAULT 0 NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_user_post + ADD CONSTRAINT pk_system_user_post PRIMARY KEY (id); + +COMMENT ON COLUMN system_user_post.id IS 'id'; +COMMENT ON COLUMN system_user_post.user_id IS '用户ID'; +COMMENT ON COLUMN system_user_post.post_id IS '岗位ID'; +COMMENT ON COLUMN system_user_post.creator IS '创建者'; +COMMENT ON COLUMN system_user_post.create_time IS '创建时间'; +COMMENT ON COLUMN system_user_post.updater IS '更新者'; +COMMENT ON COLUMN system_user_post.update_time IS '更新时间'; +COMMENT ON COLUMN system_user_post.deleted IS '是否删除'; +COMMENT ON COLUMN system_user_post.tenant_id IS '租户编号'; +COMMENT ON TABLE system_user_post IS '用户岗位表'; + +-- ---------------------------- +-- Records of system_user_post +-- ---------------------------- +-- @formatter:off +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (112, 1, 1, 'admin', to_date('2022-05-02 07:25:24', 'SYYYY-MM-DD HH24:MI:SS'), 'admin', to_date('2022-05-02 07:25:24', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (113, 100, 1, 'admin', to_date('2022-05-02 07:25:24', 'SYYYY-MM-DD HH24:MI:SS'), 'admin', to_date('2022-05-02 07:25:24', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (115, 104, 1, '1', to_date('2022-05-16 19:36:28', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-16 19:36:28', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (116, 117, 2, '1', to_date('2022-07-09 17:40:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-07-09 17:40:26', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (117, 118, 1, '1', to_date('2022-07-09 17:44:44', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-07-09 17:44:44', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (119, 114, 5, '1', to_date('2024-03-24 20:45:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-24 20:45:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (123, 115, 1, '1', to_date('2024-04-04 09:37:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-04 09:37:14', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (124, 115, 2, '1', to_date('2024-04-04 09:37:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-04 09:37:14', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_user_post_seq + START WITH 125; + +-- ---------------------------- +-- Table structure for system_user_role +-- ---------------------------- +CREATE TABLE system_user_role +( + id number NOT NULL, + user_id number NOT NULL, + role_id number NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_user_role + ADD CONSTRAINT pk_system_user_role PRIMARY KEY (id); + +COMMENT ON COLUMN system_user_role.id IS '自增编号'; +COMMENT ON COLUMN system_user_role.user_id IS '用户ID'; +COMMENT ON COLUMN system_user_role.role_id IS '角色ID'; +COMMENT ON COLUMN system_user_role.creator IS '创建者'; +COMMENT ON COLUMN system_user_role.create_time IS '创建时间'; +COMMENT ON COLUMN system_user_role.updater IS '更新者'; +COMMENT ON COLUMN system_user_role.update_time IS '更新时间'; +COMMENT ON COLUMN system_user_role.deleted IS '是否删除'; +COMMENT ON COLUMN system_user_role.tenant_id IS '租户编号'; +COMMENT ON TABLE system_user_role IS '用户和角色关联表'; + +-- ---------------------------- +-- Records of system_user_role +-- ---------------------------- +-- @formatter:off +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, 1, 1, '', to_date('2022-01-11 13:19:45', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-05-12 12:35:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 2, 2, '', to_date('2022-01-11 13:19:45', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-05-12 12:35:13', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, 100, 101, '', to_date('2022-01-11 13:19:45', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-05-12 12:35:13', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, 100, 1, '', to_date('2022-01-11 13:19:45', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-05-12 12:35:12', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, 100, 2, '', to_date('2022-01-11 13:19:45', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2022-05-12 12:35:11', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (10, 103, 1, '1', to_date('2022-01-11 13:19:45', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-01-11 13:19:45', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (14, 110, 109, '1', to_date('2022-02-22 00:56:14', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 00:56:14', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (15, 111, 110, '110', to_date('2022-02-23 13:14:38', 'SYYYY-MM-DD HH24:MI:SS'), '110', to_date('2022-02-23 13:14:38', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (16, 113, 111, '1', to_date('2022-03-07 21:37:58', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-07 21:37:58', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (18, 1, 2, '1', to_date('2022-05-12 20:39:29', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-12 20:39:29', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (20, 104, 101, '1', to_date('2022-05-28 15:43:57', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-05-28 15:43:57', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (22, 115, 2, '1', to_date('2022-07-21 22:08:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-07-21 22:08:30', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (35, 112, 1, '1', to_date('2024-03-15 20:00:24', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-15 20:00:24', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (36, 118, 1, '1', to_date('2024-03-17 09:12:08', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-17 09:12:08', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (38, 114, 101, '1', to_date('2024-03-24 22:23:03', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-03-24 22:23:03', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_user_role_seq + START WITH 39; + +-- ---------------------------- +-- Table structure for system_users +-- ---------------------------- +CREATE TABLE system_users +( + id number NOT NULL, + username varchar2(30) NOT NULL, + password varchar2(100) DEFAULT '' NULL, + nickname varchar2(30) NOT NULL, + remark varchar2(500) DEFAULT NULL NULL, + dept_id number DEFAULT NULL NULL, + post_ids varchar2(255) DEFAULT NULL NULL, + email varchar2(50) DEFAULT '' NULL, + mobile varchar2(11) DEFAULT '' NULL, + sex smallint DEFAULT 0 NULL, + avatar varchar2(512) DEFAULT '' NULL, + status smallint DEFAULT 0 NOT NULL, + login_ip varchar2(50) DEFAULT '' NULL, + login_date date DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE system_users + ADD CONSTRAINT pk_system_users PRIMARY KEY (id); + +COMMENT ON COLUMN system_users.id IS '用户ID'; +COMMENT ON COLUMN system_users.username IS '用户账号'; +COMMENT ON COLUMN system_users.password IS '密码'; +COMMENT ON COLUMN system_users.nickname IS '用户昵称'; +COMMENT ON COLUMN system_users.remark IS '备注'; +COMMENT ON COLUMN system_users.dept_id IS '部门ID'; +COMMENT ON COLUMN system_users.post_ids IS '岗位编号数组'; +COMMENT ON COLUMN system_users.email IS '用户邮箱'; +COMMENT ON COLUMN system_users.mobile IS '手机号码'; +COMMENT ON COLUMN system_users.sex IS '用户性别'; +COMMENT ON COLUMN system_users.avatar IS '头像地址'; +COMMENT ON COLUMN system_users.status IS '帐号状态(0正常 1停用)'; +COMMENT ON COLUMN system_users.login_ip IS '最后登录IP'; +COMMENT ON COLUMN system_users.login_date IS '最后登录时间'; +COMMENT ON COLUMN system_users.creator IS '创建者'; +COMMENT ON COLUMN system_users.create_time IS '创建时间'; +COMMENT ON COLUMN system_users.updater IS '更新者'; +COMMENT ON COLUMN system_users.update_time IS '更新时间'; +COMMENT ON COLUMN system_users.deleted IS '是否删除'; +COMMENT ON COLUMN system_users.tenant_id IS '租户编号'; +COMMENT ON TABLE system_users IS '用户信息表'; + +-- ---------------------------- +-- Records of system_users +-- ---------------------------- +-- @formatter:off +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, 'admin', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '18818260277', 2, 'http://test.win.iocoder.cn/96c787a2ce88bf6d0ce3cd8b6cf5314e80e7703cd41bf4af8cd2e2909dbd6b6d.png', 0, '0:0:0:0:0:0:0:1', to_date('2024-04-29 21:50:32', 'SYYYY-MM-DD HH24:MI:SS'), 'admin', to_date('2021-01-05 17:03:47', 'SYYYY-MM-DD HH24:MI:SS'), NULL, to_date('2024-04-29 21:50:32', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (100, 'win', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', 104, '[1]', 'win@iocoder.cn', '15601691300', 1, '', 1, '127.0.0.1', to_date('2022-07-09 23:03:33', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2021-01-07 09:07:17', 'SYYYY-MM-DD HH24:MI:SS'), NULL, to_date('2022-07-09 23:03:33', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (103, 'yuanma', '$2a$10$YMpimV4T6BtDhIaA8jSW.u8UTGBeGhc/qwXP4oxoMr4mOw9.qttt6', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '0:0:0:0:0:0:0:1', to_date('2024-03-18 21:09:04', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2021-01-13 23:50:35', 'SYYYY-MM-DD HH24:MI:SS'), NULL, to_date('2024-03-18 21:09:04', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (104, 'test', '$2a$04$KhExCYl7lx6eWWZYKsibKOZ8IBJRyuNuCcEOLQ11RYhJKgHmlSwK.', '测试号', NULL, 107, '[1,2]', '111@qq.com', '15601691200', 1, '', 0, '0:0:0:0:0:0:0:1', to_date('2024-03-26 07:11:35', 'SYYYY-MM-DD HH24:MI:SS'), '', to_date('2021-01-21 02:13:53', 'SYYYY-MM-DD HH24:MI:SS'), NULL, to_date('2024-03-26 07:11:35', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (107, 'admin107', '$2a$10$dYOOBKMO93v/.ReCqzyFg.o67Tqk.bbc2bhrpyBGkIw9aypCtr2pm', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', to_date('2022-02-20 22:59:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-27 08:26:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 118); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (108, 'admin108', '$2a$10$y6mfvKoNYL1GXWak8nYwVOH.kCWqjactkzdoIDgiKl93WN3Ejg.Lu', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', to_date('2022-02-20 23:00:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-27 08:26:53', 'SYYYY-MM-DD HH24:MI:SS'), '0', 119); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (109, 'admin109', '$2a$10$JAqvH0tEc0I7dfDVBI7zyuB4E3j.uH6daIjV53.vUS6PknFkDJkuK', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', to_date('2022-02-20 23:11:50', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-27 08:26:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 120); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (110, 'admin110', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '小王', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', to_date('2022-09-25 22:47:33', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-22 00:56:14', 'SYYYY-MM-DD HH24:MI:SS'), NULL, to_date('2022-09-25 22:47:33', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (111, 'test', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '测试用户', NULL, NULL, '[]', '', '', 0, '', 0, '0:0:0:0:0:0:0:1', to_date('2023-12-30 11:42:17', 'SYYYY-MM-DD HH24:MI:SS'), '110', to_date('2022-02-23 13:14:33', 'SYYYY-MM-DD HH24:MI:SS'), NULL, to_date('2023-12-30 11:42:17', 'SYYYY-MM-DD HH24:MI:SS'), '0', 121); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (112, 'newobject', '$2a$04$dB0z8Q819fJWz0hbaLe6B.VfHCjYgWx6LFfET5lyz3JwcqlyCkQ4C', '新对象', NULL, 100, '[]', '', '15601691235', 1, '', 0, '0:0:0:0:0:0:0:1', to_date('2024-03-16 23:11:38', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-02-23 19:08:03', 'SYYYY-MM-DD HH24:MI:SS'), NULL, to_date('2024-03-16 23:11:38', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (113, 'aoteman', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', to_date('2022-03-19 18:38:51', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-07 21:37:58', 'SYYYY-MM-DD HH24:MI:SS'), NULL, to_date('2022-03-19 18:38:51', 'SYYYY-MM-DD HH24:MI:SS'), '0', 122); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (114, 'hrmgr', '$2a$10$TR4eybBioGRhBmDBWkqWLO6NIh3mzYa8KBKDDB5woiGYFVlRAi.fu', 'hr 小姐姐', NULL, NULL, '[5]', '', '15601691236', 1, '', 0, '0:0:0:0:0:0:0:1', to_date('2024-03-24 22:21:05', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-03-19 21:50:58', 'SYYYY-MM-DD HH24:MI:SS'), NULL, to_date('2024-03-24 22:21:05', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (115, 'aotemane', '$2a$04$GcyP0Vyzb2F2Yni5PuIK9ueGxM0tkZGMtDwVRwrNbtMvorzbpNsV2', '阿呆', '11222', 102, '[1,2]', '7648@qq.com', '15601691229', 2, '', 0, '', NULL, '1', to_date('2022-04-30 02:55:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-04 09:37:14', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (117, 'admin123', '$2a$10$WI8Gg/lpZQIrOEZMHqka7OdFaD4Nx.B/qY8ZGTTUKrOJwaHFqibaC', '测试号', '1111', 100, '[2]', '', '15601691234', 1, '', 0, '', NULL, '1', to_date('2022-07-09 17:40:26', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-07-09 17:40:26', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (118, 'goudan', '$2a$04$OB1SuphCdiLVRpiYRKeqH.8NYS7UIp5vmIv1W7U4w6toiFeOAATVK', '狗蛋', NULL, 103, '[1]', '', '15601691239', 1, '', 0, '0:0:0:0:0:0:0:1', to_date('2024-03-17 09:10:27', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2022-07-09 17:44:43', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-04 09:48:05', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (131, 'hh', '$2a$04$jyH9h6.gaw8mpOjPfHIpx.8as2Rzfcmdlj5rlJFwgCw4rsv/MTb2K', '呵呵', NULL, 100, '[]', '777@qq.com', '15601882312', 1, '', 0, '', NULL, '1', to_date('2024-04-27 08:45:56', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2024-04-27 08:45:56', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE system_users_seq + START WITH 132; + +-- ---------------------------- +-- Table structure for win_demo01_contact +-- ---------------------------- +CREATE TABLE win_demo01_contact +( + id number NOT NULL, + name varchar2(100) DEFAULT '' NULL, + sex smallint NOT NULL, + birthday date NOT NULL, + description varchar2(255) NOT NULL, + avatar varchar2(512) DEFAULT NULL NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE win_demo01_contact + ADD CONSTRAINT pk_win_demo01_contact PRIMARY KEY (id); + +COMMENT ON COLUMN win_demo01_contact.id IS '编号'; +COMMENT ON COLUMN win_demo01_contact.name IS '名字'; +COMMENT ON COLUMN win_demo01_contact.sex IS '性别'; +COMMENT ON COLUMN win_demo01_contact.birthday IS '出生年'; +COMMENT ON COLUMN win_demo01_contact.description IS '简介'; +COMMENT ON COLUMN win_demo01_contact.avatar IS '头像'; +COMMENT ON COLUMN win_demo01_contact.creator IS '创建者'; +COMMENT ON COLUMN win_demo01_contact.create_time IS '创建时间'; +COMMENT ON COLUMN win_demo01_contact.updater IS '更新者'; +COMMENT ON COLUMN win_demo01_contact.update_time IS '更新时间'; +COMMENT ON COLUMN win_demo01_contact.deleted IS '是否删除'; +COMMENT ON COLUMN win_demo01_contact.tenant_id IS '租户编号'; +COMMENT ON TABLE win_demo01_contact IS '示例联系人表'; + +-- ---------------------------- +-- Records of win_demo01_contact +-- ---------------------------- +-- @formatter:off +INSERT INTO win_demo01_contact (id, name, sex, birthday, description, avatar, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '土豆', 2, to_date('2023-11-07 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '

    天蚕土豆!呀

    ', 'http://127.0.0.1:48080/admin-api/infra/file/4/get/46f8fa1a37db3f3960d8910ff2fe3962ab3b2db87cf2f8ccb4dc8145b8bdf237.jpeg', '1', to_date('2023-11-15 23:34:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-15 23:47:39', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE win_demo01_contact_seq + START WITH 2; + +-- ---------------------------- +-- Table structure for win_demo02_category +-- ---------------------------- +CREATE TABLE win_demo02_category +( + id number NOT NULL, + name varchar2(100) DEFAULT '' NULL, + parent_id number NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE win_demo02_category + ADD CONSTRAINT pk_win_demo02_category PRIMARY KEY (id); + +COMMENT ON COLUMN win_demo02_category.id IS '编号'; +COMMENT ON COLUMN win_demo02_category.name IS '名字'; +COMMENT ON COLUMN win_demo02_category.parent_id IS '父级编号'; +COMMENT ON COLUMN win_demo02_category.creator IS '创建者'; +COMMENT ON COLUMN win_demo02_category.create_time IS '创建时间'; +COMMENT ON COLUMN win_demo02_category.updater IS '更新者'; +COMMENT ON COLUMN win_demo02_category.update_time IS '更新时间'; +COMMENT ON COLUMN win_demo02_category.deleted IS '是否删除'; +COMMENT ON COLUMN win_demo02_category.tenant_id IS '租户编号'; +COMMENT ON TABLE win_demo02_category IS '示例分类表'; + +-- ---------------------------- +-- Records of win_demo02_category +-- ---------------------------- +-- @formatter:off +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '土豆', 0, '1', to_date('2023-11-15 23:34:30', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 20:24:23', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '番茄', 0, '1', to_date('2023-11-16 20:24:00', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 20:24:15', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, '怪怪', 0, '1', to_date('2023-11-16 20:24:32', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 20:24:32', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, '小番茄', 2, '1', to_date('2023-11-16 20:24:39', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 20:24:39', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, '大番茄', 2, '1', to_date('2023-11-16 20:24:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 20:24:46', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, '11', 3, '1', to_date('2023-11-24 19:29:34', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-24 19:29:34', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE win_demo02_category_seq + START WITH 7; + +-- ---------------------------- +-- Table structure for win_demo03_course +-- ---------------------------- +CREATE TABLE win_demo03_course +( + id number NOT NULL, + student_id number NOT NULL, + name varchar2(100) DEFAULT '' NULL, + score smallint NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE win_demo03_course + ADD CONSTRAINT pk_win_demo03_course PRIMARY KEY (id); + +COMMENT ON COLUMN win_demo03_course.id IS '编号'; +COMMENT ON COLUMN win_demo03_course.student_id IS '学生编号'; +COMMENT ON COLUMN win_demo03_course.name IS '名字'; +COMMENT ON COLUMN win_demo03_course.score IS '分数'; +COMMENT ON COLUMN win_demo03_course.creator IS '创建者'; +COMMENT ON COLUMN win_demo03_course.create_time IS '创建时间'; +COMMENT ON COLUMN win_demo03_course.updater IS '更新者'; +COMMENT ON COLUMN win_demo03_course.update_time IS '更新时间'; +COMMENT ON COLUMN win_demo03_course.deleted IS '是否删除'; +COMMENT ON COLUMN win_demo03_course.tenant_id IS '租户编号'; +COMMENT ON TABLE win_demo03_course IS '学生课程表'; + +-- ---------------------------- +-- Records of win_demo03_course +-- ---------------------------- +-- @formatter:off +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 2, '语文', 66, '1', to_date('2023-11-16 23:21:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 23:21:49', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, 2, '数学', 22, '1', to_date('2023-11-16 23:21:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 23:21:49', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, 5, '体育', 23, '1', to_date('2023-11-16 23:22:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 15:44:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (7, 5, '计算机', 11, '1', to_date('2023-11-16 23:22:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 15:44:40', 'SYYYY-MM-DD HH24:MI:SS'), '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (8, 5, '体育', 23, '1', to_date('2023-11-16 23:22:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 15:47:09', 'SYYYY-MM-DD HH24:MI:SS'), '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, 5, '计算机', 11, '1', to_date('2023-11-16 23:22:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 15:47:09', 'SYYYY-MM-DD HH24:MI:SS'), '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (10, 5, '体育', 23, '1', to_date('2023-11-16 23:22:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 23:47:10', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (11, 5, '计算机', 11, '1', to_date('2023-11-16 23:22:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 23:47:10', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (12, 2, '电脑', 33, '1', to_date('2023-11-17 00:20:42', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 16:20:45', 'SYYYY-MM-DD HH24:MI:SS'), '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (13, 9, '滑雪', 12, '1', to_date('2023-11-17 13:13:20', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-17 13:13:20', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE win_demo03_course_seq + START WITH 14; + +-- ---------------------------- +-- Table structure for win_demo03_grade +-- ---------------------------- +CREATE TABLE win_demo03_grade +( + id number NOT NULL, + student_id number NOT NULL, + name varchar2(100) DEFAULT '' NULL, + teacher varchar2(255) NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE win_demo03_grade + ADD CONSTRAINT pk_win_demo03_grade PRIMARY KEY (id); + +COMMENT ON COLUMN win_demo03_grade.id IS '编号'; +COMMENT ON COLUMN win_demo03_grade.student_id IS '学生编号'; +COMMENT ON COLUMN win_demo03_grade.name IS '名字'; +COMMENT ON COLUMN win_demo03_grade.teacher IS '班主任'; +COMMENT ON COLUMN win_demo03_grade.creator IS '创建者'; +COMMENT ON COLUMN win_demo03_grade.create_time IS '创建时间'; +COMMENT ON COLUMN win_demo03_grade.updater IS '更新者'; +COMMENT ON COLUMN win_demo03_grade.update_time IS '更新时间'; +COMMENT ON COLUMN win_demo03_grade.deleted IS '是否删除'; +COMMENT ON COLUMN win_demo03_grade.tenant_id IS '租户编号'; +COMMENT ON TABLE win_demo03_grade IS '学生班级表'; + +-- ---------------------------- +-- Records of win_demo03_grade +-- ---------------------------- +-- @formatter:off +INSERT INTO win_demo03_grade (id, student_id, name, teacher, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (7, 2, '三年 2 班', '周杰伦', '1', to_date('2023-11-16 23:21:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 23:21:49', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO win_demo03_grade (id, student_id, name, teacher, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (8, 5, '华为', '遥遥领先', '1', to_date('2023-11-16 23:22:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-16 23:47:10', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO win_demo03_grade (id, student_id, name, teacher, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, 9, '小图', '小娃111', '1', to_date('2023-11-17 13:10:23', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-17 13:10:23', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE win_demo03_grade_seq + START WITH 10; + +-- ---------------------------- +-- Table structure for win_demo03_student +-- ---------------------------- +CREATE TABLE win_demo03_student +( + id number NOT NULL, + name varchar2(100) DEFAULT '' NULL, + sex smallint NOT NULL, + birthday date NOT NULL, + description varchar2(255) NOT NULL, + creator varchar2(64) DEFAULT '' NULL, + create_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater varchar2(64) DEFAULT '' NULL, + update_time date DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted number(1, 0) DEFAULT 0 NOT NULL, + tenant_id number DEFAULT 0 NOT NULL +); + +ALTER TABLE win_demo03_student + ADD CONSTRAINT pk_win_demo03_student PRIMARY KEY (id); + +COMMENT ON COLUMN win_demo03_student.id IS '编号'; +COMMENT ON COLUMN win_demo03_student.name IS '名字'; +COMMENT ON COLUMN win_demo03_student.sex IS '性别'; +COMMENT ON COLUMN win_demo03_student.birthday IS '出生日期'; +COMMENT ON COLUMN win_demo03_student.description IS '简介'; +COMMENT ON COLUMN win_demo03_student.creator IS '创建者'; +COMMENT ON COLUMN win_demo03_student.create_time IS '创建时间'; +COMMENT ON COLUMN win_demo03_student.updater IS '更新者'; +COMMENT ON COLUMN win_demo03_student.update_time IS '更新时间'; +COMMENT ON COLUMN win_demo03_student.deleted IS '是否删除'; +COMMENT ON COLUMN win_demo03_student.tenant_id IS '租户编号'; +COMMENT ON TABLE win_demo03_student IS '学生表'; + +-- ---------------------------- +-- Records of win_demo03_student +-- ---------------------------- +-- @formatter:off +INSERT INTO win_demo03_student (id, name, sex, birthday, description, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '小白', 1, to_date('2023-11-16 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '

    厉害

    ', '1', to_date('2023-11-16 23:21:49', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-17 16:49:06', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO win_demo03_student (id, name, sex, birthday, description, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, '大黑', 2, to_date('2023-11-13 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '

    你在教我做事?

    ', '1', to_date('2023-11-16 23:22:46', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-17 16:49:07', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +INSERT INTO win_demo03_student (id, name, sex, birthday, description, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, '小花', 1, to_date('2023-11-07 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '

    哈哈哈

    ', '1', to_date('2023-11-17 00:04:47', 'SYYYY-MM-DD HH24:MI:SS'), '1', to_date('2023-11-17 16:49:08', 'SYYYY-MM-DD HH24:MI:SS'), '0', 1); +COMMIT; +-- @formatter:on + +CREATE SEQUENCE win_demo03_student_seq + START WITH 10; + diff --git a/sql/postgresql/ruoyi-vue-pro.sql b/sql/postgresql/ruoyi-vue-pro.sql new file mode 100644 index 0000000..fad65ab --- /dev/null +++ b/sql/postgresql/ruoyi-vue-pro.sql @@ -0,0 +1,4714 @@ +/* + Win Database Transfer Tool + + Source Server Type : MySQL + + Target Server Type : PostgreSQL + + Date: 2024-05-03 23:36:19 +*/ + + +-- ---------------------------- +-- Table structure for dual +-- ---------------------------- +DROP TABLE IF EXISTS dual; +CREATE TABLE dual +( +); + + +-- ---------------------------- +-- Table structure for infra_api_access_log +-- ---------------------------- +DROP TABLE IF EXISTS infra_api_access_log; +CREATE TABLE infra_api_access_log +( + id int8 NOT NULL, + trace_id varchar(64) NOT NULL DEFAULT '', + user_id int8 NOT NULL DEFAULT 0, + user_type int2 NOT NULL DEFAULT 0, + application_name varchar(50) NOT NULL, + request_method varchar(16) NOT NULL DEFAULT '', + request_url varchar(255) NOT NULL DEFAULT '', + request_params text NULL, + response_body text NULL, + user_ip varchar(50) NOT NULL, + user_agent varchar(512) NOT NULL, + operate_module varchar(50) NULL DEFAULT NULL, + operate_name varchar(50) NULL DEFAULT NULL, + operate_type int2 NULL DEFAULT 0, + begin_time timestamp NOT NULL, + end_time timestamp NOT NULL, + duration int4 NOT NULL, + result_code int4 NOT NULL DEFAULT 0, + result_msg varchar(512) NULL DEFAULT '', + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE infra_api_access_log + ADD CONSTRAINT pk_infra_api_access_log PRIMARY KEY (id); + +CREATE INDEX idx_infra_api_access_log_01 ON infra_api_access_log (create_time); + +COMMENT ON COLUMN infra_api_access_log.id IS '日志主键'; +COMMENT ON COLUMN infra_api_access_log.trace_id IS '链路追踪编号'; +COMMENT ON COLUMN infra_api_access_log.user_id IS '用户编号'; +COMMENT ON COLUMN infra_api_access_log.user_type IS '用户类型'; +COMMENT ON COLUMN infra_api_access_log.application_name IS '应用名'; +COMMENT ON COLUMN infra_api_access_log.request_method IS '请求方法名'; +COMMENT ON COLUMN infra_api_access_log.request_url IS '请求地址'; +COMMENT ON COLUMN infra_api_access_log.request_params IS '请求参数'; +COMMENT ON COLUMN infra_api_access_log.response_body IS '响应结果'; +COMMENT ON COLUMN infra_api_access_log.user_ip IS '用户 IP'; +COMMENT ON COLUMN infra_api_access_log.user_agent IS '浏览器 UA'; +COMMENT ON COLUMN infra_api_access_log.operate_module IS '操作模块'; +COMMENT ON COLUMN infra_api_access_log.operate_name IS '操作名'; +COMMENT ON COLUMN infra_api_access_log.operate_type IS '操作分类'; +COMMENT ON COLUMN infra_api_access_log.begin_time IS '开始请求时间'; +COMMENT ON COLUMN infra_api_access_log.end_time IS '结束请求时间'; +COMMENT ON COLUMN infra_api_access_log.duration IS '执行时长'; +COMMENT ON COLUMN infra_api_access_log.result_code IS '结果码'; +COMMENT ON COLUMN infra_api_access_log.result_msg IS '结果提示'; +COMMENT ON COLUMN infra_api_access_log.creator IS '创建者'; +COMMENT ON COLUMN infra_api_access_log.create_time IS '创建时间'; +COMMENT ON COLUMN infra_api_access_log.updater IS '更新者'; +COMMENT ON COLUMN infra_api_access_log.update_time IS '更新时间'; +COMMENT ON COLUMN infra_api_access_log.deleted IS '是否删除'; +COMMENT ON COLUMN infra_api_access_log.tenant_id IS '租户编号'; +COMMENT ON TABLE infra_api_access_log IS 'API 访问日志表'; + +DROP SEQUENCE IF EXISTS infra_api_access_log_seq; +CREATE SEQUENCE infra_api_access_log_seq + START 1; + +-- ---------------------------- +-- Table structure for infra_api_error_log +-- ---------------------------- +DROP TABLE IF EXISTS infra_api_error_log; +CREATE TABLE infra_api_error_log +( + id int4 NOT NULL, + trace_id varchar(64) NOT NULL, + user_id int4 NOT NULL DEFAULT 0, + user_type int2 NOT NULL DEFAULT 0, + application_name varchar(50) NOT NULL, + request_method varchar(16) NOT NULL, + request_url varchar(255) NOT NULL, + request_params varchar(8000) NOT NULL, + user_ip varchar(50) NOT NULL, + user_agent varchar(512) NOT NULL, + exception_time timestamp NOT NULL, + exception_name varchar(128) NOT NULL DEFAULT '', + exception_message text NOT NULL, + exception_root_cause_message text NOT NULL, + exception_stack_trace text NOT NULL, + exception_class_name varchar(512) NOT NULL, + exception_file_name varchar(512) NOT NULL, + exception_method_name varchar(512) NOT NULL, + exception_line_number int4 NOT NULL, + process_status int2 NOT NULL, + process_time timestamp NULL DEFAULT NULL, + process_user_id int4 NULL DEFAULT 0, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE infra_api_error_log + ADD CONSTRAINT pk_infra_api_error_log PRIMARY KEY (id); + +COMMENT ON COLUMN infra_api_error_log.id IS '编号'; +COMMENT ON COLUMN infra_api_error_log.trace_id IS '链路追踪编号 + * + * 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。'; +COMMENT ON COLUMN infra_api_error_log.user_id IS '用户编号'; +COMMENT ON COLUMN infra_api_error_log.user_type IS '用户类型'; +COMMENT ON COLUMN infra_api_error_log.application_name IS '应用名 + * + * 目前读取 spring.application.name'; +COMMENT ON COLUMN infra_api_error_log.request_method IS '请求方法名'; +COMMENT ON COLUMN infra_api_error_log.request_url IS '请求地址'; +COMMENT ON COLUMN infra_api_error_log.request_params IS '请求参数'; +COMMENT ON COLUMN infra_api_error_log.user_ip IS '用户 IP'; +COMMENT ON COLUMN infra_api_error_log.user_agent IS '浏览器 UA'; +COMMENT ON COLUMN infra_api_error_log.exception_time IS '异常发生时间'; +COMMENT ON COLUMN infra_api_error_log.exception_name IS '异常名 + * + * {@link Throwable#getClass()} 的类全名'; +COMMENT ON COLUMN infra_api_error_log.exception_message IS '异常导致的消息 + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getMessage(Throwable)}'; +COMMENT ON COLUMN infra_api_error_log.exception_root_cause_message IS '异常导致的根消息 + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getRootCauseMessage(Throwable)}'; +COMMENT ON COLUMN infra_api_error_log.exception_stack_trace IS '异常的栈轨迹 + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getServiceException(Exception)}'; +COMMENT ON COLUMN infra_api_error_log.exception_class_name IS '异常发生的类全名 + * + * {@link StackTraceElement#getClassName()}'; +COMMENT ON COLUMN infra_api_error_log.exception_file_name IS '异常发生的类文件 + * + * {@link StackTraceElement#getFileName()}'; +COMMENT ON COLUMN infra_api_error_log.exception_method_name IS '异常发生的方法名 + * + * {@link StackTraceElement#getMethodName()}'; +COMMENT ON COLUMN infra_api_error_log.exception_line_number IS '异常发生的方法所在行 + * + * {@link StackTraceElement#getLineNumber()}'; +COMMENT ON COLUMN infra_api_error_log.process_status IS '处理状态'; +COMMENT ON COLUMN infra_api_error_log.process_time IS '处理时间'; +COMMENT ON COLUMN infra_api_error_log.process_user_id IS '处理用户编号'; +COMMENT ON COLUMN infra_api_error_log.creator IS '创建者'; +COMMENT ON COLUMN infra_api_error_log.create_time IS '创建时间'; +COMMENT ON COLUMN infra_api_error_log.updater IS '更新者'; +COMMENT ON COLUMN infra_api_error_log.update_time IS '更新时间'; +COMMENT ON COLUMN infra_api_error_log.deleted IS '是否删除'; +COMMENT ON COLUMN infra_api_error_log.tenant_id IS '租户编号'; +COMMENT ON TABLE infra_api_error_log IS '系统异常日志'; + +DROP SEQUENCE IF EXISTS infra_api_error_log_seq; +CREATE SEQUENCE infra_api_error_log_seq + START 1; + +-- ---------------------------- +-- Table structure for infra_codegen_column +-- ---------------------------- +DROP TABLE IF EXISTS infra_codegen_column; +CREATE TABLE infra_codegen_column +( + id int8 NOT NULL, + table_id int8 NOT NULL, + column_name varchar(200) NOT NULL, + data_type varchar(100) NOT NULL, + column_comment varchar(500) NOT NULL, + nullable bool NOT NULL, + primary_key bool NOT NULL, + ordinal_position int4 NOT NULL, + java_type varchar(32) NOT NULL, + java_field varchar(64) NOT NULL, + dict_type varchar(200) NULL DEFAULT '', + example varchar(64) NULL DEFAULT NULL, + create_operation bool NOT NULL, + update_operation bool NOT NULL, + list_operation bool NOT NULL, + list_operation_condition varchar(32) NOT NULL DEFAULT '=', + list_operation_result bool NOT NULL, + html_type varchar(32) NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE infra_codegen_column + ADD CONSTRAINT pk_infra_codegen_column PRIMARY KEY (id); + +COMMENT ON COLUMN infra_codegen_column.id IS '编号'; +COMMENT ON COLUMN infra_codegen_column.table_id IS '表编号'; +COMMENT ON COLUMN infra_codegen_column.column_name IS '字段名'; +COMMENT ON COLUMN infra_codegen_column.data_type IS '字段类型'; +COMMENT ON COLUMN infra_codegen_column.column_comment IS '字段描述'; +COMMENT ON COLUMN infra_codegen_column.nullable IS '是否允许为空'; +COMMENT ON COLUMN infra_codegen_column.primary_key IS '是否主键'; +COMMENT ON COLUMN infra_codegen_column.ordinal_position IS '排序'; +COMMENT ON COLUMN infra_codegen_column.java_type IS 'Java 属性类型'; +COMMENT ON COLUMN infra_codegen_column.java_field IS 'Java 属性名'; +COMMENT ON COLUMN infra_codegen_column.dict_type IS '字典类型'; +COMMENT ON COLUMN infra_codegen_column.example IS '数据示例'; +COMMENT ON COLUMN infra_codegen_column.create_operation IS '是否为 Create 创建操作的字段'; +COMMENT ON COLUMN infra_codegen_column.update_operation IS '是否为 Update 更新操作的字段'; +COMMENT ON COLUMN infra_codegen_column.list_operation IS '是否为 List 查询操作的字段'; +COMMENT ON COLUMN infra_codegen_column.list_operation_condition IS 'List 查询操作的条件类型'; +COMMENT ON COLUMN infra_codegen_column.list_operation_result IS '是否为 List 查询操作的返回字段'; +COMMENT ON COLUMN infra_codegen_column.html_type IS '显示类型'; +COMMENT ON COLUMN infra_codegen_column.creator IS '创建者'; +COMMENT ON COLUMN infra_codegen_column.create_time IS '创建时间'; +COMMENT ON COLUMN infra_codegen_column.updater IS '更新者'; +COMMENT ON COLUMN infra_codegen_column.update_time IS '更新时间'; +COMMENT ON COLUMN infra_codegen_column.deleted IS '是否删除'; +COMMENT ON TABLE infra_codegen_column IS '代码生成表字段定义'; + +DROP SEQUENCE IF EXISTS infra_codegen_column_seq; +CREATE SEQUENCE infra_codegen_column_seq + START 1; + +-- ---------------------------- +-- Table structure for infra_codegen_table +-- ---------------------------- +DROP TABLE IF EXISTS infra_codegen_table; +CREATE TABLE infra_codegen_table +( + id int8 NOT NULL, + data_source_config_id int8 NOT NULL, + scene int2 NOT NULL DEFAULT 1, + table_name varchar(200) NOT NULL DEFAULT '', + table_comment varchar(500) NOT NULL DEFAULT '', + remark varchar(500) NULL DEFAULT NULL, + module_name varchar(30) NOT NULL, + business_name varchar(30) NOT NULL, + class_name varchar(100) NOT NULL DEFAULT '', + class_comment varchar(50) NOT NULL, + author varchar(50) NOT NULL, + template_type int2 NOT NULL DEFAULT 1, + front_type int2 NOT NULL, + parent_menu_id int8 NULL DEFAULT NULL, + master_table_id int8 NULL DEFAULT NULL, + sub_join_column_id int8 NULL DEFAULT NULL, + sub_join_many bool NULL DEFAULT NULL, + tree_parent_column_id int8 NULL DEFAULT NULL, + tree_name_column_id int8 NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE infra_codegen_table + ADD CONSTRAINT pk_infra_codegen_table PRIMARY KEY (id); + +COMMENT ON COLUMN infra_codegen_table.id IS '编号'; +COMMENT ON COLUMN infra_codegen_table.data_source_config_id IS '数据源配置的编号'; +COMMENT ON COLUMN infra_codegen_table.scene IS '生成场景'; +COMMENT ON COLUMN infra_codegen_table.table_name IS '表名称'; +COMMENT ON COLUMN infra_codegen_table.table_comment IS '表描述'; +COMMENT ON COLUMN infra_codegen_table.remark IS '备注'; +COMMENT ON COLUMN infra_codegen_table.module_name IS '模块名'; +COMMENT ON COLUMN infra_codegen_table.business_name IS '业务名'; +COMMENT ON COLUMN infra_codegen_table.class_name IS '类名称'; +COMMENT ON COLUMN infra_codegen_table.class_comment IS '类描述'; +COMMENT ON COLUMN infra_codegen_table.author IS '作者'; +COMMENT ON COLUMN infra_codegen_table.template_type IS '模板类型'; +COMMENT ON COLUMN infra_codegen_table.front_type IS '前端类型'; +COMMENT ON COLUMN infra_codegen_table.parent_menu_id IS '父菜单编号'; +COMMENT ON COLUMN infra_codegen_table.master_table_id IS '主表的编号'; +COMMENT ON COLUMN infra_codegen_table.sub_join_column_id IS '子表关联主表的字段编号'; +COMMENT ON COLUMN infra_codegen_table.sub_join_many IS '主表与子表是否一对多'; +COMMENT ON COLUMN infra_codegen_table.tree_parent_column_id IS '树表的父字段编号'; +COMMENT ON COLUMN infra_codegen_table.tree_name_column_id IS '树表的名字字段编号'; +COMMENT ON COLUMN infra_codegen_table.creator IS '创建者'; +COMMENT ON COLUMN infra_codegen_table.create_time IS '创建时间'; +COMMENT ON COLUMN infra_codegen_table.updater IS '更新者'; +COMMENT ON COLUMN infra_codegen_table.update_time IS '更新时间'; +COMMENT ON COLUMN infra_codegen_table.deleted IS '是否删除'; +COMMENT ON TABLE infra_codegen_table IS '代码生成表定义'; + +DROP SEQUENCE IF EXISTS infra_codegen_table_seq; +CREATE SEQUENCE infra_codegen_table_seq + START 1; + +-- ---------------------------- +-- Table structure for infra_config +-- ---------------------------- +DROP TABLE IF EXISTS infra_config; +CREATE TABLE infra_config +( + id int4 NOT NULL, + category varchar(50) NOT NULL, + type int2 NOT NULL, + name varchar(100) NOT NULL DEFAULT '', + config_key varchar(100) NOT NULL DEFAULT '', + value varchar(500) NOT NULL DEFAULT '', + visible bool NOT NULL, + remark varchar(500) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE infra_config + ADD CONSTRAINT pk_infra_config PRIMARY KEY (id); + +COMMENT ON COLUMN infra_config.id IS '参数主键'; +COMMENT ON COLUMN infra_config.category IS '参数分组'; +COMMENT ON COLUMN infra_config.type IS '参数类型'; +COMMENT ON COLUMN infra_config.name IS '参数名称'; +COMMENT ON COLUMN infra_config.config_key IS '参数键名'; +COMMENT ON COLUMN infra_config.value IS '参数键值'; +COMMENT ON COLUMN infra_config.visible IS '是否可见'; +COMMENT ON COLUMN infra_config.remark IS '备注'; +COMMENT ON COLUMN infra_config.creator IS '创建者'; +COMMENT ON COLUMN infra_config.create_time IS '创建时间'; +COMMENT ON COLUMN infra_config.updater IS '更新者'; +COMMENT ON COLUMN infra_config.update_time IS '更新时间'; +COMMENT ON COLUMN infra_config.deleted IS '是否删除'; +COMMENT ON TABLE infra_config IS '参数配置表'; + +-- ---------------------------- +-- Records of infra_config +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (2, 'biz', 1, '用户管理-账号初始密码', 'sys.user.init-password', '123456', '0', '初始化密码 123456', 'admin', '2021-01-05 17:03:48', '1', '2024-04-03 17:22:28', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (7, 'url', 2, 'MySQL 监控的地址', 'url.druid', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:33:38', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (8, 'url', 2, 'SkyWalking 监控的地址', 'url.skywalking', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:57:03', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (9, 'url', 2, 'Spring Boot Admin 监控的地址', 'url.spring-boot-admin', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:52:07', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (10, 'url', 2, 'Swagger 接口文档的地址', 'url.swagger', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:59:00', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (11, 'ui', 2, '腾讯地图 key', 'tencent.lbs.key', 'TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E', '1', '腾讯地图 key', '1', '2023-06-03 19:16:27', '1', '2023-06-03 19:16:27', '0'); +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (12, 'test2', 2, 'test3', 'test4', 'test5', '1', 'test6', '1', '2023-12-03 09:55:16', '1', '2023-12-03 09:55:27', '0'); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS infra_config_seq; +CREATE SEQUENCE infra_config_seq + START 13; + +-- ---------------------------- +-- Table structure for infra_data_source_config +-- ---------------------------- +DROP TABLE IF EXISTS infra_data_source_config; +CREATE TABLE infra_data_source_config +( + id int8 NOT NULL, + name varchar(100) NOT NULL DEFAULT '', + url varchar(1024) NOT NULL, + username varchar(255) NOT NULL, + password varchar(255) NOT NULL DEFAULT '', + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE infra_data_source_config + ADD CONSTRAINT pk_infra_data_source_config PRIMARY KEY (id); + +COMMENT ON COLUMN infra_data_source_config.id IS '主键编号'; +COMMENT ON COLUMN infra_data_source_config.name IS '参数名称'; +COMMENT ON COLUMN infra_data_source_config.url IS '数据源连接'; +COMMENT ON COLUMN infra_data_source_config.username IS '用户名'; +COMMENT ON COLUMN infra_data_source_config.password IS '密码'; +COMMENT ON COLUMN infra_data_source_config.creator IS '创建者'; +COMMENT ON COLUMN infra_data_source_config.create_time IS '创建时间'; +COMMENT ON COLUMN infra_data_source_config.updater IS '更新者'; +COMMENT ON COLUMN infra_data_source_config.update_time IS '更新时间'; +COMMENT ON COLUMN infra_data_source_config.deleted IS '是否删除'; +COMMENT ON TABLE infra_data_source_config IS '数据源配置表'; + +DROP SEQUENCE IF EXISTS infra_data_source_config_seq; +CREATE SEQUENCE infra_data_source_config_seq + START 1; + +-- ---------------------------- +-- Table structure for infra_file +-- ---------------------------- +DROP TABLE IF EXISTS infra_file; +CREATE TABLE infra_file +( + id int8 NOT NULL, + config_id int8 NULL DEFAULT NULL, + name varchar(256) NULL DEFAULT NULL, + path varchar(512) NOT NULL, + url varchar(1024) NOT NULL, + type varchar(128) NULL DEFAULT NULL, + size int4 NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE infra_file + ADD CONSTRAINT pk_infra_file PRIMARY KEY (id); + +COMMENT ON COLUMN infra_file.id IS '文件编号'; +COMMENT ON COLUMN infra_file.config_id IS '配置编号'; +COMMENT ON COLUMN infra_file.name IS '文件名'; +COMMENT ON COLUMN infra_file.path IS '文件路径'; +COMMENT ON COLUMN infra_file.url IS '文件 URL'; +COMMENT ON COLUMN infra_file.type IS '文件类型'; +COMMENT ON COLUMN infra_file.size IS '文件大小'; +COMMENT ON COLUMN infra_file.creator IS '创建者'; +COMMENT ON COLUMN infra_file.create_time IS '创建时间'; +COMMENT ON COLUMN infra_file.updater IS '更新者'; +COMMENT ON COLUMN infra_file.update_time IS '更新时间'; +COMMENT ON COLUMN infra_file.deleted IS '是否删除'; +COMMENT ON TABLE infra_file IS '文件表'; + +DROP SEQUENCE IF EXISTS infra_file_seq; +CREATE SEQUENCE infra_file_seq + START 1; + +-- ---------------------------- +-- Table structure for infra_file_config +-- ---------------------------- +DROP TABLE IF EXISTS infra_file_config; +CREATE TABLE infra_file_config +( + id int8 NOT NULL, + name varchar(63) NOT NULL, + storage int2 NOT NULL, + remark varchar(255) NULL DEFAULT NULL, + master bool NOT NULL, + config varchar(4096) NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE infra_file_config + ADD CONSTRAINT pk_infra_file_config PRIMARY KEY (id); + +COMMENT ON COLUMN infra_file_config.id IS '编号'; +COMMENT ON COLUMN infra_file_config.name IS '配置名'; +COMMENT ON COLUMN infra_file_config.storage IS '存储器'; +COMMENT ON COLUMN infra_file_config.remark IS '备注'; +COMMENT ON COLUMN infra_file_config.master IS '是否为主配置'; +COMMENT ON COLUMN infra_file_config.config IS '存储配置'; +COMMENT ON COLUMN infra_file_config.creator IS '创建者'; +COMMENT ON COLUMN infra_file_config.create_time IS '创建时间'; +COMMENT ON COLUMN infra_file_config.updater IS '更新者'; +COMMENT ON COLUMN infra_file_config.update_time IS '更新时间'; +COMMENT ON COLUMN infra_file_config.deleted IS '是否删除'; +COMMENT ON TABLE infra_file_config IS '文件配置表'; + +-- ---------------------------- +-- Records of infra_file_config +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (4, '数据库', 1, '我是数据库', '0', '{"@class":"com.win.module.infra.framework.file.core.client.db.DBFileClientConfig","domain":"http://127.0.0.1:48080"}', '1', '2022-03-15 23:56:24', '1', '2024-02-28 22:54:07', '0'); +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (22, '七牛存储器', 20, '', '1', '{"@class":"com.win.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"s3.cn-south-1.qiniucs.com","domain":"http://test.win.iocoder.cn","bucket":"ruoyi-vue-pro","accessKey":"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS","accessSecret":"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY"}', '1', '2024-01-13 22:11:12', '1', '2024-04-03 19:38:34', '0'); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS infra_file_config_seq; +CREATE SEQUENCE infra_file_config_seq + START 23; + +-- ---------------------------- +-- Table structure for infra_file_content +-- ---------------------------- +DROP TABLE IF EXISTS infra_file_content; +CREATE TABLE infra_file_content +( + id int8 NOT NULL, + config_id int8 NOT NULL, + path varchar(512) NOT NULL, + content bytea NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE infra_file_content + ADD CONSTRAINT pk_infra_file_content PRIMARY KEY (id); + +COMMENT ON COLUMN infra_file_content.id IS '编号'; +COMMENT ON COLUMN infra_file_content.config_id IS '配置编号'; +COMMENT ON COLUMN infra_file_content.path IS '文件路径'; +COMMENT ON COLUMN infra_file_content.content IS '文件内容'; +COMMENT ON COLUMN infra_file_content.creator IS '创建者'; +COMMENT ON COLUMN infra_file_content.create_time IS '创建时间'; +COMMENT ON COLUMN infra_file_content.updater IS '更新者'; +COMMENT ON COLUMN infra_file_content.update_time IS '更新时间'; +COMMENT ON COLUMN infra_file_content.deleted IS '是否删除'; +COMMENT ON TABLE infra_file_content IS '文件表'; + +DROP SEQUENCE IF EXISTS infra_file_content_seq; +CREATE SEQUENCE infra_file_content_seq + START 1; + +-- ---------------------------- +-- Table structure for infra_job +-- ---------------------------- +DROP TABLE IF EXISTS infra_job; +CREATE TABLE infra_job +( + id int8 NOT NULL, + name varchar(32) NOT NULL, + status int2 NOT NULL, + handler_name varchar(64) NOT NULL, + handler_param varchar(255) NULL DEFAULT NULL, + cron_expression varchar(32) NOT NULL, + retry_count int4 NOT NULL DEFAULT 0, + retry_interval int4 NOT NULL DEFAULT 0, + monitor_timeout int4 NOT NULL DEFAULT 0, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE infra_job + ADD CONSTRAINT pk_infra_job PRIMARY KEY (id); + +COMMENT ON COLUMN infra_job.id IS '任务编号'; +COMMENT ON COLUMN infra_job.name IS '任务名称'; +COMMENT ON COLUMN infra_job.status IS '任务状态'; +COMMENT ON COLUMN infra_job.handler_name IS '处理器的名字'; +COMMENT ON COLUMN infra_job.handler_param IS '处理器的参数'; +COMMENT ON COLUMN infra_job.cron_expression IS 'CRON 表达式'; +COMMENT ON COLUMN infra_job.retry_count IS '重试次数'; +COMMENT ON COLUMN infra_job.retry_interval IS '重试间隔'; +COMMENT ON COLUMN infra_job.monitor_timeout IS '监控超时时间'; +COMMENT ON COLUMN infra_job.creator IS '创建者'; +COMMENT ON COLUMN infra_job.create_time IS '创建时间'; +COMMENT ON COLUMN infra_job.updater IS '更新者'; +COMMENT ON COLUMN infra_job.update_time IS '更新时间'; +COMMENT ON COLUMN infra_job.deleted IS '是否删除'; +COMMENT ON TABLE infra_job IS '定时任务表'; + +-- ---------------------------- +-- Records of infra_job +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (5, '支付通知 Job', 2, 'payNotifyJob', NULL, '* * * * * ?', 0, 0, 0, '1', '2021-10-27 08:34:42', '1', '2023-07-09 20:51:41', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (17, '支付订单同步 Job', 2, 'payOrderSyncJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-22 14:36:26', '1', '2023-07-22 15:39:08', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (18, '支付订单过期 Job', 2, 'payOrderExpireJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-22 15:36:23', '1', '2023-07-22 15:39:54', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (19, '退款订单的同步 Job', 2, 'payRefundSyncJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-23 21:03:44', '1', '2023-07-23 21:09:00', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (21, '交易订单的自动过期 Job', 2, 'tradeOrderAutoCancelJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-25 23:43:26', '1', '2023-09-26 19:23:30', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (22, '交易订单的自动收货 Job', 2, 'tradeOrderAutoReceiveJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 19:23:53', '1', '2023-09-26 23:38:08', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (23, '交易订单的自动评论 Job', 2, 'tradeOrderAutoCommentJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 23:38:29', '1', '2023-09-27 11:03:10', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (24, '佣金解冻 Job', 2, 'brokerageRecordUnfreezeJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-28 22:01:46', '1', '2023-09-28 22:01:56', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (25, '访问日志清理 Job', 2, 'accessLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 10:59:41', '1', '2023-10-03 11:01:10', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (26, '错误日志清理 Job', 2, 'errorLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 11:00:43', '1', '2023-10-03 11:01:12', '0'); +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (27, '任务日志清理 Job', 2, 'jobLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 11:01:33', '1', '2023-10-03 11:01:42', '0'); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS infra_job_seq; +CREATE SEQUENCE infra_job_seq + START 28; + +-- ---------------------------- +-- Table structure for infra_job_log +-- ---------------------------- +DROP TABLE IF EXISTS infra_job_log; +CREATE TABLE infra_job_log +( + id int8 NOT NULL, + job_id int8 NOT NULL, + handler_name varchar(64) NOT NULL, + handler_param varchar(255) NULL DEFAULT NULL, + execute_index int2 NOT NULL DEFAULT 1, + begin_time timestamp NOT NULL, + end_time timestamp NULL DEFAULT NULL, + duration int4 NULL DEFAULT NULL, + status int2 NOT NULL, + result varchar(4000) NULL DEFAULT '', + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE infra_job_log + ADD CONSTRAINT pk_infra_job_log PRIMARY KEY (id); + +COMMENT ON COLUMN infra_job_log.id IS '日志编号'; +COMMENT ON COLUMN infra_job_log.job_id IS '任务编号'; +COMMENT ON COLUMN infra_job_log.handler_name IS '处理器的名字'; +COMMENT ON COLUMN infra_job_log.handler_param IS '处理器的参数'; +COMMENT ON COLUMN infra_job_log.execute_index IS '第几次执行'; +COMMENT ON COLUMN infra_job_log.begin_time IS '开始执行时间'; +COMMENT ON COLUMN infra_job_log.end_time IS '结束执行时间'; +COMMENT ON COLUMN infra_job_log.duration IS '执行时长'; +COMMENT ON COLUMN infra_job_log.status IS '任务状态'; +COMMENT ON COLUMN infra_job_log.result IS '结果数据'; +COMMENT ON COLUMN infra_job_log.creator IS '创建者'; +COMMENT ON COLUMN infra_job_log.create_time IS '创建时间'; +COMMENT ON COLUMN infra_job_log.updater IS '更新者'; +COMMENT ON COLUMN infra_job_log.update_time IS '更新时间'; +COMMENT ON COLUMN infra_job_log.deleted IS '是否删除'; +COMMENT ON TABLE infra_job_log IS '定时任务日志表'; + +DROP SEQUENCE IF EXISTS infra_job_log_seq; +CREATE SEQUENCE infra_job_log_seq + START 1; + +-- ---------------------------- +-- Table structure for system_dept +-- ---------------------------- +DROP TABLE IF EXISTS system_dept; +CREATE TABLE system_dept +( + id int8 NOT NULL, + name varchar(30) NOT NULL DEFAULT '', + parent_id int8 NOT NULL DEFAULT 0, + sort int4 NOT NULL DEFAULT 0, + leader_user_id int8 NULL DEFAULT NULL, + phone varchar(11) NULL DEFAULT NULL, + email varchar(50) NULL DEFAULT NULL, + status int2 NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_dept + ADD CONSTRAINT pk_system_dept PRIMARY KEY (id); + +COMMENT ON COLUMN system_dept.id IS '部门id'; +COMMENT ON COLUMN system_dept.name IS '部门名称'; +COMMENT ON COLUMN system_dept.parent_id IS '父部门id'; +COMMENT ON COLUMN system_dept.sort IS '显示顺序'; +COMMENT ON COLUMN system_dept.leader_user_id IS '负责人'; +COMMENT ON COLUMN system_dept.phone IS '联系电话'; +COMMENT ON COLUMN system_dept.email IS '邮箱'; +COMMENT ON COLUMN system_dept.status IS '部门状态(0正常 1停用)'; +COMMENT ON COLUMN system_dept.creator IS '创建者'; +COMMENT ON COLUMN system_dept.create_time IS '创建时间'; +COMMENT ON COLUMN system_dept.updater IS '更新者'; +COMMENT ON COLUMN system_dept.update_time IS '更新时间'; +COMMENT ON COLUMN system_dept.deleted IS '是否删除'; +COMMENT ON COLUMN system_dept.tenant_id IS '租户编号'; +COMMENT ON TABLE system_dept IS '部门表'; + +-- ---------------------------- +-- Records of system_dept +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (100, '芋道源码', 0, 0, 1, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2023-11-14 23:30:36', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (101, '深圳总公司', 100, 1, 104, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2023-12-02 09:53:35', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (102, '长沙分公司', 100, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:40', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (103, '研发部门', 101, 1, 104, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2024-03-24 20:56:04', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (104, '市场部门', 101, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:38', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (105, '测试部门', 101, 3, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2022-05-16 20:25:15', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (106, '财务部门', 101, 4, 103, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '103', '2022-01-15 21:32:22', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (107, '运维部门', 101, 5, 1, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2023-12-02 09:28:22', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (108, '市场部门', 102, 1, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2022-02-16 08:35:45', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (109, '财务部门', 102, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:29', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (110, '新部门', 0, 1, NULL, NULL, NULL, 0, '110', '2022-02-23 20:46:30', '110', '2022-02-23 20:46:30', '0', 121); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (111, '顶级部门', 0, 1, NULL, NULL, NULL, 0, '113', '2022-03-07 21:44:50', '113', '2022-03-07 21:44:50', '0', 122); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (112, '产品部门', 101, 100, 1, NULL, NULL, 1, '1', '2023-12-02 09:45:13', '1', '2023-12-02 09:45:31', '0', 1); +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (113, '支持部门', 102, 3, 104, NULL, NULL, 1, '1', '2023-12-02 09:47:38', '1', '2023-12-02 09:47:38', '0', 1); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_dept_seq; +CREATE SEQUENCE system_dept_seq + START 114; + +-- ---------------------------- +-- Table structure for system_dict_data +-- ---------------------------- +DROP TABLE IF EXISTS system_dict_data; +CREATE TABLE system_dict_data +( + id int8 NOT NULL, + sort int4 NOT NULL DEFAULT 0, + label varchar(100) NOT NULL DEFAULT '', + value varchar(100) NOT NULL DEFAULT '', + dict_type varchar(100) NOT NULL DEFAULT '', + status int2 NOT NULL DEFAULT 0, + color_type varchar(100) NULL DEFAULT '', + css_class varchar(100) NULL DEFAULT '', + remark varchar(500) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_dict_data + ADD CONSTRAINT pk_system_dict_data PRIMARY KEY (id); + +COMMENT ON COLUMN system_dict_data.id IS '字典编码'; +COMMENT ON COLUMN system_dict_data.sort IS '字典排序'; +COMMENT ON COLUMN system_dict_data.label IS '字典标签'; +COMMENT ON COLUMN system_dict_data.value IS '字典键值'; +COMMENT ON COLUMN system_dict_data.dict_type IS '字典类型'; +COMMENT ON COLUMN system_dict_data.status IS '状态(0正常 1停用)'; +COMMENT ON COLUMN system_dict_data.color_type IS '颜色类型'; +COMMENT ON COLUMN system_dict_data.css_class IS 'css 样式'; +COMMENT ON COLUMN system_dict_data.remark IS '备注'; +COMMENT ON COLUMN system_dict_data.creator IS '创建者'; +COMMENT ON COLUMN system_dict_data.create_time IS '创建时间'; +COMMENT ON COLUMN system_dict_data.updater IS '更新者'; +COMMENT ON COLUMN system_dict_data.update_time IS '更新时间'; +COMMENT ON COLUMN system_dict_data.deleted IS '是否删除'; +COMMENT ON TABLE system_dict_data IS '字典数据表'; + +-- ---------------------------- +-- Records of system_dict_data +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1, 1, '男', '1', 'system_user_sex', 0, 'default', 'A', '性别男', 'admin', '2021-01-05 17:03:48', '1', '2022-03-29 00:14:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2, 2, '女', '2', 'system_user_sex', 0, 'success', '', '性别女', 'admin', '2021-01-05 17:03:48', '1', '2023-11-15 23:30:37', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (8, 1, '正常', '1', 'infra_job_status', 0, 'success', '', '正常状态', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:33:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (9, 2, '暂停', '2', 'infra_job_status', 0, 'danger', '', '停用状态', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:33:45', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (12, 1, '系统内置', '1', 'infra_config_type', 0, 'danger', '', '参数类型 - 系统内置', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:06:02', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (13, 2, '自定义', '2', 'infra_config_type', 0, 'primary', '', '参数类型 - 自定义', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:06:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (14, 1, '通知', '1', 'system_notice_type', 0, 'success', '', '通知', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:05:57', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (15, 2, '公告', '2', 'system_notice_type', 0, 'info', '', '公告', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:06:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (16, 0, '其它', '0', 'infra_operate_type', 0, 'default', '', '其它操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:19', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (17, 1, '查询', '1', 'infra_operate_type', 0, 'info', '', '查询操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (18, 2, '新增', '2', 'infra_operate_type', 0, 'primary', '', '新增操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:21', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (19, 3, '修改', '3', 'infra_operate_type', 0, 'warning', '', '修改操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (20, 4, '删除', '4', 'infra_operate_type', 0, 'danger', '', '删除操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:23', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (22, 5, '导出', '5', 'infra_operate_type', 0, 'default', '', '导出操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:24', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (23, 6, '导入', '6', 'infra_operate_type', 0, 'default', '', '导入操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:25', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (27, 1, '开启', '0', 'common_status', 0, 'primary', '', '开启状态', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 08:00:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (28, 2, '关闭', '1', 'common_status', 0, 'info', '', '关闭状态', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 08:00:44', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (29, 1, '目录', '1', 'system_menu_type', 0, '', '', '目录', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:45', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (30, 2, '菜单', '2', 'system_menu_type', 0, '', '', '菜单', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:41', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (31, 3, '按钮', '3', 'system_menu_type', 0, '', '', '按钮', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (32, 1, '内置', '1', 'system_role_type', 0, 'danger', '', '内置角色', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:02:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (33, 2, '自定义', '2', 'system_role_type', 0, 'primary', '', '自定义角色', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:02:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (34, 1, '全部数据权限', '1', 'system_data_scope', 0, '', '', '全部数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (35, 2, '指定部门数据权限', '2', 'system_data_scope', 0, '', '', '指定部门数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (36, 3, '本部门数据权限', '3', 'system_data_scope', 0, '', '', '本部门数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (37, 4, '本部门及以下数据权限', '4', 'system_data_scope', 0, '', '', '本部门及以下数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:21', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (38, 5, '仅本人数据权限', '5', 'system_data_scope', 0, '', '', '仅本人数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:23', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (39, 0, '成功', '0', 'system_login_result', 0, 'success', '', '登陆结果 - 成功', '', '2021-01-18 06:17:36', '1', '2022-02-16 13:23:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (40, 10, '账号或密码不正确', '10', 'system_login_result', 0, 'primary', '', '登陆结果 - 账号或密码不正确', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:27', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (41, 20, '用户被禁用', '20', 'system_login_result', 0, 'warning', '', '登陆结果 - 用户被禁用', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:23:57', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (42, 30, '验证码不存在', '30', 'system_login_result', 0, 'info', '', '登陆结果 - 验证码不存在', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (43, 31, '验证码不正确', '31', 'system_login_result', 0, 'info', '', '登陆结果 - 验证码不正确', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:11', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (44, 100, '未知异常', '100', 'system_login_result', 0, 'danger', '', '登陆结果 - 未知异常', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:23', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (45, 1, '是', 'true', 'infra_boolean_string', 0, 'danger', '', 'Boolean 是否类型 - 是', '', '2021-01-19 03:20:55', '1', '2022-03-15 23:01:45', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (46, 1, '否', 'false', 'infra_boolean_string', 0, 'info', '', 'Boolean 是否类型 - 否', '', '2021-01-19 03:20:55', '1', '2022-03-15 23:09:45', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (50, 1, '单表(增删改查)', '1', 'infra_codegen_template_type', 0, '', '', NULL, '', '2021-02-05 07:09:06', '', '2022-03-10 16:33:15', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (51, 2, '树表(增删改查)', '2', 'infra_codegen_template_type', 0, '', '', NULL, '', '2021-02-05 07:14:46', '', '2022-03-10 16:33:19', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (53, 0, '初始化中', '0', 'infra_job_status', 0, 'primary', '', NULL, '', '2021-02-07 07:46:49', '1', '2022-02-16 19:33:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (57, 0, '运行中', '0', 'infra_job_log_status', 0, 'primary', '', 'RUNNING', '', '2021-02-08 10:04:24', '1', '2022-02-16 19:07:48', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (58, 1, '成功', '1', 'infra_job_log_status', 0, 'success', '', NULL, '', '2021-02-08 10:06:57', '1', '2022-02-16 19:07:52', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (59, 2, '失败', '2', 'infra_job_log_status', 0, 'warning', '', '失败', '', '2021-02-08 10:07:38', '1', '2022-02-16 19:07:56', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (60, 1, '会员', '1', 'user_type', 0, 'primary', '', NULL, '', '2021-02-26 00:16:27', '1', '2022-02-16 10:22:19', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (61, 2, '管理员', '2', 'user_type', 0, 'success', '', NULL, '', '2021-02-26 00:16:34', '1', '2022-02-16 10:22:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (62, 0, '未处理', '0', 'infra_api_error_log_process_status', 0, 'primary', '', NULL, '', '2021-02-26 07:07:19', '1', '2022-02-16 20:14:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (63, 1, '已处理', '1', 'infra_api_error_log_process_status', 0, 'success', '', NULL, '', '2021-02-26 07:07:26', '1', '2022-02-16 20:14:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (64, 2, '已忽略', '2', 'infra_api_error_log_process_status', 0, 'danger', '', NULL, '', '2021-02-26 07:07:34', '1', '2022-02-16 20:14:14', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (66, 2, '阿里云', 'ALIYUN', 'system_sms_channel_code', 0, 'primary', '', NULL, '1', '2021-04-05 01:05:26', '1', '2022-02-16 10:09:52', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (67, 1, '验证码', '1', 'system_sms_template_type', 0, 'warning', '', NULL, '1', '2021-04-05 21:50:57', '1', '2022-02-16 12:48:30', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (68, 2, '通知', '2', 'system_sms_template_type', 0, 'primary', '', NULL, '1', '2021-04-05 21:51:08', '1', '2022-02-16 12:48:27', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (69, 0, '营销', '3', 'system_sms_template_type', 0, 'danger', '', NULL, '1', '2021-04-05 21:51:15', '1', '2022-02-16 12:48:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (70, 0, '初始化', '0', 'system_sms_send_status', 0, 'primary', '', NULL, '1', '2021-04-11 20:18:33', '1', '2022-02-16 10:26:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (71, 1, '发送成功', '10', 'system_sms_send_status', 0, 'success', '', NULL, '1', '2021-04-11 20:18:43', '1', '2022-02-16 10:25:56', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (72, 2, '发送失败', '20', 'system_sms_send_status', 0, 'danger', '', NULL, '1', '2021-04-11 20:18:49', '1', '2022-02-16 10:26:03', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (73, 3, '不发送', '30', 'system_sms_send_status', 0, 'info', '', NULL, '1', '2021-04-11 20:19:44', '1', '2022-02-16 10:26:10', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (74, 0, '等待结果', '0', 'system_sms_receive_status', 0, 'primary', '', NULL, '1', '2021-04-11 20:27:43', '1', '2022-02-16 10:28:24', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (75, 1, '接收成功', '10', 'system_sms_receive_status', 0, 'success', '', NULL, '1', '2021-04-11 20:29:25', '1', '2022-02-16 10:28:28', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (76, 2, '接收失败', '20', 'system_sms_receive_status', 0, 'danger', '', NULL, '1', '2021-04-11 20:29:31', '1', '2022-02-16 10:28:32', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (77, 0, '调试(钉钉)', 'DEBUG_DING_TALK', 'system_sms_channel_code', 0, 'info', '', NULL, '1', '2021-04-13 00:20:37', '1', '2022-02-16 10:10:00', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (80, 100, '账号登录', '100', 'system_login_type', 0, 'primary', '', '账号登录', '1', '2021-10-06 00:52:02', '1', '2022-02-16 13:11:34', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (81, 101, '社交登录', '101', 'system_login_type', 0, 'info', '', '社交登录', '1', '2021-10-06 00:52:17', '1', '2022-02-16 13:11:40', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (83, 200, '主动登出', '200', 'system_login_type', 0, 'primary', '', '主动登出', '1', '2021-10-06 00:52:58', '1', '2022-02-16 13:11:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (85, 202, '强制登出', '202', 'system_login_type', 0, 'danger', '', '强制退出', '1', '2021-10-06 00:53:41', '1', '2022-02-16 13:11:57', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (86, 0, '病假', '1', 'bpm_oa_leave_type', 0, 'primary', '', NULL, '1', '2021-09-21 22:35:28', '1', '2022-02-16 10:00:41', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (87, 1, '事假', '2', 'bpm_oa_leave_type', 0, 'info', '', NULL, '1', '2021-09-21 22:36:11', '1', '2022-02-16 10:00:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (88, 2, '婚假', '3', 'bpm_oa_leave_type', 0, 'warning', '', NULL, '1', '2021-09-21 22:36:38', '1', '2022-02-16 10:00:53', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (113, 1, '微信公众号支付', 'wx_pub', 'pay_channel_code', 0, 'success', '', '微信公众号支付', '1', '2021-12-03 10:40:24', '1', '2023-07-19 20:08:47', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (114, 2, '微信小程序支付', 'wx_lite', 'pay_channel_code', 0, 'success', '', '微信小程序支付', '1', '2021-12-03 10:41:06', '1', '2023-07-19 20:08:50', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (115, 3, '微信 App 支付', 'wx_app', 'pay_channel_code', 0, 'success', '', '微信 App 支付', '1', '2021-12-03 10:41:20', '1', '2023-07-19 20:08:56', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (116, 10, '支付宝 PC 网站支付', 'alipay_pc', 'pay_channel_code', 0, 'primary', '', '支付宝 PC 网站支付', '1', '2021-12-03 10:42:09', '1', '2023-07-19 20:09:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (117, 11, '支付宝 Wap 网站支付', 'alipay_wap', 'pay_channel_code', 0, 'primary', '', '支付宝 Wap 网站支付', '1', '2021-12-03 10:42:26', '1', '2023-07-19 20:09:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (118, 12, '支付宝 App 支付', 'alipay_app', 'pay_channel_code', 0, 'primary', '', '支付宝 App 支付', '1', '2021-12-03 10:42:55', '1', '2023-07-19 20:09:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (119, 14, '支付宝扫码支付', 'alipay_qr', 'pay_channel_code', 0, 'primary', '', '支付宝扫码支付', '1', '2021-12-03 10:43:10', '1', '2023-07-19 20:09:28', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (120, 10, '通知成功', '10', 'pay_notify_status', 0, 'success', '', '通知成功', '1', '2021-12-03 11:02:41', '1', '2023-07-19 10:08:19', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (121, 20, '通知失败', '20', 'pay_notify_status', 0, 'danger', '', '通知失败', '1', '2021-12-03 11:02:59', '1', '2023-07-19 10:08:21', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (122, 0, '等待通知', '0', 'pay_notify_status', 0, 'info', '', '未通知', '1', '2021-12-03 11:03:10', '1', '2023-07-19 10:08:24', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (123, 10, '支付成功', '10', 'pay_order_status', 0, 'success', '', '支付成功', '1', '2021-12-03 11:18:29', '1', '2023-07-19 18:04:28', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (124, 30, '支付关闭', '30', 'pay_order_status', 0, 'info', '', '支付关闭', '1', '2021-12-03 11:18:42', '1', '2023-07-19 18:05:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (125, 0, '等待支付', '0', 'pay_order_status', 0, 'info', '', '未支付', '1', '2021-12-03 11:18:18', '1', '2023-07-19 18:04:15', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (600, 5, '首页', '1', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (601, 4, '秒杀活动页', '2', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (602, 3, '砍价活动页', '3', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (603, 2, '限时折扣页', '4', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (604, 1, '满减送页', '5', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1118, 0, '等待退款', '0', 'pay_refund_status', 0, 'info', '', '等待退款', '1', '2021-12-10 16:44:59', '1', '2023-07-19 10:14:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1119, 20, '退款失败', '20', 'pay_refund_status', 0, 'danger', '', '退款失败', '1', '2021-12-10 16:45:10', '1', '2023-07-19 10:15:10', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1124, 10, '退款成功', '10', 'pay_refund_status', 0, 'success', '', '退款成功', '1', '2021-12-10 16:46:26', '1', '2023-07-19 10:15:00', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1127, 1, '审批中', '1', 'bpm_process_instance_status', 0, 'default', '', '流程实例的状态 - 进行中', '1', '2022-01-07 23:47:22', '1', '2024-03-16 16:11:45', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1128, 2, '审批通过', '2', 'bpm_process_instance_status', 0, 'success', '', '流程实例的状态 - 已完成', '1', '2022-01-07 23:47:49', '1', '2024-03-16 16:11:54', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1129, 1, '审批中', '1', 'bpm_task_status', 0, 'primary', '', '流程实例的结果 - 处理中', '1', '2022-01-07 23:48:32', '1', '2024-03-08 22:41:37', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1130, 2, '审批通过', '2', 'bpm_task_status', 0, 'success', '', '流程实例的结果 - 通过', '1', '2022-01-07 23:48:45', '1', '2024-03-08 22:41:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1131, 3, '审批不通过', '3', 'bpm_task_status', 0, 'danger', '', '流程实例的结果 - 不通过', '1', '2022-01-07 23:48:55', '1', '2024-03-08 22:41:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1132, 4, '已取消', '4', 'bpm_task_status', 0, 'info', '', '流程实例的结果 - 撤销', '1', '2022-01-07 23:49:06', '1', '2024-03-08 22:41:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1133, 10, '流程表单', '10', 'bpm_model_form_type', 0, '', '', '流程的表单类型 - 流程表单', '103', '2022-01-11 23:51:30', '103', '2022-01-11 23:51:30', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1134, 20, '业务表单', '20', 'bpm_model_form_type', 0, '', '', '流程的表单类型 - 业务表单', '103', '2022-01-11 23:51:47', '103', '2022-01-11 23:51:47', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1135, 10, '角色', '10', 'bpm_task_candidate_strategy', 0, 'info', '', '任务分配规则的类型 - 角色', '103', '2022-01-12 23:21:22', '1', '2024-03-06 02:53:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1136, 20, '部门的成员', '20', 'bpm_task_candidate_strategy', 0, 'primary', '', '任务分配规则的类型 - 部门的成员', '103', '2022-01-12 23:21:47', '1', '2024-03-06 02:53:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1137, 21, '部门的负责人', '21', 'bpm_task_candidate_strategy', 0, 'primary', '', '任务分配规则的类型 - 部门的负责人', '103', '2022-01-12 23:33:36', '1', '2024-03-06 02:53:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1138, 30, '用户', '30', 'bpm_task_candidate_strategy', 0, 'info', '', '任务分配规则的类型 - 用户', '103', '2022-01-12 23:34:02', '1', '2024-03-06 02:53:19', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1139, 40, '用户组', '40', 'bpm_task_candidate_strategy', 0, 'warning', '', '任务分配规则的类型 - 用户组', '103', '2022-01-12 23:34:21', '1', '2024-03-06 02:53:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1140, 60, '流程表达式', '60', 'bpm_task_candidate_strategy', 0, 'danger', '', '任务分配规则的类型 - 流程表达式', '103', '2022-01-12 23:34:43', '1', '2024-03-06 02:53:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1141, 22, '岗位', '22', 'bpm_task_candidate_strategy', 0, 'success', '', '任务分配规则的类型 - 岗位', '103', '2022-01-14 18:41:55', '1', '2024-03-06 02:53:21', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1145, 1, '管理后台', '1', 'infra_codegen_scene', 0, '', '', '代码生成的场景枚举 - 管理后台', '1', '2022-02-02 13:15:06', '1', '2022-03-10 16:32:59', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1146, 2, '用户 APP', '2', 'infra_codegen_scene', 0, '', '', '代码生成的场景枚举 - 用户 APP', '1', '2022-02-02 13:15:19', '1', '2022-03-10 16:33:03', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1150, 1, '数据库', '1', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:25:28', '1', '2022-03-15 00:25:28', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1151, 10, '本地磁盘', '10', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:25:41', '1', '2022-03-15 00:25:56', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1152, 11, 'FTP 服务器', '11', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:06', '1', '2022-03-15 00:26:10', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1153, 12, 'SFTP 服务器', '12', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:22', '1', '2022-03-15 00:26:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1154, 20, 'S3 对象存储', '20', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:31', '1', '2022-03-15 00:26:45', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1155, 103, '短信登录', '103', 'system_login_type', 0, 'default', '', NULL, '1', '2022-05-09 23:57:58', '1', '2022-05-09 23:58:09', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1156, 1, 'password', 'password', 'system_oauth2_grant_type', 0, 'default', '', '密码模式', '1', '2022-05-12 00:22:05', '1', '2022-05-11 16:26:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1157, 2, 'authorization_code', 'authorization_code', 'system_oauth2_grant_type', 0, 'primary', '', '授权码模式', '1', '2022-05-12 00:22:59', '1', '2022-05-11 16:26:02', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1158, 3, 'implicit', 'implicit', 'system_oauth2_grant_type', 0, 'success', '', '简化模式', '1', '2022-05-12 00:23:40', '1', '2022-05-11 16:26:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1159, 4, 'client_credentials', 'client_credentials', 'system_oauth2_grant_type', 0, 'default', '', '客户端模式', '1', '2022-05-12 00:23:51', '1', '2022-05-11 16:26:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1160, 5, 'refresh_token', 'refresh_token', 'system_oauth2_grant_type', 0, 'info', '', '刷新模式', '1', '2022-05-12 00:24:02', '1', '2022-05-11 16:26:11', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1162, 1, '销售中', '1', 'product_spu_status', 0, 'success', '', '商品 SPU 状态 - 销售中', '1', '2022-10-24 21:19:47', '1', '2022-10-24 21:20:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1163, 0, '仓库中', '0', 'product_spu_status', 0, 'info', '', '商品 SPU 状态 - 仓库中', '1', '2022-10-24 21:20:54', '1', '2022-10-24 21:21:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1164, 0, '回收站', '-1', 'product_spu_status', 0, 'default', '', '商品 SPU 状态 - 回收站', '1', '2022-10-24 21:21:11', '1', '2022-10-24 21:21:11', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1165, 1, '满减', '1', 'promotion_discount_type', 0, 'success', '', '优惠类型 - 满减', '1', '2022-11-01 12:46:41', '1', '2022-11-01 12:50:11', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1166, 2, '折扣', '2', 'promotion_discount_type', 0, 'primary', '', '优惠类型 - 折扣', '1', '2022-11-01 12:46:51', '1', '2022-11-01 12:50:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1167, 1, '固定日期', '1', 'promotion_coupon_template_validity_type', 0, 'default', '', '优惠劵模板的有限期类型 - 固定日期', '1', '2022-11-02 00:07:34', '1', '2022-11-04 00:07:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1168, 2, '领取之后', '2', 'promotion_coupon_template_validity_type', 0, 'default', '', '优惠劵模板的有限期类型 - 领取之后', '1', '2022-11-02 00:07:54', '1', '2022-11-04 00:07:52', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1169, 1, '通用劵', '1', 'promotion_product_scope', 0, 'default', '', '营销的商品范围 - 全部商品参与', '1', '2022-11-02 00:28:22', '1', '2023-09-28 00:27:42', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1170, 2, '商品劵', '2', 'promotion_product_scope', 0, 'default', '', '营销的商品范围 - 指定商品参与', '1', '2022-11-02 00:28:34', '1', '2023-09-28 00:27:44', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1171, 1, '未使用', '1', 'promotion_coupon_status', 0, 'primary', '', '优惠劵的状态 - 已领取', '1', '2022-11-04 00:15:08', '1', '2023-10-03 12:54:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1172, 2, '已使用', '2', 'promotion_coupon_status', 0, 'success', '', '优惠劵的状态 - 已使用', '1', '2022-11-04 00:15:21', '1', '2022-11-04 19:16:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1173, 3, '已过期', '3', 'promotion_coupon_status', 0, 'info', '', '优惠劵的状态 - 已过期', '1', '2022-11-04 00:15:43', '1', '2022-11-04 19:16:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1174, 1, '直接领取', '1', 'promotion_coupon_take_type', 0, 'primary', '', '优惠劵的领取方式 - 直接领取', '1', '2022-11-04 19:13:00', '1', '2022-11-04 19:13:25', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1175, 2, '指定发放', '2', 'promotion_coupon_take_type', 0, 'success', '', '优惠劵的领取方式 - 指定发放', '1', '2022-11-04 19:13:13', '1', '2022-11-04 19:14:48', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1176, 10, '未开始', '10', 'promotion_activity_status', 0, 'primary', '', '促销活动的状态枚举 - 未开始', '1', '2022-11-04 22:54:49', '1', '2022-11-04 22:55:53', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1177, 20, '进行中', '20', 'promotion_activity_status', 0, 'success', '', '促销活动的状态枚举 - 进行中', '1', '2022-11-04 22:55:06', '1', '2022-11-04 22:55:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1178, 30, '已结束', '30', 'promotion_activity_status', 0, 'info', '', '促销活动的状态枚举 - 已结束', '1', '2022-11-04 22:55:41', '1', '2022-11-04 22:55:41', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1179, 40, '已关闭', '40', 'promotion_activity_status', 0, 'warning', '', '促销活动的状态枚举 - 已关闭', '1', '2022-11-04 22:56:10', '1', '2022-11-04 22:56:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1180, 10, '满 N 元', '10', 'promotion_condition_type', 0, 'primary', '', '营销的条件类型 - 满 N 元', '1', '2022-11-04 22:59:45', '1', '2022-11-04 22:59:45', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1181, 20, '满 N 件', '20', 'promotion_condition_type', 0, 'success', '', '营销的条件类型 - 满 N 件', '1', '2022-11-04 23:00:02', '1', '2022-11-04 23:00:02', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1182, 10, '申请售后', '10', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 申请售后', '1', '2022-11-19 20:53:33', '1', '2022-11-19 20:54:42', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1183, 20, '商品待退货', '20', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 商品待退货', '1', '2022-11-19 20:54:36', '1', '2022-11-19 20:58:58', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1184, 30, '商家待收货', '30', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 商家待收货', '1', '2022-11-19 20:56:56', '1', '2022-11-19 20:59:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1185, 40, '等待退款', '40', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 等待退款', '1', '2022-11-19 20:59:54', '1', '2022-11-19 21:00:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1186, 50, '退款成功', '50', 'trade_after_sale_status', 0, 'default', '', '交易售后状态 - 退款成功', '1', '2022-11-19 21:00:33', '1', '2022-11-19 21:00:33', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1187, 61, '买家取消', '61', 'trade_after_sale_status', 0, 'info', '', '交易售后状态 - 买家取消', '1', '2022-11-19 21:01:29', '1', '2022-11-19 21:01:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1188, 62, '商家拒绝', '62', 'trade_after_sale_status', 0, 'info', '', '交易售后状态 - 商家拒绝', '1', '2022-11-19 21:02:17', '1', '2022-11-19 21:02:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1189, 63, '商家拒收货', '63', 'trade_after_sale_status', 0, 'info', '', '交易售后状态 - 商家拒收货', '1', '2022-11-19 21:02:37', '1', '2022-11-19 21:03:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1190, 10, '售中退款', '10', 'trade_after_sale_type', 0, 'success', '', '交易售后的类型 - 售中退款', '1', '2022-11-19 21:05:05', '1', '2022-11-19 21:38:23', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1191, 20, '售后退款', '20', 'trade_after_sale_type', 0, 'primary', '', '交易售后的类型 - 售后退款', '1', '2022-11-19 21:05:32', '1', '2022-11-19 21:38:32', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1192, 10, '仅退款', '10', 'trade_after_sale_way', 0, 'primary', '', '交易售后的方式 - 仅退款', '1', '2022-11-19 21:39:19', '1', '2022-11-19 21:39:19', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1193, 20, '退货退款', '20', 'trade_after_sale_way', 0, 'success', '', '交易售后的方式 - 退货退款', '1', '2022-11-19 21:39:38', '1', '2022-11-19 21:39:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1194, 10, '微信小程序', '10', 'terminal', 0, 'default', '', '终端 - 微信小程序', '1', '2022-12-10 10:51:11', '1', '2022-12-10 10:51:57', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1195, 20, 'H5 网页', '20', 'terminal', 0, 'default', '', '终端 - H5 网页', '1', '2022-12-10 10:51:30', '1', '2022-12-10 10:51:59', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1196, 11, '微信公众号', '11', 'terminal', 0, 'default', '', '终端 - 微信公众号', '1', '2022-12-10 10:54:16', '1', '2022-12-10 10:52:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1197, 31, '苹果 App', '31', 'terminal', 0, 'default', '', '终端 - 苹果 App', '1', '2022-12-10 10:54:42', '1', '2022-12-10 10:52:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1198, 32, '安卓 App', '32', 'terminal', 0, 'default', '', '终端 - 安卓 App', '1', '2022-12-10 10:55:02', '1', '2022-12-10 10:59:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1199, 0, '普通订单', '0', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 普通订单', '1', '2022-12-10 16:34:14', '1', '2022-12-10 16:34:14', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1200, 1, '秒杀订单', '1', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 秒杀订单', '1', '2022-12-10 16:34:26', '1', '2022-12-10 16:34:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1201, 2, '拼团订单', '2', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 拼团订单', '1', '2022-12-10 16:34:36', '1', '2022-12-10 16:34:36', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1202, 3, '砍价订单', '3', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 砍价订单', '1', '2022-12-10 16:34:48', '1', '2022-12-10 16:34:48', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1203, 0, '待支付', '0', 'trade_order_status', 0, 'default', '', '交易订单状态 - 待支付', '1', '2022-12-10 16:49:29', '1', '2022-12-10 16:49:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1204, 10, '待发货', '10', 'trade_order_status', 0, 'primary', '', '交易订单状态 - 待发货', '1', '2022-12-10 16:49:53', '1', '2022-12-10 16:51:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1205, 20, '已发货', '20', 'trade_order_status', 0, 'primary', '', '交易订单状态 - 已发货', '1', '2022-12-10 16:50:13', '1', '2022-12-10 16:51:31', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1206, 30, '已完成', '30', 'trade_order_status', 0, 'success', '', '交易订单状态 - 已完成', '1', '2022-12-10 16:50:30', '1', '2022-12-10 16:51:06', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1207, 40, '已取消', '40', 'trade_order_status', 0, 'danger', '', '交易订单状态 - 已取消', '1', '2022-12-10 16:50:50', '1', '2022-12-10 16:51:00', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1208, 0, '未售后', '0', 'trade_order_item_after_sale_status', 0, 'info', '', '交易订单项的售后状态 - 未售后', '1', '2022-12-10 20:58:42', '1', '2022-12-10 20:59:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1209, 1, '售后中', '1', 'trade_order_item_after_sale_status', 0, 'primary', '', '交易订单项的售后状态 - 售后中', '1', '2022-12-10 20:59:21', '1', '2022-12-10 20:59:21', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1210, 2, '已退款', '2', 'trade_order_item_after_sale_status', 0, 'success', '', '交易订单项的售后状态 - 已退款', '1', '2022-12-10 20:59:46', '1', '2022-12-10 20:59:46', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1211, 1, '完全匹配', '1', 'mp_auto_reply_request_match', 0, 'primary', '', '公众号自动回复的请求关键字匹配模式 - 完全匹配', '1', '2023-01-16 23:30:39', '1', '2023-01-16 23:31:00', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1212, 2, '半匹配', '2', 'mp_auto_reply_request_match', 0, 'success', '', '公众号自动回复的请求关键字匹配模式 - 半匹配', '1', '2023-01-16 23:30:55', '1', '2023-01-16 23:31:10', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1213, 1, '文本', 'text', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 文本', '1', '2023-01-17 22:17:32', '1', '2023-01-17 22:17:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1214, 2, '图片', 'image', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 图片', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:19:47', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1215, 3, '语音', 'voice', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 语音', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:20:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1216, 4, '视频', 'video', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 视频', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:21:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1217, 5, '小视频', 'shortvideo', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 小视频', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:19:59', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1218, 6, '图文', 'news', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 图文', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:22:54', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1219, 7, '音乐', 'music', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 音乐', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:22:54', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1220, 8, '地理位置', 'location', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 地理位置', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:23:51', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1221, 9, '链接', 'link', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 链接', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:24:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1222, 10, '事件', 'event', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 事件', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:24:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1223, 0, '初始化', '0', 'system_mail_send_status', 0, 'primary', '', '邮件发送状态 - 初始化\n', '1', '2023-01-26 09:53:49', '1', '2023-01-26 16:36:14', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1224, 10, '发送成功', '10', 'system_mail_send_status', 0, 'success', '', '邮件发送状态 - 发送成功', '1', '2023-01-26 09:54:28', '1', '2023-01-26 16:36:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1225, 20, '发送失败', '20', 'system_mail_send_status', 0, 'danger', '', '邮件发送状态 - 发送失败', '1', '2023-01-26 09:54:50', '1', '2023-01-26 16:36:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1226, 30, '不发送', '30', 'system_mail_send_status', 0, 'info', '', '邮件发送状态 - 不发送', '1', '2023-01-26 09:55:06', '1', '2023-01-26 16:36:36', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1227, 1, '通知公告', '1', 'system_notify_template_type', 0, 'primary', '', '站内信模版的类型 - 通知公告', '1', '2023-01-28 10:35:59', '1', '2023-01-28 10:35:59', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1228, 2, '系统消息', '2', 'system_notify_template_type', 0, 'success', '', '站内信模版的类型 - 系统消息', '1', '2023-01-28 10:36:20', '1', '2023-01-28 10:36:25', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1230, 13, '支付宝条码支付', 'alipay_bar', 'pay_channel_code', 0, 'primary', '', '支付宝条码支付', '1', '2023-02-18 23:32:24', '1', '2023-07-19 20:09:23', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1231, 10, 'Vue2 Element UI 标准模版', '10', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:03:55', '1', '2023-04-13 00:03:55', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1232, 20, 'Vue3 Element Plus 标准模版', '20', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:04:08', '1', '2023-04-13 00:04:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1233, 21, 'Vue3 Element Plus Schema 模版', '21', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:04:26', '1', '2023-04-13 00:04:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1234, 30, 'Vue3 vben 模版', '30', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:04:26', '1', '2023-04-13 00:04:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1244, 0, '按件', '1', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:46:40', '1', '2023-05-21 22:46:40', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1245, 1, '按重量', '2', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:46:58', '1', '2023-05-21 22:46:58', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1246, 2, '按体积', '3', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:47:18', '1', '2023-05-21 22:47:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1335, 11, '订单积分抵扣', '11', 'member_point_biz_type', 0, '', '', '', '1', '2023-06-10 12:15:27', '1', '2023-10-11 07:41:43', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1336, 1, '签到', '1', 'member_point_biz_type', 0, '', '', '', '1', '2023-06-10 12:15:48', '1', '2023-08-20 11:59:53', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1341, 20, '已退款', '20', 'pay_order_status', 0, 'danger', '', '已退款', '1', '2023-07-19 18:05:37', '1', '2023-07-19 18:05:37', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1342, 21, '请求成功,但是结果失败', '21', 'pay_notify_status', 0, 'warning', '', '请求成功,但是结果失败', '1', '2023-07-19 18:10:47', '1', '2023-07-19 18:11:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1343, 22, '请求失败', '22', 'pay_notify_status', 0, 'warning', '', NULL, '1', '2023-07-19 18:11:05', '1', '2023-07-19 18:11:27', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1344, 4, '微信扫码支付', 'wx_native', 'pay_channel_code', 0, 'success', '', '微信扫码支付', '1', '2023-07-19 20:07:47', '1', '2023-07-19 20:09:03', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1345, 5, '微信条码支付', 'wx_bar', 'pay_channel_code', 0, 'success', '', '微信条码支付\n', '1', '2023-07-19 20:08:06', '1', '2023-07-19 20:09:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1346, 1, '支付单', '1', 'pay_notify_type', 0, 'primary', '', '支付单', '1', '2023-07-20 12:23:17', '1', '2023-07-20 12:23:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1347, 2, '退款单', '2', 'pay_notify_type', 0, 'danger', '', NULL, '1', '2023-07-20 12:23:26', '1', '2023-07-20 12:23:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1348, 20, '模拟支付', 'mock', 'pay_channel_code', 0, 'default', '', '模拟支付', '1', '2023-07-29 11:10:51', '1', '2023-07-29 03:14:10', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1349, 12, '订单积分抵扣(整单取消)', '12', 'member_point_biz_type', 0, '', '', '', '1', '2023-08-20 12:00:03', '1', '2023-10-11 07:42:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1350, 0, '管理员调整', '0', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1351, 1, '邀新奖励', '1', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1352, 11, '下单奖励', '11', 'member_experience_biz_type', 0, 'success', '', NULL, '', '2023-08-22 12:41:01', '1', '2023-10-11 07:45:09', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1353, 12, '下单奖励(整单取消)', '12', 'member_experience_biz_type', 0, 'warning', '', NULL, '', '2023-08-22 12:41:01', '1', '2023-10-11 07:45:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1354, 4, '签到奖励', '4', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1355, 5, '抽奖奖励', '5', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1356, 1, '快递发货', '1', 'trade_delivery_type', 0, '', '', '', '1', '2023-08-23 00:04:55', '1', '2023-08-23 00:04:55', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1357, 2, '用户自提', '2', 'trade_delivery_type', 0, '', '', '', '1', '2023-08-23 00:05:05', '1', '2023-08-23 00:05:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1358, 3, '品类劵', '3', 'promotion_product_scope', 0, 'default', '', '', '1', '2023-09-01 23:43:07', '1', '2023-09-28 00:27:47', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1359, 1, '人人分销', '1', 'brokerage_enabled_condition', 0, '', '', '所有用户都可以分销', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1360, 2, '指定分销', '2', 'brokerage_enabled_condition', 0, '', '', '仅可后台手动设置推广员', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1361, 1, '首次绑定', '1', 'brokerage_bind_mode', 0, '', '', '只要用户没有推广人,随时都可以绑定推广关系', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1362, 2, '注册绑定', '2', 'brokerage_bind_mode', 0, '', '', '仅新用户注册时才能绑定推广关系', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1363, 3, '覆盖绑定', '3', 'brokerage_bind_mode', 0, '', '', '如果用户已经有推广人,推广人会被变更', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1364, 1, '钱包', '1', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1365, 2, '银行卡', '2', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1366, 3, '微信', '3', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1367, 4, '支付宝', '4', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1368, 1, '订单返佣', '1', 'brokerage_record_biz_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1369, 2, '申请提现', '2', 'brokerage_record_biz_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1370, 3, '申请提现驳回', '3', 'brokerage_record_biz_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1371, 0, '待结算', '0', 'brokerage_record_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1372, 1, '已结算', '1', 'brokerage_record_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1373, 2, '已取消', '2', 'brokerage_record_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1374, 0, '审核中', '0', 'brokerage_withdraw_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1375, 10, '审核通过', '10', 'brokerage_withdraw_status', 0, 'success', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1376, 11, '提现成功', '11', 'brokerage_withdraw_status', 0, 'success', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1377, 20, '审核不通过', '20', 'brokerage_withdraw_status', 0, 'danger', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1378, 21, '提现失败', '21', 'brokerage_withdraw_status', 0, 'danger', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1379, 0, '工商银行', '0', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1380, 1, '建设银行', '1', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1381, 2, '农业银行', '2', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1382, 3, '中国银行', '3', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1383, 4, '交通银行', '4', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1384, 5, '招商银行', '5', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1385, 21, '钱包', 'wallet', 'pay_channel_code', 0, 'primary', '', '', '1', '2023-10-01 21:46:19', '1', '2023-10-01 21:48:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1386, 1, '砍价中', '1', 'promotion_bargain_record_status', 0, 'default', '', '', '1', '2023-10-05 10:41:26', '1', '2023-10-05 10:41:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1387, 2, '砍价成功', '2', 'promotion_bargain_record_status', 0, 'success', '', '', '1', '2023-10-05 10:41:39', '1', '2023-10-05 10:41:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1388, 3, '砍价失败', '3', 'promotion_bargain_record_status', 0, 'warning', '', '', '1', '2023-10-05 10:41:57', '1', '2023-10-05 10:41:57', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1389, 1, '拼团中', '1', 'promotion_combination_record_status', 0, '', '', '', '1', '2023-10-08 07:24:44', '1', '2023-10-08 07:24:44', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1390, 2, '拼团成功', '2', 'promotion_combination_record_status', 0, 'success', '', '', '1', '2023-10-08 07:24:56', '1', '2023-10-08 07:24:56', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1391, 3, '拼团失败', '3', 'promotion_combination_record_status', 0, 'warning', '', '', '1', '2023-10-08 07:25:11', '1', '2023-10-08 07:25:11', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1392, 2, '管理员修改', '2', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:41:34', '1', '2023-10-11 07:41:34', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1393, 13, '订单积分抵扣(单个退款)', '13', 'member_point_biz_type', 0, '', '', '', '1', '2023-10-11 07:42:29', '1', '2023-10-11 07:42:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1394, 21, '订单积分奖励', '21', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:42:44', '1', '2023-10-11 07:42:44', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1395, 22, '订单积分奖励(整单取消)', '22', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:42:55', '1', '2023-10-11 07:43:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1396, 23, '订单积分奖励(单个退款)', '23', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:43:16', '1', '2023-10-11 07:43:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1397, 13, '下单奖励(单个退款)', '13', 'member_experience_biz_type', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1398, 5, '网上转账', '5', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:24', '1', '2023-10-18 21:55:24', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1399, 6, '支付宝', '6', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:38', '1', '2023-10-18 21:55:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1400, 7, '微信支付', '7', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:53', '1', '2023-10-18 21:55:53', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1401, 8, '其他', '8', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:56:06', '1', '2023-10-18 21:56:06', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1402, 1, 'IT', '1', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:15', '1', '2024-02-18 23:30:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1403, 2, '金融业', '2', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:29', '1', '2024-02-18 23:30:43', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1404, 3, '房地产', '3', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:41', '1', '2024-02-18 23:30:48', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1405, 4, '商业服务', '4', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:54', '1', '2024-02-18 23:30:54', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1406, 5, '运输/物流', '5', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:03', '1', '2024-02-18 23:31:00', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1407, 6, '生产', '6', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:13', '1', '2024-02-18 23:31:08', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1408, 7, '政府', '7', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:27', '1', '2024-02-18 23:31:13', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1409, 8, '文化传媒', '8', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:37', '1', '2024-02-18 23:31:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1422, 1, 'A (重点客户)', '1', 'crm_customer_level', 0, 'primary', '', '', '1', '2023-10-28 23:07:13', '1', '2023-10-28 23:07:13', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1423, 2, 'B (普通客户)', '2', 'crm_customer_level', 0, 'info', '', '', '1', '2023-10-28 23:07:35', '1', '2023-10-28 23:07:35', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1424, 3, 'C (非优先客户)', '3', 'crm_customer_level', 0, 'default', '', '', '1', '2023-10-28 23:07:53', '1', '2023-10-28 23:07:53', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1425, 1, '促销', '1', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:29', '1', '2023-10-28 23:08:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1426, 2, '搜索引擎', '2', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:39', '1', '2023-10-28 23:08:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1427, 3, '广告', '3', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:47', '1', '2023-10-28 23:08:47', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1428, 4, '转介绍', '4', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:58', '1', '2023-10-28 23:08:58', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1429, 5, '线上注册', '5', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:12', '1', '2023-10-28 23:09:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1430, 6, '线上咨询', '6', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:22', '1', '2023-10-28 23:09:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1431, 7, '预约上门', '7', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:39', '1', '2023-10-28 23:09:39', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1432, 8, '陌拜', '8', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:04', '1', '2023-10-28 23:10:04', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1433, 9, '电话咨询', '9', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:18', '1', '2023-10-28 23:10:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1434, 10, '邮件咨询', '10', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:33', '1', '2023-10-28 23:10:33', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1435, 10, 'Gitee', '10', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:04:42', '1', '2023-11-04 13:04:42', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1436, 20, '钉钉', '20', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:04:54', '1', '2023-11-04 13:04:54', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1437, 30, '企业微信', '30', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:09', '1', '2023-11-04 13:05:09', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1438, 31, '微信公众平台', '31', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:18', '1', '2023-11-04 13:05:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1439, 32, '微信开放平台', '32', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:30', '1', '2023-11-04 13:05:30', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1440, 34, '微信小程序', '34', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:38', '1', '2023-11-04 13:07:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1441, 1, '上架', '1', 'crm_product_status', 0, 'success', '', '', '1', '2023-10-30 21:49:34', '1', '2023-10-30 21:49:34', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1442, 0, '下架', '0', 'crm_product_status', 0, 'success', '', '', '1', '2023-10-30 21:49:13', '1', '2023-10-30 21:49:13', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1443, 15, '子表', '15', 'infra_codegen_template_type', 0, 'default', '', '', '1', '2023-11-13 23:06:16', '1', '2023-11-13 23:06:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1444, 10, '主表(标准模式)', '10', 'infra_codegen_template_type', 0, 'default', '', '', '1', '2023-11-14 12:32:49', '1', '2023-11-14 12:32:49', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1445, 11, '主表(ERP 模式)', '11', 'infra_codegen_template_type', 0, 'default', '', '', '1', '2023-11-14 12:33:05', '1', '2023-11-14 12:33:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1446, 12, '主表(内嵌模式)', '12', 'infra_codegen_template_type', 0, '', '', '', '1', '2023-11-14 12:33:31', '1', '2023-11-14 12:33:31', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1447, 1, '负责人', '1', 'crm_permission_level', 0, 'default', '', '', '1', '2023-11-30 09:53:12', '1', '2023-11-30 09:53:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1448, 2, '只读', '2', 'crm_permission_level', 0, '', '', '', '1', '2023-11-30 09:53:29', '1', '2023-11-30 09:53:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1449, 3, '读写', '3', 'crm_permission_level', 0, '', '', '', '1', '2023-11-30 09:53:36', '1', '2023-11-30 09:53:36', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1450, 0, '未提交', '0', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:56:59', '1', '2023-11-30 18:56:59', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1451, 10, '审批中', '10', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:10', '1', '2023-11-30 18:57:10', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1452, 20, '审核通过', '20', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:24', '1', '2023-11-30 18:57:24', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1453, 30, '审核不通过', '30', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:32', '1', '2023-11-30 18:57:32', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1454, 40, '已取消', '40', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:42', '1', '2023-11-30 18:57:42', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1456, 1, '支票', '1', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:29', '1', '2023-10-18 21:54:29', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1457, 2, '现金', '2', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:41', '1', '2023-10-18 21:54:41', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1458, 3, '邮政汇款', '3', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:53', '1', '2023-10-18 21:54:53', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1459, 4, '电汇', '4', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:07', '1', '2023-10-18 21:55:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1460, 5, '网上转账', '5', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:24', '1', '2023-10-18 21:55:24', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1461, 1, '个', '1', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:02:26', '1', '2023-12-05 23:02:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1462, 2, '块', '2', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:02:34', '1', '2023-12-05 23:02:34', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1463, 3, '只', '3', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:02:57', '1', '2023-12-05 23:02:57', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1464, 4, '把', '4', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:05', '1', '2023-12-05 23:03:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1465, 5, '枚', '5', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:14', '1', '2023-12-05 23:03:14', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1466, 6, '瓶', '6', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:20', '1', '2023-12-05 23:03:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1467, 7, '盒', '7', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:30', '1', '2023-12-05 23:03:30', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1468, 8, '台', '8', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:41', '1', '2023-12-05 23:03:41', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1469, 9, '吨', '9', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:48', '1', '2023-12-05 23:03:48', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1470, 10, '千克', '10', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:03', '1', '2023-12-05 23:04:03', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1471, 11, '米', '11', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:12', '1', '2023-12-05 23:04:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1472, 12, '箱', '12', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:25', '1', '2023-12-05 23:04:25', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1473, 13, '套', '13', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:34', '1', '2023-12-05 23:04:34', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1474, 1, '打电话', '1', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:48:20', '1', '2024-01-15 20:48:20', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1475, 2, '发短信', '2', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:48:31', '1', '2024-01-15 20:48:31', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1476, 3, '上门拜访', '3', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:49:07', '1', '2024-01-15 20:49:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1477, 4, '微信沟通', '4', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:49:15', '1', '2024-01-15 20:49:15', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1478, 4, '钱包余额', '4', 'pay_transfer_type', 0, 'info', '', '', '1', '2023-10-28 16:28:37', '1', '2023-10-28 16:28:37', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1479, 3, '银行卡', '3', 'pay_transfer_type', 0, 'default', '', '', '1', '2023-10-28 16:28:21', '1', '2023-10-28 16:28:21', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1480, 2, '微信余额', '2', 'pay_transfer_type', 0, 'info', '', '', '1', '2023-10-28 16:28:07', '1', '2023-10-28 16:28:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1481, 1, '支付宝余额', '1', 'pay_transfer_type', 0, 'default', '', '', '1', '2023-10-28 16:27:44', '1', '2023-10-28 16:27:44', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1482, 4, '转账失败', '30', 'pay_transfer_status', 0, 'warning', '', '', '1', '2023-10-28 16:24:16', '1', '2023-10-28 16:24:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1483, 3, '转账成功', '20', 'pay_transfer_status', 0, 'success', '', '', '1', '2023-10-28 16:23:50', '1', '2023-10-28 16:23:50', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1484, 2, '转账进行中', '10', 'pay_transfer_status', 0, 'info', '', '', '1', '2023-10-28 16:23:12', '1', '2023-10-28 16:23:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1485, 1, '等待转账', '0', 'pay_transfer_status', 0, 'default', '', '', '1', '2023-10-28 16:21:43', '1', '2023-10-28 16:23:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1486, 10, '其它入库', '10', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-05 18:07:25', '1', '2024-02-05 18:07:43', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1487, 11, '其它入库(作废)', '11', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-05 18:08:07', '1', '2024-02-05 19:20:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1488, 20, '其它出库', '20', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-05 18:08:51', '1', '2024-02-05 18:08:51', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1489, 21, '其它出库(作废)', '21', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-05 18:09:00', '1', '2024-02-05 19:20:10', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1490, 10, '未审核', '10', 'erp_audit_status', 0, 'default', '', '', '1', '2024-02-06 00:00:21', '1', '2024-02-06 00:00:21', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1491, 20, '已审核', '20', 'erp_audit_status', 0, 'success', '', '', '1', '2024-02-06 00:00:35', '1', '2024-02-06 00:00:35', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1492, 30, '调拨入库', '30', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-07 20:34:19', '1', '2024-02-07 12:36:31', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1493, 31, '调拨入库(作废)', '31', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-07 20:34:29', '1', '2024-02-07 20:37:11', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1494, 32, '调拨出库', '32', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-07 20:34:38', '1', '2024-02-07 12:36:33', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1495, 33, '调拨出库(作废)', '33', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-07 20:34:49', '1', '2024-02-07 20:37:06', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1496, 40, '盘盈入库', '40', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-08 08:53:00', '1', '2024-02-08 08:53:09', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1497, 41, '盘盈入库(作废)', '41', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-08 08:53:39', '1', '2024-02-16 19:40:54', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1498, 42, '盘亏出库', '42', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-08 08:54:16', '1', '2024-02-08 08:54:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1499, 43, '盘亏出库(作废)', '43', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-08 08:54:31', '1', '2024-02-16 19:40:46', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1500, 50, '销售出库', '50', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-11 21:47:25', '1', '2024-02-11 21:50:40', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1501, 51, '销售出库(作废)', '51', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-11 21:47:37', '1', '2024-02-11 21:51:12', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1502, 60, '销售退货入库', '60', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-12 06:51:05', '1', '2024-02-12 06:51:05', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1503, 61, '销售退货入库(作废)', '61', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-12 06:51:18', '1', '2024-02-12 06:51:18', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1504, 70, '采购入库', '70', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-16 13:10:02', '1', '2024-02-16 13:10:02', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1505, 71, '采购入库(作废)', '71', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-16 13:10:10', '1', '2024-02-16 19:40:40', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1506, 80, '采购退货出库', '80', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-16 13:10:17', '1', '2024-02-16 13:10:17', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1507, 81, '采购退货出库(作废)', '81', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-16 13:10:26', '1', '2024-02-16 19:40:33', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1509, 3, '审批不通过', '3', 'bpm_process_instance_status', 0, 'danger', '', '', '1', '2024-03-16 16:12:06', '1', '2024-03-16 16:12:06', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1510, 4, '已取消', '4', 'bpm_process_instance_status', 0, 'warning', '', '', '1', '2024-03-16 16:12:22', '1', '2024-03-16 16:12:22', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1511, 5, '已退回', '5', 'bpm_task_status', 0, 'warning', '', '', '1', '2024-03-16 19:10:46', '1', '2024-03-08 22:41:40', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1512, 6, '委派中', '6', 'bpm_task_status', 0, 'primary', '', '', '1', '2024-03-17 10:06:22', '1', '2024-03-08 22:41:40', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1513, 7, '审批通过中', '7', 'bpm_task_status', 0, 'success', '', '', '1', '2024-03-17 10:06:47', '1', '2024-03-08 22:41:41', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1514, 0, '待审批', '0', 'bpm_task_status', 0, 'info', '', '', '1', '2024-03-17 10:07:11', '1', '2024-03-08 22:41:42', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1515, 35, '发起人自选', '35', 'bpm_task_candidate_strategy', 0, '', '', '', '1', '2024-03-22 19:45:16', '1', '2024-03-22 19:45:16', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1516, 1, '执行监听器', 'execution', 'bpm_process_listener_type', 0, 'primary', '', '', '1', '2024-03-23 12:54:03', '1', '2024-03-23 19:14:19', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1517, 1, '任务监听器', 'task', 'bpm_process_listener_type', 0, 'success', '', '', '1', '2024-03-23 12:54:13', '1', '2024-03-23 19:14:24', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1526, 1, 'Java 类', 'class', 'bpm_process_listener_value_type', 0, 'primary', '', '', '1', '2024-03-23 15:08:45', '1', '2024-03-23 19:14:32', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1527, 2, '表达式', 'expression', 'bpm_process_listener_value_type', 0, 'success', '', '', '1', '2024-03-23 15:09:06', '1', '2024-03-23 19:14:38', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1528, 3, '代理表达式', 'delegateExpression', 'bpm_process_listener_value_type', 0, 'info', '', '', '1', '2024-03-23 15:11:23', '1', '2024-03-23 19:14:41', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1529, 1, '天', '1', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:50:26', '1', '2024-03-29 22:50:26', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1530, 2, '周', '2', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:50:36', '1', '2024-03-29 22:50:36', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1531, 3, '月', '3', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:50:46', '1', '2024-03-29 22:50:54', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1532, 4, '季度', '4', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:51:01', '1', '2024-03-29 22:51:01', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1533, 5, '年', '5', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:51:07', '1', '2024-03-29 22:51:07', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1534, 1, '赢单', '1', 'crm_business_end_status_type', 0, 'success', '', '', '1', '2024-04-13 23:26:57', '1', '2024-04-13 23:26:57', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1535, 2, '输单', '2', 'crm_business_end_status_type', 0, 'primary', '', '', '1', '2024-04-13 23:27:31', '1', '2024-04-13 23:27:31', '0'); +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1536, 3, '无效', '3', 'crm_business_end_status_type', 0, 'info', '', '', '1', '2024-04-13 23:27:59', '1', '2024-04-13 23:27:59', '0'); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_dict_data_seq; +CREATE SEQUENCE system_dict_data_seq + START 1537; + +-- ---------------------------- +-- Table structure for system_dict_type +-- ---------------------------- +DROP TABLE IF EXISTS system_dict_type; +CREATE TABLE system_dict_type +( + id int8 NOT NULL, + name varchar(100) NOT NULL DEFAULT '', + type varchar(100) NOT NULL DEFAULT '', + status int2 NOT NULL DEFAULT 0, + remark varchar(500) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + deleted_time timestamp NULL DEFAULT NULL +); + +ALTER TABLE system_dict_type + ADD CONSTRAINT pk_system_dict_type PRIMARY KEY (id); + +COMMENT ON COLUMN system_dict_type.id IS '字典主键'; +COMMENT ON COLUMN system_dict_type.name IS '字典名称'; +COMMENT ON COLUMN system_dict_type.type IS '字典类型'; +COMMENT ON COLUMN system_dict_type.status IS '状态(0正常 1停用)'; +COMMENT ON COLUMN system_dict_type.remark IS '备注'; +COMMENT ON COLUMN system_dict_type.creator IS '创建者'; +COMMENT ON COLUMN system_dict_type.create_time IS '创建时间'; +COMMENT ON COLUMN system_dict_type.updater IS '更新者'; +COMMENT ON COLUMN system_dict_type.update_time IS '更新时间'; +COMMENT ON COLUMN system_dict_type.deleted IS '是否删除'; +COMMENT ON COLUMN system_dict_type.deleted_time IS '删除时间'; +COMMENT ON TABLE system_dict_type IS '字典类型表'; + +-- ---------------------------- +-- Records of system_dict_type +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1, '用户性别', 'system_user_sex', 0, NULL, 'admin', '2021-01-05 17:03:48', '1', '2022-05-16 20:29:32', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (6, '参数类型', 'infra_config_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:36:54', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (7, '通知类型', 'system_notice_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:35:26', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (9, '操作类型', 'infra_operate_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:01', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (10, '系统状态', 'common_status', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:21:28', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (11, 'Boolean 是否类型', 'infra_boolean_string', 0, 'boolean 转是否', '', '2021-01-19 03:20:08', '', '2022-02-01 16:37:10', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (104, '登陆结果', 'system_login_result', 0, '登陆结果', '', '2021-01-18 06:17:11', '', '2022-02-01 16:36:00', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (106, '代码生成模板类型', 'infra_codegen_template_type', 0, NULL, '', '2021-02-05 07:08:06', '1', '2022-05-16 20:26:50', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (107, '定时任务状态', 'infra_job_status', 0, NULL, '', '2021-02-07 07:44:16', '', '2022-02-01 16:51:11', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (108, '定时任务日志状态', 'infra_job_log_status', 0, NULL, '', '2021-02-08 10:03:51', '', '2022-02-01 16:50:43', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (109, '用户类型', 'user_type', 0, NULL, '', '2021-02-26 00:15:51', '', '2021-02-26 00:15:51', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (110, 'API 异常数据的处理状态', 'infra_api_error_log_process_status', 0, NULL, '', '2021-02-26 07:07:01', '', '2022-02-01 16:50:53', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (111, '短信渠道编码', 'system_sms_channel_code', 0, NULL, '1', '2021-04-05 01:04:50', '1', '2022-02-16 02:09:08', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (112, '短信模板的类型', 'system_sms_template_type', 0, NULL, '1', '2021-04-05 21:50:43', '1', '2022-02-01 16:35:06', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (113, '短信发送状态', 'system_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:03', '1', '2022-02-01 16:35:09', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (114, '短信接收状态', 'system_sms_receive_status', 0, NULL, '1', '2021-04-11 20:27:14', '1', '2022-02-01 16:35:14', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (116, '登陆日志的类型', 'system_login_type', 0, '登陆日志的类型', '1', '2021-10-06 00:50:46', '1', '2022-02-01 16:35:56', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (117, 'OA 请假类型', 'bpm_oa_leave_type', 0, NULL, '1', '2021-09-21 22:34:33', '1', '2022-01-22 10:41:37', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (130, '支付渠道编码类型', 'pay_channel_code', 0, '支付渠道的编码', '1', '2021-12-03 10:35:08', '1', '2023-07-10 10:11:39', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (131, '支付回调状态', 'pay_notify_status', 0, '支付回调状态(包括退款回调)', '1', '2021-12-03 10:53:29', '1', '2023-07-19 18:09:43', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (132, '支付订单状态', 'pay_order_status', 0, '支付订单状态', '1', '2021-12-03 11:17:50', '1', '2021-12-03 11:17:50', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (134, '退款订单状态', 'pay_refund_status', 0, '退款订单状态', '1', '2021-12-10 16:42:50', '1', '2023-07-19 10:13:17', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (139, '流程实例的状态', 'bpm_process_instance_status', 0, '流程实例的状态', '1', '2022-01-07 23:46:42', '1', '2022-01-07 23:46:42', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (140, '流程实例的结果', 'bpm_task_status', 0, '流程实例的结果', '1', '2022-01-07 23:48:10', '1', '2024-03-08 22:42:03', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (141, '流程的表单类型', 'bpm_model_form_type', 0, '流程的表单类型', '103', '2022-01-11 23:50:45', '103', '2022-01-11 23:50:45', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (142, '任务分配规则的类型', 'bpm_task_candidate_strategy', 0, 'BPM 任务的候选人的策略', '103', '2022-01-12 23:21:04', '103', '2024-03-06 02:53:59', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (144, '代码生成的场景枚举', 'infra_codegen_scene', 0, '代码生成的场景枚举', '1', '2022-02-02 13:14:45', '1', '2022-03-10 16:33:46', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (145, '角色类型', 'system_role_type', 0, '角色类型', '1', '2022-02-16 13:01:46', '1', '2022-02-16 13:01:46', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (146, '文件存储器', 'infra_file_storage', 0, '文件存储器', '1', '2022-03-15 00:24:38', '1', '2022-03-15 00:24:38', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (147, 'OAuth 2.0 授权类型', 'system_oauth2_grant_type', 0, 'OAuth 2.0 授权类型(模式)', '1', '2022-05-12 00:20:52', '1', '2022-05-11 16:25:49', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (149, '商品 SPU 状态', 'product_spu_status', 0, '商品 SPU 状态', '1', '2022-10-24 21:19:04', '1', '2022-10-24 21:19:08', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (150, '优惠类型', 'promotion_discount_type', 0, '优惠类型', '1', '2022-11-01 12:46:06', '1', '2022-11-01 12:46:06', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (151, '优惠劵模板的有限期类型', 'promotion_coupon_template_validity_type', 0, '优惠劵模板的有限期类型', '1', '2022-11-02 00:06:20', '1', '2022-11-04 00:08:26', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (152, '营销的商品范围', 'promotion_product_scope', 0, '营销的商品范围', '1', '2022-11-02 00:28:01', '1', '2022-11-02 00:28:01', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (153, '优惠劵的状态', 'promotion_coupon_status', 0, '优惠劵的状态', '1', '2022-11-04 00:14:49', '1', '2022-11-04 00:14:49', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (154, '优惠劵的领取方式', 'promotion_coupon_take_type', 0, '优惠劵的领取方式', '1', '2022-11-04 19:12:27', '1', '2022-11-04 19:12:27', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (155, '促销活动的状态', 'promotion_activity_status', 0, '促销活动的状态', '1', '2022-11-04 22:54:23', '1', '2022-11-04 22:54:23', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (156, '营销的条件类型', 'promotion_condition_type', 0, '营销的条件类型', '1', '2022-11-04 22:59:23', '1', '2022-11-04 22:59:23', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (157, '交易售后状态', 'trade_after_sale_status', 0, '交易售后状态', '1', '2022-11-19 20:52:56', '1', '2022-11-19 20:52:56', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (158, '交易售后的类型', 'trade_after_sale_type', 0, '交易售后的类型', '1', '2022-11-19 21:04:09', '1', '2022-11-19 21:04:09', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (159, '交易售后的方式', 'trade_after_sale_way', 0, '交易售后的方式', '1', '2022-11-19 21:39:04', '1', '2022-11-19 21:39:04', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (160, '终端', 'terminal', 0, '终端', '1', '2022-12-10 10:50:50', '1', '2022-12-10 10:53:11', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (161, '交易订单的类型', 'trade_order_type', 0, '交易订单的类型', '1', '2022-12-10 16:33:54', '1', '2022-12-10 16:33:54', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (162, '交易订单的状态', 'trade_order_status', 0, '交易订单的状态', '1', '2022-12-10 16:48:44', '1', '2022-12-10 16:48:44', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (163, '交易订单项的售后状态', 'trade_order_item_after_sale_status', 0, '交易订单项的售后状态', '1', '2022-12-10 20:58:08', '1', '2022-12-10 20:58:08', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (164, '公众号自动回复的请求关键字匹配模式', 'mp_auto_reply_request_match', 0, '公众号自动回复的请求关键字匹配模式', '1', '2023-01-16 23:29:56', '1', '2023-01-16 23:29:56', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (165, '公众号的消息类型', 'mp_message_type', 0, '公众号的消息类型', '1', '2023-01-17 22:17:09', '1', '2023-01-17 22:17:09', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (166, '邮件发送状态', 'system_mail_send_status', 0, '邮件发送状态', '1', '2023-01-26 09:53:13', '1', '2023-01-26 09:53:13', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (167, '站内信模版的类型', 'system_notify_template_type', 0, '站内信模版的类型', '1', '2023-01-28 10:35:10', '1', '2023-01-28 10:35:10', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (168, '代码生成的前端类型', 'infra_codegen_front_type', 0, '', '1', '2023-04-12 23:57:52', '1', '2023-04-12 23:57:52', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (170, '快递计费方式', 'trade_delivery_express_charge_mode', 0, '用于商城交易模块配送管理', '1', '2023-05-21 22:45:03', '1', '2023-05-21 22:45:03', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (171, '积分业务类型', 'member_point_biz_type', 0, '', '1', '2023-06-10 12:15:00', '1', '2023-06-28 13:48:20', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (173, '支付通知类型', 'pay_notify_type', 0, NULL, '1', '2023-07-20 12:23:03', '1', '2023-07-20 12:23:03', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (174, '会员经验业务类型', 'member_experience_biz_type', 0, NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (175, '交易配送类型', 'trade_delivery_type', 0, '', '1', '2023-08-23 00:03:14', '1', '2023-08-23 00:03:14', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (176, '分佣模式', 'brokerage_enabled_condition', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (177, '分销关系绑定模式', 'brokerage_bind_mode', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (178, '佣金提现类型', 'brokerage_withdraw_type', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (179, '佣金记录业务类型', 'brokerage_record_biz_type', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (180, '佣金记录状态', 'brokerage_record_status', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (181, '佣金提现状态', 'brokerage_withdraw_status', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (182, '佣金提现银行', 'brokerage_bank_name', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (183, '砍价记录的状态', 'promotion_bargain_record_status', 0, '', '1', '2023-10-05 10:41:08', '1', '2023-10-05 10:41:08', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (184, '拼团记录的状态', 'promotion_combination_record_status', 0, '', '1', '2023-10-08 07:24:25', '1', '2023-10-08 07:24:25', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (185, '回款-回款方式', 'crm_receivable_return_type', 0, '回款-回款方式', '1', '2023-10-18 21:54:10', '1', '2023-10-18 21:54:10', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (186, 'CRM 客户行业', 'crm_customer_industry', 0, 'CRM 客户所属行业', '1', '2023-10-28 22:57:07', '1', '2024-02-18 23:30:22', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (187, '客户等级', 'crm_customer_level', 0, 'CRM 客户等级', '1', '2023-10-28 22:59:12', '1', '2023-10-28 15:11:16', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (188, '客户来源', 'crm_customer_source', 0, 'CRM 客户来源', '1', '2023-10-28 23:00:34', '1', '2023-10-28 15:11:16', '0', NULL); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (600, 'Banner 位置', 'promotion_banner_position', 0, '', '1', '2023-10-08 07:24:25', '1', '2023-11-04 13:04:02', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (601, '社交类型', 'system_social_type', 0, '', '1', '2023-11-04 13:03:54', '1', '2023-11-04 13:03:54', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (604, '产品状态', 'crm_product_status', 0, '', '1', '2023-10-30 21:47:59', '1', '2023-10-30 21:48:45', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (605, 'CRM 数据权限的级别', 'crm_permission_level', 0, '', '1', '2023-11-30 09:51:59', '1', '2023-11-30 09:51:59', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (606, 'CRM 审批状态', 'crm_audit_status', 0, '', '1', '2023-11-30 18:56:23', '1', '2023-11-30 18:56:23', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (607, 'CRM 产品单位', 'crm_product_unit', 0, '', '1', '2023-12-05 23:01:51', '1', '2023-12-05 23:01:51', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (608, 'CRM 跟进方式', 'crm_follow_up_type', 0, '', '1', '2024-01-15 20:48:05', '1', '2024-01-15 20:48:05', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (609, '支付转账类型', 'pay_transfer_type', 0, '', '1', '2023-10-28 16:27:18', '1', '2023-10-28 16:27:18', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (610, '转账订单状态', 'pay_transfer_status', 0, '', '1', '2023-10-28 16:18:32', '1', '2023-10-28 16:18:32', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (611, 'ERP 库存明细的业务类型', 'erp_stock_record_biz_type', 0, 'ERP 库存明细的业务类型', '1', '2024-02-05 18:07:02', '1', '2024-02-05 18:07:02', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (612, 'ERP 审批状态', 'erp_audit_status', 0, '', '1', '2024-02-06 00:00:07', '1', '2024-02-06 00:00:07', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (613, 'BPM 监听器类型', 'bpm_process_listener_type', 0, '', '1', '2024-03-23 12:52:24', '1', '2024-03-09 15:54:28', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (615, 'BPM 监听器值类型', 'bpm_process_listener_value_type', 0, '', '1', '2024-03-23 13:00:31', '1', '2024-03-23 13:00:31', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (616, '时间间隔', 'date_interval', 0, '', '1', '2024-03-29 22:50:09', '1', '2024-03-29 22:50:09', '0', '1970-01-01 00:00:00'); +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (619, 'CRM 商机结束状态类型', 'crm_business_end_status_type', 0, '', '1', '2024-04-13 23:23:00', '1', '2024-04-13 23:23:00', '0', '1970-01-01 00:00:00'); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_dict_type_seq; +CREATE SEQUENCE system_dict_type_seq + START 620; + +-- ---------------------------- +-- Table structure for system_login_log +-- ---------------------------- +DROP TABLE IF EXISTS system_login_log; +CREATE TABLE system_login_log +( + id int8 NOT NULL, + log_type int8 NOT NULL, + trace_id varchar(64) NOT NULL DEFAULT '', + user_id int8 NOT NULL DEFAULT 0, + user_type int2 NOT NULL DEFAULT 0, + username varchar(50) NOT NULL DEFAULT '', + result int2 NOT NULL, + user_ip varchar(50) NOT NULL, + user_agent varchar(512) NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_login_log + ADD CONSTRAINT pk_system_login_log PRIMARY KEY (id); + +COMMENT ON COLUMN system_login_log.id IS '访问ID'; +COMMENT ON COLUMN system_login_log.log_type IS '日志类型'; +COMMENT ON COLUMN system_login_log.trace_id IS '链路追踪编号'; +COMMENT ON COLUMN system_login_log.user_id IS '用户编号'; +COMMENT ON COLUMN system_login_log.user_type IS '用户类型'; +COMMENT ON COLUMN system_login_log.username IS '用户账号'; +COMMENT ON COLUMN system_login_log.result IS '登陆结果'; +COMMENT ON COLUMN system_login_log.user_ip IS '用户 IP'; +COMMENT ON COLUMN system_login_log.user_agent IS '浏览器 UA'; +COMMENT ON COLUMN system_login_log.creator IS '创建者'; +COMMENT ON COLUMN system_login_log.create_time IS '创建时间'; +COMMENT ON COLUMN system_login_log.updater IS '更新者'; +COMMENT ON COLUMN system_login_log.update_time IS '更新时间'; +COMMENT ON COLUMN system_login_log.deleted IS '是否删除'; +COMMENT ON COLUMN system_login_log.tenant_id IS '租户编号'; +COMMENT ON TABLE system_login_log IS '系统访问记录'; + +DROP SEQUENCE IF EXISTS system_login_log_seq; +CREATE SEQUENCE system_login_log_seq + START 1; + +-- ---------------------------- +-- Table structure for system_mail_account +-- ---------------------------- +DROP TABLE IF EXISTS system_mail_account; +CREATE TABLE system_mail_account +( + id int8 NOT NULL, + mail varchar(255) NOT NULL, + username varchar(255) NOT NULL, + password varchar(255) NOT NULL, + host varchar(255) NOT NULL, + port int4 NOT NULL, + ssl_enable bool NOT NULL DEFAULT '0', + starttls_enable bool NOT NULL DEFAULT '0', + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_mail_account + ADD CONSTRAINT pk_system_mail_account PRIMARY KEY (id); + +COMMENT ON COLUMN system_mail_account.id IS '主键'; +COMMENT ON COLUMN system_mail_account.mail IS '邮箱'; +COMMENT ON COLUMN system_mail_account.username IS '用户名'; +COMMENT ON COLUMN system_mail_account.password IS '密码'; +COMMENT ON COLUMN system_mail_account.host IS 'SMTP 服务器域名'; +COMMENT ON COLUMN system_mail_account.port IS 'SMTP 服务器端口'; +COMMENT ON COLUMN system_mail_account.ssl_enable IS '是否开启 SSL'; +COMMENT ON COLUMN system_mail_account.starttls_enable IS '是否开启 STARTTLS'; +COMMENT ON COLUMN system_mail_account.creator IS '创建者'; +COMMENT ON COLUMN system_mail_account.create_time IS '创建时间'; +COMMENT ON COLUMN system_mail_account.updater IS '更新者'; +COMMENT ON COLUMN system_mail_account.update_time IS '更新时间'; +COMMENT ON COLUMN system_mail_account.deleted IS '是否删除'; +COMMENT ON TABLE system_mail_account IS '邮箱账号表'; + +-- ---------------------------- +-- Records of system_mail_account +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (1, '7684413@qq.com', '7684413@qq.com', '1234576', '127.0.0.1', 8080, '0', '0', '1', '2023-01-25 17:39:52', '1', '2024-04-24 09:13:56', '0'); +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (2, 'ydym_test@163.com', 'ydym_test@163.com', 'WBZTEINMIFVRYSOE', 'smtp.163.com', 465, '1', '0', '1', '2023-01-26 01:26:03', '1', '2023-04-12 22:39:38', '0'); +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (3, '76854114@qq.com', '3335', '11234', 'yunai1.cn', 466, '0', '0', '1', '2023-01-27 15:06:38', '1', '2023-01-27 07:08:36', '1'); +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (4, '7685413x@qq.com', '2', '3', '4', 5, '1', '0', '1', '2023-04-12 23:05:06', '1', '2023-04-12 15:05:11', '1'); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_mail_account_seq; +CREATE SEQUENCE system_mail_account_seq + START 5; + +-- ---------------------------- +-- Table structure for system_mail_log +-- ---------------------------- +DROP TABLE IF EXISTS system_mail_log; +CREATE TABLE system_mail_log +( + id int8 NOT NULL, + user_id int8 NULL DEFAULT NULL, + user_type int2 NULL DEFAULT NULL, + to_mail varchar(255) NOT NULL, + account_id int8 NOT NULL, + from_mail varchar(255) NOT NULL, + template_id int8 NOT NULL, + template_code varchar(63) NOT NULL, + template_nickname varchar(255) NULL DEFAULT NULL, + template_title varchar(255) NOT NULL, + template_content varchar(10240) NOT NULL, + template_params varchar(255) NOT NULL, + send_status int2 NOT NULL DEFAULT 0, + send_time timestamp NULL DEFAULT NULL, + send_message_id varchar(255) NULL DEFAULT NULL, + send_exception varchar(4096) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_mail_log + ADD CONSTRAINT pk_system_mail_log PRIMARY KEY (id); + +COMMENT ON COLUMN system_mail_log.id IS '编号'; +COMMENT ON COLUMN system_mail_log.user_id IS '用户编号'; +COMMENT ON COLUMN system_mail_log.user_type IS '用户类型'; +COMMENT ON COLUMN system_mail_log.to_mail IS '接收邮箱地址'; +COMMENT ON COLUMN system_mail_log.account_id IS '邮箱账号编号'; +COMMENT ON COLUMN system_mail_log.from_mail IS '发送邮箱地址'; +COMMENT ON COLUMN system_mail_log.template_id IS '模板编号'; +COMMENT ON COLUMN system_mail_log.template_code IS '模板编码'; +COMMENT ON COLUMN system_mail_log.template_nickname IS '模版发送人名称'; +COMMENT ON COLUMN system_mail_log.template_title IS '邮件标题'; +COMMENT ON COLUMN system_mail_log.template_content IS '邮件内容'; +COMMENT ON COLUMN system_mail_log.template_params IS '邮件参数'; +COMMENT ON COLUMN system_mail_log.send_status IS '发送状态'; +COMMENT ON COLUMN system_mail_log.send_time IS '发送时间'; +COMMENT ON COLUMN system_mail_log.send_message_id IS '发送返回的消息 ID'; +COMMENT ON COLUMN system_mail_log.send_exception IS '发送异常'; +COMMENT ON COLUMN system_mail_log.creator IS '创建者'; +COMMENT ON COLUMN system_mail_log.create_time IS '创建时间'; +COMMENT ON COLUMN system_mail_log.updater IS '更新者'; +COMMENT ON COLUMN system_mail_log.update_time IS '更新时间'; +COMMENT ON COLUMN system_mail_log.deleted IS '是否删除'; +COMMENT ON TABLE system_mail_log IS '邮件日志表'; + +DROP SEQUENCE IF EXISTS system_mail_log_seq; +CREATE SEQUENCE system_mail_log_seq + START 1; + +-- ---------------------------- +-- Table structure for system_mail_template +-- ---------------------------- +DROP TABLE IF EXISTS system_mail_template; +CREATE TABLE system_mail_template +( + id int8 NOT NULL, + name varchar(63) NOT NULL, + code varchar(63) NOT NULL, + account_id int8 NOT NULL, + nickname varchar(255) NULL DEFAULT NULL, + title varchar(255) NOT NULL, + content varchar(10240) NOT NULL, + params varchar(255) NOT NULL, + status int2 NOT NULL, + remark varchar(255) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_mail_template + ADD CONSTRAINT pk_system_mail_template PRIMARY KEY (id); + +COMMENT ON COLUMN system_mail_template.id IS '编号'; +COMMENT ON COLUMN system_mail_template.name IS '模板名称'; +COMMENT ON COLUMN system_mail_template.code IS '模板编码'; +COMMENT ON COLUMN system_mail_template.account_id IS '发送的邮箱账号编号'; +COMMENT ON COLUMN system_mail_template.nickname IS '发送人名称'; +COMMENT ON COLUMN system_mail_template.title IS '模板标题'; +COMMENT ON COLUMN system_mail_template.content IS '模板内容'; +COMMENT ON COLUMN system_mail_template.params IS '参数数组'; +COMMENT ON COLUMN system_mail_template.status IS '开启状态'; +COMMENT ON COLUMN system_mail_template.remark IS '备注'; +COMMENT ON COLUMN system_mail_template.creator IS '创建者'; +COMMENT ON COLUMN system_mail_template.create_time IS '创建时间'; +COMMENT ON COLUMN system_mail_template.updater IS '更新者'; +COMMENT ON COLUMN system_mail_template.update_time IS '更新时间'; +COMMENT ON COLUMN system_mail_template.deleted IS '是否删除'; +COMMENT ON TABLE system_mail_template IS '邮件模版表'; + +-- ---------------------------- +-- Records of system_mail_template +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (13, '后台用户短信登录', 'admin-sms-login', 1, '奥特曼', '你猜我猜', '

    您的验证码是{code},名字是{name}

    ', '["code","name"]', 0, '3', '1', '2021-10-11 08:10:00', '1', '2023-12-02 19:51:14', '0'); +INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (14, '测试模版', 'test_01', 2, '芋艿', '一个标题', '

    你是 {key01} 吗?


    是的话,赶紧 {key02} 一下!

    ', '["key01","key02"]', 0, NULL, '1', '2023-01-26 01:27:40', '1', '2023-01-27 10:32:16', '0'); +INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (15, '3', '2', 2, '7', '4', '

    45

    ', '[]', 1, '80', '1', '2023-01-27 15:50:35', '1', '2023-01-27 16:34:49', '0'); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_mail_template_seq; +CREATE SEQUENCE system_mail_template_seq + START 16; + +-- ---------------------------- +-- Table structure for system_menu +-- ---------------------------- +DROP TABLE IF EXISTS system_menu; +CREATE TABLE system_menu +( + id int8 NOT NULL, + name varchar(50) NOT NULL, + permission varchar(100) NOT NULL DEFAULT '', + type int2 NOT NULL, + sort int4 NOT NULL DEFAULT 0, + parent_id int8 NOT NULL DEFAULT 0, + path varchar(200) NULL DEFAULT '', + icon varchar(100) NULL DEFAULT '#', + component varchar(255) NULL DEFAULT NULL, + component_name varchar(255) NULL DEFAULT NULL, + status int2 NOT NULL DEFAULT 0, + visible bool NOT NULL DEFAULT '1', + keep_alive bool NOT NULL DEFAULT '1', + always_show bool NOT NULL DEFAULT '1', + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_menu + ADD CONSTRAINT pk_system_menu PRIMARY KEY (id); + +COMMENT ON COLUMN system_menu.id IS '菜单ID'; +COMMENT ON COLUMN system_menu.name IS '菜单名称'; +COMMENT ON COLUMN system_menu.permission IS '权限标识'; +COMMENT ON COLUMN system_menu.type IS '菜单类型'; +COMMENT ON COLUMN system_menu.sort IS '显示顺序'; +COMMENT ON COLUMN system_menu.parent_id IS '父菜单ID'; +COMMENT ON COLUMN system_menu.path IS '路由地址'; +COMMENT ON COLUMN system_menu.icon IS '菜单图标'; +COMMENT ON COLUMN system_menu.component IS '组件路径'; +COMMENT ON COLUMN system_menu.component_name IS '组件名'; +COMMENT ON COLUMN system_menu.status IS '菜单状态'; +COMMENT ON COLUMN system_menu.visible IS '是否可见'; +COMMENT ON COLUMN system_menu.keep_alive IS '是否缓存'; +COMMENT ON COLUMN system_menu.always_show IS '是否总是显示'; +COMMENT ON COLUMN system_menu.creator IS '创建者'; +COMMENT ON COLUMN system_menu.create_time IS '创建时间'; +COMMENT ON COLUMN system_menu.updater IS '更新者'; +COMMENT ON COLUMN system_menu.update_time IS '更新时间'; +COMMENT ON COLUMN system_menu.deleted IS '是否删除'; +COMMENT ON TABLE system_menu IS '菜单权限表'; + +-- ---------------------------- +-- Records of system_menu +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1, '系统管理', '', 1, 10, 0, '/system', 'ep:tools', NULL, NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:04:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2, '基础设施', '', 1, 20, 0, '/infra', 'ep:monitor', NULL, NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-03-01 08:28:40', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5, 'OA 示例', '', 1, 40, 1185, 'oa', 'fa:road', NULL, NULL, 0, '1', '1', '1', 'admin', '2021-09-20 16:26:19', '1', '2024-02-29 12:38:13', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (100, '用户管理', 'system:user:list', 2, 1, 1, 'user', 'ep:avatar', 'system/user/index', 'SystemUser', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:02:04', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (101, '角色管理', '', 2, 2, 1, 'role', 'ep:user', 'system/role/index', 'SystemRole', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:03:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (102, '菜单管理', '', 2, 3, 1, 'menu', 'ep:menu', 'system/menu/index', 'SystemMenu', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:03:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (103, '部门管理', '', 2, 4, 1, 'dept', 'fa:address-card', 'system/dept/index', 'SystemDept', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:06:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (104, '岗位管理', '', 2, 5, 1, 'post', 'fa:address-book-o', 'system/post/index', 'SystemPost', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:06:39', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (105, '字典管理', '', 2, 6, 1, 'dict', 'ep:collection', 'system/dict/index', 'SystemDictType', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:07:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (106, '配置管理', '', 2, 8, 2, 'config', 'fa:connectdevelop', 'infra/config/index', 'InfraConfig', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:02:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (107, '通知公告', '', 2, 4, 2739, 'notice', 'ep:takeaway-box', 'system/notice/index', 'SystemNotice', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-22 23:56:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (108, '审计日志', '', 1, 9, 1, 'log', 'ep:document-copy', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:08:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (109, '令牌管理', '', 2, 2, 1261, 'token', 'fa:key', 'system/oauth2/token/index', 'SystemTokenClient', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:13:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (110, '定时任务', '', 2, 7, 2, 'job', 'fa-solid:tasks', 'infra/job/index', 'InfraJob', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 08:57:36', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (111, 'MySQL 监控', '', 2, 1, 2740, 'druid', 'fa-solid:box', 'infra/druid/index', 'InfraDruid', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:05:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (112, 'Java 监控', '', 2, 3, 2740, 'admin-server', 'ep:coffee-cup', 'infra/server/index', 'InfraAdminServer', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:06:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (113, 'Redis 监控', '', 2, 2, 2740, 'redis', 'fa:reddit-square', 'infra/redis/index', 'InfraRedis', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:06:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (114, '表单构建', 'infra:build:list', 2, 2, 2, 'build', 'fa:wpforms', 'infra/build/index', 'InfraBuild', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 08:51:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (115, '代码生成', 'infra:codegen:query', 2, 1, 2, 'codegen', 'ep:document-copy', 'infra/codegen/index', 'InfraCodegen', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 08:51:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (116, 'API 接口', 'infra:swagger:list', 2, 3, 2, 'swagger', 'fa:fighter-jet', 'infra/swagger/index', 'InfraSwagger', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:01:24', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (500, '操作日志', '', 2, 1, 108, 'operate-log', 'ep:position', 'system/operatelog/index', 'SystemOperateLog', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:09:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (501, '登录日志', '', 2, 2, 108, 'login-log', 'ep:promotion', 'system/loginlog/index', 'SystemLoginLog', 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:10:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1001, '用户查询', 'system:user:query', 3, 1, 100, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1002, '用户新增', 'system:user:create', 3, 2, 100, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1003, '用户修改', 'system:user:update', 3, 3, 100, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1004, '用户删除', 'system:user:delete', 3, 4, 100, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1005, '用户导出', 'system:user:export', 3, 5, 100, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1006, '用户导入', 'system:user:import', 3, 6, 100, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1007, '重置密码', 'system:user:update-password', 3, 7, 100, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1008, '角色查询', 'system:role:query', 3, 1, 101, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1009, '角色新增', 'system:role:create', 3, 2, 101, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1010, '角色修改', 'system:role:update', 3, 3, 101, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1011, '角色删除', 'system:role:delete', 3, 4, 101, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1012, '角色导出', 'system:role:export', 3, 5, 101, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1013, '菜单查询', 'system:menu:query', 3, 1, 102, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1014, '菜单新增', 'system:menu:create', 3, 2, 102, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1015, '菜单修改', 'system:menu:update', 3, 3, 102, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1016, '菜单删除', 'system:menu:delete', 3, 4, 102, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1017, '部门查询', 'system:dept:query', 3, 1, 103, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1018, '部门新增', 'system:dept:create', 3, 2, 103, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1019, '部门修改', 'system:dept:update', 3, 3, 103, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1020, '部门删除', 'system:dept:delete', 3, 4, 103, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1021, '岗位查询', 'system:post:query', 3, 1, 104, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1022, '岗位新增', 'system:post:create', 3, 2, 104, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1023, '岗位修改', 'system:post:update', 3, 3, 104, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1024, '岗位删除', 'system:post:delete', 3, 4, 104, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1025, '岗位导出', 'system:post:export', 3, 5, 104, '', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1026, '字典查询', 'system:dict:query', 3, 1, 105, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1027, '字典新增', 'system:dict:create', 3, 2, 105, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1028, '字典修改', 'system:dict:update', 3, 3, 105, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1029, '字典删除', 'system:dict:delete', 3, 4, 105, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1030, '字典导出', 'system:dict:export', 3, 5, 105, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1031, '配置查询', 'infra:config:query', 3, 1, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1032, '配置新增', 'infra:config:create', 3, 2, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1033, '配置修改', 'infra:config:update', 3, 3, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1034, '配置删除', 'infra:config:delete', 3, 4, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1035, '配置导出', 'infra:config:export', 3, 5, 106, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1036, '公告查询', 'system:notice:query', 3, 1, 107, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1037, '公告新增', 'system:notice:create', 3, 2, 107, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1038, '公告修改', 'system:notice:update', 3, 3, 107, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1039, '公告删除', 'system:notice:delete', 3, 4, 107, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1040, '操作查询', 'system:operate-log:query', 3, 1, 500, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1042, '日志导出', 'system:operate-log:export', 3, 2, 500, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1043, '登录查询', 'system:login-log:query', 3, 1, 501, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1045, '日志导出', 'system:login-log:export', 3, 3, 501, '#', '#', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1046, '令牌列表', 'system:oauth2-token:page', 3, 1, 109, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-05-09 23:54:42', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1048, '令牌删除', 'system:oauth2-token:delete', 3, 2, 109, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-05-09 23:54:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1050, '任务新增', 'infra:job:create', 3, 2, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1051, '任务修改', 'infra:job:update', 3, 3, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1052, '任务删除', 'infra:job:delete', 3, 4, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1053, '状态修改', 'infra:job:update', 3, 5, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1054, '任务导出', 'infra:job:export', 3, 7, 110, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1056, '生成修改', 'infra:codegen:update', 3, 2, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1057, '生成删除', 'infra:codegen:delete', 3, 3, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1058, '导入代码', 'infra:codegen:create', 3, 2, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1059, '预览代码', 'infra:codegen:preview', 3, 4, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1060, '生成代码', 'infra:codegen:download', 3, 5, 115, '', '', '', NULL, 0, '1', '1', '1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1063, '设置角色菜单权限', 'system:permission:assign-role-menu', 3, 6, 101, '', '', '', NULL, 0, '1', '1', '1', '', '2021-01-06 17:53:44', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1064, '设置角色数据权限', 'system:permission:assign-role-data-scope', 3, 7, 101, '', '', '', NULL, 0, '1', '1', '1', '', '2021-01-06 17:56:31', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1065, '设置用户角色', 'system:permission:assign-user-role', 3, 8, 101, '', '', '', NULL, 0, '1', '1', '1', '', '2021-01-07 10:23:28', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1066, '获得 Redis 监控信息', 'infra:redis:get-monitor-info', 3, 1, 113, '', '', '', NULL, 0, '1', '1', '1', '', '2021-01-26 01:02:31', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1067, '获得 Redis Key 列表', 'infra:redis:get-key-list', 3, 2, 113, '', '', '', NULL, 0, '1', '1', '1', '', '2021-01-26 01:02:52', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1070, '代码生成案例', '', 1, 1, 2, 'demo', 'ep:aim', 'infra/testDemo/index', NULL, 0, '1', '1', '1', '', '2021-02-06 12:42:49', '1', '2023-11-15 23:45:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1075, '任务触发', 'infra:job:trigger', 3, 8, 110, '', '', '', NULL, 0, '1', '1', '1', '', '2021-02-07 13:03:10', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1077, '链路追踪', '', 2, 4, 2740, 'skywalking', 'fa:eye', 'infra/skywalking/index', 'InfraSkyWalking', 0, '1', '1', '1', '', '2021-02-08 20:41:31', '1', '2024-04-23 00:07:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1078, '访问日志', '', 2, 1, 1083, 'api-access-log', 'ep:place', 'infra/apiAccessLog/index', 'InfraApiAccessLog', 0, '1', '1', '1', '', '2021-02-26 01:32:59', '1', '2024-02-29 08:54:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1082, '日志导出', 'infra:api-access-log:export', 3, 2, 1078, '', '', '', NULL, 0, '1', '1', '1', '', '2021-02-26 01:32:59', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1083, 'API 日志', '', 2, 4, 2, 'log', 'fa:tasks', NULL, NULL, 0, '1', '1', '1', '', '2021-02-26 02:18:24', '1', '2024-04-22 23:58:36', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1084, '错误日志', 'infra:api-error-log:query', 2, 2, 1083, 'api-error-log', 'ep:warning-filled', 'infra/apiErrorLog/index', 'InfraApiErrorLog', 0, '1', '1', '1', '', '2021-02-26 07:53:20', '1', '2024-02-29 08:55:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1085, '日志处理', 'infra:api-error-log:update-status', 3, 2, 1084, '', '', '', NULL, 0, '1', '1', '1', '', '2021-02-26 07:53:20', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1086, '日志导出', 'infra:api-error-log:export', 3, 3, 1084, '', '', '', NULL, 0, '1', '1', '1', '', '2021-02-26 07:53:20', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1087, '任务查询', 'infra:job:query', 3, 1, 110, '', '', '', NULL, 0, '1', '1', '1', '1', '2021-03-10 01:26:19', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1088, '日志查询', 'infra:api-access-log:query', 3, 1, 1078, '', '', '', NULL, 0, '1', '1', '1', '1', '2021-03-10 01:28:04', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1089, '日志查询', 'infra:api-error-log:query', 3, 1, 1084, '', '', '', NULL, 0, '1', '1', '1', '1', '2021-03-10 01:29:09', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1090, '文件列表', '', 2, 5, 1243, 'file', 'ep:upload-filled', 'infra/file/index', 'InfraFile', 0, '1', '1', '1', '', '2021-03-12 20:16:20', '1', '2024-02-29 08:53:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1091, '文件查询', 'infra:file:query', 3, 1, 1090, '', '', '', NULL, 0, '1', '1', '1', '', '2021-03-12 20:16:20', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1092, '文件删除', 'infra:file:delete', 3, 4, 1090, '', '', '', NULL, 0, '1', '1', '1', '', '2021-03-12 20:16:20', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1093, '短信管理', '', 1, 1, 2739, 'sms', 'ep:message', NULL, NULL, 0, '1', '1', '1', '1', '2021-04-05 01:10:16', '1', '2024-04-22 23:56:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1094, '短信渠道', '', 2, 0, 1093, 'sms-channel', 'fa:stack-exchange', 'system/sms/channel/index', 'SystemSmsChannel', 0, '1', '1', '1', '', '2021-04-01 11:07:15', '1', '2024-02-29 01:15:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1095, '短信渠道查询', 'system:sms-channel:query', 3, 1, 1094, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1096, '短信渠道创建', 'system:sms-channel:create', 3, 2, 1094, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1097, '短信渠道更新', 'system:sms-channel:update', 3, 3, 1094, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1098, '短信渠道删除', 'system:sms-channel:delete', 3, 4, 1094, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1100, '短信模板', '', 2, 1, 1093, 'sms-template', 'ep:connection', 'system/sms/template/index', 'SystemSmsTemplate', 0, '1', '1', '1', '', '2021-04-01 17:35:17', '1', '2024-02-29 01:16:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1101, '短信模板查询', 'system:sms-template:query', 3, 1, 1100, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1102, '短信模板创建', 'system:sms-template:create', 3, 2, 1100, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1103, '短信模板更新', 'system:sms-template:update', 3, 3, 1100, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1104, '短信模板删除', 'system:sms-template:delete', 3, 4, 1100, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1105, '短信模板导出', 'system:sms-template:export', 3, 5, 1100, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1106, '发送测试短信', 'system:sms-template:send-sms', 3, 6, 1100, '', '', '', NULL, 0, '1', '1', '1', '1', '2021-04-11 00:26:40', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1107, '短信日志', '', 2, 2, 1093, 'sms-log', 'fa:edit', 'system/sms/log/index', 'SystemSmsLog', 0, '1', '1', '1', '', '2021-04-11 08:37:05', '1', '2024-02-29 08:49:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1108, '短信日志查询', 'system:sms-log:query', 3, 1, 1107, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-11 08:37:05', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1109, '短信日志导出', 'system:sms-log:export', 3, 5, 1107, '', '', '', NULL, 0, '1', '1', '1', '', '2021-04-11 08:37:05', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1117, '支付管理', '', 1, 30, 0, '/pay', 'ep:money', NULL, NULL, 0, '1', '1', '1', '1', '2021-12-25 16:43:41', '1', '2024-02-29 08:58:38', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1118, '请假查询', '', 2, 0, 5, 'leave', 'fa:leanpub', 'bpm/oa/leave/index', 'BpmOALeave', 0, '1', '1', '1', '', '2021-09-20 08:51:03', '1', '2024-02-29 12:38:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1119, '请假申请查询', 'bpm:oa-leave:query', 3, 1, 1118, '', '', '', NULL, 0, '1', '1', '1', '', '2021-09-20 08:51:03', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1120, '请假申请创建', 'bpm:oa-leave:create', 3, 2, 1118, '', '', '', NULL, 0, '1', '1', '1', '', '2021-09-20 08:51:03', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1126, '应用信息', '', 2, 1, 1117, 'app', 'fa:apple', 'pay/app/index', 'PayApp', 0, '1', '1', '1', '', '2021-11-10 01:13:30', '1', '2024-02-29 08:59:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1127, '支付应用信息查询', 'pay:app:query', 3, 1, 1126, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1128, '支付应用信息创建', 'pay:app:create', 3, 2, 1126, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1129, '支付应用信息更新', 'pay:app:update', 3, 3, 1126, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1130, '支付应用信息删除', 'pay:app:delete', 3, 4, 1126, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1132, '秘钥解析', 'pay:channel:parsing', 3, 6, 1129, '', '', '', NULL, 0, '1', '1', '1', '1', '2021-11-08 15:15:47', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1133, '支付商户信息查询', 'pay:merchant:query', 3, 1, 1132, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1134, '支付商户信息创建', 'pay:merchant:create', 3, 2, 1132, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1135, '支付商户信息更新', 'pay:merchant:update', 3, 3, 1132, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1136, '支付商户信息删除', 'pay:merchant:delete', 3, 4, 1132, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1137, '支付商户信息导出', 'pay:merchant:export', 3, 5, 1132, '', '', '', NULL, 0, '1', '1', '1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1138, '租户列表', '', 2, 0, 1224, 'list', 'ep:house', 'system/tenant/index', 'SystemTenant', 0, '1', '1', '1', '', '2021-12-14 12:31:43', '1', '2024-02-29 01:01:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1139, '租户查询', 'system:tenant:query', 3, 1, 1138, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1140, '租户创建', 'system:tenant:create', 3, 2, 1138, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1141, '租户更新', 'system:tenant:update', 3, 3, 1138, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1142, '租户删除', 'system:tenant:delete', 3, 4, 1138, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1143, '租户导出', 'system:tenant:export', 3, 5, 1138, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1150, '秘钥解析', '', 3, 6, 1129, '', '', '', NULL, 0, '1', '1', '1', '1', '2021-11-08 15:15:47', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1161, '退款订单', '', 2, 3, 1117, 'refund', 'fa:registered', 'pay/refund/index', 'PayRefund', 0, '1', '1', '1', '', '2021-12-25 08:29:07', '1', '2024-02-29 08:59:20', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1162, '退款订单查询', 'pay:refund:query', 3, 1, 1161, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1163, '退款订单创建', 'pay:refund:create', 3, 2, 1161, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1164, '退款订单更新', 'pay:refund:update', 3, 3, 1161, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1165, '退款订单删除', 'pay:refund:delete', 3, 4, 1161, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1166, '退款订单导出', 'pay:refund:export', 3, 5, 1161, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1173, '支付订单', '', 2, 2, 1117, 'order', 'fa:cc-paypal', 'pay/order/index', 'PayOrder', 0, '1', '1', '1', '', '2021-12-25 08:49:43', '1', '2024-02-29 08:59:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1174, '支付订单查询', 'pay:order:query', 3, 1, 1173, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1175, '支付订单创建', 'pay:order:create', 3, 2, 1173, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1176, '支付订单更新', 'pay:order:update', 3, 3, 1173, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1177, '支付订单删除', 'pay:order:delete', 3, 4, 1173, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1178, '支付订单导出', 'pay:order:export', 3, 5, 1173, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1185, '工作流程', '', 1, 50, 0, '/bpm', 'fa:medium', NULL, NULL, 0, '1', '1', '1', '1', '2021-12-30 20:26:36', '1', '2024-02-29 12:43:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1186, '流程管理', '', 1, 10, 1185, 'manager', 'fa:dedent', NULL, NULL, 0, '1', '1', '1', '1', '2021-12-30 20:28:30', '1', '2024-02-29 12:36:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1187, '流程表单', '', 2, 2, 1186, 'form', 'fa:hdd-o', 'bpm/form/index', 'BpmForm', 0, '1', '1', '1', '', '2021-12-30 12:38:22', '1', '2024-03-19 12:25:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1188, '表单查询', 'bpm:form:query', 3, 1, 1187, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1189, '表单创建', 'bpm:form:create', 3, 2, 1187, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1190, '表单更新', 'bpm:form:update', 3, 3, 1187, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1191, '表单删除', 'bpm:form:delete', 3, 4, 1187, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1192, '表单导出', 'bpm:form:export', 3, 5, 1187, '', '', '', NULL, 0, '1', '1', '1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1193, '流程模型', '', 2, 1, 1186, 'model', 'fa-solid:project-diagram', 'bpm/model/index', 'BpmModel', 0, '1', '1', '1', '1', '2021-12-31 23:24:58', '1', '2024-03-19 12:25:19', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1194, '模型查询', 'bpm:model:query', 3, 1, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-03 19:01:10', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1195, '模型创建', 'bpm:model:create', 3, 2, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-03 19:01:24', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1196, '模型导入', 'bpm:model:import', 3, 3, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-03 19:01:35', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1197, '模型更新', 'bpm:model:update', 3, 4, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-03 19:02:28', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1198, '模型删除', 'bpm:model:delete', 3, 5, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-03 19:02:43', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1199, '模型发布', 'bpm:model:deploy', 3, 6, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-03 19:03:24', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1200, '审批中心', '', 2, 20, 1185, 'task', 'fa:tasks', NULL, NULL, 0, '1', '1', '1', '1', '2022-01-07 23:51:48', '1', '2024-03-21 00:33:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1201, '我的流程', '', 2, 1, 1200, 'my', 'fa-solid:book', 'bpm/processInstance/index', 'BpmProcessInstanceMy', 0, '1', '1', '1', '', '2022-01-07 15:53:44', '1', '2024-03-21 23:52:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1202, '流程实例的查询', 'bpm:process-instance:query', 3, 1, 1201, '', '', '', NULL, 0, '1', '1', '1', '', '2022-01-07 15:53:44', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1207, '待办任务', '', 2, 10, 1200, 'todo', 'fa:slack', 'bpm/task/todo/index', 'BpmTodoTask', 0, '1', '1', '1', '1', '2022-01-08 10:33:37', '1', '2024-02-29 12:37:39', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1208, '已办任务', '', 2, 20, 1200, 'done', 'fa:delicious', 'bpm/task/done/index', 'BpmDoneTask', 0, '1', '1', '1', '1', '2022-01-08 10:34:13', '1', '2024-02-29 12:37:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1209, '用户分组', '', 2, 4, 1186, 'user-group', 'fa:user-secret', 'bpm/group/index', 'BpmUserGroup', 0, '1', '1', '1', '', '2022-01-14 02:14:20', '1', '2024-03-21 23:55:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1210, '用户组查询', 'bpm:user-group:query', 3, 1, 1209, '', '', '', NULL, 0, '1', '1', '1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1211, '用户组创建', 'bpm:user-group:create', 3, 2, 1209, '', '', '', NULL, 0, '1', '1', '1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1212, '用户组更新', 'bpm:user-group:update', 3, 3, 1209, '', '', '', NULL, 0, '1', '1', '1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1213, '用户组删除', 'bpm:user-group:delete', 3, 4, 1209, '', '', '', NULL, 0, '1', '1', '1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1215, '流程定义查询', 'bpm:process-definition:query', 3, 10, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:21:43', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1216, '流程任务分配规则查询', 'bpm:task-assign-rule:query', 3, 20, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:26:53', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1217, '流程任务分配规则创建', 'bpm:task-assign-rule:create', 3, 21, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:28:15', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1218, '流程任务分配规则更新', 'bpm:task-assign-rule:update', 3, 22, 1193, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:28:41', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1219, '流程实例的创建', 'bpm:process-instance:create', 3, 2, 1201, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:36:15', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1220, '流程实例的取消', 'bpm:process-instance:cancel', 3, 3, 1201, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:36:33', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1221, '流程任务的查询', 'bpm:task:query', 3, 1, 1207, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:38:52', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1222, '流程任务的更新', 'bpm:task:update', 3, 2, 1207, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-01-23 00:39:24', '1', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1224, '租户管理', '', 2, 0, 1, 'tenant', 'fa-solid:house-user', NULL, NULL, 0, '1', '1', '1', '1', '2022-02-20 01:41:13', '1', '2024-02-29 00:59:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1225, '租户套餐', '', 2, 0, 1224, 'package', 'fa:bars', 'system/tenantPackage/index', 'SystemTenantPackage', 0, '1', '1', '1', '', '2022-02-19 17:44:06', '1', '2024-02-29 01:01:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1226, '租户套餐查询', 'system:tenant-package:query', 3, 1, 1225, '', '', '', NULL, 0, '1', '1', '1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1227, '租户套餐创建', 'system:tenant-package:create', 3, 2, 1225, '', '', '', NULL, 0, '1', '1', '1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1228, '租户套餐更新', 'system:tenant-package:update', 3, 3, 1225, '', '', '', NULL, 0, '1', '1', '1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1229, '租户套餐删除', 'system:tenant-package:delete', 3, 4, 1225, '', '', '', NULL, 0, '1', '1', '1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1237, '文件配置', '', 2, 0, 1243, 'file-config', 'fa-solid:file-signature', 'infra/fileConfig/index', 'InfraFileConfig', 0, '1', '1', '1', '', '2022-03-15 14:35:28', '1', '2024-02-29 08:52:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1238, '文件配置查询', 'infra:file-config:query', 3, 1, 1237, '', '', '', NULL, 0, '1', '1', '1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1239, '文件配置创建', 'infra:file-config:create', 3, 2, 1237, '', '', '', NULL, 0, '1', '1', '1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1240, '文件配置更新', 'infra:file-config:update', 3, 3, 1237, '', '', '', NULL, 0, '1', '1', '1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1241, '文件配置删除', 'infra:file-config:delete', 3, 4, 1237, '', '', '', NULL, 0, '1', '1', '1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1242, '文件配置导出', 'infra:file-config:export', 3, 5, 1237, '', '', '', NULL, 0, '1', '1', '1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1243, '文件管理', '', 2, 6, 2, 'file', 'ep:files', NULL, '', 0, '1', '1', '1', '1', '2022-03-16 23:47:40', '1', '2024-04-23 00:02:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1254, '作者动态', '', 1, 0, 0, 'https://www.iocoder.cn', 'ep:avatar', NULL, NULL, 0, '1', '1', '1', '1', '2022-04-23 01:03:15', '1', '2023-12-08 23:40:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1255, '数据源配置', '', 2, 1, 2, 'data-source-config', 'ep:data-analysis', 'infra/dataSourceConfig/index', 'InfraDataSourceConfig', 0, '1', '1', '1', '', '2022-04-27 14:37:32', '1', '2024-02-29 08:51:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1256, '数据源配置查询', 'infra:data-source-config:query', 3, 1, 1255, '', '', '', NULL, 0, '1', '1', '1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1257, '数据源配置创建', 'infra:data-source-config:create', 3, 2, 1255, '', '', '', NULL, 0, '1', '1', '1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1258, '数据源配置更新', 'infra:data-source-config:update', 3, 3, 1255, '', '', '', NULL, 0, '1', '1', '1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1259, '数据源配置删除', 'infra:data-source-config:delete', 3, 4, 1255, '', '', '', NULL, 0, '1', '1', '1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1260, '数据源配置导出', 'infra:data-source-config:export', 3, 5, 1255, '', '', '', NULL, 0, '1', '1', '1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1261, 'OAuth 2.0', '', 2, 10, 1, 'oauth2', 'fa:dashcube', NULL, NULL, 0, '1', '1', '1', '1', '2022-05-09 23:38:17', '1', '2024-02-29 01:12:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1263, '应用管理', '', 2, 0, 1261, 'oauth2/application', 'fa:hdd-o', 'system/oauth2/client/index', 'SystemOAuth2Client', 0, '1', '1', '1', '', '2022-05-10 16:26:33', '1', '2024-02-29 01:13:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1264, '客户端查询', 'system:oauth2-client:query', 3, 1, 1263, '', '', '', NULL, 0, '1', '1', '1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1265, '客户端创建', 'system:oauth2-client:create', 3, 2, 1263, '', '', '', NULL, 0, '1', '1', '1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1266, '客户端更新', 'system:oauth2-client:update', 3, 3, 1263, '', '', '', NULL, 0, '1', '1', '1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1267, '客户端删除', 'system:oauth2-client:delete', 3, 4, 1263, '', '', '', NULL, 0, '1', '1', '1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:33', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1281, '报表管理', '', 2, 40, 0, '/report', 'ep:pie-chart', NULL, NULL, 0, '1', '1', '1', '1', '2022-07-10 20:22:15', '1', '2024-02-29 12:33:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1282, '报表设计器', '', 2, 1, 1281, 'jimu-report', 'ep:trend-charts', 'report/jmreport/index', 'GoView', 0, '1', '1', '1', '1', '2022-07-10 20:26:36', '1', '2024-02-29 12:33:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2000, '商品中心', '', 1, 60, 2362, 'product', 'fa:product-hunt', NULL, NULL, 0, '1', '1', '1', '', '2022-07-29 15:53:53', '1', '2023-09-30 11:52:36', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2002, '商品分类', '', 2, 2, 2000, 'category', 'ep:cellphone', 'mall/product/category/index', 'ProductCategory', 0, '1', '1', '1', '', '2022-07-29 15:53:53', '1', '2023-08-21 10:27:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2003, '分类查询', 'product:category:query', 3, 1, 2002, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-29 15:53:53', '', '2022-07-29 15:53:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2004, '分类创建', 'product:category:create', 3, 2, 2002, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-29 15:53:53', '', '2022-07-29 15:53:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2005, '分类更新', 'product:category:update', 3, 3, 2002, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-29 15:53:53', '', '2022-07-29 15:53:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2006, '分类删除', 'product:category:delete', 3, 4, 2002, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-29 15:53:53', '', '2022-07-29 15:53:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2008, '商品品牌', '', 2, 3, 2000, 'brand', 'ep:chicken', 'mall/product/brand/index', 'ProductBrand', 0, '1', '1', '1', '', '2022-07-30 13:52:44', '1', '2023-08-21 10:27:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2009, '品牌查询', 'product:brand:query', 3, 1, 2008, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2010, '品牌创建', 'product:brand:create', 3, 2, 2008, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2011, '品牌更新', 'product:brand:update', 3, 3, 2008, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2012, '品牌删除', 'product:brand:delete', 3, 4, 2008, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 13:52:44', '', '2022-07-30 13:52:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2014, '商品列表', '', 2, 1, 2000, 'spu', 'ep:apple', 'mall/product/spu/index', 'ProductSpu', 0, '1', '1', '1', '', '2022-07-30 14:22:58', '1', '2023-08-21 10:27:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2015, '商品查询', 'product:spu:query', 3, 1, 2014, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2016, '商品创建', 'product:spu:create', 3, 2, 2014, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2017, '商品更新', 'product:spu:update', 3, 3, 2014, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2018, '商品删除', 'product:spu:delete', 3, 4, 2014, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2019, '商品属性', '', 2, 4, 2000, 'property', 'ep:cold-drink', 'mall/product/property/index', 'ProductProperty', 0, '1', '1', '1', '', '2022-08-01 14:55:35', '1', '2023-08-26 11:01:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2020, '规格查询', 'product:property:query', 3, 1, 2019, '', '', '', NULL, 0, '1', '1', '1', '', '2022-08-01 14:55:35', '', '2022-12-12 20:26:24', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2021, '规格创建', 'product:property:create', 3, 2, 2019, '', '', '', NULL, 0, '1', '1', '1', '', '2022-08-01 14:55:35', '', '2022-12-12 20:26:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2022, '规格更新', 'product:property:update', 3, 3, 2019, '', '', '', NULL, 0, '1', '1', '1', '', '2022-08-01 14:55:35', '', '2022-12-12 20:26:33', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2023, '规格删除', 'product:property:delete', 3, 4, 2019, '', '', '', NULL, 0, '1', '1', '1', '', '2022-08-01 14:55:35', '', '2022-12-12 20:26:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2025, 'Banner', '', 2, 100, 2387, 'banner', 'fa:bandcamp', 'mall/promotion/banner/index', NULL, 0, '1', '1', '1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2026, 'Banner查询', 'promotion:banner:query', 3, 1, 2025, '', '', '', '', 0, '1', '1', '1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2027, 'Banner创建', 'promotion:banner:create', 3, 2, 2025, '', '', '', '', 0, '1', '1', '1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2028, 'Banner更新', 'promotion:banner:update', 3, 3, 2025, '', '', '', '', 0, '1', '1', '1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2029, 'Banner删除', 'promotion:banner:delete', 3, 4, 2025, '', '', '', '', 0, '1', '1', '1', '', '2022-08-01 14:56:14', '1', '2023-10-24 20:20:36', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2030, '营销中心', '', 1, 70, 2362, 'promotion', 'ep:present', NULL, NULL, 0, '1', '1', '1', '1', '2022-10-31 21:25:09', '1', '2023-09-30 11:54:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2032, '优惠劵列表', '', 2, 1, 2365, 'template', 'ep:discount', 'mall/promotion/coupon/template/index', 'PromotionCouponTemplate', 0, '1', '1', '1', '', '2022-10-31 22:27:14', '1', '2023-10-03 12:40:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2033, '优惠劵模板查询', 'promotion:coupon-template:query', 3, 1, 2032, '', '', '', NULL, 0, '1', '1', '1', '', '2022-10-31 22:27:14', '', '2022-10-31 22:27:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2034, '优惠劵模板创建', 'promotion:coupon-template:create', 3, 2, 2032, '', '', '', NULL, 0, '1', '1', '1', '', '2022-10-31 22:27:14', '', '2022-10-31 22:27:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2035, '优惠劵模板更新', 'promotion:coupon-template:update', 3, 3, 2032, '', '', '', NULL, 0, '1', '1', '1', '', '2022-10-31 22:27:14', '', '2022-10-31 22:27:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2036, '优惠劵模板删除', 'promotion:coupon-template:delete', 3, 4, 2032, '', '', '', NULL, 0, '1', '1', '1', '', '2022-10-31 22:27:14', '', '2022-10-31 22:27:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2038, '领取记录', '', 2, 2, 2365, 'list', 'ep:collection-tag', 'mall/promotion/coupon/index', 'PromotionCoupon', 0, '1', '1', '1', '', '2022-11-03 23:21:31', '1', '2023-10-03 12:55:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2039, '优惠劵查询', 'promotion:coupon:query', 3, 1, 2038, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-03 23:21:31', '', '2022-11-03 23:21:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2040, '优惠劵删除', 'promotion:coupon:delete', 3, 4, 2038, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-03 23:21:31', '', '2022-11-03 23:21:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2041, '满减送', '', 2, 10, 2390, 'reward-activity', 'ep:goblet-square-full', 'mall/promotion/rewardActivity/index', 'PromotionRewardActivity', 0, '1', '1', '1', '', '2022-11-04 23:47:49', '1', '2023-10-21 19:24:46', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2042, '满减送活动查询', 'promotion:reward-activity:query', 3, 1, 2041, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-04 23:47:49', '', '2022-11-04 23:47:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2043, '满减送活动创建', 'promotion:reward-activity:create', 3, 2, 2041, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-04 23:47:49', '', '2022-11-04 23:47:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2044, '满减送活动更新', 'promotion:reward-activity:update', 3, 3, 2041, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-04 23:47:50', '', '2022-11-04 23:47:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2045, '满减送活动删除', 'promotion:reward-activity:delete', 3, 4, 2041, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-04 23:47:50', '', '2022-11-04 23:47:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2046, '满减送活动关闭', 'promotion:reward-activity:close', 3, 5, 2041, '', '', '', NULL, 0, '1', '1', '1', '1', '2022-11-05 10:42:53', '1', '2022-11-05 10:42:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2047, '限时折扣', '', 2, 7, 2390, 'discount-activity', 'ep:timer', 'mall/promotion/discountActivity/index', 'PromotionDiscountActivity', 0, '1', '1', '1', '', '2022-11-05 17:12:15', '1', '2023-10-21 19:24:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2048, '限时折扣活动查询', 'promotion:discount-activity:query', 3, 1, 2047, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-05 17:12:15', '', '2022-11-05 17:12:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2049, '限时折扣活动创建', 'promotion:discount-activity:create', 3, 2, 2047, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-05 17:12:15', '', '2022-11-05 17:12:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2050, '限时折扣活动更新', 'promotion:discount-activity:update', 3, 3, 2047, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-05 17:12:16', '', '2022-11-05 17:12:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2051, '限时折扣活动删除', 'promotion:discount-activity:delete', 3, 4, 2047, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-05 17:12:16', '', '2022-11-05 17:12:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2052, '限时折扣活动关闭', 'promotion:discount-activity:close', 3, 5, 2047, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-05 17:12:16', '', '2022-11-05 17:12:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2059, '秒杀商品', '', 2, 2, 2209, 'activity', 'ep:basketball', 'mall/promotion/seckill/activity/index', 'PromotionSeckillActivity', 0, '1', '1', '1', '', '2022-11-06 22:24:49', '1', '2023-06-24 18:57:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2060, '秒杀活动查询', 'promotion:seckill-activity:query', 3, 1, 2059, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-06 22:24:49', '', '2022-11-06 22:24:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2061, '秒杀活动创建', 'promotion:seckill-activity:create', 3, 2, 2059, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-06 22:24:49', '', '2022-11-06 22:24:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2062, '秒杀活动更新', 'promotion:seckill-activity:update', 3, 3, 2059, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-06 22:24:49', '', '2022-11-06 22:24:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2063, '秒杀活动删除', 'promotion:seckill-activity:delete', 3, 4, 2059, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-06 22:24:49', '', '2022-11-06 22:24:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2066, '秒杀时段', '', 2, 1, 2209, 'config', 'ep:baseball', 'mall/promotion/seckill/config/index', 'PromotionSeckillConfig', 0, '1', '1', '1', '', '2022-11-15 19:46:50', '1', '2023-06-24 18:57:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2067, '秒杀时段查询', 'promotion:seckill-config:query', 3, 1, 2066, '', '', '', '', 0, '1', '1', '1', '', '2022-11-15 19:46:51', '1', '2023-06-24 17:50:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2068, '秒杀时段创建', 'promotion:seckill-config:create', 3, 2, 2066, '', '', '', '', 0, '1', '1', '1', '', '2022-11-15 19:46:51', '1', '2023-06-24 17:48:39', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2069, '秒杀时段更新', 'promotion:seckill-config:update', 3, 3, 2066, '', '', '', '', 0, '1', '1', '1', '', '2022-11-15 19:46:51', '1', '2023-06-24 17:50:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2070, '秒杀时段删除', 'promotion:seckill-config:delete', 3, 4, 2066, '', '', '', '', 0, '1', '1', '1', '', '2022-11-15 19:46:51', '1', '2023-06-24 17:50:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2072, '订单中心', '', 1, 65, 2362, 'trade', 'ep:eleme', NULL, NULL, 0, '1', '1', '1', '1', '2022-11-19 18:57:19', '1', '2023-09-30 11:54:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2073, '售后退款', '', 2, 2, 2072, 'after-sale', 'ep:refrigerator', 'mall/trade/afterSale/index', 'TradeAfterSale', 0, '1', '1', '1', '', '2022-11-19 20:15:32', '1', '2023-10-01 21:42:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2074, '售后查询', 'trade:after-sale:query', 3, 1, 2073, '', '', '', NULL, 0, '1', '1', '1', '', '2022-11-19 20:15:33', '1', '2022-12-10 21:04:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2075, '秒杀活动关闭', 'promotion:seckill-activity:close', 3, 5, 2059, '', '', '', '', 0, '1', '1', '1', '1', '2022-11-28 20:20:15', '1', '2023-10-03 18:34:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2076, '订单列表', '', 2, 1, 2072, 'order', 'ep:list', 'mall/trade/order/index', 'TradeOrder', 0, '1', '1', '1', '1', '2022-12-10 21:05:44', '1', '2023-10-01 21:42:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2083, '地区管理', '', 2, 14, 1, 'area', 'fa:map-marker', 'system/area/index', 'SystemArea', 0, '1', '1', '1', '1', '2022-12-23 17:35:05', '1', '2024-02-29 08:50:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2084, '公众号管理', '', 1, 100, 0, '/mp', 'ep:compass', NULL, NULL, 0, '1', '1', '1', '1', '2023-01-01 20:11:04', '1', '2024-02-29 12:39:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2085, '账号管理', '', 2, 1, 2084, 'account', 'fa:user', 'mp/account/index', 'MpAccount', 0, '1', '1', '1', '1', '2023-01-01 20:13:31', '1', '2024-02-29 12:42:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2086, '新增账号', 'mp:account:create', 3, 1, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-01 20:21:40', '1', '2023-01-07 17:32:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2087, '修改账号', 'mp:account:update', 3, 2, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-07 17:32:46', '1', '2023-01-07 17:32:46', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2088, '查询账号', 'mp:account:query', 3, 0, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-07 17:33:07', '1', '2023-01-07 17:33:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2089, '删除账号', 'mp:account:delete', 3, 3, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-07 17:33:21', '1', '2023-01-07 17:33:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2090, '生成二维码', 'mp:account:qr-code', 3, 4, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-07 17:33:58', '1', '2023-01-07 17:33:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2091, '清空 API 配额', 'mp:account:clear-quota', 3, 5, 2085, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-07 18:20:32', '1', '2023-01-07 18:20:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2092, '数据统计', 'mp:statistics:query', 2, 2, 2084, 'statistics', 'ep:trend-charts', 'mp/statistics/index', 'MpStatistics', 0, '1', '1', '1', '1', '2023-01-07 20:17:36', '1', '2024-02-29 12:42:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2093, '标签管理', '', 2, 3, 2084, 'tag', 'ep:collection-tag', 'mp/tag/index', 'MpTag', 0, '1', '1', '1', '1', '2023-01-08 11:37:32', '1', '2024-02-29 12:42:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2094, '查询标签', 'mp:tag:query', 3, 0, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 11:59:03', '1', '2023-01-08 11:59:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2095, '新增标签', 'mp:tag:create', 3, 1, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 11:59:23', '1', '2023-01-08 11:59:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2096, '修改标签', 'mp:tag:update', 3, 2, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 11:59:41', '1', '2023-01-08 11:59:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2097, '删除标签', 'mp:tag:delete', 3, 3, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 12:00:04', '1', '2023-01-08 12:00:13', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2098, '同步标签', 'mp:tag:sync', 3, 4, 2093, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 12:00:29', '1', '2023-01-08 12:00:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2099, '粉丝管理', '', 2, 4, 2084, 'user', 'fa:user-secret', 'mp/user/index', 'MpUser', 0, '1', '1', '1', '1', '2023-01-08 16:51:20', '1', '2024-02-29 12:42:39', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2100, '查询粉丝', 'mp:user:query', 3, 0, 2099, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 17:16:59', '1', '2023-01-08 17:17:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2101, '修改粉丝', 'mp:user:update', 3, 1, 2099, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 17:17:11', '1', '2023-01-08 17:17:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2102, '同步粉丝', 'mp:user:sync', 3, 2, 2099, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-08 17:17:40', '1', '2023-01-08 17:17:40', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2103, '消息管理', '', 2, 5, 2084, 'message', 'ep:message', 'mp/message/index', 'MpMessage', 0, '1', '1', '1', '1', '2023-01-08 18:44:19', '1', '2024-02-29 12:42:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2104, '图文发表记录', '', 2, 10, 2084, 'free-publish', 'ep:edit-pen', 'mp/freePublish/index', 'MpFreePublish', 0, '1', '1', '1', '1', '2023-01-13 00:30:50', '1', '2024-02-29 12:43:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2105, '查询发布列表', 'mp:free-publish:query', 3, 1, 2104, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-13 07:19:17', '1', '2023-01-13 07:19:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2106, '发布草稿', 'mp:free-publish:submit', 3, 2, 2104, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-13 07:19:46', '1', '2023-01-13 07:19:46', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2107, '删除发布记录', 'mp:free-publish:delete', 3, 3, 2104, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-13 07:20:01', '1', '2023-01-13 07:20:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2108, '图文草稿箱', '', 2, 9, 2084, 'draft', 'ep:edit', 'mp/draft/index', 'MpDraft', 0, '1', '1', '1', '1', '2023-01-13 07:40:21', '1', '2024-02-29 12:43:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2109, '新建草稿', 'mp:draft:create', 3, 1, 2108, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-13 23:15:30', '1', '2023-01-13 23:15:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2110, '修改草稿', 'mp:draft:update', 3, 2, 2108, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 10:08:47', '1', '2023-01-14 10:08:47', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2111, '查询草稿', 'mp:draft:query', 3, 0, 2108, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 10:09:01', '1', '2023-01-14 10:09:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2112, '删除草稿', 'mp:draft:delete', 3, 3, 2108, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 10:09:19', '1', '2023-01-14 10:09:19', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2113, '素材管理', '', 2, 8, 2084, 'material', 'ep:basketball', 'mp/material/index', 'MpMaterial', 0, '1', '1', '1', '1', '2023-01-14 14:12:07', '1', '2024-02-29 12:43:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2114, '上传临时素材', 'mp:material:upload-temporary', 3, 1, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 15:33:55', '1', '2023-01-14 15:33:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2115, '上传永久素材', 'mp:material:upload-permanent', 3, 2, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 15:34:14', '1', '2023-01-14 15:34:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2116, '删除素材', 'mp:material:delete', 3, 3, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 15:35:37', '1', '2023-01-14 15:35:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2117, '上传图文图片', 'mp:material:upload-news-image', 3, 4, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 15:36:31', '1', '2023-01-14 15:36:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2118, '查询素材', 'mp:material:query', 3, 5, 2113, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-14 15:39:22', '1', '2023-01-14 15:39:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2119, '菜单管理', '', 2, 6, 2084, 'menu', 'ep:menu', 'mp/menu/index', 'MpMenu', 0, '1', '1', '1', '1', '2023-01-14 17:43:54', '1', '2024-02-29 12:42:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2120, '自动回复', '', 2, 7, 2084, 'auto-reply', 'fa-solid:republican', 'mp/autoReply/index', 'MpAutoReply', 0, '1', '1', '1', '1', '2023-01-15 22:13:09', '1', '2024-02-29 12:43:10', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2121, '查询回复', 'mp:auto-reply:query', 3, 0, 2120, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-16 22:28:41', '1', '2023-01-16 22:28:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2122, '新增回复', 'mp:auto-reply:create', 3, 1, 2120, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-16 22:28:54', '1', '2023-01-16 22:28:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2123, '修改回复', 'mp:auto-reply:update', 3, 2, 2120, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-16 22:29:05', '1', '2023-01-16 22:29:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2124, '删除回复', 'mp:auto-reply:delete', 3, 3, 2120, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-16 22:29:34', '1', '2023-01-16 22:29:34', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2125, '查询菜单', 'mp:menu:query', 3, 0, 2119, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-17 23:05:41', '1', '2023-01-17 23:05:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2126, '保存菜单', 'mp:menu:save', 3, 1, 2119, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-17 23:06:01', '1', '2023-01-17 23:06:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2127, '删除菜单', 'mp:menu:delete', 3, 2, 2119, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-17 23:06:16', '1', '2023-01-17 23:06:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2128, '查询消息', 'mp:message:query', 3, 0, 2103, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-17 23:07:14', '1', '2023-01-17 23:07:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2129, '发送消息', 'mp:message:send', 3, 1, 2103, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-17 23:07:26', '1', '2023-01-17 23:07:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2130, '邮箱管理', '', 2, 2, 2739, 'mail', 'fa-solid:mail-bulk', NULL, NULL, 0, '1', '1', '1', '1', '2023-01-25 17:27:44', '1', '2024-04-22 23:56:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2131, '邮箱账号', '', 2, 0, 2130, 'mail-account', 'fa:universal-access', 'system/mail/account/index', 'SystemMailAccount', 0, '1', '1', '1', '', '2023-01-25 09:33:48', '1', '2024-02-29 08:48:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2132, '账号查询', 'system:mail-account:query', 3, 1, 2131, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2133, '账号创建', 'system:mail-account:create', 3, 2, 2131, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2134, '账号更新', 'system:mail-account:update', 3, 3, 2131, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2135, '账号删除', 'system:mail-account:delete', 3, 4, 2131, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2136, '邮件模版', '', 2, 0, 2130, 'mail-template', 'fa:tag', 'system/mail/template/index', 'SystemMailTemplate', 0, '1', '1', '1', '', '2023-01-25 12:05:31', '1', '2024-02-29 08:48:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2137, '模版查询', 'system:mail-template:query', 3, 1, 2136, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2138, '模版创建', 'system:mail-template:create', 3, 2, 2136, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2139, '模版更新', 'system:mail-template:update', 3, 3, 2136, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2140, '模版删除', 'system:mail-template:delete', 3, 4, 2136, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2141, '邮件记录', '', 2, 0, 2130, 'mail-log', 'fa:edit', 'system/mail/log/index', 'SystemMailLog', 0, '1', '1', '1', '', '2023-01-26 02:16:50', '1', '2024-02-29 08:48:51', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2142, '日志查询', 'system:mail-log:query', 3, 1, 2141, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-26 02:16:50', '', '2023-01-26 02:16:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2143, '发送测试邮件', 'system:mail-template:send-mail', 3, 5, 2136, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-26 23:29:15', '1', '2023-01-26 23:29:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2144, '站内信管理', '', 1, 3, 2739, 'notify', 'ep:message-box', NULL, NULL, 0, '1', '1', '1', '1', '2023-01-28 10:25:18', '1', '2024-04-22 23:56:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2145, '模板管理', '', 2, 0, 2144, 'notify-template', 'fa:archive', 'system/notify/template/index', 'SystemNotifyTemplate', 0, '1', '1', '1', '', '2023-01-28 02:26:42', '1', '2024-02-29 08:49:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2146, '站内信模板查询', 'system:notify-template:query', 3, 1, 2145, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2147, '站内信模板创建', 'system:notify-template:create', 3, 2, 2145, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2148, '站内信模板更新', 'system:notify-template:update', 3, 3, 2145, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2149, '站内信模板删除', 'system:notify-template:delete', 3, 4, 2145, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2150, '发送测试站内信', 'system:notify-template:send-notify', 3, 5, 2145, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-01-28 10:54:43', '1', '2023-01-28 10:54:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2151, '消息记录', '', 2, 0, 2144, 'notify-message', 'fa:edit', 'system/notify/message/index', 'SystemNotifyMessage', 0, '1', '1', '1', '', '2023-01-28 04:28:22', '1', '2024-02-29 08:49:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2152, '站内信消息查询', 'system:notify-message:query', 3, 1, 2151, '', '', '', NULL, 0, '1', '1', '1', '', '2023-01-28 04:28:22', '', '2023-01-28 04:28:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2153, '大屏设计器', '', 2, 2, 1281, 'go-view', 'fa:area-chart', 'report/goview/index', 'JimuReport', 0, '1', '1', '1', '1', '2023-02-07 00:03:19', '1', '2024-02-29 12:34:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2154, '创建项目', 'report:go-view-project:create', 3, 1, 2153, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-02-07 19:25:14', '1', '2023-02-07 19:25:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2155, '更新项目', 'report:go-view-project:update', 3, 2, 2153, '', '', '', '', 0, '1', '1', '1', '1', '2023-02-07 19:25:34', '1', '2024-04-24 20:01:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2156, '查询项目', 'report:go-view-project:query', 3, 0, 2153, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-02-07 19:25:53', '1', '2023-02-07 19:25:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2157, '使用 SQL 查询数据', 'report:go-view-data:get-by-sql', 3, 3, 2153, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-02-07 19:26:15', '1', '2023-02-07 19:26:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2158, '使用 HTTP 查询数据', 'report:go-view-data:get-by-http', 3, 4, 2153, '', '', '', NULL, 0, '1', '1', '1', '1', '2023-02-07 19:26:35', '1', '2023-02-07 19:26:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2159, 'Boot 开发文档', '', 1, 1, 0, 'https://doc.iocoder.cn/', 'ep:document', NULL, NULL, 0, '1', '1', '1', '1', '2023-02-10 22:46:28', '1', '2023-12-02 21:32:20', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2160, 'Cloud 开发文档', '', 1, 2, 0, 'https://cloud.iocoder.cn', 'ep:document-copy', NULL, NULL, 0, '1', '1', '1', '1', '2023-02-10 22:47:07', '1', '2023-12-02 21:32:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2161, '接入示例', '', 1, 99, 1117, 'demo', 'fa-solid:dragon', 'pay/demo/index', NULL, 0, '1', '1', '1', '', '2023-02-11 14:21:42', '1', '2024-01-18 23:50:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2162, '商品导出', 'product:spu:export', 3, 5, 2014, '', '', '', NULL, 0, '1', '1', '1', '', '2022-07-30 14:22:58', '', '2022-07-30 14:22:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2164, '配送管理', '', 1, 3, 2072, 'delivery', 'ep:shopping-cart', '', '', 0, '1', '1', '1', '1', '2023-05-18 09:18:02', '1', '2023-09-28 10:58:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2165, '快递发货', '', 1, 0, 2164, 'express', 'ep:bicycle', '', '', 0, '1', '1', '1', '1', '2023-05-18 09:22:06', '1', '2023-08-30 21:02:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2166, '门店自提', '', 1, 1, 2164, 'pick-up-store', 'ep:add-location', '', '', 0, '1', '1', '1', '1', '2023-05-18 09:23:14', '1', '2023-08-30 21:03:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2167, '快递公司', '', 2, 0, 2165, 'express', 'ep:compass', 'mall/trade/delivery/express/index', 'Express', 0, '1', '1', '1', '1', '2023-05-18 09:27:21', '1', '2023-08-30 21:02:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2168, '快递公司查询', 'trade:delivery:express:query', 3, 1, 2167, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2169, '快递公司创建', 'trade:delivery:express:create', 3, 2, 2167, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2170, '快递公司更新', 'trade:delivery:express:update', 3, 3, 2167, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2171, '快递公司删除', 'trade:delivery:express:delete', 3, 4, 2167, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2172, '快递公司导出', 'trade:delivery:express:export', 3, 5, 2167, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-18 09:37:53', '', '2023-05-18 09:37:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2173, '运费模版', 'trade:delivery:express-template:query', 2, 1, 2165, 'express-template', 'ep:coordinate', 'mall/trade/delivery/expressTemplate/index', 'ExpressTemplate', 0, '1', '1', '1', '1', '2023-05-20 06:48:10', '1', '2023-08-30 21:03:13', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2174, '快递运费模板查询', 'trade:delivery:express-template:query', 3, 1, 2173, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2175, '快递运费模板创建', 'trade:delivery:express-template:create', 3, 2, 2173, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2176, '快递运费模板更新', 'trade:delivery:express-template:update', 3, 3, 2173, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2177, '快递运费模板删除', 'trade:delivery:express-template:delete', 3, 4, 2173, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2178, '快递运费模板导出', 'trade:delivery:express-template:export', 3, 5, 2173, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-20 06:49:53', '', '2023-05-20 06:49:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2179, '门店管理', '', 2, 1, 2166, 'pick-up-store', 'ep:basketball', 'mall/trade/delivery/pickUpStore/index', 'PickUpStore', 0, '1', '1', '1', '1', '2023-05-25 10:50:00', '1', '2023-08-30 21:03:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2180, '自提门店查询', 'trade:delivery:pick-up-store:query', 3, 1, 2179, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2181, '自提门店创建', 'trade:delivery:pick-up-store:create', 3, 2, 2179, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2182, '自提门店更新', 'trade:delivery:pick-up-store:update', 3, 3, 2179, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2183, '自提门店删除', 'trade:delivery:pick-up-store:delete', 3, 4, 2179, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2184, '自提门店导出', 'trade:delivery:pick-up-store:export', 3, 5, 2179, '', '', '', NULL, 0, '1', '1', '1', '', '2023-05-25 10:53:29', '', '2023-05-25 10:53:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2209, '秒杀活动', '', 2, 3, 2030, 'seckill', 'ep:place', '', '', 0, '1', '1', '1', '1', '2023-06-24 17:39:13', '1', '2023-06-24 18:55:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2262, '会员中心', '', 1, 55, 0, '/member', 'ep:bicycle', NULL, NULL, 0, '1', '1', '1', '1', '2023-06-10 00:42:03', '1', '2023-08-20 09:23:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2275, '会员配置', '', 2, 0, 2262, 'config', 'fa:archive', 'member/config/index', 'MemberConfig', 0, '1', '1', '1', '', '2023-06-10 02:07:44', '1', '2023-10-01 23:41:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2276, '会员配置查询', 'member:config:query', 3, 1, 2275, '', '', '', '', 0, '1', '1', '1', '', '2023-06-10 02:07:44', '1', '2024-04-24 19:48:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2277, '会员配置保存', 'member:config:save', 3, 2, 2275, '', '', '', '', 0, '1', '1', '1', '', '2023-06-10 02:07:44', '1', '2024-04-24 19:49:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2281, '签到配置', '', 2, 2, 2300, 'config', 'ep:calendar', 'member/signin/config/index', 'SignInConfig', 0, '1', '1', '1', '', '2023-06-10 03:26:12', '1', '2023-08-20 19:25:51', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2282, '积分签到规则查询', 'point:sign-in-config:query', 3, 1, 2281, '', '', '', NULL, 0, '1', '1', '1', '', '2023-06-10 03:26:12', '', '2023-06-10 03:26:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2283, '积分签到规则创建', 'point:sign-in-config:create', 3, 2, 2281, '', '', '', NULL, 0, '1', '1', '1', '', '2023-06-10 03:26:12', '', '2023-06-10 03:26:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2284, '积分签到规则更新', 'point:sign-in-config:update', 3, 3, 2281, '', '', '', NULL, 0, '1', '1', '1', '', '2023-06-10 03:26:12', '', '2023-06-10 03:26:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2285, '积分签到规则删除', 'point:sign-in-config:delete', 3, 4, 2281, '', '', '', NULL, 0, '1', '1', '1', '', '2023-06-10 03:26:12', '', '2023-06-10 03:26:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2287, '会员积分', '', 2, 10, 2262, 'record', 'fa:asterisk', 'member/point/record/index', 'PointRecord', 0, '1', '1', '1', '', '2023-06-10 04:18:50', '1', '2023-10-01 23:42:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2288, '用户积分记录查询', 'point:record:query', 3, 1, 2287, '', '', '', NULL, 0, '1', '1', '1', '', '2023-06-10 04:18:50', '', '2023-06-10 04:18:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2293, '签到记录', '', 2, 3, 2300, 'record', 'ep:chicken', 'member/signin/record/index', 'SignInRecord', 0, '1', '1', '1', '', '2023-06-10 04:48:22', '1', '2023-08-20 19:26:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2294, '用户签到积分查询', 'point:sign-in-record:query', 3, 1, 2293, '', '', '', NULL, 0, '1', '1', '1', '', '2023-06-10 04:48:22', '', '2023-06-10 04:48:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2297, '用户签到积分删除', 'point:sign-in-record:delete', 3, 4, 2293, '', '', '', NULL, 0, '1', '1', '1', '', '2023-06-10 04:48:22', '', '2023-06-10 04:48:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2300, '会员签到', '', 1, 11, 2262, 'signin', 'ep:alarm-clock', '', '', 0, '1', '1', '1', '1', '2023-06-27 22:49:53', '1', '2023-08-20 09:23:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2301, '回调通知', '', 2, 5, 1117, 'notify', 'ep:mute-notification', 'pay/notify/index', 'PayNotify', 0, '1', '1', '1', '', '2023-07-20 04:41:32', '1', '2024-01-18 23:56:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2302, '支付通知查询', 'pay:notify:query', 3, 1, 2301, '', '', '', NULL, 0, '1', '1', '1', '', '2023-07-20 04:41:32', '', '2023-07-20 04:41:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2303, '拼团活动', '', 2, 3, 2030, 'combination', 'fa:group', '', '', 0, '1', '1', '1', '1', '2023-08-12 17:19:54', '1', '2023-08-12 17:20:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2304, '拼团商品', '', 2, 1, 2303, 'acitivity', 'ep:apple', 'mall/promotion/combination/activity/index', 'PromotionCombinationActivity', 0, '1', '1', '1', '1', '2023-08-12 17:22:03', '1', '2023-08-12 17:22:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2305, '拼团活动查询', 'promotion:combination-activity:query', 3, 1, 2304, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-12 17:54:32', '1', '2023-11-24 11:57:40', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2306, '拼团活动创建', 'promotion:combination-activity:create', 3, 2, 2304, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-12 17:54:49', '1', '2023-08-12 17:54:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2307, '拼团活动更新', 'promotion:combination-activity:update', 3, 3, 2304, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-12 17:55:04', '1', '2023-08-12 17:55:04', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2308, '拼团活动删除', 'promotion:combination-activity:delete', 3, 4, 2304, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-12 17:55:23', '1', '2023-08-12 17:55:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2309, '拼团活动关闭', 'promotion:combination-activity:close', 3, 5, 2304, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-12 17:55:37', '1', '2023-10-06 10:51:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2310, '砍价活动', '', 2, 4, 2030, 'bargain', 'ep:box', '', '', 0, '1', '1', '1', '1', '2023-08-13 00:27:25', '1', '2023-08-13 00:27:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2311, '砍价商品', '', 2, 1, 2310, 'activity', 'ep:burger', 'mall/promotion/bargain/activity/index', 'PromotionBargainActivity', 0, '1', '1', '1', '1', '2023-08-13 00:28:49', '1', '2023-10-05 01:16:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2312, '砍价活动查询', 'promotion:bargain-activity:query', 3, 1, 2311, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-13 00:32:30', '1', '2023-08-13 00:32:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2313, '砍价活动创建', 'promotion:bargain-activity:create', 3, 2, 2311, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-13 00:32:44', '1', '2023-08-13 00:32:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2314, '砍价活动更新', 'promotion:bargain-activity:update', 3, 3, 2311, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-13 00:32:55', '1', '2023-08-13 00:32:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2315, '砍价活动删除', 'promotion:bargain-activity:delete', 3, 4, 2311, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-13 00:34:50', '1', '2023-08-13 00:34:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2316, '砍价活动关闭', 'promotion:bargain-activity:close', 3, 5, 2311, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-13 00:35:02', '1', '2023-08-13 00:35:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2317, '会员管理', '', 2, 0, 2262, 'user', 'ep:avatar', 'member/user/index', 'MemberUser', 0, '1', '1', '1', '', '2023-08-19 04:12:15', '1', '2023-08-24 00:50:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2318, '会员用户查询', 'member:user:query', 3, 1, 2317, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-19 04:12:15', '', '2023-08-19 04:12:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2319, '会员用户更新', 'member:user:update', 3, 3, 2317, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-19 04:12:15', '', '2023-08-19 04:12:15', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2320, '会员标签', '', 2, 1, 2262, 'tag', 'ep:collection-tag', 'member/tag/index', 'MemberTag', 0, '1', '1', '1', '', '2023-08-20 01:03:08', '1', '2023-08-20 09:23:19', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2321, '会员标签查询', 'member:tag:query', 3, 1, 2320, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-20 01:03:08', '', '2023-08-20 01:03:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2322, '会员标签创建', 'member:tag:create', 3, 2, 2320, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-20 01:03:08', '', '2023-08-20 01:03:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2323, '会员标签更新', 'member:tag:update', 3, 3, 2320, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-20 01:03:08', '', '2023-08-20 01:03:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2324, '会员标签删除', 'member:tag:delete', 3, 4, 2320, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-20 01:03:08', '', '2023-08-20 01:03:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2325, '会员等级', '', 2, 2, 2262, 'level', 'fa:level-up', 'member/level/index', 'MemberLevel', 0, '1', '1', '1', '', '2023-08-22 12:41:01', '1', '2023-08-22 21:47:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2326, '会员等级查询', 'member:level:query', 3, 1, 2325, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 12:41:02', '', '2023-08-22 12:41:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2327, '会员等级创建', 'member:level:create', 3, 2, 2325, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 12:41:02', '', '2023-08-22 12:41:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2328, '会员等级更新', 'member:level:update', 3, 3, 2325, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 12:41:02', '', '2023-08-22 12:41:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2329, '会员等级删除', 'member:level:delete', 3, 4, 2325, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 12:41:02', '', '2023-08-22 12:41:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2330, '会员分组', '', 2, 3, 2262, 'group', 'fa:group', 'member/group/index', 'MemberGroup', 0, '1', '1', '1', '', '2023-08-22 13:50:06', '1', '2023-10-01 23:42:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2331, '用户分组查询', 'member:group:query', 3, 1, 2330, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 13:50:06', '', '2023-08-22 13:50:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2332, '用户分组创建', 'member:group:create', 3, 2, 2330, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 13:50:06', '', '2023-08-22 13:50:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2333, '用户分组更新', 'member:group:update', 3, 3, 2330, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 13:50:06', '', '2023-08-22 13:50:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2334, '用户分组删除', 'member:group:delete', 3, 4, 2330, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-22 13:50:06', '', '2023-08-22 13:50:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2335, '用户等级修改', 'member:user:update-level', 3, 5, 2317, '', '', '', NULL, 0, '1', '1', '1', '', '2023-08-23 16:49:05', '', '2023-08-23 16:50:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2336, '商品评论', '', 2, 5, 2000, 'comment', 'ep:comment', 'mall/product/comment/index', 'ProductComment', 0, '1', '1', '1', '1', '2023-08-26 11:03:00', '1', '2023-08-26 11:03:38', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2337, '评论查询', 'product:comment:query', 3, 1, 2336, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-26 11:04:01', '1', '2023-08-26 11:04:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2338, '添加自评', 'product:comment:create', 3, 2, 2336, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-26 11:04:23', '1', '2023-08-26 11:08:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2339, '商家回复', 'product:comment:update', 3, 3, 2336, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-26 11:04:37', '1', '2023-08-26 11:04:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2340, '显隐评论', 'product:comment:update', 3, 4, 2336, '', '', '', '', 0, '1', '1', '1', '1', '2023-08-26 11:04:55', '1', '2023-08-26 11:04:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2341, '优惠劵发送', 'promotion:coupon:send', 3, 2, 2038, '', '', '', '', 0, '1', '1', '1', '1', '2023-09-02 00:03:14', '1', '2023-09-02 00:03:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2342, '交易配置', '', 2, 0, 2072, 'config', 'ep:setting', 'mall/trade/config/index', 'TradeConfig', 0, '1', '1', '1', '', '2023-09-28 02:46:22', '1', '2024-02-26 20:30:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2343, '交易中心配置查询', 'trade:config:query', 3, 1, 2342, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2344, '交易中心配置保存', 'trade:config:save', 3, 2, 2342, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2345, '分销管理', '', 1, 4, 2072, 'brokerage', 'fa-solid:project-diagram', '', '', 0, '1', '1', '1', '', '2023-09-28 02:46:22', '1', '2023-09-28 10:58:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2346, '分销用户', '', 2, 0, 2345, 'brokerage-user', 'fa-solid:user-tie', 'mall/trade/brokerage/user/index', 'TradeBrokerageUser', 0, '1', '1', '1', '', '2023-09-28 02:46:22', '1', '2024-02-26 20:33:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2347, '分销用户查询', 'trade:brokerage-user:query', 3, 1, 2346, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2348, '分销用户推广人查询', 'trade:brokerage-user:user-query', 3, 2, 2346, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2349, '分销用户推广订单查询', 'trade:brokerage-user:order-query', 3, 3, 2346, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2350, '分销用户修改推广资格', 'trade:brokerage-user:update-brokerage-enable', 3, 4, 2346, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2351, '分销用户修改推广员', 'trade:brokerage-user:update-bind-user', 3, 5, 2346, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2352, '分销用户清除推广员', 'trade:brokerage-user:clear-bind-user', 3, 6, 2346, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2353, '佣金记录', '', 2, 1, 2345, 'brokerage-record', 'fa:money', 'mall/trade/brokerage/record/index', 'TradeBrokerageRecord', 0, '1', '1', '1', '', '2023-09-28 02:46:22', '1', '2024-02-26 20:33:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2354, '佣金记录查询', 'trade:brokerage-record:query', 3, 1, 2353, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2355, '佣金提现', '', 2, 2, 2345, 'brokerage-withdraw', 'fa:credit-card', 'mall/trade/brokerage/withdraw/index', 'TradeBrokerageWithdraw', 0, '1', '1', '1', '', '2023-09-28 02:46:22', '1', '2024-02-26 20:33:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2356, '佣金提现查询', 'trade:brokerage-withdraw:query', 3, 1, 2355, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2357, '佣金提现审核', 'trade:brokerage-withdraw:audit', 3, 2, 2355, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-28 02:46:22', '', '2023-09-28 02:46:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2358, '统计中心', '', 1, 75, 2362, 'statistics', 'ep:data-line', '', '', 0, '1', '1', '1', '', '2023-09-30 03:22:40', '1', '2023-09-30 11:54:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2359, '交易统计', '', 2, 4, 2358, 'trade', 'fa-solid:credit-card', 'mall/statistics/trade/index', 'TradeStatistics', 0, '1', '1', '1', '', '2023-09-30 03:22:40', '1', '2024-02-26 20:42:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2360, '交易统计查询', 'statistics:trade:query', 3, 1, 2359, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-30 03:22:40', '', '2023-09-30 03:22:40', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2361, '交易统计导出', 'statistics:trade:export', 3, 2, 2359, '', '', '', NULL, 0, '1', '1', '1', '', '2023-09-30 03:22:40', '', '2023-09-30 03:22:40', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2362, '商城系统', '', 1, 59, 0, '/mall', 'ep:shop', '', '', 0, '1', '1', '1', '1', '2023-09-30 11:52:02', '1', '2023-09-30 11:52:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2363, '用户积分修改', 'member:user:update-point', 3, 6, 2317, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-01 14:39:43', '', '2023-10-01 14:39:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2364, '用户余额修改', 'member:user:update-balance', 3, 7, 2317, '', '', '', '', 0, '1', '1', '1', '', '2023-10-01 14:39:43', '1', '2023-10-01 22:42:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2365, '优惠劵', '', 1, 2, 2030, 'coupon', 'fa-solid:disease', '', '', 0, '1', '1', '1', '1', '2023-10-03 12:39:15', '1', '2023-10-05 00:16:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2366, '砍价记录', '', 2, 2, 2310, 'record', 'ep:list', 'mall/promotion/bargain/record/index', 'PromotionBargainRecord', 0, '1', '1', '1', '', '2023-10-05 02:49:06', '1', '2023-10-05 10:50:38', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2367, '砍价记录查询', 'promotion:bargain-record:query', 3, 1, 2366, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-05 02:49:06', '', '2023-10-05 02:49:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2368, '助力记录查询', 'promotion:bargain-help:query', 3, 2, 2366, '', '', '', '', 0, '1', '1', '1', '1', '2023-10-05 12:27:49', '1', '2023-10-05 12:27:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2369, '拼团记录', 'promotion:combination-record:query', 2, 2, 2303, 'record', 'ep:avatar', 'mall/promotion/combination/record/index.vue', 'PromotionCombinationRecord', 0, '1', '1', '1', '1', '2023-10-08 07:10:22', '1', '2023-10-08 07:34:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2374, '会员统计', '', 2, 2, 2358, 'member', 'ep:avatar', 'mall/statistics/member/index', 'MemberStatistics', 0, '1', '1', '1', '', '2023-10-11 04:39:24', '1', '2024-02-26 20:41:46', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2375, '会员统计查询', 'statistics:member:query', 3, 1, 2374, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-11 04:39:24', '', '2023-10-11 04:39:24', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2376, '订单核销', 'trade:order:pick-up', 3, 10, 2076, '', '', '', '', 0, '1', '1', '1', '1', '2023-10-14 17:11:58', '1', '2023-10-14 17:11:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2377, '文章分类', '', 2, 0, 2387, 'article/category', 'fa:certificate', 'mall/promotion/article/category/index', 'ArticleCategory', 0, '1', '1', '1', '', '2023-10-16 01:26:18', '1', '2023-10-16 09:38:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2378, '分类查询', 'promotion:article-category:query', 3, 1, 2377, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2379, '分类创建', 'promotion:article-category:create', 3, 2, 2377, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2380, '分类更新', 'promotion:article-category:update', 3, 3, 2377, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2381, '分类删除', 'promotion:article-category:delete', 3, 4, 2377, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2382, '文章列表', '', 2, 2, 2387, 'article', 'ep:connection', 'mall/promotion/article/index', 'Article', 0, '1', '1', '1', '', '2023-10-16 01:26:18', '1', '2023-10-16 09:41:19', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2383, '文章管理查询', 'promotion:article:query', 3, 1, 2382, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2384, '文章管理创建', 'promotion:article:create', 3, 2, 2382, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2385, '文章管理更新', 'promotion:article:update', 3, 3, 2382, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2386, '文章管理删除', 'promotion:article:delete', 3, 4, 2382, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-16 01:26:18', '', '2023-10-16 01:26:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2387, '内容管理', '', 1, 1, 2030, 'content', 'ep:collection', '', '', 0, '1', '1', '1', '1', '2023-10-16 09:37:31', '1', '2023-10-16 09:37:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2388, '商城首页', '', 2, 1, 2362, 'home', 'ep:home-filled', 'mall/home/index', 'MallHome', 0, '1', '1', '1', '', '2023-10-16 12:10:33', '', '2023-10-16 12:10:33', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2389, '核销订单', '', 2, 2, 2166, 'pick-up-order', 'ep:list', 'mall/trade/delivery/pickUpOrder/index', 'PickUpOrder', 0, '1', '1', '1', '', '2023-10-19 16:09:51', '', '2023-10-19 16:09:51', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2390, '优惠活动', '', 1, 99, 2030, 'youhui', 'ep:aim', '', '', 0, '1', '1', '1', '1', '2023-10-21 19:23:49', '1', '2023-10-21 19:23:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2391, '客户管理', '', 2, 10, 2397, 'customer', 'fa:address-book-o', 'crm/customer/index', 'CrmCustomer', 0, '1', '1', '1', '', '2023-10-29 09:04:21', '1', '2024-02-17 17:13:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2392, '客户查询', 'crm:customer:query', 3, 1, 2391, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2393, '客户创建', 'crm:customer:create', 3, 2, 2391, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2394, '客户更新', 'crm:customer:update', 3, 3, 2391, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2395, '客户删除', 'crm:customer:delete', 3, 4, 2391, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2396, '客户导出', 'crm:customer:export', 3, 5, 2391, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 09:04:21', '', '2023-10-29 09:04:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2397, 'CRM 系统', '', 1, 200, 0, '/crm', 'ep:avatar', '', '', 0, '1', '1', '1', '1', '2023-10-29 17:08:30', '1', '2024-02-04 15:37:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2398, '合同管理', '', 2, 50, 2397, 'contract', 'ep:notebook', 'crm/contract/index', 'CrmContract', 0, '1', '1', '1', '', '2023-10-29 10:50:41', '1', '2024-02-17 17:15:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2399, '合同查询', 'crm:contract:query', 3, 1, 2398, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2400, '合同创建', 'crm:contract:create', 3, 2, 2398, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2401, '合同更新', 'crm:contract:update', 3, 3, 2398, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2402, '合同删除', 'crm:contract:delete', 3, 4, 2398, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2403, '合同导出', 'crm:contract:export', 3, 5, 2398, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 10:50:41', '', '2023-10-29 10:50:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2404, '线索管理', '', 2, 8, 2397, 'clue', 'fa:pagelines', 'crm/clue/index', 'CrmClue', 0, '1', '1', '1', '', '2023-10-29 11:06:29', '1', '2024-02-17 17:15:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2405, '线索查询', 'crm:clue:query', 3, 1, 2404, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2406, '线索创建', 'crm:clue:create', 3, 2, 2404, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2407, '线索更新', 'crm:clue:update', 3, 3, 2404, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2408, '线索删除', 'crm:clue:delete', 3, 4, 2404, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2409, '线索导出', 'crm:clue:export', 3, 5, 2404, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:06:29', '', '2023-10-29 11:06:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2410, '商机管理', '', 2, 40, 2397, 'business', 'fa:bus', 'crm/business/index', 'CrmBusiness', 0, '1', '1', '1', '', '2023-10-29 11:12:35', '1', '2024-02-17 17:14:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2411, '商机查询', 'crm:business:query', 3, 1, 2410, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2412, '商机创建', 'crm:business:create', 3, 2, 2410, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2413, '商机更新', 'crm:business:update', 3, 3, 2410, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2414, '商机删除', 'crm:business:delete', 3, 4, 2410, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2415, '商机导出', 'crm:business:export', 3, 5, 2410, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:12:35', '', '2023-10-29 11:12:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2416, '联系人管理', '', 2, 20, 2397, 'contact', 'fa:address-book-o', 'crm/contact/index', 'CrmContact', 0, '1', '1', '1', '', '2023-10-29 11:14:56', '1', '2024-02-17 17:13:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2417, '联系人查询', 'crm:contact:query', 3, 1, 2416, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2418, '联系人创建', 'crm:contact:create', 3, 2, 2416, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2419, '联系人更新', 'crm:contact:update', 3, 3, 2416, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2420, '联系人删除', 'crm:contact:delete', 3, 4, 2416, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2421, '联系人导出', 'crm:contact:export', 3, 5, 2416, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:14:56', '', '2023-10-29 11:14:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2422, '回款管理', '', 2, 60, 2397, 'receivable', 'ep:money', 'crm/receivable/index', 'CrmReceivable', 0, '1', '1', '1', '', '2023-10-29 11:18:09', '1', '2024-02-17 17:16:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2423, '回款管理查询', 'crm:receivable:query', 3, 1, 2422, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2424, '回款管理创建', 'crm:receivable:create', 3, 2, 2422, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2425, '回款管理更新', 'crm:receivable:update', 3, 3, 2422, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2426, '回款管理删除', 'crm:receivable:delete', 3, 4, 2422, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2427, '回款管理导出', 'crm:receivable:export', 3, 5, 2422, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2428, '回款计划', '', 2, 61, 2397, 'receivable-plan', 'fa:money', 'crm/receivable/plan/index', 'CrmReceivablePlan', 0, '1', '1', '1', '', '2023-10-29 11:18:09', '1', '2024-02-17 17:16:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2429, '回款计划查询', 'crm:receivable-plan:query', 3, 1, 2428, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2430, '回款计划创建', 'crm:receivable-plan:create', 3, 2, 2428, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2431, '回款计划更新', 'crm:receivable-plan:update', 3, 3, 2428, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2432, '回款计划删除', 'crm:receivable-plan:delete', 3, 4, 2428, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2433, '回款计划导出', 'crm:receivable-plan:export', 3, 5, 2428, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 11:18:09', '', '2023-10-29 11:18:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2435, '商城装修', '', 2, 20, 2030, 'diy-template', 'fa6-solid:brush', 'mall/promotion/diy/template/index', 'DiyTemplate', 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2436, '装修模板', '', 2, 1, 2435, 'diy-template', 'fa6-solid:brush', 'mall/promotion/diy/template/index', 'DiyTemplate', 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2437, '装修模板查询', 'promotion:diy-template:query', 3, 1, 2436, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2438, '装修模板创建', 'promotion:diy-template:create', 3, 2, 2436, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2439, '装修模板更新', 'promotion:diy-template:update', 3, 3, 2436, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2440, '装修模板删除', 'promotion:diy-template:delete', 3, 4, 2436, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2441, '装修模板使用', 'promotion:diy-template:use', 3, 5, 2436, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2442, '装修页面', '', 2, 2, 2435, 'diy-page', 'foundation:page-edit', 'mall/promotion/diy/page/index', 'DiyPage', 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2443, '装修页面查询', 'promotion:diy-page:query', 3, 1, 2442, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:25', '', '2023-10-29 14:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2444, '装修页面创建', 'promotion:diy-page:create', 3, 2, 2442, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:26', '', '2023-10-29 14:19:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2445, '装修页面更新', 'promotion:diy-page:update', 3, 3, 2442, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:26', '', '2023-10-29 14:19:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2446, '装修页面删除', 'promotion:diy-page:delete', 3, 4, 2442, '', '', '', NULL, 0, '1', '1', '1', '', '2023-10-29 14:19:26', '', '2023-10-29 14:19:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2447, '三方登录', '', 1, 10, 1, 'social', 'fa:rocket', '', '', 0, '1', '1', '1', '1', '2023-11-04 12:12:01', '1', '2024-02-29 01:14:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2448, '三方应用', '', 2, 1, 2447, 'client', 'ep:set-up', 'views/system/social/client/index.vue', 'SocialClient', 0, '1', '1', '1', '1', '2023-11-04 12:17:19', '1', '2023-11-04 12:17:19', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2449, '三方应用查询', 'system:social-client:query', 3, 1, 2448, '', '', '', '', 0, '1', '1', '1', '1', '2023-11-04 12:43:12', '1', '2023-11-04 12:43:33', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2450, '三方应用创建', 'system:social-client:create', 3, 2, 2448, '', '', '', '', 0, '1', '1', '1', '1', '2023-11-04 12:43:58', '1', '2023-11-04 12:43:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2451, '三方应用更新', 'system:social-client:update', 3, 3, 2448, '', '', '', '', 0, '1', '1', '1', '1', '2023-11-04 12:44:27', '1', '2023-11-04 12:44:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2452, '三方应用删除', 'system:social-client:delete', 3, 4, 2448, '', '', '', '', 0, '1', '1', '1', '1', '2023-11-04 12:44:43', '1', '2023-11-04 12:44:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2453, '三方用户', 'system:social-user:query', 2, 2, 2447, 'user', 'ep:avatar', 'system/social/user/index.vue', 'SocialUser', 0, '1', '1', '1', '1', '2023-11-04 14:01:05', '1', '2023-11-04 14:01:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2472, '主子表(内嵌)', '', 2, 12, 1070, 'demo03-inner', 'fa:power-off', 'infra/demo/demo03/inner/index', 'Demo03StudentInner', 0, '1', '1', '1', '', '2023-11-13 04:39:51', '1', '2023-11-16 23:53:46', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2478, '单表(增删改查)', '', 2, 1, 1070, 'demo01-contact', 'ep:bicycle', 'infra/demo/demo01/index', 'Demo01Contact', 0, '1', '1', '1', '', '2023-11-15 14:42:30', '1', '2023-11-16 20:34:40', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2479, '示例联系人查询', 'infra:demo01-contact:query', 3, 1, 2478, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2480, '示例联系人创建', 'infra:demo01-contact:create', 3, 2, 2478, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2481, '示例联系人更新', 'infra:demo01-contact:update', 3, 3, 2478, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2482, '示例联系人删除', 'infra:demo01-contact:delete', 3, 4, 2478, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2483, '示例联系人导出', 'infra:demo01-contact:export', 3, 5, 2478, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2484, '树表(增删改查)', '', 2, 2, 1070, 'demo02-category', 'fa:tree', 'infra/demo/demo02/index', 'Demo02Category', 0, '1', '1', '1', '', '2023-11-16 12:18:27', '1', '2023-11-16 20:35:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2485, '示例分类查询', 'infra:demo02-category:query', 3, 1, 2484, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2486, '示例分类创建', 'infra:demo02-category:create', 3, 2, 2484, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2487, '示例分类更新', 'infra:demo02-category:update', 3, 3, 2484, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2488, '示例分类删除', 'infra:demo02-category:delete', 3, 4, 2484, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2489, '示例分类导出', 'infra:demo02-category:export', 3, 5, 2484, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2490, '主子表(标准)', '', 2, 10, 1070, 'demo03-normal', 'fa:battery-3', 'infra/demo/demo03/normal/index', 'Demo03StudentNormal', 0, '1', '1', '1', '', '2023-11-16 12:53:37', '1', '2023-11-16 23:10:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2491, '学生查询', 'infra:demo03-student:query', 3, 1, 2490, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2492, '学生创建', 'infra:demo03-student:create', 3, 2, 2490, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2493, '学生更新', 'infra:demo03-student:update', 3, 3, 2490, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2494, '学生删除', 'infra:demo03-student:delete', 3, 4, 2490, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2495, '学生导出', 'infra:demo03-student:export', 3, 5, 2490, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-16 12:53:37', '', '2023-11-16 12:53:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2497, '主子表(ERP)', '', 2, 11, 1070, 'demo03-erp', 'ep:calendar', 'infra/demo/demo03/erp/index', 'Demo03StudentERP', 0, '1', '1', '1', '', '2023-11-16 15:50:59', '1', '2023-11-17 13:19:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2516, '客户公海配置', '', 2, 0, 2524, 'customer-pool-config', 'ep:data-analysis', 'crm/customer/poolConfig/index', 'CrmCustomerPoolConfig', 0, '1', '1', '1', '', '2023-11-18 13:33:31', '1', '2024-01-03 19:52:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2517, '客户公海配置保存', 'crm:customer-pool-config:update', 3, 1, 2516, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-18 13:33:31', '', '2023-11-18 13:33:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2518, '客户限制配置', '', 2, 1, 2524, 'customer-limit-config', 'ep:avatar', 'crm/customer/limitConfig/index', 'CrmCustomerLimitConfig', 0, '1', '1', '1', '', '2023-11-18 13:33:53', '1', '2024-02-24 16:43:33', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2519, '客户限制配置查询', 'crm:customer-limit-config:query', 3, 1, 2518, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2520, '客户限制配置创建', 'crm:customer-limit-config:create', 3, 2, 2518, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2521, '客户限制配置更新', 'crm:customer-limit-config:update', 3, 3, 2518, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2522, '客户限制配置删除', 'crm:customer-limit-config:delete', 3, 4, 2518, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2523, '客户限制配置导出', 'crm:customer-limit-config:export', 3, 5, 2518, '', '', '', NULL, 0, '1', '1', '1', '', '2023-11-18 13:33:53', '', '2023-11-18 13:33:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2524, '系统配置', '', 1, 999, 2397, 'config', 'ep:connection', '', '', 0, '1', '1', '1', '1', '2023-11-18 21:58:00', '1', '2024-02-17 17:14:34', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2525, 'WebSocket', '', 2, 5, 2, 'websocket', 'ep:connection', 'infra/webSocket/index', 'InfraWebSocket', 0, '1', '1', '1', '1', '2023-11-23 19:41:55', '1', '2024-04-23 00:02:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2526, '产品管理', '', 2, 80, 2397, 'product', 'fa:product-hunt', 'crm/product/index', 'CrmProduct', 0, '1', '1', '1', '1', '2023-12-05 22:45:26', '1', '2024-02-20 20:36:20', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2527, '产品查询', 'crm:product:query', 3, 1, 2526, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-05 22:47:16', '1', '2023-12-05 22:47:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2528, '产品创建', 'crm:product:create', 3, 2, 2526, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-05 22:47:41', '1', '2023-12-05 22:47:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2529, '产品更新', 'crm:product:update', 3, 3, 2526, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-05 22:48:03', '1', '2023-12-05 22:48:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2530, '产品删除', 'crm:product:delete', 3, 4, 2526, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-05 22:48:17', '1', '2023-12-05 22:48:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2531, '产品导出', 'crm:product:export', 3, 5, 2526, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-05 22:48:29', '1', '2023-12-05 22:48:29', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2532, '产品分类配置', '', 2, 3, 2524, 'product/category', 'fa-solid:window-restore', 'crm/product/category/index', 'CrmProductCategory', 0, '1', '1', '1', '1', '2023-12-06 12:52:36', '1', '2023-12-06 12:52:51', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2533, '产品分类查询', 'crm:product-category:query', 3, 1, 2532, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-06 12:53:23', '1', '2023-12-06 12:53:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2534, '产品分类创建', 'crm:product-category:create', 3, 2, 2532, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-06 12:53:41', '1', '2023-12-06 12:53:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2535, '产品分类更新', 'crm:product-category:update', 3, 3, 2532, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-06 12:53:59', '1', '2023-12-06 12:53:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2536, '产品分类删除', 'crm:product-category:delete', 3, 4, 2532, '', '', '', '', 0, '1', '1', '1', '1', '2023-12-06 12:54:14', '1', '2023-12-06 12:54:14', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2543, '关联商机', 'crm:contact:create-business', 3, 10, 2416, '', '', '', '', 0, '1', '1', '1', '1', '2024-01-02 17:28:25', '1', '2024-01-02 17:28:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2544, '取关商机', 'crm:contact:delete-business', 3, 11, 2416, '', '', '', '', 0, '1', '1', '1', '1', '2024-01-02 17:28:43', '1', '2024-01-02 17:28:51', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2545, '商品统计', '', 2, 3, 2358, 'product', 'fa:product-hunt', 'mall/statistics/product/index', 'ProductStatistics', 0, '1', '1', '1', '', '2023-12-15 18:54:28', '1', '2024-02-26 20:41:52', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2546, '客户公海', '', 2, 30, 2397, 'customer/pool', 'fa-solid:swimming-pool', 'crm/customer/pool/index', 'CrmCustomerPool', 0, '1', '1', '1', '1', '2024-01-15 21:29:34', '1', '2024-02-17 17:14:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2547, '订单查询', 'trade:order:query', 3, 1, 2076, '', '', '', '', 0, '1', '1', '1', '1', '2024-01-16 08:52:00', '1', '2024-01-16 08:52:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2548, '订单更新', 'trade:order:update', 3, 2, 2076, '', '', '', '', 0, '1', '1', '1', '1', '2024-01-16 08:52:21', '1', '2024-01-16 08:52:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2549, '支付&退款案例', '', 2, 1, 2161, 'order', 'fa:paypal', 'pay/demo/order/index', '', 0, '1', '1', '1', '1', '2024-01-18 23:45:00', '1', '2024-01-18 23:47:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2550, '转账案例', '', 2, 2, 2161, 'transfer', 'fa:transgender-alt', 'pay/demo/transfer/index', '', 0, '1', '1', '1', '1', '2024-01-18 23:51:16', '1', '2024-01-18 23:51:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2551, '钱包管理', '', 1, 4, 1117, 'wallet', 'ep:wallet', '', '', 0, '1', '1', '1', '', '2023-12-29 02:32:54', '1', '2024-02-29 08:58:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2552, '充值套餐', '', 2, 2, 2551, 'wallet-recharge-package', 'fa:leaf', 'pay/wallet/rechargePackage/index', 'WalletRechargePackage', 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2553, '钱包充值套餐查询', 'pay:wallet-recharge-package:query', 3, 1, 2552, '', '', '', NULL, 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2554, '钱包充值套餐创建', 'pay:wallet-recharge-package:create', 3, 2, 2552, '', '', '', NULL, 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2555, '钱包充值套餐更新', 'pay:wallet-recharge-package:update', 3, 3, 2552, '', '', '', NULL, 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2556, '钱包充值套餐删除', 'pay:wallet-recharge-package:delete', 3, 4, 2552, '', '', '', NULL, 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2557, '钱包余额', '', 2, 1, 2551, 'wallet-balance', 'fa:leaf', 'pay/wallet/balance/index', 'WalletBalance', 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2558, '钱包余额查询', 'pay:wallet:query', 3, 1, 2557, '', '', '', NULL, 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2559, '转账订单', '', 2, 3, 1117, 'transfer', 'ep:credit-card', 'pay/transfer/index', 'PayTransfer', 0, '1', '1', '1', '', '2023-12-29 02:32:54', '', '2023-12-29 02:32:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2560, '数据统计', '', 1, 200, 2397, 'statistics', 'ep:data-line', '', '', 0, '1', '1', '1', '1', '2024-01-26 22:50:35', '1', '2024-02-24 20:10:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2561, '排行榜', 'crm:statistics-rank:query', 2, 1, 2560, 'ranking', 'fa:area-chart', 'crm/statistics/rank/index', 'CrmStatisticsRank', 0, '1', '1', '1', '1', '2024-01-26 22:52:09', '1', '2024-04-24 19:39:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2562, '客户导入', 'crm:customer:import', 3, 6, 2391, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-01 13:09:00', '1', '2024-02-01 13:09:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2563, 'ERP 系统', '', 1, 300, 0, '/erp', 'fa-solid:store', '', '', 0, '1', '1', '1', '1', '2024-02-04 15:37:25', '1', '2024-02-04 15:37:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2564, '产品管理', '', 1, 40, 2563, 'product', 'fa:product-hunt', '', '', 0, '1', '1', '1', '1', '2024-02-04 15:38:43', '1', '2024-02-04 15:38:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2565, '产品信息', '', 2, 0, 2564, 'product', 'fa-solid:apple-alt', 'erp/product/product/index', 'ErpProduct', 0, '1', '1', '1', '', '2024-02-04 07:52:15', '1', '2024-02-05 14:42:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2566, '产品查询', 'erp:product:query', 3, 1, 2565, '', '', '', '', 0, '1', '1', '1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:21:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2567, '产品创建', 'erp:product:create', 3, 2, 2565, '', '', '', '', 0, '1', '1', '1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:22:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2568, '产品更新', 'erp:product:update', 3, 3, 2565, '', '', '', '', 0, '1', '1', '1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:22:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2569, '产品删除', 'erp:product:delete', 3, 4, 2565, '', '', '', '', 0, '1', '1', '1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:22:22', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2570, '产品导出', 'erp:product:export', 3, 5, 2565, '', '', '', '', 0, '1', '1', '1', '', '2024-02-04 07:52:15', '1', '2024-02-04 17:22:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2571, '产品分类', '', 2, 1, 2564, 'product-category', 'fa:certificate', 'erp/product/category/index', 'ErpProductCategory', 0, '1', '1', '1', '', '2024-02-04 09:21:04', '1', '2024-02-04 17:24:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2572, '分类查询', 'erp:product-category:query', 3, 1, 2571, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2573, '分类创建', 'erp:product-category:create', 3, 2, 2571, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2574, '分类更新', 'erp:product-category:update', 3, 3, 2571, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2575, '分类删除', 'erp:product-category:delete', 3, 4, 2571, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2576, '分类导出', 'erp:product-category:export', 3, 5, 2571, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 09:21:04', '', '2024-02-04 09:21:04', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2577, '产品单位', '', 2, 2, 2564, 'unit', 'ep:opportunity', 'erp/product/unit/index', 'ErpProductUnit', 0, '1', '1', '1', '', '2024-02-04 11:54:08', '1', '2024-02-04 19:54:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2578, '单位查询', 'erp:product-unit:query', 3, 1, 2577, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2579, '单位创建', 'erp:product-unit:create', 3, 2, 2577, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2580, '单位更新', 'erp:product-unit:update', 3, 3, 2577, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2581, '单位删除', 'erp:product-unit:delete', 3, 4, 2577, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2582, '单位导出', 'erp:product-unit:export', 3, 5, 2577, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 11:54:08', '', '2024-02-04 11:54:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2583, '库存管理', '', 1, 30, 2563, 'stock', 'fa:window-restore', '', '', 0, '1', '1', '1', '1', '2024-02-05 00:29:37', '1', '2024-02-05 00:29:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2584, '仓库信息', '', 2, 0, 2583, 'warehouse', 'ep:house', 'erp/stock/warehouse/index', 'ErpWarehouse', 0, '1', '1', '1', '', '2024-02-04 17:12:09', '1', '2024-02-05 01:12:53', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2585, '仓库查询', 'erp:warehouse:query', 3, 1, 2584, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2586, '仓库创建', 'erp:warehouse:create', 3, 2, 2584, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2587, '仓库更新', 'erp:warehouse:update', 3, 3, 2584, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2588, '仓库删除', 'erp:warehouse:delete', 3, 4, 2584, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2589, '仓库导出', 'erp:warehouse:export', 3, 5, 2584, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-04 17:12:09', '', '2024-02-04 17:12:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2590, '产品库存', '', 2, 1, 2583, 'stock', 'ep:coffee', 'erp/stock/stock/index', 'ErpStock', 0, '1', '1', '1', '', '2024-02-05 06:40:50', '1', '2024-02-05 14:42:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2591, '库存查询', 'erp:stock:query', 3, 1, 2590, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 06:40:50', '', '2024-02-05 06:40:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2592, '库存导出', 'erp:stock:export', 3, 5, 2590, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 06:40:50', '', '2024-02-05 06:40:50', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2593, '出入库明细', '', 2, 2, 2583, 'record', 'fa-solid:blog', 'erp/stock/record/index', 'ErpStockRecord', 0, '1', '1', '1', '', '2024-02-05 10:27:21', '1', '2024-02-06 17:26:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2594, '库存明细查询', 'erp:stock-record:query', 3, 1, 2593, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 10:27:21', '', '2024-02-05 10:27:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2595, '库存明细导出', 'erp:stock-record:export', 3, 5, 2593, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 10:27:21', '', '2024-02-05 10:27:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2596, '其它入库', '', 2, 3, 2583, 'in', 'ep:zoom-in', 'erp/stock/in/index', 'ErpStockIn', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-07 19:06:51', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2597, '其它入库单查询', 'erp:stock-in:query', 3, 1, 2596, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2598, '其它入库单创建', 'erp:stock-in:create', 3, 2, 2596, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2599, '其它入库单更新', 'erp:stock-in:update', 3, 3, 2596, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2600, '其它入库单删除', 'erp:stock-in:delete', 3, 4, 2596, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2601, '其它入库单导出', 'erp:stock-in:export', 3, 5, 2596, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2602, '采购管理', '', 1, 10, 2563, 'purchase', 'fa:buysellads', '', '', 0, '1', '1', '1', '1', '2024-02-06 16:01:01', '1', '2024-02-06 16:01:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2603, '供应商信息', '', 2, 4, 2602, 'supplier', 'fa:superpowers', 'erp/purchase/supplier/index', 'ErpSupplier', 0, '1', '1', '1', '', '2024-02-06 08:21:55', '1', '2024-02-06 16:22:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2604, '供应商查询', 'erp:supplier:query', 3, 1, 2603, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2605, '供应商创建', 'erp:supplier:create', 3, 2, 2603, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2606, '供应商更新', 'erp:supplier:update', 3, 3, 2603, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2607, '供应商删除', 'erp:supplier:delete', 3, 4, 2603, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2608, '供应商导出', 'erp:supplier:export', 3, 5, 2603, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-06 08:21:55', '', '2024-02-06 08:21:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2609, '其它入库单审批', 'erp:stock-in:update-status', 3, 6, 2596, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-05 16:08:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2610, '其它出库', '', 2, 4, 2583, 'out', 'ep:zoom-out', 'erp/stock/out/index', 'ErpStockOut', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-07 19:06:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2611, '其它出库单查询', 'erp:stock-out:query', 3, 1, 2610, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:39', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2612, '其它出库单创建', 'erp:stock-out:create', 3, 2, 2610, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:42', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2613, '其它出库单更新', 'erp:stock-out:update', 3, 3, 2610, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2614, '其它出库单删除', 'erp:stock-out:delete', 3, 4, 2610, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2615, '其它出库单导出', 'erp:stock-out:export', 3, 5, 2610, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2616, '其它出库单审批', 'erp:stock-out:update-status', 3, 6, 2610, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 06:43:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2617, '销售管理', '', 1, 20, 2563, 'sale', 'fa:sellsy', '', '', 0, '1', '1', '1', '1', '2024-02-07 15:12:32', '1', '2024-02-07 15:12:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2618, '客户信息', '', 2, 4, 2617, 'customer', 'ep:avatar', 'erp/sale/customer/index', 'ErpCustomer', 0, '1', '1', '1', '', '2024-02-07 07:21:45', '1', '2024-02-07 15:22:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2619, '客户查询', 'erp:customer:query', 3, 1, 2618, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2620, '客户创建', 'erp:customer:create', 3, 2, 2618, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2621, '客户更新', 'erp:customer:update', 3, 3, 2618, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2622, '客户删除', 'erp:customer:delete', 3, 4, 2618, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2623, '客户导出', 'erp:customer:export', 3, 5, 2618, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-07 07:21:45', '', '2024-02-07 07:21:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2624, '库存调拨', '', 2, 5, 2583, 'move', 'ep:folder-remove', 'erp/stock/move/index', 'ErpStockMove', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-16 18:53:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2625, '库存调度单查询', 'erp:stock-move:query', 3, 1, 2624, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2626, '库存调度单创建', 'erp:stock-move:create', 3, 2, 2624, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2627, '库存调度单更新', 'erp:stock-move:update', 3, 3, 2624, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2628, '库存调度单删除', 'erp:stock-move:delete', 3, 4, 2624, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2629, '库存调度单导出', 'erp:stock-move:export', 3, 5, 2624, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2630, '库存调度单审批', 'erp:stock-move:update-status', 3, 6, 2624, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2631, '库存盘点', '', 2, 6, 2583, 'check', 'ep:circle-check-filled', 'erp/stock/check/index', 'ErpStockCheck', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-08 08:31:09', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2632, '库存盘点单查询', 'erp:stock-check:query', 3, 1, 2631, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2633, '库存盘点单创建', 'erp:stock-check:create', 3, 2, 2631, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2634, '库存盘点单更新', 'erp:stock-check:update', 3, 3, 2631, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2635, '库存盘点单删除', 'erp:stock-check:delete', 3, 4, 2631, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2636, '库存盘点单导出', 'erp:stock-check:export', 3, 5, 2631, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2637, '库存盘点单审批', 'erp:stock-check:update-status', 3, 6, 2631, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2638, '销售订单', '', 2, 1, 2617, 'order', 'fa:first-order', 'erp/sale/order/index', 'ErpSaleOrder', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-10 21:59:20', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2639, '销售订单查询', 'erp:sale-order:query', 3, 1, 2638, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2640, '销售订单创建', 'erp:sale-order:create', 3, 2, 2638, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2641, '销售订单更新', 'erp:sale-order:update', 3, 3, 2638, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2642, '销售订单删除', 'erp:sale-order:delete', 3, 4, 2638, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2643, '销售订单导出', 'erp:sale-order:export', 3, 5, 2638, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2644, '销售订单审批', 'erp:sale-order:update-status', 3, 6, 2638, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2645, '财务管理', '', 1, 50, 2563, 'finance', 'ep:money', '', '', 0, '1', '1', '1', '1', '2024-02-10 08:05:58', '1', '2024-02-10 08:06:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2646, '结算账户', '', 2, 10, 2645, 'account', 'fa:universal-access', 'erp/finance/account/index', 'ErpAccount', 0, '1', '1', '1', '', '2024-02-10 00:15:07', '1', '2024-02-14 08:24:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2647, '结算账户查询', 'erp:account:query', 3, 1, 2646, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2648, '结算账户创建', 'erp:account:create', 3, 2, 2646, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2649, '结算账户更新', 'erp:account:update', 3, 3, 2646, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2650, '结算账户删除', 'erp:account:delete', 3, 4, 2646, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2651, '结算账户导出', 'erp:account:export', 3, 5, 2646, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-10 00:15:07', '', '2024-02-10 00:15:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2652, '销售出库', '', 2, 2, 2617, 'out', 'ep:sold-out', 'erp/sale/out/index', 'ErpSaleOut', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-10 22:02:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2653, '销售出库查询', 'erp:sale-out:query', 3, 1, 2652, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2654, '销售出库创建', 'erp:sale-out:create', 3, 2, 2652, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2655, '销售出库更新', 'erp:sale-out:update', 3, 3, 2652, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2656, '销售出库删除', 'erp:sale-out:delete', 3, 4, 2652, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2657, '销售出库导出', 'erp:sale-out:export', 3, 5, 2652, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2658, '销售出库审批', 'erp:sale-out:update-status', 3, 6, 2652, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2659, '销售退货', '', 2, 3, 2617, 'return', 'fa-solid:bone', 'erp/sale/return/index', 'ErpSaleReturn', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-12 06:12:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2660, '销售退货查询', 'erp:sale-return:query', 3, 1, 2659, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2661, '销售退货创建', 'erp:sale-return:create', 3, 2, 2659, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:52', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2662, '销售退货更新', 'erp:sale-return:update', 3, 3, 2659, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:55', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2663, '销售退货删除', 'erp:sale-return:delete', 3, 4, 2659, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2664, '销售退货导出', 'erp:sale-return:export', 3, 5, 2659, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:12:59', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2665, '销售退货审批', 'erp:sale-return:update-status', 3, 6, 2659, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-07 11:13:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2666, '采购订单', '', 2, 1, 2602, 'order', 'fa-solid:border-all', 'erp/purchase/order/index', 'ErpPurchaseOrder', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-12 08:51:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2667, '采购订单查询', 'erp:purchase-order:query', 3, 1, 2666, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2668, '采购订单创建', 'erp:purchase-order:create', 3, 2, 2666, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2669, '采购订单更新', 'erp:purchase-order:update', 3, 3, 2666, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2670, '采购订单删除', 'erp:purchase-order:delete', 3, 4, 2666, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2671, '采购订单导出', 'erp:purchase-order:export', 3, 5, 2666, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2672, '采购订单审批', 'erp:purchase-order:update-status', 3, 6, 2666, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2673, '采购入库', '', 2, 2, 2602, 'in', 'fa-solid:gopuram', 'erp/purchase/in/index', 'ErpPurchaseIn', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-12 11:19:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2674, '采购入库查询', 'erp:purchase-in:query', 3, 1, 2673, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2675, '采购入库创建', 'erp:purchase-in:create', 3, 2, 2673, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2676, '采购入库更新', 'erp:purchase-in:update', 3, 3, 2673, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2677, '采购入库删除', 'erp:purchase-in:delete', 3, 4, 2673, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2678, '采购入库导出', 'erp:purchase-in:export', 3, 5, 2673, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2679, '采购入库审批', 'erp:purchase-in:update-status', 3, 6, 2673, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2680, '采购退货', '', 2, 3, 2602, 'return', 'ep:minus', 'erp/purchase/return/index', 'ErpPurchaseReturn', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-12 20:51:02', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2681, '采购退货查询', 'erp:purchase-return:query', 3, 1, 2680, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2682, '采购退货创建', 'erp:purchase-return:create', 3, 2, 2680, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2683, '采购退货更新', 'erp:purchase-return:update', 3, 3, 2680, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2684, '采购退货删除', 'erp:purchase-return:delete', 3, 4, 2680, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2685, '采购退货导出', 'erp:purchase-return:export', 3, 5, 2680, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2686, '采购退货审批', 'erp:purchase-return:update-status', 3, 6, 2680, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2687, '付款单', '', 2, 1, 2645, 'payment', 'ep:caret-right', 'erp/finance/payment/index', 'ErpFinancePayment', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-14 08:24:23', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2688, '付款单查询', 'erp:finance-payment:query', 3, 1, 2687, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2689, '付款单创建', 'erp:finance-payment:create', 3, 2, 2687, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2690, '付款单更新', 'erp:finance-payment:update', 3, 3, 2687, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2691, '付款单删除', 'erp:finance-payment:delete', 3, 4, 2687, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2692, '付款单导出', 'erp:finance-payment:export', 3, 5, 2687, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2693, '付款单审批', 'erp:finance-payment:update-status', 3, 6, 2687, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2694, '收款单', '', 2, 2, 2645, 'receipt', 'ep:expand', 'erp/finance/receipt/index', 'ErpFinanceReceipt', 0, '1', '1', '1', '', '2024-02-05 16:08:56', '1', '2024-02-15 19:35:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2695, '收款单查询', 'erp:finance-receipt:query', 3, 1, 2694, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2696, '收款单创建', 'erp:finance-receipt:create', 3, 2, 2694, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:54', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2697, '收款单更新', 'erp:finance-receipt:update', 3, 3, 2694, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:44:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2698, '收款单删除', 'erp:finance-receipt:delete', 3, 4, 2694, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:00', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2699, '收款单导出', 'erp:finance-receipt:export', 3, 5, 2694, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2700, '收款单审批', 'erp:finance-receipt:update-status', 3, 6, 2694, '', '', '', NULL, 0, '1', '1', '1', '', '2024-02-05 16:08:56', '', '2024-02-12 00:45:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2701, '待办事项', '', 2, 0, 2397, 'backlog', 'fa-solid:tasks', 'crm/backlog/index', 'CrmBacklog', 0, '1', '1', '1', '1', '2024-02-17 17:17:11', '1', '2024-02-17 17:17:11', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2702, 'ERP 首页', 'erp:statistics:query', 2, 0, 2563, 'home', 'ep:home-filled', 'erp/home/index.vue', 'ErpHome', 0, '1', '1', '1', '1', '2024-02-18 16:49:40', '1', '2024-02-26 21:12:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2703, '商机状态配置', '', 2, 4, 2524, 'business-status', 'fa-solid:charging-station', 'crm/business/status/index', 'CrmBusinessStatus', 0, '1', '1', '1', '1', '2024-02-21 20:15:17', '1', '2024-02-21 20:15:17', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2704, '商机状态查询', 'crm:business-status:query', 3, 1, 2703, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-21 20:35:36', '1', '2024-02-21 20:36:06', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2705, '商机状态创建', 'crm:business-status:create', 3, 2, 2703, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-21 20:35:57', '1', '2024-02-21 20:35:57', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2706, '商机状态更新', 'crm:business-status:update', 3, 3, 2703, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-21 20:36:21', '1', '2024-02-21 20:36:21', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2707, '商机状态删除', 'crm:business-status:delete', 3, 4, 2703, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-21 20:36:36', '1', '2024-02-21 20:36:36', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2708, '合同配置', '', 2, 5, 2524, 'contract-config', 'ep:connection', 'crm/contract/config/index', 'CrmContractConfig', 0, '1', '1', '1', '1', '2024-02-24 16:44:40', '1', '2024-02-24 16:44:48', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2709, '客户公海配置查询', 'crm:customer-pool-config:query', 3, 2, 2516, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-24 16:45:19', '1', '2024-02-24 16:45:28', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2710, '合同配置更新', 'crm:contract-config:update', 3, 1, 2708, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-24 16:45:56', '1', '2024-02-24 16:45:56', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2711, '合同配置查询', 'crm:contract-config:query', 3, 2, 2708, '', '', '', '', 0, '1', '1', '1', '1', '2024-02-24 16:46:16', '1', '2024-02-24 16:46:16', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2712, '客户分析', 'crm:statistics-customer:query', 2, 0, 2560, 'customer', 'ep:avatar', 'views/crm/statistics/customer/index.vue', 'CrmStatisticsCustomer', 0, '1', '1', '1', '1', '2024-03-09 16:43:56', '1', '2024-04-24 19:42:52', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2713, '抄送我的', 'bpm:process-instance-cc:query', 2, 30, 1200, 'copy', 'ep:copy-document', 'bpm/task/copy/index', 'BpmProcessInstanceCopy', 0, '1', '1', '1', '1', '2024-03-17 21:50:23', '1', '2024-04-24 19:55:12', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2714, '流程分类', '', 2, 3, 1186, 'category', 'fa:object-ungroup', 'bpm/category/index', 'BpmCategory', 0, '1', '1', '1', '', '2024-03-08 02:00:51', '1', '2024-03-21 23:51:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2715, '分类查询', 'bpm:category:query', 3, 1, 2714, '', '', '', '', 0, '1', '1', '1', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2716, '分类创建', 'bpm:category:create', 3, 2, 2714, '', '', '', '', 0, '1', '1', '1', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:31', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2717, '分类更新', 'bpm:category:update', 3, 3, 2714, '', '', '', '', 0, '1', '1', '1', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2718, '分类删除', 'bpm:category:delete', 3, 4, 2714, '', '', '', '', 0, '1', '1', '1', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:41', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2720, '发起流程', '', 2, 0, 1200, 'create', 'fa-solid:grin-stars', 'bpm/processInstance/create/index', 'BpmProcessInstanceCreate', 0, '1', '0', '1', '1', '2024-03-19 19:46:05', '1', '2024-03-23 19:03:42', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2721, '流程实例', '', 2, 10, 1186, 'process-instance/manager', 'fa:square', 'bpm/processInstance/manager/index', 'BpmProcessInstanceManager', 0, '1', '1', '1', '1', '2024-03-21 23:57:30', '1', '2024-03-21 23:57:30', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2722, '流程实例的查询(管理员)', 'bpm:process-instance:manager-query', 3, 1, 2721, '', '', '', '', 0, '1', '1', '1', '1', '2024-03-22 08:18:27', '1', '2024-03-22 08:19:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2723, '流程实例的取消(管理员)', 'bpm:process-instance:cancel-by-admin', 3, 2, 2721, '', '', '', '', 0, '1', '1', '1', '1', '2024-03-22 08:19:25', '1', '2024-03-22 08:19:25', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2724, '流程任务', '', 2, 11, 1186, 'process-tasnk', 'ep:collection-tag', 'bpm/task/manager/index', 'BpmManagerTask', 0, '1', '1', '1', '1', '2024-03-22 08:43:22', '1', '2024-03-22 08:43:27', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2725, '流程任务的查询(管理员)', 'bpm:task:mananger-query', 3, 1, 2724, '', '', '', '', 0, '1', '1', '1', '1', '2024-03-22 08:43:49', '1', '2024-03-22 08:43:49', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2726, '流程监听器', '', 2, 5, 1186, 'process-listener', 'fa:assistive-listening-systems', 'bpm/processListener/index', 'BpmProcessListener', 0, '1', '1', '1', '', '2024-03-09 16:05:34', '1', '2024-03-23 13:13:38', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2727, '流程监听器查询', 'bpm:process-listener:query', 3, 1, 2726, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2728, '流程监听器创建', 'bpm:process-listener:create', 3, 2, 2726, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2729, '流程监听器更新', 'bpm:process-listener:update', 3, 3, 2726, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2730, '流程监听器删除', 'bpm:process-listener:delete', 3, 4, 2726, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2731, '流程表达式', '', 2, 6, 1186, 'process-expression', 'fa:wpexplorer', 'bpm/processExpression/index', 'BpmProcessExpression', 0, '1', '1', '1', '', '2024-03-09 22:35:08', '1', '2024-03-23 19:43:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2732, '流程表达式查询', 'bpm:process-expression:query', 3, 1, 2731, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2733, '流程表达式创建', 'bpm:process-expression:create', 3, 2, 2731, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2734, '流程表达式更新', 'bpm:process-expression:update', 3, 3, 2731, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2735, '流程表达式删除', 'bpm:process-expression:delete', 3, 4, 2731, '', '', '', NULL, 0, '1', '1', '1', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2736, '员工业绩', 'crm:statistics-performance:query', 2, 3, 2560, 'performance', 'ep:dish-dot', 'crm/statistics/performance/index', 'CrmStatisticsPerformance', 0, '1', '1', '1', '1', '2024-04-05 13:49:20', '1', '2024-04-24 19:42:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2737, '客户画像', 'crm:statistics-portrait:query', 2, 4, 2560, 'portrait', 'ep:picture', 'crm/statistics/portrait/index', 'CrmStatisticsPortrait', 0, '1', '1', '1', '1', '2024-04-05 13:57:40', '1', '2024-04-24 19:42:24', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2738, '销售漏斗', 'crm:statistics-funnel:query', 2, 5, 2560, 'funnel', 'ep:grape', 'crm/statistics/funnel/index', 'CrmStatisticsFunnel', 0, '1', '1', '1', '1', '2024-04-13 10:53:26', '1', '2024-04-24 19:39:33', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2739, '消息中心', '', 1, 7, 1, 'messages', 'ep:chat-dot-round', '', '', 0, '1', '1', '1', '1', '2024-04-22 23:54:30', '1', '2024-04-23 09:36:35', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2740, '监控中心', '', 1, 10, 2, 'monitors', 'ep:monitor', '', '', 0, '1', '1', '1', '1', '2024-04-23 00:04:44', '1', '2024-04-23 00:04:44', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2741, '领取公海客户', 'crm:customer:receive', 3, 1, 2546, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:47:45', '1', '2024-04-24 19:47:45', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2742, '分配公海客户', 'crm:customer:distribute', 3, 2, 2546, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:48:05', '1', '2024-04-24 19:48:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2743, '商品统计查询', 'statistics:product:query', 3, 1, 2545, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:50:05', '1', '2024-04-24 19:50:05', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2744, '商品统计导出', 'statistics:product:export', 3, 2, 2545, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:50:26', '1', '2024-04-24 19:50:26', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2745, '支付渠道查询', 'pay:channel:query', 3, 10, 1126, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:53:01', '1', '2024-04-24 19:53:01', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2746, '支付渠道创建', 'pay:channel:create', 3, 11, 1126, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:53:18', '1', '2024-04-24 19:53:18', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2747, '支付渠道更新', 'pay:channel:update', 3, 12, 1126, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:53:32', '1', '2024-04-24 19:53:58', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2748, '支付渠道删除', 'pay:channel:delete', 3, 13, 1126, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:54:34', '1', '2024-04-24 19:54:34', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2749, '商品收藏查询', 'product:favorite:query', 3, 10, 2014, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:55:47', '1', '2024-04-24 19:55:47', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2750, '商品浏览查询', 'product:browse-history:query', 3, 20, 2014, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:57:43', '1', '2024-04-24 19:57:43', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2751, '售后同意', 'trade:after-sale:agree', 3, 2, 2073, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:58:40', '1', '2024-04-24 19:58:40', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2752, '售后不同意', 'trade:after-sale:disagree', 3, 3, 2073, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 19:59:03', '1', '2024-04-24 19:59:03', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2753, '售后确认退货', 'trade:after-sale:receive', 3, 4, 2073, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 20:00:07', '1', '2024-04-24 20:00:07', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2754, '售后确认退款', 'trade:after-sale:refund', 3, 5, 2073, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 20:00:24', '1', '2024-04-24 20:00:24', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2755, '删除项目', 'report:go-view-project:delete', 3, 2, 2153, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 20:01:37', '1', '2024-04-24 20:01:37', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2756, '会员等级记录查询', 'member:level-record:query', 3, 10, 2325, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 20:02:32', '1', '2024-04-24 20:02:32', '0'); +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2757, '会员经验记录查询', 'member:experience-record:query', 3, 11, 2325, '', '', '', '', 0, '1', '1', '1', '1', '2024-04-24 20:02:51', '1', '2024-04-24 20:02:51', '0'); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_menu_seq; +CREATE SEQUENCE system_menu_seq + START 2758; + +-- ---------------------------- +-- Table structure for system_notice +-- ---------------------------- +DROP TABLE IF EXISTS system_notice; +CREATE TABLE system_notice +( + id int8 NOT NULL, + title varchar(50) NOT NULL, + content text NOT NULL, + type int2 NOT NULL, + status int2 NOT NULL DEFAULT 0, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_notice + ADD CONSTRAINT pk_system_notice PRIMARY KEY (id); + +COMMENT ON COLUMN system_notice.id IS '公告ID'; +COMMENT ON COLUMN system_notice.title IS '公告标题'; +COMMENT ON COLUMN system_notice.content IS '公告内容'; +COMMENT ON COLUMN system_notice.type IS '公告类型(1通知 2公告)'; +COMMENT ON COLUMN system_notice.status IS '公告状态(0正常 1关闭)'; +COMMENT ON COLUMN system_notice.creator IS '创建者'; +COMMENT ON COLUMN system_notice.create_time IS '创建时间'; +COMMENT ON COLUMN system_notice.updater IS '更新者'; +COMMENT ON COLUMN system_notice.update_time IS '更新时间'; +COMMENT ON COLUMN system_notice.deleted IS '是否删除'; +COMMENT ON COLUMN system_notice.tenant_id IS '租户编号'; +COMMENT ON TABLE system_notice IS '通知公告表'; + +-- ---------------------------- +-- Records of system_notice +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '芋道的公众', '

    新版本内容133

    ', 1, 0, 'admin', '2021-01-05 17:03:48', '1', '2022-05-04 21:00:20', '0', 1); +INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '维护通知:2018-07-01 系统凌晨维护', '

    11112222

    ', 2, 1, 'admin', '2021-01-05 17:03:48', '1', '2023-12-02 20:07:26', '0', 1); +INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, '我是测试标题', '

    哈哈哈哈123

    ', 1, 0, '110', '2022-02-22 01:01:25', '110', '2022-02-22 01:01:46', '0', 121); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_notice_seq; +CREATE SEQUENCE system_notice_seq + START 5; + +-- ---------------------------- +-- Table structure for system_notify_message +-- ---------------------------- +DROP TABLE IF EXISTS system_notify_message; +CREATE TABLE system_notify_message +( + id int8 NOT NULL, + user_id int8 NOT NULL, + user_type int2 NOT NULL, + template_id int8 NOT NULL, + template_code varchar(64) NOT NULL, + template_nickname varchar(63) NOT NULL, + template_content varchar(1024) NOT NULL, + template_type int4 NOT NULL, + template_params varchar(255) NOT NULL, + read_status bool NOT NULL, + read_time timestamp NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_notify_message + ADD CONSTRAINT pk_system_notify_message PRIMARY KEY (id); + +COMMENT ON COLUMN system_notify_message.id IS '用户ID'; +COMMENT ON COLUMN system_notify_message.user_id IS '用户id'; +COMMENT ON COLUMN system_notify_message.user_type IS '用户类型'; +COMMENT ON COLUMN system_notify_message.template_id IS '模版编号'; +COMMENT ON COLUMN system_notify_message.template_code IS '模板编码'; +COMMENT ON COLUMN system_notify_message.template_nickname IS '模版发送人名称'; +COMMENT ON COLUMN system_notify_message.template_content IS '模版内容'; +COMMENT ON COLUMN system_notify_message.template_type IS '模版类型'; +COMMENT ON COLUMN system_notify_message.template_params IS '模版参数'; +COMMENT ON COLUMN system_notify_message.read_status IS '是否已读'; +COMMENT ON COLUMN system_notify_message.read_time IS '阅读时间'; +COMMENT ON COLUMN system_notify_message.creator IS '创建者'; +COMMENT ON COLUMN system_notify_message.create_time IS '创建时间'; +COMMENT ON COLUMN system_notify_message.updater IS '更新者'; +COMMENT ON COLUMN system_notify_message.update_time IS '更新时间'; +COMMENT ON COLUMN system_notify_message.deleted IS '是否删除'; +COMMENT ON COLUMN system_notify_message.tenant_id IS '租户编号'; +COMMENT ON TABLE system_notify_message IS '站内信消息表'; + +-- ---------------------------- +-- Records of system_notify_message +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 1, 2, 1, 'test', '123', '我是 1,我开始 2 了', 1, '{"name":"1","what":"2"}', '1', '2023-02-10 00:47:04', '1', '2023-01-28 11:44:08', '1', '2023-02-10 00:47:04', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, 1, 2, 1, 'test', '123', '我是 1,我开始 2 了', 1, '{"name":"1","what":"2"}', '1', '2023-02-10 00:47:04', '1', '2023-01-28 11:45:04', '1', '2023-02-10 00:47:04', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, 103, 2, 2, 'register', '系统消息', '你好,欢迎 哈哈 加入大家庭!', 2, '{"name":"哈哈"}', '0', NULL, '1', '2023-01-28 21:02:20', '1', '2023-01-28 21:02:20', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, 1, 2, 1, 'test', '123', '我是 芋艿,我开始 写代码 了', 1, '{"name":"芋艿","what":"写代码"}', '1', '2023-02-10 00:47:04', '1', '2023-01-28 22:21:42', '1', '2023-02-10 00:47:04', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, 1, 2, 1, 'test', '123', '我是 芋艿,我开始 写代码 了', 1, '{"name":"芋艿","what":"写代码"}', '1', '2023-01-29 10:52:06', '1', '2023-01-28 22:22:07', '1', '2023-01-29 10:52:06', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (7, 1, 2, 1, 'test', '123', '我是 2,我开始 3 了', 1, '{"name":"2","what":"3"}', '1', '2023-01-29 10:52:06', '1', '2023-01-28 23:45:21', '1', '2023-01-29 10:52:06', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (8, 1, 2, 2, 'register', '系统消息', '你好,欢迎 123 加入大家庭!', 2, '{"name":"123"}', '1', '2023-01-29 10:52:06', '1', '2023-01-28 23:50:21', '1', '2023-01-29 10:52:06', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, 247, 1, 4, 'brokerage_withdraw_audit_approve', 'system', '您在2023-09-28 08:35:46提现¥0.09元的申请已通过审核', 2, '{"reason":null,"createTime":"2023-09-28 08:35:46","price":"0.09"}', '0', NULL, '1', '2023-09-28 16:36:22', '1', '2023-09-28 16:36:22', '0', 1); +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (10, 247, 1, 4, 'brokerage_withdraw_audit_approve', 'system', '您在2023-09-30 20:59:40提现¥1.00元的申请已通过审核', 2, '{"reason":null,"createTime":"2023-09-30 20:59:40","price":"1.00"}', '0', NULL, '1', '2023-10-03 12:11:34', '1', '2023-10-03 12:11:34', '0', 1); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_notify_message_seq; +CREATE SEQUENCE system_notify_message_seq + START 11; + +-- ---------------------------- +-- Table structure for system_notify_template +-- ---------------------------- +DROP TABLE IF EXISTS system_notify_template; +CREATE TABLE system_notify_template +( + id int8 NOT NULL, + name varchar(63) NOT NULL, + code varchar(64) NOT NULL, + nickname varchar(255) NOT NULL, + content varchar(1024) NOT NULL, + type int2 NOT NULL, + params varchar(255) NULL DEFAULT NULL, + status int2 NOT NULL, + remark varchar(255) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_notify_template + ADD CONSTRAINT pk_system_notify_template PRIMARY KEY (id); + +COMMENT ON COLUMN system_notify_template.id IS '主键'; +COMMENT ON COLUMN system_notify_template.name IS '模板名称'; +COMMENT ON COLUMN system_notify_template.code IS '模版编码'; +COMMENT ON COLUMN system_notify_template.nickname IS '发送人名称'; +COMMENT ON COLUMN system_notify_template.content IS '模版内容'; +COMMENT ON COLUMN system_notify_template.type IS '类型'; +COMMENT ON COLUMN system_notify_template.params IS '参数数组'; +COMMENT ON COLUMN system_notify_template.status IS '状态'; +COMMENT ON COLUMN system_notify_template.remark IS '备注'; +COMMENT ON COLUMN system_notify_template.creator IS '创建者'; +COMMENT ON COLUMN system_notify_template.create_time IS '创建时间'; +COMMENT ON COLUMN system_notify_template.updater IS '更新者'; +COMMENT ON COLUMN system_notify_template.update_time IS '更新时间'; +COMMENT ON COLUMN system_notify_template.deleted IS '是否删除'; +COMMENT ON TABLE system_notify_template IS '站内信模板表'; + +DROP SEQUENCE IF EXISTS system_notify_template_seq; +CREATE SEQUENCE system_notify_template_seq + START 1; + +-- ---------------------------- +-- Table structure for system_oauth2_access_token +-- ---------------------------- +DROP TABLE IF EXISTS system_oauth2_access_token; +CREATE TABLE system_oauth2_access_token +( + id int8 NOT NULL, + user_id int8 NOT NULL, + user_type int2 NOT NULL, + user_info varchar(512) NOT NULL, + access_token varchar(255) NOT NULL, + refresh_token varchar(32) NOT NULL, + client_id varchar(255) NOT NULL, + scopes varchar(255) NULL DEFAULT NULL, + expires_time timestamp NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_oauth2_access_token + ADD CONSTRAINT pk_system_oauth2_access_token PRIMARY KEY (id); + +CREATE INDEX idx_system_oauth2_access_token_01 ON system_oauth2_access_token (access_token); +CREATE INDEX idx_system_oauth2_access_token_02 ON system_oauth2_access_token (refresh_token); + +COMMENT ON COLUMN system_oauth2_access_token.id IS '编号'; +COMMENT ON COLUMN system_oauth2_access_token.user_id IS '用户编号'; +COMMENT ON COLUMN system_oauth2_access_token.user_type IS '用户类型'; +COMMENT ON COLUMN system_oauth2_access_token.user_info IS '用户信息'; +COMMENT ON COLUMN system_oauth2_access_token.access_token IS '访问令牌'; +COMMENT ON COLUMN system_oauth2_access_token.refresh_token IS '刷新令牌'; +COMMENT ON COLUMN system_oauth2_access_token.client_id IS '客户端编号'; +COMMENT ON COLUMN system_oauth2_access_token.scopes IS '授权范围'; +COMMENT ON COLUMN system_oauth2_access_token.expires_time IS '过期时间'; +COMMENT ON COLUMN system_oauth2_access_token.creator IS '创建者'; +COMMENT ON COLUMN system_oauth2_access_token.create_time IS '创建时间'; +COMMENT ON COLUMN system_oauth2_access_token.updater IS '更新者'; +COMMENT ON COLUMN system_oauth2_access_token.update_time IS '更新时间'; +COMMENT ON COLUMN system_oauth2_access_token.deleted IS '是否删除'; +COMMENT ON COLUMN system_oauth2_access_token.tenant_id IS '租户编号'; +COMMENT ON TABLE system_oauth2_access_token IS 'OAuth2 访问令牌'; + +DROP SEQUENCE IF EXISTS system_oauth2_access_token_seq; +CREATE SEQUENCE system_oauth2_access_token_seq + START 1; + +-- ---------------------------- +-- Table structure for system_oauth2_approve +-- ---------------------------- +DROP TABLE IF EXISTS system_oauth2_approve; +CREATE TABLE system_oauth2_approve +( + id int8 NOT NULL, + user_id int8 NOT NULL, + user_type int2 NOT NULL, + client_id varchar(255) NOT NULL, + scope varchar(255) NOT NULL DEFAULT '', + approved bool NOT NULL DEFAULT '0', + expires_time timestamp NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_oauth2_approve + ADD CONSTRAINT pk_system_oauth2_approve PRIMARY KEY (id); + +COMMENT ON COLUMN system_oauth2_approve.id IS '编号'; +COMMENT ON COLUMN system_oauth2_approve.user_id IS '用户编号'; +COMMENT ON COLUMN system_oauth2_approve.user_type IS '用户类型'; +COMMENT ON COLUMN system_oauth2_approve.client_id IS '客户端编号'; +COMMENT ON COLUMN system_oauth2_approve.scope IS '授权范围'; +COMMENT ON COLUMN system_oauth2_approve.approved IS '是否接受'; +COMMENT ON COLUMN system_oauth2_approve.expires_time IS '过期时间'; +COMMENT ON COLUMN system_oauth2_approve.creator IS '创建者'; +COMMENT ON COLUMN system_oauth2_approve.create_time IS '创建时间'; +COMMENT ON COLUMN system_oauth2_approve.updater IS '更新者'; +COMMENT ON COLUMN system_oauth2_approve.update_time IS '更新时间'; +COMMENT ON COLUMN system_oauth2_approve.deleted IS '是否删除'; +COMMENT ON COLUMN system_oauth2_approve.tenant_id IS '租户编号'; +COMMENT ON TABLE system_oauth2_approve IS 'OAuth2 批准表'; + +DROP SEQUENCE IF EXISTS system_oauth2_approve_seq; +CREATE SEQUENCE system_oauth2_approve_seq + START 1; + +-- ---------------------------- +-- Table structure for system_oauth2_client +-- ---------------------------- +DROP TABLE IF EXISTS system_oauth2_client; +CREATE TABLE system_oauth2_client +( + id int8 NOT NULL, + client_id varchar(255) NOT NULL, + secret varchar(255) NOT NULL, + name varchar(255) NOT NULL, + logo varchar(255) NOT NULL, + description varchar(255) NULL DEFAULT NULL, + status int2 NOT NULL, + access_token_validity_seconds int4 NOT NULL, + refresh_token_validity_seconds int4 NOT NULL, + redirect_uris varchar(255) NOT NULL, + authorized_grant_types varchar(255) NOT NULL, + scopes varchar(255) NULL DEFAULT NULL, + auto_approve_scopes varchar(255) NULL DEFAULT NULL, + authorities varchar(255) NULL DEFAULT NULL, + resource_ids varchar(255) NULL DEFAULT NULL, + additional_information varchar(4096) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_oauth2_client + ADD CONSTRAINT pk_system_oauth2_client PRIMARY KEY (id); + +COMMENT ON COLUMN system_oauth2_client.id IS '编号'; +COMMENT ON COLUMN system_oauth2_client.client_id IS '客户端编号'; +COMMENT ON COLUMN system_oauth2_client.secret IS '客户端密钥'; +COMMENT ON COLUMN system_oauth2_client.name IS '应用名'; +COMMENT ON COLUMN system_oauth2_client.logo IS '应用图标'; +COMMENT ON COLUMN system_oauth2_client.description IS '应用描述'; +COMMENT ON COLUMN system_oauth2_client.status IS '状态'; +COMMENT ON COLUMN system_oauth2_client.access_token_validity_seconds IS '访问令牌的有效期'; +COMMENT ON COLUMN system_oauth2_client.refresh_token_validity_seconds IS '刷新令牌的有效期'; +COMMENT ON COLUMN system_oauth2_client.redirect_uris IS '可重定向的 URI 地址'; +COMMENT ON COLUMN system_oauth2_client.authorized_grant_types IS '授权类型'; +COMMENT ON COLUMN system_oauth2_client.scopes IS '授权范围'; +COMMENT ON COLUMN system_oauth2_client.auto_approve_scopes IS '自动通过的授权范围'; +COMMENT ON COLUMN system_oauth2_client.authorities IS '权限'; +COMMENT ON COLUMN system_oauth2_client.resource_ids IS '资源'; +COMMENT ON COLUMN system_oauth2_client.additional_information IS '附加信息'; +COMMENT ON COLUMN system_oauth2_client.creator IS '创建者'; +COMMENT ON COLUMN system_oauth2_client.create_time IS '创建时间'; +COMMENT ON COLUMN system_oauth2_client.updater IS '更新者'; +COMMENT ON COLUMN system_oauth2_client.update_time IS '更新时间'; +COMMENT ON COLUMN system_oauth2_client.deleted IS '是否删除'; +COMMENT ON TABLE system_oauth2_client IS 'OAuth2 客户端表'; + +-- ---------------------------- +-- Records of system_oauth2_client +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (1, 'default', 'admin123', '芋道源码', 'http://test.win.iocoder.cn/a5e2e244368878a366b516805a4aabf1.png', '我是描述', 0, 1800, 2592000, '["https://www.iocoder.cn","https://doc.iocoder.cn"]', '["password","authorization_code","implicit","refresh_token"]', '["user.read","user.write"]', '[]', '["user.read","user.write"]', '[]', '{}', '1', '2022-05-11 21:47:12', '1', '2024-02-22 16:31:52', '0'); +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (40, 'test', 'test2', 'biubiu', 'http://test.win.iocoder.cn/277a899d573723f1fcdfb57340f00379.png', '啦啦啦啦', 0, 1800, 43200, '["https://www.iocoder.cn"]', '["password","authorization_code","implicit"]', '["user_info","projects"]', '["user_info"]', '[]', '[]', '{}', '1', '2022-05-12 00:28:20', '1', '2023-12-02 21:01:01', '0'); +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (41, 'win-sso-demo-by-code', 'test', '基于授权码模式,如何实现 SSO 单点登录?', 'http://test.win.iocoder.cn/fe4ed36596adad5120036ef61a6d0153654544d44af8dd4ad3ffe8f759933d6f.png', NULL, 0, 1800, 43200, '["http://127.0.0.1:18080"]', '["authorization_code","refresh_token"]', '["user.read","user.write"]', '[]', '[]', '[]', NULL, '1', '2022-09-29 13:28:31', '1', '2022-09-29 13:28:31', '0'); +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (42, 'win-sso-demo-by-password', 'test', '基于密码模式,如何实现 SSO 单点登录?', 'http://test.win.iocoder.cn/604bdc695e13b3b22745be704d1f2aa8ee05c5f26f9fead6d1ca49005afbc857.jpeg', NULL, 0, 1800, 43200, '["http://127.0.0.1:18080"]', '["password","refresh_token"]', '["user.read","user.write"]', '[]', '[]', '[]', NULL, '1', '2022-10-04 17:40:16', '1', '2022-10-04 20:31:21', '0'); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_oauth2_client_seq; +CREATE SEQUENCE system_oauth2_client_seq + START 43; + +-- ---------------------------- +-- Table structure for system_oauth2_code +-- ---------------------------- +DROP TABLE IF EXISTS system_oauth2_code; +CREATE TABLE system_oauth2_code +( + id int8 NOT NULL, + user_id int8 NOT NULL, + user_type int2 NOT NULL, + code varchar(32) NOT NULL, + client_id varchar(255) NOT NULL, + scopes varchar(255) NULL DEFAULT '', + expires_time timestamp NOT NULL, + redirect_uri varchar(255) NULL DEFAULT NULL, + state varchar(255) NOT NULL DEFAULT '', + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_oauth2_code + ADD CONSTRAINT pk_system_oauth2_code PRIMARY KEY (id); + +COMMENT ON COLUMN system_oauth2_code.id IS '编号'; +COMMENT ON COLUMN system_oauth2_code.user_id IS '用户编号'; +COMMENT ON COLUMN system_oauth2_code.user_type IS '用户类型'; +COMMENT ON COLUMN system_oauth2_code.code IS '授权码'; +COMMENT ON COLUMN system_oauth2_code.client_id IS '客户端编号'; +COMMENT ON COLUMN system_oauth2_code.scopes IS '授权范围'; +COMMENT ON COLUMN system_oauth2_code.expires_time IS '过期时间'; +COMMENT ON COLUMN system_oauth2_code.redirect_uri IS '可重定向的 URI 地址'; +COMMENT ON COLUMN system_oauth2_code.state IS '状态'; +COMMENT ON COLUMN system_oauth2_code.creator IS '创建者'; +COMMENT ON COLUMN system_oauth2_code.create_time IS '创建时间'; +COMMENT ON COLUMN system_oauth2_code.updater IS '更新者'; +COMMENT ON COLUMN system_oauth2_code.update_time IS '更新时间'; +COMMENT ON COLUMN system_oauth2_code.deleted IS '是否删除'; +COMMENT ON COLUMN system_oauth2_code.tenant_id IS '租户编号'; +COMMENT ON TABLE system_oauth2_code IS 'OAuth2 授权码表'; + +DROP SEQUENCE IF EXISTS system_oauth2_code_seq; +CREATE SEQUENCE system_oauth2_code_seq + START 1; + +-- ---------------------------- +-- Table structure for system_oauth2_refresh_token +-- ---------------------------- +DROP TABLE IF EXISTS system_oauth2_refresh_token; +CREATE TABLE system_oauth2_refresh_token +( + id int8 NOT NULL, + user_id int8 NOT NULL, + refresh_token varchar(32) NOT NULL, + user_type int2 NOT NULL, + client_id varchar(255) NOT NULL, + scopes varchar(255) NULL DEFAULT NULL, + expires_time timestamp NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_oauth2_refresh_token + ADD CONSTRAINT pk_system_oauth2_refresh_token PRIMARY KEY (id); + +COMMENT ON COLUMN system_oauth2_refresh_token.id IS '编号'; +COMMENT ON COLUMN system_oauth2_refresh_token.user_id IS '用户编号'; +COMMENT ON COLUMN system_oauth2_refresh_token.refresh_token IS '刷新令牌'; +COMMENT ON COLUMN system_oauth2_refresh_token.user_type IS '用户类型'; +COMMENT ON COLUMN system_oauth2_refresh_token.client_id IS '客户端编号'; +COMMENT ON COLUMN system_oauth2_refresh_token.scopes IS '授权范围'; +COMMENT ON COLUMN system_oauth2_refresh_token.expires_time IS '过期时间'; +COMMENT ON COLUMN system_oauth2_refresh_token.creator IS '创建者'; +COMMENT ON COLUMN system_oauth2_refresh_token.create_time IS '创建时间'; +COMMENT ON COLUMN system_oauth2_refresh_token.updater IS '更新者'; +COMMENT ON COLUMN system_oauth2_refresh_token.update_time IS '更新时间'; +COMMENT ON COLUMN system_oauth2_refresh_token.deleted IS '是否删除'; +COMMENT ON COLUMN system_oauth2_refresh_token.tenant_id IS '租户编号'; +COMMENT ON TABLE system_oauth2_refresh_token IS 'OAuth2 刷新令牌'; + +DROP SEQUENCE IF EXISTS system_oauth2_refresh_token_seq; +CREATE SEQUENCE system_oauth2_refresh_token_seq + START 1; + +-- ---------------------------- +-- Table structure for system_operate_log +-- ---------------------------- +DROP TABLE IF EXISTS system_operate_log; +CREATE TABLE system_operate_log +( + id int8 NOT NULL, + trace_id varchar(64) NOT NULL DEFAULT '', + user_id int8 NOT NULL, + user_type int2 NOT NULL DEFAULT 0, + type varchar(50) NOT NULL, + sub_type varchar(50) NOT NULL, + biz_id int8 NOT NULL, + action varchar(2000) NOT NULL DEFAULT '', + extra varchar(2000) NOT NULL DEFAULT '', + request_method varchar(16) NULL DEFAULT '', + request_url varchar(255) NULL DEFAULT '', + user_ip varchar(50) NULL DEFAULT NULL, + user_agent varchar(200) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_operate_log + ADD CONSTRAINT pk_system_operate_log PRIMARY KEY (id); + +COMMENT ON COLUMN system_operate_log.id IS '日志主键'; +COMMENT ON COLUMN system_operate_log.trace_id IS '链路追踪编号'; +COMMENT ON COLUMN system_operate_log.user_id IS '用户编号'; +COMMENT ON COLUMN system_operate_log.user_type IS '用户类型'; +COMMENT ON COLUMN system_operate_log.type IS '操作模块类型'; +COMMENT ON COLUMN system_operate_log.sub_type IS '操作名'; +COMMENT ON COLUMN system_operate_log.biz_id IS '操作数据模块编号'; +COMMENT ON COLUMN system_operate_log.action IS '操作内容'; +COMMENT ON COLUMN system_operate_log.extra IS '拓展字段'; +COMMENT ON COLUMN system_operate_log.request_method IS '请求方法名'; +COMMENT ON COLUMN system_operate_log.request_url IS '请求地址'; +COMMENT ON COLUMN system_operate_log.user_ip IS '用户 IP'; +COMMENT ON COLUMN system_operate_log.user_agent IS '浏览器 UA'; +COMMENT ON COLUMN system_operate_log.creator IS '创建者'; +COMMENT ON COLUMN system_operate_log.create_time IS '创建时间'; +COMMENT ON COLUMN system_operate_log.updater IS '更新者'; +COMMENT ON COLUMN system_operate_log.update_time IS '更新时间'; +COMMENT ON COLUMN system_operate_log.deleted IS '是否删除'; +COMMENT ON COLUMN system_operate_log.tenant_id IS '租户编号'; +COMMENT ON TABLE system_operate_log IS '操作日志记录 V2 版本'; + +DROP SEQUENCE IF EXISTS system_operate_log_seq; +CREATE SEQUENCE system_operate_log_seq + START 1; + +-- ---------------------------- +-- Table structure for system_post +-- ---------------------------- +DROP TABLE IF EXISTS system_post; +CREATE TABLE system_post +( + id int8 NOT NULL, + code varchar(64) NOT NULL, + name varchar(50) NOT NULL, + sort int4 NOT NULL, + status int2 NOT NULL, + remark varchar(500) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_post + ADD CONSTRAINT pk_system_post PRIMARY KEY (id); + +COMMENT ON COLUMN system_post.id IS '岗位ID'; +COMMENT ON COLUMN system_post.code IS '岗位编码'; +COMMENT ON COLUMN system_post.name IS '岗位名称'; +COMMENT ON COLUMN system_post.sort IS '显示顺序'; +COMMENT ON COLUMN system_post.status IS '状态(0正常 1停用)'; +COMMENT ON COLUMN system_post.remark IS '备注'; +COMMENT ON COLUMN system_post.creator IS '创建者'; +COMMENT ON COLUMN system_post.create_time IS '创建时间'; +COMMENT ON COLUMN system_post.updater IS '更新者'; +COMMENT ON COLUMN system_post.update_time IS '更新时间'; +COMMENT ON COLUMN system_post.deleted IS '是否删除'; +COMMENT ON COLUMN system_post.tenant_id IS '租户编号'; +COMMENT ON TABLE system_post IS '岗位信息表'; + +-- ---------------------------- +-- Records of system_post +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, 'ceo', '董事长', 1, 0, '', 'admin', '2021-01-06 17:03:48', '1', '2023-02-11 15:19:04', '0', 1); +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 'se', '项目经理', 2, 0, '', 'admin', '2021-01-05 17:03:48', '1', '2023-11-15 09:18:20', '0', 1); +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, 'user', '普通员工', 4, 0, '111', 'admin', '2021-01-05 17:03:48', '1', '2023-12-02 10:04:37', '0', 1); +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, 'HR', '人力资源', 5, 0, '', '1', '2024-03-24 20:45:40', '1', '2024-03-24 20:45:40', '0', 1); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_post_seq; +CREATE SEQUENCE system_post_seq + START 6; + +-- ---------------------------- +-- Table structure for system_role +-- ---------------------------- +DROP TABLE IF EXISTS system_role; +CREATE TABLE system_role +( + id int8 NOT NULL, + name varchar(30) NOT NULL, + code varchar(100) NOT NULL, + sort int4 NOT NULL, + data_scope int2 NOT NULL DEFAULT 1, + data_scope_dept_ids varchar(500) NOT NULL DEFAULT '', + status int2 NOT NULL, + type int2 NOT NULL, + remark varchar(500) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_role + ADD CONSTRAINT pk_system_role PRIMARY KEY (id); + +COMMENT ON COLUMN system_role.id IS '角色ID'; +COMMENT ON COLUMN system_role.name IS '角色名称'; +COMMENT ON COLUMN system_role.code IS '角色权限字符串'; +COMMENT ON COLUMN system_role.sort IS '显示顺序'; +COMMENT ON COLUMN system_role.data_scope IS '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)'; +COMMENT ON COLUMN system_role.data_scope_dept_ids IS '数据范围(指定部门数组)'; +COMMENT ON COLUMN system_role.status IS '角色状态(0正常 1停用)'; +COMMENT ON COLUMN system_role.type IS '角色类型'; +COMMENT ON COLUMN system_role.remark IS '备注'; +COMMENT ON COLUMN system_role.creator IS '创建者'; +COMMENT ON COLUMN system_role.create_time IS '创建时间'; +COMMENT ON COLUMN system_role.updater IS '更新者'; +COMMENT ON COLUMN system_role.update_time IS '更新时间'; +COMMENT ON COLUMN system_role.deleted IS '是否删除'; +COMMENT ON COLUMN system_role.tenant_id IS '租户编号'; +COMMENT ON TABLE system_role IS '角色信息表'; + +-- ---------------------------- +-- Records of system_role +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '超级管理员', 'super_admin', 1, 1, '', 0, 1, '超级管理员', 'admin', '2021-01-05 17:03:48', '', '2022-02-22 05:08:21', '0', 1); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '普通角色', 'common', 2, 2, '', 0, 1, '普通角色', 'admin', '2021-01-05 17:03:48', '', '2022-02-22 05:08:20', '0', 1); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, 'CRM 管理员', 'crm_admin', 2, 1, '', 0, 1, 'CRM 专属角色', '1', '2024-02-24 10:51:13', '1', '2024-02-24 02:51:32', '0', 1); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (101, '测试账号', 'test', 0, 1, '[]', 0, 2, '我想测试', '', '2021-01-06 13:49:35', '1', '2024-03-24 22:22:45', '0', 1); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (109, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', '0', 121); +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (111, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', '0', 122); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_role_seq; +CREATE SEQUENCE system_role_seq + START 112; + +-- ---------------------------- +-- Table structure for system_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS system_role_menu; +CREATE TABLE system_role_menu +( + id int8 NOT NULL, + role_id int8 NOT NULL, + menu_id int8 NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_role_menu + ADD CONSTRAINT pk_system_role_menu PRIMARY KEY (id); + +COMMENT ON COLUMN system_role_menu.id IS '自增编号'; +COMMENT ON COLUMN system_role_menu.role_id IS '角色ID'; +COMMENT ON COLUMN system_role_menu.menu_id IS '菜单ID'; +COMMENT ON COLUMN system_role_menu.creator IS '创建者'; +COMMENT ON COLUMN system_role_menu.create_time IS '创建时间'; +COMMENT ON COLUMN system_role_menu.updater IS '更新者'; +COMMENT ON COLUMN system_role_menu.update_time IS '更新时间'; +COMMENT ON COLUMN system_role_menu.deleted IS '是否删除'; +COMMENT ON COLUMN system_role_menu.tenant_id IS '租户编号'; +COMMENT ON TABLE system_role_menu IS '角色和菜单关联表'; + +-- ---------------------------- +-- Records of system_role_menu +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (263, 109, 1, '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (434, 2, 1, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (454, 2, 1093, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (455, 2, 1094, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (460, 2, 1100, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (467, 2, 1107, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (476, 2, 1117, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (477, 2, 100, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (478, 2, 101, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (479, 2, 102, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (480, 2, 1126, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (481, 2, 103, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (483, 2, 104, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (485, 2, 105, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (488, 2, 107, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (490, 2, 108, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (492, 2, 109, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (498, 2, 1138, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (523, 2, 1224, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (524, 2, 1225, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (541, 2, 500, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (543, 2, 501, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (675, 2, 2, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (689, 2, 1077, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (690, 2, 1078, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (692, 2, 1083, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (693, 2, 1084, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (699, 2, 1090, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (703, 2, 106, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (704, 2, 110, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (705, 2, 111, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (706, 2, 112, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (707, 2, 113, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1296, 110, 1, '110', '2022-02-23 00:23:55', '110', '2022-02-23 00:23:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1578, 111, 1, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1604, 101, 1216, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1605, 101, 1217, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1606, 101, 1218, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1607, 101, 1219, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1608, 101, 1220, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1609, 101, 1221, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1610, 101, 5, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1611, 101, 1222, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1612, 101, 1118, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1613, 101, 1119, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1614, 101, 1120, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1615, 101, 1185, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1616, 101, 1186, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1617, 101, 1187, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1618, 101, 1188, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1619, 101, 1189, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1620, 101, 1190, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1621, 101, 1191, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1622, 101, 1192, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1623, 101, 1193, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1624, 101, 1194, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1625, 101, 1195, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1626, 101, 1196, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1627, 101, 1197, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1628, 101, 1198, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1629, 101, 1199, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1630, 101, 1200, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1631, 101, 1201, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1632, 101, 1202, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1633, 101, 1207, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1634, 101, 1208, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1635, 101, 1209, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1636, 101, 1210, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1637, 101, 1211, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1638, 101, 1212, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1639, 101, 1213, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1640, 101, 1215, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1641, 101, 2, '1', '2022-04-01 22:21:24', '1', '2022-04-01 22:21:24', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1642, 101, 1031, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1643, 101, 1032, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1644, 101, 1033, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1645, 101, 1034, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1646, 101, 1035, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1647, 101, 1050, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1648, 101, 1051, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1649, 101, 1052, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1650, 101, 1053, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1651, 101, 1054, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1652, 101, 1056, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1653, 101, 1057, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1654, 101, 1058, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1655, 101, 1059, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1656, 101, 1060, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1657, 101, 1066, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1658, 101, 1067, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1659, 101, 1070, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1664, 101, 1075, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1666, 101, 1077, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1667, 101, 1078, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1668, 101, 1082, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1669, 101, 1083, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1670, 101, 1084, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1671, 101, 1085, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1672, 101, 1086, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1673, 101, 1087, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1674, 101, 1088, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1675, 101, 1089, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1679, 101, 1237, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1680, 101, 1238, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1681, 101, 1239, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1682, 101, 1240, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1683, 101, 1241, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1684, 101, 1242, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1685, 101, 1243, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1687, 101, 106, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1688, 101, 110, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1689, 101, 111, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1690, 101, 112, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1691, 101, 113, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1692, 101, 114, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1693, 101, 115, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1694, 101, 116, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1729, 109, 100, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1730, 109, 101, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1731, 109, 1063, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1732, 109, 1064, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1733, 109, 1001, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1734, 109, 1065, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1735, 109, 1002, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1736, 109, 1003, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1737, 109, 1004, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1738, 109, 1005, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1739, 109, 1006, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1740, 109, 1007, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1741, 109, 1008, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1742, 109, 1009, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1743, 109, 1010, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1744, 109, 1011, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1745, 109, 1012, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1746, 111, 100, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1747, 111, 101, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1748, 111, 1063, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1749, 111, 1064, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1750, 111, 1001, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1751, 111, 1065, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1752, 111, 1002, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1753, 111, 1003, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1754, 111, 1004, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1755, 111, 1005, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1756, 111, 1006, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1757, 111, 1007, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1758, 111, 1008, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1759, 111, 1009, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1760, 111, 1010, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1761, 111, 1011, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1762, 111, 1012, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1763, 109, 100, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1764, 109, 101, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1765, 109, 1063, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1766, 109, 1064, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1767, 109, 1001, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1768, 109, 1065, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1769, 109, 1002, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1770, 109, 1003, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1771, 109, 1004, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1772, 109, 1005, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1773, 109, 1006, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1774, 109, 1007, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1775, 109, 1008, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1776, 109, 1009, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1777, 109, 1010, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1778, 109, 1011, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1779, 109, 1012, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1780, 111, 100, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1781, 111, 101, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1782, 111, 1063, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1783, 111, 1064, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1784, 111, 1001, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1785, 111, 1065, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1786, 111, 1002, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1787, 111, 1003, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1788, 111, 1004, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1789, 111, 1005, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1790, 111, 1006, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1791, 111, 1007, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1792, 111, 1008, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1793, 111, 1009, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1794, 111, 1010, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1795, 111, 1011, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1796, 111, 1012, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1797, 109, 100, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1798, 109, 101, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1799, 109, 1063, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1800, 109, 1064, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1801, 109, 1001, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1802, 109, 1065, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1803, 109, 1002, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1804, 109, 1003, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1805, 109, 1004, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1806, 109, 1005, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1807, 109, 1006, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1808, 109, 1007, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1809, 109, 1008, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1810, 109, 1009, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1811, 109, 1010, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1812, 109, 1011, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1813, 109, 1012, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1814, 111, 100, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1815, 111, 101, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1816, 111, 1063, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1817, 111, 1064, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1818, 111, 1001, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1819, 111, 1065, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1820, 111, 1002, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1821, 111, 1003, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1822, 111, 1004, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1823, 111, 1005, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1824, 111, 1006, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1825, 111, 1007, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1826, 111, 1008, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1827, 111, 1009, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1828, 111, 1010, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1829, 111, 1011, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1830, 111, 1012, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1831, 109, 103, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1832, 109, 1017, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1833, 109, 1018, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1834, 109, 1019, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1835, 109, 1020, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1836, 111, 103, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1837, 111, 1017, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1838, 111, 1018, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1839, 111, 1019, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1840, 111, 1020, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1841, 109, 1036, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1842, 109, 1037, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1843, 109, 1038, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1844, 109, 1039, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1845, 109, 107, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1846, 111, 1036, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1847, 111, 1037, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1848, 111, 1038, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1849, 111, 1039, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1850, 111, 107, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1991, 2, 1024, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1992, 2, 1025, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1993, 2, 1026, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1994, 2, 1027, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1995, 2, 1028, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1996, 2, 1029, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1997, 2, 1030, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1998, 2, 1031, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1999, 2, 1032, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2000, 2, 1033, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2001, 2, 1034, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2002, 2, 1035, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2003, 2, 1036, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2004, 2, 1037, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2005, 2, 1038, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2006, 2, 1039, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2007, 2, 1040, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2008, 2, 1042, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2009, 2, 1043, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2010, 2, 1045, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2011, 2, 1046, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2012, 2, 1048, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2013, 2, 1050, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2014, 2, 1051, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2015, 2, 1052, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2016, 2, 1053, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2017, 2, 1054, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2018, 2, 1056, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2019, 2, 1057, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2020, 2, 1058, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2021, 2, 2083, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2022, 2, 1059, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2023, 2, 1060, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2024, 2, 1063, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2025, 2, 1064, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2026, 2, 1065, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2027, 2, 1066, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2028, 2, 1067, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2029, 2, 1070, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2034, 2, 1075, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2036, 2, 1082, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2037, 2, 1085, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2038, 2, 1086, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2039, 2, 1087, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2040, 2, 1088, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2041, 2, 1089, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2042, 2, 1091, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2043, 2, 1092, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2044, 2, 1095, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2045, 2, 1096, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2046, 2, 1097, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2047, 2, 1098, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2048, 2, 1101, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2049, 2, 1102, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2050, 2, 1103, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2051, 2, 1104, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2052, 2, 1105, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2053, 2, 1106, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2054, 2, 1108, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2055, 2, 1109, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2061, 2, 1127, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2062, 2, 1128, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2063, 2, 1129, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2064, 2, 1130, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2066, 2, 1132, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2067, 2, 1133, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2068, 2, 1134, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2069, 2, 1135, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2070, 2, 1136, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2071, 2, 1137, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2072, 2, 114, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2073, 2, 1139, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2074, 2, 115, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2075, 2, 1140, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2076, 2, 116, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2077, 2, 1141, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2078, 2, 1142, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2079, 2, 1143, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2080, 2, 1150, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2081, 2, 1161, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2082, 2, 1162, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2083, 2, 1163, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2084, 2, 1164, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2085, 2, 1165, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2086, 2, 1166, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2087, 2, 1173, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2088, 2, 1174, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2089, 2, 1175, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2090, 2, 1176, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2091, 2, 1177, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2092, 2, 1178, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2099, 2, 1226, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2100, 2, 1227, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2101, 2, 1228, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2102, 2, 1229, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2103, 2, 1237, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2104, 2, 1238, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2105, 2, 1239, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2106, 2, 1240, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2107, 2, 1241, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2108, 2, 1242, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2109, 2, 1243, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2116, 2, 1254, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2117, 2, 1255, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2118, 2, 1256, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2119, 2, 1257, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2120, 2, 1258, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2121, 2, 1259, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2122, 2, 1260, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2123, 2, 1261, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2124, 2, 1263, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2125, 2, 1264, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2126, 2, 1265, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2127, 2, 1266, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2128, 2, 1267, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2129, 2, 1001, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2130, 2, 1002, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2131, 2, 1003, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2132, 2, 1004, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2133, 2, 1005, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2134, 2, 1006, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2135, 2, 1007, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2136, 2, 1008, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2137, 2, 1009, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2138, 2, 1010, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2139, 2, 1011, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2140, 2, 1012, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2141, 2, 1013, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2142, 2, 1014, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2143, 2, 1015, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2144, 2, 1016, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2145, 2, 1017, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2146, 2, 1018, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2147, 2, 1019, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2148, 2, 1020, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2149, 2, 1021, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2150, 2, 1022, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2151, 2, 1023, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2152, 2, 1281, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2153, 2, 1282, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2154, 2, 2000, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2155, 2, 2002, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2156, 2, 2003, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2157, 2, 2004, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2158, 2, 2005, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2159, 2, 2006, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2160, 2, 2008, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2161, 2, 2009, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2162, 2, 2010, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2163, 2, 2011, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2164, 2, 2012, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2170, 2, 2019, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2171, 2, 2020, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2172, 2, 2021, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2173, 2, 2022, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2174, 2, 2023, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2175, 2, 2025, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2177, 2, 2027, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2178, 2, 2028, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2179, 2, 2029, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2180, 2, 2014, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2181, 2, 2015, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2182, 2, 2016, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2183, 2, 2017, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2184, 2, 2018, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2188, 101, 1024, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2189, 101, 1, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2190, 101, 1025, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2191, 101, 1026, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2192, 101, 1027, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2193, 101, 1028, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2194, 101, 1029, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2195, 101, 1030, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2196, 101, 1036, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2197, 101, 1037, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2198, 101, 1038, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2199, 101, 1039, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2200, 101, 1040, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2201, 101, 1042, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2202, 101, 1043, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2203, 101, 1045, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2204, 101, 1046, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2205, 101, 1048, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2206, 101, 2083, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2207, 101, 1063, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2208, 101, 1064, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2209, 101, 1065, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2210, 101, 1093, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2211, 101, 1094, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2212, 101, 1095, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2213, 101, 1096, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2214, 101, 1097, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2215, 101, 1098, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2216, 101, 1100, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2217, 101, 1101, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2218, 101, 1102, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2219, 101, 1103, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2220, 101, 1104, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2221, 101, 1105, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2222, 101, 1106, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2223, 101, 2130, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2224, 101, 1107, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2225, 101, 2131, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2226, 101, 1108, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2227, 101, 2132, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2228, 101, 1109, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2229, 101, 2133, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2230, 101, 2134, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2232, 101, 2135, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2234, 101, 2136, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2236, 101, 2137, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2238, 101, 2138, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2240, 101, 2139, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2242, 101, 2140, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2243, 101, 2141, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2244, 101, 2142, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2245, 101, 2143, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2246, 101, 2144, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2247, 101, 2145, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2248, 101, 2146, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2249, 101, 2147, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2250, 101, 100, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2251, 101, 2148, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2252, 101, 101, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2253, 101, 2149, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2254, 101, 102, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2255, 101, 2150, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2256, 101, 103, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2257, 101, 2151, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2258, 101, 104, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2259, 101, 2152, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2260, 101, 105, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2261, 101, 107, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2262, 101, 108, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2263, 101, 109, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2264, 101, 1138, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2265, 101, 1139, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2266, 101, 1140, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2267, 101, 1141, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2268, 101, 1142, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2269, 101, 1143, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2270, 101, 1224, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2271, 101, 1225, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2272, 101, 1226, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2273, 101, 1227, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2274, 101, 1228, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2275, 101, 1229, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2282, 101, 1261, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2283, 101, 1263, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2284, 101, 1264, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2285, 101, 1265, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2286, 101, 1266, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2287, 101, 1267, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2288, 101, 1001, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2289, 101, 1002, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2290, 101, 1003, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2291, 101, 1004, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2292, 101, 1005, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2293, 101, 1006, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2294, 101, 1007, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2295, 101, 1008, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2296, 101, 1009, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2297, 101, 1010, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2298, 101, 1011, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2299, 101, 1012, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2300, 101, 500, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2301, 101, 1013, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2302, 101, 501, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2303, 101, 1014, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2304, 101, 1015, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2305, 101, 1016, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2306, 101, 1017, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2307, 101, 1018, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2308, 101, 1019, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2309, 101, 1020, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2310, 101, 1021, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2311, 101, 1022, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2312, 101, 1023, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2929, 109, 1224, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2930, 109, 1225, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2931, 109, 1226, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2932, 109, 1227, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2933, 109, 1228, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2934, 109, 1229, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2935, 109, 1138, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2936, 109, 1139, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2937, 109, 1140, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2938, 109, 1141, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2939, 109, 1142, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2940, 109, 1143, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2941, 111, 1224, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2942, 111, 1225, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2943, 111, 1226, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2944, 111, 1227, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2945, 111, 1228, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2946, 111, 1229, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2947, 111, 1138, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2948, 111, 1139, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2949, 111, 1140, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2950, 111, 1141, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2951, 111, 1142, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2952, 111, 1143, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2993, 109, 2, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2994, 109, 1031, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2995, 109, 1032, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2996, 109, 1033, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2997, 109, 1034, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2998, 109, 1035, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2999, 109, 1050, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3000, 109, 1051, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3001, 109, 1052, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3002, 109, 1053, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3003, 109, 1054, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3004, 109, 1056, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3005, 109, 1057, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3006, 109, 1058, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3007, 109, 1059, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3008, 109, 1060, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3009, 109, 1066, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3010, 109, 1067, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3011, 109, 1070, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3012, 109, 1075, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3013, 109, 1076, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3014, 109, 1077, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3015, 109, 1078, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3016, 109, 1082, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3017, 109, 1083, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3018, 109, 1084, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3019, 109, 1085, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3020, 109, 1086, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3021, 109, 1087, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3022, 109, 1088, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3023, 109, 1089, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3024, 109, 1090, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3025, 109, 1091, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3026, 109, 1092, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3027, 109, 106, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3028, 109, 110, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3029, 109, 111, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3030, 109, 112, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3031, 109, 113, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3032, 109, 114, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3033, 109, 115, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3034, 109, 116, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3035, 109, 2472, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3036, 109, 2478, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3037, 109, 2479, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3038, 109, 2480, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3039, 109, 2481, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3040, 109, 2482, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3041, 109, 2483, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3042, 109, 2484, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3043, 109, 2485, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3044, 109, 2486, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3045, 109, 2487, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3046, 109, 2488, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3047, 109, 2489, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3048, 109, 2490, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3049, 109, 2491, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3050, 109, 2492, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3051, 109, 2493, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3052, 109, 2494, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3053, 109, 2495, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3054, 109, 2497, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3055, 109, 1237, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3056, 109, 1238, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3057, 109, 1239, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3058, 109, 1240, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3059, 109, 1241, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3060, 109, 1242, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3061, 109, 1243, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3062, 109, 2525, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3063, 109, 1255, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3064, 109, 1256, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3065, 109, 1257, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3066, 109, 1258, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3067, 109, 1259, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3068, 109, 1260, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3069, 111, 2, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3070, 111, 1031, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3071, 111, 1032, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3072, 111, 1033, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3073, 111, 1034, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3074, 111, 1035, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3075, 111, 1050, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3076, 111, 1051, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3077, 111, 1052, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3078, 111, 1053, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3079, 111, 1054, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3080, 111, 1056, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3081, 111, 1057, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3082, 111, 1058, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3083, 111, 1059, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3084, 111, 1060, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3085, 111, 1066, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3086, 111, 1067, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3087, 111, 1070, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3088, 111, 1075, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3089, 111, 1076, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3090, 111, 1077, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3091, 111, 1078, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3092, 111, 1082, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3093, 111, 1083, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3094, 111, 1084, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3095, 111, 1085, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3096, 111, 1086, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3097, 111, 1087, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3098, 111, 1088, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3099, 111, 1089, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3100, 111, 1090, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3101, 111, 1091, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3102, 111, 1092, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3103, 111, 106, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3104, 111, 110, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3105, 111, 111, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3106, 111, 112, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3107, 111, 113, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3108, 111, 114, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3109, 111, 115, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3110, 111, 116, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3111, 111, 2472, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3112, 111, 2478, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3113, 111, 2479, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3114, 111, 2480, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3115, 111, 2481, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3116, 111, 2482, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3117, 111, 2483, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3118, 111, 2484, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3119, 111, 2485, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3120, 111, 2486, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3121, 111, 2487, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3122, 111, 2488, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3123, 111, 2489, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3124, 111, 2490, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3125, 111, 2491, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3126, 111, 2492, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3127, 111, 2493, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3128, 111, 2494, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3129, 111, 2495, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3130, 111, 2497, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3131, 111, 1237, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3132, 111, 1238, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3133, 111, 1239, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3134, 111, 1240, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3135, 111, 1241, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3136, 111, 1242, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3137, 111, 1243, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3138, 111, 2525, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3139, 111, 1255, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3140, 111, 1256, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3141, 111, 1257, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3142, 111, 1258, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3143, 111, 1259, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3144, 111, 1260, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3221, 109, 102, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3222, 109, 1013, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3223, 109, 1014, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3224, 109, 1015, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3225, 109, 1016, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3226, 111, 102, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3227, 111, 1013, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3228, 111, 1014, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3229, 111, 1015, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3230, 111, 1016, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4163, 109, 5, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4164, 109, 1118, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4165, 109, 1119, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4166, 109, 1120, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4167, 109, 2713, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4168, 109, 2714, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4169, 109, 2715, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4170, 109, 2716, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4171, 109, 2717, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4172, 109, 2718, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4173, 109, 2720, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4174, 109, 1185, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4175, 109, 2721, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4176, 109, 1186, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4177, 109, 2722, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4178, 109, 1187, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4179, 109, 2723, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4180, 109, 1188, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4181, 109, 2724, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4182, 109, 1189, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4183, 109, 2725, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4184, 109, 1190, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4185, 109, 2726, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4186, 109, 1191, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4187, 109, 2727, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4188, 109, 1192, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4189, 109, 2728, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4190, 109, 1193, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4191, 109, 2729, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4192, 109, 1194, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4193, 109, 2730, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4194, 109, 1195, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4195, 109, 2731, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4196, 109, 1196, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4197, 109, 2732, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4198, 109, 1197, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4199, 109, 2733, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4200, 109, 1198, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4201, 109, 2734, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4202, 109, 1199, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4203, 109, 2735, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4204, 109, 1200, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4205, 109, 1201, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4206, 109, 1202, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4207, 109, 1207, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4208, 109, 1208, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4209, 109, 1209, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4210, 109, 1210, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4211, 109, 1211, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4212, 109, 1212, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4213, 109, 1213, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4214, 109, 1215, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4215, 109, 1216, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4216, 109, 1217, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4217, 109, 1218, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4218, 109, 1219, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4219, 109, 1220, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4220, 109, 1221, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4221, 109, 1222, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', '0', 121); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4222, 111, 5, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4223, 111, 1118, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4224, 111, 1119, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4225, 111, 1120, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4226, 111, 2713, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4227, 111, 2714, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4228, 111, 2715, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4229, 111, 2716, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4230, 111, 2717, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4231, 111, 2718, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4232, 111, 2720, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4233, 111, 1185, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4234, 111, 2721, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4235, 111, 1186, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4236, 111, 2722, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4237, 111, 1187, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4238, 111, 2723, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4239, 111, 1188, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4240, 111, 2724, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4241, 111, 1189, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4242, 111, 2725, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4243, 111, 1190, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4244, 111, 2726, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4245, 111, 1191, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4246, 111, 2727, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4247, 111, 1192, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4248, 111, 2728, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4249, 111, 1193, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4250, 111, 2729, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4251, 111, 1194, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4252, 111, 2730, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4253, 111, 1195, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4254, 111, 2731, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4255, 111, 1196, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4256, 111, 2732, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4257, 111, 1197, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4258, 111, 2733, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4259, 111, 1198, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4260, 111, 2734, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4261, 111, 1199, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4262, 111, 2735, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4263, 111, 1200, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4264, 111, 1201, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4265, 111, 1202, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4266, 111, 1207, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4267, 111, 1208, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4268, 111, 1209, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4269, 111, 1210, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4270, 111, 1211, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4271, 111, 1212, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4272, 111, 1213, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4273, 111, 1215, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4274, 111, 1216, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4275, 111, 1217, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4276, 111, 1218, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4277, 111, 1219, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4278, 111, 1220, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4279, 111, 1221, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4280, 111, 1222, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', '0', 122); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5777, 101, 2739, '1', '2024-04-30 09:38:37', '1', '2024-04-30 09:38:37', '0', 1); +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5778, 101, 2740, '1', '2024-04-30 09:38:37', '1', '2024-04-30 09:38:37', '0', 1); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_role_menu_seq; +CREATE SEQUENCE system_role_menu_seq + START 5779; + +-- ---------------------------- +-- Table structure for system_sms_channel +-- ---------------------------- +DROP TABLE IF EXISTS system_sms_channel; +CREATE TABLE system_sms_channel +( + id int8 NOT NULL, + signature varchar(12) NOT NULL, + code varchar(63) NOT NULL, + status int2 NOT NULL, + remark varchar(255) NULL DEFAULT NULL, + api_key varchar(128) NOT NULL, + api_secret varchar(128) NULL DEFAULT NULL, + callback_url varchar(255) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_sms_channel + ADD CONSTRAINT pk_system_sms_channel PRIMARY KEY (id); + +COMMENT ON COLUMN system_sms_channel.id IS '编号'; +COMMENT ON COLUMN system_sms_channel.signature IS '短信签名'; +COMMENT ON COLUMN system_sms_channel.code IS '渠道编码'; +COMMENT ON COLUMN system_sms_channel.status IS '开启状态'; +COMMENT ON COLUMN system_sms_channel.remark IS '备注'; +COMMENT ON COLUMN system_sms_channel.api_key IS '短信 API 的账号'; +COMMENT ON COLUMN system_sms_channel.api_secret IS '短信 API 的秘钥'; +COMMENT ON COLUMN system_sms_channel.callback_url IS '短信发送回调 URL'; +COMMENT ON COLUMN system_sms_channel.creator IS '创建者'; +COMMENT ON COLUMN system_sms_channel.create_time IS '创建时间'; +COMMENT ON COLUMN system_sms_channel.updater IS '更新者'; +COMMENT ON COLUMN system_sms_channel.update_time IS '更新时间'; +COMMENT ON COLUMN system_sms_channel.deleted IS '是否删除'; +COMMENT ON TABLE system_sms_channel IS '短信渠道'; + +-- ---------------------------- +-- Records of system_sms_channel +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_sms_channel (id, signature, code, status, remark, api_key, api_secret, callback_url, creator, create_time, updater, update_time, deleted) VALUES (2, 'Ballcat', 'ALIYUN', 0, '你要改哦,只有我可以用!!!!', 'LTAI5tCnKso2uG3kJ5gRav88', 'fGJ5SNXL7P1NHNRmJ7DJaMJGPyE55C', NULL, '', '2021-03-31 11:53:10', '1', '2023-12-02 22:10:17', '0'); +INSERT INTO system_sms_channel (id, signature, code, status, remark, api_key, api_secret, callback_url, creator, create_time, updater, update_time, deleted) VALUES (4, '测试渠道', 'DEBUG_DING_TALK', 0, '123', '696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859', 'SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67', NULL, '1', '2021-04-13 00:23:14', '1', '2022-03-27 20:29:49', '0'); +INSERT INTO system_sms_channel (id, signature, code, status, remark, api_key, api_secret, callback_url, creator, create_time, updater, update_time, deleted) VALUES (6, '测试演示', 'DEBUG_DING_TALK', 0, '仅测试', '696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859', 'SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67', NULL, '1', '2022-04-10 23:07:59', '1', '2023-12-02 22:10:08', '0'); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_sms_channel_seq; +CREATE SEQUENCE system_sms_channel_seq + START 7; + +-- ---------------------------- +-- Table structure for system_sms_code +-- ---------------------------- +DROP TABLE IF EXISTS system_sms_code; +CREATE TABLE system_sms_code +( + id int8 NOT NULL, + mobile varchar(11) NOT NULL, + code varchar(6) NOT NULL, + create_ip varchar(15) NOT NULL, + scene int2 NOT NULL, + today_index int2 NOT NULL, + used int2 NOT NULL, + used_time timestamp NULL DEFAULT NULL, + used_ip varchar(255) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_sms_code + ADD CONSTRAINT pk_system_sms_code PRIMARY KEY (id); + +CREATE INDEX idx_system_sms_code_01 ON system_sms_code (mobile); + +COMMENT ON COLUMN system_sms_code.id IS '编号'; +COMMENT ON COLUMN system_sms_code.mobile IS '手机号'; +COMMENT ON COLUMN system_sms_code.code IS '验证码'; +COMMENT ON COLUMN system_sms_code.create_ip IS '创建 IP'; +COMMENT ON COLUMN system_sms_code.scene IS '发送场景'; +COMMENT ON COLUMN system_sms_code.today_index IS '今日发送的第几条'; +COMMENT ON COLUMN system_sms_code.used IS '是否使用'; +COMMENT ON COLUMN system_sms_code.used_time IS '使用时间'; +COMMENT ON COLUMN system_sms_code.used_ip IS '使用 IP'; +COMMENT ON COLUMN system_sms_code.creator IS '创建者'; +COMMENT ON COLUMN system_sms_code.create_time IS '创建时间'; +COMMENT ON COLUMN system_sms_code.updater IS '更新者'; +COMMENT ON COLUMN system_sms_code.update_time IS '更新时间'; +COMMENT ON COLUMN system_sms_code.deleted IS '是否删除'; +COMMENT ON COLUMN system_sms_code.tenant_id IS '租户编号'; +COMMENT ON TABLE system_sms_code IS '手机验证码'; + +DROP SEQUENCE IF EXISTS system_sms_code_seq; +CREATE SEQUENCE system_sms_code_seq + START 1; + +-- ---------------------------- +-- Table structure for system_sms_log +-- ---------------------------- +DROP TABLE IF EXISTS system_sms_log; +CREATE TABLE system_sms_log +( + id int8 NOT NULL, + channel_id int8 NOT NULL, + channel_code varchar(63) NOT NULL, + template_id int8 NOT NULL, + template_code varchar(63) NOT NULL, + template_type int2 NOT NULL, + template_content varchar(255) NOT NULL, + template_params varchar(255) NOT NULL, + api_template_id varchar(63) NOT NULL, + mobile varchar(11) NOT NULL, + user_id int8 NULL DEFAULT NULL, + user_type int2 NULL DEFAULT NULL, + send_status int2 NOT NULL DEFAULT 0, + send_time timestamp NULL DEFAULT NULL, + api_send_code varchar(63) NULL DEFAULT NULL, + api_send_msg varchar(255) NULL DEFAULT NULL, + api_request_id varchar(255) NULL DEFAULT NULL, + api_serial_no varchar(255) NULL DEFAULT NULL, + receive_status int2 NOT NULL DEFAULT 0, + receive_time timestamp NULL DEFAULT NULL, + api_receive_code varchar(63) NULL DEFAULT NULL, + api_receive_msg varchar(255) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_sms_log + ADD CONSTRAINT pk_system_sms_log PRIMARY KEY (id); + +COMMENT ON COLUMN system_sms_log.id IS '编号'; +COMMENT ON COLUMN system_sms_log.channel_id IS '短信渠道编号'; +COMMENT ON COLUMN system_sms_log.channel_code IS '短信渠道编码'; +COMMENT ON COLUMN system_sms_log.template_id IS '模板编号'; +COMMENT ON COLUMN system_sms_log.template_code IS '模板编码'; +COMMENT ON COLUMN system_sms_log.template_type IS '短信类型'; +COMMENT ON COLUMN system_sms_log.template_content IS '短信内容'; +COMMENT ON COLUMN system_sms_log.template_params IS '短信参数'; +COMMENT ON COLUMN system_sms_log.api_template_id IS '短信 API 的模板编号'; +COMMENT ON COLUMN system_sms_log.mobile IS '手机号'; +COMMENT ON COLUMN system_sms_log.user_id IS '用户编号'; +COMMENT ON COLUMN system_sms_log.user_type IS '用户类型'; +COMMENT ON COLUMN system_sms_log.send_status IS '发送状态'; +COMMENT ON COLUMN system_sms_log.send_time IS '发送时间'; +COMMENT ON COLUMN system_sms_log.api_send_code IS '短信 API 发送结果的编码'; +COMMENT ON COLUMN system_sms_log.api_send_msg IS '短信 API 发送失败的提示'; +COMMENT ON COLUMN system_sms_log.api_request_id IS '短信 API 发送返回的唯一请求 ID'; +COMMENT ON COLUMN system_sms_log.api_serial_no IS '短信 API 发送返回的序号'; +COMMENT ON COLUMN system_sms_log.receive_status IS '接收状态'; +COMMENT ON COLUMN system_sms_log.receive_time IS '接收时间'; +COMMENT ON COLUMN system_sms_log.api_receive_code IS 'API 接收结果的编码'; +COMMENT ON COLUMN system_sms_log.api_receive_msg IS 'API 接收结果的说明'; +COMMENT ON COLUMN system_sms_log.creator IS '创建者'; +COMMENT ON COLUMN system_sms_log.create_time IS '创建时间'; +COMMENT ON COLUMN system_sms_log.updater IS '更新者'; +COMMENT ON COLUMN system_sms_log.update_time IS '更新时间'; +COMMENT ON COLUMN system_sms_log.deleted IS '是否删除'; +COMMENT ON TABLE system_sms_log IS '短信日志'; + +DROP SEQUENCE IF EXISTS system_sms_log_seq; +CREATE SEQUENCE system_sms_log_seq + START 1; + +-- ---------------------------- +-- Table structure for system_sms_template +-- ---------------------------- +DROP TABLE IF EXISTS system_sms_template; +CREATE TABLE system_sms_template +( + id int8 NOT NULL, + type int2 NOT NULL, + status int2 NOT NULL, + code varchar(63) NOT NULL, + name varchar(63) NOT NULL, + content varchar(255) NOT NULL, + params varchar(255) NOT NULL, + remark varchar(255) NULL DEFAULT NULL, + api_template_id varchar(63) NOT NULL, + channel_id int8 NOT NULL, + channel_code varchar(63) NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_sms_template + ADD CONSTRAINT pk_system_sms_template PRIMARY KEY (id); + +COMMENT ON COLUMN system_sms_template.id IS '编号'; +COMMENT ON COLUMN system_sms_template.type IS '模板类型'; +COMMENT ON COLUMN system_sms_template.status IS '开启状态'; +COMMENT ON COLUMN system_sms_template.code IS '模板编码'; +COMMENT ON COLUMN system_sms_template.name IS '模板名称'; +COMMENT ON COLUMN system_sms_template.content IS '模板内容'; +COMMENT ON COLUMN system_sms_template.params IS '参数数组'; +COMMENT ON COLUMN system_sms_template.remark IS '备注'; +COMMENT ON COLUMN system_sms_template.api_template_id IS '短信 API 的模板编号'; +COMMENT ON COLUMN system_sms_template.channel_id IS '短信渠道编号'; +COMMENT ON COLUMN system_sms_template.channel_code IS '短信渠道编码'; +COMMENT ON COLUMN system_sms_template.creator IS '创建者'; +COMMENT ON COLUMN system_sms_template.create_time IS '创建时间'; +COMMENT ON COLUMN system_sms_template.updater IS '更新者'; +COMMENT ON COLUMN system_sms_template.update_time IS '更新时间'; +COMMENT ON COLUMN system_sms_template.deleted IS '是否删除'; +COMMENT ON TABLE system_sms_template IS '短信模板'; + +-- ---------------------------- +-- Records of system_sms_template +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (2, 1, 0, 'test_01', '测试验证码短信', '正在进行登录操作{operation},您的验证码是{code}', '["operation","code"]', '测试备注', '4383920', 6, 'DEBUG_DING_TALK', '', '2021-03-31 10:49:38', '1', '2023-12-02 22:32:47', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (3, 1, 0, 'test_02', '公告通知', '您的验证码{code},该验证码5分钟内有效,请勿泄漏于他人!', '["code"]', NULL, 'SMS_207945135', 2, 'ALIYUN', '', '2021-03-31 11:56:30', '1', '2021-04-10 01:22:02', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (6, 3, 0, 'test-01', '测试模板', '哈哈哈 {name}', '["name"]', 'f哈哈哈', '4383920', 6, 'DEBUG_DING_TALK', '1', '2021-04-10 01:07:21', '1', '2022-12-10 21:26:09', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (7, 3, 0, 'test-04', '测试下', '老鸡{name},牛逼{code}', '["name","code"]', '哈哈哈哈', 'suibian', 4, 'DEBUG_DING_TALK', '1', '2021-04-13 00:29:53', '1', '2023-12-02 22:35:34', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (8, 1, 0, 'user-sms-login', '前台用户短信登录', '您的验证码是{code}', '["code"]', NULL, '4372216', 6, 'DEBUG_DING_TALK', '1', '2021-10-11 08:10:00', '1', '2022-12-10 21:25:59', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (9, 2, 0, 'bpm_task_assigned', '【工作流】任务被分配', '您收到了一条新的待办任务:{processInstanceName}-{taskName},申请人:{startUserNickname},处理链接:{detailUrl}', '["processInstanceName","taskName","startUserNickname","detailUrl"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-21 22:31:19', '1', '2022-01-22 00:03:36', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (10, 2, 0, 'bpm_process_instance_reject', '【工作流】流程被不通过', '您的流程被审批不通过:{processInstanceName},原因:{reason},查看链接:{detailUrl}', '["processInstanceName","reason","detailUrl"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:03:31', '1', '2022-05-01 12:33:14', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (11, 2, 0, 'bpm_process_instance_approve', '【工作流】流程被通过', '您的流程被审批通过:{processInstanceName},查看链接:{detailUrl}', '["processInstanceName","detailUrl"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:04:31', '1', '2022-03-27 20:32:21', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (12, 2, 0, 'demo', '演示模板', '我就是测试一下下', '[]', NULL, 'biubiubiu', 6, 'DEBUG_DING_TALK', '1', '2022-04-10 23:22:49', '1', '2023-03-24 23:45:07', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (14, 1, 0, 'user-update-mobile', '会员用户 - 修改手机', '您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', '["code"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', '2023-08-19 18:58:01', '1', '2023-08-19 11:34:04', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (15, 1, 0, 'user-update-password', '会员用户 - 修改密码', '您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', '["code"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', '2023-08-19 18:58:01', '1', '2023-08-19 11:34:18', '0'); +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (16, 1, 0, 'user-reset-password', '会员用户 - 重置密码', '您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', '["code"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', '2023-08-19 18:58:01', '1', '2023-12-02 22:35:27', '0'); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_sms_template_seq; +CREATE SEQUENCE system_sms_template_seq + START 17; + +-- ---------------------------- +-- Table structure for system_social_client +-- ---------------------------- +DROP TABLE IF EXISTS system_social_client; +CREATE TABLE system_social_client +( + id int8 NOT NULL, + name varchar(255) NOT NULL, + social_type int2 NOT NULL, + user_type int2 NOT NULL, + client_id varchar(255) NOT NULL, + client_secret varchar(255) NOT NULL, + agent_id varchar(255) NULL DEFAULT NULL, + status int2 NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_social_client + ADD CONSTRAINT pk_system_social_client PRIMARY KEY (id); + +COMMENT ON COLUMN system_social_client.id IS '编号'; +COMMENT ON COLUMN system_social_client.name IS '应用名'; +COMMENT ON COLUMN system_social_client.social_type IS '社交平台的类型'; +COMMENT ON COLUMN system_social_client.user_type IS '用户类型'; +COMMENT ON COLUMN system_social_client.client_id IS '客户端编号'; +COMMENT ON COLUMN system_social_client.client_secret IS '客户端密钥'; +COMMENT ON COLUMN system_social_client.agent_id IS '代理编号'; +COMMENT ON COLUMN system_social_client.status IS '状态'; +COMMENT ON COLUMN system_social_client.creator IS '创建者'; +COMMENT ON COLUMN system_social_client.create_time IS '创建时间'; +COMMENT ON COLUMN system_social_client.updater IS '更新者'; +COMMENT ON COLUMN system_social_client.update_time IS '更新时间'; +COMMENT ON COLUMN system_social_client.deleted IS '是否删除'; +COMMENT ON COLUMN system_social_client.tenant_id IS '租户编号'; +COMMENT ON TABLE system_social_client IS '社交客户端表'; + +-- ---------------------------- +-- Records of system_social_client +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '钉钉', 20, 2, 'dingvrnreaje3yqvzhxg', 'i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI', NULL, 0, '', '2023-10-18 11:21:18', '1', '2023-12-20 21:28:26', '1', 1); +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '钉钉(王土豆)', 20, 2, 'dingtsu9hpepjkbmthhw', 'FP_bnSq_HAHKCSncmJjw5hxhnzs6vaVDSZZn3egj6rdqTQ_hu5tQVJyLMpgCakdP', NULL, 0, '', '2023-10-18 11:21:18', '', '2023-12-20 21:28:26', '1', 121); +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, '微信公众号', 31, 1, 'wx5b23ba7a5589ecbb', '2a7b3b20c537e52e74afd395eb85f61f', NULL, 0, '', '2023-10-18 16:07:46', '1', '2023-12-20 21:28:23', '1', 1); +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (43, '微信小程序', 34, 1, 'wx63c280fe3248a3e7', '6f270509224a7ae1296bbf1c8cb97aed', NULL, 0, '', '2023-10-19 13:37:41', '1', '2023-12-20 21:28:25', '1', 1); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_social_client_seq; +CREATE SEQUENCE system_social_client_seq + START 44; + +-- ---------------------------- +-- Table structure for system_social_user +-- ---------------------------- +DROP TABLE IF EXISTS system_social_user; +CREATE TABLE system_social_user +( + id int8 NOT NULL, + type int2 NOT NULL, + openid varchar(32) NOT NULL, + token varchar(256) NULL DEFAULT NULL, + raw_token_info varchar(1024) NOT NULL, + nickname varchar(32) NOT NULL, + avatar varchar(255) NULL DEFAULT NULL, + raw_user_info varchar(1024) NOT NULL, + code varchar(256) NOT NULL, + state varchar(256) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_social_user + ADD CONSTRAINT pk_system_social_user PRIMARY KEY (id); + +COMMENT ON COLUMN system_social_user.id IS '主键(自增策略)'; +COMMENT ON COLUMN system_social_user.type IS '社交平台的类型'; +COMMENT ON COLUMN system_social_user.openid IS '社交 openid'; +COMMENT ON COLUMN system_social_user.token IS '社交 token'; +COMMENT ON COLUMN system_social_user.raw_token_info IS '原始 Token 数据,一般是 JSON 格式'; +COMMENT ON COLUMN system_social_user.nickname IS '用户昵称'; +COMMENT ON COLUMN system_social_user.avatar IS '用户头像'; +COMMENT ON COLUMN system_social_user.raw_user_info IS '原始用户数据,一般是 JSON 格式'; +COMMENT ON COLUMN system_social_user.code IS '最后一次的认证 code'; +COMMENT ON COLUMN system_social_user.state IS '最后一次的认证 state'; +COMMENT ON COLUMN system_social_user.creator IS '创建者'; +COMMENT ON COLUMN system_social_user.create_time IS '创建时间'; +COMMENT ON COLUMN system_social_user.updater IS '更新者'; +COMMENT ON COLUMN system_social_user.update_time IS '更新时间'; +COMMENT ON COLUMN system_social_user.deleted IS '是否删除'; +COMMENT ON COLUMN system_social_user.tenant_id IS '租户编号'; +COMMENT ON TABLE system_social_user IS '社交用户表'; + +DROP SEQUENCE IF EXISTS system_social_user_seq; +CREATE SEQUENCE system_social_user_seq + START 1; + +-- ---------------------------- +-- Table structure for system_social_user_bind +-- ---------------------------- +DROP TABLE IF EXISTS system_social_user_bind; +CREATE TABLE system_social_user_bind +( + id int8 NOT NULL, + user_id int8 NOT NULL, + user_type int2 NOT NULL, + social_type int2 NOT NULL, + social_user_id int8 NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_social_user_bind + ADD CONSTRAINT pk_system_social_user_bind PRIMARY KEY (id); + +COMMENT ON COLUMN system_social_user_bind.id IS '主键(自增策略)'; +COMMENT ON COLUMN system_social_user_bind.user_id IS '用户编号'; +COMMENT ON COLUMN system_social_user_bind.user_type IS '用户类型'; +COMMENT ON COLUMN system_social_user_bind.social_type IS '社交平台的类型'; +COMMENT ON COLUMN system_social_user_bind.social_user_id IS '社交用户的编号'; +COMMENT ON COLUMN system_social_user_bind.creator IS '创建者'; +COMMENT ON COLUMN system_social_user_bind.create_time IS '创建时间'; +COMMENT ON COLUMN system_social_user_bind.updater IS '更新者'; +COMMENT ON COLUMN system_social_user_bind.update_time IS '更新时间'; +COMMENT ON COLUMN system_social_user_bind.deleted IS '是否删除'; +COMMENT ON COLUMN system_social_user_bind.tenant_id IS '租户编号'; +COMMENT ON TABLE system_social_user_bind IS '社交绑定表'; + +DROP SEQUENCE IF EXISTS system_social_user_bind_seq; +CREATE SEQUENCE system_social_user_bind_seq + START 1; + +-- ---------------------------- +-- Table structure for system_tenant +-- ---------------------------- +DROP TABLE IF EXISTS system_tenant; +CREATE TABLE system_tenant +( + id int8 NOT NULL, + name varchar(30) NOT NULL, + contact_user_id int8 NULL DEFAULT NULL, + contact_name varchar(30) NOT NULL, + contact_mobile varchar(500) NULL DEFAULT NULL, + status int2 NOT NULL DEFAULT 0, + website varchar(256) NULL DEFAULT '', + package_id int8 NOT NULL, + expire_time timestamp NOT NULL, + account_count int4 NOT NULL, + creator varchar(64) NOT NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_tenant + ADD CONSTRAINT pk_system_tenant PRIMARY KEY (id); + +COMMENT ON COLUMN system_tenant.id IS '租户编号'; +COMMENT ON COLUMN system_tenant.name IS '租户名'; +COMMENT ON COLUMN system_tenant.contact_user_id IS '联系人的用户编号'; +COMMENT ON COLUMN system_tenant.contact_name IS '联系人'; +COMMENT ON COLUMN system_tenant.contact_mobile IS '联系手机'; +COMMENT ON COLUMN system_tenant.status IS '租户状态(0正常 1停用)'; +COMMENT ON COLUMN system_tenant.website IS '绑定域名'; +COMMENT ON COLUMN system_tenant.package_id IS '租户套餐编号'; +COMMENT ON COLUMN system_tenant.expire_time IS '过期时间'; +COMMENT ON COLUMN system_tenant.account_count IS '账号数量'; +COMMENT ON COLUMN system_tenant.creator IS '创建者'; +COMMENT ON COLUMN system_tenant.create_time IS '创建时间'; +COMMENT ON COLUMN system_tenant.updater IS '更新者'; +COMMENT ON COLUMN system_tenant.update_time IS '更新时间'; +COMMENT ON COLUMN system_tenant.deleted IS '是否删除'; +COMMENT ON TABLE system_tenant IS '租户表'; + +-- ---------------------------- +-- Records of system_tenant +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, website, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (1, '芋道源码', NULL, '芋艿', '17321315478', 0, 'www.iocoder.cn', 0, '2099-02-19 17:14:16', 9999, '1', '2021-01-05 17:03:47', '1', '2023-11-06 11:41:41', '0'); +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, website, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (121, '小租户', 110, '小王2', '15601691300', 0, 'zsxq.iocoder.cn', 111, '2024-03-11 00:00:00', 20, '1', '2022-02-22 00:56:14', '1', '2023-11-06 11:41:47', '0'); +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, website, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (122, '测试租户', 113, '芋道', '15601691300', 0, 'test.iocoder.cn', 111, '2022-04-30 00:00:00', 50, '1', '2022-03-07 21:37:58', '1', '2023-11-06 11:41:53', '0'); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_tenant_seq; +CREATE SEQUENCE system_tenant_seq + START 123; + +-- ---------------------------- +-- Table structure for system_tenant_package +-- ---------------------------- +DROP TABLE IF EXISTS system_tenant_package; +CREATE TABLE system_tenant_package +( + id int8 NOT NULL, + name varchar(30) NOT NULL, + status int2 NOT NULL DEFAULT 0, + remark varchar(256) NULL DEFAULT '', + menu_ids varchar(4096) NOT NULL, + creator varchar(64) NOT NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_tenant_package + ADD CONSTRAINT pk_system_tenant_package PRIMARY KEY (id); + +COMMENT ON COLUMN system_tenant_package.id IS '套餐编号'; +COMMENT ON COLUMN system_tenant_package.name IS '套餐名'; +COMMENT ON COLUMN system_tenant_package.status IS '租户状态(0正常 1停用)'; +COMMENT ON COLUMN system_tenant_package.remark IS '备注'; +COMMENT ON COLUMN system_tenant_package.menu_ids IS '关联的菜单编号'; +COMMENT ON COLUMN system_tenant_package.creator IS '创建者'; +COMMENT ON COLUMN system_tenant_package.create_time IS '创建时间'; +COMMENT ON COLUMN system_tenant_package.updater IS '更新者'; +COMMENT ON COLUMN system_tenant_package.update_time IS '更新时间'; +COMMENT ON COLUMN system_tenant_package.deleted IS '是否删除'; +COMMENT ON TABLE system_tenant_package IS '租户套餐表'; + +-- ---------------------------- +-- Records of system_tenant_package +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_tenant_package (id, name, status, remark, menu_ids, creator, create_time, updater, update_time, deleted) VALUES (111, '普通套餐', 0, '小功能', '[1,2,5,1031,1032,1033,1034,1035,1036,1037,1038,1039,1050,1051,1052,1053,1054,1056,1057,1058,1059,1060,1063,1064,1065,1066,1067,1070,1075,1076,1077,1078,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1118,1119,1120,100,101,102,103,106,107,110,111,112,113,1138,114,1139,115,1140,116,1141,1142,1143,2713,2714,2715,2716,2717,2718,2720,1185,2721,1186,2722,1187,2723,1188,2724,1189,2725,1190,2726,1191,2727,2472,1192,2728,1193,2729,1194,2730,1195,2731,1196,2732,1197,2733,2478,1198,2734,2479,1199,2735,2480,1200,2481,1201,2482,1202,2483,2484,2485,2486,2487,1207,2488,1208,2489,1209,2490,1210,2491,1211,2492,1212,2493,1213,2494,2495,1215,1216,2497,1217,1218,1219,1220,1221,1222,1224,1225,1226,1227,1228,1229,1237,1238,1239,1240,1241,1242,1243,2525,1255,1256,1001,1257,1002,1258,1003,1259,1004,1260,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020]', '1', '2022-02-22 00:54:00', '1', '2024-03-30 17:53:17', '0'); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_tenant_package_seq; +CREATE SEQUENCE system_tenant_package_seq + START 112; + +-- ---------------------------- +-- Table structure for system_user_post +-- ---------------------------- +DROP TABLE IF EXISTS system_user_post; +CREATE TABLE system_user_post +( + id int8 NOT NULL, + user_id int8 NOT NULL DEFAULT 0, + post_id int8 NOT NULL DEFAULT 0, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_user_post + ADD CONSTRAINT pk_system_user_post PRIMARY KEY (id); + +COMMENT ON COLUMN system_user_post.id IS 'id'; +COMMENT ON COLUMN system_user_post.user_id IS '用户ID'; +COMMENT ON COLUMN system_user_post.post_id IS '岗位ID'; +COMMENT ON COLUMN system_user_post.creator IS '创建者'; +COMMENT ON COLUMN system_user_post.create_time IS '创建时间'; +COMMENT ON COLUMN system_user_post.updater IS '更新者'; +COMMENT ON COLUMN system_user_post.update_time IS '更新时间'; +COMMENT ON COLUMN system_user_post.deleted IS '是否删除'; +COMMENT ON COLUMN system_user_post.tenant_id IS '租户编号'; +COMMENT ON TABLE system_user_post IS '用户岗位表'; + +-- ---------------------------- +-- Records of system_user_post +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (112, 1, 1, 'admin', '2022-05-02 07:25:24', 'admin', '2022-05-02 07:25:24', '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (113, 100, 1, 'admin', '2022-05-02 07:25:24', 'admin', '2022-05-02 07:25:24', '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (115, 104, 1, '1', '2022-05-16 19:36:28', '1', '2022-05-16 19:36:28', '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (116, 117, 2, '1', '2022-07-09 17:40:26', '1', '2022-07-09 17:40:26', '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (117, 118, 1, '1', '2022-07-09 17:44:44', '1', '2022-07-09 17:44:44', '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (119, 114, 5, '1', '2024-03-24 20:45:51', '1', '2024-03-24 20:45:51', '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (123, 115, 1, '1', '2024-04-04 09:37:14', '1', '2024-04-04 09:37:14', '0', 1); +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (124, 115, 2, '1', '2024-04-04 09:37:14', '1', '2024-04-04 09:37:14', '0', 1); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_user_post_seq; +CREATE SEQUENCE system_user_post_seq + START 125; + +-- ---------------------------- +-- Table structure for system_user_role +-- ---------------------------- +DROP TABLE IF EXISTS system_user_role; +CREATE TABLE system_user_role +( + id int8 NOT NULL, + user_id int8 NOT NULL, + role_id int8 NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_user_role + ADD CONSTRAINT pk_system_user_role PRIMARY KEY (id); + +COMMENT ON COLUMN system_user_role.id IS '自增编号'; +COMMENT ON COLUMN system_user_role.user_id IS '用户ID'; +COMMENT ON COLUMN system_user_role.role_id IS '角色ID'; +COMMENT ON COLUMN system_user_role.creator IS '创建者'; +COMMENT ON COLUMN system_user_role.create_time IS '创建时间'; +COMMENT ON COLUMN system_user_role.updater IS '更新者'; +COMMENT ON COLUMN system_user_role.update_time IS '更新时间'; +COMMENT ON COLUMN system_user_role.deleted IS '是否删除'; +COMMENT ON COLUMN system_user_role.tenant_id IS '租户编号'; +COMMENT ON TABLE system_user_role IS '用户和角色关联表'; + +-- ---------------------------- +-- Records of system_user_role +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, 1, 1, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:17', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 2, 2, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:13', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, 100, 101, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:13', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, 100, 1, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:12', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, 100, 2, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:11', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (10, 103, 1, '1', '2022-01-11 13:19:45', '1', '2022-01-11 13:19:45', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (14, 110, 109, '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', '0', 121); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (15, 111, 110, '110', '2022-02-23 13:14:38', '110', '2022-02-23 13:14:38', '0', 121); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (16, 113, 111, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', '0', 122); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (18, 1, 2, '1', '2022-05-12 20:39:29', '1', '2022-05-12 20:39:29', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (20, 104, 101, '1', '2022-05-28 15:43:57', '1', '2022-05-28 15:43:57', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (22, 115, 2, '1', '2022-07-21 22:08:30', '1', '2022-07-21 22:08:30', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (35, 112, 1, '1', '2024-03-15 20:00:24', '1', '2024-03-15 20:00:24', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (36, 118, 1, '1', '2024-03-17 09:12:08', '1', '2024-03-17 09:12:08', '0', 1); +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (38, 114, 101, '1', '2024-03-24 22:23:03', '1', '2024-03-24 22:23:03', '0', 1); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_user_role_seq; +CREATE SEQUENCE system_user_role_seq + START 39; + +-- ---------------------------- +-- Table structure for system_users +-- ---------------------------- +DROP TABLE IF EXISTS system_users; +CREATE TABLE system_users +( + id int8 NOT NULL, + username varchar(30) NOT NULL, + password varchar(100) NOT NULL DEFAULT '', + nickname varchar(30) NOT NULL, + remark varchar(500) NULL DEFAULT NULL, + dept_id int8 NULL DEFAULT NULL, + post_ids varchar(255) NULL DEFAULT NULL, + email varchar(50) NULL DEFAULT '', + mobile varchar(11) NULL DEFAULT '', + sex int2 NULL DEFAULT 0, + avatar varchar(512) NULL DEFAULT '', + status int2 NOT NULL DEFAULT 0, + login_ip varchar(50) NULL DEFAULT '', + login_date timestamp NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE system_users + ADD CONSTRAINT pk_system_users PRIMARY KEY (id); + +COMMENT ON COLUMN system_users.id IS '用户ID'; +COMMENT ON COLUMN system_users.username IS '用户账号'; +COMMENT ON COLUMN system_users.password IS '密码'; +COMMENT ON COLUMN system_users.nickname IS '用户昵称'; +COMMENT ON COLUMN system_users.remark IS '备注'; +COMMENT ON COLUMN system_users.dept_id IS '部门ID'; +COMMENT ON COLUMN system_users.post_ids IS '岗位编号数组'; +COMMENT ON COLUMN system_users.email IS '用户邮箱'; +COMMENT ON COLUMN system_users.mobile IS '手机号码'; +COMMENT ON COLUMN system_users.sex IS '用户性别'; +COMMENT ON COLUMN system_users.avatar IS '头像地址'; +COMMENT ON COLUMN system_users.status IS '帐号状态(0正常 1停用)'; +COMMENT ON COLUMN system_users.login_ip IS '最后登录IP'; +COMMENT ON COLUMN system_users.login_date IS '最后登录时间'; +COMMENT ON COLUMN system_users.creator IS '创建者'; +COMMENT ON COLUMN system_users.create_time IS '创建时间'; +COMMENT ON COLUMN system_users.updater IS '更新者'; +COMMENT ON COLUMN system_users.update_time IS '更新时间'; +COMMENT ON COLUMN system_users.deleted IS '是否删除'; +COMMENT ON COLUMN system_users.tenant_id IS '租户编号'; +COMMENT ON TABLE system_users IS '用户信息表'; + +-- ---------------------------- +-- Records of system_users +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, 'admin', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '18818260277', 2, 'http://test.win.iocoder.cn/96c787a2ce88bf6d0ce3cd8b6cf5314e80e7703cd41bf4af8cd2e2909dbd6b6d.png', 0, '0:0:0:0:0:0:0:1', '2024-04-29 21:50:32', 'admin', '2021-01-05 17:03:47', NULL, '2024-04-29 21:50:32', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (100, 'win', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', 104, '[1]', 'win@iocoder.cn', '15601691300', 1, '', 1, '127.0.0.1', '2022-07-09 23:03:33', '', '2021-01-07 09:07:17', NULL, '2022-07-09 23:03:33', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (103, 'yuanma', '$2a$10$YMpimV4T6BtDhIaA8jSW.u8UTGBeGhc/qwXP4oxoMr4mOw9.qttt6', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '0:0:0:0:0:0:0:1', '2024-03-18 21:09:04', '', '2021-01-13 23:50:35', NULL, '2024-03-18 21:09:04', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (104, 'test', '$2a$04$KhExCYl7lx6eWWZYKsibKOZ8IBJRyuNuCcEOLQ11RYhJKgHmlSwK.', '测试号', NULL, 107, '[1,2]', '111@qq.com', '15601691200', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-26 07:11:35', '', '2021-01-21 02:13:53', NULL, '2024-03-26 07:11:35', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (107, 'admin107', '$2a$10$dYOOBKMO93v/.ReCqzyFg.o67Tqk.bbc2bhrpyBGkIw9aypCtr2pm', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 22:59:33', '1', '2022-02-27 08:26:51', '0', 118); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (108, 'admin108', '$2a$10$y6mfvKoNYL1GXWak8nYwVOH.kCWqjactkzdoIDgiKl93WN3Ejg.Lu', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:00:50', '1', '2022-02-27 08:26:53', '0', 119); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (109, 'admin109', '$2a$10$JAqvH0tEc0I7dfDVBI7zyuB4E3j.uH6daIjV53.vUS6PknFkDJkuK', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:11:50', '1', '2022-02-27 08:26:56', '0', 120); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (110, 'admin110', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '小王', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-09-25 22:47:33', '1', '2022-02-22 00:56:14', NULL, '2022-09-25 22:47:33', '0', 121); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (111, 'test', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '测试用户', NULL, NULL, '[]', '', '', 0, '', 0, '0:0:0:0:0:0:0:1', '2023-12-30 11:42:17', '110', '2022-02-23 13:14:33', NULL, '2023-12-30 11:42:17', '0', 121); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (112, 'newobject', '$2a$04$dB0z8Q819fJWz0hbaLe6B.VfHCjYgWx6LFfET5lyz3JwcqlyCkQ4C', '新对象', NULL, 100, '[]', '', '15601691235', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-16 23:11:38', '1', '2022-02-23 19:08:03', NULL, '2024-03-16 23:11:38', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (113, 'aoteman', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-03-19 18:38:51', '1', '2022-03-07 21:37:58', NULL, '2022-03-19 18:38:51', '0', 122); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (114, 'hrmgr', '$2a$10$TR4eybBioGRhBmDBWkqWLO6NIh3mzYa8KBKDDB5woiGYFVlRAi.fu', 'hr 小姐姐', NULL, NULL, '[5]', '', '15601691236', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-24 22:21:05', '1', '2022-03-19 21:50:58', NULL, '2024-03-24 22:21:05', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (115, 'aotemane', '$2a$04$GcyP0Vyzb2F2Yni5PuIK9ueGxM0tkZGMtDwVRwrNbtMvorzbpNsV2', '阿呆', '11222', 102, '[1,2]', '7648@qq.com', '15601691229', 2, '', 0, '', NULL, '1', '2022-04-30 02:55:43', '1', '2024-04-04 09:37:14', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (117, 'admin123', '$2a$10$WI8Gg/lpZQIrOEZMHqka7OdFaD4Nx.B/qY8ZGTTUKrOJwaHFqibaC', '测试号', '1111', 100, '[2]', '', '15601691234', 1, '', 0, '', NULL, '1', '2022-07-09 17:40:26', '1', '2022-07-09 17:40:26', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (118, 'goudan', '$2a$04$OB1SuphCdiLVRpiYRKeqH.8NYS7UIp5vmIv1W7U4w6toiFeOAATVK', '狗蛋', NULL, 103, '[1]', '', '15601691239', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-17 09:10:27', '1', '2022-07-09 17:44:43', '1', '2024-04-04 09:48:05', '0', 1); +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (131, 'hh', '$2a$04$jyH9h6.gaw8mpOjPfHIpx.8as2Rzfcmdlj5rlJFwgCw4rsv/MTb2K', '呵呵', NULL, 100, '[]', '777@qq.com', '15601882312', 1, '', 0, '', NULL, '1', '2024-04-27 08:45:56', '1', '2024-04-27 08:45:56', '0', 1); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS system_users_seq; +CREATE SEQUENCE system_users_seq + START 132; + +-- ---------------------------- +-- Table structure for win_demo01_contact +-- ---------------------------- +DROP TABLE IF EXISTS win_demo01_contact; +CREATE TABLE win_demo01_contact +( + id int8 NOT NULL, + name varchar(100) NOT NULL DEFAULT '', + sex int2 NOT NULL, + birthday timestamp NOT NULL, + description varchar(255) NOT NULL, + avatar varchar(512) NULL DEFAULT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE win_demo01_contact + ADD CONSTRAINT pk_win_demo01_contact PRIMARY KEY (id); + +COMMENT ON COLUMN win_demo01_contact.id IS '编号'; +COMMENT ON COLUMN win_demo01_contact.name IS '名字'; +COMMENT ON COLUMN win_demo01_contact.sex IS '性别'; +COMMENT ON COLUMN win_demo01_contact.birthday IS '出生年'; +COMMENT ON COLUMN win_demo01_contact.description IS '简介'; +COMMENT ON COLUMN win_demo01_contact.avatar IS '头像'; +COMMENT ON COLUMN win_demo01_contact.creator IS '创建者'; +COMMENT ON COLUMN win_demo01_contact.create_time IS '创建时间'; +COMMENT ON COLUMN win_demo01_contact.updater IS '更新者'; +COMMENT ON COLUMN win_demo01_contact.update_time IS '更新时间'; +COMMENT ON COLUMN win_demo01_contact.deleted IS '是否删除'; +COMMENT ON COLUMN win_demo01_contact.tenant_id IS '租户编号'; +COMMENT ON TABLE win_demo01_contact IS '示例联系人表'; + +-- ---------------------------- +-- Records of win_demo01_contact +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO win_demo01_contact (id, name, sex, birthday, description, avatar, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '土豆', 2, '2023-11-07 00:00:00', '

    天蚕土豆!呀

    ', 'http://127.0.0.1:48080/admin-api/infra/file/4/get/46f8fa1a37db3f3960d8910ff2fe3962ab3b2db87cf2f8ccb4dc8145b8bdf237.jpeg', '1', '2023-11-15 23:34:30', '1', '2023-11-15 23:47:39', '0', 1); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS win_demo01_contact_seq; +CREATE SEQUENCE win_demo01_contact_seq + START 2; + +-- ---------------------------- +-- Table structure for win_demo02_category +-- ---------------------------- +DROP TABLE IF EXISTS win_demo02_category; +CREATE TABLE win_demo02_category +( + id int8 NOT NULL, + name varchar(100) NOT NULL DEFAULT '', + parent_id int8 NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE win_demo02_category + ADD CONSTRAINT pk_win_demo02_category PRIMARY KEY (id); + +COMMENT ON COLUMN win_demo02_category.id IS '编号'; +COMMENT ON COLUMN win_demo02_category.name IS '名字'; +COMMENT ON COLUMN win_demo02_category.parent_id IS '父级编号'; +COMMENT ON COLUMN win_demo02_category.creator IS '创建者'; +COMMENT ON COLUMN win_demo02_category.create_time IS '创建时间'; +COMMENT ON COLUMN win_demo02_category.updater IS '更新者'; +COMMENT ON COLUMN win_demo02_category.update_time IS '更新时间'; +COMMENT ON COLUMN win_demo02_category.deleted IS '是否删除'; +COMMENT ON COLUMN win_demo02_category.tenant_id IS '租户编号'; +COMMENT ON TABLE win_demo02_category IS '示例分类表'; + +-- ---------------------------- +-- Records of win_demo02_category +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, '土豆', 0, '1', '2023-11-15 23:34:30', '1', '2023-11-16 20:24:23', '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '番茄', 0, '1', '2023-11-16 20:24:00', '1', '2023-11-16 20:24:15', '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, '怪怪', 0, '1', '2023-11-16 20:24:32', '1', '2023-11-16 20:24:32', '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, '小番茄', 2, '1', '2023-11-16 20:24:39', '1', '2023-11-16 20:24:39', '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, '大番茄', 2, '1', '2023-11-16 20:24:46', '1', '2023-11-16 20:24:46', '0', 1); +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, '11', 3, '1', '2023-11-24 19:29:34', '1', '2023-11-24 19:29:34', '0', 1); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS win_demo02_category_seq; +CREATE SEQUENCE win_demo02_category_seq + START 7; + +-- ---------------------------- +-- Table structure for win_demo03_course +-- ---------------------------- +DROP TABLE IF EXISTS win_demo03_course; +CREATE TABLE win_demo03_course +( + id int8 NOT NULL, + student_id int8 NOT NULL, + name varchar(100) NOT NULL DEFAULT '', + score int2 NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE win_demo03_course + ADD CONSTRAINT pk_win_demo03_course PRIMARY KEY (id); + +COMMENT ON COLUMN win_demo03_course.id IS '编号'; +COMMENT ON COLUMN win_demo03_course.student_id IS '学生编号'; +COMMENT ON COLUMN win_demo03_course.name IS '名字'; +COMMENT ON COLUMN win_demo03_course.score IS '分数'; +COMMENT ON COLUMN win_demo03_course.creator IS '创建者'; +COMMENT ON COLUMN win_demo03_course.create_time IS '创建时间'; +COMMENT ON COLUMN win_demo03_course.updater IS '更新者'; +COMMENT ON COLUMN win_demo03_course.update_time IS '更新时间'; +COMMENT ON COLUMN win_demo03_course.deleted IS '是否删除'; +COMMENT ON COLUMN win_demo03_course.tenant_id IS '租户编号'; +COMMENT ON TABLE win_demo03_course IS '学生课程表'; + +-- ---------------------------- +-- Records of win_demo03_course +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 2, '语文', 66, '1', '2023-11-16 23:21:49', '1', '2023-11-16 23:21:49', '0', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, 2, '数学', 22, '1', '2023-11-16 23:21:49', '1', '2023-11-16 23:21:49', '0', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, 5, '体育', 23, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:44:40', '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (7, 5, '计算机', 11, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:44:40', '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (8, 5, '体育', 23, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:47:09', '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, 5, '计算机', 11, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:47:09', '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (10, 5, '体育', 23, '1', '2023-11-16 23:22:46', '1', '2023-11-16 23:47:10', '0', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (11, 5, '计算机', 11, '1', '2023-11-16 23:22:46', '1', '2023-11-16 23:47:10', '0', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (12, 2, '电脑', 33, '1', '2023-11-17 00:20:42', '1', '2023-11-16 16:20:45', '1', 1); +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (13, 9, '滑雪', 12, '1', '2023-11-17 13:13:20', '1', '2023-11-17 13:13:20', '0', 1); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS win_demo03_course_seq; +CREATE SEQUENCE win_demo03_course_seq + START 14; + +-- ---------------------------- +-- Table structure for win_demo03_grade +-- ---------------------------- +DROP TABLE IF EXISTS win_demo03_grade; +CREATE TABLE win_demo03_grade +( + id int8 NOT NULL, + student_id int8 NOT NULL, + name varchar(100) NOT NULL DEFAULT '', + teacher varchar(255) NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE win_demo03_grade + ADD CONSTRAINT pk_win_demo03_grade PRIMARY KEY (id); + +COMMENT ON COLUMN win_demo03_grade.id IS '编号'; +COMMENT ON COLUMN win_demo03_grade.student_id IS '学生编号'; +COMMENT ON COLUMN win_demo03_grade.name IS '名字'; +COMMENT ON COLUMN win_demo03_grade.teacher IS '班主任'; +COMMENT ON COLUMN win_demo03_grade.creator IS '创建者'; +COMMENT ON COLUMN win_demo03_grade.create_time IS '创建时间'; +COMMENT ON COLUMN win_demo03_grade.updater IS '更新者'; +COMMENT ON COLUMN win_demo03_grade.update_time IS '更新时间'; +COMMENT ON COLUMN win_demo03_grade.deleted IS '是否删除'; +COMMENT ON COLUMN win_demo03_grade.tenant_id IS '租户编号'; +COMMENT ON TABLE win_demo03_grade IS '学生班级表'; + +-- ---------------------------- +-- Records of win_demo03_grade +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO win_demo03_grade (id, student_id, name, teacher, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (7, 2, '三年 2 班', '周杰伦', '1', '2023-11-16 23:21:49', '1', '2023-11-16 23:21:49', '0', 1); +INSERT INTO win_demo03_grade (id, student_id, name, teacher, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (8, 5, '华为', '遥遥领先', '1', '2023-11-16 23:22:46', '1', '2023-11-16 23:47:10', '0', 1); +INSERT INTO win_demo03_grade (id, student_id, name, teacher, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, 9, '小图', '小娃111', '1', '2023-11-17 13:10:23', '1', '2023-11-17 13:10:23', '0', 1); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS win_demo03_grade_seq; +CREATE SEQUENCE win_demo03_grade_seq + START 10; + +-- ---------------------------- +-- Table structure for win_demo03_student +-- ---------------------------- +DROP TABLE IF EXISTS win_demo03_student; +CREATE TABLE win_demo03_student +( + id int8 NOT NULL, + name varchar(100) NOT NULL DEFAULT '', + sex int2 NOT NULL, + birthday timestamp NOT NULL, + description varchar(255) NOT NULL, + creator varchar(64) NULL DEFAULT '', + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater varchar(64) NULL DEFAULT '', + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted int2 NOT NULL DEFAULT 0, + tenant_id int8 NOT NULL DEFAULT 0 +); + +ALTER TABLE win_demo03_student + ADD CONSTRAINT pk_win_demo03_student PRIMARY KEY (id); + +COMMENT ON COLUMN win_demo03_student.id IS '编号'; +COMMENT ON COLUMN win_demo03_student.name IS '名字'; +COMMENT ON COLUMN win_demo03_student.sex IS '性别'; +COMMENT ON COLUMN win_demo03_student.birthday IS '出生日期'; +COMMENT ON COLUMN win_demo03_student.description IS '简介'; +COMMENT ON COLUMN win_demo03_student.creator IS '创建者'; +COMMENT ON COLUMN win_demo03_student.create_time IS '创建时间'; +COMMENT ON COLUMN win_demo03_student.updater IS '更新者'; +COMMENT ON COLUMN win_demo03_student.update_time IS '更新时间'; +COMMENT ON COLUMN win_demo03_student.deleted IS '是否删除'; +COMMENT ON COLUMN win_demo03_student.tenant_id IS '租户编号'; +COMMENT ON TABLE win_demo03_student IS '学生表'; + +-- ---------------------------- +-- Records of win_demo03_student +-- ---------------------------- +-- @formatter:off +BEGIN; +INSERT INTO win_demo03_student (id, name, sex, birthday, description, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, '小白', 1, '2023-11-16 00:00:00', '

    厉害

    ', '1', '2023-11-16 23:21:49', '1', '2023-11-17 16:49:06', '0', 1); +INSERT INTO win_demo03_student (id, name, sex, birthday, description, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, '大黑', 2, '2023-11-13 00:00:00', '

    你在教我做事?

    ', '1', '2023-11-16 23:22:46', '1', '2023-11-17 16:49:07', '0', 1); +INSERT INTO win_demo03_student (id, name, sex, birthday, description, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, '小花', 1, '2023-11-07 00:00:00', '

    哈哈哈

    ', '1', '2023-11-17 00:04:47', '1', '2023-11-17 16:49:08', '0', 1); +COMMIT; +-- @formatter:on + +DROP SEQUENCE IF EXISTS win_demo03_student_seq; +CREATE SEQUENCE win_demo03_student_seq + START 10; + diff --git a/sql/postgresql/win-initdb-20240806.sql b/sql/postgresql/win-initdb-20240806.sql new file mode 100644 index 0000000..8671a1b --- /dev/null +++ b/sql/postgresql/win-initdb-20240806.sql @@ -0,0 +1,5202 @@ +/* + Navicat Premium Data Transfer + + Source Server : local_pg + Source Server Type : PostgreSQL + Source Server Version : 160003 + Source Host : localhost:5432 + Source Catalog : huaxiang-cloud-dev + Source Schema : public + + Target Server Type : PostgreSQL + Target Server Version : 160003 + File Encoding : 65001 + + Date: 06/08/2024 16:52:49 +*/ + + +-- ---------------------------- +-- Sequence structure for infra_api_access_log_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."infra_api_access_log_seq"; +CREATE SEQUENCE "public"."infra_api_access_log_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for infra_api_error_log_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."infra_api_error_log_seq"; +CREATE SEQUENCE "public"."infra_api_error_log_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for infra_codegen_column_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."infra_codegen_column_seq"; +CREATE SEQUENCE "public"."infra_codegen_column_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for infra_codegen_table_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."infra_codegen_table_seq"; +CREATE SEQUENCE "public"."infra_codegen_table_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for infra_config_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."infra_config_seq"; +CREATE SEQUENCE "public"."infra_config_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 13 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for infra_data_source_config_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."infra_data_source_config_seq"; +CREATE SEQUENCE "public"."infra_data_source_config_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for infra_file_config_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."infra_file_config_seq"; +CREATE SEQUENCE "public"."infra_file_config_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 23 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for infra_file_content_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."infra_file_content_seq"; +CREATE SEQUENCE "public"."infra_file_content_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for infra_file_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."infra_file_seq"; +CREATE SEQUENCE "public"."infra_file_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for infra_job_log_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."infra_job_log_seq"; +CREATE SEQUENCE "public"."infra_job_log_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for infra_job_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."infra_job_seq"; +CREATE SEQUENCE "public"."infra_job_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 28 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_dept_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_dept_seq"; +CREATE SEQUENCE "public"."system_dept_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 114 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_dict_data_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_dict_data_seq"; +CREATE SEQUENCE "public"."system_dict_data_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1537 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_dict_type_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_dict_type_seq"; +CREATE SEQUENCE "public"."system_dict_type_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 620 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_login_log_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_login_log_seq"; +CREATE SEQUENCE "public"."system_login_log_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_mail_account_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_mail_account_seq"; +CREATE SEQUENCE "public"."system_mail_account_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 5 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_mail_log_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_mail_log_seq"; +CREATE SEQUENCE "public"."system_mail_log_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_mail_template_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_mail_template_seq"; +CREATE SEQUENCE "public"."system_mail_template_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 16 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_menu_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_menu_seq"; +CREATE SEQUENCE "public"."system_menu_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 2758 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_notice_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_notice_seq"; +CREATE SEQUENCE "public"."system_notice_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 5 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_notify_message_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_notify_message_seq"; +CREATE SEQUENCE "public"."system_notify_message_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 11 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_notify_template_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_notify_template_seq"; +CREATE SEQUENCE "public"."system_notify_template_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_oauth2_access_token_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_oauth2_access_token_seq"; +CREATE SEQUENCE "public"."system_oauth2_access_token_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_oauth2_approve_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_oauth2_approve_seq"; +CREATE SEQUENCE "public"."system_oauth2_approve_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_oauth2_client_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_oauth2_client_seq"; +CREATE SEQUENCE "public"."system_oauth2_client_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 43 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_oauth2_code_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_oauth2_code_seq"; +CREATE SEQUENCE "public"."system_oauth2_code_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_oauth2_refresh_token_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_oauth2_refresh_token_seq"; +CREATE SEQUENCE "public"."system_oauth2_refresh_token_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_operate_log_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_operate_log_seq"; +CREATE SEQUENCE "public"."system_operate_log_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_post_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_post_seq"; +CREATE SEQUENCE "public"."system_post_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 6 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_role_menu_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_role_menu_seq"; +CREATE SEQUENCE "public"."system_role_menu_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 5779 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_role_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_role_seq"; +CREATE SEQUENCE "public"."system_role_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 112 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_sms_channel_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_sms_channel_seq"; +CREATE SEQUENCE "public"."system_sms_channel_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 7 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_sms_code_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_sms_code_seq"; +CREATE SEQUENCE "public"."system_sms_code_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_sms_log_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_sms_log_seq"; +CREATE SEQUENCE "public"."system_sms_log_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_sms_template_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_sms_template_seq"; +CREATE SEQUENCE "public"."system_sms_template_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 17 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_social_client_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_social_client_seq"; +CREATE SEQUENCE "public"."system_social_client_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 44 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_social_user_bind_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_social_user_bind_seq"; +CREATE SEQUENCE "public"."system_social_user_bind_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_social_user_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_social_user_seq"; +CREATE SEQUENCE "public"."system_social_user_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 1 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_tenant_package_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_tenant_package_seq"; +CREATE SEQUENCE "public"."system_tenant_package_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 112 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_tenant_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_tenant_seq"; +CREATE SEQUENCE "public"."system_tenant_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 123 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_user_post_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_user_post_seq"; +CREATE SEQUENCE "public"."system_user_post_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 125 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_user_role_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_user_role_seq"; +CREATE SEQUENCE "public"."system_user_role_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 39 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for system_users_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."system_users_seq"; +CREATE SEQUENCE "public"."system_users_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 132 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for win_demo01_contact_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."win_demo01_contact_seq"; +CREATE SEQUENCE "public"."win_demo01_contact_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 2 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for win_demo02_category_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."win_demo02_category_seq"; +CREATE SEQUENCE "public"."win_demo02_category_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 7 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for win_demo03_course_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."win_demo03_course_seq"; +CREATE SEQUENCE "public"."win_demo03_course_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 14 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for win_demo03_grade_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."win_demo03_grade_seq"; +CREATE SEQUENCE "public"."win_demo03_grade_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 10 +CACHE 1; + +-- ---------------------------- +-- Sequence structure for win_demo03_student_seq +-- ---------------------------- +DROP SEQUENCE IF EXISTS "public"."win_demo03_student_seq"; +CREATE SEQUENCE "public"."win_demo03_student_seq" +INCREMENT 1 +MINVALUE 1 +MAXVALUE 9223372036854775807 +START 10 +CACHE 1; + +-- ---------------------------- +-- Table structure for dual +-- ---------------------------- +DROP TABLE IF EXISTS "public"."dual"; +CREATE TABLE "public"."dual" ( + +) +; + +-- ---------------------------- +-- Records of dual +-- ---------------------------- + +-- ---------------------------- +-- Table structure for infra_api_access_log +-- ---------------------------- +DROP TABLE IF EXISTS "public"."infra_api_access_log"; +CREATE TABLE "public"."infra_api_access_log" ( + "id" int8 NOT NULL, + "trace_id" varchar(64) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "user_id" int8 NOT NULL DEFAULT 0, + "user_type" int2 NOT NULL DEFAULT 0, + "application_name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "request_method" varchar(16) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "request_url" varchar(255) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "request_params" text COLLATE "pg_catalog"."default", + "response_body" text COLLATE "pg_catalog"."default", + "user_ip" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "user_agent" varchar(512) COLLATE "pg_catalog"."default" NOT NULL, + "operate_module" varchar(50) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "operate_name" varchar(50) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "operate_type" int2 DEFAULT 0, + "begin_time" timestamp(6) NOT NULL, + "end_time" timestamp(6) NOT NULL, + "duration" int4 NOT NULL, + "result_code" int4 NOT NULL DEFAULT 0, + "result_msg" varchar(512) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."infra_api_access_log"."id" IS '日志主键'; +COMMENT ON COLUMN "public"."infra_api_access_log"."trace_id" IS '链路追踪编号'; +COMMENT ON COLUMN "public"."infra_api_access_log"."user_id" IS '用户编号'; +COMMENT ON COLUMN "public"."infra_api_access_log"."user_type" IS '用户类型'; +COMMENT ON COLUMN "public"."infra_api_access_log"."application_name" IS '应用名'; +COMMENT ON COLUMN "public"."infra_api_access_log"."request_method" IS '请求方法名'; +COMMENT ON COLUMN "public"."infra_api_access_log"."request_url" IS '请求地址'; +COMMENT ON COLUMN "public"."infra_api_access_log"."request_params" IS '请求参数'; +COMMENT ON COLUMN "public"."infra_api_access_log"."response_body" IS '响应结果'; +COMMENT ON COLUMN "public"."infra_api_access_log"."user_ip" IS '用户 IP'; +COMMENT ON COLUMN "public"."infra_api_access_log"."user_agent" IS '浏览器 UA'; +COMMENT ON COLUMN "public"."infra_api_access_log"."operate_module" IS '操作模块'; +COMMENT ON COLUMN "public"."infra_api_access_log"."operate_name" IS '操作名'; +COMMENT ON COLUMN "public"."infra_api_access_log"."operate_type" IS '操作分类'; +COMMENT ON COLUMN "public"."infra_api_access_log"."begin_time" IS '开始请求时间'; +COMMENT ON COLUMN "public"."infra_api_access_log"."end_time" IS '结束请求时间'; +COMMENT ON COLUMN "public"."infra_api_access_log"."duration" IS '执行时长'; +COMMENT ON COLUMN "public"."infra_api_access_log"."result_code" IS '结果码'; +COMMENT ON COLUMN "public"."infra_api_access_log"."result_msg" IS '结果提示'; +COMMENT ON COLUMN "public"."infra_api_access_log"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."infra_api_access_log"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."infra_api_access_log"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."infra_api_access_log"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."infra_api_access_log"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."infra_api_access_log"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."infra_api_access_log" IS 'API 访问日志表'; + +-- ---------------------------- +-- Records of infra_api_access_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for infra_api_error_log +-- ---------------------------- +DROP TABLE IF EXISTS "public"."infra_api_error_log"; +CREATE TABLE "public"."infra_api_error_log" ( + "id" int4 NOT NULL, + "trace_id" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "user_id" int4 NOT NULL DEFAULT 0, + "user_type" int2 NOT NULL DEFAULT 0, + "application_name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "request_method" varchar(16) COLLATE "pg_catalog"."default" NOT NULL, + "request_url" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "request_params" varchar(8000) COLLATE "pg_catalog"."default" NOT NULL, + "user_ip" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "user_agent" varchar(512) COLLATE "pg_catalog"."default" NOT NULL, + "exception_time" timestamp(6) NOT NULL, + "exception_name" varchar(128) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "exception_message" text COLLATE "pg_catalog"."default" NOT NULL, + "exception_root_cause_message" text COLLATE "pg_catalog"."default" NOT NULL, + "exception_stack_trace" text COLLATE "pg_catalog"."default" NOT NULL, + "exception_class_name" varchar(512) COLLATE "pg_catalog"."default" NOT NULL, + "exception_file_name" varchar(512) COLLATE "pg_catalog"."default" NOT NULL, + "exception_method_name" varchar(512) COLLATE "pg_catalog"."default" NOT NULL, + "exception_line_number" int4 NOT NULL, + "process_status" int2 NOT NULL, + "process_time" timestamp(6), + "process_user_id" int4 DEFAULT 0, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."infra_api_error_log"."id" IS '编号'; +COMMENT ON COLUMN "public"."infra_api_error_log"."trace_id" IS '链路追踪编号 + * + * 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。'; +COMMENT ON COLUMN "public"."infra_api_error_log"."user_id" IS '用户编号'; +COMMENT ON COLUMN "public"."infra_api_error_log"."user_type" IS '用户类型'; +COMMENT ON COLUMN "public"."infra_api_error_log"."application_name" IS '应用名 + * + * 目前读取 spring.application.name'; +COMMENT ON COLUMN "public"."infra_api_error_log"."request_method" IS '请求方法名'; +COMMENT ON COLUMN "public"."infra_api_error_log"."request_url" IS '请求地址'; +COMMENT ON COLUMN "public"."infra_api_error_log"."request_params" IS '请求参数'; +COMMENT ON COLUMN "public"."infra_api_error_log"."user_ip" IS '用户 IP'; +COMMENT ON COLUMN "public"."infra_api_error_log"."user_agent" IS '浏览器 UA'; +COMMENT ON COLUMN "public"."infra_api_error_log"."exception_time" IS '异常发生时间'; +COMMENT ON COLUMN "public"."infra_api_error_log"."exception_name" IS '异常名 + * + * {@link Throwable#getClass()} 的类全名'; +COMMENT ON COLUMN "public"."infra_api_error_log"."exception_message" IS '异常导致的消息 + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getMessage(Throwable)}'; +COMMENT ON COLUMN "public"."infra_api_error_log"."exception_root_cause_message" IS '异常导致的根消息 + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getRootCauseMessage(Throwable)}'; +COMMENT ON COLUMN "public"."infra_api_error_log"."exception_stack_trace" IS '异常的栈轨迹 + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getServiceException(Exception)}'; +COMMENT ON COLUMN "public"."infra_api_error_log"."exception_class_name" IS '异常发生的类全名 + * + * {@link StackTraceElement#getClassName()}'; +COMMENT ON COLUMN "public"."infra_api_error_log"."exception_file_name" IS '异常发生的类文件 + * + * {@link StackTraceElement#getFileName()}'; +COMMENT ON COLUMN "public"."infra_api_error_log"."exception_method_name" IS '异常发生的方法名 + * + * {@link StackTraceElement#getMethodName()}'; +COMMENT ON COLUMN "public"."infra_api_error_log"."exception_line_number" IS '异常发生的方法所在行 + * + * {@link StackTraceElement#getLineNumber()}'; +COMMENT ON COLUMN "public"."infra_api_error_log"."process_status" IS '处理状态'; +COMMENT ON COLUMN "public"."infra_api_error_log"."process_time" IS '处理时间'; +COMMENT ON COLUMN "public"."infra_api_error_log"."process_user_id" IS '处理用户编号'; +COMMENT ON COLUMN "public"."infra_api_error_log"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."infra_api_error_log"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."infra_api_error_log"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."infra_api_error_log"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."infra_api_error_log"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."infra_api_error_log"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."infra_api_error_log" IS '系统异常日志'; + +-- ---------------------------- +-- Records of infra_api_error_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for infra_codegen_column +-- ---------------------------- +DROP TABLE IF EXISTS "public"."infra_codegen_column"; +CREATE TABLE "public"."infra_codegen_column" ( + "id" int8 NOT NULL, + "table_id" int8 NOT NULL, + "column_name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "data_type" varchar(100) COLLATE "pg_catalog"."default" NOT NULL, + "column_comment" varchar(500) COLLATE "pg_catalog"."default" NOT NULL, + "nullable" bool NOT NULL, + "primary_key" bool NOT NULL, + "ordinal_position" int4 NOT NULL, + "java_type" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, + "java_field" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "dict_type" varchar(200) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "example" varchar(64) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "create_operation" bool NOT NULL, + "update_operation" bool NOT NULL, + "list_operation" bool NOT NULL, + "list_operation_condition" varchar(32) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '='::character varying, + "list_operation_result" bool NOT NULL, + "html_type" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."infra_codegen_column"."id" IS '编号'; +COMMENT ON COLUMN "public"."infra_codegen_column"."table_id" IS '表编号'; +COMMENT ON COLUMN "public"."infra_codegen_column"."column_name" IS '字段名'; +COMMENT ON COLUMN "public"."infra_codegen_column"."data_type" IS '字段类型'; +COMMENT ON COLUMN "public"."infra_codegen_column"."column_comment" IS '字段描述'; +COMMENT ON COLUMN "public"."infra_codegen_column"."nullable" IS '是否允许为空'; +COMMENT ON COLUMN "public"."infra_codegen_column"."primary_key" IS '是否主键'; +COMMENT ON COLUMN "public"."infra_codegen_column"."ordinal_position" IS '排序'; +COMMENT ON COLUMN "public"."infra_codegen_column"."java_type" IS 'Java 属性类型'; +COMMENT ON COLUMN "public"."infra_codegen_column"."java_field" IS 'Java 属性名'; +COMMENT ON COLUMN "public"."infra_codegen_column"."dict_type" IS '字典类型'; +COMMENT ON COLUMN "public"."infra_codegen_column"."example" IS '数据示例'; +COMMENT ON COLUMN "public"."infra_codegen_column"."create_operation" IS '是否为 Create 创建操作的字段'; +COMMENT ON COLUMN "public"."infra_codegen_column"."update_operation" IS '是否为 Update 更新操作的字段'; +COMMENT ON COLUMN "public"."infra_codegen_column"."list_operation" IS '是否为 List 查询操作的字段'; +COMMENT ON COLUMN "public"."infra_codegen_column"."list_operation_condition" IS 'List 查询操作的条件类型'; +COMMENT ON COLUMN "public"."infra_codegen_column"."list_operation_result" IS '是否为 List 查询操作的返回字段'; +COMMENT ON COLUMN "public"."infra_codegen_column"."html_type" IS '显示类型'; +COMMENT ON COLUMN "public"."infra_codegen_column"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."infra_codegen_column"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."infra_codegen_column"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."infra_codegen_column"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."infra_codegen_column"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."infra_codegen_column" IS '代码生成表字段定义'; + +-- ---------------------------- +-- Records of infra_codegen_column +-- ---------------------------- + +-- ---------------------------- +-- Table structure for infra_codegen_table +-- ---------------------------- +DROP TABLE IF EXISTS "public"."infra_codegen_table"; +CREATE TABLE "public"."infra_codegen_table" ( + "id" int8 NOT NULL, + "data_source_config_id" int8 NOT NULL, + "scene" int2 NOT NULL DEFAULT 1, + "table_name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "table_comment" varchar(500) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "remark" varchar(500) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "module_name" varchar(30) COLLATE "pg_catalog"."default" NOT NULL, + "business_name" varchar(30) COLLATE "pg_catalog"."default" NOT NULL, + "class_name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "class_comment" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "author" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "template_type" int2 NOT NULL DEFAULT 1, + "front_type" int2 NOT NULL, + "parent_menu_id" int8, + "master_table_id" int8, + "sub_join_column_id" int8, + "sub_join_many" bool, + "tree_parent_column_id" int8, + "tree_name_column_id" int8, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."infra_codegen_table"."id" IS '编号'; +COMMENT ON COLUMN "public"."infra_codegen_table"."data_source_config_id" IS '数据源配置的编号'; +COMMENT ON COLUMN "public"."infra_codegen_table"."scene" IS '生成场景'; +COMMENT ON COLUMN "public"."infra_codegen_table"."table_name" IS '表名称'; +COMMENT ON COLUMN "public"."infra_codegen_table"."table_comment" IS '表描述'; +COMMENT ON COLUMN "public"."infra_codegen_table"."remark" IS '备注'; +COMMENT ON COLUMN "public"."infra_codegen_table"."module_name" IS '模块名'; +COMMENT ON COLUMN "public"."infra_codegen_table"."business_name" IS '业务名'; +COMMENT ON COLUMN "public"."infra_codegen_table"."class_name" IS '类名称'; +COMMENT ON COLUMN "public"."infra_codegen_table"."class_comment" IS '类描述'; +COMMENT ON COLUMN "public"."infra_codegen_table"."author" IS '作者'; +COMMENT ON COLUMN "public"."infra_codegen_table"."template_type" IS '模板类型'; +COMMENT ON COLUMN "public"."infra_codegen_table"."front_type" IS '前端类型'; +COMMENT ON COLUMN "public"."infra_codegen_table"."parent_menu_id" IS '父菜单编号'; +COMMENT ON COLUMN "public"."infra_codegen_table"."master_table_id" IS '主表的编号'; +COMMENT ON COLUMN "public"."infra_codegen_table"."sub_join_column_id" IS '子表关联主表的字段编号'; +COMMENT ON COLUMN "public"."infra_codegen_table"."sub_join_many" IS '主表与子表是否一对多'; +COMMENT ON COLUMN "public"."infra_codegen_table"."tree_parent_column_id" IS '树表的父字段编号'; +COMMENT ON COLUMN "public"."infra_codegen_table"."tree_name_column_id" IS '树表的名字字段编号'; +COMMENT ON COLUMN "public"."infra_codegen_table"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."infra_codegen_table"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."infra_codegen_table"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."infra_codegen_table"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."infra_codegen_table"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."infra_codegen_table" IS '代码生成表定义'; + +-- ---------------------------- +-- Records of infra_codegen_table +-- ---------------------------- + +-- ---------------------------- +-- Table structure for infra_config +-- ---------------------------- +DROP TABLE IF EXISTS "public"."infra_config"; +CREATE TABLE "public"."infra_config" ( + "id" int4 NOT NULL, + "category" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "type" int2 NOT NULL, + "name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "config_key" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "value" varchar(500) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "visible" bool NOT NULL, + "remark" varchar(500) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."infra_config"."id" IS '参数主键'; +COMMENT ON COLUMN "public"."infra_config"."category" IS '参数分组'; +COMMENT ON COLUMN "public"."infra_config"."type" IS '参数类型'; +COMMENT ON COLUMN "public"."infra_config"."name" IS '参数名称'; +COMMENT ON COLUMN "public"."infra_config"."config_key" IS '参数键名'; +COMMENT ON COLUMN "public"."infra_config"."value" IS '参数键值'; +COMMENT ON COLUMN "public"."infra_config"."visible" IS '是否可见'; +COMMENT ON COLUMN "public"."infra_config"."remark" IS '备注'; +COMMENT ON COLUMN "public"."infra_config"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."infra_config"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."infra_config"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."infra_config"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."infra_config"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."infra_config" IS '参数配置表'; + +-- ---------------------------- +-- Records of infra_config +-- ---------------------------- +INSERT INTO "public"."infra_config" VALUES (2, 'biz', 1, '用户管理-账号初始密码', 'sys.user.init-password', '123456', 'f', '初始化密码 123456', 'admin', '2021-01-05 17:03:48', '1', '2024-04-03 17:22:28', 0); +INSERT INTO "public"."infra_config" VALUES (7, 'url', 2, 'MySQL 监控的地址', 'url.druid', '', 't', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:33:38', 0); +INSERT INTO "public"."infra_config" VALUES (8, 'url', 2, 'SkyWalking 监控的地址', 'url.skywalking', '', 't', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:57:03', 0); +INSERT INTO "public"."infra_config" VALUES (9, 'url', 2, 'Spring Boot Admin 监控的地址', 'url.spring-boot-admin', '', 't', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:52:07', 0); +INSERT INTO "public"."infra_config" VALUES (10, 'url', 2, 'Swagger 接口文档的地址', 'url.swagger', '', 't', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:59:00', 0); +INSERT INTO "public"."infra_config" VALUES (11, 'ui', 2, '腾讯地图 key', 'tencent.lbs.key', 'TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E', 't', '腾讯地图 key', '1', '2023-06-03 19:16:27', '1', '2023-06-03 19:16:27', 0); +INSERT INTO "public"."infra_config" VALUES (12, 'test2', 2, 'test3', 'test4', 'test5', 't', 'test6', '1', '2023-12-03 09:55:16', '1', '2023-12-03 09:55:27', 0); + +-- ---------------------------- +-- Table structure for infra_data_source_config +-- ---------------------------- +DROP TABLE IF EXISTS "public"."infra_data_source_config"; +CREATE TABLE "public"."infra_data_source_config" ( + "id" int8 NOT NULL, + "name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "url" varchar(1024) COLLATE "pg_catalog"."default" NOT NULL, + "username" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "password" varchar(255) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."infra_data_source_config"."id" IS '主键编号'; +COMMENT ON COLUMN "public"."infra_data_source_config"."name" IS '参数名称'; +COMMENT ON COLUMN "public"."infra_data_source_config"."url" IS '数据源连接'; +COMMENT ON COLUMN "public"."infra_data_source_config"."username" IS '用户名'; +COMMENT ON COLUMN "public"."infra_data_source_config"."password" IS '密码'; +COMMENT ON COLUMN "public"."infra_data_source_config"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."infra_data_source_config"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."infra_data_source_config"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."infra_data_source_config"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."infra_data_source_config"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."infra_data_source_config" IS '数据源配置表'; + +-- ---------------------------- +-- Records of infra_data_source_config +-- ---------------------------- + +-- ---------------------------- +-- Table structure for infra_file +-- ---------------------------- +DROP TABLE IF EXISTS "public"."infra_file"; +CREATE TABLE "public"."infra_file" ( + "id" int8 NOT NULL, + "config_id" int8, + "name" varchar(256) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "path" varchar(512) COLLATE "pg_catalog"."default" NOT NULL, + "url" varchar(1024) COLLATE "pg_catalog"."default" NOT NULL, + "type" varchar(128) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "size" int4 NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."infra_file"."id" IS '文件编号'; +COMMENT ON COLUMN "public"."infra_file"."config_id" IS '配置编号'; +COMMENT ON COLUMN "public"."infra_file"."name" IS '文件名'; +COMMENT ON COLUMN "public"."infra_file"."path" IS '文件路径'; +COMMENT ON COLUMN "public"."infra_file"."url" IS '文件 URL'; +COMMENT ON COLUMN "public"."infra_file"."type" IS '文件类型'; +COMMENT ON COLUMN "public"."infra_file"."size" IS '文件大小'; +COMMENT ON COLUMN "public"."infra_file"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."infra_file"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."infra_file"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."infra_file"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."infra_file"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."infra_file" IS '文件表'; + +-- ---------------------------- +-- Records of infra_file +-- ---------------------------- + +-- ---------------------------- +-- Table structure for infra_file_config +-- ---------------------------- +DROP TABLE IF EXISTS "public"."infra_file_config"; +CREATE TABLE "public"."infra_file_config" ( + "id" int8 NOT NULL, + "name" varchar(63) COLLATE "pg_catalog"."default" NOT NULL, + "storage" int2 NOT NULL, + "remark" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "master" bool NOT NULL, + "config" varchar(4096) COLLATE "pg_catalog"."default" NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."infra_file_config"."id" IS '编号'; +COMMENT ON COLUMN "public"."infra_file_config"."name" IS '配置名'; +COMMENT ON COLUMN "public"."infra_file_config"."storage" IS '存储器'; +COMMENT ON COLUMN "public"."infra_file_config"."remark" IS '备注'; +COMMENT ON COLUMN "public"."infra_file_config"."master" IS '是否为主配置'; +COMMENT ON COLUMN "public"."infra_file_config"."config" IS '存储配置'; +COMMENT ON COLUMN "public"."infra_file_config"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."infra_file_config"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."infra_file_config"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."infra_file_config"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."infra_file_config"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."infra_file_config" IS '文件配置表'; + +-- ---------------------------- +-- Records of infra_file_config +-- ---------------------------- +INSERT INTO "public"."infra_file_config" VALUES (4, '数据库', 1, '我是数据库', 'f', '{"@class":"com.win.module.infra.framework.file.core.client.db.DBFileClientConfig","domain":"http://127.0.0.1:48080"}', '1', '2022-03-15 23:56:24', '1', '2024-02-28 22:54:07', 0); +INSERT INTO "public"."infra_file_config" VALUES (22, '七牛存储器', 20, '', 't', '{"@class":"com.win.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"s3.cn-south-1.qiniucs.com","domain":"http://test.win.iocoder.cn","bucket":"ruoyi-vue-pro","accessKey":"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS","accessSecret":"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY"}', '1', '2024-01-13 22:11:12', '1', '2024-04-03 19:38:34', 0); + +-- ---------------------------- +-- Table structure for infra_file_content +-- ---------------------------- +DROP TABLE IF EXISTS "public"."infra_file_content"; +CREATE TABLE "public"."infra_file_content" ( + "id" int8 NOT NULL, + "config_id" int8 NOT NULL, + "path" varchar(512) COLLATE "pg_catalog"."default" NOT NULL, + "content" bytea NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."infra_file_content"."id" IS '编号'; +COMMENT ON COLUMN "public"."infra_file_content"."config_id" IS '配置编号'; +COMMENT ON COLUMN "public"."infra_file_content"."path" IS '文件路径'; +COMMENT ON COLUMN "public"."infra_file_content"."content" IS '文件内容'; +COMMENT ON COLUMN "public"."infra_file_content"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."infra_file_content"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."infra_file_content"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."infra_file_content"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."infra_file_content"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."infra_file_content" IS '文件表'; + +-- ---------------------------- +-- Records of infra_file_content +-- ---------------------------- + +-- ---------------------------- +-- Table structure for infra_job +-- ---------------------------- +DROP TABLE IF EXISTS "public"."infra_job"; +CREATE TABLE "public"."infra_job" ( + "id" int8 NOT NULL, + "name" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, + "status" int2 NOT NULL, + "handler_name" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "handler_param" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "cron_expression" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, + "retry_count" int4 NOT NULL DEFAULT 0, + "retry_interval" int4 NOT NULL DEFAULT 0, + "monitor_timeout" int4 NOT NULL DEFAULT 0, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."infra_job"."id" IS '任务编号'; +COMMENT ON COLUMN "public"."infra_job"."name" IS '任务名称'; +COMMENT ON COLUMN "public"."infra_job"."status" IS '任务状态'; +COMMENT ON COLUMN "public"."infra_job"."handler_name" IS '处理器的名字'; +COMMENT ON COLUMN "public"."infra_job"."handler_param" IS '处理器的参数'; +COMMENT ON COLUMN "public"."infra_job"."cron_expression" IS 'CRON 表达式'; +COMMENT ON COLUMN "public"."infra_job"."retry_count" IS '重试次数'; +COMMENT ON COLUMN "public"."infra_job"."retry_interval" IS '重试间隔'; +COMMENT ON COLUMN "public"."infra_job"."monitor_timeout" IS '监控超时时间'; +COMMENT ON COLUMN "public"."infra_job"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."infra_job"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."infra_job"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."infra_job"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."infra_job"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."infra_job" IS '定时任务表'; + +-- ---------------------------- +-- Records of infra_job +-- ---------------------------- +INSERT INTO "public"."infra_job" VALUES (5, '支付通知 Job', 2, 'payNotifyJob', NULL, '* * * * * ?', 0, 0, 0, '1', '2021-10-27 08:34:42', '1', '2023-07-09 20:51:41', 0); +INSERT INTO "public"."infra_job" VALUES (17, '支付订单同步 Job', 2, 'payOrderSyncJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-22 14:36:26', '1', '2023-07-22 15:39:08', 0); +INSERT INTO "public"."infra_job" VALUES (18, '支付订单过期 Job', 2, 'payOrderExpireJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-22 15:36:23', '1', '2023-07-22 15:39:54', 0); +INSERT INTO "public"."infra_job" VALUES (19, '退款订单的同步 Job', 2, 'payRefundSyncJob', NULL, '0 0/1 * * * ?', 0, 0, 0, '1', '2023-07-23 21:03:44', '1', '2023-07-23 21:09:00', 0); +INSERT INTO "public"."infra_job" VALUES (21, '交易订单的自动过期 Job', 2, 'tradeOrderAutoCancelJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-25 23:43:26', '1', '2023-09-26 19:23:30', 0); +INSERT INTO "public"."infra_job" VALUES (22, '交易订单的自动收货 Job', 2, 'tradeOrderAutoReceiveJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 19:23:53', '1', '2023-09-26 23:38:08', 0); +INSERT INTO "public"."infra_job" VALUES (23, '交易订单的自动评论 Job', 2, 'tradeOrderAutoCommentJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-26 23:38:29', '1', '2023-09-27 11:03:10', 0); +INSERT INTO "public"."infra_job" VALUES (24, '佣金解冻 Job', 2, 'brokerageRecordUnfreezeJob', '', '0 * * * * ?', 3, 0, 0, '1', '2023-09-28 22:01:46', '1', '2023-09-28 22:01:56', 0); +INSERT INTO "public"."infra_job" VALUES (25, '访问日志清理 Job', 2, 'accessLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 10:59:41', '1', '2023-10-03 11:01:10', 0); +INSERT INTO "public"."infra_job" VALUES (26, '错误日志清理 Job', 2, 'errorLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 11:00:43', '1', '2023-10-03 11:01:12', 0); +INSERT INTO "public"."infra_job" VALUES (27, '任务日志清理 Job', 2, 'jobLogCleanJob', '', '0 0 0 * * ?', 3, 0, 0, '1', '2023-10-03 11:01:33', '1', '2023-10-03 11:01:42', 0); + +-- ---------------------------- +-- Table structure for infra_job_log +-- ---------------------------- +DROP TABLE IF EXISTS "public"."infra_job_log"; +CREATE TABLE "public"."infra_job_log" ( + "id" int8 NOT NULL, + "job_id" int8 NOT NULL, + "handler_name" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "handler_param" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "execute_index" int2 NOT NULL DEFAULT 1, + "begin_time" timestamp(6) NOT NULL, + "end_time" timestamp(6), + "duration" int4, + "status" int2 NOT NULL, + "result" varchar(4000) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."infra_job_log"."id" IS '日志编号'; +COMMENT ON COLUMN "public"."infra_job_log"."job_id" IS '任务编号'; +COMMENT ON COLUMN "public"."infra_job_log"."handler_name" IS '处理器的名字'; +COMMENT ON COLUMN "public"."infra_job_log"."handler_param" IS '处理器的参数'; +COMMENT ON COLUMN "public"."infra_job_log"."execute_index" IS '第几次执行'; +COMMENT ON COLUMN "public"."infra_job_log"."begin_time" IS '开始执行时间'; +COMMENT ON COLUMN "public"."infra_job_log"."end_time" IS '结束执行时间'; +COMMENT ON COLUMN "public"."infra_job_log"."duration" IS '执行时长'; +COMMENT ON COLUMN "public"."infra_job_log"."status" IS '任务状态'; +COMMENT ON COLUMN "public"."infra_job_log"."result" IS '结果数据'; +COMMENT ON COLUMN "public"."infra_job_log"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."infra_job_log"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."infra_job_log"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."infra_job_log"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."infra_job_log"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."infra_job_log" IS '定时任务日志表'; + +-- ---------------------------- +-- Records of infra_job_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_blob_triggers +-- ---------------------------- +DROP TABLE IF EXISTS "public"."qrtz_blob_triggers"; +CREATE TABLE "public"."qrtz_blob_triggers" ( + "sched_name" varchar(120) COLLATE "pg_catalog"."default" NOT NULL, + "trigger_name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "trigger_group" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "blob_data" bytea +) +; + +-- ---------------------------- +-- Records of qrtz_blob_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_calendars +-- ---------------------------- +DROP TABLE IF EXISTS "public"."qrtz_calendars"; +CREATE TABLE "public"."qrtz_calendars" ( + "sched_name" varchar(120) COLLATE "pg_catalog"."default" NOT NULL, + "calendar_name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "calendar" bytea NOT NULL +) +; + +-- ---------------------------- +-- Records of qrtz_calendars +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_cron_triggers +-- ---------------------------- +DROP TABLE IF EXISTS "public"."qrtz_cron_triggers"; +CREATE TABLE "public"."qrtz_cron_triggers" ( + "sched_name" varchar(120) COLLATE "pg_catalog"."default" NOT NULL, + "trigger_name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "trigger_group" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "cron_expression" varchar(120) COLLATE "pg_catalog"."default" NOT NULL, + "time_zone_id" varchar(80) COLLATE "pg_catalog"."default" +) +; + +-- ---------------------------- +-- Records of qrtz_cron_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_fired_triggers +-- ---------------------------- +DROP TABLE IF EXISTS "public"."qrtz_fired_triggers"; +CREATE TABLE "public"."qrtz_fired_triggers" ( + "sched_name" varchar(120) COLLATE "pg_catalog"."default" NOT NULL, + "entry_id" varchar(95) COLLATE "pg_catalog"."default" NOT NULL, + "trigger_name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "trigger_group" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "instance_name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "fired_time" int8 NOT NULL, + "sched_time" int8 NOT NULL, + "priority" int4 NOT NULL, + "state" varchar(16) COLLATE "pg_catalog"."default" NOT NULL, + "job_name" varchar(200) COLLATE "pg_catalog"."default", + "job_group" varchar(200) COLLATE "pg_catalog"."default", + "is_nonconcurrent" bool, + "requests_recovery" bool +) +; + +-- ---------------------------- +-- Records of qrtz_fired_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_job_details +-- ---------------------------- +DROP TABLE IF EXISTS "public"."qrtz_job_details"; +CREATE TABLE "public"."qrtz_job_details" ( + "sched_name" varchar(120) COLLATE "pg_catalog"."default" NOT NULL, + "job_name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "job_group" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "description" varchar(250) COLLATE "pg_catalog"."default", + "job_class_name" varchar(250) COLLATE "pg_catalog"."default" NOT NULL, + "is_durable" bool NOT NULL, + "is_nonconcurrent" bool NOT NULL, + "is_update_data" bool NOT NULL, + "requests_recovery" bool NOT NULL, + "job_data" bytea +) +; + +-- ---------------------------- +-- Records of qrtz_job_details +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_locks +-- ---------------------------- +DROP TABLE IF EXISTS "public"."qrtz_locks"; +CREATE TABLE "public"."qrtz_locks" ( + "sched_name" varchar(120) COLLATE "pg_catalog"."default" NOT NULL, + "lock_name" varchar(40) COLLATE "pg_catalog"."default" NOT NULL +) +; + +-- ---------------------------- +-- Records of qrtz_locks +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_paused_trigger_grps +-- ---------------------------- +DROP TABLE IF EXISTS "public"."qrtz_paused_trigger_grps"; +CREATE TABLE "public"."qrtz_paused_trigger_grps" ( + "sched_name" varchar(120) COLLATE "pg_catalog"."default" NOT NULL, + "trigger_group" varchar(200) COLLATE "pg_catalog"."default" NOT NULL +) +; + +-- ---------------------------- +-- Records of qrtz_paused_trigger_grps +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_scheduler_state +-- ---------------------------- +DROP TABLE IF EXISTS "public"."qrtz_scheduler_state"; +CREATE TABLE "public"."qrtz_scheduler_state" ( + "sched_name" varchar(120) COLLATE "pg_catalog"."default" NOT NULL, + "instance_name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "last_checkin_time" int8 NOT NULL, + "checkin_interval" int8 NOT NULL +) +; + +-- ---------------------------- +-- Records of qrtz_scheduler_state +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_simple_triggers +-- ---------------------------- +DROP TABLE IF EXISTS "public"."qrtz_simple_triggers"; +CREATE TABLE "public"."qrtz_simple_triggers" ( + "sched_name" varchar(120) COLLATE "pg_catalog"."default" NOT NULL, + "trigger_name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "trigger_group" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "repeat_count" int8 NOT NULL, + "repeat_interval" int8 NOT NULL, + "times_triggered" int8 NOT NULL +) +; + +-- ---------------------------- +-- Records of qrtz_simple_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_simprop_triggers +-- ---------------------------- +DROP TABLE IF EXISTS "public"."qrtz_simprop_triggers"; +CREATE TABLE "public"."qrtz_simprop_triggers" ( + "sched_name" varchar(120) COLLATE "pg_catalog"."default" NOT NULL, + "trigger_name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "trigger_group" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "str_prop_1" varchar(512) COLLATE "pg_catalog"."default", + "str_prop_2" varchar(512) COLLATE "pg_catalog"."default", + "str_prop_3" varchar(512) COLLATE "pg_catalog"."default", + "int_prop_1" int4, + "int_prop_2" int4, + "long_prop_1" int8, + "long_prop_2" int8, + "dec_prop_1" "pg_catalog"."numeric", + "dec_prop_2" "pg_catalog"."numeric", + "bool_prop_1" bool, + "bool_prop_2" bool +) +; + +-- ---------------------------- +-- Records of qrtz_simprop_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_triggers +-- ---------------------------- +DROP TABLE IF EXISTS "public"."qrtz_triggers"; +CREATE TABLE "public"."qrtz_triggers" ( + "sched_name" varchar(120) COLLATE "pg_catalog"."default" NOT NULL, + "trigger_name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "trigger_group" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "job_name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "job_group" varchar(200) COLLATE "pg_catalog"."default" NOT NULL, + "description" varchar(250) COLLATE "pg_catalog"."default", + "next_fire_time" int8, + "prev_fire_time" int8, + "priority" int4, + "trigger_state" varchar(16) COLLATE "pg_catalog"."default" NOT NULL, + "trigger_type" varchar(8) COLLATE "pg_catalog"."default" NOT NULL, + "start_time" int8 NOT NULL, + "end_time" int8, + "calendar_name" varchar(200) COLLATE "pg_catalog"."default", + "misfire_instr" int2, + "job_data" bytea +) +; + +-- ---------------------------- +-- Records of qrtz_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for system_dept +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_dept"; +CREATE TABLE "public"."system_dept" ( + "id" int8 NOT NULL, + "name" varchar(30) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "parent_id" int8 NOT NULL DEFAULT 0, + "sort" int4 NOT NULL DEFAULT 0, + "leader_user_id" int8, + "phone" varchar(11) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "email" varchar(50) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "status" int2 NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_dept"."id" IS '部门id'; +COMMENT ON COLUMN "public"."system_dept"."name" IS '部门名称'; +COMMENT ON COLUMN "public"."system_dept"."parent_id" IS '父部门id'; +COMMENT ON COLUMN "public"."system_dept"."sort" IS '显示顺序'; +COMMENT ON COLUMN "public"."system_dept"."leader_user_id" IS '负责人'; +COMMENT ON COLUMN "public"."system_dept"."phone" IS '联系电话'; +COMMENT ON COLUMN "public"."system_dept"."email" IS '邮箱'; +COMMENT ON COLUMN "public"."system_dept"."status" IS '部门状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."system_dept"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_dept"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_dept"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_dept"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_dept"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_dept"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_dept" IS '部门表'; + +-- ---------------------------- +-- Records of system_dept +-- ---------------------------- +INSERT INTO "public"."system_dept" VALUES (100, '芋道源码', 0, 0, 1, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2023-11-14 23:30:36', 0, 1); +INSERT INTO "public"."system_dept" VALUES (101, '深圳总公司', 100, 1, 104, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2023-12-02 09:53:35', 0, 1); +INSERT INTO "public"."system_dept" VALUES (102, '长沙分公司', 100, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:40', 0, 1); +INSERT INTO "public"."system_dept" VALUES (103, '研发部门', 101, 1, 104, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2024-03-24 20:56:04', 0, 1); +INSERT INTO "public"."system_dept" VALUES (104, '市场部门', 101, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:38', 0, 1); +INSERT INTO "public"."system_dept" VALUES (105, '测试部门', 101, 3, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2022-05-16 20:25:15', 0, 1); +INSERT INTO "public"."system_dept" VALUES (106, '财务部门', 101, 4, 103, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '103', '2022-01-15 21:32:22', 0, 1); +INSERT INTO "public"."system_dept" VALUES (107, '运维部门', 101, 5, 1, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2023-12-02 09:28:22', 0, 1); +INSERT INTO "public"."system_dept" VALUES (108, '市场部门', 102, 1, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2022-02-16 08:35:45', 0, 1); +INSERT INTO "public"."system_dept" VALUES (109, '财务部门', 102, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:29', 0, 1); +INSERT INTO "public"."system_dept" VALUES (110, '新部门', 0, 1, NULL, NULL, NULL, 0, '110', '2022-02-23 20:46:30', '110', '2022-02-23 20:46:30', 0, 121); +INSERT INTO "public"."system_dept" VALUES (111, '顶级部门', 0, 1, NULL, NULL, NULL, 0, '113', '2022-03-07 21:44:50', '113', '2022-03-07 21:44:50', 0, 122); +INSERT INTO "public"."system_dept" VALUES (112, '产品部门', 101, 100, 1, NULL, NULL, 1, '1', '2023-12-02 09:45:13', '1', '2023-12-02 09:45:31', 0, 1); +INSERT INTO "public"."system_dept" VALUES (113, '支持部门', 102, 3, 104, NULL, NULL, 1, '1', '2023-12-02 09:47:38', '1', '2023-12-02 09:47:38', 0, 1); + +-- ---------------------------- +-- Table structure for system_dict_data +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_dict_data"; +CREATE TABLE "public"."system_dict_data" ( + "id" int8 NOT NULL, + "sort" int4 NOT NULL DEFAULT 0, + "label" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "value" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "dict_type" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "status" int2 NOT NULL DEFAULT 0, + "color_type" varchar(100) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "css_class" varchar(100) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "remark" varchar(500) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_dict_data"."id" IS '字典编码'; +COMMENT ON COLUMN "public"."system_dict_data"."sort" IS '字典排序'; +COMMENT ON COLUMN "public"."system_dict_data"."label" IS '字典标签'; +COMMENT ON COLUMN "public"."system_dict_data"."value" IS '字典键值'; +COMMENT ON COLUMN "public"."system_dict_data"."dict_type" IS '字典类型'; +COMMENT ON COLUMN "public"."system_dict_data"."status" IS '状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."system_dict_data"."color_type" IS '颜色类型'; +COMMENT ON COLUMN "public"."system_dict_data"."css_class" IS 'css 样式'; +COMMENT ON COLUMN "public"."system_dict_data"."remark" IS '备注'; +COMMENT ON COLUMN "public"."system_dict_data"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_dict_data"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_dict_data"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_dict_data"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_dict_data"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."system_dict_data" IS '字典数据表'; + +-- ---------------------------- +-- Records of system_dict_data +-- ---------------------------- +INSERT INTO "public"."system_dict_data" VALUES (1, 1, '男', '1', 'system_user_sex', 0, 'default', 'A', '性别男', 'admin', '2021-01-05 17:03:48', '1', '2022-03-29 00:14:39', 0); +INSERT INTO "public"."system_dict_data" VALUES (2, 2, '女', '2', 'system_user_sex', 0, 'success', '', '性别女', 'admin', '2021-01-05 17:03:48', '1', '2023-11-15 23:30:37', 0); +INSERT INTO "public"."system_dict_data" VALUES (8, 1, '正常', '1', 'infra_job_status', 0, 'success', '', '正常状态', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:33:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (9, 2, '暂停', '2', 'infra_job_status', 0, 'danger', '', '停用状态', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:33:45', 0); +INSERT INTO "public"."system_dict_data" VALUES (12, 1, '系统内置', '1', 'infra_config_type', 0, 'danger', '', '参数类型 - 系统内置', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:06:02', 0); +INSERT INTO "public"."system_dict_data" VALUES (13, 2, '自定义', '2', 'infra_config_type', 0, 'primary', '', '参数类型 - 自定义', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 19:06:07', 0); +INSERT INTO "public"."system_dict_data" VALUES (14, 1, '通知', '1', 'system_notice_type', 0, 'success', '', '通知', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:05:57', 0); +INSERT INTO "public"."system_dict_data" VALUES (15, 2, '公告', '2', 'system_notice_type', 0, 'info', '', '公告', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:06:01', 0); +INSERT INTO "public"."system_dict_data" VALUES (16, 0, '其它', '0', 'infra_operate_type', 0, 'default', '', '其它操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:19', 0); +INSERT INTO "public"."system_dict_data" VALUES (17, 1, '查询', '1', 'infra_operate_type', 0, 'info', '', '查询操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:20', 0); +INSERT INTO "public"."system_dict_data" VALUES (18, 2, '新增', '2', 'infra_operate_type', 0, 'primary', '', '新增操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:21', 0); +INSERT INTO "public"."system_dict_data" VALUES (19, 3, '修改', '3', 'infra_operate_type', 0, 'warning', '', '修改操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:22', 0); +INSERT INTO "public"."system_dict_data" VALUES (20, 4, '删除', '4', 'infra_operate_type', 0, 'danger', '', '删除操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:23', 0); +INSERT INTO "public"."system_dict_data" VALUES (22, 5, '导出', '5', 'infra_operate_type', 0, 'default', '', '导出操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:24', 0); +INSERT INTO "public"."system_dict_data" VALUES (23, 6, '导入', '6', 'infra_operate_type', 0, 'default', '', '导入操作', 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:25', 0); +INSERT INTO "public"."system_dict_data" VALUES (27, 1, '开启', '0', 'common_status', 0, 'primary', '', '开启状态', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 08:00:39', 0); +INSERT INTO "public"."system_dict_data" VALUES (28, 2, '关闭', '1', 'common_status', 0, 'info', '', '关闭状态', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 08:00:44', 0); +INSERT INTO "public"."system_dict_data" VALUES (29, 1, '目录', '1', 'system_menu_type', 0, '', '', '目录', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:45', 0); +INSERT INTO "public"."system_dict_data" VALUES (30, 2, '菜单', '2', 'system_menu_type', 0, '', '', '菜单', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:41', 0); +INSERT INTO "public"."system_dict_data" VALUES (31, 3, '按钮', '3', 'system_menu_type', 0, '', '', '按钮', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:43:39', 0); +INSERT INTO "public"."system_dict_data" VALUES (32, 1, '内置', '1', 'system_role_type', 0, 'danger', '', '内置角色', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:02:08', 0); +INSERT INTO "public"."system_dict_data" VALUES (33, 2, '自定义', '2', 'system_role_type', 0, 'primary', '', '自定义角色', 'admin', '2021-01-05 17:03:48', '1', '2022-02-16 13:02:12', 0); +INSERT INTO "public"."system_dict_data" VALUES (34, 1, '全部数据权限', '1', 'system_data_scope', 0, '', '', '全部数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:17', 0); +INSERT INTO "public"."system_dict_data" VALUES (35, 2, '指定部门数据权限', '2', 'system_data_scope', 0, '', '', '指定部门数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:18', 0); +INSERT INTO "public"."system_dict_data" VALUES (36, 3, '本部门数据权限', '3', 'system_data_scope', 0, '', '', '本部门数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:16', 0); +INSERT INTO "public"."system_dict_data" VALUES (37, 4, '本部门及以下数据权限', '4', 'system_data_scope', 0, '', '', '本部门及以下数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:21', 0); +INSERT INTO "public"."system_dict_data" VALUES (38, 5, '仅本人数据权限', '5', 'system_data_scope', 0, '', '', '仅本人数据权限', 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:47:23', 0); +INSERT INTO "public"."system_dict_data" VALUES (39, 0, '成功', '0', 'system_login_result', 0, 'success', '', '登陆结果 - 成功', '', '2021-01-18 06:17:36', '1', '2022-02-16 13:23:49', 0); +INSERT INTO "public"."system_dict_data" VALUES (40, 10, '账号或密码不正确', '10', 'system_login_result', 0, 'primary', '', '登陆结果 - 账号或密码不正确', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:27', 0); +INSERT INTO "public"."system_dict_data" VALUES (41, 20, '用户被禁用', '20', 'system_login_result', 0, 'warning', '', '登陆结果 - 用户被禁用', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:23:57', 0); +INSERT INTO "public"."system_dict_data" VALUES (42, 30, '验证码不存在', '30', 'system_login_result', 0, 'info', '', '登陆结果 - 验证码不存在', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:07', 0); +INSERT INTO "public"."system_dict_data" VALUES (43, 31, '验证码不正确', '31', 'system_login_result', 0, 'info', '', '登陆结果 - 验证码不正确', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:11', 0); +INSERT INTO "public"."system_dict_data" VALUES (44, 100, '未知异常', '100', 'system_login_result', 0, 'danger', '', '登陆结果 - 未知异常', '', '2021-01-18 06:17:54', '1', '2022-02-16 13:24:23', 0); +INSERT INTO "public"."system_dict_data" VALUES (45, 1, '是', 'true', 'infra_boolean_string', 0, 'danger', '', 'Boolean 是否类型 - 是', '', '2021-01-19 03:20:55', '1', '2022-03-15 23:01:45', 0); +INSERT INTO "public"."system_dict_data" VALUES (46, 1, '否', 'false', 'infra_boolean_string', 0, 'info', '', 'Boolean 是否类型 - 否', '', '2021-01-19 03:20:55', '1', '2022-03-15 23:09:45', 0); +INSERT INTO "public"."system_dict_data" VALUES (50, 1, '单表(增删改查)', '1', 'infra_codegen_template_type', 0, '', '', NULL, '', '2021-02-05 07:09:06', '', '2022-03-10 16:33:15', 0); +INSERT INTO "public"."system_dict_data" VALUES (51, 2, '树表(增删改查)', '2', 'infra_codegen_template_type', 0, '', '', NULL, '', '2021-02-05 07:14:46', '', '2022-03-10 16:33:19', 0); +INSERT INTO "public"."system_dict_data" VALUES (53, 0, '初始化中', '0', 'infra_job_status', 0, 'primary', '', NULL, '', '2021-02-07 07:46:49', '1', '2022-02-16 19:33:29', 0); +INSERT INTO "public"."system_dict_data" VALUES (57, 0, '运行中', '0', 'infra_job_log_status', 0, 'primary', '', 'RUNNING', '', '2021-02-08 10:04:24', '1', '2022-02-16 19:07:48', 0); +INSERT INTO "public"."system_dict_data" VALUES (58, 1, '成功', '1', 'infra_job_log_status', 0, 'success', '', NULL, '', '2021-02-08 10:06:57', '1', '2022-02-16 19:07:52', 0); +INSERT INTO "public"."system_dict_data" VALUES (59, 2, '失败', '2', 'infra_job_log_status', 0, 'warning', '', '失败', '', '2021-02-08 10:07:38', '1', '2022-02-16 19:07:56', 0); +INSERT INTO "public"."system_dict_data" VALUES (60, 1, '会员', '1', 'user_type', 0, 'primary', '', NULL, '', '2021-02-26 00:16:27', '1', '2022-02-16 10:22:19', 0); +INSERT INTO "public"."system_dict_data" VALUES (61, 2, '管理员', '2', 'user_type', 0, 'success', '', NULL, '', '2021-02-26 00:16:34', '1', '2022-02-16 10:22:22', 0); +INSERT INTO "public"."system_dict_data" VALUES (62, 0, '未处理', '0', 'infra_api_error_log_process_status', 0, 'primary', '', NULL, '', '2021-02-26 07:07:19', '1', '2022-02-16 20:14:17', 0); +INSERT INTO "public"."system_dict_data" VALUES (63, 1, '已处理', '1', 'infra_api_error_log_process_status', 0, 'success', '', NULL, '', '2021-02-26 07:07:26', '1', '2022-02-16 20:14:08', 0); +INSERT INTO "public"."system_dict_data" VALUES (64, 2, '已忽略', '2', 'infra_api_error_log_process_status', 0, 'danger', '', NULL, '', '2021-02-26 07:07:34', '1', '2022-02-16 20:14:14', 0); +INSERT INTO "public"."system_dict_data" VALUES (66, 2, '阿里云', 'ALIYUN', 'system_sms_channel_code', 0, 'primary', '', NULL, '1', '2021-04-05 01:05:26', '1', '2022-02-16 10:09:52', 0); +INSERT INTO "public"."system_dict_data" VALUES (67, 1, '验证码', '1', 'system_sms_template_type', 0, 'warning', '', NULL, '1', '2021-04-05 21:50:57', '1', '2022-02-16 12:48:30', 0); +INSERT INTO "public"."system_dict_data" VALUES (68, 2, '通知', '2', 'system_sms_template_type', 0, 'primary', '', NULL, '1', '2021-04-05 21:51:08', '1', '2022-02-16 12:48:27', 0); +INSERT INTO "public"."system_dict_data" VALUES (69, 0, '营销', '3', 'system_sms_template_type', 0, 'danger', '', NULL, '1', '2021-04-05 21:51:15', '1', '2022-02-16 12:48:22', 0); +INSERT INTO "public"."system_dict_data" VALUES (70, 0, '初始化', '0', 'system_sms_send_status', 0, 'primary', '', NULL, '1', '2021-04-11 20:18:33', '1', '2022-02-16 10:26:07', 0); +INSERT INTO "public"."system_dict_data" VALUES (71, 1, '发送成功', '10', 'system_sms_send_status', 0, 'success', '', NULL, '1', '2021-04-11 20:18:43', '1', '2022-02-16 10:25:56', 0); +INSERT INTO "public"."system_dict_data" VALUES (72, 2, '发送失败', '20', 'system_sms_send_status', 0, 'danger', '', NULL, '1', '2021-04-11 20:18:49', '1', '2022-02-16 10:26:03', 0); +INSERT INTO "public"."system_dict_data" VALUES (73, 3, '不发送', '30', 'system_sms_send_status', 0, 'info', '', NULL, '1', '2021-04-11 20:19:44', '1', '2022-02-16 10:26:10', 0); +INSERT INTO "public"."system_dict_data" VALUES (74, 0, '等待结果', '0', 'system_sms_receive_status', 0, 'primary', '', NULL, '1', '2021-04-11 20:27:43', '1', '2022-02-16 10:28:24', 0); +INSERT INTO "public"."system_dict_data" VALUES (75, 1, '接收成功', '10', 'system_sms_receive_status', 0, 'success', '', NULL, '1', '2021-04-11 20:29:25', '1', '2022-02-16 10:28:28', 0); +INSERT INTO "public"."system_dict_data" VALUES (76, 2, '接收失败', '20', 'system_sms_receive_status', 0, 'danger', '', NULL, '1', '2021-04-11 20:29:31', '1', '2022-02-16 10:28:32', 0); +INSERT INTO "public"."system_dict_data" VALUES (77, 0, '调试(钉钉)', 'DEBUG_DING_TALK', 'system_sms_channel_code', 0, 'info', '', NULL, '1', '2021-04-13 00:20:37', '1', '2022-02-16 10:10:00', 0); +INSERT INTO "public"."system_dict_data" VALUES (80, 100, '账号登录', '100', 'system_login_type', 0, 'primary', '', '账号登录', '1', '2021-10-06 00:52:02', '1', '2022-02-16 13:11:34', 0); +INSERT INTO "public"."system_dict_data" VALUES (81, 101, '社交登录', '101', 'system_login_type', 0, 'info', '', '社交登录', '1', '2021-10-06 00:52:17', '1', '2022-02-16 13:11:40', 0); +INSERT INTO "public"."system_dict_data" VALUES (83, 200, '主动登出', '200', 'system_login_type', 0, 'primary', '', '主动登出', '1', '2021-10-06 00:52:58', '1', '2022-02-16 13:11:49', 0); +INSERT INTO "public"."system_dict_data" VALUES (85, 202, '强制登出', '202', 'system_login_type', 0, 'danger', '', '强制退出', '1', '2021-10-06 00:53:41', '1', '2022-02-16 13:11:57', 0); +INSERT INTO "public"."system_dict_data" VALUES (86, 0, '病假', '1', 'bpm_oa_leave_type', 0, 'primary', '', NULL, '1', '2021-09-21 22:35:28', '1', '2022-02-16 10:00:41', 0); +INSERT INTO "public"."system_dict_data" VALUES (87, 1, '事假', '2', 'bpm_oa_leave_type', 0, 'info', '', NULL, '1', '2021-09-21 22:36:11', '1', '2022-02-16 10:00:49', 0); +INSERT INTO "public"."system_dict_data" VALUES (88, 2, '婚假', '3', 'bpm_oa_leave_type', 0, 'warning', '', NULL, '1', '2021-09-21 22:36:38', '1', '2022-02-16 10:00:53', 0); +INSERT INTO "public"."system_dict_data" VALUES (113, 1, '微信公众号支付', 'wx_pub', 'pay_channel_code', 0, 'success', '', '微信公众号支付', '1', '2021-12-03 10:40:24', '1', '2023-07-19 20:08:47', 0); +INSERT INTO "public"."system_dict_data" VALUES (114, 2, '微信小程序支付', 'wx_lite', 'pay_channel_code', 0, 'success', '', '微信小程序支付', '1', '2021-12-03 10:41:06', '1', '2023-07-19 20:08:50', 0); +INSERT INTO "public"."system_dict_data" VALUES (115, 3, '微信 App 支付', 'wx_app', 'pay_channel_code', 0, 'success', '', '微信 App 支付', '1', '2021-12-03 10:41:20', '1', '2023-07-19 20:08:56', 0); +INSERT INTO "public"."system_dict_data" VALUES (116, 10, '支付宝 PC 网站支付', 'alipay_pc', 'pay_channel_code', 0, 'primary', '', '支付宝 PC 网站支付', '1', '2021-12-03 10:42:09', '1', '2023-07-19 20:09:12', 0); +INSERT INTO "public"."system_dict_data" VALUES (117, 11, '支付宝 Wap 网站支付', 'alipay_wap', 'pay_channel_code', 0, 'primary', '', '支付宝 Wap 网站支付', '1', '2021-12-03 10:42:26', '1', '2023-07-19 20:09:16', 0); +INSERT INTO "public"."system_dict_data" VALUES (118, 12, '支付宝 App 支付', 'alipay_app', 'pay_channel_code', 0, 'primary', '', '支付宝 App 支付', '1', '2021-12-03 10:42:55', '1', '2023-07-19 20:09:20', 0); +INSERT INTO "public"."system_dict_data" VALUES (119, 14, '支付宝扫码支付', 'alipay_qr', 'pay_channel_code', 0, 'primary', '', '支付宝扫码支付', '1', '2021-12-03 10:43:10', '1', '2023-07-19 20:09:28', 0); +INSERT INTO "public"."system_dict_data" VALUES (120, 10, '通知成功', '10', 'pay_notify_status', 0, 'success', '', '通知成功', '1', '2021-12-03 11:02:41', '1', '2023-07-19 10:08:19', 0); +INSERT INTO "public"."system_dict_data" VALUES (121, 20, '通知失败', '20', 'pay_notify_status', 0, 'danger', '', '通知失败', '1', '2021-12-03 11:02:59', '1', '2023-07-19 10:08:21', 0); +INSERT INTO "public"."system_dict_data" VALUES (122, 0, '等待通知', '0', 'pay_notify_status', 0, 'info', '', '未通知', '1', '2021-12-03 11:03:10', '1', '2023-07-19 10:08:24', 0); +INSERT INTO "public"."system_dict_data" VALUES (123, 10, '支付成功', '10', 'pay_order_status', 0, 'success', '', '支付成功', '1', '2021-12-03 11:18:29', '1', '2023-07-19 18:04:28', 0); +INSERT INTO "public"."system_dict_data" VALUES (124, 30, '支付关闭', '30', 'pay_order_status', 0, 'info', '', '支付关闭', '1', '2021-12-03 11:18:42', '1', '2023-07-19 18:05:07', 0); +INSERT INTO "public"."system_dict_data" VALUES (125, 0, '等待支付', '0', 'pay_order_status', 0, 'info', '', '未支付', '1', '2021-12-03 11:18:18', '1', '2023-07-19 18:04:15', 0); +INSERT INTO "public"."system_dict_data" VALUES (600, 5, '首页', '1', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (601, 4, '秒杀活动页', '2', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (602, 3, '砍价活动页', '3', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (603, 2, '限时折扣页', '4', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (604, 1, '满减送页', '5', 'promotion_banner_position', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (1118, 0, '等待退款', '0', 'pay_refund_status', 0, 'info', '', '等待退款', '1', '2021-12-10 16:44:59', '1', '2023-07-19 10:14:39', 0); +INSERT INTO "public"."system_dict_data" VALUES (1119, 20, '退款失败', '20', 'pay_refund_status', 0, 'danger', '', '退款失败', '1', '2021-12-10 16:45:10', '1', '2023-07-19 10:15:10', 0); +INSERT INTO "public"."system_dict_data" VALUES (1124, 10, '退款成功', '10', 'pay_refund_status', 0, 'success', '', '退款成功', '1', '2021-12-10 16:46:26', '1', '2023-07-19 10:15:00', 0); +INSERT INTO "public"."system_dict_data" VALUES (1127, 1, '审批中', '1', 'bpm_process_instance_status', 0, 'default', '', '流程实例的状态 - 进行中', '1', '2022-01-07 23:47:22', '1', '2024-03-16 16:11:45', 0); +INSERT INTO "public"."system_dict_data" VALUES (1128, 2, '审批通过', '2', 'bpm_process_instance_status', 0, 'success', '', '流程实例的状态 - 已完成', '1', '2022-01-07 23:47:49', '1', '2024-03-16 16:11:54', 0); +INSERT INTO "public"."system_dict_data" VALUES (1129, 1, '审批中', '1', 'bpm_task_status', 0, 'primary', '', '流程实例的结果 - 处理中', '1', '2022-01-07 23:48:32', '1', '2024-03-08 22:41:37', 0); +INSERT INTO "public"."system_dict_data" VALUES (1130, 2, '审批通过', '2', 'bpm_task_status', 0, 'success', '', '流程实例的结果 - 通过', '1', '2022-01-07 23:48:45', '1', '2024-03-08 22:41:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (1131, 3, '审批不通过', '3', 'bpm_task_status', 0, 'danger', '', '流程实例的结果 - 不通过', '1', '2022-01-07 23:48:55', '1', '2024-03-08 22:41:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (1132, 4, '已取消', '4', 'bpm_task_status', 0, 'info', '', '流程实例的结果 - 撤销', '1', '2022-01-07 23:49:06', '1', '2024-03-08 22:41:39', 0); +INSERT INTO "public"."system_dict_data" VALUES (1133, 10, '流程表单', '10', 'bpm_model_form_type', 0, '', '', '流程的表单类型 - 流程表单', '103', '2022-01-11 23:51:30', '103', '2022-01-11 23:51:30', 0); +INSERT INTO "public"."system_dict_data" VALUES (1134, 20, '业务表单', '20', 'bpm_model_form_type', 0, '', '', '流程的表单类型 - 业务表单', '103', '2022-01-11 23:51:47', '103', '2022-01-11 23:51:47', 0); +INSERT INTO "public"."system_dict_data" VALUES (1135, 10, '角色', '10', 'bpm_task_candidate_strategy', 0, 'info', '', '任务分配规则的类型 - 角色', '103', '2022-01-12 23:21:22', '1', '2024-03-06 02:53:16', 0); +INSERT INTO "public"."system_dict_data" VALUES (1136, 20, '部门的成员', '20', 'bpm_task_candidate_strategy', 0, 'primary', '', '任务分配规则的类型 - 部门的成员', '103', '2022-01-12 23:21:47', '1', '2024-03-06 02:53:17', 0); +INSERT INTO "public"."system_dict_data" VALUES (1137, 21, '部门的负责人', '21', 'bpm_task_candidate_strategy', 0, 'primary', '', '任务分配规则的类型 - 部门的负责人', '103', '2022-01-12 23:33:36', '1', '2024-03-06 02:53:18', 0); +INSERT INTO "public"."system_dict_data" VALUES (1138, 30, '用户', '30', 'bpm_task_candidate_strategy', 0, 'info', '', '任务分配规则的类型 - 用户', '103', '2022-01-12 23:34:02', '1', '2024-03-06 02:53:19', 0); +INSERT INTO "public"."system_dict_data" VALUES (1139, 40, '用户组', '40', 'bpm_task_candidate_strategy', 0, 'warning', '', '任务分配规则的类型 - 用户组', '103', '2022-01-12 23:34:21', '1', '2024-03-06 02:53:20', 0); +INSERT INTO "public"."system_dict_data" VALUES (1140, 60, '流程表达式', '60', 'bpm_task_candidate_strategy', 0, 'danger', '', '任务分配规则的类型 - 流程表达式', '103', '2022-01-12 23:34:43', '1', '2024-03-06 02:53:20', 0); +INSERT INTO "public"."system_dict_data" VALUES (1141, 22, '岗位', '22', 'bpm_task_candidate_strategy', 0, 'success', '', '任务分配规则的类型 - 岗位', '103', '2022-01-14 18:41:55', '1', '2024-03-06 02:53:21', 0); +INSERT INTO "public"."system_dict_data" VALUES (1145, 1, '管理后台', '1', 'infra_codegen_scene', 0, '', '', '代码生成的场景枚举 - 管理后台', '1', '2022-02-02 13:15:06', '1', '2022-03-10 16:32:59', 0); +INSERT INTO "public"."system_dict_data" VALUES (1146, 2, '用户 APP', '2', 'infra_codegen_scene', 0, '', '', '代码生成的场景枚举 - 用户 APP', '1', '2022-02-02 13:15:19', '1', '2022-03-10 16:33:03', 0); +INSERT INTO "public"."system_dict_data" VALUES (1150, 1, '数据库', '1', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:25:28', '1', '2022-03-15 00:25:28', 0); +INSERT INTO "public"."system_dict_data" VALUES (1151, 10, '本地磁盘', '10', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:25:41', '1', '2022-03-15 00:25:56', 0); +INSERT INTO "public"."system_dict_data" VALUES (1152, 11, 'FTP 服务器', '11', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:06', '1', '2022-03-15 00:26:10', 0); +INSERT INTO "public"."system_dict_data" VALUES (1153, 12, 'SFTP 服务器', '12', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:22', '1', '2022-03-15 00:26:22', 0); +INSERT INTO "public"."system_dict_data" VALUES (1154, 20, 'S3 对象存储', '20', 'infra_file_storage', 0, 'default', '', NULL, '1', '2022-03-15 00:26:31', '1', '2022-03-15 00:26:45', 0); +INSERT INTO "public"."system_dict_data" VALUES (1155, 103, '短信登录', '103', 'system_login_type', 0, 'default', '', NULL, '1', '2022-05-09 23:57:58', '1', '2022-05-09 23:58:09', 0); +INSERT INTO "public"."system_dict_data" VALUES (1156, 1, 'password', 'password', 'system_oauth2_grant_type', 0, 'default', '', '密码模式', '1', '2022-05-12 00:22:05', '1', '2022-05-11 16:26:01', 0); +INSERT INTO "public"."system_dict_data" VALUES (1157, 2, 'authorization_code', 'authorization_code', 'system_oauth2_grant_type', 0, 'primary', '', '授权码模式', '1', '2022-05-12 00:22:59', '1', '2022-05-11 16:26:02', 0); +INSERT INTO "public"."system_dict_data" VALUES (1158, 3, 'implicit', 'implicit', 'system_oauth2_grant_type', 0, 'success', '', '简化模式', '1', '2022-05-12 00:23:40', '1', '2022-05-11 16:26:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1159, 4, 'client_credentials', 'client_credentials', 'system_oauth2_grant_type', 0, 'default', '', '客户端模式', '1', '2022-05-12 00:23:51', '1', '2022-05-11 16:26:08', 0); +INSERT INTO "public"."system_dict_data" VALUES (1160, 5, 'refresh_token', 'refresh_token', 'system_oauth2_grant_type', 0, 'info', '', '刷新模式', '1', '2022-05-12 00:24:02', '1', '2022-05-11 16:26:11', 0); +INSERT INTO "public"."system_dict_data" VALUES (1162, 1, '销售中', '1', 'product_spu_status', 0, 'success', '', '商品 SPU 状态 - 销售中', '1', '2022-10-24 21:19:47', '1', '2022-10-24 21:20:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (1163, 0, '仓库中', '0', 'product_spu_status', 0, 'info', '', '商品 SPU 状态 - 仓库中', '1', '2022-10-24 21:20:54', '1', '2022-10-24 21:21:22', 0); +INSERT INTO "public"."system_dict_data" VALUES (1164, 0, '回收站', '-1', 'product_spu_status', 0, 'default', '', '商品 SPU 状态 - 回收站', '1', '2022-10-24 21:21:11', '1', '2022-10-24 21:21:11', 0); +INSERT INTO "public"."system_dict_data" VALUES (1165, 1, '满减', '1', 'promotion_discount_type', 0, 'success', '', '优惠类型 - 满减', '1', '2022-11-01 12:46:41', '1', '2022-11-01 12:50:11', 0); +INSERT INTO "public"."system_dict_data" VALUES (1166, 2, '折扣', '2', 'promotion_discount_type', 0, 'primary', '', '优惠类型 - 折扣', '1', '2022-11-01 12:46:51', '1', '2022-11-01 12:50:08', 0); +INSERT INTO "public"."system_dict_data" VALUES (1167, 1, '固定日期', '1', 'promotion_coupon_template_validity_type', 0, 'default', '', '优惠劵模板的有限期类型 - 固定日期', '1', '2022-11-02 00:07:34', '1', '2022-11-04 00:07:49', 0); +INSERT INTO "public"."system_dict_data" VALUES (1168, 2, '领取之后', '2', 'promotion_coupon_template_validity_type', 0, 'default', '', '优惠劵模板的有限期类型 - 领取之后', '1', '2022-11-02 00:07:54', '1', '2022-11-04 00:07:52', 0); +INSERT INTO "public"."system_dict_data" VALUES (1169, 1, '通用劵', '1', 'promotion_product_scope', 0, 'default', '', '营销的商品范围 - 全部商品参与', '1', '2022-11-02 00:28:22', '1', '2023-09-28 00:27:42', 0); +INSERT INTO "public"."system_dict_data" VALUES (1170, 2, '商品劵', '2', 'promotion_product_scope', 0, 'default', '', '营销的商品范围 - 指定商品参与', '1', '2022-11-02 00:28:34', '1', '2023-09-28 00:27:44', 0); +INSERT INTO "public"."system_dict_data" VALUES (1171, 1, '未使用', '1', 'promotion_coupon_status', 0, 'primary', '', '优惠劵的状态 - 已领取', '1', '2022-11-04 00:15:08', '1', '2023-10-03 12:54:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (1172, 2, '已使用', '2', 'promotion_coupon_status', 0, 'success', '', '优惠劵的状态 - 已使用', '1', '2022-11-04 00:15:21', '1', '2022-11-04 19:16:08', 0); +INSERT INTO "public"."system_dict_data" VALUES (1173, 3, '已过期', '3', 'promotion_coupon_status', 0, 'info', '', '优惠劵的状态 - 已过期', '1', '2022-11-04 00:15:43', '1', '2022-11-04 19:16:12', 0); +INSERT INTO "public"."system_dict_data" VALUES (1174, 1, '直接领取', '1', 'promotion_coupon_take_type', 0, 'primary', '', '优惠劵的领取方式 - 直接领取', '1', '2022-11-04 19:13:00', '1', '2022-11-04 19:13:25', 0); +INSERT INTO "public"."system_dict_data" VALUES (1175, 2, '指定发放', '2', 'promotion_coupon_take_type', 0, 'success', '', '优惠劵的领取方式 - 指定发放', '1', '2022-11-04 19:13:13', '1', '2022-11-04 19:14:48', 0); +INSERT INTO "public"."system_dict_data" VALUES (1176, 10, '未开始', '10', 'promotion_activity_status', 0, 'primary', '', '促销活动的状态枚举 - 未开始', '1', '2022-11-04 22:54:49', '1', '2022-11-04 22:55:53', 0); +INSERT INTO "public"."system_dict_data" VALUES (1177, 20, '进行中', '20', 'promotion_activity_status', 0, 'success', '', '促销活动的状态枚举 - 进行中', '1', '2022-11-04 22:55:06', '1', '2022-11-04 22:55:20', 0); +INSERT INTO "public"."system_dict_data" VALUES (1178, 30, '已结束', '30', 'promotion_activity_status', 0, 'info', '', '促销活动的状态枚举 - 已结束', '1', '2022-11-04 22:55:41', '1', '2022-11-04 22:55:41', 0); +INSERT INTO "public"."system_dict_data" VALUES (1179, 40, '已关闭', '40', 'promotion_activity_status', 0, 'warning', '', '促销活动的状态枚举 - 已关闭', '1', '2022-11-04 22:56:10', '1', '2022-11-04 22:56:18', 0); +INSERT INTO "public"."system_dict_data" VALUES (1180, 10, '满 N 元', '10', 'promotion_condition_type', 0, 'primary', '', '营销的条件类型 - 满 N 元', '1', '2022-11-04 22:59:45', '1', '2022-11-04 22:59:45', 0); +INSERT INTO "public"."system_dict_data" VALUES (1181, 20, '满 N 件', '20', 'promotion_condition_type', 0, 'success', '', '营销的条件类型 - 满 N 件', '1', '2022-11-04 23:00:02', '1', '2022-11-04 23:00:02', 0); +INSERT INTO "public"."system_dict_data" VALUES (1182, 10, '申请售后', '10', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 申请售后', '1', '2022-11-19 20:53:33', '1', '2022-11-19 20:54:42', 0); +INSERT INTO "public"."system_dict_data" VALUES (1183, 20, '商品待退货', '20', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 商品待退货', '1', '2022-11-19 20:54:36', '1', '2022-11-19 20:58:58', 0); +INSERT INTO "public"."system_dict_data" VALUES (1184, 30, '商家待收货', '30', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 商家待收货', '1', '2022-11-19 20:56:56', '1', '2022-11-19 20:59:20', 0); +INSERT INTO "public"."system_dict_data" VALUES (1185, 40, '等待退款', '40', 'trade_after_sale_status', 0, 'primary', '', '交易售后状态 - 等待退款', '1', '2022-11-19 20:59:54', '1', '2022-11-19 21:00:01', 0); +INSERT INTO "public"."system_dict_data" VALUES (1186, 50, '退款成功', '50', 'trade_after_sale_status', 0, 'default', '', '交易售后状态 - 退款成功', '1', '2022-11-19 21:00:33', '1', '2022-11-19 21:00:33', 0); +INSERT INTO "public"."system_dict_data" VALUES (1187, 61, '买家取消', '61', 'trade_after_sale_status', 0, 'info', '', '交易售后状态 - 买家取消', '1', '2022-11-19 21:01:29', '1', '2022-11-19 21:01:29', 0); +INSERT INTO "public"."system_dict_data" VALUES (1188, 62, '商家拒绝', '62', 'trade_after_sale_status', 0, 'info', '', '交易售后状态 - 商家拒绝', '1', '2022-11-19 21:02:17', '1', '2022-11-19 21:02:17', 0); +INSERT INTO "public"."system_dict_data" VALUES (1189, 63, '商家拒收货', '63', 'trade_after_sale_status', 0, 'info', '', '交易售后状态 - 商家拒收货', '1', '2022-11-19 21:02:37', '1', '2022-11-19 21:03:07', 0); +INSERT INTO "public"."system_dict_data" VALUES (1190, 10, '售中退款', '10', 'trade_after_sale_type', 0, 'success', '', '交易售后的类型 - 售中退款', '1', '2022-11-19 21:05:05', '1', '2022-11-19 21:38:23', 0); +INSERT INTO "public"."system_dict_data" VALUES (1191, 20, '售后退款', '20', 'trade_after_sale_type', 0, 'primary', '', '交易售后的类型 - 售后退款', '1', '2022-11-19 21:05:32', '1', '2022-11-19 21:38:32', 0); +INSERT INTO "public"."system_dict_data" VALUES (1192, 10, '仅退款', '10', 'trade_after_sale_way', 0, 'primary', '', '交易售后的方式 - 仅退款', '1', '2022-11-19 21:39:19', '1', '2022-11-19 21:39:19', 0); +INSERT INTO "public"."system_dict_data" VALUES (1193, 20, '退货退款', '20', 'trade_after_sale_way', 0, 'success', '', '交易售后的方式 - 退货退款', '1', '2022-11-19 21:39:38', '1', '2022-11-19 21:39:49', 0); +INSERT INTO "public"."system_dict_data" VALUES (1194, 10, '微信小程序', '10', 'terminal', 0, 'default', '', '终端 - 微信小程序', '1', '2022-12-10 10:51:11', '1', '2022-12-10 10:51:57', 0); +INSERT INTO "public"."system_dict_data" VALUES (1195, 20, 'H5 网页', '20', 'terminal', 0, 'default', '', '终端 - H5 网页', '1', '2022-12-10 10:51:30', '1', '2022-12-10 10:51:59', 0); +INSERT INTO "public"."system_dict_data" VALUES (1196, 11, '微信公众号', '11', 'terminal', 0, 'default', '', '终端 - 微信公众号', '1', '2022-12-10 10:54:16', '1', '2022-12-10 10:52:01', 0); +INSERT INTO "public"."system_dict_data" VALUES (1197, 31, '苹果 App', '31', 'terminal', 0, 'default', '', '终端 - 苹果 App', '1', '2022-12-10 10:54:42', '1', '2022-12-10 10:52:18', 0); +INSERT INTO "public"."system_dict_data" VALUES (1198, 32, '安卓 App', '32', 'terminal', 0, 'default', '', '终端 - 安卓 App', '1', '2022-12-10 10:55:02', '1', '2022-12-10 10:59:17', 0); +INSERT INTO "public"."system_dict_data" VALUES (1199, 0, '普通订单', '0', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 普通订单', '1', '2022-12-10 16:34:14', '1', '2022-12-10 16:34:14', 0); +INSERT INTO "public"."system_dict_data" VALUES (1200, 1, '秒杀订单', '1', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 秒杀订单', '1', '2022-12-10 16:34:26', '1', '2022-12-10 16:34:26', 0); +INSERT INTO "public"."system_dict_data" VALUES (1201, 2, '拼团订单', '2', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 拼团订单', '1', '2022-12-10 16:34:36', '1', '2022-12-10 16:34:36', 0); +INSERT INTO "public"."system_dict_data" VALUES (1202, 3, '砍价订单', '3', 'trade_order_type', 0, 'default', '', '交易订单的类型 - 砍价订单', '1', '2022-12-10 16:34:48', '1', '2022-12-10 16:34:48', 0); +INSERT INTO "public"."system_dict_data" VALUES (1203, 0, '待支付', '0', 'trade_order_status', 0, 'default', '', '交易订单状态 - 待支付', '1', '2022-12-10 16:49:29', '1', '2022-12-10 16:49:29', 0); +INSERT INTO "public"."system_dict_data" VALUES (1204, 10, '待发货', '10', 'trade_order_status', 0, 'primary', '', '交易订单状态 - 待发货', '1', '2022-12-10 16:49:53', '1', '2022-12-10 16:51:17', 0); +INSERT INTO "public"."system_dict_data" VALUES (1205, 20, '已发货', '20', 'trade_order_status', 0, 'primary', '', '交易订单状态 - 已发货', '1', '2022-12-10 16:50:13', '1', '2022-12-10 16:51:31', 0); +INSERT INTO "public"."system_dict_data" VALUES (1206, 30, '已完成', '30', 'trade_order_status', 0, 'success', '', '交易订单状态 - 已完成', '1', '2022-12-10 16:50:30', '1', '2022-12-10 16:51:06', 0); +INSERT INTO "public"."system_dict_data" VALUES (1207, 40, '已取消', '40', 'trade_order_status', 0, 'danger', '', '交易订单状态 - 已取消', '1', '2022-12-10 16:50:50', '1', '2022-12-10 16:51:00', 0); +INSERT INTO "public"."system_dict_data" VALUES (1208, 0, '未售后', '0', 'trade_order_item_after_sale_status', 0, 'info', '', '交易订单项的售后状态 - 未售后', '1', '2022-12-10 20:58:42', '1', '2022-12-10 20:59:29', 0); +INSERT INTO "public"."system_dict_data" VALUES (1209, 1, '售后中', '1', 'trade_order_item_after_sale_status', 0, 'primary', '', '交易订单项的售后状态 - 售后中', '1', '2022-12-10 20:59:21', '1', '2022-12-10 20:59:21', 0); +INSERT INTO "public"."system_dict_data" VALUES (1210, 2, '已退款', '2', 'trade_order_item_after_sale_status', 0, 'success', '', '交易订单项的售后状态 - 已退款', '1', '2022-12-10 20:59:46', '1', '2022-12-10 20:59:46', 0); +INSERT INTO "public"."system_dict_data" VALUES (1211, 1, '完全匹配', '1', 'mp_auto_reply_request_match', 0, 'primary', '', '公众号自动回复的请求关键字匹配模式 - 完全匹配', '1', '2023-01-16 23:30:39', '1', '2023-01-16 23:31:00', 0); +INSERT INTO "public"."system_dict_data" VALUES (1513, 7, '审批通过中', '7', 'bpm_task_status', 0, 'success', '', '', '1', '2024-03-17 10:06:47', '1', '2024-03-08 22:41:41', 0); +INSERT INTO "public"."system_dict_data" VALUES (1212, 2, '半匹配', '2', 'mp_auto_reply_request_match', 0, 'success', '', '公众号自动回复的请求关键字匹配模式 - 半匹配', '1', '2023-01-16 23:30:55', '1', '2023-01-16 23:31:10', 0); +INSERT INTO "public"."system_dict_data" VALUES (1213, 1, '文本', 'text', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 文本', '1', '2023-01-17 22:17:32', '1', '2023-01-17 22:17:39', 0); +INSERT INTO "public"."system_dict_data" VALUES (1214, 2, '图片', 'image', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 图片', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:19:47', 0); +INSERT INTO "public"."system_dict_data" VALUES (1215, 3, '语音', 'voice', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 语音', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:20:08', 0); +INSERT INTO "public"."system_dict_data" VALUES (1216, 4, '视频', 'video', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 视频', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:21:08', 0); +INSERT INTO "public"."system_dict_data" VALUES (1217, 5, '小视频', 'shortvideo', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 小视频', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:19:59', 0); +INSERT INTO "public"."system_dict_data" VALUES (1218, 6, '图文', 'news', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 图文', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:22:54', 0); +INSERT INTO "public"."system_dict_data" VALUES (1219, 7, '音乐', 'music', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 音乐', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:22:54', 0); +INSERT INTO "public"."system_dict_data" VALUES (1220, 8, '地理位置', 'location', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 地理位置', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:23:51', 0); +INSERT INTO "public"."system_dict_data" VALUES (1221, 9, '链接', 'link', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 链接', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:24:49', 0); +INSERT INTO "public"."system_dict_data" VALUES (1222, 10, '事件', 'event', 'mp_message_type', 0, 'default', '', '公众号的消息类型 - 事件', '1', '2023-01-17 22:17:32', '1', '2023-01-17 14:24:49', 0); +INSERT INTO "public"."system_dict_data" VALUES (1223, 0, '初始化', '0', 'system_mail_send_status', 0, 'primary', '', '邮件发送状态 - 初始化\n', '1', '2023-01-26 09:53:49', '1', '2023-01-26 16:36:14', 0); +INSERT INTO "public"."system_dict_data" VALUES (1224, 10, '发送成功', '10', 'system_mail_send_status', 0, 'success', '', '邮件发送状态 - 发送成功', '1', '2023-01-26 09:54:28', '1', '2023-01-26 16:36:22', 0); +INSERT INTO "public"."system_dict_data" VALUES (1225, 20, '发送失败', '20', 'system_mail_send_status', 0, 'danger', '', '邮件发送状态 - 发送失败', '1', '2023-01-26 09:54:50', '1', '2023-01-26 16:36:26', 0); +INSERT INTO "public"."system_dict_data" VALUES (1226, 30, '不发送', '30', 'system_mail_send_status', 0, 'info', '', '邮件发送状态 - 不发送', '1', '2023-01-26 09:55:06', '1', '2023-01-26 16:36:36', 0); +INSERT INTO "public"."system_dict_data" VALUES (1227, 1, '通知公告', '1', 'system_notify_template_type', 0, 'primary', '', '站内信模版的类型 - 通知公告', '1', '2023-01-28 10:35:59', '1', '2023-01-28 10:35:59', 0); +INSERT INTO "public"."system_dict_data" VALUES (1228, 2, '系统消息', '2', 'system_notify_template_type', 0, 'success', '', '站内信模版的类型 - 系统消息', '1', '2023-01-28 10:36:20', '1', '2023-01-28 10:36:25', 0); +INSERT INTO "public"."system_dict_data" VALUES (1230, 13, '支付宝条码支付', 'alipay_bar', 'pay_channel_code', 0, 'primary', '', '支付宝条码支付', '1', '2023-02-18 23:32:24', '1', '2023-07-19 20:09:23', 0); +INSERT INTO "public"."system_dict_data" VALUES (1231, 10, 'Vue2 Element UI 标准模版', '10', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:03:55', '1', '2023-04-13 00:03:55', 0); +INSERT INTO "public"."system_dict_data" VALUES (1232, 20, 'Vue3 Element Plus 标准模版', '20', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:04:08', '1', '2023-04-13 00:04:08', 0); +INSERT INTO "public"."system_dict_data" VALUES (1233, 21, 'Vue3 Element Plus Schema 模版', '21', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:04:26', '1', '2023-04-13 00:04:26', 0); +INSERT INTO "public"."system_dict_data" VALUES (1234, 30, 'Vue3 vben 模版', '30', 'infra_codegen_front_type', 0, '', '', '', '1', '2023-04-13 00:04:26', '1', '2023-04-13 00:04:26', 0); +INSERT INTO "public"."system_dict_data" VALUES (1244, 0, '按件', '1', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:46:40', '1', '2023-05-21 22:46:40', 0); +INSERT INTO "public"."system_dict_data" VALUES (1245, 1, '按重量', '2', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:46:58', '1', '2023-05-21 22:46:58', 0); +INSERT INTO "public"."system_dict_data" VALUES (1246, 2, '按体积', '3', 'trade_delivery_express_charge_mode', 0, '', '', '', '1', '2023-05-21 22:47:18', '1', '2023-05-21 22:47:18', 0); +INSERT INTO "public"."system_dict_data" VALUES (1335, 11, '订单积分抵扣', '11', 'member_point_biz_type', 0, '', '', '', '1', '2023-06-10 12:15:27', '1', '2023-10-11 07:41:43', 0); +INSERT INTO "public"."system_dict_data" VALUES (1336, 1, '签到', '1', 'member_point_biz_type', 0, '', '', '', '1', '2023-06-10 12:15:48', '1', '2023-08-20 11:59:53', 0); +INSERT INTO "public"."system_dict_data" VALUES (1341, 20, '已退款', '20', 'pay_order_status', 0, 'danger', '', '已退款', '1', '2023-07-19 18:05:37', '1', '2023-07-19 18:05:37', 0); +INSERT INTO "public"."system_dict_data" VALUES (1342, 21, '请求成功,但是结果失败', '21', 'pay_notify_status', 0, 'warning', '', '请求成功,但是结果失败', '1', '2023-07-19 18:10:47', '1', '2023-07-19 18:11:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (1343, 22, '请求失败', '22', 'pay_notify_status', 0, 'warning', '', NULL, '1', '2023-07-19 18:11:05', '1', '2023-07-19 18:11:27', 0); +INSERT INTO "public"."system_dict_data" VALUES (1344, 4, '微信扫码支付', 'wx_native', 'pay_channel_code', 0, 'success', '', '微信扫码支付', '1', '2023-07-19 20:07:47', '1', '2023-07-19 20:09:03', 0); +INSERT INTO "public"."system_dict_data" VALUES (1345, 5, '微信条码支付', 'wx_bar', 'pay_channel_code', 0, 'success', '', '微信条码支付\n', '1', '2023-07-19 20:08:06', '1', '2023-07-19 20:09:08', 0); +INSERT INTO "public"."system_dict_data" VALUES (1346, 1, '支付单', '1', 'pay_notify_type', 0, 'primary', '', '支付单', '1', '2023-07-20 12:23:17', '1', '2023-07-20 12:23:17', 0); +INSERT INTO "public"."system_dict_data" VALUES (1347, 2, '退款单', '2', 'pay_notify_type', 0, 'danger', '', NULL, '1', '2023-07-20 12:23:26', '1', '2023-07-20 12:23:26', 0); +INSERT INTO "public"."system_dict_data" VALUES (1348, 20, '模拟支付', 'mock', 'pay_channel_code', 0, 'default', '', '模拟支付', '1', '2023-07-29 11:10:51', '1', '2023-07-29 03:14:10', 0); +INSERT INTO "public"."system_dict_data" VALUES (1349, 12, '订单积分抵扣(整单取消)', '12', 'member_point_biz_type', 0, '', '', '', '1', '2023-08-20 12:00:03', '1', '2023-10-11 07:42:01', 0); +INSERT INTO "public"."system_dict_data" VALUES (1350, 0, '管理员调整', '0', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', 0); +INSERT INTO "public"."system_dict_data" VALUES (1351, 1, '邀新奖励', '1', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', 0); +INSERT INTO "public"."system_dict_data" VALUES (1352, 11, '下单奖励', '11', 'member_experience_biz_type', 0, 'success', '', NULL, '', '2023-08-22 12:41:01', '1', '2023-10-11 07:45:09', 0); +INSERT INTO "public"."system_dict_data" VALUES (1353, 12, '下单奖励(整单取消)', '12', 'member_experience_biz_type', 0, 'warning', '', NULL, '', '2023-08-22 12:41:01', '1', '2023-10-11 07:45:01', 0); +INSERT INTO "public"."system_dict_data" VALUES (1354, 4, '签到奖励', '4', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', 0); +INSERT INTO "public"."system_dict_data" VALUES (1355, 5, '抽奖奖励', '5', 'member_experience_biz_type', 0, '', '', NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', 0); +INSERT INTO "public"."system_dict_data" VALUES (1356, 1, '快递发货', '1', 'trade_delivery_type', 0, '', '', '', '1', '2023-08-23 00:04:55', '1', '2023-08-23 00:04:55', 0); +INSERT INTO "public"."system_dict_data" VALUES (1357, 2, '用户自提', '2', 'trade_delivery_type', 0, '', '', '', '1', '2023-08-23 00:05:05', '1', '2023-08-23 00:05:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1358, 3, '品类劵', '3', 'promotion_product_scope', 0, 'default', '', '', '1', '2023-09-01 23:43:07', '1', '2023-09-28 00:27:47', 0); +INSERT INTO "public"."system_dict_data" VALUES (1359, 1, '人人分销', '1', 'brokerage_enabled_condition', 0, '', '', '所有用户都可以分销', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1360, 2, '指定分销', '2', 'brokerage_enabled_condition', 0, '', '', '仅可后台手动设置推广员', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1361, 1, '首次绑定', '1', 'brokerage_bind_mode', 0, '', '', '只要用户没有推广人,随时都可以绑定推广关系', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1362, 2, '注册绑定', '2', 'brokerage_bind_mode', 0, '', '', '仅新用户注册时才能绑定推广关系', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1363, 3, '覆盖绑定', '3', 'brokerage_bind_mode', 0, '', '', '如果用户已经有推广人,推广人会被变更', '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1364, 1, '钱包', '1', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1365, 2, '银行卡', '2', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1366, 3, '微信', '3', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1367, 4, '支付宝', '4', 'brokerage_withdraw_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1368, 1, '订单返佣', '1', 'brokerage_record_biz_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1369, 2, '申请提现', '2', 'brokerage_record_biz_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1370, 3, '申请提现驳回', '3', 'brokerage_record_biz_type', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1371, 0, '待结算', '0', 'brokerage_record_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1372, 1, '已结算', '1', 'brokerage_record_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1373, 2, '已取消', '2', 'brokerage_record_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1374, 0, '审核中', '0', 'brokerage_withdraw_status', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1375, 10, '审核通过', '10', 'brokerage_withdraw_status', 0, 'success', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1376, 11, '提现成功', '11', 'brokerage_withdraw_status', 0, 'success', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1377, 20, '审核不通过', '20', 'brokerage_withdraw_status', 0, 'danger', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1378, 21, '提现失败', '21', 'brokerage_withdraw_status', 0, 'danger', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1379, 0, '工商银行', '0', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1380, 1, '建设银行', '1', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1381, 2, '农业银行', '2', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1382, 3, '中国银行', '3', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1383, 4, '交通银行', '4', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1384, 5, '招商银行', '5', 'brokerage_bank_name', 0, '', '', NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1385, 21, '钱包', 'wallet', 'pay_channel_code', 0, 'primary', '', '', '1', '2023-10-01 21:46:19', '1', '2023-10-01 21:48:01', 0); +INSERT INTO "public"."system_dict_data" VALUES (1386, 1, '砍价中', '1', 'promotion_bargain_record_status', 0, 'default', '', '', '1', '2023-10-05 10:41:26', '1', '2023-10-05 10:41:26', 0); +INSERT INTO "public"."system_dict_data" VALUES (1387, 2, '砍价成功', '2', 'promotion_bargain_record_status', 0, 'success', '', '', '1', '2023-10-05 10:41:39', '1', '2023-10-05 10:41:39', 0); +INSERT INTO "public"."system_dict_data" VALUES (1388, 3, '砍价失败', '3', 'promotion_bargain_record_status', 0, 'warning', '', '', '1', '2023-10-05 10:41:57', '1', '2023-10-05 10:41:57', 0); +INSERT INTO "public"."system_dict_data" VALUES (1389, 1, '拼团中', '1', 'promotion_combination_record_status', 0, '', '', '', '1', '2023-10-08 07:24:44', '1', '2023-10-08 07:24:44', 0); +INSERT INTO "public"."system_dict_data" VALUES (1390, 2, '拼团成功', '2', 'promotion_combination_record_status', 0, 'success', '', '', '1', '2023-10-08 07:24:56', '1', '2023-10-08 07:24:56', 0); +INSERT INTO "public"."system_dict_data" VALUES (1391, 3, '拼团失败', '3', 'promotion_combination_record_status', 0, 'warning', '', '', '1', '2023-10-08 07:25:11', '1', '2023-10-08 07:25:11', 0); +INSERT INTO "public"."system_dict_data" VALUES (1392, 2, '管理员修改', '2', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:41:34', '1', '2023-10-11 07:41:34', 0); +INSERT INTO "public"."system_dict_data" VALUES (1393, 13, '订单积分抵扣(单个退款)', '13', 'member_point_biz_type', 0, '', '', '', '1', '2023-10-11 07:42:29', '1', '2023-10-11 07:42:29', 0); +INSERT INTO "public"."system_dict_data" VALUES (1394, 21, '订单积分奖励', '21', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:42:44', '1', '2023-10-11 07:42:44', 0); +INSERT INTO "public"."system_dict_data" VALUES (1395, 22, '订单积分奖励(整单取消)', '22', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:42:55', '1', '2023-10-11 07:43:01', 0); +INSERT INTO "public"."system_dict_data" VALUES (1396, 23, '订单积分奖励(单个退款)', '23', 'member_point_biz_type', 0, 'default', '', '', '1', '2023-10-11 07:43:16', '1', '2023-10-11 07:43:16', 0); +INSERT INTO "public"."system_dict_data" VALUES (1397, 13, '下单奖励(单个退款)', '13', 'member_experience_biz_type', 0, 'warning', '', '', '1', '2023-10-11 07:45:24', '1', '2023-10-11 07:45:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (1398, 5, '网上转账', '5', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:24', '1', '2023-10-18 21:55:24', 0); +INSERT INTO "public"."system_dict_data" VALUES (1399, 6, '支付宝', '6', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:38', '1', '2023-10-18 21:55:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (1400, 7, '微信支付', '7', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:53', '1', '2023-10-18 21:55:53', 0); +INSERT INTO "public"."system_dict_data" VALUES (1401, 8, '其他', '8', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:56:06', '1', '2023-10-18 21:56:06', 0); +INSERT INTO "public"."system_dict_data" VALUES (1402, 1, 'IT', '1', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:15', '1', '2024-02-18 23:30:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (1403, 2, '金融业', '2', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:29', '1', '2024-02-18 23:30:43', 0); +INSERT INTO "public"."system_dict_data" VALUES (1404, 3, '房地产', '3', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:41', '1', '2024-02-18 23:30:48', 0); +INSERT INTO "public"."system_dict_data" VALUES (1405, 4, '商业服务', '4', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:54', '1', '2024-02-18 23:30:54', 0); +INSERT INTO "public"."system_dict_data" VALUES (1406, 5, '运输/物流', '5', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:03', '1', '2024-02-18 23:31:00', 0); +INSERT INTO "public"."system_dict_data" VALUES (1407, 6, '生产', '6', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:13', '1', '2024-02-18 23:31:08', 0); +INSERT INTO "public"."system_dict_data" VALUES (1408, 7, '政府', '7', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:27', '1', '2024-02-18 23:31:13', 0); +INSERT INTO "public"."system_dict_data" VALUES (1409, 8, '文化传媒', '8', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:37', '1', '2024-02-18 23:31:20', 0); +INSERT INTO "public"."system_dict_data" VALUES (1422, 1, 'A (重点客户)', '1', 'crm_customer_level', 0, 'primary', '', '', '1', '2023-10-28 23:07:13', '1', '2023-10-28 23:07:13', 0); +INSERT INTO "public"."system_dict_data" VALUES (1423, 2, 'B (普通客户)', '2', 'crm_customer_level', 0, 'info', '', '', '1', '2023-10-28 23:07:35', '1', '2023-10-28 23:07:35', 0); +INSERT INTO "public"."system_dict_data" VALUES (1424, 3, 'C (非优先客户)', '3', 'crm_customer_level', 0, 'default', '', '', '1', '2023-10-28 23:07:53', '1', '2023-10-28 23:07:53', 0); +INSERT INTO "public"."system_dict_data" VALUES (1425, 1, '促销', '1', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:29', '1', '2023-10-28 23:08:29', 0); +INSERT INTO "public"."system_dict_data" VALUES (1426, 2, '搜索引擎', '2', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:39', '1', '2023-10-28 23:08:39', 0); +INSERT INTO "public"."system_dict_data" VALUES (1427, 3, '广告', '3', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:47', '1', '2023-10-28 23:08:47', 0); +INSERT INTO "public"."system_dict_data" VALUES (1428, 4, '转介绍', '4', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:58', '1', '2023-10-28 23:08:58', 0); +INSERT INTO "public"."system_dict_data" VALUES (1429, 5, '线上注册', '5', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:12', '1', '2023-10-28 23:09:12', 0); +INSERT INTO "public"."system_dict_data" VALUES (1430, 6, '线上咨询', '6', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:22', '1', '2023-10-28 23:09:22', 0); +INSERT INTO "public"."system_dict_data" VALUES (1431, 7, '预约上门', '7', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:39', '1', '2023-10-28 23:09:39', 0); +INSERT INTO "public"."system_dict_data" VALUES (1432, 8, '陌拜', '8', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:04', '1', '2023-10-28 23:10:04', 0); +INSERT INTO "public"."system_dict_data" VALUES (1433, 9, '电话咨询', '9', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:18', '1', '2023-10-28 23:10:18', 0); +INSERT INTO "public"."system_dict_data" VALUES (1434, 10, '邮件咨询', '10', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:33', '1', '2023-10-28 23:10:33', 0); +INSERT INTO "public"."system_dict_data" VALUES (1435, 10, 'Gitee', '10', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:04:42', '1', '2023-11-04 13:04:42', 0); +INSERT INTO "public"."system_dict_data" VALUES (1436, 20, '钉钉', '20', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:04:54', '1', '2023-11-04 13:04:54', 0); +INSERT INTO "public"."system_dict_data" VALUES (1437, 30, '企业微信', '30', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:09', '1', '2023-11-04 13:05:09', 0); +INSERT INTO "public"."system_dict_data" VALUES (1438, 31, '微信公众平台', '31', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:18', '1', '2023-11-04 13:05:18', 0); +INSERT INTO "public"."system_dict_data" VALUES (1439, 32, '微信开放平台', '32', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:30', '1', '2023-11-04 13:05:30', 0); +INSERT INTO "public"."system_dict_data" VALUES (1440, 34, '微信小程序', '34', 'system_social_type', 0, '', '', '', '1', '2023-11-04 13:05:38', '1', '2023-11-04 13:07:16', 0); +INSERT INTO "public"."system_dict_data" VALUES (1441, 1, '上架', '1', 'crm_product_status', 0, 'success', '', '', '1', '2023-10-30 21:49:34', '1', '2023-10-30 21:49:34', 0); +INSERT INTO "public"."system_dict_data" VALUES (1442, 0, '下架', '0', 'crm_product_status', 0, 'success', '', '', '1', '2023-10-30 21:49:13', '1', '2023-10-30 21:49:13', 0); +INSERT INTO "public"."system_dict_data" VALUES (1443, 15, '子表', '15', 'infra_codegen_template_type', 0, 'default', '', '', '1', '2023-11-13 23:06:16', '1', '2023-11-13 23:06:16', 0); +INSERT INTO "public"."system_dict_data" VALUES (1444, 10, '主表(标准模式)', '10', 'infra_codegen_template_type', 0, 'default', '', '', '1', '2023-11-14 12:32:49', '1', '2023-11-14 12:32:49', 0); +INSERT INTO "public"."system_dict_data" VALUES (1445, 11, '主表(ERP 模式)', '11', 'infra_codegen_template_type', 0, 'default', '', '', '1', '2023-11-14 12:33:05', '1', '2023-11-14 12:33:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1446, 12, '主表(内嵌模式)', '12', 'infra_codegen_template_type', 0, '', '', '', '1', '2023-11-14 12:33:31', '1', '2023-11-14 12:33:31', 0); +INSERT INTO "public"."system_dict_data" VALUES (1447, 1, '负责人', '1', 'crm_permission_level', 0, 'default', '', '', '1', '2023-11-30 09:53:12', '1', '2023-11-30 09:53:12', 0); +INSERT INTO "public"."system_dict_data" VALUES (1448, 2, '只读', '2', 'crm_permission_level', 0, '', '', '', '1', '2023-11-30 09:53:29', '1', '2023-11-30 09:53:29', 0); +INSERT INTO "public"."system_dict_data" VALUES (1449, 3, '读写', '3', 'crm_permission_level', 0, '', '', '', '1', '2023-11-30 09:53:36', '1', '2023-11-30 09:53:36', 0); +INSERT INTO "public"."system_dict_data" VALUES (1450, 0, '未提交', '0', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:56:59', '1', '2023-11-30 18:56:59', 0); +INSERT INTO "public"."system_dict_data" VALUES (1451, 10, '审批中', '10', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:10', '1', '2023-11-30 18:57:10', 0); +INSERT INTO "public"."system_dict_data" VALUES (1452, 20, '审核通过', '20', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:24', '1', '2023-11-30 18:57:24', 0); +INSERT INTO "public"."system_dict_data" VALUES (1453, 30, '审核不通过', '30', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:32', '1', '2023-11-30 18:57:32', 0); +INSERT INTO "public"."system_dict_data" VALUES (1454, 40, '已取消', '40', 'crm_audit_status', 0, '', '', '', '1', '2023-11-30 18:57:42', '1', '2023-11-30 18:57:42', 0); +INSERT INTO "public"."system_dict_data" VALUES (1456, 1, '支票', '1', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:29', '1', '2023-10-18 21:54:29', 0); +INSERT INTO "public"."system_dict_data" VALUES (1457, 2, '现金', '2', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:41', '1', '2023-10-18 21:54:41', 0); +INSERT INTO "public"."system_dict_data" VALUES (1458, 3, '邮政汇款', '3', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:53', '1', '2023-10-18 21:54:53', 0); +INSERT INTO "public"."system_dict_data" VALUES (1459, 4, '电汇', '4', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:07', '1', '2023-10-18 21:55:07', 0); +INSERT INTO "public"."system_dict_data" VALUES (1460, 5, '网上转账', '5', 'crm_receivable_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:24', '1', '2023-10-18 21:55:24', 0); +INSERT INTO "public"."system_dict_data" VALUES (1461, 1, '个', '1', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:02:26', '1', '2023-12-05 23:02:26', 0); +INSERT INTO "public"."system_dict_data" VALUES (1462, 2, '块', '2', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:02:34', '1', '2023-12-05 23:02:34', 0); +INSERT INTO "public"."system_dict_data" VALUES (1463, 3, '只', '3', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:02:57', '1', '2023-12-05 23:02:57', 0); +INSERT INTO "public"."system_dict_data" VALUES (1464, 4, '把', '4', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:05', '1', '2023-12-05 23:03:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1465, 5, '枚', '5', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:14', '1', '2023-12-05 23:03:14', 0); +INSERT INTO "public"."system_dict_data" VALUES (1466, 6, '瓶', '6', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:20', '1', '2023-12-05 23:03:20', 0); +INSERT INTO "public"."system_dict_data" VALUES (1467, 7, '盒', '7', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:30', '1', '2023-12-05 23:03:30', 0); +INSERT INTO "public"."system_dict_data" VALUES (1468, 8, '台', '8', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:41', '1', '2023-12-05 23:03:41', 0); +INSERT INTO "public"."system_dict_data" VALUES (1469, 9, '吨', '9', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:03:48', '1', '2023-12-05 23:03:48', 0); +INSERT INTO "public"."system_dict_data" VALUES (1470, 10, '千克', '10', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:03', '1', '2023-12-05 23:04:03', 0); +INSERT INTO "public"."system_dict_data" VALUES (1471, 11, '米', '11', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:12', '1', '2023-12-05 23:04:12', 0); +INSERT INTO "public"."system_dict_data" VALUES (1472, 12, '箱', '12', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:25', '1', '2023-12-05 23:04:25', 0); +INSERT INTO "public"."system_dict_data" VALUES (1473, 13, '套', '13', 'crm_product_unit', 0, '', '', '', '1', '2023-12-05 23:04:34', '1', '2023-12-05 23:04:34', 0); +INSERT INTO "public"."system_dict_data" VALUES (1474, 1, '打电话', '1', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:48:20', '1', '2024-01-15 20:48:20', 0); +INSERT INTO "public"."system_dict_data" VALUES (1475, 2, '发短信', '2', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:48:31', '1', '2024-01-15 20:48:31', 0); +INSERT INTO "public"."system_dict_data" VALUES (1476, 3, '上门拜访', '3', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:49:07', '1', '2024-01-15 20:49:07', 0); +INSERT INTO "public"."system_dict_data" VALUES (1477, 4, '微信沟通', '4', 'crm_follow_up_type', 0, '', '', '', '1', '2024-01-15 20:49:15', '1', '2024-01-15 20:49:15', 0); +INSERT INTO "public"."system_dict_data" VALUES (1478, 4, '钱包余额', '4', 'pay_transfer_type', 0, 'info', '', '', '1', '2023-10-28 16:28:37', '1', '2023-10-28 16:28:37', 0); +INSERT INTO "public"."system_dict_data" VALUES (1479, 3, '银行卡', '3', 'pay_transfer_type', 0, 'default', '', '', '1', '2023-10-28 16:28:21', '1', '2023-10-28 16:28:21', 0); +INSERT INTO "public"."system_dict_data" VALUES (1480, 2, '微信余额', '2', 'pay_transfer_type', 0, 'info', '', '', '1', '2023-10-28 16:28:07', '1', '2023-10-28 16:28:07', 0); +INSERT INTO "public"."system_dict_data" VALUES (1481, 1, '支付宝余额', '1', 'pay_transfer_type', 0, 'default', '', '', '1', '2023-10-28 16:27:44', '1', '2023-10-28 16:27:44', 0); +INSERT INTO "public"."system_dict_data" VALUES (1482, 4, '转账失败', '30', 'pay_transfer_status', 0, 'warning', '', '', '1', '2023-10-28 16:24:16', '1', '2023-10-28 16:24:16', 0); +INSERT INTO "public"."system_dict_data" VALUES (1483, 3, '转账成功', '20', 'pay_transfer_status', 0, 'success', '', '', '1', '2023-10-28 16:23:50', '1', '2023-10-28 16:23:50', 0); +INSERT INTO "public"."system_dict_data" VALUES (1484, 2, '转账进行中', '10', 'pay_transfer_status', 0, 'info', '', '', '1', '2023-10-28 16:23:12', '1', '2023-10-28 16:23:12', 0); +INSERT INTO "public"."system_dict_data" VALUES (1485, 1, '等待转账', '0', 'pay_transfer_status', 0, 'default', '', '', '1', '2023-10-28 16:21:43', '1', '2023-10-28 16:23:22', 0); +INSERT INTO "public"."system_dict_data" VALUES (1486, 10, '其它入库', '10', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-05 18:07:25', '1', '2024-02-05 18:07:43', 0); +INSERT INTO "public"."system_dict_data" VALUES (1487, 11, '其它入库(作废)', '11', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-05 18:08:07', '1', '2024-02-05 19:20:16', 0); +INSERT INTO "public"."system_dict_data" VALUES (1488, 20, '其它出库', '20', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-05 18:08:51', '1', '2024-02-05 18:08:51', 0); +INSERT INTO "public"."system_dict_data" VALUES (1489, 21, '其它出库(作废)', '21', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-05 18:09:00', '1', '2024-02-05 19:20:10', 0); +INSERT INTO "public"."system_dict_data" VALUES (1490, 10, '未审核', '10', 'erp_audit_status', 0, 'default', '', '', '1', '2024-02-06 00:00:21', '1', '2024-02-06 00:00:21', 0); +INSERT INTO "public"."system_dict_data" VALUES (1491, 20, '已审核', '20', 'erp_audit_status', 0, 'success', '', '', '1', '2024-02-06 00:00:35', '1', '2024-02-06 00:00:35', 0); +INSERT INTO "public"."system_dict_data" VALUES (1492, 30, '调拨入库', '30', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-07 20:34:19', '1', '2024-02-07 12:36:31', 0); +INSERT INTO "public"."system_dict_data" VALUES (1493, 31, '调拨入库(作废)', '31', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-07 20:34:29', '1', '2024-02-07 20:37:11', 0); +INSERT INTO "public"."system_dict_data" VALUES (1494, 32, '调拨出库', '32', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-07 20:34:38', '1', '2024-02-07 12:36:33', 0); +INSERT INTO "public"."system_dict_data" VALUES (1495, 33, '调拨出库(作废)', '33', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-07 20:34:49', '1', '2024-02-07 20:37:06', 0); +INSERT INTO "public"."system_dict_data" VALUES (1496, 40, '盘盈入库', '40', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-08 08:53:00', '1', '2024-02-08 08:53:09', 0); +INSERT INTO "public"."system_dict_data" VALUES (1497, 41, '盘盈入库(作废)', '41', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-08 08:53:39', '1', '2024-02-16 19:40:54', 0); +INSERT INTO "public"."system_dict_data" VALUES (1498, 42, '盘亏出库', '42', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-08 08:54:16', '1', '2024-02-08 08:54:16', 0); +INSERT INTO "public"."system_dict_data" VALUES (1499, 43, '盘亏出库(作废)', '43', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-08 08:54:31', '1', '2024-02-16 19:40:46', 0); +INSERT INTO "public"."system_dict_data" VALUES (1500, 50, '销售出库', '50', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-11 21:47:25', '1', '2024-02-11 21:50:40', 0); +INSERT INTO "public"."system_dict_data" VALUES (1501, 51, '销售出库(作废)', '51', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-11 21:47:37', '1', '2024-02-11 21:51:12', 0); +INSERT INTO "public"."system_dict_data" VALUES (1502, 60, '销售退货入库', '60', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-12 06:51:05', '1', '2024-02-12 06:51:05', 0); +INSERT INTO "public"."system_dict_data" VALUES (1503, 61, '销售退货入库(作废)', '61', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-12 06:51:18', '1', '2024-02-12 06:51:18', 0); +INSERT INTO "public"."system_dict_data" VALUES (1504, 70, '采购入库', '70', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-16 13:10:02', '1', '2024-02-16 13:10:02', 0); +INSERT INTO "public"."system_dict_data" VALUES (1505, 71, '采购入库(作废)', '71', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-16 13:10:10', '1', '2024-02-16 19:40:40', 0); +INSERT INTO "public"."system_dict_data" VALUES (1506, 80, '采购退货出库', '80', 'erp_stock_record_biz_type', 0, '', '', '', '1', '2024-02-16 13:10:17', '1', '2024-02-16 13:10:17', 0); +INSERT INTO "public"."system_dict_data" VALUES (1507, 81, '采购退货出库(作废)', '81', 'erp_stock_record_biz_type', 0, 'danger', '', '', '1', '2024-02-16 13:10:26', '1', '2024-02-16 19:40:33', 0); +INSERT INTO "public"."system_dict_data" VALUES (1509, 3, '审批不通过', '3', 'bpm_process_instance_status', 0, 'danger', '', '', '1', '2024-03-16 16:12:06', '1', '2024-03-16 16:12:06', 0); +INSERT INTO "public"."system_dict_data" VALUES (1510, 4, '已取消', '4', 'bpm_process_instance_status', 0, 'warning', '', '', '1', '2024-03-16 16:12:22', '1', '2024-03-16 16:12:22', 0); +INSERT INTO "public"."system_dict_data" VALUES (1511, 5, '已退回', '5', 'bpm_task_status', 0, 'warning', '', '', '1', '2024-03-16 19:10:46', '1', '2024-03-08 22:41:40', 0); +INSERT INTO "public"."system_dict_data" VALUES (1512, 6, '委派中', '6', 'bpm_task_status', 0, 'primary', '', '', '1', '2024-03-17 10:06:22', '1', '2024-03-08 22:41:40', 0); +INSERT INTO "public"."system_dict_data" VALUES (1514, 0, '待审批', '0', 'bpm_task_status', 0, 'info', '', '', '1', '2024-03-17 10:07:11', '1', '2024-03-08 22:41:42', 0); +INSERT INTO "public"."system_dict_data" VALUES (1515, 35, '发起人自选', '35', 'bpm_task_candidate_strategy', 0, '', '', '', '1', '2024-03-22 19:45:16', '1', '2024-03-22 19:45:16', 0); +INSERT INTO "public"."system_dict_data" VALUES (1516, 1, '执行监听器', 'execution', 'bpm_process_listener_type', 0, 'primary', '', '', '1', '2024-03-23 12:54:03', '1', '2024-03-23 19:14:19', 0); +INSERT INTO "public"."system_dict_data" VALUES (1517, 1, '任务监听器', 'task', 'bpm_process_listener_type', 0, 'success', '', '', '1', '2024-03-23 12:54:13', '1', '2024-03-23 19:14:24', 0); +INSERT INTO "public"."system_dict_data" VALUES (1526, 1, 'Java 类', 'class', 'bpm_process_listener_value_type', 0, 'primary', '', '', '1', '2024-03-23 15:08:45', '1', '2024-03-23 19:14:32', 0); +INSERT INTO "public"."system_dict_data" VALUES (1527, 2, '表达式', 'expression', 'bpm_process_listener_value_type', 0, 'success', '', '', '1', '2024-03-23 15:09:06', '1', '2024-03-23 19:14:38', 0); +INSERT INTO "public"."system_dict_data" VALUES (1528, 3, '代理表达式', 'delegateExpression', 'bpm_process_listener_value_type', 0, 'info', '', '', '1', '2024-03-23 15:11:23', '1', '2024-03-23 19:14:41', 0); +INSERT INTO "public"."system_dict_data" VALUES (1529, 1, '天', '1', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:50:26', '1', '2024-03-29 22:50:26', 0); +INSERT INTO "public"."system_dict_data" VALUES (1530, 2, '周', '2', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:50:36', '1', '2024-03-29 22:50:36', 0); +INSERT INTO "public"."system_dict_data" VALUES (1531, 3, '月', '3', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:50:46', '1', '2024-03-29 22:50:54', 0); +INSERT INTO "public"."system_dict_data" VALUES (1532, 4, '季度', '4', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:51:01', '1', '2024-03-29 22:51:01', 0); +INSERT INTO "public"."system_dict_data" VALUES (1533, 5, '年', '5', 'date_interval', 0, '', '', '', '1', '2024-03-29 22:51:07', '1', '2024-03-29 22:51:07', 0); +INSERT INTO "public"."system_dict_data" VALUES (1534, 1, '赢单', '1', 'crm_business_end_status_type', 0, 'success', '', '', '1', '2024-04-13 23:26:57', '1', '2024-04-13 23:26:57', 0); +INSERT INTO "public"."system_dict_data" VALUES (1535, 2, '输单', '2', 'crm_business_end_status_type', 0, 'primary', '', '', '1', '2024-04-13 23:27:31', '1', '2024-04-13 23:27:31', 0); +INSERT INTO "public"."system_dict_data" VALUES (1536, 3, '无效', '3', 'crm_business_end_status_type', 0, 'info', '', '', '1', '2024-04-13 23:27:59', '1', '2024-04-13 23:27:59', 0); + +-- ---------------------------- +-- Table structure for system_dict_type +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_dict_type"; +CREATE TABLE "public"."system_dict_type" ( + "id" int8 NOT NULL, + "name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "type" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "status" int2 NOT NULL DEFAULT 0, + "remark" varchar(500) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "deleted_time" timestamp(6) +) +; +COMMENT ON COLUMN "public"."system_dict_type"."id" IS '字典主键'; +COMMENT ON COLUMN "public"."system_dict_type"."name" IS '字典名称'; +COMMENT ON COLUMN "public"."system_dict_type"."type" IS '字典类型'; +COMMENT ON COLUMN "public"."system_dict_type"."status" IS '状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."system_dict_type"."remark" IS '备注'; +COMMENT ON COLUMN "public"."system_dict_type"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_dict_type"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_dict_type"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_dict_type"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_dict_type"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_dict_type"."deleted_time" IS '删除时间'; +COMMENT ON TABLE "public"."system_dict_type" IS '字典类型表'; + +-- ---------------------------- +-- Records of system_dict_type +-- ---------------------------- +INSERT INTO "public"."system_dict_type" VALUES (1, '用户性别', 'system_user_sex', 0, NULL, 'admin', '2021-01-05 17:03:48', '1', '2022-05-16 20:29:32', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (6, '参数类型', 'infra_config_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:36:54', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (7, '通知类型', 'system_notice_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:35:26', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (9, '操作类型', 'infra_operate_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '1', '2024-03-14 12:44:01', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (10, '系统状态', 'common_status', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2022-02-01 16:21:28', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (11, 'Boolean 是否类型', 'infra_boolean_string', 0, 'boolean 转是否', '', '2021-01-19 03:20:08', '', '2022-02-01 16:37:10', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (104, '登陆结果', 'system_login_result', 0, '登陆结果', '', '2021-01-18 06:17:11', '', '2022-02-01 16:36:00', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (106, '代码生成模板类型', 'infra_codegen_template_type', 0, NULL, '', '2021-02-05 07:08:06', '1', '2022-05-16 20:26:50', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (107, '定时任务状态', 'infra_job_status', 0, NULL, '', '2021-02-07 07:44:16', '', '2022-02-01 16:51:11', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (108, '定时任务日志状态', 'infra_job_log_status', 0, NULL, '', '2021-02-08 10:03:51', '', '2022-02-01 16:50:43', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (109, '用户类型', 'user_type', 0, NULL, '', '2021-02-26 00:15:51', '', '2021-02-26 00:15:51', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (110, 'API 异常数据的处理状态', 'infra_api_error_log_process_status', 0, NULL, '', '2021-02-26 07:07:01', '', '2022-02-01 16:50:53', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (111, '短信渠道编码', 'system_sms_channel_code', 0, NULL, '1', '2021-04-05 01:04:50', '1', '2022-02-16 02:09:08', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (112, '短信模板的类型', 'system_sms_template_type', 0, NULL, '1', '2021-04-05 21:50:43', '1', '2022-02-01 16:35:06', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (113, '短信发送状态', 'system_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:03', '1', '2022-02-01 16:35:09', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (114, '短信接收状态', 'system_sms_receive_status', 0, NULL, '1', '2021-04-11 20:27:14', '1', '2022-02-01 16:35:14', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (116, '登陆日志的类型', 'system_login_type', 0, '登陆日志的类型', '1', '2021-10-06 00:50:46', '1', '2022-02-01 16:35:56', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (117, 'OA 请假类型', 'bpm_oa_leave_type', 0, NULL, '1', '2021-09-21 22:34:33', '1', '2022-01-22 10:41:37', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (130, '支付渠道编码类型', 'pay_channel_code', 0, '支付渠道的编码', '1', '2021-12-03 10:35:08', '1', '2023-07-10 10:11:39', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (131, '支付回调状态', 'pay_notify_status', 0, '支付回调状态(包括退款回调)', '1', '2021-12-03 10:53:29', '1', '2023-07-19 18:09:43', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (132, '支付订单状态', 'pay_order_status', 0, '支付订单状态', '1', '2021-12-03 11:17:50', '1', '2021-12-03 11:17:50', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (134, '退款订单状态', 'pay_refund_status', 0, '退款订单状态', '1', '2021-12-10 16:42:50', '1', '2023-07-19 10:13:17', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (139, '流程实例的状态', 'bpm_process_instance_status', 0, '流程实例的状态', '1', '2022-01-07 23:46:42', '1', '2022-01-07 23:46:42', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (140, '流程实例的结果', 'bpm_task_status', 0, '流程实例的结果', '1', '2022-01-07 23:48:10', '1', '2024-03-08 22:42:03', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (141, '流程的表单类型', 'bpm_model_form_type', 0, '流程的表单类型', '103', '2022-01-11 23:50:45', '103', '2022-01-11 23:50:45', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (142, '任务分配规则的类型', 'bpm_task_candidate_strategy', 0, 'BPM 任务的候选人的策略', '103', '2022-01-12 23:21:04', '103', '2024-03-06 02:53:59', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (144, '代码生成的场景枚举', 'infra_codegen_scene', 0, '代码生成的场景枚举', '1', '2022-02-02 13:14:45', '1', '2022-03-10 16:33:46', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (145, '角色类型', 'system_role_type', 0, '角色类型', '1', '2022-02-16 13:01:46', '1', '2022-02-16 13:01:46', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (146, '文件存储器', 'infra_file_storage', 0, '文件存储器', '1', '2022-03-15 00:24:38', '1', '2022-03-15 00:24:38', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (147, 'OAuth 2.0 授权类型', 'system_oauth2_grant_type', 0, 'OAuth 2.0 授权类型(模式)', '1', '2022-05-12 00:20:52', '1', '2022-05-11 16:25:49', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (149, '商品 SPU 状态', 'product_spu_status', 0, '商品 SPU 状态', '1', '2022-10-24 21:19:04', '1', '2022-10-24 21:19:08', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (150, '优惠类型', 'promotion_discount_type', 0, '优惠类型', '1', '2022-11-01 12:46:06', '1', '2022-11-01 12:46:06', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (151, '优惠劵模板的有限期类型', 'promotion_coupon_template_validity_type', 0, '优惠劵模板的有限期类型', '1', '2022-11-02 00:06:20', '1', '2022-11-04 00:08:26', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (152, '营销的商品范围', 'promotion_product_scope', 0, '营销的商品范围', '1', '2022-11-02 00:28:01', '1', '2022-11-02 00:28:01', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (153, '优惠劵的状态', 'promotion_coupon_status', 0, '优惠劵的状态', '1', '2022-11-04 00:14:49', '1', '2022-11-04 00:14:49', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (154, '优惠劵的领取方式', 'promotion_coupon_take_type', 0, '优惠劵的领取方式', '1', '2022-11-04 19:12:27', '1', '2022-11-04 19:12:27', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (155, '促销活动的状态', 'promotion_activity_status', 0, '促销活动的状态', '1', '2022-11-04 22:54:23', '1', '2022-11-04 22:54:23', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (156, '营销的条件类型', 'promotion_condition_type', 0, '营销的条件类型', '1', '2022-11-04 22:59:23', '1', '2022-11-04 22:59:23', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (157, '交易售后状态', 'trade_after_sale_status', 0, '交易售后状态', '1', '2022-11-19 20:52:56', '1', '2022-11-19 20:52:56', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (158, '交易售后的类型', 'trade_after_sale_type', 0, '交易售后的类型', '1', '2022-11-19 21:04:09', '1', '2022-11-19 21:04:09', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (159, '交易售后的方式', 'trade_after_sale_way', 0, '交易售后的方式', '1', '2022-11-19 21:39:04', '1', '2022-11-19 21:39:04', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (160, '终端', 'terminal', 0, '终端', '1', '2022-12-10 10:50:50', '1', '2022-12-10 10:53:11', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (161, '交易订单的类型', 'trade_order_type', 0, '交易订单的类型', '1', '2022-12-10 16:33:54', '1', '2022-12-10 16:33:54', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (162, '交易订单的状态', 'trade_order_status', 0, '交易订单的状态', '1', '2022-12-10 16:48:44', '1', '2022-12-10 16:48:44', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (163, '交易订单项的售后状态', 'trade_order_item_after_sale_status', 0, '交易订单项的售后状态', '1', '2022-12-10 20:58:08', '1', '2022-12-10 20:58:08', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (164, '公众号自动回复的请求关键字匹配模式', 'mp_auto_reply_request_match', 0, '公众号自动回复的请求关键字匹配模式', '1', '2023-01-16 23:29:56', '1', '2023-01-16 23:29:56', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (165, '公众号的消息类型', 'mp_message_type', 0, '公众号的消息类型', '1', '2023-01-17 22:17:09', '1', '2023-01-17 22:17:09', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (166, '邮件发送状态', 'system_mail_send_status', 0, '邮件发送状态', '1', '2023-01-26 09:53:13', '1', '2023-01-26 09:53:13', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (167, '站内信模版的类型', 'system_notify_template_type', 0, '站内信模版的类型', '1', '2023-01-28 10:35:10', '1', '2023-01-28 10:35:10', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (168, '代码生成的前端类型', 'infra_codegen_front_type', 0, '', '1', '2023-04-12 23:57:52', '1', '2023-04-12 23:57:52', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (170, '快递计费方式', 'trade_delivery_express_charge_mode', 0, '用于商城交易模块配送管理', '1', '2023-05-21 22:45:03', '1', '2023-05-21 22:45:03', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (171, '积分业务类型', 'member_point_biz_type', 0, '', '1', '2023-06-10 12:15:00', '1', '2023-06-28 13:48:20', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (173, '支付通知类型', 'pay_notify_type', 0, NULL, '1', '2023-07-20 12:23:03', '1', '2023-07-20 12:23:03', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (174, '会员经验业务类型', 'member_experience_biz_type', 0, NULL, '', '2023-08-22 12:41:01', '', '2023-08-22 12:41:01', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (175, '交易配送类型', 'trade_delivery_type', 0, '', '1', '2023-08-23 00:03:14', '1', '2023-08-23 00:03:14', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (176, '分佣模式', 'brokerage_enabled_condition', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (177, '分销关系绑定模式', 'brokerage_bind_mode', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (178, '佣金提现类型', 'brokerage_withdraw_type', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (179, '佣金记录业务类型', 'brokerage_record_biz_type', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (180, '佣金记录状态', 'brokerage_record_status', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (181, '佣金提现状态', 'brokerage_withdraw_status', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (182, '佣金提现银行', 'brokerage_bank_name', 0, NULL, '', '2023-09-28 02:46:05', '', '2023-09-28 02:46:05', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (183, '砍价记录的状态', 'promotion_bargain_record_status', 0, '', '1', '2023-10-05 10:41:08', '1', '2023-10-05 10:41:08', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (184, '拼团记录的状态', 'promotion_combination_record_status', 0, '', '1', '2023-10-08 07:24:25', '1', '2023-10-08 07:24:25', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (185, '回款-回款方式', 'crm_receivable_return_type', 0, '回款-回款方式', '1', '2023-10-18 21:54:10', '1', '2023-10-18 21:54:10', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (186, 'CRM 客户行业', 'crm_customer_industry', 0, 'CRM 客户所属行业', '1', '2023-10-28 22:57:07', '1', '2024-02-18 23:30:22', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (187, '客户等级', 'crm_customer_level', 0, 'CRM 客户等级', '1', '2023-10-28 22:59:12', '1', '2023-10-28 15:11:16', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (188, '客户来源', 'crm_customer_source', 0, 'CRM 客户来源', '1', '2023-10-28 23:00:34', '1', '2023-10-28 15:11:16', 0, NULL); +INSERT INTO "public"."system_dict_type" VALUES (600, 'Banner 位置', 'promotion_banner_position', 0, '', '1', '2023-10-08 07:24:25', '1', '2023-11-04 13:04:02', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (601, '社交类型', 'system_social_type', 0, '', '1', '2023-11-04 13:03:54', '1', '2023-11-04 13:03:54', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (604, '产品状态', 'crm_product_status', 0, '', '1', '2023-10-30 21:47:59', '1', '2023-10-30 21:48:45', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (605, 'CRM 数据权限的级别', 'crm_permission_level', 0, '', '1', '2023-11-30 09:51:59', '1', '2023-11-30 09:51:59', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (606, 'CRM 审批状态', 'crm_audit_status', 0, '', '1', '2023-11-30 18:56:23', '1', '2023-11-30 18:56:23', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (607, 'CRM 产品单位', 'crm_product_unit', 0, '', '1', '2023-12-05 23:01:51', '1', '2023-12-05 23:01:51', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (608, 'CRM 跟进方式', 'crm_follow_up_type', 0, '', '1', '2024-01-15 20:48:05', '1', '2024-01-15 20:48:05', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (609, '支付转账类型', 'pay_transfer_type', 0, '', '1', '2023-10-28 16:27:18', '1', '2023-10-28 16:27:18', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (610, '转账订单状态', 'pay_transfer_status', 0, '', '1', '2023-10-28 16:18:32', '1', '2023-10-28 16:18:32', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (611, 'ERP 库存明细的业务类型', 'erp_stock_record_biz_type', 0, 'ERP 库存明细的业务类型', '1', '2024-02-05 18:07:02', '1', '2024-02-05 18:07:02', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (612, 'ERP 审批状态', 'erp_audit_status', 0, '', '1', '2024-02-06 00:00:07', '1', '2024-02-06 00:00:07', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (613, 'BPM 监听器类型', 'bpm_process_listener_type', 0, '', '1', '2024-03-23 12:52:24', '1', '2024-03-09 15:54:28', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (615, 'BPM 监听器值类型', 'bpm_process_listener_value_type', 0, '', '1', '2024-03-23 13:00:31', '1', '2024-03-23 13:00:31', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (616, '时间间隔', 'date_interval', 0, '', '1', '2024-03-29 22:50:09', '1', '2024-03-29 22:50:09', 0, '1970-01-01 00:00:00'); +INSERT INTO "public"."system_dict_type" VALUES (619, 'CRM 商机结束状态类型', 'crm_business_end_status_type', 0, '', '1', '2024-04-13 23:23:00', '1', '2024-04-13 23:23:00', 0, '1970-01-01 00:00:00'); + +-- ---------------------------- +-- Table structure for system_login_log +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_login_log"; +CREATE TABLE "public"."system_login_log" ( + "id" int8 NOT NULL, + "log_type" int8 NOT NULL, + "trace_id" varchar(64) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "user_id" int8 NOT NULL DEFAULT 0, + "user_type" int2 NOT NULL DEFAULT 0, + "username" varchar(50) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "result" int2 NOT NULL, + "user_ip" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "user_agent" varchar(512) COLLATE "pg_catalog"."default" NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_login_log"."id" IS '访问ID'; +COMMENT ON COLUMN "public"."system_login_log"."log_type" IS '日志类型'; +COMMENT ON COLUMN "public"."system_login_log"."trace_id" IS '链路追踪编号'; +COMMENT ON COLUMN "public"."system_login_log"."user_id" IS '用户编号'; +COMMENT ON COLUMN "public"."system_login_log"."user_type" IS '用户类型'; +COMMENT ON COLUMN "public"."system_login_log"."username" IS '用户账号'; +COMMENT ON COLUMN "public"."system_login_log"."result" IS '登陆结果'; +COMMENT ON COLUMN "public"."system_login_log"."user_ip" IS '用户 IP'; +COMMENT ON COLUMN "public"."system_login_log"."user_agent" IS '浏览器 UA'; +COMMENT ON COLUMN "public"."system_login_log"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_login_log"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_login_log"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_login_log"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_login_log"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_login_log"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_login_log" IS '系统访问记录'; + +-- ---------------------------- +-- Records of system_login_log +-- ---------------------------- +INSERT INTO "public"."system_login_log" VALUES (1, 100, '', 1, 2, 'admin', 0, '0:0:0:0:0:0:0:1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67', NULL, '2024-08-06 15:16:16.395738', NULL, '2024-08-06 15:16:16.395738', 0, 1); + +-- ---------------------------- +-- Table structure for system_mail_account +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_mail_account"; +CREATE TABLE "public"."system_mail_account" ( + "id" int8 NOT NULL, + "mail" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "username" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "password" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "host" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "port" int4 NOT NULL, + "ssl_enable" bool NOT NULL DEFAULT false, + "starttls_enable" bool NOT NULL DEFAULT false, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_mail_account"."id" IS '主键'; +COMMENT ON COLUMN "public"."system_mail_account"."mail" IS '邮箱'; +COMMENT ON COLUMN "public"."system_mail_account"."username" IS '用户名'; +COMMENT ON COLUMN "public"."system_mail_account"."password" IS '密码'; +COMMENT ON COLUMN "public"."system_mail_account"."host" IS 'SMTP 服务器域名'; +COMMENT ON COLUMN "public"."system_mail_account"."port" IS 'SMTP 服务器端口'; +COMMENT ON COLUMN "public"."system_mail_account"."ssl_enable" IS '是否开启 SSL'; +COMMENT ON COLUMN "public"."system_mail_account"."starttls_enable" IS '是否开启 STARTTLS'; +COMMENT ON COLUMN "public"."system_mail_account"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_mail_account"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_mail_account"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_mail_account"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_mail_account"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."system_mail_account" IS '邮箱账号表'; + +-- ---------------------------- +-- Records of system_mail_account +-- ---------------------------- +INSERT INTO "public"."system_mail_account" VALUES (1, '7684413@qq.com', '7684413@qq.com', '1234576', '127.0.0.1', 8080, 'f', 'f', '1', '2023-01-25 17:39:52', '1', '2024-04-24 09:13:56', 0); +INSERT INTO "public"."system_mail_account" VALUES (2, 'ydym_test@163.com', 'ydym_test@163.com', 'WBZTEINMIFVRYSOE', 'smtp.163.com', 465, 't', 'f', '1', '2023-01-26 01:26:03', '1', '2023-04-12 22:39:38', 0); +INSERT INTO "public"."system_mail_account" VALUES (3, '76854114@qq.com', '3335', '11234', 'yunai1.cn', 466, 'f', 'f', '1', '2023-01-27 15:06:38', '1', '2023-01-27 07:08:36', 1); +INSERT INTO "public"."system_mail_account" VALUES (4, '7685413x@qq.com', '2', '3', '4', 5, 't', 'f', '1', '2023-04-12 23:05:06', '1', '2023-04-12 15:05:11', 1); + +-- ---------------------------- +-- Table structure for system_mail_log +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_mail_log"; +CREATE TABLE "public"."system_mail_log" ( + "id" int8 NOT NULL, + "user_id" int8, + "user_type" int2, + "to_mail" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "account_id" int8 NOT NULL, + "from_mail" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "template_id" int8 NOT NULL, + "template_code" varchar(63) COLLATE "pg_catalog"."default" NOT NULL, + "template_nickname" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "template_title" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "template_content" varchar(10240) COLLATE "pg_catalog"."default" NOT NULL, + "template_params" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "send_status" int2 NOT NULL DEFAULT 0, + "send_time" timestamp(6), + "send_message_id" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "send_exception" varchar(4096) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_mail_log"."id" IS '编号'; +COMMENT ON COLUMN "public"."system_mail_log"."user_id" IS '用户编号'; +COMMENT ON COLUMN "public"."system_mail_log"."user_type" IS '用户类型'; +COMMENT ON COLUMN "public"."system_mail_log"."to_mail" IS '接收邮箱地址'; +COMMENT ON COLUMN "public"."system_mail_log"."account_id" IS '邮箱账号编号'; +COMMENT ON COLUMN "public"."system_mail_log"."from_mail" IS '发送邮箱地址'; +COMMENT ON COLUMN "public"."system_mail_log"."template_id" IS '模板编号'; +COMMENT ON COLUMN "public"."system_mail_log"."template_code" IS '模板编码'; +COMMENT ON COLUMN "public"."system_mail_log"."template_nickname" IS '模版发送人名称'; +COMMENT ON COLUMN "public"."system_mail_log"."template_title" IS '邮件标题'; +COMMENT ON COLUMN "public"."system_mail_log"."template_content" IS '邮件内容'; +COMMENT ON COLUMN "public"."system_mail_log"."template_params" IS '邮件参数'; +COMMENT ON COLUMN "public"."system_mail_log"."send_status" IS '发送状态'; +COMMENT ON COLUMN "public"."system_mail_log"."send_time" IS '发送时间'; +COMMENT ON COLUMN "public"."system_mail_log"."send_message_id" IS '发送返回的消息 ID'; +COMMENT ON COLUMN "public"."system_mail_log"."send_exception" IS '发送异常'; +COMMENT ON COLUMN "public"."system_mail_log"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_mail_log"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_mail_log"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_mail_log"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_mail_log"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."system_mail_log" IS '邮件日志表'; + +-- ---------------------------- +-- Records of system_mail_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for system_mail_template +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_mail_template"; +CREATE TABLE "public"."system_mail_template" ( + "id" int8 NOT NULL, + "name" varchar(63) COLLATE "pg_catalog"."default" NOT NULL, + "code" varchar(63) COLLATE "pg_catalog"."default" NOT NULL, + "account_id" int8 NOT NULL, + "nickname" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "title" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "content" varchar(10240) COLLATE "pg_catalog"."default" NOT NULL, + "params" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "status" int2 NOT NULL, + "remark" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_mail_template"."id" IS '编号'; +COMMENT ON COLUMN "public"."system_mail_template"."name" IS '模板名称'; +COMMENT ON COLUMN "public"."system_mail_template"."code" IS '模板编码'; +COMMENT ON COLUMN "public"."system_mail_template"."account_id" IS '发送的邮箱账号编号'; +COMMENT ON COLUMN "public"."system_mail_template"."nickname" IS '发送人名称'; +COMMENT ON COLUMN "public"."system_mail_template"."title" IS '模板标题'; +COMMENT ON COLUMN "public"."system_mail_template"."content" IS '模板内容'; +COMMENT ON COLUMN "public"."system_mail_template"."params" IS '参数数组'; +COMMENT ON COLUMN "public"."system_mail_template"."status" IS '开启状态'; +COMMENT ON COLUMN "public"."system_mail_template"."remark" IS '备注'; +COMMENT ON COLUMN "public"."system_mail_template"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_mail_template"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_mail_template"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_mail_template"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_mail_template"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."system_mail_template" IS '邮件模版表'; + +-- ---------------------------- +-- Records of system_mail_template +-- ---------------------------- +INSERT INTO "public"."system_mail_template" VALUES (13, '后台用户短信登录', 'admin-sms-login', 1, '奥特曼', '你猜我猜', '

    您的验证码是{code},名字是{name}

    ', '["code","name"]', 0, '3', '1', '2021-10-11 08:10:00', '1', '2023-12-02 19:51:14', 0); +INSERT INTO "public"."system_mail_template" VALUES (14, '测试模版', 'test_01', 2, '芋艿', '一个标题', '

    你是 {key01} 吗?


    是的话,赶紧 {key02} 一下!

    ', '["key01","key02"]', 0, NULL, '1', '2023-01-26 01:27:40', '1', '2023-01-27 10:32:16', 0); +INSERT INTO "public"."system_mail_template" VALUES (15, '3', '2', 2, '7', '4', '

    45

    ', '[]', 1, '80', '1', '2023-01-27 15:50:35', '1', '2023-01-27 16:34:49', 0); + +-- ---------------------------- +-- Table structure for system_menu +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_menu"; +CREATE TABLE "public"."system_menu" ( + "id" int8 NOT NULL, + "name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "permission" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "type" int2 NOT NULL, + "sort" int4 NOT NULL DEFAULT 0, + "parent_id" int8 NOT NULL DEFAULT 0, + "path" varchar(200) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "icon" varchar(100) COLLATE "pg_catalog"."default" DEFAULT '#'::character varying, + "component" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "component_name" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "status" int2 NOT NULL DEFAULT 0, + "visible" bool NOT NULL DEFAULT true, + "keep_alive" bool NOT NULL DEFAULT true, + "always_show" bool NOT NULL DEFAULT true, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_menu"."id" IS '菜单ID'; +COMMENT ON COLUMN "public"."system_menu"."name" IS '菜单名称'; +COMMENT ON COLUMN "public"."system_menu"."permission" IS '权限标识'; +COMMENT ON COLUMN "public"."system_menu"."type" IS '菜单类型'; +COMMENT ON COLUMN "public"."system_menu"."sort" IS '显示顺序'; +COMMENT ON COLUMN "public"."system_menu"."parent_id" IS '父菜单ID'; +COMMENT ON COLUMN "public"."system_menu"."path" IS '路由地址'; +COMMENT ON COLUMN "public"."system_menu"."icon" IS '菜单图标'; +COMMENT ON COLUMN "public"."system_menu"."component" IS '组件路径'; +COMMENT ON COLUMN "public"."system_menu"."component_name" IS '组件名'; +COMMENT ON COLUMN "public"."system_menu"."status" IS '菜单状态'; +COMMENT ON COLUMN "public"."system_menu"."visible" IS '是否可见'; +COMMENT ON COLUMN "public"."system_menu"."keep_alive" IS '是否缓存'; +COMMENT ON COLUMN "public"."system_menu"."always_show" IS '是否总是显示'; +COMMENT ON COLUMN "public"."system_menu"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_menu"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_menu"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_menu"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_menu"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."system_menu" IS '菜单权限表'; + +-- ---------------------------- +-- Records of system_menu +-- ---------------------------- +INSERT INTO "public"."system_menu" VALUES (1, '系统管理', '', 1, 10, 0, '/system', 'ep:tools', NULL, NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:04:23', 0); +INSERT INTO "public"."system_menu" VALUES (2, '基础设施', '', 1, 20, 0, '/infra', 'ep:monitor', NULL, NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-03-01 08:28:40', 0); +INSERT INTO "public"."system_menu" VALUES (5, 'OA 示例', '', 1, 40, 1185, 'oa', 'fa:road', NULL, NULL, 0, 't', 't', 't', 'admin', '2021-09-20 16:26:19', '1', '2024-02-29 12:38:13', 0); +INSERT INTO "public"."system_menu" VALUES (100, '用户管理', 'system:user:list', 2, 1, 1, 'user', 'ep:avatar', 'system/user/index', 'SystemUser', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:02:04', 0); +INSERT INTO "public"."system_menu" VALUES (101, '角色管理', '', 2, 2, 1, 'role', 'ep:user', 'system/role/index', 'SystemRole', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:03:28', 0); +INSERT INTO "public"."system_menu" VALUES (102, '菜单管理', '', 2, 3, 1, 'menu', 'ep:menu', 'system/menu/index', 'SystemMenu', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:03:50', 0); +INSERT INTO "public"."system_menu" VALUES (103, '部门管理', '', 2, 4, 1, 'dept', 'fa:address-card', 'system/dept/index', 'SystemDept', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:06:28', 0); +INSERT INTO "public"."system_menu" VALUES (104, '岗位管理', '', 2, 5, 1, 'post', 'fa:address-book-o', 'system/post/index', 'SystemPost', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:06:39', 0); +INSERT INTO "public"."system_menu" VALUES (105, '字典管理', '', 2, 6, 1, 'dict', 'ep:collection', 'system/dict/index', 'SystemDictType', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:07:12', 0); +INSERT INTO "public"."system_menu" VALUES (106, '配置管理', '', 2, 8, 2, 'config', 'fa:connectdevelop', 'infra/config/index', 'InfraConfig', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:02:45', 0); +INSERT INTO "public"."system_menu" VALUES (107, '通知公告', '', 2, 4, 2739, 'notice', 'ep:takeaway-box', 'system/notice/index', 'SystemNotice', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-04-22 23:56:17', 0); +INSERT INTO "public"."system_menu" VALUES (108, '审计日志', '', 1, 9, 1, 'log', 'ep:document-copy', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:08:30', 0); +INSERT INTO "public"."system_menu" VALUES (109, '令牌管理', '', 2, 2, 1261, 'token', 'fa:key', 'system/oauth2/token/index', 'SystemTokenClient', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:13:48', 0); +INSERT INTO "public"."system_menu" VALUES (110, '定时任务', '', 2, 7, 2, 'job', 'fa-solid:tasks', 'infra/job/index', 'InfraJob', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 08:57:36', 0); +INSERT INTO "public"."system_menu" VALUES (111, 'MySQL 监控', '', 2, 1, 2740, 'druid', 'fa-solid:box', 'infra/druid/index', 'InfraDruid', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:05:58', 0); +INSERT INTO "public"."system_menu" VALUES (112, 'Java 监控', '', 2, 3, 2740, 'admin-server', 'ep:coffee-cup', 'infra/server/index', 'InfraAdminServer', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:06:57', 0); +INSERT INTO "public"."system_menu" VALUES (113, 'Redis 监控', '', 2, 2, 2740, 'redis', 'fa:reddit-square', 'infra/redis/index', 'InfraRedis', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:06:09', 0); +INSERT INTO "public"."system_menu" VALUES (114, '表单构建', 'infra:build:list', 2, 2, 2, 'build', 'fa:wpforms', 'infra/build/index', 'InfraBuild', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 08:51:35', 0); +INSERT INTO "public"."system_menu" VALUES (115, '代码生成', 'infra:codegen:query', 2, 1, 2, 'codegen', 'ep:document-copy', 'infra/codegen/index', 'InfraCodegen', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 08:51:06', 0); +INSERT INTO "public"."system_menu" VALUES (116, 'API 接口', 'infra:swagger:list', 2, 3, 2, 'swagger', 'fa:fighter-jet', 'infra/swagger/index', 'InfraSwagger', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-04-23 00:01:24', 0); +INSERT INTO "public"."system_menu" VALUES (500, '操作日志', '', 2, 1, 108, 'operate-log', 'ep:position', 'system/operatelog/index', 'SystemOperateLog', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:09:59', 0); +INSERT INTO "public"."system_menu" VALUES (501, '登录日志', '', 2, 2, 108, 'login-log', 'ep:promotion', 'system/loginlog/index', 'SystemLoginLog', 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2024-02-29 01:10:29', 0); +INSERT INTO "public"."system_menu" VALUES (1001, '用户查询', 'system:user:query', 3, 1, 100, '', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1002, '用户新增', 'system:user:create', 3, 2, 100, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1003, '用户修改', 'system:user:update', 3, 3, 100, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1004, '用户删除', 'system:user:delete', 3, 4, 100, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1005, '用户导出', 'system:user:export', 3, 5, 100, '', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1006, '用户导入', 'system:user:import', 3, 6, 100, '', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1007, '重置密码', 'system:user:update-password', 3, 7, 100, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1008, '角色查询', 'system:role:query', 3, 1, 101, '', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1009, '角色新增', 'system:role:create', 3, 2, 101, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1010, '角色修改', 'system:role:update', 3, 3, 101, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1011, '角色删除', 'system:role:delete', 3, 4, 101, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1012, '角色导出', 'system:role:export', 3, 5, 101, '', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1013, '菜单查询', 'system:menu:query', 3, 1, 102, '', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1014, '菜单新增', 'system:menu:create', 3, 2, 102, '', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1015, '菜单修改', 'system:menu:update', 3, 3, 102, '', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1016, '菜单删除', 'system:menu:delete', 3, 4, 102, '', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1017, '部门查询', 'system:dept:query', 3, 1, 103, '', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1018, '部门新增', 'system:dept:create', 3, 2, 103, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1019, '部门修改', 'system:dept:update', 3, 3, 103, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1020, '部门删除', 'system:dept:delete', 3, 4, 103, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1021, '岗位查询', 'system:post:query', 3, 1, 104, '', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1022, '岗位新增', 'system:post:create', 3, 2, 104, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1023, '岗位修改', 'system:post:update', 3, 3, 104, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1024, '岗位删除', 'system:post:delete', 3, 4, 104, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1025, '岗位导出', 'system:post:export', 3, 5, 104, '', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1026, '字典查询', 'system:dict:query', 3, 1, 105, '#', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1027, '字典新增', 'system:dict:create', 3, 2, 105, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1028, '字典修改', 'system:dict:update', 3, 3, 105, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1029, '字典删除', 'system:dict:delete', 3, 4, 105, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1030, '字典导出', 'system:dict:export', 3, 5, 105, '#', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1031, '配置查询', 'infra:config:query', 3, 1, 106, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1032, '配置新增', 'infra:config:create', 3, 2, 106, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1033, '配置修改', 'infra:config:update', 3, 3, 106, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1034, '配置删除', 'infra:config:delete', 3, 4, 106, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1035, '配置导出', 'infra:config:export', 3, 5, 106, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1036, '公告查询', 'system:notice:query', 3, 1, 107, '#', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1037, '公告新增', 'system:notice:create', 3, 2, 107, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1038, '公告修改', 'system:notice:update', 3, 3, 107, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1039, '公告删除', 'system:notice:delete', 3, 4, 107, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1040, '操作查询', 'system:operate-log:query', 3, 1, 500, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1042, '日志导出', 'system:operate-log:export', 3, 2, 500, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1043, '登录查询', 'system:login-log:query', 3, 1, 501, '#', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1045, '日志导出', 'system:login-log:export', 3, 3, 501, '#', '#', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1046, '令牌列表', 'system:oauth2-token:page', 3, 1, 109, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-05-09 23:54:42', 0); +INSERT INTO "public"."system_menu" VALUES (1048, '令牌删除', 'system:oauth2-token:delete', 3, 2, 109, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-05-09 23:54:53', 0); +INSERT INTO "public"."system_menu" VALUES (1050, '任务新增', 'infra:job:create', 3, 2, 110, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1051, '任务修改', 'infra:job:update', 3, 3, 110, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1052, '任务删除', 'infra:job:delete', 3, 4, 110, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1053, '状态修改', 'infra:job:update', 3, 5, 110, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1054, '任务导出', 'infra:job:export', 3, 7, 110, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1056, '生成修改', 'infra:codegen:update', 3, 2, 115, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1057, '生成删除', 'infra:codegen:delete', 3, 3, 115, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1058, '导入代码', 'infra:codegen:create', 3, 2, 115, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1059, '预览代码', 'infra:codegen:preview', 3, 4, 115, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1060, '生成代码', 'infra:codegen:download', 3, 5, 115, '', '', '', NULL, 0, 't', 't', 't', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1063, '设置角色菜单权限', 'system:permission:assign-role-menu', 3, 6, 101, '', '', '', NULL, 0, 't', 't', 't', '', '2021-01-06 17:53:44', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1064, '设置角色数据权限', 'system:permission:assign-role-data-scope', 3, 7, 101, '', '', '', NULL, 0, 't', 't', 't', '', '2021-01-06 17:56:31', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1065, '设置用户角色', 'system:permission:assign-user-role', 3, 8, 101, '', '', '', NULL, 0, 't', 't', 't', '', '2021-01-07 10:23:28', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1066, '获得 Redis 监控信息', 'infra:redis:get-monitor-info', 3, 1, 113, '', '', '', NULL, 0, 't', 't', 't', '', '2021-01-26 01:02:31', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1067, '获得 Redis Key 列表', 'infra:redis:get-key-list', 3, 2, 113, '', '', '', NULL, 0, 't', 't', 't', '', '2021-01-26 01:02:52', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1070, '代码生成案例', '', 1, 1, 2, 'demo', 'ep:aim', 'infra/testDemo/index', NULL, 0, 't', 't', 't', '', '2021-02-06 12:42:49', '1', '2023-11-15 23:45:53', 0); +INSERT INTO "public"."system_menu" VALUES (1075, '任务触发', 'infra:job:trigger', 3, 8, 110, '', '', '', NULL, 0, 't', 't', 't', '', '2021-02-07 13:03:10', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1077, '链路追踪', '', 2, 4, 2740, 'skywalking', 'fa:eye', 'infra/skywalking/index', 'InfraSkyWalking', 0, 't', 't', 't', '', '2021-02-08 20:41:31', '1', '2024-04-23 00:07:15', 0); +INSERT INTO "public"."system_menu" VALUES (1078, '访问日志', '', 2, 1, 1083, 'api-access-log', 'ep:place', 'infra/apiAccessLog/index', 'InfraApiAccessLog', 0, 't', 't', 't', '', '2021-02-26 01:32:59', '1', '2024-02-29 08:54:57', 0); +INSERT INTO "public"."system_menu" VALUES (1082, '日志导出', 'infra:api-access-log:export', 3, 2, 1078, '', '', '', NULL, 0, 't', 't', 't', '', '2021-02-26 01:32:59', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1083, 'API 日志', '', 2, 4, 2, 'log', 'fa:tasks', NULL, NULL, 0, 't', 't', 't', '', '2021-02-26 02:18:24', '1', '2024-04-22 23:58:36', 0); +INSERT INTO "public"."system_menu" VALUES (1084, '错误日志', 'infra:api-error-log:query', 2, 2, 1083, 'api-error-log', 'ep:warning-filled', 'infra/apiErrorLog/index', 'InfraApiErrorLog', 0, 't', 't', 't', '', '2021-02-26 07:53:20', '1', '2024-02-29 08:55:17', 0); +INSERT INTO "public"."system_menu" VALUES (1085, '日志处理', 'infra:api-error-log:update-status', 3, 2, 1084, '', '', '', NULL, 0, 't', 't', 't', '', '2021-02-26 07:53:20', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1086, '日志导出', 'infra:api-error-log:export', 3, 3, 1084, '', '', '', NULL, 0, 't', 't', 't', '', '2021-02-26 07:53:20', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1087, '任务查询', 'infra:job:query', 3, 1, 110, '', '', '', NULL, 0, 't', 't', 't', '1', '2021-03-10 01:26:19', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1088, '日志查询', 'infra:api-access-log:query', 3, 1, 1078, '', '', '', NULL, 0, 't', 't', 't', '1', '2021-03-10 01:28:04', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1089, '日志查询', 'infra:api-error-log:query', 3, 1, 1084, '', '', '', NULL, 0, 't', 't', 't', '1', '2021-03-10 01:29:09', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1090, '文件列表', '', 2, 5, 1243, 'file', 'ep:upload-filled', 'infra/file/index', 'InfraFile', 0, 't', 't', 't', '', '2021-03-12 20:16:20', '1', '2024-02-29 08:53:02', 0); +INSERT INTO "public"."system_menu" VALUES (1091, '文件查询', 'infra:file:query', 3, 1, 1090, '', '', '', NULL, 0, 't', 't', 't', '', '2021-03-12 20:16:20', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1092, '文件删除', 'infra:file:delete', 3, 4, 1090, '', '', '', NULL, 0, 't', 't', 't', '', '2021-03-12 20:16:20', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1093, '短信管理', '', 1, 1, 2739, 'sms', 'ep:message', NULL, NULL, 0, 't', 't', 't', '1', '2021-04-05 01:10:16', '1', '2024-04-22 23:56:03', 0); +INSERT INTO "public"."system_menu" VALUES (1094, '短信渠道', '', 2, 0, 1093, 'sms-channel', 'fa:stack-exchange', 'system/sms/channel/index', 'SystemSmsChannel', 0, 't', 't', 't', '', '2021-04-01 11:07:15', '1', '2024-02-29 01:15:54', 0); +INSERT INTO "public"."system_menu" VALUES (1095, '短信渠道查询', 'system:sms-channel:query', 3, 1, 1094, '', '', '', NULL, 0, 't', 't', 't', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1096, '短信渠道创建', 'system:sms-channel:create', 3, 2, 1094, '', '', '', NULL, 0, 't', 't', 't', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1097, '短信渠道更新', 'system:sms-channel:update', 3, 3, 1094, '', '', '', NULL, 0, 't', 't', 't', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1098, '短信渠道删除', 'system:sms-channel:delete', 3, 4, 1094, '', '', '', NULL, 0, 't', 't', 't', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1100, '短信模板', '', 2, 1, 1093, 'sms-template', 'ep:connection', 'system/sms/template/index', 'SystemSmsTemplate', 0, 't', 't', 't', '', '2021-04-01 17:35:17', '1', '2024-02-29 01:16:18', 0); +INSERT INTO "public"."system_menu" VALUES (1101, '短信模板查询', 'system:sms-template:query', 3, 1, 1100, '', '', '', NULL, 0, 't', 't', 't', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1102, '短信模板创建', 'system:sms-template:create', 3, 2, 1100, '', '', '', NULL, 0, 't', 't', 't', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1103, '短信模板更新', 'system:sms-template:update', 3, 3, 1100, '', '', '', NULL, 0, 't', 't', 't', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1200, '审批中心', '', 2, 20, 1185, 'task', 'fa:tasks', NULL, NULL, 0, 't', 't', 't', '1', '2022-01-07 23:51:48', '1', '2024-03-21 00:33:15', 0); +INSERT INTO "public"."system_menu" VALUES (1104, '短信模板删除', 'system:sms-template:delete', 3, 4, 1100, '', '', '', NULL, 0, 't', 't', 't', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1105, '短信模板导出', 'system:sms-template:export', 3, 5, 1100, '', '', '', NULL, 0, 't', 't', 't', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1106, '发送测试短信', 'system:sms-template:send-sms', 3, 6, 1100, '', '', '', NULL, 0, 't', 't', 't', '1', '2021-04-11 00:26:40', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1107, '短信日志', '', 2, 2, 1093, 'sms-log', 'fa:edit', 'system/sms/log/index', 'SystemSmsLog', 0, 't', 't', 't', '', '2021-04-11 08:37:05', '1', '2024-02-29 08:49:02', 0); +INSERT INTO "public"."system_menu" VALUES (1108, '短信日志查询', 'system:sms-log:query', 3, 1, 1107, '', '', '', NULL, 0, 't', 't', 't', '', '2021-04-11 08:37:05', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1109, '短信日志导出', 'system:sms-log:export', 3, 5, 1107, '', '', '', NULL, 0, 't', 't', 't', '', '2021-04-11 08:37:05', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1118, '请假查询', '', 2, 0, 5, 'leave', 'fa:leanpub', 'bpm/oa/leave/index', 'BpmOALeave', 0, 't', 't', 't', '', '2021-09-20 08:51:03', '1', '2024-02-29 12:38:21', 0); +INSERT INTO "public"."system_menu" VALUES (1119, '请假申请查询', 'bpm:oa-leave:query', 3, 1, 1118, '', '', '', NULL, 0, 't', 't', 't', '', '2021-09-20 08:51:03', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1120, '请假申请创建', 'bpm:oa-leave:create', 3, 2, 1118, '', '', '', NULL, 0, 't', 't', 't', '', '2021-09-20 08:51:03', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1138, '租户列表', '', 2, 0, 1224, 'list', 'ep:house', 'system/tenant/index', 'SystemTenant', 0, 't', 't', 't', '', '2021-12-14 12:31:43', '1', '2024-02-29 01:01:10', 0); +INSERT INTO "public"."system_menu" VALUES (1139, '租户查询', 'system:tenant:query', 3, 1, 1138, '', '', '', NULL, 0, 't', 't', 't', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1140, '租户创建', 'system:tenant:create', 3, 2, 1138, '', '', '', NULL, 0, 't', 't', 't', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1141, '租户更新', 'system:tenant:update', 3, 3, 1138, '', '', '', NULL, 0, 't', 't', 't', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1142, '租户删除', 'system:tenant:delete', 3, 4, 1138, '', '', '', NULL, 0, 't', 't', 't', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1143, '租户导出', 'system:tenant:export', 3, 5, 1138, '', '', '', NULL, 0, 't', 't', 't', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1185, '工作流程', '', 1, 50, 0, '/bpm', 'fa:medium', NULL, NULL, 0, 't', 't', 't', '1', '2021-12-30 20:26:36', '1', '2024-02-29 12:43:43', 0); +INSERT INTO "public"."system_menu" VALUES (1186, '流程管理', '', 1, 10, 1185, 'manager', 'fa:dedent', NULL, NULL, 0, 't', 't', 't', '1', '2021-12-30 20:28:30', '1', '2024-02-29 12:36:02', 0); +INSERT INTO "public"."system_menu" VALUES (1187, '流程表单', '', 2, 2, 1186, 'form', 'fa:hdd-o', 'bpm/form/index', 'BpmForm', 0, 't', 't', 't', '', '2021-12-30 12:38:22', '1', '2024-03-19 12:25:25', 0); +INSERT INTO "public"."system_menu" VALUES (1188, '表单查询', 'bpm:form:query', 3, 1, 1187, '', '', '', NULL, 0, 't', 't', 't', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1189, '表单创建', 'bpm:form:create', 3, 2, 1187, '', '', '', NULL, 0, 't', 't', 't', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1190, '表单更新', 'bpm:form:update', 3, 3, 1187, '', '', '', NULL, 0, 't', 't', 't', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1191, '表单删除', 'bpm:form:delete', 3, 4, 1187, '', '', '', NULL, 0, 't', 't', 't', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1192, '表单导出', 'bpm:form:export', 3, 5, 1187, '', '', '', NULL, 0, 't', 't', 't', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1193, '流程模型', '', 2, 1, 1186, 'model', 'fa-solid:project-diagram', 'bpm/model/index', 'BpmModel', 0, 't', 't', 't', '1', '2021-12-31 23:24:58', '1', '2024-03-19 12:25:19', 0); +INSERT INTO "public"."system_menu" VALUES (1194, '模型查询', 'bpm:model:query', 3, 1, 1193, '', '', '', NULL, 0, 't', 't', 't', '1', '2022-01-03 19:01:10', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1195, '模型创建', 'bpm:model:create', 3, 2, 1193, '', '', '', NULL, 0, 't', 't', 't', '1', '2022-01-03 19:01:24', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1196, '模型导入', 'bpm:model:import', 3, 3, 1193, '', '', '', NULL, 0, 't', 't', 't', '1', '2022-01-03 19:01:35', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1197, '模型更新', 'bpm:model:update', 3, 4, 1193, '', '', '', NULL, 0, 't', 't', 't', '1', '2022-01-03 19:02:28', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1198, '模型删除', 'bpm:model:delete', 3, 5, 1193, '', '', '', NULL, 0, 't', 't', 't', '1', '2022-01-03 19:02:43', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1199, '模型发布', 'bpm:model:deploy', 3, 6, 1193, '', '', '', NULL, 0, 't', 't', 't', '1', '2022-01-03 19:03:24', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1201, '我的流程', '', 2, 1, 1200, 'my', 'fa-solid:book', 'bpm/processInstance/index', 'BpmProcessInstanceMy', 0, 't', 't', 't', '', '2022-01-07 15:53:44', '1', '2024-03-21 23:52:12', 0); +INSERT INTO "public"."system_menu" VALUES (1202, '流程实例的查询', 'bpm:process-instance:query', 3, 1, 1201, '', '', '', NULL, 0, 't', 't', 't', '', '2022-01-07 15:53:44', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1207, '待办任务', '', 2, 10, 1200, 'todo', 'fa:slack', 'bpm/task/todo/index', 'BpmTodoTask', 0, 't', 't', 't', '1', '2022-01-08 10:33:37', '1', '2024-02-29 12:37:39', 0); +INSERT INTO "public"."system_menu" VALUES (1208, '已办任务', '', 2, 20, 1200, 'done', 'fa:delicious', 'bpm/task/done/index', 'BpmDoneTask', 0, 't', 't', 't', '1', '2022-01-08 10:34:13', '1', '2024-02-29 12:37:54', 0); +INSERT INTO "public"."system_menu" VALUES (1209, '用户分组', '', 2, 4, 1186, 'user-group', 'fa:user-secret', 'bpm/group/index', 'BpmUserGroup', 0, 't', 't', 't', '', '2022-01-14 02:14:20', '1', '2024-03-21 23:55:29', 0); +INSERT INTO "public"."system_menu" VALUES (1210, '用户组查询', 'bpm:user-group:query', 3, 1, 1209, '', '', '', NULL, 0, 't', 't', 't', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1211, '用户组创建', 'bpm:user-group:create', 3, 2, 1209, '', '', '', NULL, 0, 't', 't', 't', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1212, '用户组更新', 'bpm:user-group:update', 3, 3, 1209, '', '', '', NULL, 0, 't', 't', 't', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1213, '用户组删除', 'bpm:user-group:delete', 3, 4, 1209, '', '', '', NULL, 0, 't', 't', 't', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1215, '流程定义查询', 'bpm:process-definition:query', 3, 10, 1193, '', '', '', NULL, 0, 't', 't', 't', '1', '2022-01-23 00:21:43', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1216, '流程任务分配规则查询', 'bpm:task-assign-rule:query', 3, 20, 1193, '', '', '', NULL, 0, 't', 't', 't', '1', '2022-01-23 00:26:53', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1217, '流程任务分配规则创建', 'bpm:task-assign-rule:create', 3, 21, 1193, '', '', '', NULL, 0, 't', 't', 't', '1', '2022-01-23 00:28:15', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1218, '流程任务分配规则更新', 'bpm:task-assign-rule:update', 3, 22, 1193, '', '', '', NULL, 0, 't', 't', 't', '1', '2022-01-23 00:28:41', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1219, '流程实例的创建', 'bpm:process-instance:create', 3, 2, 1201, '', '', '', NULL, 0, 't', 't', 't', '1', '2022-01-23 00:36:15', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1220, '流程实例的取消', 'bpm:process-instance:cancel', 3, 3, 1201, '', '', '', NULL, 0, 't', 't', 't', '1', '2022-01-23 00:36:33', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1221, '流程任务的查询', 'bpm:task:query', 3, 1, 1207, '', '', '', NULL, 0, 't', 't', 't', '1', '2022-01-23 00:38:52', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1222, '流程任务的更新', 'bpm:task:update', 3, 2, 1207, '', '', '', NULL, 0, 't', 't', 't', '1', '2022-01-23 00:39:24', '1', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1224, '租户管理', '', 2, 0, 1, 'tenant', 'fa-solid:house-user', NULL, NULL, 0, 't', 't', 't', '1', '2022-02-20 01:41:13', '1', '2024-02-29 00:59:29', 0); +INSERT INTO "public"."system_menu" VALUES (1225, '租户套餐', '', 2, 0, 1224, 'package', 'fa:bars', 'system/tenantPackage/index', 'SystemTenantPackage', 0, 't', 't', 't', '', '2022-02-19 17:44:06', '1', '2024-02-29 01:01:43', 0); +INSERT INTO "public"."system_menu" VALUES (1226, '租户套餐查询', 'system:tenant-package:query', 3, 1, 1225, '', '', '', NULL, 0, 't', 't', 't', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1227, '租户套餐创建', 'system:tenant-package:create', 3, 2, 1225, '', '', '', NULL, 0, 't', 't', 't', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1228, '租户套餐更新', 'system:tenant-package:update', 3, 3, 1225, '', '', '', NULL, 0, 't', 't', 't', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1229, '租户套餐删除', 'system:tenant-package:delete', 3, 4, 1225, '', '', '', NULL, 0, 't', 't', 't', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1237, '文件配置', '', 2, 0, 1243, 'file-config', 'fa-solid:file-signature', 'infra/fileConfig/index', 'InfraFileConfig', 0, 't', 't', 't', '', '2022-03-15 14:35:28', '1', '2024-02-29 08:52:54', 0); +INSERT INTO "public"."system_menu" VALUES (1238, '文件配置查询', 'infra:file-config:query', 3, 1, 1237, '', '', '', NULL, 0, 't', 't', 't', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1239, '文件配置创建', 'infra:file-config:create', 3, 2, 1237, '', '', '', NULL, 0, 't', 't', 't', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1240, '文件配置更新', 'infra:file-config:update', 3, 3, 1237, '', '', '', NULL, 0, 't', 't', 't', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1241, '文件配置删除', 'infra:file-config:delete', 3, 4, 1237, '', '', '', NULL, 0, 't', 't', 't', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1242, '文件配置导出', 'infra:file-config:export', 3, 5, 1237, '', '', '', NULL, 0, 't', 't', 't', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', 0); +INSERT INTO "public"."system_menu" VALUES (1243, '文件管理', '', 2, 6, 2, 'file', 'ep:files', NULL, '', 0, 't', 't', 't', '1', '2022-03-16 23:47:40', '1', '2024-04-23 00:02:11', 0); +INSERT INTO "public"."system_menu" VALUES (1255, '数据源配置', '', 2, 1, 2, 'data-source-config', 'ep:data-analysis', 'infra/dataSourceConfig/index', 'InfraDataSourceConfig', 0, 't', 't', 't', '', '2022-04-27 14:37:32', '1', '2024-02-29 08:51:25', 0); +INSERT INTO "public"."system_menu" VALUES (1256, '数据源配置查询', 'infra:data-source-config:query', 3, 1, 1255, '', '', '', NULL, 0, 't', 't', 't', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', 0); +INSERT INTO "public"."system_menu" VALUES (1257, '数据源配置创建', 'infra:data-source-config:create', 3, 2, 1255, '', '', '', NULL, 0, 't', 't', 't', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', 0); +INSERT INTO "public"."system_menu" VALUES (1258, '数据源配置更新', 'infra:data-source-config:update', 3, 3, 1255, '', '', '', NULL, 0, 't', 't', 't', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', 0); +INSERT INTO "public"."system_menu" VALUES (1259, '数据源配置删除', 'infra:data-source-config:delete', 3, 4, 1255, '', '', '', NULL, 0, 't', 't', 't', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', 0); +INSERT INTO "public"."system_menu" VALUES (1260, '数据源配置导出', 'infra:data-source-config:export', 3, 5, 1255, '', '', '', NULL, 0, 't', 't', 't', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', 0); +INSERT INTO "public"."system_menu" VALUES (1261, 'OAuth 2.0', '', 2, 10, 1, 'oauth2', 'fa:dashcube', NULL, NULL, 0, 't', 't', 't', '1', '2022-05-09 23:38:17', '1', '2024-02-29 01:12:08', 0); +INSERT INTO "public"."system_menu" VALUES (1263, '应用管理', '', 2, 0, 1261, 'oauth2/application', 'fa:hdd-o', 'system/oauth2/client/index', 'SystemOAuth2Client', 0, 't', 't', 't', '', '2022-05-10 16:26:33', '1', '2024-02-29 01:13:14', 0); +INSERT INTO "public"."system_menu" VALUES (1264, '客户端查询', 'system:oauth2-client:query', 3, 1, 1263, '', '', '', NULL, 0, 't', 't', 't', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:06', 0); +INSERT INTO "public"."system_menu" VALUES (1265, '客户端创建', 'system:oauth2-client:create', 3, 2, 1263, '', '', '', NULL, 0, 't', 't', 't', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:23', 0); +INSERT INTO "public"."system_menu" VALUES (1266, '客户端更新', 'system:oauth2-client:update', 3, 3, 1263, '', '', '', NULL, 0, 't', 't', 't', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:28', 0); +INSERT INTO "public"."system_menu" VALUES (1267, '客户端删除', 'system:oauth2-client:delete', 3, 4, 1263, '', '', '', NULL, 0, 't', 't', 't', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:33', 0); +INSERT INTO "public"."system_menu" VALUES (1281, '报表管理', '', 2, 40, 0, '/report', 'ep:pie-chart', NULL, NULL, 0, 't', 't', 't', '1', '2022-07-10 20:22:15', '1', '2024-02-29 12:33:03', 0); +INSERT INTO "public"."system_menu" VALUES (1282, '报表设计器', '', 2, 1, 1281, 'jimu-report', 'ep:trend-charts', 'report/jmreport/index', 'GoView', 0, 't', 't', 't', '1', '2022-07-10 20:26:36', '1', '2024-02-29 12:33:54', 0); +INSERT INTO "public"."system_menu" VALUES (2130, '邮箱管理', '', 2, 2, 2739, 'mail', 'fa-solid:mail-bulk', NULL, NULL, 0, 't', 't', 't', '1', '2023-01-25 17:27:44', '1', '2024-04-22 23:56:08', 0); +INSERT INTO "public"."system_menu" VALUES (2131, '邮箱账号', '', 2, 0, 2130, 'mail-account', 'fa:universal-access', 'system/mail/account/index', 'SystemMailAccount', 0, 't', 't', 't', '', '2023-01-25 09:33:48', '1', '2024-02-29 08:48:16', 0); +INSERT INTO "public"."system_menu" VALUES (2132, '账号查询', 'system:mail-account:query', 3, 1, 2131, '', '', '', NULL, 0, 't', 't', 't', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', 0); +INSERT INTO "public"."system_menu" VALUES (2133, '账号创建', 'system:mail-account:create', 3, 2, 2131, '', '', '', NULL, 0, 't', 't', 't', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', 0); +INSERT INTO "public"."system_menu" VALUES (2134, '账号更新', 'system:mail-account:update', 3, 3, 2131, '', '', '', NULL, 0, 't', 't', 't', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', 0); +INSERT INTO "public"."system_menu" VALUES (2135, '账号删除', 'system:mail-account:delete', 3, 4, 2131, '', '', '', NULL, 0, 't', 't', 't', '', '2023-01-25 09:33:48', '', '2023-01-25 09:33:48', 0); +INSERT INTO "public"."system_menu" VALUES (2136, '邮件模版', '', 2, 0, 2130, 'mail-template', 'fa:tag', 'system/mail/template/index', 'SystemMailTemplate', 0, 't', 't', 't', '', '2023-01-25 12:05:31', '1', '2024-02-29 08:48:41', 0); +INSERT INTO "public"."system_menu" VALUES (2137, '模版查询', 'system:mail-template:query', 3, 1, 2136, '', '', '', NULL, 0, 't', 't', 't', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', 0); +INSERT INTO "public"."system_menu" VALUES (2138, '模版创建', 'system:mail-template:create', 3, 2, 2136, '', '', '', NULL, 0, 't', 't', 't', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', 0); +INSERT INTO "public"."system_menu" VALUES (2139, '模版更新', 'system:mail-template:update', 3, 3, 2136, '', '', '', NULL, 0, 't', 't', 't', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', 0); +INSERT INTO "public"."system_menu" VALUES (2140, '模版删除', 'system:mail-template:delete', 3, 4, 2136, '', '', '', NULL, 0, 't', 't', 't', '', '2023-01-25 12:05:31', '', '2023-01-25 12:05:31', 0); +INSERT INTO "public"."system_menu" VALUES (2141, '邮件记录', '', 2, 0, 2130, 'mail-log', 'fa:edit', 'system/mail/log/index', 'SystemMailLog', 0, 't', 't', 't', '', '2023-01-26 02:16:50', '1', '2024-02-29 08:48:51', 0); +INSERT INTO "public"."system_menu" VALUES (2142, '日志查询', 'system:mail-log:query', 3, 1, 2141, '', '', '', NULL, 0, 't', 't', 't', '', '2023-01-26 02:16:50', '', '2023-01-26 02:16:50', 0); +INSERT INTO "public"."system_menu" VALUES (2143, '发送测试邮件', 'system:mail-template:send-mail', 3, 5, 2136, '', '', '', NULL, 0, 't', 't', 't', '1', '2023-01-26 23:29:15', '1', '2023-01-26 23:29:15', 0); +INSERT INTO "public"."system_menu" VALUES (2144, '站内信管理', '', 1, 3, 2739, 'notify', 'ep:message-box', NULL, NULL, 0, 't', 't', 't', '1', '2023-01-28 10:25:18', '1', '2024-04-22 23:56:12', 0); +INSERT INTO "public"."system_menu" VALUES (2145, '模板管理', '', 2, 0, 2144, 'notify-template', 'fa:archive', 'system/notify/template/index', 'SystemNotifyTemplate', 0, 't', 't', 't', '', '2023-01-28 02:26:42', '1', '2024-02-29 08:49:14', 0); +INSERT INTO "public"."system_menu" VALUES (2146, '站内信模板查询', 'system:notify-template:query', 3, 1, 2145, '', '', '', NULL, 0, 't', 't', 't', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', 0); +INSERT INTO "public"."system_menu" VALUES (2147, '站内信模板创建', 'system:notify-template:create', 3, 2, 2145, '', '', '', NULL, 0, 't', 't', 't', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', 0); +INSERT INTO "public"."system_menu" VALUES (2148, '站内信模板更新', 'system:notify-template:update', 3, 3, 2145, '', '', '', NULL, 0, 't', 't', 't', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', 0); +INSERT INTO "public"."system_menu" VALUES (2149, '站内信模板删除', 'system:notify-template:delete', 3, 4, 2145, '', '', '', NULL, 0, 't', 't', 't', '', '2023-01-28 02:26:42', '', '2023-01-28 02:26:42', 0); +INSERT INTO "public"."system_menu" VALUES (2150, '发送测试站内信', 'system:notify-template:send-notify', 3, 5, 2145, '', '', '', NULL, 0, 't', 't', 't', '1', '2023-01-28 10:54:43', '1', '2023-01-28 10:54:43', 0); +INSERT INTO "public"."system_menu" VALUES (2151, '消息记录', '', 2, 0, 2144, 'notify-message', 'fa:edit', 'system/notify/message/index', 'SystemNotifyMessage', 0, 't', 't', 't', '', '2023-01-28 04:28:22', '1', '2024-02-29 08:49:22', 0); +INSERT INTO "public"."system_menu" VALUES (2152, '站内信消息查询', 'system:notify-message:query', 3, 1, 2151, '', '', '', NULL, 0, 't', 't', 't', '', '2023-01-28 04:28:22', '', '2023-01-28 04:28:22', 0); +INSERT INTO "public"."system_menu" VALUES (2153, '大屏设计器', '', 2, 2, 1281, 'go-view', 'fa:area-chart', 'report/goview/index', 'JimuReport', 0, 't', 't', 't', '1', '2023-02-07 00:03:19', '1', '2024-02-29 12:34:02', 0); +INSERT INTO "public"."system_menu" VALUES (2154, '创建项目', 'report:go-view-project:create', 3, 1, 2153, '', '', '', NULL, 0, 't', 't', 't', '1', '2023-02-07 19:25:14', '1', '2023-02-07 19:25:14', 0); +INSERT INTO "public"."system_menu" VALUES (2155, '更新项目', 'report:go-view-project:update', 3, 2, 2153, '', '', '', '', 0, 't', 't', 't', '1', '2023-02-07 19:25:34', '1', '2024-04-24 20:01:18', 0); +INSERT INTO "public"."system_menu" VALUES (2156, '查询项目', 'report:go-view-project:query', 3, 0, 2153, '', '', '', NULL, 0, 't', 't', 't', '1', '2023-02-07 19:25:53', '1', '2023-02-07 19:25:53', 0); +INSERT INTO "public"."system_menu" VALUES (2157, '使用 SQL 查询数据', 'report:go-view-data:get-by-sql', 3, 3, 2153, '', '', '', NULL, 0, 't', 't', 't', '1', '2023-02-07 19:26:15', '1', '2023-02-07 19:26:15', 0); +INSERT INTO "public"."system_menu" VALUES (2158, '使用 HTTP 查询数据', 'report:go-view-data:get-by-http', 3, 4, 2153, '', '', '', NULL, 0, 't', 't', 't', '1', '2023-02-07 19:26:35', '1', '2023-02-07 19:26:35', 0); +INSERT INTO "public"."system_menu" VALUES (2447, '三方登录', '', 1, 10, 1, 'social', 'fa:rocket', '', '', 0, 't', 't', 't', '1', '2023-11-04 12:12:01', '1', '2024-02-29 01:14:05', 0); +INSERT INTO "public"."system_menu" VALUES (2448, '三方应用', '', 2, 1, 2447, 'client', 'ep:set-up', 'views/system/social/client/index.vue', 'SocialClient', 0, 't', 't', 't', '1', '2023-11-04 12:17:19', '1', '2023-11-04 12:17:19', 0); +INSERT INTO "public"."system_menu" VALUES (2449, '三方应用查询', 'system:social-client:query', 3, 1, 2448, '', '', '', '', 0, 't', 't', 't', '1', '2023-11-04 12:43:12', '1', '2023-11-04 12:43:33', 0); +INSERT INTO "public"."system_menu" VALUES (2450, '三方应用创建', 'system:social-client:create', 3, 2, 2448, '', '', '', '', 0, 't', 't', 't', '1', '2023-11-04 12:43:58', '1', '2023-11-04 12:43:58', 0); +INSERT INTO "public"."system_menu" VALUES (2451, '三方应用更新', 'system:social-client:update', 3, 3, 2448, '', '', '', '', 0, 't', 't', 't', '1', '2023-11-04 12:44:27', '1', '2023-11-04 12:44:27', 0); +INSERT INTO "public"."system_menu" VALUES (2452, '三方应用删除', 'system:social-client:delete', 3, 4, 2448, '', '', '', '', 0, 't', 't', 't', '1', '2023-11-04 12:44:43', '1', '2023-11-04 12:44:43', 0); +INSERT INTO "public"."system_menu" VALUES (2453, '三方用户', 'system:social-user:query', 2, 2, 2447, 'user', 'ep:avatar', 'system/social/user/index.vue', 'SocialUser', 0, 't', 't', 't', '1', '2023-11-04 14:01:05', '1', '2023-11-04 14:01:05', 0); +INSERT INTO "public"."system_menu" VALUES (2472, '主子表(内嵌)', '', 2, 12, 1070, 'demo03-inner', 'fa:power-off', 'infra/demo/demo03/inner/index', 'Demo03StudentInner', 0, 't', 't', 't', '', '2023-11-13 04:39:51', '1', '2023-11-16 23:53:46', 0); +INSERT INTO "public"."system_menu" VALUES (2478, '单表(增删改查)', '', 2, 1, 1070, 'demo01-contact', 'ep:bicycle', 'infra/demo/demo01/index', 'Demo01Contact', 0, 't', 't', 't', '', '2023-11-15 14:42:30', '1', '2023-11-16 20:34:40', 0); +INSERT INTO "public"."system_menu" VALUES (2479, '示例联系人查询', 'infra:demo01-contact:query', 3, 1, 2478, '', '', '', NULL, 0, 't', 't', 't', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', 0); +INSERT INTO "public"."system_menu" VALUES (2480, '示例联系人创建', 'infra:demo01-contact:create', 3, 2, 2478, '', '', '', NULL, 0, 't', 't', 't', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', 0); +INSERT INTO "public"."system_menu" VALUES (2481, '示例联系人更新', 'infra:demo01-contact:update', 3, 3, 2478, '', '', '', NULL, 0, 't', 't', 't', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', 0); +INSERT INTO "public"."system_menu" VALUES (2482, '示例联系人删除', 'infra:demo01-contact:delete', 3, 4, 2478, '', '', '', NULL, 0, 't', 't', 't', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', 0); +INSERT INTO "public"."system_menu" VALUES (2483, '示例联系人导出', 'infra:demo01-contact:export', 3, 5, 2478, '', '', '', NULL, 0, 't', 't', 't', '', '2023-11-15 14:42:30', '', '2023-11-15 14:42:30', 0); +INSERT INTO "public"."system_menu" VALUES (2484, '树表(增删改查)', '', 2, 2, 1070, 'demo02-category', 'fa:tree', 'infra/demo/demo02/index', 'Demo02Category', 0, 't', 't', 't', '', '2023-11-16 12:18:27', '1', '2023-11-16 20:35:01', 0); +INSERT INTO "public"."system_menu" VALUES (2485, '示例分类查询', 'infra:demo02-category:query', 3, 1, 2484, '', '', '', NULL, 0, 't', 't', 't', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', 0); +INSERT INTO "public"."system_menu" VALUES (2486, '示例分类创建', 'infra:demo02-category:create', 3, 2, 2484, '', '', '', NULL, 0, 't', 't', 't', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', 0); +INSERT INTO "public"."system_menu" VALUES (2487, '示例分类更新', 'infra:demo02-category:update', 3, 3, 2484, '', '', '', NULL, 0, 't', 't', 't', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', 0); +INSERT INTO "public"."system_menu" VALUES (2488, '示例分类删除', 'infra:demo02-category:delete', 3, 4, 2484, '', '', '', NULL, 0, 't', 't', 't', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', 0); +INSERT INTO "public"."system_menu" VALUES (2489, '示例分类导出', 'infra:demo02-category:export', 3, 5, 2484, '', '', '', NULL, 0, 't', 't', 't', '', '2023-11-16 12:18:27', '', '2023-11-16 12:18:27', 0); +INSERT INTO "public"."system_menu" VALUES (2490, '主子表(标准)', '', 2, 10, 1070, 'demo03-normal', 'fa:battery-3', 'infra/demo/demo03/normal/index', 'Demo03StudentNormal', 0, 't', 't', 't', '', '2023-11-16 12:53:37', '1', '2023-11-16 23:10:03', 0); +INSERT INTO "public"."system_menu" VALUES (2497, '主子表(ERP)', '', 2, 11, 1070, 'demo03-erp', 'ep:calendar', 'infra/demo/demo03/erp/index', 'Demo03StudentERP', 0, 't', 't', 't', '', '2023-11-16 15:50:59', '1', '2023-11-17 13:19:56', 0); +INSERT INTO "public"."system_menu" VALUES (2525, 'WebSocket', '', 2, 5, 2, 'websocket', 'ep:connection', 'infra/webSocket/index', 'InfraWebSocket', 0, 't', 't', 't', '1', '2023-11-23 19:41:55', '1', '2024-04-23 00:02:00', 0); +INSERT INTO "public"."system_menu" VALUES (2713, '抄送我的', 'bpm:process-instance-cc:query', 2, 30, 1200, 'copy', 'ep:copy-document', 'bpm/task/copy/index', 'BpmProcessInstanceCopy', 0, 't', 't', 't', '1', '2024-03-17 21:50:23', '1', '2024-04-24 19:55:12', 0); +INSERT INTO "public"."system_menu" VALUES (2714, '流程分类', '', 2, 3, 1186, 'category', 'fa:object-ungroup', 'bpm/category/index', 'BpmCategory', 0, 't', 't', 't', '', '2024-03-08 02:00:51', '1', '2024-03-21 23:51:18', 0); +INSERT INTO "public"."system_menu" VALUES (2715, '分类查询', 'bpm:category:query', 3, 1, 2714, '', '', '', '', 0, 't', 't', 't', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:25', 0); +INSERT INTO "public"."system_menu" VALUES (2716, '分类创建', 'bpm:category:create', 3, 2, 2714, '', '', '', '', 0, 't', 't', 't', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:31', 0); +INSERT INTO "public"."system_menu" VALUES (2717, '分类更新', 'bpm:category:update', 3, 3, 2714, '', '', '', '', 0, 't', 't', 't', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:35', 0); +INSERT INTO "public"."system_menu" VALUES (2718, '分类删除', 'bpm:category:delete', 3, 4, 2714, '', '', '', '', 0, 't', 't', 't', '', '2024-03-08 02:00:51', '1', '2024-03-19 14:36:41', 0); +INSERT INTO "public"."system_menu" VALUES (2720, '发起流程', '', 2, 0, 1200, 'create', 'fa-solid:grin-stars', 'bpm/processInstance/create/index', 'BpmProcessInstanceCreate', 0, 't', 'f', 't', '1', '2024-03-19 19:46:05', '1', '2024-03-23 19:03:42', 0); +INSERT INTO "public"."system_menu" VALUES (2721, '流程实例', '', 2, 10, 1186, 'process-instance/manager', 'fa:square', 'bpm/processInstance/manager/index', 'BpmProcessInstanceManager', 0, 't', 't', 't', '1', '2024-03-21 23:57:30', '1', '2024-03-21 23:57:30', 0); +INSERT INTO "public"."system_menu" VALUES (2722, '流程实例的查询(管理员)', 'bpm:process-instance:manager-query', 3, 1, 2721, '', '', '', '', 0, 't', 't', 't', '1', '2024-03-22 08:18:27', '1', '2024-03-22 08:19:05', 0); +INSERT INTO "public"."system_menu" VALUES (2723, '流程实例的取消(管理员)', 'bpm:process-instance:cancel-by-admin', 3, 2, 2721, '', '', '', '', 0, 't', 't', 't', '1', '2024-03-22 08:19:25', '1', '2024-03-22 08:19:25', 0); +INSERT INTO "public"."system_menu" VALUES (2724, '流程任务', '', 2, 11, 1186, 'process-tasnk', 'ep:collection-tag', 'bpm/task/manager/index', 'BpmManagerTask', 0, 't', 't', 't', '1', '2024-03-22 08:43:22', '1', '2024-03-22 08:43:27', 0); +INSERT INTO "public"."system_menu" VALUES (2725, '流程任务的查询(管理员)', 'bpm:task:mananger-query', 3, 1, 2724, '', '', '', '', 0, 't', 't', 't', '1', '2024-03-22 08:43:49', '1', '2024-03-22 08:43:49', 0); +INSERT INTO "public"."system_menu" VALUES (2726, '流程监听器', '', 2, 5, 1186, 'process-listener', 'fa:assistive-listening-systems', 'bpm/processListener/index', 'BpmProcessListener', 0, 't', 't', 't', '', '2024-03-09 16:05:34', '1', '2024-03-23 13:13:38', 0); +INSERT INTO "public"."system_menu" VALUES (2727, '流程监听器查询', 'bpm:process-listener:query', 3, 1, 2726, '', '', '', NULL, 0, 't', 't', 't', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', 0); +INSERT INTO "public"."system_menu" VALUES (2728, '流程监听器创建', 'bpm:process-listener:create', 3, 2, 2726, '', '', '', NULL, 0, 't', 't', 't', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', 0); +INSERT INTO "public"."system_menu" VALUES (2729, '流程监听器更新', 'bpm:process-listener:update', 3, 3, 2726, '', '', '', NULL, 0, 't', 't', 't', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', 0); +INSERT INTO "public"."system_menu" VALUES (2730, '流程监听器删除', 'bpm:process-listener:delete', 3, 4, 2726, '', '', '', NULL, 0, 't', 't', 't', '', '2024-03-09 16:05:34', '', '2024-03-09 16:05:34', 0); +INSERT INTO "public"."system_menu" VALUES (2731, '流程表达式', '', 2, 6, 1186, 'process-expression', 'fa:wpexplorer', 'bpm/processExpression/index', 'BpmProcessExpression', 0, 't', 't', 't', '', '2024-03-09 22:35:08', '1', '2024-03-23 19:43:05', 0); +INSERT INTO "public"."system_menu" VALUES (2732, '流程表达式查询', 'bpm:process-expression:query', 3, 1, 2731, '', '', '', NULL, 0, 't', 't', 't', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', 0); +INSERT INTO "public"."system_menu" VALUES (2733, '流程表达式创建', 'bpm:process-expression:create', 3, 2, 2731, '', '', '', NULL, 0, 't', 't', 't', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', 0); +INSERT INTO "public"."system_menu" VALUES (2734, '流程表达式更新', 'bpm:process-expression:update', 3, 3, 2731, '', '', '', NULL, 0, 't', 't', 't', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', 0); +INSERT INTO "public"."system_menu" VALUES (2735, '流程表达式删除', 'bpm:process-expression:delete', 3, 4, 2731, '', '', '', NULL, 0, 't', 't', 't', '', '2024-03-09 22:35:08', '', '2024-03-09 22:35:08', 0); +INSERT INTO "public"."system_menu" VALUES (2739, '消息中心', '', 1, 7, 1, 'messages', 'ep:chat-dot-round', '', '', 0, 't', 't', 't', '1', '2024-04-22 23:54:30', '1', '2024-04-23 09:36:35', 0); +INSERT INTO "public"."system_menu" VALUES (2740, '监控中心', '', 1, 10, 2, 'monitors', 'ep:monitor', '', '', 0, 't', 't', 't', '1', '2024-04-23 00:04:44', '1', '2024-04-23 00:04:44', 0); +INSERT INTO "public"."system_menu" VALUES (2755, '删除项目', 'report:go-view-project:delete', 3, 2, 2153, '', '', '', '', 0, 't', 't', 't', '1', '2024-04-24 20:01:37', '1', '2024-04-24 20:01:37', 0); + +-- ---------------------------- +-- Table structure for system_notice +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_notice"; +CREATE TABLE "public"."system_notice" ( + "id" int8 NOT NULL, + "title" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "content" text COLLATE "pg_catalog"."default" NOT NULL, + "type" int2 NOT NULL, + "status" int2 NOT NULL DEFAULT 0, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_notice"."id" IS '公告ID'; +COMMENT ON COLUMN "public"."system_notice"."title" IS '公告标题'; +COMMENT ON COLUMN "public"."system_notice"."content" IS '公告内容'; +COMMENT ON COLUMN "public"."system_notice"."type" IS '公告类型(1通知 2公告)'; +COMMENT ON COLUMN "public"."system_notice"."status" IS '公告状态(0正常 1关闭)'; +COMMENT ON COLUMN "public"."system_notice"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_notice"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_notice"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_notice"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_notice"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_notice"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_notice" IS '通知公告表'; + +-- ---------------------------- +-- Records of system_notice +-- ---------------------------- +INSERT INTO "public"."system_notice" VALUES (1, '芋道的公众', '

    新版本内容133

    ', 1, 0, 'admin', '2021-01-05 17:03:48', '1', '2022-05-04 21:00:20', 0, 1); +INSERT INTO "public"."system_notice" VALUES (2, '维护通知:2018-07-01 系统凌晨维护', '

    11112222

    ', 2, 1, 'admin', '2021-01-05 17:03:48', '1', '2023-12-02 20:07:26', 0, 1); +INSERT INTO "public"."system_notice" VALUES (4, '我是测试标题', '

    哈哈哈哈123

    ', 1, 0, '110', '2022-02-22 01:01:25', '110', '2022-02-22 01:01:46', 0, 121); + +-- ---------------------------- +-- Table structure for system_notify_message +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_notify_message"; +CREATE TABLE "public"."system_notify_message" ( + "id" int8 NOT NULL, + "user_id" int8 NOT NULL, + "user_type" int2 NOT NULL, + "template_id" int8 NOT NULL, + "template_code" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "template_nickname" varchar(63) COLLATE "pg_catalog"."default" NOT NULL, + "template_content" varchar(1024) COLLATE "pg_catalog"."default" NOT NULL, + "template_type" int4 NOT NULL, + "template_params" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "read_status" bool NOT NULL, + "read_time" timestamp(6), + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_notify_message"."id" IS '用户ID'; +COMMENT ON COLUMN "public"."system_notify_message"."user_id" IS '用户id'; +COMMENT ON COLUMN "public"."system_notify_message"."user_type" IS '用户类型'; +COMMENT ON COLUMN "public"."system_notify_message"."template_id" IS '模版编号'; +COMMENT ON COLUMN "public"."system_notify_message"."template_code" IS '模板编码'; +COMMENT ON COLUMN "public"."system_notify_message"."template_nickname" IS '模版发送人名称'; +COMMENT ON COLUMN "public"."system_notify_message"."template_content" IS '模版内容'; +COMMENT ON COLUMN "public"."system_notify_message"."template_type" IS '模版类型'; +COMMENT ON COLUMN "public"."system_notify_message"."template_params" IS '模版参数'; +COMMENT ON COLUMN "public"."system_notify_message"."read_status" IS '是否已读'; +COMMENT ON COLUMN "public"."system_notify_message"."read_time" IS '阅读时间'; +COMMENT ON COLUMN "public"."system_notify_message"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_notify_message"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_notify_message"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_notify_message"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_notify_message"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_notify_message"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_notify_message" IS '站内信消息表'; + +-- ---------------------------- +-- Records of system_notify_message +-- ---------------------------- +INSERT INTO "public"."system_notify_message" VALUES (2, 1, 2, 1, 'test', '123', '我是 1,我开始 2 了', 1, '{"name":"1","what":"2"}', 't', '2023-02-10 00:47:04', '1', '2023-01-28 11:44:08', '1', '2023-02-10 00:47:04', 0, 1); +INSERT INTO "public"."system_notify_message" VALUES (3, 1, 2, 1, 'test', '123', '我是 1,我开始 2 了', 1, '{"name":"1","what":"2"}', 't', '2023-02-10 00:47:04', '1', '2023-01-28 11:45:04', '1', '2023-02-10 00:47:04', 0, 1); +INSERT INTO "public"."system_notify_message" VALUES (4, 103, 2, 2, 'register', '系统消息', '你好,欢迎 哈哈 加入大家庭!', 2, '{"name":"哈哈"}', 'f', NULL, '1', '2023-01-28 21:02:20', '1', '2023-01-28 21:02:20', 0, 1); +INSERT INTO "public"."system_notify_message" VALUES (5, 1, 2, 1, 'test', '123', '我是 芋艿,我开始 写代码 了', 1, '{"name":"芋艿","what":"写代码"}', 't', '2023-02-10 00:47:04', '1', '2023-01-28 22:21:42', '1', '2023-02-10 00:47:04', 0, 1); +INSERT INTO "public"."system_notify_message" VALUES (6, 1, 2, 1, 'test', '123', '我是 芋艿,我开始 写代码 了', 1, '{"name":"芋艿","what":"写代码"}', 't', '2023-01-29 10:52:06', '1', '2023-01-28 22:22:07', '1', '2023-01-29 10:52:06', 0, 1); +INSERT INTO "public"."system_notify_message" VALUES (7, 1, 2, 1, 'test', '123', '我是 2,我开始 3 了', 1, '{"name":"2","what":"3"}', 't', '2023-01-29 10:52:06', '1', '2023-01-28 23:45:21', '1', '2023-01-29 10:52:06', 0, 1); +INSERT INTO "public"."system_notify_message" VALUES (8, 1, 2, 2, 'register', '系统消息', '你好,欢迎 123 加入大家庭!', 2, '{"name":"123"}', 't', '2023-01-29 10:52:06', '1', '2023-01-28 23:50:21', '1', '2023-01-29 10:52:06', 0, 1); +INSERT INTO "public"."system_notify_message" VALUES (9, 247, 1, 4, 'brokerage_withdraw_audit_approve', 'system', '您在2023-09-28 08:35:46提现¥0.09元的申请已通过审核', 2, '{"reason":null,"createTime":"2023-09-28 08:35:46","price":"0.09"}', 'f', NULL, '1', '2023-09-28 16:36:22', '1', '2023-09-28 16:36:22', 0, 1); +INSERT INTO "public"."system_notify_message" VALUES (10, 247, 1, 4, 'brokerage_withdraw_audit_approve', 'system', '您在2023-09-30 20:59:40提现¥1.00元的申请已通过审核', 2, '{"reason":null,"createTime":"2023-09-30 20:59:40","price":"1.00"}', 'f', NULL, '1', '2023-10-03 12:11:34', '1', '2023-10-03 12:11:34', 0, 1); + +-- ---------------------------- +-- Table structure for system_notify_template +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_notify_template"; +CREATE TABLE "public"."system_notify_template" ( + "id" int8 NOT NULL, + "name" varchar(63) COLLATE "pg_catalog"."default" NOT NULL, + "code" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "nickname" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "content" varchar(1024) COLLATE "pg_catalog"."default" NOT NULL, + "type" int2 NOT NULL, + "params" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "status" int2 NOT NULL, + "remark" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_notify_template"."id" IS '主键'; +COMMENT ON COLUMN "public"."system_notify_template"."name" IS '模板名称'; +COMMENT ON COLUMN "public"."system_notify_template"."code" IS '模版编码'; +COMMENT ON COLUMN "public"."system_notify_template"."nickname" IS '发送人名称'; +COMMENT ON COLUMN "public"."system_notify_template"."content" IS '模版内容'; +COMMENT ON COLUMN "public"."system_notify_template"."type" IS '类型'; +COMMENT ON COLUMN "public"."system_notify_template"."params" IS '参数数组'; +COMMENT ON COLUMN "public"."system_notify_template"."status" IS '状态'; +COMMENT ON COLUMN "public"."system_notify_template"."remark" IS '备注'; +COMMENT ON COLUMN "public"."system_notify_template"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_notify_template"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_notify_template"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_notify_template"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_notify_template"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."system_notify_template" IS '站内信模板表'; + +-- ---------------------------- +-- Records of system_notify_template +-- ---------------------------- + +-- ---------------------------- +-- Table structure for system_oauth2_access_token +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_oauth2_access_token"; +CREATE TABLE "public"."system_oauth2_access_token" ( + "id" int8 NOT NULL, + "user_id" int8 NOT NULL, + "user_type" int2 NOT NULL, + "user_info" varchar(512) COLLATE "pg_catalog"."default" NOT NULL, + "access_token" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "refresh_token" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, + "client_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "scopes" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "expires_time" timestamp(6) NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."id" IS '编号'; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."user_id" IS '用户编号'; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."user_type" IS '用户类型'; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."user_info" IS '用户信息'; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."access_token" IS '访问令牌'; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."refresh_token" IS '刷新令牌'; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."client_id" IS '客户端编号'; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."scopes" IS '授权范围'; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."expires_time" IS '过期时间'; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_oauth2_access_token"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_oauth2_access_token" IS 'OAuth2 访问令牌'; + +-- ---------------------------- +-- Records of system_oauth2_access_token +-- ---------------------------- +INSERT INTO "public"."system_oauth2_access_token" VALUES (2, 1, 2, '{"nickname":"芋道源码","deptId":"103"}', '838312915af2433eab7cb591e30d2b3f', 'ae2538b3b54e4211bedf44feed95ba0a', 'default', NULL, '2024-08-06 15:46:16.813476', NULL, '2024-08-06 15:16:16.82069', NULL, '2024-08-06 15:16:16.82069', 1, 1); +INSERT INTO "public"."system_oauth2_access_token" VALUES (3, 1, 2, '{"nickname":"芋道源码","deptId":"103"}', '971a9d6d80dd420f89b62ac2ffeb72b6', 'ae2538b3b54e4211bedf44feed95ba0a', 'default', NULL, '2024-08-06 16:19:20.861937', NULL, '2024-08-06 15:49:20.864441', NULL, '2024-08-06 15:49:20.864441', 1, 1); +INSERT INTO "public"."system_oauth2_access_token" VALUES (4, 1, 2, '{"nickname":"芋道源码","deptId":"103"}', '888eadcfa92f464d8754e3a4833b5c9c', 'ae2538b3b54e4211bedf44feed95ba0a', 'default', NULL, '2024-08-06 17:07:29.325899', NULL, '2024-08-06 16:37:29.350417', NULL, '2024-08-06 16:37:29.350417', 0, 1); + +-- ---------------------------- +-- Table structure for system_oauth2_approve +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_oauth2_approve"; +CREATE TABLE "public"."system_oauth2_approve" ( + "id" int8 NOT NULL, + "user_id" int8 NOT NULL, + "user_type" int2 NOT NULL, + "client_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "scope" varchar(255) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "approved" bool NOT NULL DEFAULT false, + "expires_time" timestamp(6) NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_oauth2_approve"."id" IS '编号'; +COMMENT ON COLUMN "public"."system_oauth2_approve"."user_id" IS '用户编号'; +COMMENT ON COLUMN "public"."system_oauth2_approve"."user_type" IS '用户类型'; +COMMENT ON COLUMN "public"."system_oauth2_approve"."client_id" IS '客户端编号'; +COMMENT ON COLUMN "public"."system_oauth2_approve"."scope" IS '授权范围'; +COMMENT ON COLUMN "public"."system_oauth2_approve"."approved" IS '是否接受'; +COMMENT ON COLUMN "public"."system_oauth2_approve"."expires_time" IS '过期时间'; +COMMENT ON COLUMN "public"."system_oauth2_approve"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_oauth2_approve"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_oauth2_approve"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_oauth2_approve"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_oauth2_approve"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_oauth2_approve"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_oauth2_approve" IS 'OAuth2 批准表'; + +-- ---------------------------- +-- Records of system_oauth2_approve +-- ---------------------------- + +-- ---------------------------- +-- Table structure for system_oauth2_client +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_oauth2_client"; +CREATE TABLE "public"."system_oauth2_client" ( + "id" int8 NOT NULL, + "client_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "secret" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "name" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "logo" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "description" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "status" int2 NOT NULL, + "access_token_validity_seconds" int4 NOT NULL, + "refresh_token_validity_seconds" int4 NOT NULL, + "redirect_uris" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "authorized_grant_types" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "scopes" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "auto_approve_scopes" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "authorities" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "resource_ids" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "additional_information" varchar(4096) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_oauth2_client"."id" IS '编号'; +COMMENT ON COLUMN "public"."system_oauth2_client"."client_id" IS '客户端编号'; +COMMENT ON COLUMN "public"."system_oauth2_client"."secret" IS '客户端密钥'; +COMMENT ON COLUMN "public"."system_oauth2_client"."name" IS '应用名'; +COMMENT ON COLUMN "public"."system_oauth2_client"."logo" IS '应用图标'; +COMMENT ON COLUMN "public"."system_oauth2_client"."description" IS '应用描述'; +COMMENT ON COLUMN "public"."system_oauth2_client"."status" IS '状态'; +COMMENT ON COLUMN "public"."system_oauth2_client"."access_token_validity_seconds" IS '访问令牌的有效期'; +COMMENT ON COLUMN "public"."system_oauth2_client"."refresh_token_validity_seconds" IS '刷新令牌的有效期'; +COMMENT ON COLUMN "public"."system_oauth2_client"."redirect_uris" IS '可重定向的 URI 地址'; +COMMENT ON COLUMN "public"."system_oauth2_client"."authorized_grant_types" IS '授权类型'; +COMMENT ON COLUMN "public"."system_oauth2_client"."scopes" IS '授权范围'; +COMMENT ON COLUMN "public"."system_oauth2_client"."auto_approve_scopes" IS '自动通过的授权范围'; +COMMENT ON COLUMN "public"."system_oauth2_client"."authorities" IS '权限'; +COMMENT ON COLUMN "public"."system_oauth2_client"."resource_ids" IS '资源'; +COMMENT ON COLUMN "public"."system_oauth2_client"."additional_information" IS '附加信息'; +COMMENT ON COLUMN "public"."system_oauth2_client"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_oauth2_client"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_oauth2_client"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_oauth2_client"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_oauth2_client"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."system_oauth2_client" IS 'OAuth2 客户端表'; + +-- ---------------------------- +-- Records of system_oauth2_client +-- ---------------------------- +INSERT INTO "public"."system_oauth2_client" VALUES (1, 'default', 'admin123', '芋道源码', 'http://test.win.iocoder.cn/a5e2e244368878a366b516805a4aabf1.png', '我是描述', 0, 1800, 2592000, '["https://www.iocoder.cn","https://doc.iocoder.cn"]', '["password","authorization_code","implicit","refresh_token"]', '["user.read","user.write"]', '[]', '["user.read","user.write"]', '[]', '{}', '1', '2022-05-11 21:47:12', '1', '2024-02-22 16:31:52', 0); +INSERT INTO "public"."system_oauth2_client" VALUES (40, 'test', 'test2', 'biubiu', 'http://test.win.iocoder.cn/277a899d573723f1fcdfb57340f00379.png', '啦啦啦啦', 0, 1800, 43200, '["https://www.iocoder.cn"]', '["password","authorization_code","implicit"]', '["user_info","projects"]', '["user_info"]', '[]', '[]', '{}', '1', '2022-05-12 00:28:20', '1', '2023-12-02 21:01:01', 0); +INSERT INTO "public"."system_oauth2_client" VALUES (41, 'win-sso-demo-by-code', 'test', '基于授权码模式,如何实现 SSO 单点登录?', 'http://test.win.iocoder.cn/fe4ed36596adad5120036ef61a6d0153654544d44af8dd4ad3ffe8f759933d6f.png', NULL, 0, 1800, 43200, '["http://127.0.0.1:18080"]', '["authorization_code","refresh_token"]', '["user.read","user.write"]', '[]', '[]', '[]', NULL, '1', '2022-09-29 13:28:31', '1', '2022-09-29 13:28:31', 0); +INSERT INTO "public"."system_oauth2_client" VALUES (42, 'win-sso-demo-by-password', 'test', '基于密码模式,如何实现 SSO 单点登录?', 'http://test.win.iocoder.cn/604bdc695e13b3b22745be704d1f2aa8ee05c5f26f9fead6d1ca49005afbc857.jpeg', NULL, 0, 1800, 43200, '["http://127.0.0.1:18080"]', '["password","refresh_token"]', '["user.read","user.write"]', '[]', '[]', '[]', NULL, '1', '2022-10-04 17:40:16', '1', '2022-10-04 20:31:21', 0); + +-- ---------------------------- +-- Table structure for system_oauth2_code +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_oauth2_code"; +CREATE TABLE "public"."system_oauth2_code" ( + "id" int8 NOT NULL, + "user_id" int8 NOT NULL, + "user_type" int2 NOT NULL, + "code" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, + "client_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "scopes" varchar(255) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "expires_time" timestamp(6) NOT NULL, + "redirect_uri" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "state" varchar(255) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_oauth2_code"."id" IS '编号'; +COMMENT ON COLUMN "public"."system_oauth2_code"."user_id" IS '用户编号'; +COMMENT ON COLUMN "public"."system_oauth2_code"."user_type" IS '用户类型'; +COMMENT ON COLUMN "public"."system_oauth2_code"."code" IS '授权码'; +COMMENT ON COLUMN "public"."system_oauth2_code"."client_id" IS '客户端编号'; +COMMENT ON COLUMN "public"."system_oauth2_code"."scopes" IS '授权范围'; +COMMENT ON COLUMN "public"."system_oauth2_code"."expires_time" IS '过期时间'; +COMMENT ON COLUMN "public"."system_oauth2_code"."redirect_uri" IS '可重定向的 URI 地址'; +COMMENT ON COLUMN "public"."system_oauth2_code"."state" IS '状态'; +COMMENT ON COLUMN "public"."system_oauth2_code"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_oauth2_code"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_oauth2_code"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_oauth2_code"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_oauth2_code"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_oauth2_code"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_oauth2_code" IS 'OAuth2 授权码表'; + +-- ---------------------------- +-- Records of system_oauth2_code +-- ---------------------------- + +-- ---------------------------- +-- Table structure for system_oauth2_refresh_token +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_oauth2_refresh_token"; +CREATE TABLE "public"."system_oauth2_refresh_token" ( + "id" int8 NOT NULL, + "user_id" int8 NOT NULL, + "refresh_token" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, + "user_type" int2 NOT NULL, + "client_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "scopes" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "expires_time" timestamp(6) NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_oauth2_refresh_token"."id" IS '编号'; +COMMENT ON COLUMN "public"."system_oauth2_refresh_token"."user_id" IS '用户编号'; +COMMENT ON COLUMN "public"."system_oauth2_refresh_token"."refresh_token" IS '刷新令牌'; +COMMENT ON COLUMN "public"."system_oauth2_refresh_token"."user_type" IS '用户类型'; +COMMENT ON COLUMN "public"."system_oauth2_refresh_token"."client_id" IS '客户端编号'; +COMMENT ON COLUMN "public"."system_oauth2_refresh_token"."scopes" IS '授权范围'; +COMMENT ON COLUMN "public"."system_oauth2_refresh_token"."expires_time" IS '过期时间'; +COMMENT ON COLUMN "public"."system_oauth2_refresh_token"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_oauth2_refresh_token"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_oauth2_refresh_token"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_oauth2_refresh_token"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_oauth2_refresh_token"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_oauth2_refresh_token"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_oauth2_refresh_token" IS 'OAuth2 刷新令牌'; + +-- ---------------------------- +-- Records of system_oauth2_refresh_token +-- ---------------------------- +INSERT INTO "public"."system_oauth2_refresh_token" VALUES (1, 1, 'ae2538b3b54e4211bedf44feed95ba0a', 2, 'default', NULL, '2024-09-05 15:16:16.751903', NULL, '2024-08-06 15:16:16.760433', NULL, '2024-08-06 15:16:16.760433', 0, 1); + +-- ---------------------------- +-- Table structure for system_operate_log +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_operate_log"; +CREATE TABLE "public"."system_operate_log" ( + "id" int8 NOT NULL, + "trace_id" varchar(64) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "user_id" int8 NOT NULL, + "user_type" int2 NOT NULL DEFAULT 0, + "type" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "sub_type" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "biz_id" int8 NOT NULL, + "action" varchar(2000) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "extra" varchar(2000) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "request_method" varchar(16) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "request_url" varchar(255) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "user_ip" varchar(50) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "user_agent" varchar(200) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_operate_log"."id" IS '日志主键'; +COMMENT ON COLUMN "public"."system_operate_log"."trace_id" IS '链路追踪编号'; +COMMENT ON COLUMN "public"."system_operate_log"."user_id" IS '用户编号'; +COMMENT ON COLUMN "public"."system_operate_log"."user_type" IS '用户类型'; +COMMENT ON COLUMN "public"."system_operate_log"."type" IS '操作模块类型'; +COMMENT ON COLUMN "public"."system_operate_log"."sub_type" IS '操作名'; +COMMENT ON COLUMN "public"."system_operate_log"."biz_id" IS '操作数据模块编号'; +COMMENT ON COLUMN "public"."system_operate_log"."action" IS '操作内容'; +COMMENT ON COLUMN "public"."system_operate_log"."extra" IS '拓展字段'; +COMMENT ON COLUMN "public"."system_operate_log"."request_method" IS '请求方法名'; +COMMENT ON COLUMN "public"."system_operate_log"."request_url" IS '请求地址'; +COMMENT ON COLUMN "public"."system_operate_log"."user_ip" IS '用户 IP'; +COMMENT ON COLUMN "public"."system_operate_log"."user_agent" IS '浏览器 UA'; +COMMENT ON COLUMN "public"."system_operate_log"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_operate_log"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_operate_log"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_operate_log"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_operate_log"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_operate_log"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_operate_log" IS '操作日志记录 V2 版本'; + +-- ---------------------------- +-- Records of system_operate_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for system_post +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_post"; +CREATE TABLE "public"."system_post" ( + "id" int8 NOT NULL, + "code" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, + "sort" int4 NOT NULL, + "status" int2 NOT NULL, + "remark" varchar(500) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_post"."id" IS '岗位ID'; +COMMENT ON COLUMN "public"."system_post"."code" IS '岗位编码'; +COMMENT ON COLUMN "public"."system_post"."name" IS '岗位名称'; +COMMENT ON COLUMN "public"."system_post"."sort" IS '显示顺序'; +COMMENT ON COLUMN "public"."system_post"."status" IS '状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."system_post"."remark" IS '备注'; +COMMENT ON COLUMN "public"."system_post"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_post"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_post"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_post"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_post"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_post"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_post" IS '岗位信息表'; + +-- ---------------------------- +-- Records of system_post +-- ---------------------------- +INSERT INTO "public"."system_post" VALUES (1, 'ceo', '董事长', 1, 0, '', 'admin', '2021-01-06 17:03:48', '1', '2023-02-11 15:19:04', 0, 1); +INSERT INTO "public"."system_post" VALUES (2, 'se', '项目经理', 2, 0, '', 'admin', '2021-01-05 17:03:48', '1', '2023-11-15 09:18:20', 0, 1); +INSERT INTO "public"."system_post" VALUES (4, 'user', '普通员工', 4, 0, '111', 'admin', '2021-01-05 17:03:48', '1', '2023-12-02 10:04:37', 0, 1); +INSERT INTO "public"."system_post" VALUES (5, 'HR', '人力资源', 5, 0, '', '1', '2024-03-24 20:45:40', '1', '2024-03-24 20:45:40', 0, 1); + +-- ---------------------------- +-- Table structure for system_role +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_role"; +CREATE TABLE "public"."system_role" ( + "id" int8 NOT NULL, + "name" varchar(30) COLLATE "pg_catalog"."default" NOT NULL, + "code" varchar(100) COLLATE "pg_catalog"."default" NOT NULL, + "sort" int4 NOT NULL, + "data_scope" int2 NOT NULL DEFAULT 1, + "data_scope_dept_ids" varchar(500) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "status" int2 NOT NULL, + "type" int2 NOT NULL, + "remark" varchar(500) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_role"."id" IS '角色ID'; +COMMENT ON COLUMN "public"."system_role"."name" IS '角色名称'; +COMMENT ON COLUMN "public"."system_role"."code" IS '角色权限字符串'; +COMMENT ON COLUMN "public"."system_role"."sort" IS '显示顺序'; +COMMENT ON COLUMN "public"."system_role"."data_scope" IS '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)'; +COMMENT ON COLUMN "public"."system_role"."data_scope_dept_ids" IS '数据范围(指定部门数组)'; +COMMENT ON COLUMN "public"."system_role"."status" IS '角色状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."system_role"."type" IS '角色类型'; +COMMENT ON COLUMN "public"."system_role"."remark" IS '备注'; +COMMENT ON COLUMN "public"."system_role"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_role"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_role"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_role"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_role"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_role"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_role" IS '角色信息表'; + +-- ---------------------------- +-- Records of system_role +-- ---------------------------- +INSERT INTO "public"."system_role" VALUES (1, '超级管理员', 'super_admin', 1, 1, '', 0, 1, '超级管理员', 'admin', '2021-01-05 17:03:48', '', '2022-02-22 05:08:21', 0, 1); +INSERT INTO "public"."system_role" VALUES (2, '普通角色', 'common', 2, 2, '', 0, 1, '普通角色', 'admin', '2021-01-05 17:03:48', '', '2022-02-22 05:08:20', 0, 1); +INSERT INTO "public"."system_role" VALUES (3, 'CRM 管理员', 'crm_admin', 2, 1, '', 0, 1, 'CRM 专属角色', '1', '2024-02-24 10:51:13', '1', '2024-02-24 02:51:32', 0, 1); +INSERT INTO "public"."system_role" VALUES (101, '测试账号', 'test', 0, 1, '[]', 0, 2, '我想测试', '', '2021-01-06 13:49:35', '1', '2024-03-24 22:22:45', 0, 1); +INSERT INTO "public"."system_role" VALUES (109, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', 0, 121); +INSERT INTO "public"."system_role" VALUES (111, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', 0, 122); + +-- ---------------------------- +-- Table structure for system_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_role_menu"; +CREATE TABLE "public"."system_role_menu" ( + "id" int8 NOT NULL, + "role_id" int8 NOT NULL, + "menu_id" int8 NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_role_menu"."id" IS '自增编号'; +COMMENT ON COLUMN "public"."system_role_menu"."role_id" IS '角色ID'; +COMMENT ON COLUMN "public"."system_role_menu"."menu_id" IS '菜单ID'; +COMMENT ON COLUMN "public"."system_role_menu"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_role_menu"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_role_menu"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_role_menu"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_role_menu"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_role_menu"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_role_menu" IS '角色和菜单关联表'; + +-- ---------------------------- +-- Records of system_role_menu +-- ---------------------------- +INSERT INTO "public"."system_role_menu" VALUES (263, 109, 1, '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (434, 2, 1, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (454, 2, 1093, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (455, 2, 1094, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (460, 2, 1100, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (467, 2, 1107, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (476, 2, 1117, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (477, 2, 100, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (478, 2, 101, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (479, 2, 102, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (480, 2, 1126, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (481, 2, 103, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (483, 2, 104, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (485, 2, 105, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (488, 2, 107, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (490, 2, 108, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (492, 2, 109, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (498, 2, 1138, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (523, 2, 1224, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (524, 2, 1225, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (541, 2, 500, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (543, 2, 501, '1', '2022-02-22 13:09:12', '1', '2022-02-22 13:09:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (675, 2, 2, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (689, 2, 1077, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (690, 2, 1078, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (692, 2, 1083, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (693, 2, 1084, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (699, 2, 1090, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (703, 2, 106, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (704, 2, 110, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (705, 2, 111, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (706, 2, 112, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (707, 2, 113, '1', '2022-02-22 13:16:57', '1', '2022-02-22 13:16:57', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1296, 110, 1, '110', '2022-02-23 00:23:55', '110', '2022-02-23 00:23:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1578, 111, 1, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1604, 101, 1216, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1605, 101, 1217, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1606, 101, 1218, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1607, 101, 1219, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1608, 101, 1220, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1609, 101, 1221, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1610, 101, 5, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1611, 101, 1222, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1612, 101, 1118, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1613, 101, 1119, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1614, 101, 1120, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1615, 101, 1185, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1616, 101, 1186, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1617, 101, 1187, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1618, 101, 1188, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1619, 101, 1189, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1620, 101, 1190, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1621, 101, 1191, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1622, 101, 1192, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1623, 101, 1193, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1624, 101, 1194, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1625, 101, 1195, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1626, 101, 1196, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1627, 101, 1197, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1628, 101, 1198, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1629, 101, 1199, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1630, 101, 1200, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1631, 101, 1201, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1632, 101, 1202, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1633, 101, 1207, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1634, 101, 1208, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1635, 101, 1209, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1636, 101, 1210, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1637, 101, 1211, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1638, 101, 1212, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1639, 101, 1213, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1640, 101, 1215, '1', '2022-03-19 21:45:52', '1', '2022-03-19 21:45:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1641, 101, 2, '1', '2022-04-01 22:21:24', '1', '2022-04-01 22:21:24', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1642, 101, 1031, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1643, 101, 1032, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1644, 101, 1033, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1645, 101, 1034, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1646, 101, 1035, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1647, 101, 1050, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1648, 101, 1051, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1649, 101, 1052, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1650, 101, 1053, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1651, 101, 1054, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1652, 101, 1056, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1653, 101, 1057, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1654, 101, 1058, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1655, 101, 1059, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1656, 101, 1060, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1657, 101, 1066, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1658, 101, 1067, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1659, 101, 1070, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1664, 101, 1075, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1666, 101, 1077, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1667, 101, 1078, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1668, 101, 1082, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1669, 101, 1083, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1670, 101, 1084, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1671, 101, 1085, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1672, 101, 1086, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1673, 101, 1087, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1674, 101, 1088, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1675, 101, 1089, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1679, 101, 1237, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1680, 101, 1238, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1681, 101, 1239, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1682, 101, 1240, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1683, 101, 1241, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1684, 101, 1242, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1685, 101, 1243, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1687, 101, 106, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1688, 101, 110, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1689, 101, 111, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1690, 101, 112, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1691, 101, 113, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1692, 101, 114, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1693, 101, 115, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1694, 101, 116, '1', '2022-04-01 22:21:37', '1', '2022-04-01 22:21:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1729, 109, 100, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1730, 109, 101, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1731, 109, 1063, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1732, 109, 1064, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1733, 109, 1001, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1734, 109, 1065, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1735, 109, 1002, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1736, 109, 1003, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1737, 109, 1004, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1738, 109, 1005, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1739, 109, 1006, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1740, 109, 1007, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1741, 109, 1008, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1742, 109, 1009, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1743, 109, 1010, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1744, 109, 1011, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1745, 109, 1012, '1', '2022-09-21 22:08:51', '1', '2022-09-21 22:08:51', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1746, 111, 100, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1747, 111, 101, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1748, 111, 1063, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1749, 111, 1064, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1750, 111, 1001, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1751, 111, 1065, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1752, 111, 1002, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1753, 111, 1003, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1754, 111, 1004, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1755, 111, 1005, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1756, 111, 1006, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1757, 111, 1007, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1758, 111, 1008, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1759, 111, 1009, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1760, 111, 1010, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1761, 111, 1011, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1762, 111, 1012, '1', '2022-09-21 22:08:52', '1', '2022-09-21 22:08:52', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1763, 109, 100, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1764, 109, 101, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1765, 109, 1063, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1766, 109, 1064, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1767, 109, 1001, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1768, 109, 1065, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1769, 109, 1002, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1770, 109, 1003, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1771, 109, 1004, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1772, 109, 1005, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1773, 109, 1006, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1774, 109, 1007, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1775, 109, 1008, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1776, 109, 1009, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1777, 109, 1010, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1778, 109, 1011, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1779, 109, 1012, '1', '2022-09-21 22:08:53', '1', '2022-09-21 22:08:53', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1780, 111, 100, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1781, 111, 101, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1782, 111, 1063, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1783, 111, 1064, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1784, 111, 1001, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1785, 111, 1065, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1786, 111, 1002, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1787, 111, 1003, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1788, 111, 1004, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1789, 111, 1005, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1790, 111, 1006, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1791, 111, 1007, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1792, 111, 1008, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1793, 111, 1009, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1794, 111, 1010, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1795, 111, 1011, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1796, 111, 1012, '1', '2022-09-21 22:08:54', '1', '2022-09-21 22:08:54', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1797, 109, 100, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1798, 109, 101, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1799, 109, 1063, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1800, 109, 1064, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1801, 109, 1001, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1802, 109, 1065, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1803, 109, 1002, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1804, 109, 1003, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1805, 109, 1004, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1806, 109, 1005, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1807, 109, 1006, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1808, 109, 1007, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1809, 109, 1008, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1810, 109, 1009, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1811, 109, 1010, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1812, 109, 1011, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1813, 109, 1012, '1', '2022-09-21 22:08:55', '1', '2022-09-21 22:08:55', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1814, 111, 100, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1815, 111, 101, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1816, 111, 1063, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1817, 111, 1064, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1818, 111, 1001, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1819, 111, 1065, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1820, 111, 1002, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1821, 111, 1003, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1822, 111, 1004, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1823, 111, 1005, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1824, 111, 1006, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1825, 111, 1007, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1826, 111, 1008, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1827, 111, 1009, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1828, 111, 1010, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1829, 111, 1011, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1830, 111, 1012, '1', '2022-09-21 22:08:56', '1', '2022-09-21 22:08:56', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1831, 109, 103, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1832, 109, 1017, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1833, 109, 1018, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1834, 109, 1019, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1835, 109, 1020, '1', '2022-09-21 22:43:23', '1', '2022-09-21 22:43:23', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1836, 111, 103, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1837, 111, 1017, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1838, 111, 1018, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1839, 111, 1019, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1840, 111, 1020, '1', '2022-09-21 22:43:24', '1', '2022-09-21 22:43:24', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1841, 109, 1036, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1842, 109, 1037, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1843, 109, 1038, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1844, 109, 1039, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1845, 109, 107, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (1846, 111, 1036, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1847, 111, 1037, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1848, 111, 1038, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1849, 111, 1039, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1850, 111, 107, '1', '2022-09-21 22:48:13', '1', '2022-09-21 22:48:13', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (1991, 2, 1024, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1992, 2, 1025, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1993, 2, 1026, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1994, 2, 1027, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1995, 2, 1028, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1996, 2, 1029, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1997, 2, 1030, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1998, 2, 1031, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (1999, 2, 1032, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2000, 2, 1033, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2001, 2, 1034, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2002, 2, 1035, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2003, 2, 1036, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2004, 2, 1037, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2005, 2, 1038, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2006, 2, 1039, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2007, 2, 1040, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2008, 2, 1042, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2009, 2, 1043, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2010, 2, 1045, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2011, 2, 1046, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2012, 2, 1048, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2013, 2, 1050, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2014, 2, 1051, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2015, 2, 1052, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2016, 2, 1053, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2017, 2, 1054, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2018, 2, 1056, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2019, 2, 1057, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2020, 2, 1058, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2021, 2, 2083, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2022, 2, 1059, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2023, 2, 1060, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2024, 2, 1063, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2025, 2, 1064, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2026, 2, 1065, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2027, 2, 1066, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2028, 2, 1067, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2029, 2, 1070, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2034, 2, 1075, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2036, 2, 1082, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2037, 2, 1085, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2038, 2, 1086, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2039, 2, 1087, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2040, 2, 1088, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2041, 2, 1089, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2042, 2, 1091, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2043, 2, 1092, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2044, 2, 1095, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2045, 2, 1096, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2046, 2, 1097, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2047, 2, 1098, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2048, 2, 1101, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2049, 2, 1102, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2050, 2, 1103, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2051, 2, 1104, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2052, 2, 1105, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2053, 2, 1106, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2054, 2, 1108, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2055, 2, 1109, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2061, 2, 1127, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2062, 2, 1128, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2063, 2, 1129, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2064, 2, 1130, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2066, 2, 1132, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2067, 2, 1133, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2068, 2, 1134, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2069, 2, 1135, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2070, 2, 1136, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2071, 2, 1137, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2072, 2, 114, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2073, 2, 1139, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2074, 2, 115, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2075, 2, 1140, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2076, 2, 116, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2077, 2, 1141, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2078, 2, 1142, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2079, 2, 1143, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2080, 2, 1150, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2081, 2, 1161, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2082, 2, 1162, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2083, 2, 1163, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2084, 2, 1164, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2085, 2, 1165, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2086, 2, 1166, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2087, 2, 1173, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2088, 2, 1174, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2089, 2, 1175, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2090, 2, 1176, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2091, 2, 1177, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2092, 2, 1178, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2099, 2, 1226, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2100, 2, 1227, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2101, 2, 1228, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2102, 2, 1229, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2103, 2, 1237, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2104, 2, 1238, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2105, 2, 1239, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2106, 2, 1240, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2107, 2, 1241, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2108, 2, 1242, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2109, 2, 1243, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2117, 2, 1255, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2118, 2, 1256, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2119, 2, 1257, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2120, 2, 1258, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2121, 2, 1259, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2122, 2, 1260, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2123, 2, 1261, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2124, 2, 1263, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2125, 2, 1264, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2126, 2, 1265, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2127, 2, 1266, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2128, 2, 1267, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2129, 2, 1001, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2130, 2, 1002, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2131, 2, 1003, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2132, 2, 1004, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2133, 2, 1005, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2134, 2, 1006, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2135, 2, 1007, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2136, 2, 1008, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2137, 2, 1009, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2138, 2, 1010, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2139, 2, 1011, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2140, 2, 1012, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2141, 2, 1013, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2142, 2, 1014, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2143, 2, 1015, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2144, 2, 1016, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2145, 2, 1017, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2146, 2, 1018, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2147, 2, 1019, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2148, 2, 1020, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2149, 2, 1021, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2150, 2, 1022, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2151, 2, 1023, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2152, 2, 1281, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2153, 2, 1282, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2154, 2, 2000, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2155, 2, 2002, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2156, 2, 2003, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2157, 2, 2004, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2158, 2, 2005, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2159, 2, 2006, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2160, 2, 2008, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2161, 2, 2009, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2162, 2, 2010, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2163, 2, 2011, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2164, 2, 2012, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2170, 2, 2019, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2171, 2, 2020, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2172, 2, 2021, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2173, 2, 2022, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2174, 2, 2023, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2175, 2, 2025, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2177, 2, 2027, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2178, 2, 2028, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2179, 2, 2029, '1', '2023-01-25 08:42:58', '1', '2023-01-25 08:42:58', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2180, 2, 2014, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2181, 2, 2015, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2182, 2, 2016, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2183, 2, 2017, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2184, 2, 2018, '1', '2023-01-25 08:43:12', '1', '2023-01-25 08:43:12', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2188, 101, 1024, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2189, 101, 1, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2190, 101, 1025, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2191, 101, 1026, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2192, 101, 1027, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2193, 101, 1028, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2194, 101, 1029, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2195, 101, 1030, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2196, 101, 1036, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2197, 101, 1037, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2198, 101, 1038, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2199, 101, 1039, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2200, 101, 1040, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2201, 101, 1042, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2202, 101, 1043, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2203, 101, 1045, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2204, 101, 1046, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2205, 101, 1048, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2206, 101, 2083, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2207, 101, 1063, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2208, 101, 1064, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2209, 101, 1065, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2210, 101, 1093, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2211, 101, 1094, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2212, 101, 1095, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2213, 101, 1096, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2214, 101, 1097, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2215, 101, 1098, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2216, 101, 1100, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2217, 101, 1101, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2218, 101, 1102, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2219, 101, 1103, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2220, 101, 1104, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2221, 101, 1105, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2222, 101, 1106, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2223, 101, 2130, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2224, 101, 1107, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2225, 101, 2131, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2226, 101, 1108, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2227, 101, 2132, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2228, 101, 1109, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2229, 101, 2133, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2230, 101, 2134, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2232, 101, 2135, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2234, 101, 2136, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2236, 101, 2137, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2238, 101, 2138, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2240, 101, 2139, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2242, 101, 2140, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2243, 101, 2141, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2244, 101, 2142, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2245, 101, 2143, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2246, 101, 2144, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2247, 101, 2145, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2248, 101, 2146, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2249, 101, 2147, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2250, 101, 100, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2251, 101, 2148, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2252, 101, 101, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2253, 101, 2149, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2254, 101, 102, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2255, 101, 2150, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2256, 101, 103, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2257, 101, 2151, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2258, 101, 104, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2259, 101, 2152, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2260, 101, 105, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2261, 101, 107, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2262, 101, 108, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2263, 101, 109, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2264, 101, 1138, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2265, 101, 1139, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2266, 101, 1140, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2267, 101, 1141, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2268, 101, 1142, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2269, 101, 1143, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2270, 101, 1224, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2271, 101, 1225, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2272, 101, 1226, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2273, 101, 1227, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2274, 101, 1228, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2275, 101, 1229, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2282, 101, 1261, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2283, 101, 1263, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2284, 101, 1264, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2285, 101, 1265, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2286, 101, 1266, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2287, 101, 1267, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2288, 101, 1001, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2289, 101, 1002, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2290, 101, 1003, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2291, 101, 1004, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2292, 101, 1005, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2293, 101, 1006, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2294, 101, 1007, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2295, 101, 1008, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2296, 101, 1009, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2297, 101, 1010, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2298, 101, 1011, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2299, 101, 1012, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2300, 101, 500, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2301, 101, 1013, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2302, 101, 501, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2303, 101, 1014, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2304, 101, 1015, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2305, 101, 1016, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2306, 101, 1017, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2307, 101, 1018, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2308, 101, 1019, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2309, 101, 1020, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2310, 101, 1021, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2311, 101, 1022, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2312, 101, 1023, '1', '2023-02-09 23:49:46', '1', '2023-02-09 23:49:46', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2929, 109, 1224, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2930, 109, 1225, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2931, 109, 1226, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2932, 109, 1227, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2933, 109, 1228, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2934, 109, 1229, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2935, 109, 1138, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2936, 109, 1139, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2937, 109, 1140, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2938, 109, 1141, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2939, 109, 1142, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2940, 109, 1143, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2941, 111, 1224, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (2942, 111, 1225, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (2943, 111, 1226, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (2944, 111, 1227, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (2945, 111, 1228, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (2946, 111, 1229, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (2947, 111, 1138, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (2948, 111, 1139, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (2949, 111, 1140, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (2950, 111, 1141, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (2951, 111, 1142, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (2952, 111, 1143, '1', '2023-12-02 23:19:40', '1', '2023-12-02 23:19:40', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (2993, 109, 2, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2994, 109, 1031, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2995, 109, 1032, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2996, 109, 1033, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2997, 109, 1034, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2998, 109, 1035, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (2999, 109, 1050, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3000, 109, 1051, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3001, 109, 1052, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3002, 109, 1053, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3003, 109, 1054, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3004, 109, 1056, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3005, 109, 1057, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3006, 109, 1058, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3007, 109, 1059, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3008, 109, 1060, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3009, 109, 1066, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3010, 109, 1067, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3011, 109, 1070, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3012, 109, 1075, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3013, 109, 1076, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3014, 109, 1077, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3015, 109, 1078, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3016, 109, 1082, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3017, 109, 1083, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3018, 109, 1084, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3019, 109, 1085, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3020, 109, 1086, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3021, 109, 1087, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3022, 109, 1088, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3023, 109, 1089, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3024, 109, 1090, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3025, 109, 1091, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3026, 109, 1092, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3027, 109, 106, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3028, 109, 110, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3029, 109, 111, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3030, 109, 112, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3031, 109, 113, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3032, 109, 114, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3033, 109, 115, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3034, 109, 116, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3035, 109, 2472, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3036, 109, 2478, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3037, 109, 2479, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3038, 109, 2480, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3039, 109, 2481, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3040, 109, 2482, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3041, 109, 2483, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3042, 109, 2484, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3043, 109, 2485, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3044, 109, 2486, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3045, 109, 2487, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3046, 109, 2488, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3047, 109, 2489, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3048, 109, 2490, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3049, 109, 2491, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3050, 109, 2492, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3051, 109, 2493, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3052, 109, 2494, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3053, 109, 2495, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3054, 109, 2497, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3055, 109, 1237, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3056, 109, 1238, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3057, 109, 1239, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3058, 109, 1240, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3059, 109, 1241, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3060, 109, 1242, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3061, 109, 1243, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3062, 109, 2525, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3063, 109, 1255, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3064, 109, 1256, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3065, 109, 1257, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3066, 109, 1258, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3067, 109, 1259, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3068, 109, 1260, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3069, 111, 2, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3070, 111, 1031, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3071, 111, 1032, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3072, 111, 1033, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3073, 111, 1034, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3074, 111, 1035, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3075, 111, 1050, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3076, 111, 1051, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3077, 111, 1052, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3078, 111, 1053, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3079, 111, 1054, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3080, 111, 1056, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3081, 111, 1057, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3082, 111, 1058, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3083, 111, 1059, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3084, 111, 1060, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3085, 111, 1066, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3086, 111, 1067, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3087, 111, 1070, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3088, 111, 1075, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3089, 111, 1076, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3090, 111, 1077, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3091, 111, 1078, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3092, 111, 1082, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3093, 111, 1083, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3094, 111, 1084, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3095, 111, 1085, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3096, 111, 1086, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3097, 111, 1087, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3098, 111, 1088, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3099, 111, 1089, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3100, 111, 1090, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3101, 111, 1091, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3102, 111, 1092, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3103, 111, 106, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3104, 111, 110, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3105, 111, 111, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3106, 111, 112, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3107, 111, 113, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3108, 111, 114, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3109, 111, 115, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3110, 111, 116, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3111, 111, 2472, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3112, 111, 2478, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3113, 111, 2479, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3114, 111, 2480, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3115, 111, 2481, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3116, 111, 2482, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3117, 111, 2483, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3118, 111, 2484, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3119, 111, 2485, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3120, 111, 2486, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3121, 111, 2487, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3122, 111, 2488, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3123, 111, 2489, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3124, 111, 2490, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3125, 111, 2491, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3126, 111, 2492, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3127, 111, 2493, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3128, 111, 2494, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3129, 111, 2495, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3130, 111, 2497, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3131, 111, 1237, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3132, 111, 1238, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3133, 111, 1239, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3134, 111, 1240, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3135, 111, 1241, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3136, 111, 1242, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3137, 111, 1243, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3138, 111, 2525, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3139, 111, 1255, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3140, 111, 1256, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3141, 111, 1257, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3142, 111, 1258, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3143, 111, 1259, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3144, 111, 1260, '1', '2023-12-02 23:41:02', '1', '2023-12-02 23:41:02', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3221, 109, 102, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3222, 109, 1013, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3223, 109, 1014, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3224, 109, 1015, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3225, 109, 1016, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (3226, 111, 102, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3227, 111, 1013, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3228, 111, 1014, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3229, 111, 1015, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (3230, 111, 1016, '1', '2023-12-30 11:42:36', '1', '2023-12-30 11:42:36', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4163, 109, 5, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4164, 109, 1118, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4165, 109, 1119, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4166, 109, 1120, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4167, 109, 2713, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4168, 109, 2714, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4169, 109, 2715, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4170, 109, 2716, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4171, 109, 2717, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4172, 109, 2718, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4173, 109, 2720, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4174, 109, 1185, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4175, 109, 2721, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4176, 109, 1186, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4177, 109, 2722, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4178, 109, 1187, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4179, 109, 2723, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4180, 109, 1188, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4181, 109, 2724, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4182, 109, 1189, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4183, 109, 2725, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4184, 109, 1190, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4185, 109, 2726, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4186, 109, 1191, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4187, 109, 2727, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4188, 109, 1192, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4189, 109, 2728, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4190, 109, 1193, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4191, 109, 2729, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4192, 109, 1194, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4193, 109, 2730, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4194, 109, 1195, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4195, 109, 2731, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4196, 109, 1196, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4197, 109, 2732, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4198, 109, 1197, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4199, 109, 2733, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4200, 109, 1198, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4201, 109, 2734, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4202, 109, 1199, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4203, 109, 2735, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4204, 109, 1200, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4205, 109, 1201, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4206, 109, 1202, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4207, 109, 1207, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4208, 109, 1208, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4209, 109, 1209, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4210, 109, 1210, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4211, 109, 1211, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4212, 109, 1212, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4213, 109, 1213, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4214, 109, 1215, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4215, 109, 1216, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4216, 109, 1217, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4217, 109, 1218, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4218, 109, 1219, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4219, 109, 1220, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4220, 109, 1221, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4221, 109, 1222, '1', '2024-03-30 17:53:17', '1', '2024-03-30 17:53:17', 0, 121); +INSERT INTO "public"."system_role_menu" VALUES (4222, 111, 5, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4223, 111, 1118, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4224, 111, 1119, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4225, 111, 1120, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4226, 111, 2713, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4227, 111, 2714, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4228, 111, 2715, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4229, 111, 2716, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4230, 111, 2717, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4231, 111, 2718, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4232, 111, 2720, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4233, 111, 1185, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4234, 111, 2721, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4235, 111, 1186, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4236, 111, 2722, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4237, 111, 1187, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4238, 111, 2723, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4239, 111, 1188, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4240, 111, 2724, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4241, 111, 1189, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4242, 111, 2725, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4243, 111, 1190, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4244, 111, 2726, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4245, 111, 1191, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4246, 111, 2727, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4247, 111, 1192, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4248, 111, 2728, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4249, 111, 1193, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4250, 111, 2729, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4251, 111, 1194, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4252, 111, 2730, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4253, 111, 1195, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4254, 111, 2731, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4255, 111, 1196, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4256, 111, 2732, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4257, 111, 1197, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4258, 111, 2733, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4259, 111, 1198, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4260, 111, 2734, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4261, 111, 1199, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4262, 111, 2735, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4263, 111, 1200, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4264, 111, 1201, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4265, 111, 1202, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4266, 111, 1207, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4267, 111, 1208, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4268, 111, 1209, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4269, 111, 1210, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4270, 111, 1211, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4271, 111, 1212, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4272, 111, 1213, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4273, 111, 1215, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4274, 111, 1216, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4275, 111, 1217, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4276, 111, 1218, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4277, 111, 1219, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4278, 111, 1220, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4279, 111, 1221, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (4280, 111, 1222, '1', '2024-03-30 17:53:18', '1', '2024-03-30 17:53:18', 0, 122); +INSERT INTO "public"."system_role_menu" VALUES (5777, 101, 2739, '1', '2024-04-30 09:38:37', '1', '2024-04-30 09:38:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (5778, 101, 2740, '1', '2024-04-30 09:38:37', '1', '2024-04-30 09:38:37', 0, 1); +INSERT INTO "public"."system_role_menu" VALUES (2116, 2, 1254, '1', '2023-01-25 08:42:52', '1', '2023-01-25 08:42:52', 1, 1); + +-- ---------------------------- +-- Table structure for system_sms_channel +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_sms_channel"; +CREATE TABLE "public"."system_sms_channel" ( + "id" int8 NOT NULL, + "signature" varchar(12) COLLATE "pg_catalog"."default" NOT NULL, + "code" varchar(63) COLLATE "pg_catalog"."default" NOT NULL, + "status" int2 NOT NULL, + "remark" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "api_key" varchar(128) COLLATE "pg_catalog"."default" NOT NULL, + "api_secret" varchar(128) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "callback_url" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_sms_channel"."id" IS '编号'; +COMMENT ON COLUMN "public"."system_sms_channel"."signature" IS '短信签名'; +COMMENT ON COLUMN "public"."system_sms_channel"."code" IS '渠道编码'; +COMMENT ON COLUMN "public"."system_sms_channel"."status" IS '开启状态'; +COMMENT ON COLUMN "public"."system_sms_channel"."remark" IS '备注'; +COMMENT ON COLUMN "public"."system_sms_channel"."api_key" IS '短信 API 的账号'; +COMMENT ON COLUMN "public"."system_sms_channel"."api_secret" IS '短信 API 的秘钥'; +COMMENT ON COLUMN "public"."system_sms_channel"."callback_url" IS '短信发送回调 URL'; +COMMENT ON COLUMN "public"."system_sms_channel"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_sms_channel"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_sms_channel"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_sms_channel"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_sms_channel"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."system_sms_channel" IS '短信渠道'; + +-- ---------------------------- +-- Records of system_sms_channel +-- ---------------------------- +INSERT INTO "public"."system_sms_channel" VALUES (2, 'Ballcat', 'ALIYUN', 0, '你要改哦,只有我可以用!!!!', 'LTAI5tCnKso2uG3kJ5gRav88', 'fGJ5SNXL7P1NHNRmJ7DJaMJGPyE55C', NULL, '', '2021-03-31 11:53:10', '1', '2023-12-02 22:10:17', 0); +INSERT INTO "public"."system_sms_channel" VALUES (4, '测试渠道', 'DEBUG_DING_TALK', 0, '123', '696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859', 'SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67', NULL, '1', '2021-04-13 00:23:14', '1', '2022-03-27 20:29:49', 0); +INSERT INTO "public"."system_sms_channel" VALUES (6, '测试演示', 'DEBUG_DING_TALK', 0, '仅测试', '696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859', 'SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67', NULL, '1', '2022-04-10 23:07:59', '1', '2023-12-02 22:10:08', 0); + +-- ---------------------------- +-- Table structure for system_sms_code +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_sms_code"; +CREATE TABLE "public"."system_sms_code" ( + "id" int8 NOT NULL, + "mobile" varchar(11) COLLATE "pg_catalog"."default" NOT NULL, + "code" varchar(6) COLLATE "pg_catalog"."default" NOT NULL, + "create_ip" varchar(15) COLLATE "pg_catalog"."default" NOT NULL, + "scene" int2 NOT NULL, + "today_index" int2 NOT NULL, + "used" int2 NOT NULL, + "used_time" timestamp(6), + "used_ip" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_sms_code"."id" IS '编号'; +COMMENT ON COLUMN "public"."system_sms_code"."mobile" IS '手机号'; +COMMENT ON COLUMN "public"."system_sms_code"."code" IS '验证码'; +COMMENT ON COLUMN "public"."system_sms_code"."create_ip" IS '创建 IP'; +COMMENT ON COLUMN "public"."system_sms_code"."scene" IS '发送场景'; +COMMENT ON COLUMN "public"."system_sms_code"."today_index" IS '今日发送的第几条'; +COMMENT ON COLUMN "public"."system_sms_code"."used" IS '是否使用'; +COMMENT ON COLUMN "public"."system_sms_code"."used_time" IS '使用时间'; +COMMENT ON COLUMN "public"."system_sms_code"."used_ip" IS '使用 IP'; +COMMENT ON COLUMN "public"."system_sms_code"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_sms_code"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_sms_code"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_sms_code"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_sms_code"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_sms_code"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_sms_code" IS '手机验证码'; + +-- ---------------------------- +-- Records of system_sms_code +-- ---------------------------- + +-- ---------------------------- +-- Table structure for system_sms_log +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_sms_log"; +CREATE TABLE "public"."system_sms_log" ( + "id" int8 NOT NULL, + "channel_id" int8 NOT NULL, + "channel_code" varchar(63) COLLATE "pg_catalog"."default" NOT NULL, + "template_id" int8 NOT NULL, + "template_code" varchar(63) COLLATE "pg_catalog"."default" NOT NULL, + "template_type" int2 NOT NULL, + "template_content" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "template_params" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "api_template_id" varchar(63) COLLATE "pg_catalog"."default" NOT NULL, + "mobile" varchar(11) COLLATE "pg_catalog"."default" NOT NULL, + "user_id" int8, + "user_type" int2, + "send_status" int2 NOT NULL DEFAULT 0, + "send_time" timestamp(6), + "api_send_code" varchar(63) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "api_send_msg" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "api_request_id" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "api_serial_no" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "receive_status" int2 NOT NULL DEFAULT 0, + "receive_time" timestamp(6), + "api_receive_code" varchar(63) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "api_receive_msg" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_sms_log"."id" IS '编号'; +COMMENT ON COLUMN "public"."system_sms_log"."channel_id" IS '短信渠道编号'; +COMMENT ON COLUMN "public"."system_sms_log"."channel_code" IS '短信渠道编码'; +COMMENT ON COLUMN "public"."system_sms_log"."template_id" IS '模板编号'; +COMMENT ON COLUMN "public"."system_sms_log"."template_code" IS '模板编码'; +COMMENT ON COLUMN "public"."system_sms_log"."template_type" IS '短信类型'; +COMMENT ON COLUMN "public"."system_sms_log"."template_content" IS '短信内容'; +COMMENT ON COLUMN "public"."system_sms_log"."template_params" IS '短信参数'; +COMMENT ON COLUMN "public"."system_sms_log"."api_template_id" IS '短信 API 的模板编号'; +COMMENT ON COLUMN "public"."system_sms_log"."mobile" IS '手机号'; +COMMENT ON COLUMN "public"."system_sms_log"."user_id" IS '用户编号'; +COMMENT ON COLUMN "public"."system_sms_log"."user_type" IS '用户类型'; +COMMENT ON COLUMN "public"."system_sms_log"."send_status" IS '发送状态'; +COMMENT ON COLUMN "public"."system_sms_log"."send_time" IS '发送时间'; +COMMENT ON COLUMN "public"."system_sms_log"."api_send_code" IS '短信 API 发送结果的编码'; +COMMENT ON COLUMN "public"."system_sms_log"."api_send_msg" IS '短信 API 发送失败的提示'; +COMMENT ON COLUMN "public"."system_sms_log"."api_request_id" IS '短信 API 发送返回的唯一请求 ID'; +COMMENT ON COLUMN "public"."system_sms_log"."api_serial_no" IS '短信 API 发送返回的序号'; +COMMENT ON COLUMN "public"."system_sms_log"."receive_status" IS '接收状态'; +COMMENT ON COLUMN "public"."system_sms_log"."receive_time" IS '接收时间'; +COMMENT ON COLUMN "public"."system_sms_log"."api_receive_code" IS 'API 接收结果的编码'; +COMMENT ON COLUMN "public"."system_sms_log"."api_receive_msg" IS 'API 接收结果的说明'; +COMMENT ON COLUMN "public"."system_sms_log"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_sms_log"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_sms_log"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_sms_log"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_sms_log"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."system_sms_log" IS '短信日志'; + +-- ---------------------------- +-- Records of system_sms_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for system_sms_template +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_sms_template"; +CREATE TABLE "public"."system_sms_template" ( + "id" int8 NOT NULL, + "type" int2 NOT NULL, + "status" int2 NOT NULL, + "code" varchar(63) COLLATE "pg_catalog"."default" NOT NULL, + "name" varchar(63) COLLATE "pg_catalog"."default" NOT NULL, + "content" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "params" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "remark" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "api_template_id" varchar(63) COLLATE "pg_catalog"."default" NOT NULL, + "channel_id" int8 NOT NULL, + "channel_code" varchar(63) COLLATE "pg_catalog"."default" NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_sms_template"."id" IS '编号'; +COMMENT ON COLUMN "public"."system_sms_template"."type" IS '模板类型'; +COMMENT ON COLUMN "public"."system_sms_template"."status" IS '开启状态'; +COMMENT ON COLUMN "public"."system_sms_template"."code" IS '模板编码'; +COMMENT ON COLUMN "public"."system_sms_template"."name" IS '模板名称'; +COMMENT ON COLUMN "public"."system_sms_template"."content" IS '模板内容'; +COMMENT ON COLUMN "public"."system_sms_template"."params" IS '参数数组'; +COMMENT ON COLUMN "public"."system_sms_template"."remark" IS '备注'; +COMMENT ON COLUMN "public"."system_sms_template"."api_template_id" IS '短信 API 的模板编号'; +COMMENT ON COLUMN "public"."system_sms_template"."channel_id" IS '短信渠道编号'; +COMMENT ON COLUMN "public"."system_sms_template"."channel_code" IS '短信渠道编码'; +COMMENT ON COLUMN "public"."system_sms_template"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_sms_template"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_sms_template"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_sms_template"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_sms_template"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."system_sms_template" IS '短信模板'; + +-- ---------------------------- +-- Records of system_sms_template +-- ---------------------------- +INSERT INTO "public"."system_sms_template" VALUES (2, 1, 0, 'test_01', '测试验证码短信', '正在进行登录操作{operation},您的验证码是{code}', '["operation","code"]', '测试备注', '4383920', 6, 'DEBUG_DING_TALK', '', '2021-03-31 10:49:38', '1', '2023-12-02 22:32:47', 0); +INSERT INTO "public"."system_sms_template" VALUES (3, 1, 0, 'test_02', '公告通知', '您的验证码{code},该验证码5分钟内有效,请勿泄漏于他人!', '["code"]', NULL, 'SMS_207945135', 2, 'ALIYUN', '', '2021-03-31 11:56:30', '1', '2021-04-10 01:22:02', 0); +INSERT INTO "public"."system_sms_template" VALUES (6, 3, 0, 'test-01', '测试模板', '哈哈哈 {name}', '["name"]', 'f哈哈哈', '4383920', 6, 'DEBUG_DING_TALK', '1', '2021-04-10 01:07:21', '1', '2022-12-10 21:26:09', 0); +INSERT INTO "public"."system_sms_template" VALUES (7, 3, 0, 'test-04', '测试下', '老鸡{name},牛逼{code}', '["name","code"]', '哈哈哈哈', 'suibian', 4, 'DEBUG_DING_TALK', '1', '2021-04-13 00:29:53', '1', '2023-12-02 22:35:34', 0); +INSERT INTO "public"."system_sms_template" VALUES (8, 1, 0, 'user-sms-login', '前台用户短信登录', '您的验证码是{code}', '["code"]', NULL, '4372216', 6, 'DEBUG_DING_TALK', '1', '2021-10-11 08:10:00', '1', '2022-12-10 21:25:59', 0); +INSERT INTO "public"."system_sms_template" VALUES (9, 2, 0, 'bpm_task_assigned', '【工作流】任务被分配', '您收到了一条新的待办任务:{processInstanceName}-{taskName},申请人:{startUserNickname},处理链接:{detailUrl}', '["processInstanceName","taskName","startUserNickname","detailUrl"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-21 22:31:19', '1', '2022-01-22 00:03:36', 0); +INSERT INTO "public"."system_sms_template" VALUES (10, 2, 0, 'bpm_process_instance_reject', '【工作流】流程被不通过', '您的流程被审批不通过:{processInstanceName},原因:{reason},查看链接:{detailUrl}', '["processInstanceName","reason","detailUrl"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:03:31', '1', '2022-05-01 12:33:14', 0); +INSERT INTO "public"."system_sms_template" VALUES (11, 2, 0, 'bpm_process_instance_approve', '【工作流】流程被通过', '您的流程被审批通过:{processInstanceName},查看链接:{detailUrl}', '["processInstanceName","detailUrl"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:04:31', '1', '2022-03-27 20:32:21', 0); +INSERT INTO "public"."system_sms_template" VALUES (12, 2, 0, 'demo', '演示模板', '我就是测试一下下', '[]', NULL, 'biubiubiu', 6, 'DEBUG_DING_TALK', '1', '2022-04-10 23:22:49', '1', '2023-03-24 23:45:07', 0); +INSERT INTO "public"."system_sms_template" VALUES (14, 1, 0, 'user-update-mobile', '会员用户 - 修改手机', '您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', '["code"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', '2023-08-19 18:58:01', '1', '2023-08-19 11:34:04', 0); +INSERT INTO "public"."system_sms_template" VALUES (15, 1, 0, 'user-update-password', '会员用户 - 修改密码', '您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', '["code"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', '2023-08-19 18:58:01', '1', '2023-08-19 11:34:18', 0); +INSERT INTO "public"."system_sms_template" VALUES (16, 1, 0, 'user-reset-password', '会员用户 - 重置密码', '您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', '["code"]', '', 'null', 4, 'DEBUG_DING_TALK', '1', '2023-08-19 18:58:01', '1', '2023-12-02 22:35:27', 0); + +-- ---------------------------- +-- Table structure for system_social_client +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_social_client"; +CREATE TABLE "public"."system_social_client" ( + "id" int8 NOT NULL, + "name" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "social_type" int2 NOT NULL, + "user_type" int2 NOT NULL, + "client_id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "client_secret" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "agent_id" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "status" int2 NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_social_client"."id" IS '编号'; +COMMENT ON COLUMN "public"."system_social_client"."name" IS '应用名'; +COMMENT ON COLUMN "public"."system_social_client"."social_type" IS '社交平台的类型'; +COMMENT ON COLUMN "public"."system_social_client"."user_type" IS '用户类型'; +COMMENT ON COLUMN "public"."system_social_client"."client_id" IS '客户端编号'; +COMMENT ON COLUMN "public"."system_social_client"."client_secret" IS '客户端密钥'; +COMMENT ON COLUMN "public"."system_social_client"."agent_id" IS '代理编号'; +COMMENT ON COLUMN "public"."system_social_client"."status" IS '状态'; +COMMENT ON COLUMN "public"."system_social_client"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_social_client"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_social_client"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_social_client"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_social_client"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_social_client"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_social_client" IS '社交客户端表'; + +-- ---------------------------- +-- Records of system_social_client +-- ---------------------------- +INSERT INTO "public"."system_social_client" VALUES (1, '钉钉', 20, 2, 'dingvrnreaje3yqvzhxg', 'i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI', NULL, 0, '', '2023-10-18 11:21:18', '1', '2023-12-20 21:28:26', 1, 1); +INSERT INTO "public"."system_social_client" VALUES (2, '钉钉(王土豆)', 20, 2, 'dingtsu9hpepjkbmthhw', 'FP_bnSq_HAHKCSncmJjw5hxhnzs6vaVDSZZn3egj6rdqTQ_hu5tQVJyLMpgCakdP', NULL, 0, '', '2023-10-18 11:21:18', '', '2023-12-20 21:28:26', 1, 121); +INSERT INTO "public"."system_social_client" VALUES (3, '微信公众号', 31, 1, 'wx5b23ba7a5589ecbb', '2a7b3b20c537e52e74afd395eb85f61f', NULL, 0, '', '2023-10-18 16:07:46', '1', '2023-12-20 21:28:23', 1, 1); +INSERT INTO "public"."system_social_client" VALUES (43, '微信小程序', 34, 1, 'wx63c280fe3248a3e7', '6f270509224a7ae1296bbf1c8cb97aed', NULL, 0, '', '2023-10-19 13:37:41', '1', '2023-12-20 21:28:25', 1, 1); + +-- ---------------------------- +-- Table structure for system_social_user +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_social_user"; +CREATE TABLE "public"."system_social_user" ( + "id" int8 NOT NULL, + "type" int2 NOT NULL, + "openid" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, + "token" varchar(256) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "raw_token_info" varchar(1024) COLLATE "pg_catalog"."default" NOT NULL, + "nickname" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, + "avatar" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "raw_user_info" varchar(1024) COLLATE "pg_catalog"."default" NOT NULL, + "code" varchar(256) COLLATE "pg_catalog"."default" NOT NULL, + "state" varchar(256) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_social_user"."id" IS '主键(自增策略)'; +COMMENT ON COLUMN "public"."system_social_user"."type" IS '社交平台的类型'; +COMMENT ON COLUMN "public"."system_social_user"."openid" IS '社交 openid'; +COMMENT ON COLUMN "public"."system_social_user"."token" IS '社交 token'; +COMMENT ON COLUMN "public"."system_social_user"."raw_token_info" IS '原始 Token 数据,一般是 JSON 格式'; +COMMENT ON COLUMN "public"."system_social_user"."nickname" IS '用户昵称'; +COMMENT ON COLUMN "public"."system_social_user"."avatar" IS '用户头像'; +COMMENT ON COLUMN "public"."system_social_user"."raw_user_info" IS '原始用户数据,一般是 JSON 格式'; +COMMENT ON COLUMN "public"."system_social_user"."code" IS '最后一次的认证 code'; +COMMENT ON COLUMN "public"."system_social_user"."state" IS '最后一次的认证 state'; +COMMENT ON COLUMN "public"."system_social_user"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_social_user"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_social_user"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_social_user"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_social_user"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_social_user"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_social_user" IS '社交用户表'; + +-- ---------------------------- +-- Records of system_social_user +-- ---------------------------- + +-- ---------------------------- +-- Table structure for system_social_user_bind +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_social_user_bind"; +CREATE TABLE "public"."system_social_user_bind" ( + "id" int8 NOT NULL, + "user_id" int8 NOT NULL, + "user_type" int2 NOT NULL, + "social_type" int2 NOT NULL, + "social_user_id" int8 NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_social_user_bind"."id" IS '主键(自增策略)'; +COMMENT ON COLUMN "public"."system_social_user_bind"."user_id" IS '用户编号'; +COMMENT ON COLUMN "public"."system_social_user_bind"."user_type" IS '用户类型'; +COMMENT ON COLUMN "public"."system_social_user_bind"."social_type" IS '社交平台的类型'; +COMMENT ON COLUMN "public"."system_social_user_bind"."social_user_id" IS '社交用户的编号'; +COMMENT ON COLUMN "public"."system_social_user_bind"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_social_user_bind"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_social_user_bind"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_social_user_bind"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_social_user_bind"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_social_user_bind"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_social_user_bind" IS '社交绑定表'; + +-- ---------------------------- +-- Records of system_social_user_bind +-- ---------------------------- + +-- ---------------------------- +-- Table structure for system_tenant +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_tenant"; +CREATE TABLE "public"."system_tenant" ( + "id" int8 NOT NULL, + "name" varchar(30) COLLATE "pg_catalog"."default" NOT NULL, + "contact_user_id" int8, + "contact_name" varchar(30) COLLATE "pg_catalog"."default" NOT NULL, + "contact_mobile" varchar(500) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "status" int2 NOT NULL DEFAULT 0, + "website" varchar(256) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "package_id" int8 NOT NULL, + "expire_time" timestamp(6) NOT NULL, + "account_count" int4 NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_tenant"."id" IS '租户编号'; +COMMENT ON COLUMN "public"."system_tenant"."name" IS '租户名'; +COMMENT ON COLUMN "public"."system_tenant"."contact_user_id" IS '联系人的用户编号'; +COMMENT ON COLUMN "public"."system_tenant"."contact_name" IS '联系人'; +COMMENT ON COLUMN "public"."system_tenant"."contact_mobile" IS '联系手机'; +COMMENT ON COLUMN "public"."system_tenant"."status" IS '租户状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."system_tenant"."website" IS '绑定域名'; +COMMENT ON COLUMN "public"."system_tenant"."package_id" IS '租户套餐编号'; +COMMENT ON COLUMN "public"."system_tenant"."expire_time" IS '过期时间'; +COMMENT ON COLUMN "public"."system_tenant"."account_count" IS '账号数量'; +COMMENT ON COLUMN "public"."system_tenant"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_tenant"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_tenant"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_tenant"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_tenant"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."system_tenant" IS '租户表'; + +-- ---------------------------- +-- Records of system_tenant +-- ---------------------------- +INSERT INTO "public"."system_tenant" VALUES (1, '闻荫源码', NULL, '闻荫', '12345678', 0, 'www.ccwin-in.com', 0, '2099-02-19 17:14:16', 9999, '1', '2021-01-05 17:03:47', '1', '2023-11-06 11:41:41', 0); + +-- ---------------------------- +-- Table structure for system_tenant_package +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_tenant_package"; +CREATE TABLE "public"."system_tenant_package" ( + "id" int8 NOT NULL, + "name" varchar(30) COLLATE "pg_catalog"."default" NOT NULL, + "status" int2 NOT NULL DEFAULT 0, + "remark" varchar(256) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "menu_ids" varchar(4096) COLLATE "pg_catalog"."default" NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_tenant_package"."id" IS '套餐编号'; +COMMENT ON COLUMN "public"."system_tenant_package"."name" IS '套餐名'; +COMMENT ON COLUMN "public"."system_tenant_package"."status" IS '租户状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."system_tenant_package"."remark" IS '备注'; +COMMENT ON COLUMN "public"."system_tenant_package"."menu_ids" IS '关联的菜单编号'; +COMMENT ON COLUMN "public"."system_tenant_package"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_tenant_package"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_tenant_package"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_tenant_package"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_tenant_package"."deleted" IS '是否删除'; +COMMENT ON TABLE "public"."system_tenant_package" IS '租户套餐表'; + +-- ---------------------------- +-- Records of system_tenant_package +-- ---------------------------- +INSERT INTO "public"."system_tenant_package" VALUES (111, '普通套餐', 0, '小功能', '[1,2,5,1031,1032,1033,1034,1035,1036,1037,1038,1039,1050,1051,1052,1053,1054,1056,1057,1058,1059,1060,1063,1064,1065,1066,1067,1070,1075,1076,1077,1078,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1118,1119,1120,100,101,102,103,106,107,110,111,112,113,1138,114,1139,115,1140,116,1141,1142,1143,2713,2714,2715,2716,2717,2718,2720,1185,2721,1186,2722,1187,2723,1188,2724,1189,2725,1190,2726,1191,2727,2472,1192,2728,1193,2729,1194,2730,1195,2731,1196,2732,1197,2733,2478,1198,2734,2479,1199,2735,2480,1200,2481,1201,2482,1202,2483,2484,2485,2486,2487,1207,2488,1208,2489,1209,2490,1210,2491,1211,2492,1212,2493,1213,2494,2495,1215,1216,2497,1217,1218,1219,1220,1221,1222,1224,1225,1226,1227,1228,1229,1237,1238,1239,1240,1241,1242,1243,2525,1255,1256,1001,1257,1002,1258,1003,1259,1004,1260,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020]', '1', '2022-02-22 00:54:00', '1', '2024-03-30 17:53:17', 0); + +-- ---------------------------- +-- Table structure for system_user_post +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_user_post"; +CREATE TABLE "public"."system_user_post" ( + "id" int8 NOT NULL, + "user_id" int8 NOT NULL DEFAULT 0, + "post_id" int8 NOT NULL DEFAULT 0, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_user_post"."id" IS 'id'; +COMMENT ON COLUMN "public"."system_user_post"."user_id" IS '用户ID'; +COMMENT ON COLUMN "public"."system_user_post"."post_id" IS '岗位ID'; +COMMENT ON COLUMN "public"."system_user_post"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_user_post"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_user_post"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_user_post"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_user_post"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_user_post"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_user_post" IS '用户岗位表'; + +-- ---------------------------- +-- Records of system_user_post +-- ---------------------------- +INSERT INTO "public"."system_user_post" VALUES (112, 1, 1, 'admin', '2022-05-02 07:25:24', 'admin', '2022-05-02 07:25:24', 0, 1); +INSERT INTO "public"."system_user_post" VALUES (113, 100, 1, 'admin', '2022-05-02 07:25:24', 'admin', '2022-05-02 07:25:24', 0, 1); +INSERT INTO "public"."system_user_post" VALUES (115, 104, 1, '1', '2022-05-16 19:36:28', '1', '2022-05-16 19:36:28', 0, 1); +INSERT INTO "public"."system_user_post" VALUES (116, 117, 2, '1', '2022-07-09 17:40:26', '1', '2022-07-09 17:40:26', 0, 1); +INSERT INTO "public"."system_user_post" VALUES (117, 118, 1, '1', '2022-07-09 17:44:44', '1', '2022-07-09 17:44:44', 0, 1); +INSERT INTO "public"."system_user_post" VALUES (119, 114, 5, '1', '2024-03-24 20:45:51', '1', '2024-03-24 20:45:51', 0, 1); +INSERT INTO "public"."system_user_post" VALUES (123, 115, 1, '1', '2024-04-04 09:37:14', '1', '2024-04-04 09:37:14', 0, 1); +INSERT INTO "public"."system_user_post" VALUES (124, 115, 2, '1', '2024-04-04 09:37:14', '1', '2024-04-04 09:37:14', 0, 1); + +-- ---------------------------- +-- Table structure for system_user_role +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_user_role"; +CREATE TABLE "public"."system_user_role" ( + "id" int8 NOT NULL, + "user_id" int8 NOT NULL, + "role_id" int8 NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_user_role"."id" IS '自增编号'; +COMMENT ON COLUMN "public"."system_user_role"."user_id" IS '用户ID'; +COMMENT ON COLUMN "public"."system_user_role"."role_id" IS '角色ID'; +COMMENT ON COLUMN "public"."system_user_role"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_user_role"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_user_role"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_user_role"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_user_role"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_user_role"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_user_role" IS '用户和角色关联表'; + +-- ---------------------------- +-- Records of system_user_role +-- ---------------------------- +INSERT INTO "public"."system_user_role" VALUES (1, 1, 1, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:17', 0, 1); +INSERT INTO "public"."system_user_role" VALUES (2, 2, 2, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:13', 0, 1); +INSERT INTO "public"."system_user_role" VALUES (4, 100, 101, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:13', 0, 1); +INSERT INTO "public"."system_user_role" VALUES (5, 100, 1, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:12', 0, 1); +INSERT INTO "public"."system_user_role" VALUES (6, 100, 2, '', '2022-01-11 13:19:45', '', '2022-05-12 12:35:11', 0, 1); +INSERT INTO "public"."system_user_role" VALUES (10, 103, 1, '1', '2022-01-11 13:19:45', '1', '2022-01-11 13:19:45', 0, 1); +INSERT INTO "public"."system_user_role" VALUES (14, 110, 109, '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', 0, 121); +INSERT INTO "public"."system_user_role" VALUES (15, 111, 110, '110', '2022-02-23 13:14:38', '110', '2022-02-23 13:14:38', 0, 121); +INSERT INTO "public"."system_user_role" VALUES (16, 113, 111, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', 0, 122); +INSERT INTO "public"."system_user_role" VALUES (18, 1, 2, '1', '2022-05-12 20:39:29', '1', '2022-05-12 20:39:29', 0, 1); +INSERT INTO "public"."system_user_role" VALUES (20, 104, 101, '1', '2022-05-28 15:43:57', '1', '2022-05-28 15:43:57', 0, 1); +INSERT INTO "public"."system_user_role" VALUES (22, 115, 2, '1', '2022-07-21 22:08:30', '1', '2022-07-21 22:08:30', 0, 1); +INSERT INTO "public"."system_user_role" VALUES (35, 112, 1, '1', '2024-03-15 20:00:24', '1', '2024-03-15 20:00:24', 0, 1); +INSERT INTO "public"."system_user_role" VALUES (36, 118, 1, '1', '2024-03-17 09:12:08', '1', '2024-03-17 09:12:08', 0, 1); +INSERT INTO "public"."system_user_role" VALUES (38, 114, 101, '1', '2024-03-24 22:23:03', '1', '2024-03-24 22:23:03', 0, 1); + +-- ---------------------------- +-- Table structure for system_users +-- ---------------------------- +DROP TABLE IF EXISTS "public"."system_users"; +CREATE TABLE "public"."system_users" ( + "id" int8 NOT NULL, + "username" varchar(30) COLLATE "pg_catalog"."default" NOT NULL, + "password" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "nickname" varchar(30) COLLATE "pg_catalog"."default" NOT NULL, + "remark" varchar(500) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "dept_id" int8, + "post_ids" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "email" varchar(50) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "mobile" varchar(11) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "sex" int2 DEFAULT 0, + "avatar" varchar(512) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "status" int2 NOT NULL DEFAULT 0, + "login_ip" varchar(50) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "login_date" timestamp(6), + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."system_users"."id" IS '用户ID'; +COMMENT ON COLUMN "public"."system_users"."username" IS '用户账号'; +COMMENT ON COLUMN "public"."system_users"."password" IS '密码'; +COMMENT ON COLUMN "public"."system_users"."nickname" IS '用户昵称'; +COMMENT ON COLUMN "public"."system_users"."remark" IS '备注'; +COMMENT ON COLUMN "public"."system_users"."dept_id" IS '部门ID'; +COMMENT ON COLUMN "public"."system_users"."post_ids" IS '岗位编号数组'; +COMMENT ON COLUMN "public"."system_users"."email" IS '用户邮箱'; +COMMENT ON COLUMN "public"."system_users"."mobile" IS '手机号码'; +COMMENT ON COLUMN "public"."system_users"."sex" IS '用户性别'; +COMMENT ON COLUMN "public"."system_users"."avatar" IS '头像地址'; +COMMENT ON COLUMN "public"."system_users"."status" IS '帐号状态(0正常 1停用)'; +COMMENT ON COLUMN "public"."system_users"."login_ip" IS '最后登录IP'; +COMMENT ON COLUMN "public"."system_users"."login_date" IS '最后登录时间'; +COMMENT ON COLUMN "public"."system_users"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."system_users"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."system_users"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."system_users"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."system_users"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."system_users"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."system_users" IS '用户信息表'; + +-- ---------------------------- +-- Records of system_users +-- ---------------------------- +INSERT INTO "public"."system_users" VALUES (100, 'win', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', 104, '[1]', 'win@iocoder.cn', '15601691300', 1, '', 1, '127.0.0.1', '2022-07-09 23:03:33', '', '2021-01-07 09:07:17', NULL, '2022-07-09 23:03:33', 0, 1); +INSERT INTO "public"."system_users" VALUES (103, 'yuanma', '$2a$10$YMpimV4T6BtDhIaA8jSW.u8UTGBeGhc/qwXP4oxoMr4mOw9.qttt6', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '0:0:0:0:0:0:0:1', '2024-03-18 21:09:04', '', '2021-01-13 23:50:35', NULL, '2024-03-18 21:09:04', 0, 1); +INSERT INTO "public"."system_users" VALUES (104, 'test', '$2a$04$KhExCYl7lx6eWWZYKsibKOZ8IBJRyuNuCcEOLQ11RYhJKgHmlSwK.', '测试号', NULL, 107, '[1,2]', '111@qq.com', '15601691200', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-26 07:11:35', '', '2021-01-21 02:13:53', NULL, '2024-03-26 07:11:35', 0, 1); +INSERT INTO "public"."system_users" VALUES (107, 'admin107', '$2a$10$dYOOBKMO93v/.ReCqzyFg.o67Tqk.bbc2bhrpyBGkIw9aypCtr2pm', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 22:59:33', '1', '2022-02-27 08:26:51', 0, 118); +INSERT INTO "public"."system_users" VALUES (108, 'admin108', '$2a$10$y6mfvKoNYL1GXWak8nYwVOH.kCWqjactkzdoIDgiKl93WN3Ejg.Lu', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:00:50', '1', '2022-02-27 08:26:53', 0, 119); +INSERT INTO "public"."system_users" VALUES (109, 'admin109', '$2a$10$JAqvH0tEc0I7dfDVBI7zyuB4E3j.uH6daIjV53.vUS6PknFkDJkuK', '芋艿', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '', NULL, '1', '2022-02-20 23:11:50', '1', '2022-02-27 08:26:56', 0, 120); +INSERT INTO "public"."system_users" VALUES (110, 'admin110', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '小王', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-09-25 22:47:33', '1', '2022-02-22 00:56:14', NULL, '2022-09-25 22:47:33', 0, 121); +INSERT INTO "public"."system_users" VALUES (111, 'test', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '测试用户', NULL, NULL, '[]', '', '', 0, '', 0, '0:0:0:0:0:0:0:1', '2023-12-30 11:42:17', '110', '2022-02-23 13:14:33', NULL, '2023-12-30 11:42:17', 0, 121); +INSERT INTO "public"."system_users" VALUES (112, 'newobject', '$2a$04$dB0z8Q819fJWz0hbaLe6B.VfHCjYgWx6LFfET5lyz3JwcqlyCkQ4C', '新对象', NULL, 100, '[]', '', '15601691235', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-16 23:11:38', '1', '2022-02-23 19:08:03', NULL, '2024-03-16 23:11:38', 0, 1); +INSERT INTO "public"."system_users" VALUES (113, 'aoteman', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-03-19 18:38:51', '1', '2022-03-07 21:37:58', NULL, '2022-03-19 18:38:51', 0, 122); +INSERT INTO "public"."system_users" VALUES (114, 'hrmgr', '$2a$10$TR4eybBioGRhBmDBWkqWLO6NIh3mzYa8KBKDDB5woiGYFVlRAi.fu', 'hr 小姐姐', NULL, NULL, '[5]', '', '15601691236', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-24 22:21:05', '1', '2022-03-19 21:50:58', NULL, '2024-03-24 22:21:05', 0, 1); +INSERT INTO "public"."system_users" VALUES (115, 'aotemane', '$2a$04$GcyP0Vyzb2F2Yni5PuIK9ueGxM0tkZGMtDwVRwrNbtMvorzbpNsV2', '阿呆', '11222', 102, '[1,2]', '7648@qq.com', '15601691229', 2, '', 0, '', NULL, '1', '2022-04-30 02:55:43', '1', '2024-04-04 09:37:14', 0, 1); +INSERT INTO "public"."system_users" VALUES (117, 'admin123', '$2a$10$WI8Gg/lpZQIrOEZMHqka7OdFaD4Nx.B/qY8ZGTTUKrOJwaHFqibaC', '测试号', '1111', 100, '[2]', '', '15601691234', 1, '', 0, '', NULL, '1', '2022-07-09 17:40:26', '1', '2022-07-09 17:40:26', 0, 1); +INSERT INTO "public"."system_users" VALUES (118, 'goudan', '$2a$04$OB1SuphCdiLVRpiYRKeqH.8NYS7UIp5vmIv1W7U4w6toiFeOAATVK', '狗蛋', NULL, 103, '[1]', '', '15601691239', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-03-17 09:10:27', '1', '2022-07-09 17:44:43', '1', '2024-04-04 09:48:05', 0, 1); +INSERT INTO "public"."system_users" VALUES (131, 'hh', '$2a$04$jyH9h6.gaw8mpOjPfHIpx.8as2Rzfcmdlj5rlJFwgCw4rsv/MTb2K', '呵呵', NULL, 100, '[]', '777@qq.com', '15601882312', 1, '', 0, '', NULL, '1', '2024-04-27 08:45:56', '1', '2024-04-27 08:45:56', 0, 1); +INSERT INTO "public"."system_users" VALUES (1, 'admin', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '18818260277', 2, 'http://test.win.iocoder.cn/96c787a2ce88bf6d0ce3cd8b6cf5314e80e7703cd41bf4af8cd2e2909dbd6b6d.png', 0, '0:0:0:0:0:0:0:1', '2024-08-06 15:16:16.451443', 'admin', '2021-01-05 17:03:47', NULL, '2024-08-06 15:16:16.458437', 0, 1); + +-- ---------------------------- +-- Table structure for win_demo01_contact +-- ---------------------------- +DROP TABLE IF EXISTS "public"."win_demo01_contact"; +CREATE TABLE "public"."win_demo01_contact" ( + "id" int8 NOT NULL, + "name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "sex" int2 NOT NULL, + "birthday" timestamp(6) NOT NULL, + "description" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "avatar" varchar(512) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."win_demo01_contact"."id" IS '编号'; +COMMENT ON COLUMN "public"."win_demo01_contact"."name" IS '名字'; +COMMENT ON COLUMN "public"."win_demo01_contact"."sex" IS '性别'; +COMMENT ON COLUMN "public"."win_demo01_contact"."birthday" IS '出生年'; +COMMENT ON COLUMN "public"."win_demo01_contact"."description" IS '简介'; +COMMENT ON COLUMN "public"."win_demo01_contact"."avatar" IS '头像'; +COMMENT ON COLUMN "public"."win_demo01_contact"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."win_demo01_contact"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."win_demo01_contact"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."win_demo01_contact"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."win_demo01_contact"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."win_demo01_contact"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."win_demo01_contact" IS '示例联系人表'; + +-- ---------------------------- +-- Records of win_demo01_contact +-- ---------------------------- +INSERT INTO "public"."win_demo01_contact" VALUES (1, '土豆', 2, '2023-11-07 00:00:00', '

    天蚕土豆!呀

    ', 'http://127.0.0.1:48080/admin-api/infra/file/4/get/46f8fa1a37db3f3960d8910ff2fe3962ab3b2db87cf2f8ccb4dc8145b8bdf237.jpeg', '1', '2023-11-15 23:34:30', '1', '2023-11-15 23:47:39', 0, 1); + +-- ---------------------------- +-- Table structure for win_demo02_category +-- ---------------------------- +DROP TABLE IF EXISTS "public"."win_demo02_category"; +CREATE TABLE "public"."win_demo02_category" ( + "id" int8 NOT NULL, + "name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "parent_id" int8 NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."win_demo02_category"."id" IS '编号'; +COMMENT ON COLUMN "public"."win_demo02_category"."name" IS '名字'; +COMMENT ON COLUMN "public"."win_demo02_category"."parent_id" IS '父级编号'; +COMMENT ON COLUMN "public"."win_demo02_category"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."win_demo02_category"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."win_demo02_category"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."win_demo02_category"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."win_demo02_category"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."win_demo02_category"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."win_demo02_category" IS '示例分类表'; + +-- ---------------------------- +-- Records of win_demo02_category +-- ---------------------------- +INSERT INTO "public"."win_demo02_category" VALUES (1, '土豆', 0, '1', '2023-11-15 23:34:30', '1', '2023-11-16 20:24:23', 0, 1); +INSERT INTO "public"."win_demo02_category" VALUES (2, '番茄', 0, '1', '2023-11-16 20:24:00', '1', '2023-11-16 20:24:15', 0, 1); +INSERT INTO "public"."win_demo02_category" VALUES (3, '怪怪', 0, '1', '2023-11-16 20:24:32', '1', '2023-11-16 20:24:32', 0, 1); +INSERT INTO "public"."win_demo02_category" VALUES (4, '小番茄', 2, '1', '2023-11-16 20:24:39', '1', '2023-11-16 20:24:39', 0, 1); +INSERT INTO "public"."win_demo02_category" VALUES (5, '大番茄', 2, '1', '2023-11-16 20:24:46', '1', '2023-11-16 20:24:46', 0, 1); +INSERT INTO "public"."win_demo02_category" VALUES (6, '11', 3, '1', '2023-11-24 19:29:34', '1', '2023-11-24 19:29:34', 0, 1); + +-- ---------------------------- +-- Table structure for win_demo03_course +-- ---------------------------- +DROP TABLE IF EXISTS "public"."win_demo03_course"; +CREATE TABLE "public"."win_demo03_course" ( + "id" int8 NOT NULL, + "student_id" int8 NOT NULL, + "name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "score" int2 NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."win_demo03_course"."id" IS '编号'; +COMMENT ON COLUMN "public"."win_demo03_course"."student_id" IS '学生编号'; +COMMENT ON COLUMN "public"."win_demo03_course"."name" IS '名字'; +COMMENT ON COLUMN "public"."win_demo03_course"."score" IS '分数'; +COMMENT ON COLUMN "public"."win_demo03_course"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."win_demo03_course"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."win_demo03_course"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."win_demo03_course"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."win_demo03_course"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."win_demo03_course"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."win_demo03_course" IS '学生课程表'; + +-- ---------------------------- +-- Records of win_demo03_course +-- ---------------------------- +INSERT INTO "public"."win_demo03_course" VALUES (2, 2, '语文', 66, '1', '2023-11-16 23:21:49', '1', '2023-11-16 23:21:49', 0, 1); +INSERT INTO "public"."win_demo03_course" VALUES (3, 2, '数学', 22, '1', '2023-11-16 23:21:49', '1', '2023-11-16 23:21:49', 0, 1); +INSERT INTO "public"."win_demo03_course" VALUES (6, 5, '体育', 23, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:44:40', 1, 1); +INSERT INTO "public"."win_demo03_course" VALUES (7, 5, '计算机', 11, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:44:40', 1, 1); +INSERT INTO "public"."win_demo03_course" VALUES (8, 5, '体育', 23, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:47:09', 1, 1); +INSERT INTO "public"."win_demo03_course" VALUES (9, 5, '计算机', 11, '1', '2023-11-16 23:22:46', '1', '2023-11-16 15:47:09', 1, 1); +INSERT INTO "public"."win_demo03_course" VALUES (10, 5, '体育', 23, '1', '2023-11-16 23:22:46', '1', '2023-11-16 23:47:10', 0, 1); +INSERT INTO "public"."win_demo03_course" VALUES (11, 5, '计算机', 11, '1', '2023-11-16 23:22:46', '1', '2023-11-16 23:47:10', 0, 1); +INSERT INTO "public"."win_demo03_course" VALUES (12, 2, '电脑', 33, '1', '2023-11-17 00:20:42', '1', '2023-11-16 16:20:45', 1, 1); +INSERT INTO "public"."win_demo03_course" VALUES (13, 9, '滑雪', 12, '1', '2023-11-17 13:13:20', '1', '2023-11-17 13:13:20', 0, 1); + +-- ---------------------------- +-- Table structure for win_demo03_grade +-- ---------------------------- +DROP TABLE IF EXISTS "public"."win_demo03_grade"; +CREATE TABLE "public"."win_demo03_grade" ( + "id" int8 NOT NULL, + "student_id" int8 NOT NULL, + "name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "teacher" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."win_demo03_grade"."id" IS '编号'; +COMMENT ON COLUMN "public"."win_demo03_grade"."student_id" IS '学生编号'; +COMMENT ON COLUMN "public"."win_demo03_grade"."name" IS '名字'; +COMMENT ON COLUMN "public"."win_demo03_grade"."teacher" IS '班主任'; +COMMENT ON COLUMN "public"."win_demo03_grade"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."win_demo03_grade"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."win_demo03_grade"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."win_demo03_grade"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."win_demo03_grade"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."win_demo03_grade"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."win_demo03_grade" IS '学生班级表'; + +-- ---------------------------- +-- Records of win_demo03_grade +-- ---------------------------- +INSERT INTO "public"."win_demo03_grade" VALUES (7, 2, '三年 2 班', '周杰伦', '1', '2023-11-16 23:21:49', '1', '2023-11-16 23:21:49', 0, 1); +INSERT INTO "public"."win_demo03_grade" VALUES (8, 5, '华为', '遥遥领先', '1', '2023-11-16 23:22:46', '1', '2023-11-16 23:47:10', 0, 1); +INSERT INTO "public"."win_demo03_grade" VALUES (9, 9, '小图', '小娃111', '1', '2023-11-17 13:10:23', '1', '2023-11-17 13:10:23', 0, 1); + +-- ---------------------------- +-- Table structure for win_demo03_student +-- ---------------------------- +DROP TABLE IF EXISTS "public"."win_demo03_student"; +CREATE TABLE "public"."win_demo03_student" ( + "id" int8 NOT NULL, + "name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "sex" int2 NOT NULL, + "birthday" timestamp(6) NOT NULL, + "description" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "creator" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, + "update_time" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" int2 NOT NULL DEFAULT 0, + "tenant_id" int8 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."win_demo03_student"."id" IS '编号'; +COMMENT ON COLUMN "public"."win_demo03_student"."name" IS '名字'; +COMMENT ON COLUMN "public"."win_demo03_student"."sex" IS '性别'; +COMMENT ON COLUMN "public"."win_demo03_student"."birthday" IS '出生日期'; +COMMENT ON COLUMN "public"."win_demo03_student"."description" IS '简介'; +COMMENT ON COLUMN "public"."win_demo03_student"."creator" IS '创建者'; +COMMENT ON COLUMN "public"."win_demo03_student"."create_time" IS '创建时间'; +COMMENT ON COLUMN "public"."win_demo03_student"."updater" IS '更新者'; +COMMENT ON COLUMN "public"."win_demo03_student"."update_time" IS '更新时间'; +COMMENT ON COLUMN "public"."win_demo03_student"."deleted" IS '是否删除'; +COMMENT ON COLUMN "public"."win_demo03_student"."tenant_id" IS '租户编号'; +COMMENT ON TABLE "public"."win_demo03_student" IS '学生表'; + +-- ---------------------------- +-- Records of win_demo03_student +-- ---------------------------- +INSERT INTO "public"."win_demo03_student" VALUES (2, '小白', 1, '2023-11-16 00:00:00', '

    厉害

    ', '1', '2023-11-16 23:21:49', '1', '2023-11-17 16:49:06', 0, 1); +INSERT INTO "public"."win_demo03_student" VALUES (5, '大黑', 2, '2023-11-13 00:00:00', '

    你在教我做事?

    ', '1', '2023-11-16 23:22:46', '1', '2023-11-17 16:49:07', 0, 1); +INSERT INTO "public"."win_demo03_student" VALUES (9, '小花', 1, '2023-11-07 00:00:00', '

    哈哈哈

    ', '1', '2023-11-17 00:04:47', '1', '2023-11-17 16:49:08', 0, 1); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."infra_api_access_log_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."infra_api_error_log_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."infra_codegen_column_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."infra_codegen_table_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."infra_config_seq"', 14, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."infra_data_source_config_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."infra_file_config_seq"', 24, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."infra_file_content_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."infra_file_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."infra_job_log_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."infra_job_seq"', 29, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_dept_seq"', 115, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_dict_data_seq"', 1538, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_dict_type_seq"', 621, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_login_log_seq"', 2, true); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_mail_account_seq"', 6, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_mail_log_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_mail_template_seq"', 17, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_menu_seq"', 2759, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_notice_seq"', 6, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_notify_message_seq"', 12, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_notify_template_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_oauth2_access_token_seq"', 5, true); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_oauth2_approve_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_oauth2_client_seq"', 44, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_oauth2_code_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_oauth2_refresh_token_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_operate_log_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_post_seq"', 7, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_role_menu_seq"', 5780, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_role_seq"', 113, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_sms_channel_seq"', 8, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_sms_code_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_sms_log_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_sms_template_seq"', 18, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_social_client_seq"', 45, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_social_user_bind_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_social_user_seq"', 2, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_tenant_package_seq"', 113, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_tenant_seq"', 124, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_user_post_seq"', 126, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_user_role_seq"', 40, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."system_users_seq"', 133, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."win_demo01_contact_seq"', 3, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."win_demo02_category_seq"', 8, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."win_demo03_course_seq"', 15, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."win_demo03_grade_seq"', 11, false); + +-- ---------------------------- +-- Alter sequences owned by +-- ---------------------------- +SELECT setval('"public"."win_demo03_student_seq"', 11, false); + +-- ---------------------------- +-- Indexes structure for table infra_api_access_log +-- ---------------------------- +CREATE INDEX "idx_infra_api_access_log_01" ON "public"."infra_api_access_log" USING btree ( + "create_time" "pg_catalog"."timestamp_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table infra_api_access_log +-- ---------------------------- +ALTER TABLE "public"."infra_api_access_log" ADD CONSTRAINT "pk_infra_api_access_log" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table infra_api_error_log +-- ---------------------------- +ALTER TABLE "public"."infra_api_error_log" ADD CONSTRAINT "pk_infra_api_error_log" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table infra_codegen_column +-- ---------------------------- +ALTER TABLE "public"."infra_codegen_column" ADD CONSTRAINT "pk_infra_codegen_column" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table infra_codegen_table +-- ---------------------------- +ALTER TABLE "public"."infra_codegen_table" ADD CONSTRAINT "pk_infra_codegen_table" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table infra_config +-- ---------------------------- +ALTER TABLE "public"."infra_config" ADD CONSTRAINT "pk_infra_config" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table infra_data_source_config +-- ---------------------------- +ALTER TABLE "public"."infra_data_source_config" ADD CONSTRAINT "pk_infra_data_source_config" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table infra_file +-- ---------------------------- +ALTER TABLE "public"."infra_file" ADD CONSTRAINT "pk_infra_file" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table infra_file_config +-- ---------------------------- +ALTER TABLE "public"."infra_file_config" ADD CONSTRAINT "pk_infra_file_config" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table infra_file_content +-- ---------------------------- +ALTER TABLE "public"."infra_file_content" ADD CONSTRAINT "pk_infra_file_content" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table infra_job +-- ---------------------------- +ALTER TABLE "public"."infra_job" ADD CONSTRAINT "pk_infra_job" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table infra_job_log +-- ---------------------------- +ALTER TABLE "public"."infra_job_log" ADD CONSTRAINT "pk_infra_job_log" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table qrtz_blob_triggers +-- ---------------------------- +ALTER TABLE "public"."qrtz_blob_triggers" ADD CONSTRAINT "qrtz_blob_triggers_pkey" PRIMARY KEY ("sched_name", "trigger_name", "trigger_group"); + +-- ---------------------------- +-- Primary Key structure for table qrtz_calendars +-- ---------------------------- +ALTER TABLE "public"."qrtz_calendars" ADD CONSTRAINT "qrtz_calendars_pkey" PRIMARY KEY ("sched_name", "calendar_name"); + +-- ---------------------------- +-- Primary Key structure for table qrtz_cron_triggers +-- ---------------------------- +ALTER TABLE "public"."qrtz_cron_triggers" ADD CONSTRAINT "qrtz_cron_triggers_pkey" PRIMARY KEY ("sched_name", "trigger_name", "trigger_group"); + +-- ---------------------------- +-- Indexes structure for table qrtz_fired_triggers +-- ---------------------------- +CREATE INDEX "idx_qrtz_ft_inst_job_req_rcvry" ON "public"."qrtz_fired_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "instance_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "requests_recovery" "pg_catalog"."bool_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_ft_j_g" ON "public"."qrtz_fired_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "job_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "job_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_ft_jg" ON "public"."qrtz_fired_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "job_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_ft_t_g" ON "public"."qrtz_fired_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "trigger_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "trigger_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_ft_tg" ON "public"."qrtz_fired_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "trigger_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_ft_trig_inst_name" ON "public"."qrtz_fired_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "instance_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table qrtz_fired_triggers +-- ---------------------------- +ALTER TABLE "public"."qrtz_fired_triggers" ADD CONSTRAINT "qrtz_fired_triggers_pkey" PRIMARY KEY ("sched_name", "entry_id"); + +-- ---------------------------- +-- Indexes structure for table qrtz_job_details +-- ---------------------------- +CREATE INDEX "idx_qrtz_j_grp" ON "public"."qrtz_job_details" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "job_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_j_req_recovery" ON "public"."qrtz_job_details" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "requests_recovery" "pg_catalog"."bool_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table qrtz_job_details +-- ---------------------------- +ALTER TABLE "public"."qrtz_job_details" ADD CONSTRAINT "qrtz_job_details_pkey" PRIMARY KEY ("sched_name", "job_name", "job_group"); + +-- ---------------------------- +-- Primary Key structure for table qrtz_locks +-- ---------------------------- +ALTER TABLE "public"."qrtz_locks" ADD CONSTRAINT "qrtz_locks_pkey" PRIMARY KEY ("sched_name", "lock_name"); + +-- ---------------------------- +-- Primary Key structure for table qrtz_paused_trigger_grps +-- ---------------------------- +ALTER TABLE "public"."qrtz_paused_trigger_grps" ADD CONSTRAINT "qrtz_paused_trigger_grps_pkey" PRIMARY KEY ("sched_name", "trigger_group"); + +-- ---------------------------- +-- Primary Key structure for table qrtz_scheduler_state +-- ---------------------------- +ALTER TABLE "public"."qrtz_scheduler_state" ADD CONSTRAINT "qrtz_scheduler_state_pkey" PRIMARY KEY ("sched_name", "instance_name"); + +-- ---------------------------- +-- Primary Key structure for table qrtz_simple_triggers +-- ---------------------------- +ALTER TABLE "public"."qrtz_simple_triggers" ADD CONSTRAINT "qrtz_simple_triggers_pkey" PRIMARY KEY ("sched_name", "trigger_name", "trigger_group"); + +-- ---------------------------- +-- Primary Key structure for table qrtz_simprop_triggers +-- ---------------------------- +ALTER TABLE "public"."qrtz_simprop_triggers" ADD CONSTRAINT "qrtz_simprop_triggers_pkey" PRIMARY KEY ("sched_name", "trigger_name", "trigger_group"); + +-- ---------------------------- +-- Indexes structure for table qrtz_triggers +-- ---------------------------- +CREATE INDEX "idx_qrtz_t_c" ON "public"."qrtz_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "calendar_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_t_g" ON "public"."qrtz_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "trigger_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_t_j" ON "public"."qrtz_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "job_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "job_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_t_jg" ON "public"."qrtz_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "job_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_t_n_g_state" ON "public"."qrtz_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "trigger_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "trigger_state" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_t_n_state" ON "public"."qrtz_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "trigger_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "trigger_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "trigger_state" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_t_next_fire_time" ON "public"."qrtz_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "next_fire_time" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_t_nft_misfire" ON "public"."qrtz_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "misfire_instr" "pg_catalog"."int2_ops" ASC NULLS LAST, + "next_fire_time" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_t_nft_st" ON "public"."qrtz_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "trigger_state" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "next_fire_time" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_t_nft_st_misfire" ON "public"."qrtz_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "misfire_instr" "pg_catalog"."int2_ops" ASC NULLS LAST, + "next_fire_time" "pg_catalog"."int8_ops" ASC NULLS LAST, + "trigger_state" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_t_nft_st_misfire_grp" ON "public"."qrtz_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "misfire_instr" "pg_catalog"."int2_ops" ASC NULLS LAST, + "next_fire_time" "pg_catalog"."int8_ops" ASC NULLS LAST, + "trigger_group" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "trigger_state" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "idx_qrtz_t_state" ON "public"."qrtz_triggers" USING btree ( + "sched_name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, + "trigger_state" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table qrtz_triggers +-- ---------------------------- +ALTER TABLE "public"."qrtz_triggers" ADD CONSTRAINT "qrtz_triggers_pkey" PRIMARY KEY ("sched_name", "trigger_name", "trigger_group"); + +-- ---------------------------- +-- Primary Key structure for table system_dept +-- ---------------------------- +ALTER TABLE "public"."system_dept" ADD CONSTRAINT "pk_system_dept" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_dict_data +-- ---------------------------- +ALTER TABLE "public"."system_dict_data" ADD CONSTRAINT "pk_system_dict_data" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_dict_type +-- ---------------------------- +ALTER TABLE "public"."system_dict_type" ADD CONSTRAINT "pk_system_dict_type" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_login_log +-- ---------------------------- +ALTER TABLE "public"."system_login_log" ADD CONSTRAINT "pk_system_login_log" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_mail_account +-- ---------------------------- +ALTER TABLE "public"."system_mail_account" ADD CONSTRAINT "pk_system_mail_account" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_mail_log +-- ---------------------------- +ALTER TABLE "public"."system_mail_log" ADD CONSTRAINT "pk_system_mail_log" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_mail_template +-- ---------------------------- +ALTER TABLE "public"."system_mail_template" ADD CONSTRAINT "pk_system_mail_template" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_menu +-- ---------------------------- +ALTER TABLE "public"."system_menu" ADD CONSTRAINT "pk_system_menu" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_notice +-- ---------------------------- +ALTER TABLE "public"."system_notice" ADD CONSTRAINT "pk_system_notice" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_notify_message +-- ---------------------------- +ALTER TABLE "public"."system_notify_message" ADD CONSTRAINT "pk_system_notify_message" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_notify_template +-- ---------------------------- +ALTER TABLE "public"."system_notify_template" ADD CONSTRAINT "pk_system_notify_template" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Indexes structure for table system_oauth2_access_token +-- ---------------------------- +CREATE INDEX "idx_system_oauth2_access_token_01" ON "public"."system_oauth2_access_token" USING btree ( + "access_token" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "idx_system_oauth2_access_token_02" ON "public"."system_oauth2_access_token" USING btree ( + "refresh_token" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table system_oauth2_access_token +-- ---------------------------- +ALTER TABLE "public"."system_oauth2_access_token" ADD CONSTRAINT "pk_system_oauth2_access_token" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_oauth2_approve +-- ---------------------------- +ALTER TABLE "public"."system_oauth2_approve" ADD CONSTRAINT "pk_system_oauth2_approve" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_oauth2_client +-- ---------------------------- +ALTER TABLE "public"."system_oauth2_client" ADD CONSTRAINT "pk_system_oauth2_client" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_oauth2_code +-- ---------------------------- +ALTER TABLE "public"."system_oauth2_code" ADD CONSTRAINT "pk_system_oauth2_code" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_oauth2_refresh_token +-- ---------------------------- +ALTER TABLE "public"."system_oauth2_refresh_token" ADD CONSTRAINT "pk_system_oauth2_refresh_token" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_operate_log +-- ---------------------------- +ALTER TABLE "public"."system_operate_log" ADD CONSTRAINT "pk_system_operate_log" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_post +-- ---------------------------- +ALTER TABLE "public"."system_post" ADD CONSTRAINT "pk_system_post" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_role +-- ---------------------------- +ALTER TABLE "public"."system_role" ADD CONSTRAINT "pk_system_role" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_role_menu +-- ---------------------------- +ALTER TABLE "public"."system_role_menu" ADD CONSTRAINT "pk_system_role_menu" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_sms_channel +-- ---------------------------- +ALTER TABLE "public"."system_sms_channel" ADD CONSTRAINT "pk_system_sms_channel" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Indexes structure for table system_sms_code +-- ---------------------------- +CREATE INDEX "idx_system_sms_code_01" ON "public"."system_sms_code" USING btree ( + "mobile" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table system_sms_code +-- ---------------------------- +ALTER TABLE "public"."system_sms_code" ADD CONSTRAINT "pk_system_sms_code" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_sms_log +-- ---------------------------- +ALTER TABLE "public"."system_sms_log" ADD CONSTRAINT "pk_system_sms_log" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_sms_template +-- ---------------------------- +ALTER TABLE "public"."system_sms_template" ADD CONSTRAINT "pk_system_sms_template" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_social_client +-- ---------------------------- +ALTER TABLE "public"."system_social_client" ADD CONSTRAINT "pk_system_social_client" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_social_user +-- ---------------------------- +ALTER TABLE "public"."system_social_user" ADD CONSTRAINT "pk_system_social_user" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_social_user_bind +-- ---------------------------- +ALTER TABLE "public"."system_social_user_bind" ADD CONSTRAINT "pk_system_social_user_bind" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_tenant +-- ---------------------------- +ALTER TABLE "public"."system_tenant" ADD CONSTRAINT "pk_system_tenant" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_tenant_package +-- ---------------------------- +ALTER TABLE "public"."system_tenant_package" ADD CONSTRAINT "pk_system_tenant_package" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_user_post +-- ---------------------------- +ALTER TABLE "public"."system_user_post" ADD CONSTRAINT "pk_system_user_post" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_user_role +-- ---------------------------- +ALTER TABLE "public"."system_user_role" ADD CONSTRAINT "pk_system_user_role" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table system_users +-- ---------------------------- +ALTER TABLE "public"."system_users" ADD CONSTRAINT "pk_system_users" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table win_demo01_contact +-- ---------------------------- +ALTER TABLE "public"."win_demo01_contact" ADD CONSTRAINT "pk_win_demo01_contact" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table win_demo02_category +-- ---------------------------- +ALTER TABLE "public"."win_demo02_category" ADD CONSTRAINT "pk_win_demo02_category" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table win_demo03_course +-- ---------------------------- +ALTER TABLE "public"."win_demo03_course" ADD CONSTRAINT "pk_win_demo03_course" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table win_demo03_grade +-- ---------------------------- +ALTER TABLE "public"."win_demo03_grade" ADD CONSTRAINT "pk_win_demo03_grade" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Primary Key structure for table win_demo03_student +-- ---------------------------- +ALTER TABLE "public"."win_demo03_student" ADD CONSTRAINT "pk_win_demo03_student" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Foreign Keys structure for table qrtz_blob_triggers +-- ---------------------------- +ALTER TABLE "public"."qrtz_blob_triggers" ADD CONSTRAINT "qrtz_blob_triggers_sched_name_trigger_name_trigger_group_fkey" FOREIGN KEY ("sched_name", "trigger_name", "trigger_group") REFERENCES "public"."qrtz_triggers" ("sched_name", "trigger_name", "trigger_group") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- ---------------------------- +-- Foreign Keys structure for table qrtz_cron_triggers +-- ---------------------------- +ALTER TABLE "public"."qrtz_cron_triggers" ADD CONSTRAINT "qrtz_cron_triggers_sched_name_trigger_name_trigger_group_fkey" FOREIGN KEY ("sched_name", "trigger_name", "trigger_group") REFERENCES "public"."qrtz_triggers" ("sched_name", "trigger_name", "trigger_group") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- ---------------------------- +-- Foreign Keys structure for table qrtz_simple_triggers +-- ---------------------------- +ALTER TABLE "public"."qrtz_simple_triggers" ADD CONSTRAINT "qrtz_simple_triggers_sched_name_trigger_name_trigger_group_fkey" FOREIGN KEY ("sched_name", "trigger_name", "trigger_group") REFERENCES "public"."qrtz_triggers" ("sched_name", "trigger_name", "trigger_group") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- ---------------------------- +-- Foreign Keys structure for table qrtz_simprop_triggers +-- ---------------------------- +ALTER TABLE "public"."qrtz_simprop_triggers" ADD CONSTRAINT "qrtz_simprop_triggers_sched_name_trigger_name_trigger_grou_fkey" FOREIGN KEY ("sched_name", "trigger_name", "trigger_group") REFERENCES "public"."qrtz_triggers" ("sched_name", "trigger_name", "trigger_group") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- ---------------------------- +-- Foreign Keys structure for table qrtz_triggers +-- ---------------------------- +ALTER TABLE "public"."qrtz_triggers" ADD CONSTRAINT "qrtz_triggers_sched_name_job_name_job_group_fkey" FOREIGN KEY ("sched_name", "job_name", "job_group") REFERENCES "public"."qrtz_job_details" ("sched_name", "job_name", "job_group") ON DELETE NO ACTION ON UPDATE NO ACTION; diff --git a/sql/sqlserver/ruoyi-vue-pro.sql b/sql/sqlserver/ruoyi-vue-pro.sql new file mode 100644 index 0000000..abbe141 --- /dev/null +++ b/sql/sqlserver/ruoyi-vue-pro.sql @@ -0,0 +1,11255 @@ +/* + Win Database Transfer Tool + + Source Server Type : MySQL + + Target Server Type : Microsoft SQL Server + + Date: 2024-05-03 23:36:38 +*/ + + +-- ---------------------------- +-- Table structure for dual +-- ---------------------------- +DROP TABLE IF EXISTS dual +GO + +CREATE TABLE dual +( + id int NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'数据库连接的表', + 'SCHEMA', N'dbo', + 'TABLE', N'dual' +GO + + +-- ---------------------------- +-- Table structure for infra_api_access_log +-- ---------------------------- +DROP TABLE IF EXISTS infra_api_access_log; +CREATE TABLE infra_api_access_log +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + trace_id nvarchar(64) DEFAULT '' NOT NULL, + user_id bigint DEFAULT 0 NOT NULL, + user_type tinyint DEFAULT 0 NOT NULL, + application_name nvarchar(50) NOT NULL, + request_method nvarchar(16) DEFAULT '' NOT NULL, + request_url nvarchar(255) DEFAULT '' NOT NULL, + request_params nvarchar(max) NULL, + response_body nvarchar(max) NULL, + user_ip nvarchar(50) NOT NULL, + user_agent nvarchar(512) NOT NULL, + operate_module nvarchar(50) DEFAULT NULL NULL, + operate_name nvarchar(50) DEFAULT NULL NULL, + operate_type tinyint DEFAULT 0 NULL, + begin_time datetime2 NOT NULL, + end_time datetime2 NOT NULL, + duration int NOT NULL, + result_code int DEFAULT 0 NOT NULL, + result_msg nvarchar(512) DEFAULT '' NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +CREATE INDEX idx_infra_api_access_log_01 ON infra_api_access_log (create_time) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'日志主键', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'链路追踪编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'trace_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户类型', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'user_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'应用名', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'application_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'请求方法名', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'request_method' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'请求地址', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'request_url' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'请求参数', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'request_params' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'响应结果', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'response_body' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户 IP', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'user_ip' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'浏览器 UA', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'user_agent' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'操作模块', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'operate_module' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'操作名', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'operate_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'操作分类', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'operate_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'开始请求时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'begin_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'结束请求时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'end_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'执行时长', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'duration' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'结果码', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'result_code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'结果提示', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'result_msg' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'API 访问日志表', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_access_log' +GO + +-- ---------------------------- +-- Table structure for infra_api_error_log +-- ---------------------------- +DROP TABLE IF EXISTS infra_api_error_log; +CREATE TABLE infra_api_error_log +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + trace_id nvarchar(64) NOT NULL, + user_id int DEFAULT 0 NOT NULL, + user_type tinyint DEFAULT 0 NOT NULL, + application_name nvarchar(50) NOT NULL, + request_method nvarchar(16) NOT NULL, + request_url nvarchar(255) NOT NULL, + request_params nvarchar(4000) NOT NULL, + user_ip nvarchar(50) NOT NULL, + user_agent nvarchar(512) NOT NULL, + exception_time datetime2 NOT NULL, + exception_name nvarchar(128) DEFAULT '' NOT NULL, + exception_message nvarchar(max) NOT NULL, + exception_root_cause_message nvarchar(max) NOT NULL, + exception_stack_trace nvarchar(max) NOT NULL, + exception_class_name nvarchar(512) NOT NULL, + exception_file_name nvarchar(512) NOT NULL, + exception_method_name nvarchar(512) NOT NULL, + exception_line_number int NOT NULL, + process_status tinyint NOT NULL, + process_time datetime2 DEFAULT NULL NULL, + process_user_id int DEFAULT 0 NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'链路追踪编号 + * + * 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'trace_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户类型', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'user_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'应用名 + * + * 目前读取 spring.application.name', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'application_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'请求方法名', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'request_method' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'请求地址', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'request_url' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'请求参数', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'request_params' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户 IP', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'user_ip' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'浏览器 UA', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'user_agent' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'异常发生时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'exception_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'异常名 + * + * {@link Throwable#getClass()} 的类全名', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'exception_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'异常导致的消息 + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getMessage(Throwable)}', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'exception_message' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'异常导致的根消息 + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getRootCauseMessage(Throwable)}', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'exception_root_cause_message' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'异常的栈轨迹 + * + * {@link cn.iocoder.common.framework.util.ExceptionUtil#getServiceException(Exception)}', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'exception_stack_trace' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'异常发生的类全名 + * + * {@link StackTraceElement#getClassName()}', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'exception_class_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'异常发生的类文件 + * + * {@link StackTraceElement#getFileName()}', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'exception_file_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'异常发生的方法名 + * + * {@link StackTraceElement#getMethodName()}', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'exception_method_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'异常发生的方法所在行 + * + * {@link StackTraceElement#getLineNumber()}', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'exception_line_number' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'处理状态', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'process_status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'处理时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'process_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'处理用户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'process_user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'系统异常日志', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_api_error_log' +GO + +-- ---------------------------- +-- Table structure for infra_codegen_column +-- ---------------------------- +DROP TABLE IF EXISTS infra_codegen_column; +CREATE TABLE infra_codegen_column +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + table_id bigint NOT NULL, + column_name nvarchar(200) NOT NULL, + data_type nvarchar(100) NOT NULL, + column_comment nvarchar(500) NOT NULL, + nullable varchar(1) NOT NULL, + primary_key varchar(1) NOT NULL, + ordinal_position int NOT NULL, + java_type nvarchar(32) NOT NULL, + java_field nvarchar(64) NOT NULL, + dict_type nvarchar(200) DEFAULT '' NULL, + example nvarchar(64) DEFAULT NULL NULL, + create_operation varchar(1) NOT NULL, + update_operation varchar(1) NOT NULL, + list_operation varchar(1) NOT NULL, + list_operation_condition nvarchar(32) DEFAULT '=' NOT NULL, + list_operation_result varchar(1) NOT NULL, + html_type nvarchar(32) NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'表编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'table_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'字段名', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'column_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'字段类型', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'data_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'字段描述', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'column_comment' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否允许为空', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'nullable' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否主键', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'primary_key' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'排序', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'ordinal_position' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'Java 属性类型', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'java_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'Java 属性名', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'java_field' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'字典类型', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'dict_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'数据示例', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'example' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否为 Create 创建操作的字段', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'create_operation' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否为 Update 更新操作的字段', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'update_operation' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否为 List 查询操作的字段', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'list_operation' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'List 查询操作的条件类型', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'list_operation_condition' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否为 List 查询操作的返回字段', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'list_operation_result' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'显示类型', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'html_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'代码生成表字段定义', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_column' +GO + +-- ---------------------------- +-- Table structure for infra_codegen_table +-- ---------------------------- +DROP TABLE IF EXISTS infra_codegen_table; +CREATE TABLE infra_codegen_table +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + data_source_config_id bigint NOT NULL, + scene tinyint DEFAULT 1 NOT NULL, + table_name nvarchar(200) DEFAULT '' NOT NULL, + table_comment nvarchar(500) DEFAULT '' NOT NULL, + remark nvarchar(500) DEFAULT NULL NULL, + module_name nvarchar(30) NOT NULL, + business_name nvarchar(30) NOT NULL, + class_name nvarchar(100) DEFAULT '' NOT NULL, + class_comment nvarchar(50) NOT NULL, + author nvarchar(50) NOT NULL, + template_type tinyint DEFAULT 1 NOT NULL, + front_type tinyint NOT NULL, + parent_menu_id bigint DEFAULT NULL NULL, + master_table_id bigint DEFAULT NULL NULL, + sub_join_column_id bigint DEFAULT NULL NULL, + sub_join_many varchar(1) DEFAULT NULL NULL, + tree_parent_column_id bigint DEFAULT NULL NULL, + tree_name_column_id bigint DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'数据源配置的编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'data_source_config_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'生成场景', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'scene' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'表名称', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'table_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'表描述', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'table_comment' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'备注', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模块名', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'module_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'业务名', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'business_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'类名称', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'class_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'类描述', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'class_comment' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'作者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'author' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板类型', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'template_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'前端类型', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'front_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'父菜单编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'parent_menu_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'主表的编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'master_table_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'子表关联主表的字段编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'sub_join_column_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'主表与子表是否一对多', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'sub_join_many' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'树表的父字段编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'tree_parent_column_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'树表的名字字段编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'tree_name_column_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'代码生成表定义', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_codegen_table' +GO + +-- ---------------------------- +-- Table structure for infra_config +-- ---------------------------- +DROP TABLE IF EXISTS infra_config; +CREATE TABLE infra_config +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + category nvarchar(50) NOT NULL, + type tinyint NOT NULL, + name nvarchar(100) DEFAULT '' NOT NULL, + config_key nvarchar(100) DEFAULT '' NOT NULL, + value nvarchar(500) DEFAULT '' NOT NULL, + visible varchar(1) NOT NULL, + remark nvarchar(500) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'参数主键', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_config', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'参数分组', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_config', + 'COLUMN', N'category' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'参数类型', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_config', + 'COLUMN', N'type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'参数名称', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_config', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'参数键名', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_config', + 'COLUMN', N'config_key' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'参数键值', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_config', + 'COLUMN', N'value' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否可见', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_config', + 'COLUMN', N'visible' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'备注', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_config', + 'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_config', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_config', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_config', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_config', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_config', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'参数配置表', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_config' +GO + +-- ---------------------------- +-- Records of infra_config +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT infra_config ON +GO +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (2, N'biz', 1, N'用户管理-账号初始密码', N'sys.user.init-password', N'123456', N'0', N'初始化密码 123456', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-04-03 17:22:28', N'0') +GO +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (7, N'url', 2, N'MySQL 监控的地址', N'url.druid', N'', N'1', N'', N'1', N'2023-04-07 13:41:16', N'1', N'2023-04-07 14:33:38', N'0') +GO +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (8, N'url', 2, N'SkyWalking 监控的地址', N'url.skywalking', N'', N'1', N'', N'1', N'2023-04-07 13:41:16', N'1', N'2023-04-07 14:57:03', N'0') +GO +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (9, N'url', 2, N'Spring Boot Admin 监控的地址', N'url.spring-boot-admin', N'', N'1', N'', N'1', N'2023-04-07 13:41:16', N'1', N'2023-04-07 14:52:07', N'0') +GO +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (10, N'url', 2, N'Swagger 接口文档的地址', N'url.swagger', N'', N'1', N'', N'1', N'2023-04-07 13:41:16', N'1', N'2023-04-07 14:59:00', N'0') +GO +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (11, N'ui', 2, N'腾讯地图 key', N'tencent.lbs.key', N'TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E', N'1', N'腾讯地图 key', N'1', N'2023-06-03 19:16:27', N'1', N'2023-06-03 19:16:27', N'0') +GO +INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (12, N'test2', 2, N'test3', N'test4', N'test5', N'1', N'test6', N'1', N'2023-12-03 09:55:16', N'1', N'2023-12-03 09:55:27', N'0') +GO +SET IDENTITY_INSERT infra_config OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for infra_data_source_config +-- ---------------------------- +DROP TABLE IF EXISTS infra_data_source_config; +CREATE TABLE infra_data_source_config +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(100) DEFAULT '' NOT NULL, + url nvarchar(1024) NOT NULL, + username nvarchar(255) NOT NULL, + password nvarchar(255) DEFAULT '' NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'主键编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_data_source_config', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'参数名称', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_data_source_config', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'数据源连接', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_data_source_config', + 'COLUMN', N'url' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户名', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_data_source_config', + 'COLUMN', N'username' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'密码', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_data_source_config', + 'COLUMN', N'password' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_data_source_config', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_data_source_config', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_data_source_config', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_data_source_config', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_data_source_config', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'数据源配置表', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_data_source_config' +GO + +-- ---------------------------- +-- Table structure for infra_file +-- ---------------------------- +DROP TABLE IF EXISTS infra_file; +CREATE TABLE infra_file +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + config_id bigint DEFAULT NULL NULL, + name nvarchar(256) DEFAULT NULL NULL, + path nvarchar(512) NOT NULL, + url nvarchar(1024) NOT NULL, + type nvarchar(128) DEFAULT NULL NULL, + size int NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'文件编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'配置编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file', + 'COLUMN', N'config_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'文件名', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'文件路径', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file', + 'COLUMN', N'path' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'文件 URL', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file', + 'COLUMN', N'url' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'文件类型', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file', + 'COLUMN', N'type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'文件大小', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file', + 'COLUMN', N'size' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'文件表', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file' +GO + +-- ---------------------------- +-- Table structure for infra_file_config +-- ---------------------------- +DROP TABLE IF EXISTS infra_file_config; +CREATE TABLE infra_file_config +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(63) NOT NULL, + storage tinyint NOT NULL, + remark nvarchar(255) DEFAULT NULL NULL, + master varchar(1) NOT NULL, + config nvarchar(4000) NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_config', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'配置名', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_config', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'存储器', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_config', + 'COLUMN', N'storage' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'备注', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_config', + 'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否为主配置', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_config', + 'COLUMN', N'master' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'存储配置', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_config', + 'COLUMN', N'config' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_config', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_config', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_config', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_config', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_config', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'文件配置表', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_config' +GO + +-- ---------------------------- +-- Records of infra_file_config +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT infra_file_config ON +GO +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (4, N'数据库', 1, N'我是数据库', N'0', N'{"@class":"com.win.module.infra.framework.file.core.client.db.DBFileClientConfig","domain":"http://127.0.0.1:48080"}', N'1', N'2022-03-15 23:56:24', N'1', N'2024-02-28 22:54:07', N'0') +GO +INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (22, N'七牛存储器', 20, N'', N'1', N'{"@class":"com.win.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"s3.cn-south-1.qiniucs.com","domain":"http://test.win.iocoder.cn","bucket":"ruoyi-vue-pro","accessKey":"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS","accessSecret":"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY"}', N'1', N'2024-01-13 22:11:12', N'1', N'2024-04-03 19:38:34', N'0') +GO +SET IDENTITY_INSERT infra_file_config OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for infra_file_content +-- ---------------------------- +DROP TABLE IF EXISTS infra_file_content; +CREATE TABLE infra_file_content +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + config_id bigint NOT NULL, + path nvarchar(512) NOT NULL, + content varbinary(max) NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_content', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'配置编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_content', + 'COLUMN', N'config_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'文件路径', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_content', + 'COLUMN', N'path' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'文件内容', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_content', + 'COLUMN', N'content' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_content', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_content', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_content', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_content', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_content', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'文件表', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_file_content' +GO + +-- ---------------------------- +-- Table structure for infra_job +-- ---------------------------- +DROP TABLE IF EXISTS infra_job; +CREATE TABLE infra_job +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(32) NOT NULL, + status tinyint NOT NULL, + handler_name nvarchar(64) NOT NULL, + handler_param nvarchar(255) DEFAULT NULL NULL, + cron_expression nvarchar(32) NOT NULL, + retry_count int DEFAULT 0 NOT NULL, + retry_interval int DEFAULT 0 NOT NULL, + monitor_timeout int DEFAULT 0 NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'任务编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'任务名称', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'任务状态', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'处理器的名字', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job', + 'COLUMN', N'handler_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'处理器的参数', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job', + 'COLUMN', N'handler_param' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'CRON 表达式', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job', + 'COLUMN', N'cron_expression' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'重试次数', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job', + 'COLUMN', N'retry_count' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'重试间隔', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job', + 'COLUMN', N'retry_interval' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'监控超时时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job', + 'COLUMN', N'monitor_timeout' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'定时任务表', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job' +GO + +-- ---------------------------- +-- Records of infra_job +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT infra_job ON +GO +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (5, N'支付通知 Job', 2, N'payNotifyJob', NULL, N'* * * * * ?', 0, 0, 0, N'1', N'2021-10-27 08:34:42', N'1', N'2023-07-09 20:51:41', N'0') +GO +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (17, N'支付订单同步 Job', 2, N'payOrderSyncJob', NULL, N'0 0/1 * * * ?', 0, 0, 0, N'1', N'2023-07-22 14:36:26', N'1', N'2023-07-22 15:39:08', N'0') +GO +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (18, N'支付订单过期 Job', 2, N'payOrderExpireJob', NULL, N'0 0/1 * * * ?', 0, 0, 0, N'1', N'2023-07-22 15:36:23', N'1', N'2023-07-22 15:39:54', N'0') +GO +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (19, N'退款订单的同步 Job', 2, N'payRefundSyncJob', NULL, N'0 0/1 * * * ?', 0, 0, 0, N'1', N'2023-07-23 21:03:44', N'1', N'2023-07-23 21:09:00', N'0') +GO +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (21, N'交易订单的自动过期 Job', 2, N'tradeOrderAutoCancelJob', N'', N'0 * * * * ?', 3, 0, 0, N'1', N'2023-09-25 23:43:26', N'1', N'2023-09-26 19:23:30', N'0') +GO +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (22, N'交易订单的自动收货 Job', 2, N'tradeOrderAutoReceiveJob', N'', N'0 * * * * ?', 3, 0, 0, N'1', N'2023-09-26 19:23:53', N'1', N'2023-09-26 23:38:08', N'0') +GO +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (23, N'交易订单的自动评论 Job', 2, N'tradeOrderAutoCommentJob', N'', N'0 * * * * ?', 3, 0, 0, N'1', N'2023-09-26 23:38:29', N'1', N'2023-09-27 11:03:10', N'0') +GO +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (24, N'佣金解冻 Job', 2, N'brokerageRecordUnfreezeJob', N'', N'0 * * * * ?', 3, 0, 0, N'1', N'2023-09-28 22:01:46', N'1', N'2023-09-28 22:01:56', N'0') +GO +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (25, N'访问日志清理 Job', 2, N'accessLogCleanJob', N'', N'0 0 0 * * ?', 3, 0, 0, N'1', N'2023-10-03 10:59:41', N'1', N'2023-10-03 11:01:10', N'0') +GO +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (26, N'错误日志清理 Job', 2, N'errorLogCleanJob', N'', N'0 0 0 * * ?', 3, 0, 0, N'1', N'2023-10-03 11:00:43', N'1', N'2023-10-03 11:01:12', N'0') +GO +INSERT INTO infra_job (id, name, status, handler_name, handler_param, cron_expression, retry_count, retry_interval, monitor_timeout, creator, create_time, updater, update_time, deleted) VALUES (27, N'任务日志清理 Job', 2, N'jobLogCleanJob', N'', N'0 0 0 * * ?', 3, 0, 0, N'1', N'2023-10-03 11:01:33', N'1', N'2023-10-03 11:01:42', N'0') +GO +SET IDENTITY_INSERT infra_job OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for infra_job_log +-- ---------------------------- +DROP TABLE IF EXISTS infra_job_log; +CREATE TABLE infra_job_log +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + job_id bigint NOT NULL, + handler_name nvarchar(64) NOT NULL, + handler_param nvarchar(255) DEFAULT NULL NULL, + execute_index tinyint DEFAULT 1 NOT NULL, + begin_time datetime2 NOT NULL, + end_time datetime2 DEFAULT NULL NULL, + duration int DEFAULT NULL NULL, + status tinyint NOT NULL, + result nvarchar(4000) DEFAULT '' NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'日志编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'任务编号', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'job_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'处理器的名字', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'handler_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'处理器的参数', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'handler_param' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'第几次执行', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'execute_index' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'开始执行时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'begin_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'结束执行时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'end_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'执行时长', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'duration' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'任务状态', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'结果数据', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'result' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'定时任务日志表', + 'SCHEMA', N'dbo', + 'TABLE', N'infra_job_log' +GO + +-- ---------------------------- +-- Table structure for system_dept +-- ---------------------------- +DROP TABLE IF EXISTS system_dept; +CREATE TABLE system_dept +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(30) DEFAULT '' NOT NULL, + parent_id bigint DEFAULT 0 NOT NULL, + sort int DEFAULT 0 NOT NULL, + leader_user_id bigint DEFAULT NULL NULL, + phone nvarchar(11) DEFAULT NULL NULL, + email nvarchar(50) DEFAULT NULL NULL, + status tinyint NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'部门id', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'部门名称', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'父部门id', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept', + 'COLUMN', N'parent_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'显示顺序', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept', + 'COLUMN', N'sort' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'负责人', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept', + 'COLUMN', N'leader_user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'联系电话', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept', + 'COLUMN', N'phone' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'邮箱', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept', + 'COLUMN', N'email' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'部门状态(0正常 1停用)', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'部门表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dept' +GO + +-- ---------------------------- +-- Records of system_dept +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_dept ON +GO +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (100, N'芋道源码', 0, 0, 1, N'15888888888', N'ry@qq.com', 0, N'admin', N'2021-01-05 17:03:47', N'1', N'2023-11-14 23:30:36', N'0', 1) +GO +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (101, N'深圳总公司', 100, 1, 104, N'15888888888', N'ry@qq.com', 0, N'admin', N'2021-01-05 17:03:47', N'1', N'2023-12-02 09:53:35', N'0', 1) +GO +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (102, N'长沙分公司', 100, 2, NULL, N'15888888888', N'ry@qq.com', 0, N'admin', N'2021-01-05 17:03:47', N'', N'2021-12-15 05:01:40', N'0', 1) +GO +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (103, N'研发部门', 101, 1, 104, N'15888888888', N'ry@qq.com', 0, N'admin', N'2021-01-05 17:03:47', N'1', N'2024-03-24 20:56:04', N'0', 1) +GO +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (104, N'市场部门', 101, 2, NULL, N'15888888888', N'ry@qq.com', 0, N'admin', N'2021-01-05 17:03:47', N'', N'2021-12-15 05:01:38', N'0', 1) +GO +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (105, N'测试部门', 101, 3, NULL, N'15888888888', N'ry@qq.com', 0, N'admin', N'2021-01-05 17:03:47', N'1', N'2022-05-16 20:25:15', N'0', 1) +GO +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (106, N'财务部门', 101, 4, 103, N'15888888888', N'ry@qq.com', 0, N'admin', N'2021-01-05 17:03:47', N'103', N'2022-01-15 21:32:22', N'0', 1) +GO +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (107, N'运维部门', 101, 5, 1, N'15888888888', N'ry@qq.com', 0, N'admin', N'2021-01-05 17:03:47', N'1', N'2023-12-02 09:28:22', N'0', 1) +GO +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (108, N'市场部门', 102, 1, NULL, N'15888888888', N'ry@qq.com', 0, N'admin', N'2021-01-05 17:03:47', N'1', N'2022-02-16 08:35:45', N'0', 1) +GO +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (109, N'财务部门', 102, 2, NULL, N'15888888888', N'ry@qq.com', 0, N'admin', N'2021-01-05 17:03:47', N'', N'2021-12-15 05:01:29', N'0', 1) +GO +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (110, N'新部门', 0, 1, NULL, NULL, NULL, 0, N'110', N'2022-02-23 20:46:30', N'110', N'2022-02-23 20:46:30', N'0', 121) +GO +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (111, N'顶级部门', 0, 1, NULL, NULL, NULL, 0, N'113', N'2022-03-07 21:44:50', N'113', N'2022-03-07 21:44:50', N'0', 122) +GO +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (112, N'产品部门', 101, 100, 1, NULL, NULL, 1, N'1', N'2023-12-02 09:45:13', N'1', N'2023-12-02 09:45:31', N'0', 1) +GO +INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (113, N'支持部门', 102, 3, 104, NULL, NULL, 1, N'1', N'2023-12-02 09:47:38', N'1', N'2023-12-02 09:47:38', N'0', 1) +GO +SET IDENTITY_INSERT system_dept OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_dict_data +-- ---------------------------- +DROP TABLE IF EXISTS system_dict_data; +CREATE TABLE system_dict_data +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + sort int DEFAULT 0 NOT NULL, + label nvarchar(100) DEFAULT '' NOT NULL, + value nvarchar(100) DEFAULT '' NOT NULL, + dict_type nvarchar(100) DEFAULT '' NOT NULL, + status tinyint DEFAULT 0 NOT NULL, + color_type nvarchar(100) DEFAULT '' NULL, + css_class nvarchar(100) DEFAULT '' NULL, + remark nvarchar(500) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'字典编码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'字典排序', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data', + 'COLUMN', N'sort' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'字典标签', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data', + 'COLUMN', N'label' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'字典键值', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data', + 'COLUMN', N'value' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'字典类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data', + 'COLUMN', N'dict_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'状态(0正常 1停用)', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'颜色类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data', + 'COLUMN', N'color_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'css 样式', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data', + 'COLUMN', N'css_class' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'备注', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data', + 'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'字典数据表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_data' +GO + +-- ---------------------------- +-- Records of system_dict_data +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_dict_data ON +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1, 1, N'男', N'1', N'system_user_sex', 0, N'default', N'A', N'性别男', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-03-29 00:14:39', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (2, 2, N'女', N'2', N'system_user_sex', 0, N'success', N'', N'性别女', N'admin', N'2021-01-05 17:03:48', N'1', N'2023-11-15 23:30:37', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (8, 1, N'正常', N'1', N'infra_job_status', 0, N'success', N'', N'正常状态', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-02-16 19:33:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (9, 2, N'暂停', N'2', N'infra_job_status', 0, N'danger', N'', N'停用状态', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-02-16 19:33:45', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (12, 1, N'系统内置', N'1', N'infra_config_type', 0, N'danger', N'', N'参数类型 - 系统内置', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-02-16 19:06:02', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (13, 2, N'自定义', N'2', N'infra_config_type', 0, N'primary', N'', N'参数类型 - 自定义', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-02-16 19:06:07', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (14, 1, N'通知', N'1', N'system_notice_type', 0, N'success', N'', N'通知', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-02-16 13:05:57', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (15, 2, N'公告', N'2', N'system_notice_type', 0, N'info', N'', N'公告', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-02-16 13:06:01', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (16, 0, N'其它', N'0', N'infra_operate_type', 0, N'default', N'', N'其它操作', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-03-14 12:44:19', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (17, 1, N'查询', N'1', N'infra_operate_type', 0, N'info', N'', N'查询操作', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-03-14 12:44:20', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (18, 2, N'新增', N'2', N'infra_operate_type', 0, N'primary', N'', N'新增操作', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-03-14 12:44:21', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (19, 3, N'修改', N'3', N'infra_operate_type', 0, N'warning', N'', N'修改操作', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-03-14 12:44:22', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (20, 4, N'删除', N'4', N'infra_operate_type', 0, N'danger', N'', N'删除操作', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-03-14 12:44:23', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (22, 5, N'导出', N'5', N'infra_operate_type', 0, N'default', N'', N'导出操作', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-03-14 12:44:24', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (23, 6, N'导入', N'6', N'infra_operate_type', 0, N'default', N'', N'导入操作', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-03-14 12:44:25', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (27, 1, N'开启', N'0', N'common_status', 0, N'primary', N'', N'开启状态', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-02-16 08:00:39', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (28, 2, N'关闭', N'1', N'common_status', 0, N'info', N'', N'关闭状态', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-02-16 08:00:44', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (29, 1, N'目录', N'1', N'system_menu_type', 0, N'', N'', N'目录', N'admin', N'2021-01-05 17:03:48', N'', N'2022-02-01 16:43:45', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (30, 2, N'菜单', N'2', N'system_menu_type', 0, N'', N'', N'菜单', N'admin', N'2021-01-05 17:03:48', N'', N'2022-02-01 16:43:41', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (31, 3, N'按钮', N'3', N'system_menu_type', 0, N'', N'', N'按钮', N'admin', N'2021-01-05 17:03:48', N'', N'2022-02-01 16:43:39', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (32, 1, N'内置', N'1', N'system_role_type', 0, N'danger', N'', N'内置角色', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-02-16 13:02:08', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (33, 2, N'自定义', N'2', N'system_role_type', 0, N'primary', N'', N'自定义角色', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-02-16 13:02:12', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (34, 1, N'全部数据权限', N'1', N'system_data_scope', 0, N'', N'', N'全部数据权限', N'admin', N'2021-01-05 17:03:48', N'', N'2022-02-01 16:47:17', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (35, 2, N'指定部门数据权限', N'2', N'system_data_scope', 0, N'', N'', N'指定部门数据权限', N'admin', N'2021-01-05 17:03:48', N'', N'2022-02-01 16:47:18', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (36, 3, N'本部门数据权限', N'3', N'system_data_scope', 0, N'', N'', N'本部门数据权限', N'admin', N'2021-01-05 17:03:48', N'', N'2022-02-01 16:47:16', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (37, 4, N'本部门及以下数据权限', N'4', N'system_data_scope', 0, N'', N'', N'本部门及以下数据权限', N'admin', N'2021-01-05 17:03:48', N'', N'2022-02-01 16:47:21', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (38, 5, N'仅本人数据权限', N'5', N'system_data_scope', 0, N'', N'', N'仅本人数据权限', N'admin', N'2021-01-05 17:03:48', N'', N'2022-02-01 16:47:23', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (39, 0, N'成功', N'0', N'system_login_result', 0, N'success', N'', N'登陆结果 - 成功', N'', N'2021-01-18 06:17:36', N'1', N'2022-02-16 13:23:49', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (40, 10, N'账号或密码不正确', N'10', N'system_login_result', 0, N'primary', N'', N'登陆结果 - 账号或密码不正确', N'', N'2021-01-18 06:17:54', N'1', N'2022-02-16 13:24:27', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (41, 20, N'用户被禁用', N'20', N'system_login_result', 0, N'warning', N'', N'登陆结果 - 用户被禁用', N'', N'2021-01-18 06:17:54', N'1', N'2022-02-16 13:23:57', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (42, 30, N'验证码不存在', N'30', N'system_login_result', 0, N'info', N'', N'登陆结果 - 验证码不存在', N'', N'2021-01-18 06:17:54', N'1', N'2022-02-16 13:24:07', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (43, 31, N'验证码不正确', N'31', N'system_login_result', 0, N'info', N'', N'登陆结果 - 验证码不正确', N'', N'2021-01-18 06:17:54', N'1', N'2022-02-16 13:24:11', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (44, 100, N'未知异常', N'100', N'system_login_result', 0, N'danger', N'', N'登陆结果 - 未知异常', N'', N'2021-01-18 06:17:54', N'1', N'2022-02-16 13:24:23', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (45, 1, N'是', N'true', N'infra_boolean_string', 0, N'danger', N'', N'Boolean 是否类型 - 是', N'', N'2021-01-19 03:20:55', N'1', N'2022-03-15 23:01:45', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (46, 1, N'否', N'false', N'infra_boolean_string', 0, N'info', N'', N'Boolean 是否类型 - 否', N'', N'2021-01-19 03:20:55', N'1', N'2022-03-15 23:09:45', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (50, 1, N'单表(增删改查)', N'1', N'infra_codegen_template_type', 0, N'', N'', NULL, N'', N'2021-02-05 07:09:06', N'', N'2022-03-10 16:33:15', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (51, 2, N'树表(增删改查)', N'2', N'infra_codegen_template_type', 0, N'', N'', NULL, N'', N'2021-02-05 07:14:46', N'', N'2022-03-10 16:33:19', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (53, 0, N'初始化中', N'0', N'infra_job_status', 0, N'primary', N'', NULL, N'', N'2021-02-07 07:46:49', N'1', N'2022-02-16 19:33:29', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (57, 0, N'运行中', N'0', N'infra_job_log_status', 0, N'primary', N'', N'RUNNING', N'', N'2021-02-08 10:04:24', N'1', N'2022-02-16 19:07:48', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (58, 1, N'成功', N'1', N'infra_job_log_status', 0, N'success', N'', NULL, N'', N'2021-02-08 10:06:57', N'1', N'2022-02-16 19:07:52', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (59, 2, N'失败', N'2', N'infra_job_log_status', 0, N'warning', N'', N'失败', N'', N'2021-02-08 10:07:38', N'1', N'2022-02-16 19:07:56', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (60, 1, N'会员', N'1', N'user_type', 0, N'primary', N'', NULL, N'', N'2021-02-26 00:16:27', N'1', N'2022-02-16 10:22:19', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (61, 2, N'管理员', N'2', N'user_type', 0, N'success', N'', NULL, N'', N'2021-02-26 00:16:34', N'1', N'2022-02-16 10:22:22', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (62, 0, N'未处理', N'0', N'infra_api_error_log_process_status', 0, N'primary', N'', NULL, N'', N'2021-02-26 07:07:19', N'1', N'2022-02-16 20:14:17', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (63, 1, N'已处理', N'1', N'infra_api_error_log_process_status', 0, N'success', N'', NULL, N'', N'2021-02-26 07:07:26', N'1', N'2022-02-16 20:14:08', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (64, 2, N'已忽略', N'2', N'infra_api_error_log_process_status', 0, N'danger', N'', NULL, N'', N'2021-02-26 07:07:34', N'1', N'2022-02-16 20:14:14', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (66, 2, N'阿里云', N'ALIYUN', N'system_sms_channel_code', 0, N'primary', N'', NULL, N'1', N'2021-04-05 01:05:26', N'1', N'2022-02-16 10:09:52', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (67, 1, N'验证码', N'1', N'system_sms_template_type', 0, N'warning', N'', NULL, N'1', N'2021-04-05 21:50:57', N'1', N'2022-02-16 12:48:30', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (68, 2, N'通知', N'2', N'system_sms_template_type', 0, N'primary', N'', NULL, N'1', N'2021-04-05 21:51:08', N'1', N'2022-02-16 12:48:27', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (69, 0, N'营销', N'3', N'system_sms_template_type', 0, N'danger', N'', NULL, N'1', N'2021-04-05 21:51:15', N'1', N'2022-02-16 12:48:22', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (70, 0, N'初始化', N'0', N'system_sms_send_status', 0, N'primary', N'', NULL, N'1', N'2021-04-11 20:18:33', N'1', N'2022-02-16 10:26:07', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (71, 1, N'发送成功', N'10', N'system_sms_send_status', 0, N'success', N'', NULL, N'1', N'2021-04-11 20:18:43', N'1', N'2022-02-16 10:25:56', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (72, 2, N'发送失败', N'20', N'system_sms_send_status', 0, N'danger', N'', NULL, N'1', N'2021-04-11 20:18:49', N'1', N'2022-02-16 10:26:03', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (73, 3, N'不发送', N'30', N'system_sms_send_status', 0, N'info', N'', NULL, N'1', N'2021-04-11 20:19:44', N'1', N'2022-02-16 10:26:10', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (74, 0, N'等待结果', N'0', N'system_sms_receive_status', 0, N'primary', N'', NULL, N'1', N'2021-04-11 20:27:43', N'1', N'2022-02-16 10:28:24', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (75, 1, N'接收成功', N'10', N'system_sms_receive_status', 0, N'success', N'', NULL, N'1', N'2021-04-11 20:29:25', N'1', N'2022-02-16 10:28:28', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (76, 2, N'接收失败', N'20', N'system_sms_receive_status', 0, N'danger', N'', NULL, N'1', N'2021-04-11 20:29:31', N'1', N'2022-02-16 10:28:32', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (77, 0, N'调试(钉钉)', N'DEBUG_DING_TALK', N'system_sms_channel_code', 0, N'info', N'', NULL, N'1', N'2021-04-13 00:20:37', N'1', N'2022-02-16 10:10:00', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (80, 100, N'账号登录', N'100', N'system_login_type', 0, N'primary', N'', N'账号登录', N'1', N'2021-10-06 00:52:02', N'1', N'2022-02-16 13:11:34', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (81, 101, N'社交登录', N'101', N'system_login_type', 0, N'info', N'', N'社交登录', N'1', N'2021-10-06 00:52:17', N'1', N'2022-02-16 13:11:40', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (83, 200, N'主动登出', N'200', N'system_login_type', 0, N'primary', N'', N'主动登出', N'1', N'2021-10-06 00:52:58', N'1', N'2022-02-16 13:11:49', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (85, 202, N'强制登出', N'202', N'system_login_type', 0, N'danger', N'', N'强制退出', N'1', N'2021-10-06 00:53:41', N'1', N'2022-02-16 13:11:57', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (86, 0, N'病假', N'1', N'bpm_oa_leave_type', 0, N'primary', N'', NULL, N'1', N'2021-09-21 22:35:28', N'1', N'2022-02-16 10:00:41', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (87, 1, N'事假', N'2', N'bpm_oa_leave_type', 0, N'info', N'', NULL, N'1', N'2021-09-21 22:36:11', N'1', N'2022-02-16 10:00:49', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (88, 2, N'婚假', N'3', N'bpm_oa_leave_type', 0, N'warning', N'', NULL, N'1', N'2021-09-21 22:36:38', N'1', N'2022-02-16 10:00:53', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (113, 1, N'微信公众号支付', N'wx_pub', N'pay_channel_code', 0, N'success', N'', N'微信公众号支付', N'1', N'2021-12-03 10:40:24', N'1', N'2023-07-19 20:08:47', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (114, 2, N'微信小程序支付', N'wx_lite', N'pay_channel_code', 0, N'success', N'', N'微信小程序支付', N'1', N'2021-12-03 10:41:06', N'1', N'2023-07-19 20:08:50', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (115, 3, N'微信 App 支付', N'wx_app', N'pay_channel_code', 0, N'success', N'', N'微信 App 支付', N'1', N'2021-12-03 10:41:20', N'1', N'2023-07-19 20:08:56', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (116, 10, N'支付宝 PC 网站支付', N'alipay_pc', N'pay_channel_code', 0, N'primary', N'', N'支付宝 PC 网站支付', N'1', N'2021-12-03 10:42:09', N'1', N'2023-07-19 20:09:12', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (117, 11, N'支付宝 Wap 网站支付', N'alipay_wap', N'pay_channel_code', 0, N'primary', N'', N'支付宝 Wap 网站支付', N'1', N'2021-12-03 10:42:26', N'1', N'2023-07-19 20:09:16', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (118, 12, N'支付宝 App 支付', N'alipay_app', N'pay_channel_code', 0, N'primary', N'', N'支付宝 App 支付', N'1', N'2021-12-03 10:42:55', N'1', N'2023-07-19 20:09:20', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (119, 14, N'支付宝扫码支付', N'alipay_qr', N'pay_channel_code', 0, N'primary', N'', N'支付宝扫码支付', N'1', N'2021-12-03 10:43:10', N'1', N'2023-07-19 20:09:28', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (120, 10, N'通知成功', N'10', N'pay_notify_status', 0, N'success', N'', N'通知成功', N'1', N'2021-12-03 11:02:41', N'1', N'2023-07-19 10:08:19', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (121, 20, N'通知失败', N'20', N'pay_notify_status', 0, N'danger', N'', N'通知失败', N'1', N'2021-12-03 11:02:59', N'1', N'2023-07-19 10:08:21', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (122, 0, N'等待通知', N'0', N'pay_notify_status', 0, N'info', N'', N'未通知', N'1', N'2021-12-03 11:03:10', N'1', N'2023-07-19 10:08:24', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (123, 10, N'支付成功', N'10', N'pay_order_status', 0, N'success', N'', N'支付成功', N'1', N'2021-12-03 11:18:29', N'1', N'2023-07-19 18:04:28', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (124, 30, N'支付关闭', N'30', N'pay_order_status', 0, N'info', N'', N'支付关闭', N'1', N'2021-12-03 11:18:42', N'1', N'2023-07-19 18:05:07', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (125, 0, N'等待支付', N'0', N'pay_order_status', 0, N'info', N'', N'未支付', N'1', N'2021-12-03 11:18:18', N'1', N'2023-07-19 18:04:15', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (600, 5, N'首页', N'1', N'promotion_banner_position', 0, N'warning', N'', N'', N'1', N'2023-10-11 07:45:24', N'1', N'2023-10-11 07:45:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (601, 4, N'秒杀活动页', N'2', N'promotion_banner_position', 0, N'warning', N'', N'', N'1', N'2023-10-11 07:45:24', N'1', N'2023-10-11 07:45:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (602, 3, N'砍价活动页', N'3', N'promotion_banner_position', 0, N'warning', N'', N'', N'1', N'2023-10-11 07:45:24', N'1', N'2023-10-11 07:45:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (603, 2, N'限时折扣页', N'4', N'promotion_banner_position', 0, N'warning', N'', N'', N'1', N'2023-10-11 07:45:24', N'1', N'2023-10-11 07:45:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (604, 1, N'满减送页', N'5', N'promotion_banner_position', 0, N'warning', N'', N'', N'1', N'2023-10-11 07:45:24', N'1', N'2023-10-11 07:45:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1118, 0, N'等待退款', N'0', N'pay_refund_status', 0, N'info', N'', N'等待退款', N'1', N'2021-12-10 16:44:59', N'1', N'2023-07-19 10:14:39', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1119, 20, N'退款失败', N'20', N'pay_refund_status', 0, N'danger', N'', N'退款失败', N'1', N'2021-12-10 16:45:10', N'1', N'2023-07-19 10:15:10', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1124, 10, N'退款成功', N'10', N'pay_refund_status', 0, N'success', N'', N'退款成功', N'1', N'2021-12-10 16:46:26', N'1', N'2023-07-19 10:15:00', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1127, 1, N'审批中', N'1', N'bpm_process_instance_status', 0, N'default', N'', N'流程实例的状态 - 进行中', N'1', N'2022-01-07 23:47:22', N'1', N'2024-03-16 16:11:45', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1128, 2, N'审批通过', N'2', N'bpm_process_instance_status', 0, N'success', N'', N'流程实例的状态 - 已完成', N'1', N'2022-01-07 23:47:49', N'1', N'2024-03-16 16:11:54', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1129, 1, N'审批中', N'1', N'bpm_task_status', 0, N'primary', N'', N'流程实例的结果 - 处理中', N'1', N'2022-01-07 23:48:32', N'1', N'2024-03-08 22:41:37', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1130, 2, N'审批通过', N'2', N'bpm_task_status', 0, N'success', N'', N'流程实例的结果 - 通过', N'1', N'2022-01-07 23:48:45', N'1', N'2024-03-08 22:41:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1131, 3, N'审批不通过', N'3', N'bpm_task_status', 0, N'danger', N'', N'流程实例的结果 - 不通过', N'1', N'2022-01-07 23:48:55', N'1', N'2024-03-08 22:41:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1132, 4, N'已取消', N'4', N'bpm_task_status', 0, N'info', N'', N'流程实例的结果 - 撤销', N'1', N'2022-01-07 23:49:06', N'1', N'2024-03-08 22:41:39', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1133, 10, N'流程表单', N'10', N'bpm_model_form_type', 0, N'', N'', N'流程的表单类型 - 流程表单', N'103', N'2022-01-11 23:51:30', N'103', N'2022-01-11 23:51:30', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1134, 20, N'业务表单', N'20', N'bpm_model_form_type', 0, N'', N'', N'流程的表单类型 - 业务表单', N'103', N'2022-01-11 23:51:47', N'103', N'2022-01-11 23:51:47', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1135, 10, N'角色', N'10', N'bpm_task_candidate_strategy', 0, N'info', N'', N'任务分配规则的类型 - 角色', N'103', N'2022-01-12 23:21:22', N'1', N'2024-03-06 02:53:16', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1136, 20, N'部门的成员', N'20', N'bpm_task_candidate_strategy', 0, N'primary', N'', N'任务分配规则的类型 - 部门的成员', N'103', N'2022-01-12 23:21:47', N'1', N'2024-03-06 02:53:17', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1137, 21, N'部门的负责人', N'21', N'bpm_task_candidate_strategy', 0, N'primary', N'', N'任务分配规则的类型 - 部门的负责人', N'103', N'2022-01-12 23:33:36', N'1', N'2024-03-06 02:53:18', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1138, 30, N'用户', N'30', N'bpm_task_candidate_strategy', 0, N'info', N'', N'任务分配规则的类型 - 用户', N'103', N'2022-01-12 23:34:02', N'1', N'2024-03-06 02:53:19', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1139, 40, N'用户组', N'40', N'bpm_task_candidate_strategy', 0, N'warning', N'', N'任务分配规则的类型 - 用户组', N'103', N'2022-01-12 23:34:21', N'1', N'2024-03-06 02:53:20', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1140, 60, N'流程表达式', N'60', N'bpm_task_candidate_strategy', 0, N'danger', N'', N'任务分配规则的类型 - 流程表达式', N'103', N'2022-01-12 23:34:43', N'1', N'2024-03-06 02:53:20', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1141, 22, N'岗位', N'22', N'bpm_task_candidate_strategy', 0, N'success', N'', N'任务分配规则的类型 - 岗位', N'103', N'2022-01-14 18:41:55', N'1', N'2024-03-06 02:53:21', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1145, 1, N'管理后台', N'1', N'infra_codegen_scene', 0, N'', N'', N'代码生成的场景枚举 - 管理后台', N'1', N'2022-02-02 13:15:06', N'1', N'2022-03-10 16:32:59', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1146, 2, N'用户 APP', N'2', N'infra_codegen_scene', 0, N'', N'', N'代码生成的场景枚举 - 用户 APP', N'1', N'2022-02-02 13:15:19', N'1', N'2022-03-10 16:33:03', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1150, 1, N'数据库', N'1', N'infra_file_storage', 0, N'default', N'', NULL, N'1', N'2022-03-15 00:25:28', N'1', N'2022-03-15 00:25:28', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1151, 10, N'本地磁盘', N'10', N'infra_file_storage', 0, N'default', N'', NULL, N'1', N'2022-03-15 00:25:41', N'1', N'2022-03-15 00:25:56', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1152, 11, N'FTP 服务器', N'11', N'infra_file_storage', 0, N'default', N'', NULL, N'1', N'2022-03-15 00:26:06', N'1', N'2022-03-15 00:26:10', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1153, 12, N'SFTP 服务器', N'12', N'infra_file_storage', 0, N'default', N'', NULL, N'1', N'2022-03-15 00:26:22', N'1', N'2022-03-15 00:26:22', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1154, 20, N'S3 对象存储', N'20', N'infra_file_storage', 0, N'default', N'', NULL, N'1', N'2022-03-15 00:26:31', N'1', N'2022-03-15 00:26:45', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1155, 103, N'短信登录', N'103', N'system_login_type', 0, N'default', N'', NULL, N'1', N'2022-05-09 23:57:58', N'1', N'2022-05-09 23:58:09', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1156, 1, N'password', N'password', N'system_oauth2_grant_type', 0, N'default', N'', N'密码模式', N'1', N'2022-05-12 00:22:05', N'1', N'2022-05-11 16:26:01', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1157, 2, N'authorization_code', N'authorization_code', N'system_oauth2_grant_type', 0, N'primary', N'', N'授权码模式', N'1', N'2022-05-12 00:22:59', N'1', N'2022-05-11 16:26:02', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1158, 3, N'implicit', N'implicit', N'system_oauth2_grant_type', 0, N'success', N'', N'简化模式', N'1', N'2022-05-12 00:23:40', N'1', N'2022-05-11 16:26:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1159, 4, N'client_credentials', N'client_credentials', N'system_oauth2_grant_type', 0, N'default', N'', N'客户端模式', N'1', N'2022-05-12 00:23:51', N'1', N'2022-05-11 16:26:08', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1160, 5, N'refresh_token', N'refresh_token', N'system_oauth2_grant_type', 0, N'info', N'', N'刷新模式', N'1', N'2022-05-12 00:24:02', N'1', N'2022-05-11 16:26:11', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1162, 1, N'销售中', N'1', N'product_spu_status', 0, N'success', N'', N'商品 SPU 状态 - 销售中', N'1', N'2022-10-24 21:19:47', N'1', N'2022-10-24 21:20:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1163, 0, N'仓库中', N'0', N'product_spu_status', 0, N'info', N'', N'商品 SPU 状态 - 仓库中', N'1', N'2022-10-24 21:20:54', N'1', N'2022-10-24 21:21:22', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1164, 0, N'回收站', N'-1', N'product_spu_status', 0, N'default', N'', N'商品 SPU 状态 - 回收站', N'1', N'2022-10-24 21:21:11', N'1', N'2022-10-24 21:21:11', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1165, 1, N'满减', N'1', N'promotion_discount_type', 0, N'success', N'', N'优惠类型 - 满减', N'1', N'2022-11-01 12:46:41', N'1', N'2022-11-01 12:50:11', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1166, 2, N'折扣', N'2', N'promotion_discount_type', 0, N'primary', N'', N'优惠类型 - 折扣', N'1', N'2022-11-01 12:46:51', N'1', N'2022-11-01 12:50:08', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1167, 1, N'固定日期', N'1', N'promotion_coupon_template_validity_type', 0, N'default', N'', N'优惠劵模板的有限期类型 - 固定日期', N'1', N'2022-11-02 00:07:34', N'1', N'2022-11-04 00:07:49', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1168, 2, N'领取之后', N'2', N'promotion_coupon_template_validity_type', 0, N'default', N'', N'优惠劵模板的有限期类型 - 领取之后', N'1', N'2022-11-02 00:07:54', N'1', N'2022-11-04 00:07:52', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1169, 1, N'通用劵', N'1', N'promotion_product_scope', 0, N'default', N'', N'营销的商品范围 - 全部商品参与', N'1', N'2022-11-02 00:28:22', N'1', N'2023-09-28 00:27:42', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1170, 2, N'商品劵', N'2', N'promotion_product_scope', 0, N'default', N'', N'营销的商品范围 - 指定商品参与', N'1', N'2022-11-02 00:28:34', N'1', N'2023-09-28 00:27:44', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1171, 1, N'未使用', N'1', N'promotion_coupon_status', 0, N'primary', N'', N'优惠劵的状态 - 已领取', N'1', N'2022-11-04 00:15:08', N'1', N'2023-10-03 12:54:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1172, 2, N'已使用', N'2', N'promotion_coupon_status', 0, N'success', N'', N'优惠劵的状态 - 已使用', N'1', N'2022-11-04 00:15:21', N'1', N'2022-11-04 19:16:08', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1173, 3, N'已过期', N'3', N'promotion_coupon_status', 0, N'info', N'', N'优惠劵的状态 - 已过期', N'1', N'2022-11-04 00:15:43', N'1', N'2022-11-04 19:16:12', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1174, 1, N'直接领取', N'1', N'promotion_coupon_take_type', 0, N'primary', N'', N'优惠劵的领取方式 - 直接领取', N'1', N'2022-11-04 19:13:00', N'1', N'2022-11-04 19:13:25', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1175, 2, N'指定发放', N'2', N'promotion_coupon_take_type', 0, N'success', N'', N'优惠劵的领取方式 - 指定发放', N'1', N'2022-11-04 19:13:13', N'1', N'2022-11-04 19:14:48', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1176, 10, N'未开始', N'10', N'promotion_activity_status', 0, N'primary', N'', N'促销活动的状态枚举 - 未开始', N'1', N'2022-11-04 22:54:49', N'1', N'2022-11-04 22:55:53', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1177, 20, N'进行中', N'20', N'promotion_activity_status', 0, N'success', N'', N'促销活动的状态枚举 - 进行中', N'1', N'2022-11-04 22:55:06', N'1', N'2022-11-04 22:55:20', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1178, 30, N'已结束', N'30', N'promotion_activity_status', 0, N'info', N'', N'促销活动的状态枚举 - 已结束', N'1', N'2022-11-04 22:55:41', N'1', N'2022-11-04 22:55:41', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1179, 40, N'已关闭', N'40', N'promotion_activity_status', 0, N'warning', N'', N'促销活动的状态枚举 - 已关闭', N'1', N'2022-11-04 22:56:10', N'1', N'2022-11-04 22:56:18', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1180, 10, N'满 N 元', N'10', N'promotion_condition_type', 0, N'primary', N'', N'营销的条件类型 - 满 N 元', N'1', N'2022-11-04 22:59:45', N'1', N'2022-11-04 22:59:45', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1181, 20, N'满 N 件', N'20', N'promotion_condition_type', 0, N'success', N'', N'营销的条件类型 - 满 N 件', N'1', N'2022-11-04 23:00:02', N'1', N'2022-11-04 23:00:02', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1182, 10, N'申请售后', N'10', N'trade_after_sale_status', 0, N'primary', N'', N'交易售后状态 - 申请售后', N'1', N'2022-11-19 20:53:33', N'1', N'2022-11-19 20:54:42', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1183, 20, N'商品待退货', N'20', N'trade_after_sale_status', 0, N'primary', N'', N'交易售后状态 - 商品待退货', N'1', N'2022-11-19 20:54:36', N'1', N'2022-11-19 20:58:58', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1184, 30, N'商家待收货', N'30', N'trade_after_sale_status', 0, N'primary', N'', N'交易售后状态 - 商家待收货', N'1', N'2022-11-19 20:56:56', N'1', N'2022-11-19 20:59:20', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1185, 40, N'等待退款', N'40', N'trade_after_sale_status', 0, N'primary', N'', N'交易售后状态 - 等待退款', N'1', N'2022-11-19 20:59:54', N'1', N'2022-11-19 21:00:01', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1186, 50, N'退款成功', N'50', N'trade_after_sale_status', 0, N'default', N'', N'交易售后状态 - 退款成功', N'1', N'2022-11-19 21:00:33', N'1', N'2022-11-19 21:00:33', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1187, 61, N'买家取消', N'61', N'trade_after_sale_status', 0, N'info', N'', N'交易售后状态 - 买家取消', N'1', N'2022-11-19 21:01:29', N'1', N'2022-11-19 21:01:29', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1188, 62, N'商家拒绝', N'62', N'trade_after_sale_status', 0, N'info', N'', N'交易售后状态 - 商家拒绝', N'1', N'2022-11-19 21:02:17', N'1', N'2022-11-19 21:02:17', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1189, 63, N'商家拒收货', N'63', N'trade_after_sale_status', 0, N'info', N'', N'交易售后状态 - 商家拒收货', N'1', N'2022-11-19 21:02:37', N'1', N'2022-11-19 21:03:07', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1190, 10, N'售中退款', N'10', N'trade_after_sale_type', 0, N'success', N'', N'交易售后的类型 - 售中退款', N'1', N'2022-11-19 21:05:05', N'1', N'2022-11-19 21:38:23', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1191, 20, N'售后退款', N'20', N'trade_after_sale_type', 0, N'primary', N'', N'交易售后的类型 - 售后退款', N'1', N'2022-11-19 21:05:32', N'1', N'2022-11-19 21:38:32', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1192, 10, N'仅退款', N'10', N'trade_after_sale_way', 0, N'primary', N'', N'交易售后的方式 - 仅退款', N'1', N'2022-11-19 21:39:19', N'1', N'2022-11-19 21:39:19', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1193, 20, N'退货退款', N'20', N'trade_after_sale_way', 0, N'success', N'', N'交易售后的方式 - 退货退款', N'1', N'2022-11-19 21:39:38', N'1', N'2022-11-19 21:39:49', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1194, 10, N'微信小程序', N'10', N'terminal', 0, N'default', N'', N'终端 - 微信小程序', N'1', N'2022-12-10 10:51:11', N'1', N'2022-12-10 10:51:57', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1195, 20, N'H5 网页', N'20', N'terminal', 0, N'default', N'', N'终端 - H5 网页', N'1', N'2022-12-10 10:51:30', N'1', N'2022-12-10 10:51:59', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1196, 11, N'微信公众号', N'11', N'terminal', 0, N'default', N'', N'终端 - 微信公众号', N'1', N'2022-12-10 10:54:16', N'1', N'2022-12-10 10:52:01', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1197, 31, N'苹果 App', N'31', N'terminal', 0, N'default', N'', N'终端 - 苹果 App', N'1', N'2022-12-10 10:54:42', N'1', N'2022-12-10 10:52:18', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1198, 32, N'安卓 App', N'32', N'terminal', 0, N'default', N'', N'终端 - 安卓 App', N'1', N'2022-12-10 10:55:02', N'1', N'2022-12-10 10:59:17', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1199, 0, N'普通订单', N'0', N'trade_order_type', 0, N'default', N'', N'交易订单的类型 - 普通订单', N'1', N'2022-12-10 16:34:14', N'1', N'2022-12-10 16:34:14', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1200, 1, N'秒杀订单', N'1', N'trade_order_type', 0, N'default', N'', N'交易订单的类型 - 秒杀订单', N'1', N'2022-12-10 16:34:26', N'1', N'2022-12-10 16:34:26', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1201, 2, N'拼团订单', N'2', N'trade_order_type', 0, N'default', N'', N'交易订单的类型 - 拼团订单', N'1', N'2022-12-10 16:34:36', N'1', N'2022-12-10 16:34:36', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1202, 3, N'砍价订单', N'3', N'trade_order_type', 0, N'default', N'', N'交易订单的类型 - 砍价订单', N'1', N'2022-12-10 16:34:48', N'1', N'2022-12-10 16:34:48', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1203, 0, N'待支付', N'0', N'trade_order_status', 0, N'default', N'', N'交易订单状态 - 待支付', N'1', N'2022-12-10 16:49:29', N'1', N'2022-12-10 16:49:29', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1204, 10, N'待发货', N'10', N'trade_order_status', 0, N'primary', N'', N'交易订单状态 - 待发货', N'1', N'2022-12-10 16:49:53', N'1', N'2022-12-10 16:51:17', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1205, 20, N'已发货', N'20', N'trade_order_status', 0, N'primary', N'', N'交易订单状态 - 已发货', N'1', N'2022-12-10 16:50:13', N'1', N'2022-12-10 16:51:31', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1206, 30, N'已完成', N'30', N'trade_order_status', 0, N'success', N'', N'交易订单状态 - 已完成', N'1', N'2022-12-10 16:50:30', N'1', N'2022-12-10 16:51:06', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1207, 40, N'已取消', N'40', N'trade_order_status', 0, N'danger', N'', N'交易订单状态 - 已取消', N'1', N'2022-12-10 16:50:50', N'1', N'2022-12-10 16:51:00', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1208, 0, N'未售后', N'0', N'trade_order_item_after_sale_status', 0, N'info', N'', N'交易订单项的售后状态 - 未售后', N'1', N'2022-12-10 20:58:42', N'1', N'2022-12-10 20:59:29', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1209, 1, N'售后中', N'1', N'trade_order_item_after_sale_status', 0, N'primary', N'', N'交易订单项的售后状态 - 售后中', N'1', N'2022-12-10 20:59:21', N'1', N'2022-12-10 20:59:21', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1210, 2, N'已退款', N'2', N'trade_order_item_after_sale_status', 0, N'success', N'', N'交易订单项的售后状态 - 已退款', N'1', N'2022-12-10 20:59:46', N'1', N'2022-12-10 20:59:46', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1211, 1, N'完全匹配', N'1', N'mp_auto_reply_request_match', 0, N'primary', N'', N'公众号自动回复的请求关键字匹配模式 - 完全匹配', N'1', N'2023-01-16 23:30:39', N'1', N'2023-01-16 23:31:00', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1212, 2, N'半匹配', N'2', N'mp_auto_reply_request_match', 0, N'success', N'', N'公众号自动回复的请求关键字匹配模式 - 半匹配', N'1', N'2023-01-16 23:30:55', N'1', N'2023-01-16 23:31:10', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1213, 1, N'文本', N'text', N'mp_message_type', 0, N'default', N'', N'公众号的消息类型 - 文本', N'1', N'2023-01-17 22:17:32', N'1', N'2023-01-17 22:17:39', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1214, 2, N'图片', N'image', N'mp_message_type', 0, N'default', N'', N'公众号的消息类型 - 图片', N'1', N'2023-01-17 22:17:32', N'1', N'2023-01-17 14:19:47', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1215, 3, N'语音', N'voice', N'mp_message_type', 0, N'default', N'', N'公众号的消息类型 - 语音', N'1', N'2023-01-17 22:17:32', N'1', N'2023-01-17 14:20:08', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1216, 4, N'视频', N'video', N'mp_message_type', 0, N'default', N'', N'公众号的消息类型 - 视频', N'1', N'2023-01-17 22:17:32', N'1', N'2023-01-17 14:21:08', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1217, 5, N'小视频', N'shortvideo', N'mp_message_type', 0, N'default', N'', N'公众号的消息类型 - 小视频', N'1', N'2023-01-17 22:17:32', N'1', N'2023-01-17 14:19:59', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1218, 6, N'图文', N'news', N'mp_message_type', 0, N'default', N'', N'公众号的消息类型 - 图文', N'1', N'2023-01-17 22:17:32', N'1', N'2023-01-17 14:22:54', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1219, 7, N'音乐', N'music', N'mp_message_type', 0, N'default', N'', N'公众号的消息类型 - 音乐', N'1', N'2023-01-17 22:17:32', N'1', N'2023-01-17 14:22:54', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1220, 8, N'地理位置', N'location', N'mp_message_type', 0, N'default', N'', N'公众号的消息类型 - 地理位置', N'1', N'2023-01-17 22:17:32', N'1', N'2023-01-17 14:23:51', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1221, 9, N'链接', N'link', N'mp_message_type', 0, N'default', N'', N'公众号的消息类型 - 链接', N'1', N'2023-01-17 22:17:32', N'1', N'2023-01-17 14:24:49', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1222, 10, N'事件', N'event', N'mp_message_type', 0, N'default', N'', N'公众号的消息类型 - 事件', N'1', N'2023-01-17 22:17:32', N'1', N'2023-01-17 14:24:49', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1223, 0, N'初始化', N'0', N'system_mail_send_status', 0, N'primary', N'', N'邮件发送状态 - 初始化\n', N'1', N'2023-01-26 09:53:49', N'1', N'2023-01-26 16:36:14', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1224, 10, N'发送成功', N'10', N'system_mail_send_status', 0, N'success', N'', N'邮件发送状态 - 发送成功', N'1', N'2023-01-26 09:54:28', N'1', N'2023-01-26 16:36:22', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1225, 20, N'发送失败', N'20', N'system_mail_send_status', 0, N'danger', N'', N'邮件发送状态 - 发送失败', N'1', N'2023-01-26 09:54:50', N'1', N'2023-01-26 16:36:26', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1226, 30, N'不发送', N'30', N'system_mail_send_status', 0, N'info', N'', N'邮件发送状态 - 不发送', N'1', N'2023-01-26 09:55:06', N'1', N'2023-01-26 16:36:36', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1227, 1, N'通知公告', N'1', N'system_notify_template_type', 0, N'primary', N'', N'站内信模版的类型 - 通知公告', N'1', N'2023-01-28 10:35:59', N'1', N'2023-01-28 10:35:59', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1228, 2, N'系统消息', N'2', N'system_notify_template_type', 0, N'success', N'', N'站内信模版的类型 - 系统消息', N'1', N'2023-01-28 10:36:20', N'1', N'2023-01-28 10:36:25', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1230, 13, N'支付宝条码支付', N'alipay_bar', N'pay_channel_code', 0, N'primary', N'', N'支付宝条码支付', N'1', N'2023-02-18 23:32:24', N'1', N'2023-07-19 20:09:23', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1231, 10, N'Vue2 Element UI 标准模版', N'10', N'infra_codegen_front_type', 0, N'', N'', N'', N'1', N'2023-04-13 00:03:55', N'1', N'2023-04-13 00:03:55', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1232, 20, N'Vue3 Element Plus 标准模版', N'20', N'infra_codegen_front_type', 0, N'', N'', N'', N'1', N'2023-04-13 00:04:08', N'1', N'2023-04-13 00:04:08', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1233, 21, N'Vue3 Element Plus Schema 模版', N'21', N'infra_codegen_front_type', 0, N'', N'', N'', N'1', N'2023-04-13 00:04:26', N'1', N'2023-04-13 00:04:26', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1234, 30, N'Vue3 vben 模版', N'30', N'infra_codegen_front_type', 0, N'', N'', N'', N'1', N'2023-04-13 00:04:26', N'1', N'2023-04-13 00:04:26', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1244, 0, N'按件', N'1', N'trade_delivery_express_charge_mode', 0, N'', N'', N'', N'1', N'2023-05-21 22:46:40', N'1', N'2023-05-21 22:46:40', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1245, 1, N'按重量', N'2', N'trade_delivery_express_charge_mode', 0, N'', N'', N'', N'1', N'2023-05-21 22:46:58', N'1', N'2023-05-21 22:46:58', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1246, 2, N'按体积', N'3', N'trade_delivery_express_charge_mode', 0, N'', N'', N'', N'1', N'2023-05-21 22:47:18', N'1', N'2023-05-21 22:47:18', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1335, 11, N'订单积分抵扣', N'11', N'member_point_biz_type', 0, N'', N'', N'', N'1', N'2023-06-10 12:15:27', N'1', N'2023-10-11 07:41:43', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1336, 1, N'签到', N'1', N'member_point_biz_type', 0, N'', N'', N'', N'1', N'2023-06-10 12:15:48', N'1', N'2023-08-20 11:59:53', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1341, 20, N'已退款', N'20', N'pay_order_status', 0, N'danger', N'', N'已退款', N'1', N'2023-07-19 18:05:37', N'1', N'2023-07-19 18:05:37', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1342, 21, N'请求成功,但是结果失败', N'21', N'pay_notify_status', 0, N'warning', N'', N'请求成功,但是结果失败', N'1', N'2023-07-19 18:10:47', N'1', N'2023-07-19 18:11:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1343, 22, N'请求失败', N'22', N'pay_notify_status', 0, N'warning', N'', NULL, N'1', N'2023-07-19 18:11:05', N'1', N'2023-07-19 18:11:27', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1344, 4, N'微信扫码支付', N'wx_native', N'pay_channel_code', 0, N'success', N'', N'微信扫码支付', N'1', N'2023-07-19 20:07:47', N'1', N'2023-07-19 20:09:03', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1345, 5, N'微信条码支付', N'wx_bar', N'pay_channel_code', 0, N'success', N'', N'微信条码支付\n', N'1', N'2023-07-19 20:08:06', N'1', N'2023-07-19 20:09:08', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1346, 1, N'支付单', N'1', N'pay_notify_type', 0, N'primary', N'', N'支付单', N'1', N'2023-07-20 12:23:17', N'1', N'2023-07-20 12:23:17', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1347, 2, N'退款单', N'2', N'pay_notify_type', 0, N'danger', N'', NULL, N'1', N'2023-07-20 12:23:26', N'1', N'2023-07-20 12:23:26', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1348, 20, N'模拟支付', N'mock', N'pay_channel_code', 0, N'default', N'', N'模拟支付', N'1', N'2023-07-29 11:10:51', N'1', N'2023-07-29 03:14:10', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1349, 12, N'订单积分抵扣(整单取消)', N'12', N'member_point_biz_type', 0, N'', N'', N'', N'1', N'2023-08-20 12:00:03', N'1', N'2023-10-11 07:42:01', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1350, 0, N'管理员调整', N'0', N'member_experience_biz_type', 0, N'', N'', NULL, N'', N'2023-08-22 12:41:01', N'', N'2023-08-22 12:41:01', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1351, 1, N'邀新奖励', N'1', N'member_experience_biz_type', 0, N'', N'', NULL, N'', N'2023-08-22 12:41:01', N'', N'2023-08-22 12:41:01', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1352, 11, N'下单奖励', N'11', N'member_experience_biz_type', 0, N'success', N'', NULL, N'', N'2023-08-22 12:41:01', N'1', N'2023-10-11 07:45:09', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1353, 12, N'下单奖励(整单取消)', N'12', N'member_experience_biz_type', 0, N'warning', N'', NULL, N'', N'2023-08-22 12:41:01', N'1', N'2023-10-11 07:45:01', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1354, 4, N'签到奖励', N'4', N'member_experience_biz_type', 0, N'', N'', NULL, N'', N'2023-08-22 12:41:01', N'', N'2023-08-22 12:41:01', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1355, 5, N'抽奖奖励', N'5', N'member_experience_biz_type', 0, N'', N'', NULL, N'', N'2023-08-22 12:41:01', N'', N'2023-08-22 12:41:01', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1356, 1, N'快递发货', N'1', N'trade_delivery_type', 0, N'', N'', N'', N'1', N'2023-08-23 00:04:55', N'1', N'2023-08-23 00:04:55', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1357, 2, N'用户自提', N'2', N'trade_delivery_type', 0, N'', N'', N'', N'1', N'2023-08-23 00:05:05', N'1', N'2023-08-23 00:05:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1358, 3, N'品类劵', N'3', N'promotion_product_scope', 0, N'default', N'', N'', N'1', N'2023-09-01 23:43:07', N'1', N'2023-09-28 00:27:47', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1359, 1, N'人人分销', N'1', N'brokerage_enabled_condition', 0, N'', N'', N'所有用户都可以分销', N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1360, 2, N'指定分销', N'2', N'brokerage_enabled_condition', 0, N'', N'', N'仅可后台手动设置推广员', N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1361, 1, N'首次绑定', N'1', N'brokerage_bind_mode', 0, N'', N'', N'只要用户没有推广人,随时都可以绑定推广关系', N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1362, 2, N'注册绑定', N'2', N'brokerage_bind_mode', 0, N'', N'', N'仅新用户注册时才能绑定推广关系', N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1363, 3, N'覆盖绑定', N'3', N'brokerage_bind_mode', 0, N'', N'', N'如果用户已经有推广人,推广人会被变更', N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1364, 1, N'钱包', N'1', N'brokerage_withdraw_type', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1365, 2, N'银行卡', N'2', N'brokerage_withdraw_type', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1366, 3, N'微信', N'3', N'brokerage_withdraw_type', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1367, 4, N'支付宝', N'4', N'brokerage_withdraw_type', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1368, 1, N'订单返佣', N'1', N'brokerage_record_biz_type', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1369, 2, N'申请提现', N'2', N'brokerage_record_biz_type', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1370, 3, N'申请提现驳回', N'3', N'brokerage_record_biz_type', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1371, 0, N'待结算', N'0', N'brokerage_record_status', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1372, 1, N'已结算', N'1', N'brokerage_record_status', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1373, 2, N'已取消', N'2', N'brokerage_record_status', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1374, 0, N'审核中', N'0', N'brokerage_withdraw_status', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1375, 10, N'审核通过', N'10', N'brokerage_withdraw_status', 0, N'success', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1376, 11, N'提现成功', N'11', N'brokerage_withdraw_status', 0, N'success', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1377, 20, N'审核不通过', N'20', N'brokerage_withdraw_status', 0, N'danger', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1378, 21, N'提现失败', N'21', N'brokerage_withdraw_status', 0, N'danger', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1379, 0, N'工商银行', N'0', N'brokerage_bank_name', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1380, 1, N'建设银行', N'1', N'brokerage_bank_name', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1381, 2, N'农业银行', N'2', N'brokerage_bank_name', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1382, 3, N'中国银行', N'3', N'brokerage_bank_name', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1383, 4, N'交通银行', N'4', N'brokerage_bank_name', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1384, 5, N'招商银行', N'5', N'brokerage_bank_name', 0, N'', N'', NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1385, 21, N'钱包', N'wallet', N'pay_channel_code', 0, N'primary', N'', N'', N'1', N'2023-10-01 21:46:19', N'1', N'2023-10-01 21:48:01', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1386, 1, N'砍价中', N'1', N'promotion_bargain_record_status', 0, N'default', N'', N'', N'1', N'2023-10-05 10:41:26', N'1', N'2023-10-05 10:41:26', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1387, 2, N'砍价成功', N'2', N'promotion_bargain_record_status', 0, N'success', N'', N'', N'1', N'2023-10-05 10:41:39', N'1', N'2023-10-05 10:41:39', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1388, 3, N'砍价失败', N'3', N'promotion_bargain_record_status', 0, N'warning', N'', N'', N'1', N'2023-10-05 10:41:57', N'1', N'2023-10-05 10:41:57', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1389, 1, N'拼团中', N'1', N'promotion_combination_record_status', 0, N'', N'', N'', N'1', N'2023-10-08 07:24:44', N'1', N'2023-10-08 07:24:44', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1390, 2, N'拼团成功', N'2', N'promotion_combination_record_status', 0, N'success', N'', N'', N'1', N'2023-10-08 07:24:56', N'1', N'2023-10-08 07:24:56', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1391, 3, N'拼团失败', N'3', N'promotion_combination_record_status', 0, N'warning', N'', N'', N'1', N'2023-10-08 07:25:11', N'1', N'2023-10-08 07:25:11', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1392, 2, N'管理员修改', N'2', N'member_point_biz_type', 0, N'default', N'', N'', N'1', N'2023-10-11 07:41:34', N'1', N'2023-10-11 07:41:34', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1393, 13, N'订单积分抵扣(单个退款)', N'13', N'member_point_biz_type', 0, N'', N'', N'', N'1', N'2023-10-11 07:42:29', N'1', N'2023-10-11 07:42:29', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1394, 21, N'订单积分奖励', N'21', N'member_point_biz_type', 0, N'default', N'', N'', N'1', N'2023-10-11 07:42:44', N'1', N'2023-10-11 07:42:44', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1395, 22, N'订单积分奖励(整单取消)', N'22', N'member_point_biz_type', 0, N'default', N'', N'', N'1', N'2023-10-11 07:42:55', N'1', N'2023-10-11 07:43:01', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1396, 23, N'订单积分奖励(单个退款)', N'23', N'member_point_biz_type', 0, N'default', N'', N'', N'1', N'2023-10-11 07:43:16', N'1', N'2023-10-11 07:43:16', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1397, 13, N'下单奖励(单个退款)', N'13', N'member_experience_biz_type', 0, N'warning', N'', N'', N'1', N'2023-10-11 07:45:24', N'1', N'2023-10-11 07:45:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1398, 5, N'网上转账', N'5', N'crm_receivable_return_type', 0, N'default', N'', N'', N'1', N'2023-10-18 21:55:24', N'1', N'2023-10-18 21:55:24', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1399, 6, N'支付宝', N'6', N'crm_receivable_return_type', 0, N'default', N'', N'', N'1', N'2023-10-18 21:55:38', N'1', N'2023-10-18 21:55:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1400, 7, N'微信支付', N'7', N'crm_receivable_return_type', 0, N'default', N'', N'', N'1', N'2023-10-18 21:55:53', N'1', N'2023-10-18 21:55:53', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1401, 8, N'其他', N'8', N'crm_receivable_return_type', 0, N'default', N'', N'', N'1', N'2023-10-18 21:56:06', N'1', N'2023-10-18 21:56:06', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1402, 1, N'IT', N'1', N'crm_customer_industry', 0, N'default', N'', N'', N'1', N'2023-10-28 23:02:15', N'1', N'2024-02-18 23:30:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1403, 2, N'金融业', N'2', N'crm_customer_industry', 0, N'default', N'', N'', N'1', N'2023-10-28 23:02:29', N'1', N'2024-02-18 23:30:43', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1404, 3, N'房地产', N'3', N'crm_customer_industry', 0, N'default', N'', N'', N'1', N'2023-10-28 23:02:41', N'1', N'2024-02-18 23:30:48', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1405, 4, N'商业服务', N'4', N'crm_customer_industry', 0, N'default', N'', N'', N'1', N'2023-10-28 23:02:54', N'1', N'2024-02-18 23:30:54', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1406, 5, N'运输/物流', N'5', N'crm_customer_industry', 0, N'default', N'', N'', N'1', N'2023-10-28 23:03:03', N'1', N'2024-02-18 23:31:00', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1407, 6, N'生产', N'6', N'crm_customer_industry', 0, N'default', N'', N'', N'1', N'2023-10-28 23:03:13', N'1', N'2024-02-18 23:31:08', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1408, 7, N'政府', N'7', N'crm_customer_industry', 0, N'default', N'', N'', N'1', N'2023-10-28 23:03:27', N'1', N'2024-02-18 23:31:13', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1409, 8, N'文化传媒', N'8', N'crm_customer_industry', 0, N'default', N'', N'', N'1', N'2023-10-28 23:03:37', N'1', N'2024-02-18 23:31:20', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1422, 1, N'A (重点客户)', N'1', N'crm_customer_level', 0, N'primary', N'', N'', N'1', N'2023-10-28 23:07:13', N'1', N'2023-10-28 23:07:13', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1423, 2, N'B (普通客户)', N'2', N'crm_customer_level', 0, N'info', N'', N'', N'1', N'2023-10-28 23:07:35', N'1', N'2023-10-28 23:07:35', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1424, 3, N'C (非优先客户)', N'3', N'crm_customer_level', 0, N'default', N'', N'', N'1', N'2023-10-28 23:07:53', N'1', N'2023-10-28 23:07:53', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1425, 1, N'促销', N'1', N'crm_customer_source', 0, N'default', N'', N'', N'1', N'2023-10-28 23:08:29', N'1', N'2023-10-28 23:08:29', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1426, 2, N'搜索引擎', N'2', N'crm_customer_source', 0, N'default', N'', N'', N'1', N'2023-10-28 23:08:39', N'1', N'2023-10-28 23:08:39', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1427, 3, N'广告', N'3', N'crm_customer_source', 0, N'default', N'', N'', N'1', N'2023-10-28 23:08:47', N'1', N'2023-10-28 23:08:47', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1428, 4, N'转介绍', N'4', N'crm_customer_source', 0, N'default', N'', N'', N'1', N'2023-10-28 23:08:58', N'1', N'2023-10-28 23:08:58', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1429, 5, N'线上注册', N'5', N'crm_customer_source', 0, N'default', N'', N'', N'1', N'2023-10-28 23:09:12', N'1', N'2023-10-28 23:09:12', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1430, 6, N'线上咨询', N'6', N'crm_customer_source', 0, N'default', N'', N'', N'1', N'2023-10-28 23:09:22', N'1', N'2023-10-28 23:09:22', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1431, 7, N'预约上门', N'7', N'crm_customer_source', 0, N'default', N'', N'', N'1', N'2023-10-28 23:09:39', N'1', N'2023-10-28 23:09:39', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1432, 8, N'陌拜', N'8', N'crm_customer_source', 0, N'default', N'', N'', N'1', N'2023-10-28 23:10:04', N'1', N'2023-10-28 23:10:04', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1433, 9, N'电话咨询', N'9', N'crm_customer_source', 0, N'default', N'', N'', N'1', N'2023-10-28 23:10:18', N'1', N'2023-10-28 23:10:18', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1434, 10, N'邮件咨询', N'10', N'crm_customer_source', 0, N'default', N'', N'', N'1', N'2023-10-28 23:10:33', N'1', N'2023-10-28 23:10:33', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1435, 10, N'Gitee', N'10', N'system_social_type', 0, N'', N'', N'', N'1', N'2023-11-04 13:04:42', N'1', N'2023-11-04 13:04:42', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1436, 20, N'钉钉', N'20', N'system_social_type', 0, N'', N'', N'', N'1', N'2023-11-04 13:04:54', N'1', N'2023-11-04 13:04:54', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1437, 30, N'企业微信', N'30', N'system_social_type', 0, N'', N'', N'', N'1', N'2023-11-04 13:05:09', N'1', N'2023-11-04 13:05:09', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1438, 31, N'微信公众平台', N'31', N'system_social_type', 0, N'', N'', N'', N'1', N'2023-11-04 13:05:18', N'1', N'2023-11-04 13:05:18', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1439, 32, N'微信开放平台', N'32', N'system_social_type', 0, N'', N'', N'', N'1', N'2023-11-04 13:05:30', N'1', N'2023-11-04 13:05:30', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1440, 34, N'微信小程序', N'34', N'system_social_type', 0, N'', N'', N'', N'1', N'2023-11-04 13:05:38', N'1', N'2023-11-04 13:07:16', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1441, 1, N'上架', N'1', N'crm_product_status', 0, N'success', N'', N'', N'1', N'2023-10-30 21:49:34', N'1', N'2023-10-30 21:49:34', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1442, 0, N'下架', N'0', N'crm_product_status', 0, N'success', N'', N'', N'1', N'2023-10-30 21:49:13', N'1', N'2023-10-30 21:49:13', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1443, 15, N'子表', N'15', N'infra_codegen_template_type', 0, N'default', N'', N'', N'1', N'2023-11-13 23:06:16', N'1', N'2023-11-13 23:06:16', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1444, 10, N'主表(标准模式)', N'10', N'infra_codegen_template_type', 0, N'default', N'', N'', N'1', N'2023-11-14 12:32:49', N'1', N'2023-11-14 12:32:49', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1445, 11, N'主表(ERP 模式)', N'11', N'infra_codegen_template_type', 0, N'default', N'', N'', N'1', N'2023-11-14 12:33:05', N'1', N'2023-11-14 12:33:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1446, 12, N'主表(内嵌模式)', N'12', N'infra_codegen_template_type', 0, N'', N'', N'', N'1', N'2023-11-14 12:33:31', N'1', N'2023-11-14 12:33:31', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1447, 1, N'负责人', N'1', N'crm_permission_level', 0, N'default', N'', N'', N'1', N'2023-11-30 09:53:12', N'1', N'2023-11-30 09:53:12', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1448, 2, N'只读', N'2', N'crm_permission_level', 0, N'', N'', N'', N'1', N'2023-11-30 09:53:29', N'1', N'2023-11-30 09:53:29', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1449, 3, N'读写', N'3', N'crm_permission_level', 0, N'', N'', N'', N'1', N'2023-11-30 09:53:36', N'1', N'2023-11-30 09:53:36', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1450, 0, N'未提交', N'0', N'crm_audit_status', 0, N'', N'', N'', N'1', N'2023-11-30 18:56:59', N'1', N'2023-11-30 18:56:59', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1451, 10, N'审批中', N'10', N'crm_audit_status', 0, N'', N'', N'', N'1', N'2023-11-30 18:57:10', N'1', N'2023-11-30 18:57:10', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1452, 20, N'审核通过', N'20', N'crm_audit_status', 0, N'', N'', N'', N'1', N'2023-11-30 18:57:24', N'1', N'2023-11-30 18:57:24', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1453, 30, N'审核不通过', N'30', N'crm_audit_status', 0, N'', N'', N'', N'1', N'2023-11-30 18:57:32', N'1', N'2023-11-30 18:57:32', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1454, 40, N'已取消', N'40', N'crm_audit_status', 0, N'', N'', N'', N'1', N'2023-11-30 18:57:42', N'1', N'2023-11-30 18:57:42', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1456, 1, N'支票', N'1', N'crm_receivable_return_type', 0, N'default', N'', N'', N'1', N'2023-10-18 21:54:29', N'1', N'2023-10-18 21:54:29', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1457, 2, N'现金', N'2', N'crm_receivable_return_type', 0, N'default', N'', N'', N'1', N'2023-10-18 21:54:41', N'1', N'2023-10-18 21:54:41', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1458, 3, N'邮政汇款', N'3', N'crm_receivable_return_type', 0, N'default', N'', N'', N'1', N'2023-10-18 21:54:53', N'1', N'2023-10-18 21:54:53', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1459, 4, N'电汇', N'4', N'crm_receivable_return_type', 0, N'default', N'', N'', N'1', N'2023-10-18 21:55:07', N'1', N'2023-10-18 21:55:07', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1460, 5, N'网上转账', N'5', N'crm_receivable_return_type', 0, N'default', N'', N'', N'1', N'2023-10-18 21:55:24', N'1', N'2023-10-18 21:55:24', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1461, 1, N'个', N'1', N'crm_product_unit', 0, N'', N'', N'', N'1', N'2023-12-05 23:02:26', N'1', N'2023-12-05 23:02:26', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1462, 2, N'块', N'2', N'crm_product_unit', 0, N'', N'', N'', N'1', N'2023-12-05 23:02:34', N'1', N'2023-12-05 23:02:34', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1463, 3, N'只', N'3', N'crm_product_unit', 0, N'', N'', N'', N'1', N'2023-12-05 23:02:57', N'1', N'2023-12-05 23:02:57', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1464, 4, N'把', N'4', N'crm_product_unit', 0, N'', N'', N'', N'1', N'2023-12-05 23:03:05', N'1', N'2023-12-05 23:03:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1465, 5, N'枚', N'5', N'crm_product_unit', 0, N'', N'', N'', N'1', N'2023-12-05 23:03:14', N'1', N'2023-12-05 23:03:14', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1466, 6, N'瓶', N'6', N'crm_product_unit', 0, N'', N'', N'', N'1', N'2023-12-05 23:03:20', N'1', N'2023-12-05 23:03:20', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1467, 7, N'盒', N'7', N'crm_product_unit', 0, N'', N'', N'', N'1', N'2023-12-05 23:03:30', N'1', N'2023-12-05 23:03:30', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1468, 8, N'台', N'8', N'crm_product_unit', 0, N'', N'', N'', N'1', N'2023-12-05 23:03:41', N'1', N'2023-12-05 23:03:41', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1469, 9, N'吨', N'9', N'crm_product_unit', 0, N'', N'', N'', N'1', N'2023-12-05 23:03:48', N'1', N'2023-12-05 23:03:48', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1470, 10, N'千克', N'10', N'crm_product_unit', 0, N'', N'', N'', N'1', N'2023-12-05 23:04:03', N'1', N'2023-12-05 23:04:03', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1471, 11, N'米', N'11', N'crm_product_unit', 0, N'', N'', N'', N'1', N'2023-12-05 23:04:12', N'1', N'2023-12-05 23:04:12', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1472, 12, N'箱', N'12', N'crm_product_unit', 0, N'', N'', N'', N'1', N'2023-12-05 23:04:25', N'1', N'2023-12-05 23:04:25', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1473, 13, N'套', N'13', N'crm_product_unit', 0, N'', N'', N'', N'1', N'2023-12-05 23:04:34', N'1', N'2023-12-05 23:04:34', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1474, 1, N'打电话', N'1', N'crm_follow_up_type', 0, N'', N'', N'', N'1', N'2024-01-15 20:48:20', N'1', N'2024-01-15 20:48:20', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1475, 2, N'发短信', N'2', N'crm_follow_up_type', 0, N'', N'', N'', N'1', N'2024-01-15 20:48:31', N'1', N'2024-01-15 20:48:31', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1476, 3, N'上门拜访', N'3', N'crm_follow_up_type', 0, N'', N'', N'', N'1', N'2024-01-15 20:49:07', N'1', N'2024-01-15 20:49:07', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1477, 4, N'微信沟通', N'4', N'crm_follow_up_type', 0, N'', N'', N'', N'1', N'2024-01-15 20:49:15', N'1', N'2024-01-15 20:49:15', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1478, 4, N'钱包余额', N'4', N'pay_transfer_type', 0, N'info', N'', N'', N'1', N'2023-10-28 16:28:37', N'1', N'2023-10-28 16:28:37', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1479, 3, N'银行卡', N'3', N'pay_transfer_type', 0, N'default', N'', N'', N'1', N'2023-10-28 16:28:21', N'1', N'2023-10-28 16:28:21', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1480, 2, N'微信余额', N'2', N'pay_transfer_type', 0, N'info', N'', N'', N'1', N'2023-10-28 16:28:07', N'1', N'2023-10-28 16:28:07', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1481, 1, N'支付宝余额', N'1', N'pay_transfer_type', 0, N'default', N'', N'', N'1', N'2023-10-28 16:27:44', N'1', N'2023-10-28 16:27:44', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1482, 4, N'转账失败', N'30', N'pay_transfer_status', 0, N'warning', N'', N'', N'1', N'2023-10-28 16:24:16', N'1', N'2023-10-28 16:24:16', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1483, 3, N'转账成功', N'20', N'pay_transfer_status', 0, N'success', N'', N'', N'1', N'2023-10-28 16:23:50', N'1', N'2023-10-28 16:23:50', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1484, 2, N'转账进行中', N'10', N'pay_transfer_status', 0, N'info', N'', N'', N'1', N'2023-10-28 16:23:12', N'1', N'2023-10-28 16:23:12', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1485, 1, N'等待转账', N'0', N'pay_transfer_status', 0, N'default', N'', N'', N'1', N'2023-10-28 16:21:43', N'1', N'2023-10-28 16:23:22', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1486, 10, N'其它入库', N'10', N'erp_stock_record_biz_type', 0, N'', N'', N'', N'1', N'2024-02-05 18:07:25', N'1', N'2024-02-05 18:07:43', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1487, 11, N'其它入库(作废)', N'11', N'erp_stock_record_biz_type', 0, N'danger', N'', N'', N'1', N'2024-02-05 18:08:07', N'1', N'2024-02-05 19:20:16', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1488, 20, N'其它出库', N'20', N'erp_stock_record_biz_type', 0, N'', N'', N'', N'1', N'2024-02-05 18:08:51', N'1', N'2024-02-05 18:08:51', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1489, 21, N'其它出库(作废)', N'21', N'erp_stock_record_biz_type', 0, N'danger', N'', N'', N'1', N'2024-02-05 18:09:00', N'1', N'2024-02-05 19:20:10', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1490, 10, N'未审核', N'10', N'erp_audit_status', 0, N'default', N'', N'', N'1', N'2024-02-06 00:00:21', N'1', N'2024-02-06 00:00:21', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1491, 20, N'已审核', N'20', N'erp_audit_status', 0, N'success', N'', N'', N'1', N'2024-02-06 00:00:35', N'1', N'2024-02-06 00:00:35', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1492, 30, N'调拨入库', N'30', N'erp_stock_record_biz_type', 0, N'', N'', N'', N'1', N'2024-02-07 20:34:19', N'1', N'2024-02-07 12:36:31', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1493, 31, N'调拨入库(作废)', N'31', N'erp_stock_record_biz_type', 0, N'danger', N'', N'', N'1', N'2024-02-07 20:34:29', N'1', N'2024-02-07 20:37:11', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1494, 32, N'调拨出库', N'32', N'erp_stock_record_biz_type', 0, N'', N'', N'', N'1', N'2024-02-07 20:34:38', N'1', N'2024-02-07 12:36:33', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1495, 33, N'调拨出库(作废)', N'33', N'erp_stock_record_biz_type', 0, N'danger', N'', N'', N'1', N'2024-02-07 20:34:49', N'1', N'2024-02-07 20:37:06', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1496, 40, N'盘盈入库', N'40', N'erp_stock_record_biz_type', 0, N'', N'', N'', N'1', N'2024-02-08 08:53:00', N'1', N'2024-02-08 08:53:09', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1497, 41, N'盘盈入库(作废)', N'41', N'erp_stock_record_biz_type', 0, N'danger', N'', N'', N'1', N'2024-02-08 08:53:39', N'1', N'2024-02-16 19:40:54', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1498, 42, N'盘亏出库', N'42', N'erp_stock_record_biz_type', 0, N'', N'', N'', N'1', N'2024-02-08 08:54:16', N'1', N'2024-02-08 08:54:16', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1499, 43, N'盘亏出库(作废)', N'43', N'erp_stock_record_biz_type', 0, N'danger', N'', N'', N'1', N'2024-02-08 08:54:31', N'1', N'2024-02-16 19:40:46', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1500, 50, N'销售出库', N'50', N'erp_stock_record_biz_type', 0, N'', N'', N'', N'1', N'2024-02-11 21:47:25', N'1', N'2024-02-11 21:50:40', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1501, 51, N'销售出库(作废)', N'51', N'erp_stock_record_biz_type', 0, N'danger', N'', N'', N'1', N'2024-02-11 21:47:37', N'1', N'2024-02-11 21:51:12', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1502, 60, N'销售退货入库', N'60', N'erp_stock_record_biz_type', 0, N'', N'', N'', N'1', N'2024-02-12 06:51:05', N'1', N'2024-02-12 06:51:05', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1503, 61, N'销售退货入库(作废)', N'61', N'erp_stock_record_biz_type', 0, N'danger', N'', N'', N'1', N'2024-02-12 06:51:18', N'1', N'2024-02-12 06:51:18', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1504, 70, N'采购入库', N'70', N'erp_stock_record_biz_type', 0, N'', N'', N'', N'1', N'2024-02-16 13:10:02', N'1', N'2024-02-16 13:10:02', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1505, 71, N'采购入库(作废)', N'71', N'erp_stock_record_biz_type', 0, N'danger', N'', N'', N'1', N'2024-02-16 13:10:10', N'1', N'2024-02-16 19:40:40', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1506, 80, N'采购退货出库', N'80', N'erp_stock_record_biz_type', 0, N'', N'', N'', N'1', N'2024-02-16 13:10:17', N'1', N'2024-02-16 13:10:17', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1507, 81, N'采购退货出库(作废)', N'81', N'erp_stock_record_biz_type', 0, N'danger', N'', N'', N'1', N'2024-02-16 13:10:26', N'1', N'2024-02-16 19:40:33', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1509, 3, N'审批不通过', N'3', N'bpm_process_instance_status', 0, N'danger', N'', N'', N'1', N'2024-03-16 16:12:06', N'1', N'2024-03-16 16:12:06', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1510, 4, N'已取消', N'4', N'bpm_process_instance_status', 0, N'warning', N'', N'', N'1', N'2024-03-16 16:12:22', N'1', N'2024-03-16 16:12:22', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1511, 5, N'已退回', N'5', N'bpm_task_status', 0, N'warning', N'', N'', N'1', N'2024-03-16 19:10:46', N'1', N'2024-03-08 22:41:40', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1512, 6, N'委派中', N'6', N'bpm_task_status', 0, N'primary', N'', N'', N'1', N'2024-03-17 10:06:22', N'1', N'2024-03-08 22:41:40', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1513, 7, N'审批通过中', N'7', N'bpm_task_status', 0, N'success', N'', N'', N'1', N'2024-03-17 10:06:47', N'1', N'2024-03-08 22:41:41', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1514, 0, N'待审批', N'0', N'bpm_task_status', 0, N'info', N'', N'', N'1', N'2024-03-17 10:07:11', N'1', N'2024-03-08 22:41:42', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1515, 35, N'发起人自选', N'35', N'bpm_task_candidate_strategy', 0, N'', N'', N'', N'1', N'2024-03-22 19:45:16', N'1', N'2024-03-22 19:45:16', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1516, 1, N'执行监听器', N'execution', N'bpm_process_listener_type', 0, N'primary', N'', N'', N'1', N'2024-03-23 12:54:03', N'1', N'2024-03-23 19:14:19', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1517, 1, N'任务监听器', N'task', N'bpm_process_listener_type', 0, N'success', N'', N'', N'1', N'2024-03-23 12:54:13', N'1', N'2024-03-23 19:14:24', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1526, 1, N'Java 类', N'class', N'bpm_process_listener_value_type', 0, N'primary', N'', N'', N'1', N'2024-03-23 15:08:45', N'1', N'2024-03-23 19:14:32', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1527, 2, N'表达式', N'expression', N'bpm_process_listener_value_type', 0, N'success', N'', N'', N'1', N'2024-03-23 15:09:06', N'1', N'2024-03-23 19:14:38', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1528, 3, N'代理表达式', N'delegateExpression', N'bpm_process_listener_value_type', 0, N'info', N'', N'', N'1', N'2024-03-23 15:11:23', N'1', N'2024-03-23 19:14:41', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1529, 1, N'天', N'1', N'date_interval', 0, N'', N'', N'', N'1', N'2024-03-29 22:50:26', N'1', N'2024-03-29 22:50:26', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1530, 2, N'周', N'2', N'date_interval', 0, N'', N'', N'', N'1', N'2024-03-29 22:50:36', N'1', N'2024-03-29 22:50:36', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1531, 3, N'月', N'3', N'date_interval', 0, N'', N'', N'', N'1', N'2024-03-29 22:50:46', N'1', N'2024-03-29 22:50:54', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1532, 4, N'季度', N'4', N'date_interval', 0, N'', N'', N'', N'1', N'2024-03-29 22:51:01', N'1', N'2024-03-29 22:51:01', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1533, 5, N'年', N'5', N'date_interval', 0, N'', N'', N'', N'1', N'2024-03-29 22:51:07', N'1', N'2024-03-29 22:51:07', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1534, 1, N'赢单', N'1', N'crm_business_end_status_type', 0, N'success', N'', N'', N'1', N'2024-04-13 23:26:57', N'1', N'2024-04-13 23:26:57', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1535, 2, N'输单', N'2', N'crm_business_end_status_type', 0, N'primary', N'', N'', N'1', N'2024-04-13 23:27:31', N'1', N'2024-04-13 23:27:31', N'0') +GO +INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, css_class, remark, creator, create_time, updater, update_time, deleted) VALUES (1536, 3, N'无效', N'3', N'crm_business_end_status_type', 0, N'info', N'', N'', N'1', N'2024-04-13 23:27:59', N'1', N'2024-04-13 23:27:59', N'0') +GO +SET IDENTITY_INSERT system_dict_data OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_dict_type +-- ---------------------------- +DROP TABLE IF EXISTS system_dict_type; +CREATE TABLE system_dict_type +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(100) DEFAULT '' NOT NULL, + type nvarchar(100) DEFAULT '' NOT NULL, + status tinyint DEFAULT 0 NOT NULL, + remark nvarchar(500) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + deleted_time datetime2 DEFAULT NULL NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'字典主键', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_type', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'字典名称', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_type', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'字典类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_type', + 'COLUMN', N'type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'状态(0正常 1停用)', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_type', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'备注', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_type', + 'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_type', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_type', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_type', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_type', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_type', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'删除时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_type', + 'COLUMN', N'deleted_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'字典类型表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_dict_type' +GO + +-- ---------------------------- +-- Records of system_dict_type +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_dict_type ON +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (1, N'用户性别', N'system_user_sex', 0, NULL, N'admin', N'2021-01-05 17:03:48', N'1', N'2022-05-16 20:29:32', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (6, N'参数类型', N'infra_config_type', 0, NULL, N'admin', N'2021-01-05 17:03:48', N'', N'2022-02-01 16:36:54', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (7, N'通知类型', N'system_notice_type', 0, NULL, N'admin', N'2021-01-05 17:03:48', N'', N'2022-02-01 16:35:26', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (9, N'操作类型', N'infra_operate_type', 0, NULL, N'admin', N'2021-01-05 17:03:48', N'1', N'2024-03-14 12:44:01', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (10, N'系统状态', N'common_status', 0, NULL, N'admin', N'2021-01-05 17:03:48', N'', N'2022-02-01 16:21:28', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (11, N'Boolean 是否类型', N'infra_boolean_string', 0, N'boolean 转是否', N'', N'2021-01-19 03:20:08', N'', N'2022-02-01 16:37:10', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (104, N'登陆结果', N'system_login_result', 0, N'登陆结果', N'', N'2021-01-18 06:17:11', N'', N'2022-02-01 16:36:00', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (106, N'代码生成模板类型', N'infra_codegen_template_type', 0, NULL, N'', N'2021-02-05 07:08:06', N'1', N'2022-05-16 20:26:50', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (107, N'定时任务状态', N'infra_job_status', 0, NULL, N'', N'2021-02-07 07:44:16', N'', N'2022-02-01 16:51:11', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (108, N'定时任务日志状态', N'infra_job_log_status', 0, NULL, N'', N'2021-02-08 10:03:51', N'', N'2022-02-01 16:50:43', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (109, N'用户类型', N'user_type', 0, NULL, N'', N'2021-02-26 00:15:51', N'', N'2021-02-26 00:15:51', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (110, N'API 异常数据的处理状态', N'infra_api_error_log_process_status', 0, NULL, N'', N'2021-02-26 07:07:01', N'', N'2022-02-01 16:50:53', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (111, N'短信渠道编码', N'system_sms_channel_code', 0, NULL, N'1', N'2021-04-05 01:04:50', N'1', N'2022-02-16 02:09:08', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (112, N'短信模板的类型', N'system_sms_template_type', 0, NULL, N'1', N'2021-04-05 21:50:43', N'1', N'2022-02-01 16:35:06', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (113, N'短信发送状态', N'system_sms_send_status', 0, NULL, N'1', N'2021-04-11 20:18:03', N'1', N'2022-02-01 16:35:09', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (114, N'短信接收状态', N'system_sms_receive_status', 0, NULL, N'1', N'2021-04-11 20:27:14', N'1', N'2022-02-01 16:35:14', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (116, N'登陆日志的类型', N'system_login_type', 0, N'登陆日志的类型', N'1', N'2021-10-06 00:50:46', N'1', N'2022-02-01 16:35:56', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (117, N'OA 请假类型', N'bpm_oa_leave_type', 0, NULL, N'1', N'2021-09-21 22:34:33', N'1', N'2022-01-22 10:41:37', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (130, N'支付渠道编码类型', N'pay_channel_code', 0, N'支付渠道的编码', N'1', N'2021-12-03 10:35:08', N'1', N'2023-07-10 10:11:39', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (131, N'支付回调状态', N'pay_notify_status', 0, N'支付回调状态(包括退款回调)', N'1', N'2021-12-03 10:53:29', N'1', N'2023-07-19 18:09:43', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (132, N'支付订单状态', N'pay_order_status', 0, N'支付订单状态', N'1', N'2021-12-03 11:17:50', N'1', N'2021-12-03 11:17:50', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (134, N'退款订单状态', N'pay_refund_status', 0, N'退款订单状态', N'1', N'2021-12-10 16:42:50', N'1', N'2023-07-19 10:13:17', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (139, N'流程实例的状态', N'bpm_process_instance_status', 0, N'流程实例的状态', N'1', N'2022-01-07 23:46:42', N'1', N'2022-01-07 23:46:42', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (140, N'流程实例的结果', N'bpm_task_status', 0, N'流程实例的结果', N'1', N'2022-01-07 23:48:10', N'1', N'2024-03-08 22:42:03', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (141, N'流程的表单类型', N'bpm_model_form_type', 0, N'流程的表单类型', N'103', N'2022-01-11 23:50:45', N'103', N'2022-01-11 23:50:45', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (142, N'任务分配规则的类型', N'bpm_task_candidate_strategy', 0, N'BPM 任务的候选人的策略', N'103', N'2022-01-12 23:21:04', N'103', N'2024-03-06 02:53:59', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (144, N'代码生成的场景枚举', N'infra_codegen_scene', 0, N'代码生成的场景枚举', N'1', N'2022-02-02 13:14:45', N'1', N'2022-03-10 16:33:46', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (145, N'角色类型', N'system_role_type', 0, N'角色类型', N'1', N'2022-02-16 13:01:46', N'1', N'2022-02-16 13:01:46', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (146, N'文件存储器', N'infra_file_storage', 0, N'文件存储器', N'1', N'2022-03-15 00:24:38', N'1', N'2022-03-15 00:24:38', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (147, N'OAuth 2.0 授权类型', N'system_oauth2_grant_type', 0, N'OAuth 2.0 授权类型(模式)', N'1', N'2022-05-12 00:20:52', N'1', N'2022-05-11 16:25:49', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (149, N'商品 SPU 状态', N'product_spu_status', 0, N'商品 SPU 状态', N'1', N'2022-10-24 21:19:04', N'1', N'2022-10-24 21:19:08', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (150, N'优惠类型', N'promotion_discount_type', 0, N'优惠类型', N'1', N'2022-11-01 12:46:06', N'1', N'2022-11-01 12:46:06', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (151, N'优惠劵模板的有限期类型', N'promotion_coupon_template_validity_type', 0, N'优惠劵模板的有限期类型', N'1', N'2022-11-02 00:06:20', N'1', N'2022-11-04 00:08:26', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (152, N'营销的商品范围', N'promotion_product_scope', 0, N'营销的商品范围', N'1', N'2022-11-02 00:28:01', N'1', N'2022-11-02 00:28:01', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (153, N'优惠劵的状态', N'promotion_coupon_status', 0, N'优惠劵的状态', N'1', N'2022-11-04 00:14:49', N'1', N'2022-11-04 00:14:49', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (154, N'优惠劵的领取方式', N'promotion_coupon_take_type', 0, N'优惠劵的领取方式', N'1', N'2022-11-04 19:12:27', N'1', N'2022-11-04 19:12:27', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (155, N'促销活动的状态', N'promotion_activity_status', 0, N'促销活动的状态', N'1', N'2022-11-04 22:54:23', N'1', N'2022-11-04 22:54:23', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (156, N'营销的条件类型', N'promotion_condition_type', 0, N'营销的条件类型', N'1', N'2022-11-04 22:59:23', N'1', N'2022-11-04 22:59:23', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (157, N'交易售后状态', N'trade_after_sale_status', 0, N'交易售后状态', N'1', N'2022-11-19 20:52:56', N'1', N'2022-11-19 20:52:56', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (158, N'交易售后的类型', N'trade_after_sale_type', 0, N'交易售后的类型', N'1', N'2022-11-19 21:04:09', N'1', N'2022-11-19 21:04:09', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (159, N'交易售后的方式', N'trade_after_sale_way', 0, N'交易售后的方式', N'1', N'2022-11-19 21:39:04', N'1', N'2022-11-19 21:39:04', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (160, N'终端', N'terminal', 0, N'终端', N'1', N'2022-12-10 10:50:50', N'1', N'2022-12-10 10:53:11', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (161, N'交易订单的类型', N'trade_order_type', 0, N'交易订单的类型', N'1', N'2022-12-10 16:33:54', N'1', N'2022-12-10 16:33:54', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (162, N'交易订单的状态', N'trade_order_status', 0, N'交易订单的状态', N'1', N'2022-12-10 16:48:44', N'1', N'2022-12-10 16:48:44', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (163, N'交易订单项的售后状态', N'trade_order_item_after_sale_status', 0, N'交易订单项的售后状态', N'1', N'2022-12-10 20:58:08', N'1', N'2022-12-10 20:58:08', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (164, N'公众号自动回复的请求关键字匹配模式', N'mp_auto_reply_request_match', 0, N'公众号自动回复的请求关键字匹配模式', N'1', N'2023-01-16 23:29:56', N'1', N'2023-01-16 23:29:56', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (165, N'公众号的消息类型', N'mp_message_type', 0, N'公众号的消息类型', N'1', N'2023-01-17 22:17:09', N'1', N'2023-01-17 22:17:09', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (166, N'邮件发送状态', N'system_mail_send_status', 0, N'邮件发送状态', N'1', N'2023-01-26 09:53:13', N'1', N'2023-01-26 09:53:13', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (167, N'站内信模版的类型', N'system_notify_template_type', 0, N'站内信模版的类型', N'1', N'2023-01-28 10:35:10', N'1', N'2023-01-28 10:35:10', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (168, N'代码生成的前端类型', N'infra_codegen_front_type', 0, N'', N'1', N'2023-04-12 23:57:52', N'1', N'2023-04-12 23:57:52', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (170, N'快递计费方式', N'trade_delivery_express_charge_mode', 0, N'用于商城交易模块配送管理', N'1', N'2023-05-21 22:45:03', N'1', N'2023-05-21 22:45:03', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (171, N'积分业务类型', N'member_point_biz_type', 0, N'', N'1', N'2023-06-10 12:15:00', N'1', N'2023-06-28 13:48:20', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (173, N'支付通知类型', N'pay_notify_type', 0, NULL, N'1', N'2023-07-20 12:23:03', N'1', N'2023-07-20 12:23:03', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (174, N'会员经验业务类型', N'member_experience_biz_type', 0, NULL, N'', N'2023-08-22 12:41:01', N'', N'2023-08-22 12:41:01', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (175, N'交易配送类型', N'trade_delivery_type', 0, N'', N'1', N'2023-08-23 00:03:14', N'1', N'2023-08-23 00:03:14', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (176, N'分佣模式', N'brokerage_enabled_condition', 0, NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (177, N'分销关系绑定模式', N'brokerage_bind_mode', 0, NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (178, N'佣金提现类型', N'brokerage_withdraw_type', 0, NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (179, N'佣金记录业务类型', N'brokerage_record_biz_type', 0, NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (180, N'佣金记录状态', N'brokerage_record_status', 0, NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (181, N'佣金提现状态', N'brokerage_withdraw_status', 0, NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (182, N'佣金提现银行', N'brokerage_bank_name', 0, NULL, N'', N'2023-09-28 02:46:05', N'', N'2023-09-28 02:46:05', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (183, N'砍价记录的状态', N'promotion_bargain_record_status', 0, N'', N'1', N'2023-10-05 10:41:08', N'1', N'2023-10-05 10:41:08', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (184, N'拼团记录的状态', N'promotion_combination_record_status', 0, N'', N'1', N'2023-10-08 07:24:25', N'1', N'2023-10-08 07:24:25', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (185, N'回款-回款方式', N'crm_receivable_return_type', 0, N'回款-回款方式', N'1', N'2023-10-18 21:54:10', N'1', N'2023-10-18 21:54:10', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (186, N'CRM 客户行业', N'crm_customer_industry', 0, N'CRM 客户所属行业', N'1', N'2023-10-28 22:57:07', N'1', N'2024-02-18 23:30:22', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (187, N'客户等级', N'crm_customer_level', 0, N'CRM 客户等级', N'1', N'2023-10-28 22:59:12', N'1', N'2023-10-28 15:11:16', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (188, N'客户来源', N'crm_customer_source', 0, N'CRM 客户来源', N'1', N'2023-10-28 23:00:34', N'1', N'2023-10-28 15:11:16', N'0', NULL) +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (600, N'Banner 位置', N'promotion_banner_position', 0, N'', N'1', N'2023-10-08 07:24:25', N'1', N'2023-11-04 13:04:02', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (601, N'社交类型', N'system_social_type', 0, N'', N'1', N'2023-11-04 13:03:54', N'1', N'2023-11-04 13:03:54', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (604, N'产品状态', N'crm_product_status', 0, N'', N'1', N'2023-10-30 21:47:59', N'1', N'2023-10-30 21:48:45', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (605, N'CRM 数据权限的级别', N'crm_permission_level', 0, N'', N'1', N'2023-11-30 09:51:59', N'1', N'2023-11-30 09:51:59', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (606, N'CRM 审批状态', N'crm_audit_status', 0, N'', N'1', N'2023-11-30 18:56:23', N'1', N'2023-11-30 18:56:23', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (607, N'CRM 产品单位', N'crm_product_unit', 0, N'', N'1', N'2023-12-05 23:01:51', N'1', N'2023-12-05 23:01:51', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (608, N'CRM 跟进方式', N'crm_follow_up_type', 0, N'', N'1', N'2024-01-15 20:48:05', N'1', N'2024-01-15 20:48:05', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (609, N'支付转账类型', N'pay_transfer_type', 0, N'', N'1', N'2023-10-28 16:27:18', N'1', N'2023-10-28 16:27:18', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (610, N'转账订单状态', N'pay_transfer_status', 0, N'', N'1', N'2023-10-28 16:18:32', N'1', N'2023-10-28 16:18:32', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (611, N'ERP 库存明细的业务类型', N'erp_stock_record_biz_type', 0, N'ERP 库存明细的业务类型', N'1', N'2024-02-05 18:07:02', N'1', N'2024-02-05 18:07:02', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (612, N'ERP 审批状态', N'erp_audit_status', 0, N'', N'1', N'2024-02-06 00:00:07', N'1', N'2024-02-06 00:00:07', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (613, N'BPM 监听器类型', N'bpm_process_listener_type', 0, N'', N'1', N'2024-03-23 12:52:24', N'1', N'2024-03-09 15:54:28', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (615, N'BPM 监听器值类型', N'bpm_process_listener_value_type', 0, N'', N'1', N'2024-03-23 13:00:31', N'1', N'2024-03-23 13:00:31', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (616, N'时间间隔', N'date_interval', 0, N'', N'1', N'2024-03-29 22:50:09', N'1', N'2024-03-29 22:50:09', N'0', N'1970-01-01 00:00:00') +GO +INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted, deleted_time) VALUES (619, N'CRM 商机结束状态类型', N'crm_business_end_status_type', 0, N'', N'1', N'2024-04-13 23:23:00', N'1', N'2024-04-13 23:23:00', N'0', N'1970-01-01 00:00:00') +GO +SET IDENTITY_INSERT system_dict_type OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_login_log +-- ---------------------------- +DROP TABLE IF EXISTS system_login_log; +CREATE TABLE system_login_log +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + log_type bigint NOT NULL, + trace_id nvarchar(64) DEFAULT '' NOT NULL, + user_id bigint DEFAULT 0 NOT NULL, + user_type tinyint DEFAULT 0 NOT NULL, + username nvarchar(50) DEFAULT '' NOT NULL, + result tinyint NOT NULL, + user_ip nvarchar(50) NOT NULL, + user_agent nvarchar(512) NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'访问ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'日志类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'log_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'链路追踪编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'trace_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'user_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户账号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'username' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'登陆结果', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'result' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户 IP', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'user_ip' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'浏览器 UA', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'user_agent' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'系统访问记录', + 'SCHEMA', N'dbo', + 'TABLE', N'system_login_log' +GO + +-- ---------------------------- +-- Table structure for system_mail_account +-- ---------------------------- +DROP TABLE IF EXISTS system_mail_account; +CREATE TABLE system_mail_account +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + mail nvarchar(255) NOT NULL, + username nvarchar(255) NOT NULL, + password nvarchar(255) NOT NULL, + host nvarchar(255) NOT NULL, + port int NOT NULL, + ssl_enable varchar(1) DEFAULT '0' NOT NULL, + starttls_enable varchar(1) DEFAULT '0' NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'主键', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_account', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'邮箱', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_account', + 'COLUMN', N'mail' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户名', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_account', + 'COLUMN', N'username' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'密码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_account', + 'COLUMN', N'password' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'SMTP 服务器域名', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_account', + 'COLUMN', N'host' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'SMTP 服务器端口', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_account', + 'COLUMN', N'port' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否开启 SSL', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_account', + 'COLUMN', N'ssl_enable' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否开启 STARTTLS', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_account', + 'COLUMN', N'starttls_enable' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_account', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_account', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_account', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_account', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_account', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'邮箱账号表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_account' +GO + +-- ---------------------------- +-- Records of system_mail_account +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_mail_account ON +GO +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (1, N'7684413@qq.com', N'7684413@qq.com', N'1234576', N'127.0.0.1', 8080, N'0', N'0', N'1', N'2023-01-25 17:39:52', N'1', N'2024-04-24 09:13:56', N'0') +GO +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (2, N'ydym_test@163.com', N'ydym_test@163.com', N'WBZTEINMIFVRYSOE', N'smtp.163.com', 465, N'1', N'0', N'1', N'2023-01-26 01:26:03', N'1', N'2023-04-12 22:39:38', N'0') +GO +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (3, N'76854114@qq.com', N'3335', N'11234', N'yunai1.cn', 466, N'0', N'0', N'1', N'2023-01-27 15:06:38', N'1', N'2023-01-27 07:08:36', N'1') +GO +INSERT INTO system_mail_account (id, mail, username, password, host, port, ssl_enable, starttls_enable, creator, create_time, updater, update_time, deleted) VALUES (4, N'7685413x@qq.com', N'2', N'3', N'4', 5, N'1', N'0', N'1', N'2023-04-12 23:05:06', N'1', N'2023-04-12 15:05:11', N'1') +GO +SET IDENTITY_INSERT system_mail_account OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_mail_log +-- ---------------------------- +DROP TABLE IF EXISTS system_mail_log; +CREATE TABLE system_mail_log +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint DEFAULT NULL NULL, + user_type tinyint DEFAULT NULL NULL, + to_mail nvarchar(255) NOT NULL, + account_id bigint NOT NULL, + from_mail nvarchar(255) NOT NULL, + template_id bigint NOT NULL, + template_code nvarchar(63) NOT NULL, + template_nickname nvarchar(255) DEFAULT NULL NULL, + template_title nvarchar(255) NOT NULL, + template_content nvarchar(4000) NOT NULL, + template_params nvarchar(255) NOT NULL, + send_status tinyint DEFAULT 0 NOT NULL, + send_time datetime2 DEFAULT NULL NULL, + send_message_id nvarchar(255) DEFAULT NULL NULL, + send_exception nvarchar(4000) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'user_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'接收邮箱地址', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'to_mail' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'邮箱账号编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'account_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'发送邮箱地址', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'from_mail' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'template_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板编码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'template_code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模版发送人名称', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'template_nickname' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'邮件标题', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'template_title' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'邮件内容', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'template_content' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'邮件参数', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'template_params' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'发送状态', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'send_status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'发送时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'send_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'发送返回的消息 ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'send_message_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'发送异常', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'send_exception' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'邮件日志表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_log' +GO + +-- ---------------------------- +-- Table structure for system_mail_template +-- ---------------------------- +DROP TABLE IF EXISTS system_mail_template; +CREATE TABLE system_mail_template +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(63) NOT NULL, + code nvarchar(63) NOT NULL, + account_id bigint NOT NULL, + nickname nvarchar(255) DEFAULT NULL NULL, + title nvarchar(255) NOT NULL, + content nvarchar(4000) NOT NULL, + params nvarchar(255) NOT NULL, + status tinyint NOT NULL, + remark nvarchar(255) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板名称', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板编码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'发送的邮箱账号编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'account_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'发送人名称', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'nickname' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板标题', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'title' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板内容', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'content' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'参数数组', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'params' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'开启状态', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'备注', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'邮件模版表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_mail_template' +GO + +-- ---------------------------- +-- Records of system_mail_template +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_mail_template ON +GO +INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (13, N'后台用户短信登录', N'admin-sms-login', 1, N'奥特曼', N'你猜我猜', N'

    您的验证码是{code},名字是{name}

    ', N'["code","name"]', 0, N'3', N'1', N'2021-10-11 08:10:00', N'1', N'2023-12-02 19:51:14', N'0') +GO +INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (14, N'测试模版', N'test_01', 2, N'芋艿', N'一个标题', N'

    你是 {key01} 吗?


    是的话,赶紧 {key02} 一下!

    ', N'["key01","key02"]', 0, NULL, N'1', N'2023-01-26 01:27:40', N'1', N'2023-01-27 10:32:16', N'0') +GO +INSERT INTO system_mail_template (id, name, code, account_id, nickname, title, content, params, status, remark, creator, create_time, updater, update_time, deleted) VALUES (15, N'3', N'2', 2, N'7', N'4', N'

    45

    ', N'[]', 1, N'80', N'1', N'2023-01-27 15:50:35', N'1', N'2023-01-27 16:34:49', N'0') +GO +SET IDENTITY_INSERT system_mail_template OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_menu +-- ---------------------------- +DROP TABLE IF EXISTS system_menu; +CREATE TABLE system_menu +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(50) NOT NULL, + permission nvarchar(100) DEFAULT '' NOT NULL, + type tinyint NOT NULL, + sort int DEFAULT 0 NOT NULL, + parent_id bigint DEFAULT 0 NOT NULL, + path nvarchar(200) DEFAULT '' NULL, + icon nvarchar(100) DEFAULT '#' NULL, + component nvarchar(255) DEFAULT NULL NULL, + component_name nvarchar(255) DEFAULT NULL NULL, + status tinyint DEFAULT 0 NOT NULL, + visible varchar(1) DEFAULT '1' NOT NULL, + keep_alive varchar(1) DEFAULT '1' NOT NULL, + always_show varchar(1) DEFAULT '1' NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'菜单ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'菜单名称', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'权限标识', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'permission' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'菜单类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'显示顺序', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'sort' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'父菜单ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'parent_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'路由地址', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'path' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'菜单图标', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'icon' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'组件路径', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'component' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'组件名', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'component_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'菜单状态', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否可见', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'visible' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否缓存', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'keep_alive' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否总是显示', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'always_show' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'菜单权限表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_menu' +GO + +-- ---------------------------- +-- Records of system_menu +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_menu ON +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1, N'系统管理', N'', 1, 10, 0, N'/system', N'ep:tools', NULL, NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-02-29 01:04:23', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2, N'基础设施', N'', 1, 20, 0, N'/infra', N'ep:monitor', NULL, NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-03-01 08:28:40', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (5, N'OA 示例', N'', 1, 40, 1185, N'oa', N'fa:road', NULL, NULL, 0, N'1', N'1', N'1', N'admin', N'2021-09-20 16:26:19', N'1', N'2024-02-29 12:38:13', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (100, N'用户管理', N'system:user:list', 2, 1, 1, N'user', N'ep:avatar', N'system/user/index', N'SystemUser', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-02-29 01:02:04', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (101, N'角色管理', N'', 2, 2, 1, N'role', N'ep:user', N'system/role/index', N'SystemRole', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-02-29 01:03:28', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (102, N'菜单管理', N'', 2, 3, 1, N'menu', N'ep:menu', N'system/menu/index', N'SystemMenu', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-02-29 01:03:50', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (103, N'部门管理', N'', 2, 4, 1, N'dept', N'fa:address-card', N'system/dept/index', N'SystemDept', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-02-29 01:06:28', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (104, N'岗位管理', N'', 2, 5, 1, N'post', N'fa:address-book-o', N'system/post/index', N'SystemPost', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-02-29 01:06:39', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (105, N'字典管理', N'', 2, 6, 1, N'dict', N'ep:collection', N'system/dict/index', N'SystemDictType', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-02-29 01:07:12', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (106, N'配置管理', N'', 2, 8, 2, N'config', N'fa:connectdevelop', N'infra/config/index', N'InfraConfig', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-04-23 00:02:45', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (107, N'通知公告', N'', 2, 4, 2739, N'notice', N'ep:takeaway-box', N'system/notice/index', N'SystemNotice', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-04-22 23:56:17', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (108, N'审计日志', N'', 1, 9, 1, N'log', N'ep:document-copy', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-02-29 01:08:30', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (109, N'令牌管理', N'', 2, 2, 1261, N'token', N'fa:key', N'system/oauth2/token/index', N'SystemTokenClient', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-02-29 01:13:48', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (110, N'定时任务', N'', 2, 7, 2, N'job', N'fa-solid:tasks', N'infra/job/index', N'InfraJob', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-02-29 08:57:36', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (111, N'MySQL 监控', N'', 2, 1, 2740, N'druid', N'fa-solid:box', N'infra/druid/index', N'InfraDruid', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-04-23 00:05:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (112, N'Java 监控', N'', 2, 3, 2740, N'admin-server', N'ep:coffee-cup', N'infra/server/index', N'InfraAdminServer', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-04-23 00:06:57', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (113, N'Redis 监控', N'', 2, 2, 2740, N'redis', N'fa:reddit-square', N'infra/redis/index', N'InfraRedis', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-04-23 00:06:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (114, N'表单构建', N'infra:build:list', 2, 2, 2, N'build', N'fa:wpforms', N'infra/build/index', N'InfraBuild', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-02-29 08:51:35', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (115, N'代码生成', N'infra:codegen:query', 2, 1, 2, N'codegen', N'ep:document-copy', N'infra/codegen/index', N'InfraCodegen', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-02-29 08:51:06', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (116, N'API 接口', N'infra:swagger:list', 2, 3, 2, N'swagger', N'fa:fighter-jet', N'infra/swagger/index', N'InfraSwagger', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-04-23 00:01:24', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (500, N'操作日志', N'', 2, 1, 108, N'operate-log', N'ep:position', N'system/operatelog/index', N'SystemOperateLog', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-02-29 01:09:59', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (501, N'登录日志', N'', 2, 2, 108, N'login-log', N'ep:promotion', N'system/loginlog/index', N'SystemLoginLog', 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2024-02-29 01:10:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1001, N'用户查询', N'system:user:query', 3, 1, 100, N'', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1002, N'用户新增', N'system:user:create', 3, 2, 100, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1003, N'用户修改', N'system:user:update', 3, 3, 100, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1004, N'用户删除', N'system:user:delete', 3, 4, 100, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1005, N'用户导出', N'system:user:export', 3, 5, 100, N'', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1006, N'用户导入', N'system:user:import', 3, 6, 100, N'', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1007, N'重置密码', N'system:user:update-password', 3, 7, 100, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1008, N'角色查询', N'system:role:query', 3, 1, 101, N'', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1009, N'角色新增', N'system:role:create', 3, 2, 101, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1010, N'角色修改', N'system:role:update', 3, 3, 101, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1011, N'角色删除', N'system:role:delete', 3, 4, 101, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1012, N'角色导出', N'system:role:export', 3, 5, 101, N'', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1013, N'菜单查询', N'system:menu:query', 3, 1, 102, N'', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1014, N'菜单新增', N'system:menu:create', 3, 2, 102, N'', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1015, N'菜单修改', N'system:menu:update', 3, 3, 102, N'', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1016, N'菜单删除', N'system:menu:delete', 3, 4, 102, N'', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1017, N'部门查询', N'system:dept:query', 3, 1, 103, N'', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1018, N'部门新增', N'system:dept:create', 3, 2, 103, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1019, N'部门修改', N'system:dept:update', 3, 3, 103, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1020, N'部门删除', N'system:dept:delete', 3, 4, 103, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1021, N'岗位查询', N'system:post:query', 3, 1, 104, N'', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1022, N'岗位新增', N'system:post:create', 3, 2, 104, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1023, N'岗位修改', N'system:post:update', 3, 3, 104, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1024, N'岗位删除', N'system:post:delete', 3, 4, 104, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1025, N'岗位导出', N'system:post:export', 3, 5, 104, N'', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1026, N'字典查询', N'system:dict:query', 3, 1, 105, N'#', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1027, N'字典新增', N'system:dict:create', 3, 2, 105, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1028, N'字典修改', N'system:dict:update', 3, 3, 105, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1029, N'字典删除', N'system:dict:delete', 3, 4, 105, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1030, N'字典导出', N'system:dict:export', 3, 5, 105, N'#', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1031, N'配置查询', N'infra:config:query', 3, 1, 106, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1032, N'配置新增', N'infra:config:create', 3, 2, 106, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1033, N'配置修改', N'infra:config:update', 3, 3, 106, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1034, N'配置删除', N'infra:config:delete', 3, 4, 106, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1035, N'配置导出', N'infra:config:export', 3, 5, 106, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1036, N'公告查询', N'system:notice:query', 3, 1, 107, N'#', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1037, N'公告新增', N'system:notice:create', 3, 2, 107, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1038, N'公告修改', N'system:notice:update', 3, 3, 107, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1039, N'公告删除', N'system:notice:delete', 3, 4, 107, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1040, N'操作查询', N'system:operate-log:query', 3, 1, 500, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1042, N'日志导出', N'system:operate-log:export', 3, 2, 500, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1043, N'登录查询', N'system:login-log:query', 3, 1, 501, N'#', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1045, N'日志导出', N'system:login-log:export', 3, 3, 501, N'#', N'#', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1046, N'令牌列表', N'system:oauth2-token:page', 3, 1, 109, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-05-09 23:54:42', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1048, N'令牌删除', N'system:oauth2-token:delete', 3, 2, 109, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-05-09 23:54:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1050, N'任务新增', N'infra:job:create', 3, 2, 110, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1051, N'任务修改', N'infra:job:update', 3, 3, 110, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1052, N'任务删除', N'infra:job:delete', 3, 4, 110, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1053, N'状态修改', N'infra:job:update', 3, 5, 110, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1054, N'任务导出', N'infra:job:export', 3, 7, 110, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1056, N'生成修改', N'infra:codegen:update', 3, 2, 115, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1057, N'生成删除', N'infra:codegen:delete', 3, 3, 115, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1058, N'导入代码', N'infra:codegen:create', 3, 2, 115, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1059, N'预览代码', N'infra:codegen:preview', 3, 4, 115, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1060, N'生成代码', N'infra:codegen:download', 3, 5, 115, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'admin', N'2021-01-05 17:03:48', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1063, N'设置角色菜单权限', N'system:permission:assign-role-menu', 3, 6, 101, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-01-06 17:53:44', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1064, N'设置角色数据权限', N'system:permission:assign-role-data-scope', 3, 7, 101, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-01-06 17:56:31', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1065, N'设置用户角色', N'system:permission:assign-user-role', 3, 8, 101, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-01-07 10:23:28', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1066, N'获得 Redis 监控信息', N'infra:redis:get-monitor-info', 3, 1, 113, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-01-26 01:02:31', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1067, N'获得 Redis Key 列表', N'infra:redis:get-key-list', 3, 2, 113, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-01-26 01:02:52', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1070, N'代码生成案例', N'', 1, 1, 2, N'demo', N'ep:aim', N'infra/testDemo/index', NULL, 0, N'1', N'1', N'1', N'', N'2021-02-06 12:42:49', N'1', N'2023-11-15 23:45:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1075, N'任务触发', N'infra:job:trigger', 3, 8, 110, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-02-07 13:03:10', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1077, N'链路追踪', N'', 2, 4, 2740, N'skywalking', N'fa:eye', N'infra/skywalking/index', N'InfraSkyWalking', 0, N'1', N'1', N'1', N'', N'2021-02-08 20:41:31', N'1', N'2024-04-23 00:07:15', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1078, N'访问日志', N'', 2, 1, 1083, N'api-access-log', N'ep:place', N'infra/apiAccessLog/index', N'InfraApiAccessLog', 0, N'1', N'1', N'1', N'', N'2021-02-26 01:32:59', N'1', N'2024-02-29 08:54:57', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1082, N'日志导出', N'infra:api-access-log:export', 3, 2, 1078, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-02-26 01:32:59', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1083, N'API 日志', N'', 2, 4, 2, N'log', N'fa:tasks', NULL, NULL, 0, N'1', N'1', N'1', N'', N'2021-02-26 02:18:24', N'1', N'2024-04-22 23:58:36', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1084, N'错误日志', N'infra:api-error-log:query', 2, 2, 1083, N'api-error-log', N'ep:warning-filled', N'infra/apiErrorLog/index', N'InfraApiErrorLog', 0, N'1', N'1', N'1', N'', N'2021-02-26 07:53:20', N'1', N'2024-02-29 08:55:17', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1085, N'日志处理', N'infra:api-error-log:update-status', 3, 2, 1084, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-02-26 07:53:20', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1086, N'日志导出', N'infra:api-error-log:export', 3, 3, 1084, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-02-26 07:53:20', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1087, N'任务查询', N'infra:job:query', 3, 1, 110, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2021-03-10 01:26:19', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1088, N'日志查询', N'infra:api-access-log:query', 3, 1, 1078, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2021-03-10 01:28:04', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1089, N'日志查询', N'infra:api-error-log:query', 3, 1, 1084, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2021-03-10 01:29:09', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1090, N'文件列表', N'', 2, 5, 1243, N'file', N'ep:upload-filled', N'infra/file/index', N'InfraFile', 0, N'1', N'1', N'1', N'', N'2021-03-12 20:16:20', N'1', N'2024-02-29 08:53:02', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1091, N'文件查询', N'infra:file:query', 3, 1, 1090, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-03-12 20:16:20', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1092, N'文件删除', N'infra:file:delete', 3, 4, 1090, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-03-12 20:16:20', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1093, N'短信管理', N'', 1, 1, 2739, N'sms', N'ep:message', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2021-04-05 01:10:16', N'1', N'2024-04-22 23:56:03', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1094, N'短信渠道', N'', 2, 0, 1093, N'sms-channel', N'fa:stack-exchange', N'system/sms/channel/index', N'SystemSmsChannel', 0, N'1', N'1', N'1', N'', N'2021-04-01 11:07:15', N'1', N'2024-02-29 01:15:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1095, N'短信渠道查询', N'system:sms-channel:query', 3, 1, 1094, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-04-01 11:07:15', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1096, N'短信渠道创建', N'system:sms-channel:create', 3, 2, 1094, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-04-01 11:07:15', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1097, N'短信渠道更新', N'system:sms-channel:update', 3, 3, 1094, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-04-01 11:07:15', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1098, N'短信渠道删除', N'system:sms-channel:delete', 3, 4, 1094, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-04-01 11:07:15', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1100, N'短信模板', N'', 2, 1, 1093, N'sms-template', N'ep:connection', N'system/sms/template/index', N'SystemSmsTemplate', 0, N'1', N'1', N'1', N'', N'2021-04-01 17:35:17', N'1', N'2024-02-29 01:16:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1101, N'短信模板查询', N'system:sms-template:query', 3, 1, 1100, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-04-01 17:35:17', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1102, N'短信模板创建', N'system:sms-template:create', 3, 2, 1100, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-04-01 17:35:17', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1103, N'短信模板更新', N'system:sms-template:update', 3, 3, 1100, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-04-01 17:35:17', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1104, N'短信模板删除', N'system:sms-template:delete', 3, 4, 1100, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-04-01 17:35:17', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1105, N'短信模板导出', N'system:sms-template:export', 3, 5, 1100, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-04-01 17:35:17', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1106, N'发送测试短信', N'system:sms-template:send-sms', 3, 6, 1100, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2021-04-11 00:26:40', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1107, N'短信日志', N'', 2, 2, 1093, N'sms-log', N'fa:edit', N'system/sms/log/index', N'SystemSmsLog', 0, N'1', N'1', N'1', N'', N'2021-04-11 08:37:05', N'1', N'2024-02-29 08:49:02', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1108, N'短信日志查询', N'system:sms-log:query', 3, 1, 1107, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-04-11 08:37:05', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1109, N'短信日志导出', N'system:sms-log:export', 3, 5, 1107, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-04-11 08:37:05', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1117, N'支付管理', N'', 1, 30, 0, N'/pay', N'ep:money', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2021-12-25 16:43:41', N'1', N'2024-02-29 08:58:38', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1118, N'请假查询', N'', 2, 0, 5, N'leave', N'fa:leanpub', N'bpm/oa/leave/index', N'BpmOALeave', 0, N'1', N'1', N'1', N'', N'2021-09-20 08:51:03', N'1', N'2024-02-29 12:38:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1119, N'请假申请查询', N'bpm:oa-leave:query', 3, 1, 1118, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-09-20 08:51:03', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1120, N'请假申请创建', N'bpm:oa-leave:create', 3, 2, 1118, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-09-20 08:51:03', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1126, N'应用信息', N'', 2, 1, 1117, N'app', N'fa:apple', N'pay/app/index', N'PayApp', 0, N'1', N'1', N'1', N'', N'2021-11-10 01:13:30', N'1', N'2024-02-29 08:59:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1127, N'支付应用信息查询', N'pay:app:query', 3, 1, 1126, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-11-10 01:13:31', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1128, N'支付应用信息创建', N'pay:app:create', 3, 2, 1126, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-11-10 01:13:31', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1129, N'支付应用信息更新', N'pay:app:update', 3, 3, 1126, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-11-10 01:13:31', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1130, N'支付应用信息删除', N'pay:app:delete', 3, 4, 1126, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-11-10 01:13:31', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1132, N'秘钥解析', N'pay:channel:parsing', 3, 6, 1129, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2021-11-08 15:15:47', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1133, N'支付商户信息查询', N'pay:merchant:query', 3, 1, 1132, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-11-10 01:13:41', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1134, N'支付商户信息创建', N'pay:merchant:create', 3, 2, 1132, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-11-10 01:13:41', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1135, N'支付商户信息更新', N'pay:merchant:update', 3, 3, 1132, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-11-10 01:13:41', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1136, N'支付商户信息删除', N'pay:merchant:delete', 3, 4, 1132, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-11-10 01:13:41', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1137, N'支付商户信息导出', N'pay:merchant:export', 3, 5, 1132, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-11-10 01:13:41', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1138, N'租户列表', N'', 2, 0, 1224, N'list', N'ep:house', N'system/tenant/index', N'SystemTenant', 0, N'1', N'1', N'1', N'', N'2021-12-14 12:31:43', N'1', N'2024-02-29 01:01:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1139, N'租户查询', N'system:tenant:query', 3, 1, 1138, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-14 12:31:44', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1140, N'租户创建', N'system:tenant:create', 3, 2, 1138, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-14 12:31:44', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1141, N'租户更新', N'system:tenant:update', 3, 3, 1138, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-14 12:31:44', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1142, N'租户删除', N'system:tenant:delete', 3, 4, 1138, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-14 12:31:44', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1143, N'租户导出', N'system:tenant:export', 3, 5, 1138, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-14 12:31:44', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1150, N'秘钥解析', N'', 3, 6, 1129, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2021-11-08 15:15:47', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1161, N'退款订单', N'', 2, 3, 1117, N'refund', N'fa:registered', N'pay/refund/index', N'PayRefund', 0, N'1', N'1', N'1', N'', N'2021-12-25 08:29:07', N'1', N'2024-02-29 08:59:20', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1162, N'退款订单查询', N'pay:refund:query', 3, 1, 1161, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-25 08:29:07', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1163, N'退款订单创建', N'pay:refund:create', 3, 2, 1161, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-25 08:29:07', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1164, N'退款订单更新', N'pay:refund:update', 3, 3, 1161, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-25 08:29:07', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1165, N'退款订单删除', N'pay:refund:delete', 3, 4, 1161, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-25 08:29:07', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1166, N'退款订单导出', N'pay:refund:export', 3, 5, 1161, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-25 08:29:07', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1173, N'支付订单', N'', 2, 2, 1117, N'order', N'fa:cc-paypal', N'pay/order/index', N'PayOrder', 0, N'1', N'1', N'1', N'', N'2021-12-25 08:49:43', N'1', N'2024-02-29 08:59:43', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1174, N'支付订单查询', N'pay:order:query', 3, 1, 1173, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-25 08:49:43', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1175, N'支付订单创建', N'pay:order:create', 3, 2, 1173, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-25 08:49:43', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1176, N'支付订单更新', N'pay:order:update', 3, 3, 1173, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-25 08:49:43', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1177, N'支付订单删除', N'pay:order:delete', 3, 4, 1173, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-25 08:49:43', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1178, N'支付订单导出', N'pay:order:export', 3, 5, 1173, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-25 08:49:43', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1185, N'工作流程', N'', 1, 50, 0, N'/bpm', N'fa:medium', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2021-12-30 20:26:36', N'1', N'2024-02-29 12:43:43', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1186, N'流程管理', N'', 1, 10, 1185, N'manager', N'fa:dedent', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2021-12-30 20:28:30', N'1', N'2024-02-29 12:36:02', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1187, N'流程表单', N'', 2, 2, 1186, N'form', N'fa:hdd-o', N'bpm/form/index', N'BpmForm', 0, N'1', N'1', N'1', N'', N'2021-12-30 12:38:22', N'1', N'2024-03-19 12:25:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1188, N'表单查询', N'bpm:form:query', 3, 1, 1187, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-30 12:38:22', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1189, N'表单创建', N'bpm:form:create', 3, 2, 1187, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-30 12:38:22', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1190, N'表单更新', N'bpm:form:update', 3, 3, 1187, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-30 12:38:22', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1191, N'表单删除', N'bpm:form:delete', 3, 4, 1187, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-30 12:38:22', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1192, N'表单导出', N'bpm:form:export', 3, 5, 1187, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2021-12-30 12:38:22', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1193, N'流程模型', N'', 2, 1, 1186, N'model', N'fa-solid:project-diagram', N'bpm/model/index', N'BpmModel', 0, N'1', N'1', N'1', N'1', N'2021-12-31 23:24:58', N'1', N'2024-03-19 12:25:19', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1194, N'模型查询', N'bpm:model:query', 3, 1, 1193, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-03 19:01:10', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1195, N'模型创建', N'bpm:model:create', 3, 2, 1193, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-03 19:01:24', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1196, N'模型导入', N'bpm:model:import', 3, 3, 1193, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-03 19:01:35', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1197, N'模型更新', N'bpm:model:update', 3, 4, 1193, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-03 19:02:28', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1198, N'模型删除', N'bpm:model:delete', 3, 5, 1193, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-03 19:02:43', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1199, N'模型发布', N'bpm:model:deploy', 3, 6, 1193, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-03 19:03:24', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1200, N'审批中心', N'', 2, 20, 1185, N'task', N'fa:tasks', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-07 23:51:48', N'1', N'2024-03-21 00:33:15', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1201, N'我的流程', N'', 2, 1, 1200, N'my', N'fa-solid:book', N'bpm/processInstance/index', N'BpmProcessInstanceMy', 0, N'1', N'1', N'1', N'', N'2022-01-07 15:53:44', N'1', N'2024-03-21 23:52:12', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1202, N'流程实例的查询', N'bpm:process-instance:query', 3, 1, 1201, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-01-07 15:53:44', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1207, N'待办任务', N'', 2, 10, 1200, N'todo', N'fa:slack', N'bpm/task/todo/index', N'BpmTodoTask', 0, N'1', N'1', N'1', N'1', N'2022-01-08 10:33:37', N'1', N'2024-02-29 12:37:39', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1208, N'已办任务', N'', 2, 20, 1200, N'done', N'fa:delicious', N'bpm/task/done/index', N'BpmDoneTask', 0, N'1', N'1', N'1', N'1', N'2022-01-08 10:34:13', N'1', N'2024-02-29 12:37:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1209, N'用户分组', N'', 2, 4, 1186, N'user-group', N'fa:user-secret', N'bpm/group/index', N'BpmUserGroup', 0, N'1', N'1', N'1', N'', N'2022-01-14 02:14:20', N'1', N'2024-03-21 23:55:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1210, N'用户组查询', N'bpm:user-group:query', 3, 1, 1209, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-01-14 02:14:20', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1211, N'用户组创建', N'bpm:user-group:create', 3, 2, 1209, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-01-14 02:14:20', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1212, N'用户组更新', N'bpm:user-group:update', 3, 3, 1209, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-01-14 02:14:20', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1213, N'用户组删除', N'bpm:user-group:delete', 3, 4, 1209, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-01-14 02:14:20', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1215, N'流程定义查询', N'bpm:process-definition:query', 3, 10, 1193, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-23 00:21:43', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1216, N'流程任务分配规则查询', N'bpm:task-assign-rule:query', 3, 20, 1193, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-23 00:26:53', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1217, N'流程任务分配规则创建', N'bpm:task-assign-rule:create', 3, 21, 1193, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-23 00:28:15', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1218, N'流程任务分配规则更新', N'bpm:task-assign-rule:update', 3, 22, 1193, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-23 00:28:41', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1219, N'流程实例的创建', N'bpm:process-instance:create', 3, 2, 1201, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-23 00:36:15', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1220, N'流程实例的取消', N'bpm:process-instance:cancel', 3, 3, 1201, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-23 00:36:33', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1221, N'流程任务的查询', N'bpm:task:query', 3, 1, 1207, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-23 00:38:52', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1222, N'流程任务的更新', N'bpm:task:update', 3, 2, 1207, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-01-23 00:39:24', N'1', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1224, N'租户管理', N'', 2, 0, 1, N'tenant', N'fa-solid:house-user', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2022-02-20 01:41:13', N'1', N'2024-02-29 00:59:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1225, N'租户套餐', N'', 2, 0, 1224, N'package', N'fa:bars', N'system/tenantPackage/index', N'SystemTenantPackage', 0, N'1', N'1', N'1', N'', N'2022-02-19 17:44:06', N'1', N'2024-02-29 01:01:43', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1226, N'租户套餐查询', N'system:tenant-package:query', 3, 1, 1225, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-02-19 17:44:06', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1227, N'租户套餐创建', N'system:tenant-package:create', 3, 2, 1225, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-02-19 17:44:06', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1228, N'租户套餐更新', N'system:tenant-package:update', 3, 3, 1225, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-02-19 17:44:06', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1229, N'租户套餐删除', N'system:tenant-package:delete', 3, 4, 1225, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-02-19 17:44:06', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1237, N'文件配置', N'', 2, 0, 1243, N'file-config', N'fa-solid:file-signature', N'infra/fileConfig/index', N'InfraFileConfig', 0, N'1', N'1', N'1', N'', N'2022-03-15 14:35:28', N'1', N'2024-02-29 08:52:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1238, N'文件配置查询', N'infra:file-config:query', 3, 1, 1237, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-03-15 14:35:28', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1239, N'文件配置创建', N'infra:file-config:create', 3, 2, 1237, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-03-15 14:35:28', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1240, N'文件配置更新', N'infra:file-config:update', 3, 3, 1237, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-03-15 14:35:28', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1241, N'文件配置删除', N'infra:file-config:delete', 3, 4, 1237, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-03-15 14:35:28', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1242, N'文件配置导出', N'infra:file-config:export', 3, 5, 1237, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-03-15 14:35:28', N'', N'2022-04-20 17:03:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1243, N'文件管理', N'', 2, 6, 2, N'file', N'ep:files', NULL, N'', 0, N'1', N'1', N'1', N'1', N'2022-03-16 23:47:40', N'1', N'2024-04-23 00:02:11', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1254, N'作者动态', N'', 1, 0, 0, N'https://www.iocoder.cn', N'ep:avatar', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2022-04-23 01:03:15', N'1', N'2023-12-08 23:40:01', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1255, N'数据源配置', N'', 2, 1, 2, N'data-source-config', N'ep:data-analysis', N'infra/dataSourceConfig/index', N'InfraDataSourceConfig', 0, N'1', N'1', N'1', N'', N'2022-04-27 14:37:32', N'1', N'2024-02-29 08:51:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1256, N'数据源配置查询', N'infra:data-source-config:query', 3, 1, 1255, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-04-27 14:37:32', N'', N'2022-04-27 14:37:32', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1257, N'数据源配置创建', N'infra:data-source-config:create', 3, 2, 1255, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-04-27 14:37:32', N'', N'2022-04-27 14:37:32', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1258, N'数据源配置更新', N'infra:data-source-config:update', 3, 3, 1255, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-04-27 14:37:32', N'', N'2022-04-27 14:37:32', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1259, N'数据源配置删除', N'infra:data-source-config:delete', 3, 4, 1255, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-04-27 14:37:32', N'', N'2022-04-27 14:37:32', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1260, N'数据源配置导出', N'infra:data-source-config:export', 3, 5, 1255, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-04-27 14:37:32', N'', N'2022-04-27 14:37:32', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1261, N'OAuth 2.0', N'', 2, 10, 1, N'oauth2', N'fa:dashcube', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2022-05-09 23:38:17', N'1', N'2024-02-29 01:12:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1263, N'应用管理', N'', 2, 0, 1261, N'oauth2/application', N'fa:hdd-o', N'system/oauth2/client/index', N'SystemOAuth2Client', 0, N'1', N'1', N'1', N'', N'2022-05-10 16:26:33', N'1', N'2024-02-29 01:13:14', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1264, N'客户端查询', N'system:oauth2-client:query', 3, 1, 1263, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-05-10 16:26:33', N'1', N'2022-05-11 00:31:06', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1265, N'客户端创建', N'system:oauth2-client:create', 3, 2, 1263, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-05-10 16:26:33', N'1', N'2022-05-11 00:31:23', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1266, N'客户端更新', N'system:oauth2-client:update', 3, 3, 1263, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-05-10 16:26:33', N'1', N'2022-05-11 00:31:28', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1267, N'客户端删除', N'system:oauth2-client:delete', 3, 4, 1263, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-05-10 16:26:33', N'1', N'2022-05-11 00:31:33', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1281, N'报表管理', N'', 2, 40, 0, N'/report', N'ep:pie-chart', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2022-07-10 20:22:15', N'1', N'2024-02-29 12:33:03', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (1282, N'报表设计器', N'', 2, 1, 1281, N'jimu-report', N'ep:trend-charts', N'report/jmreport/index', N'GoView', 0, N'1', N'1', N'1', N'1', N'2022-07-10 20:26:36', N'1', N'2024-02-29 12:33:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2000, N'商品中心', N'', 1, 60, 2362, N'product', N'fa:product-hunt', NULL, NULL, 0, N'1', N'1', N'1', N'', N'2022-07-29 15:53:53', N'1', N'2023-09-30 11:52:36', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2002, N'商品分类', N'', 2, 2, 2000, N'category', N'ep:cellphone', N'mall/product/category/index', N'ProductCategory', 0, N'1', N'1', N'1', N'', N'2022-07-29 15:53:53', N'1', N'2023-08-21 10:27:15', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2003, N'分类查询', N'product:category:query', 3, 1, 2002, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-07-29 15:53:53', N'', N'2022-07-29 15:53:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2004, N'分类创建', N'product:category:create', 3, 2, 2002, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-07-29 15:53:53', N'', N'2022-07-29 15:53:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2005, N'分类更新', N'product:category:update', 3, 3, 2002, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-07-29 15:53:53', N'', N'2022-07-29 15:53:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2006, N'分类删除', N'product:category:delete', 3, 4, 2002, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-07-29 15:53:53', N'', N'2022-07-29 15:53:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2008, N'商品品牌', N'', 2, 3, 2000, N'brand', N'ep:chicken', N'mall/product/brand/index', N'ProductBrand', 0, N'1', N'1', N'1', N'', N'2022-07-30 13:52:44', N'1', N'2023-08-21 10:27:28', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2009, N'品牌查询', N'product:brand:query', 3, 1, 2008, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-07-30 13:52:44', N'', N'2022-07-30 13:52:44', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2010, N'品牌创建', N'product:brand:create', 3, 2, 2008, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-07-30 13:52:44', N'', N'2022-07-30 13:52:44', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2011, N'品牌更新', N'product:brand:update', 3, 3, 2008, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-07-30 13:52:44', N'', N'2022-07-30 13:52:44', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2012, N'品牌删除', N'product:brand:delete', 3, 4, 2008, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-07-30 13:52:44', N'', N'2022-07-30 13:52:44', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2014, N'商品列表', N'', 2, 1, 2000, N'spu', N'ep:apple', N'mall/product/spu/index', N'ProductSpu', 0, N'1', N'1', N'1', N'', N'2022-07-30 14:22:58', N'1', N'2023-08-21 10:27:01', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2015, N'商品查询', N'product:spu:query', 3, 1, 2014, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-07-30 14:22:58', N'', N'2022-07-30 14:22:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2016, N'商品创建', N'product:spu:create', 3, 2, 2014, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-07-30 14:22:58', N'', N'2022-07-30 14:22:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2017, N'商品更新', N'product:spu:update', 3, 3, 2014, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-07-30 14:22:58', N'', N'2022-07-30 14:22:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2018, N'商品删除', N'product:spu:delete', 3, 4, 2014, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-07-30 14:22:58', N'', N'2022-07-30 14:22:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2019, N'商品属性', N'', 2, 4, 2000, N'property', N'ep:cold-drink', N'mall/product/property/index', N'ProductProperty', 0, N'1', N'1', N'1', N'', N'2022-08-01 14:55:35', N'1', N'2023-08-26 11:01:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2020, N'规格查询', N'product:property:query', 3, 1, 2019, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-08-01 14:55:35', N'', N'2022-12-12 20:26:24', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2021, N'规格创建', N'product:property:create', 3, 2, 2019, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-08-01 14:55:35', N'', N'2022-12-12 20:26:30', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2022, N'规格更新', N'product:property:update', 3, 3, 2019, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-08-01 14:55:35', N'', N'2022-12-12 20:26:33', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2023, N'规格删除', N'product:property:delete', 3, 4, 2019, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-08-01 14:55:35', N'', N'2022-12-12 20:26:37', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2025, N'Banner', N'', 2, 100, 2387, N'banner', N'fa:bandcamp', N'mall/promotion/banner/index', NULL, 0, N'1', N'1', N'1', N'', N'2022-08-01 14:56:14', N'1', N'2023-10-24 20:20:06', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2026, N'Banner查询', N'promotion:banner:query', 3, 1, 2025, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2022-08-01 14:56:14', N'1', N'2023-10-24 20:20:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2027, N'Banner创建', N'promotion:banner:create', 3, 2, 2025, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2022-08-01 14:56:14', N'1', N'2023-10-24 20:20:23', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2028, N'Banner更新', N'promotion:banner:update', 3, 3, 2025, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2022-08-01 14:56:14', N'1', N'2023-10-24 20:20:28', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2029, N'Banner删除', N'promotion:banner:delete', 3, 4, 2025, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2022-08-01 14:56:14', N'1', N'2023-10-24 20:20:36', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2030, N'营销中心', N'', 1, 70, 2362, N'promotion', N'ep:present', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2022-10-31 21:25:09', N'1', N'2023-09-30 11:54:27', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2032, N'优惠劵列表', N'', 2, 1, 2365, N'template', N'ep:discount', N'mall/promotion/coupon/template/index', N'PromotionCouponTemplate', 0, N'1', N'1', N'1', N'', N'2022-10-31 22:27:14', N'1', N'2023-10-03 12:40:06', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2033, N'优惠劵模板查询', N'promotion:coupon-template:query', 3, 1, 2032, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-10-31 22:27:14', N'', N'2022-10-31 22:27:14', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2034, N'优惠劵模板创建', N'promotion:coupon-template:create', 3, 2, 2032, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-10-31 22:27:14', N'', N'2022-10-31 22:27:14', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2035, N'优惠劵模板更新', N'promotion:coupon-template:update', 3, 3, 2032, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-10-31 22:27:14', N'', N'2022-10-31 22:27:14', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2036, N'优惠劵模板删除', N'promotion:coupon-template:delete', 3, 4, 2032, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-10-31 22:27:14', N'', N'2022-10-31 22:27:14', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2038, N'领取记录', N'', 2, 2, 2365, N'list', N'ep:collection-tag', N'mall/promotion/coupon/index', N'PromotionCoupon', 0, N'1', N'1', N'1', N'', N'2022-11-03 23:21:31', N'1', N'2023-10-03 12:55:30', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2039, N'优惠劵查询', N'promotion:coupon:query', 3, 1, 2038, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-03 23:21:31', N'', N'2022-11-03 23:21:31', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2040, N'优惠劵删除', N'promotion:coupon:delete', 3, 4, 2038, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-03 23:21:31', N'', N'2022-11-03 23:21:31', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2041, N'满减送', N'', 2, 10, 2390, N'reward-activity', N'ep:goblet-square-full', N'mall/promotion/rewardActivity/index', N'PromotionRewardActivity', 0, N'1', N'1', N'1', N'', N'2022-11-04 23:47:49', N'1', N'2023-10-21 19:24:46', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2042, N'满减送活动查询', N'promotion:reward-activity:query', 3, 1, 2041, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-04 23:47:49', N'', N'2022-11-04 23:47:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2043, N'满减送活动创建', N'promotion:reward-activity:create', 3, 2, 2041, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-04 23:47:49', N'', N'2022-11-04 23:47:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2044, N'满减送活动更新', N'promotion:reward-activity:update', 3, 3, 2041, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-04 23:47:50', N'', N'2022-11-04 23:47:50', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2045, N'满减送活动删除', N'promotion:reward-activity:delete', 3, 4, 2041, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-04 23:47:50', N'', N'2022-11-04 23:47:50', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2046, N'满减送活动关闭', N'promotion:reward-activity:close', 3, 5, 2041, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2022-11-05 10:42:53', N'1', N'2022-11-05 10:42:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2047, N'限时折扣', N'', 2, 7, 2390, N'discount-activity', N'ep:timer', N'mall/promotion/discountActivity/index', N'PromotionDiscountActivity', 0, N'1', N'1', N'1', N'', N'2022-11-05 17:12:15', N'1', N'2023-10-21 19:24:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2048, N'限时折扣活动查询', N'promotion:discount-activity:query', 3, 1, 2047, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-05 17:12:15', N'', N'2022-11-05 17:12:15', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2049, N'限时折扣活动创建', N'promotion:discount-activity:create', 3, 2, 2047, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-05 17:12:15', N'', N'2022-11-05 17:12:15', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2050, N'限时折扣活动更新', N'promotion:discount-activity:update', 3, 3, 2047, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-05 17:12:16', N'', N'2022-11-05 17:12:16', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2051, N'限时折扣活动删除', N'promotion:discount-activity:delete', 3, 4, 2047, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-05 17:12:16', N'', N'2022-11-05 17:12:16', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2052, N'限时折扣活动关闭', N'promotion:discount-activity:close', 3, 5, 2047, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-05 17:12:16', N'', N'2022-11-05 17:12:16', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2059, N'秒杀商品', N'', 2, 2, 2209, N'activity', N'ep:basketball', N'mall/promotion/seckill/activity/index', N'PromotionSeckillActivity', 0, N'1', N'1', N'1', N'', N'2022-11-06 22:24:49', N'1', N'2023-06-24 18:57:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2060, N'秒杀活动查询', N'promotion:seckill-activity:query', 3, 1, 2059, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-06 22:24:49', N'', N'2022-11-06 22:24:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2061, N'秒杀活动创建', N'promotion:seckill-activity:create', 3, 2, 2059, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-06 22:24:49', N'', N'2022-11-06 22:24:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2062, N'秒杀活动更新', N'promotion:seckill-activity:update', 3, 3, 2059, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-06 22:24:49', N'', N'2022-11-06 22:24:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2063, N'秒杀活动删除', N'promotion:seckill-activity:delete', 3, 4, 2059, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-06 22:24:49', N'', N'2022-11-06 22:24:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2066, N'秒杀时段', N'', 2, 1, 2209, N'config', N'ep:baseball', N'mall/promotion/seckill/config/index', N'PromotionSeckillConfig', 0, N'1', N'1', N'1', N'', N'2022-11-15 19:46:50', N'1', N'2023-06-24 18:57:14', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2067, N'秒杀时段查询', N'promotion:seckill-config:query', 3, 1, 2066, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2022-11-15 19:46:51', N'1', N'2023-06-24 17:50:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2068, N'秒杀时段创建', N'promotion:seckill-config:create', 3, 2, 2066, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2022-11-15 19:46:51', N'1', N'2023-06-24 17:48:39', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2069, N'秒杀时段更新', N'promotion:seckill-config:update', 3, 3, 2066, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2022-11-15 19:46:51', N'1', N'2023-06-24 17:50:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2070, N'秒杀时段删除', N'promotion:seckill-config:delete', 3, 4, 2066, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2022-11-15 19:46:51', N'1', N'2023-06-24 17:50:32', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2072, N'订单中心', N'', 1, 65, 2362, N'trade', N'ep:eleme', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2022-11-19 18:57:19', N'1', N'2023-09-30 11:54:07', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2073, N'售后退款', N'', 2, 2, 2072, N'after-sale', N'ep:refrigerator', N'mall/trade/afterSale/index', N'TradeAfterSale', 0, N'1', N'1', N'1', N'', N'2022-11-19 20:15:32', N'1', N'2023-10-01 21:42:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2074, N'售后查询', N'trade:after-sale:query', 3, 1, 2073, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-11-19 20:15:33', N'1', N'2022-12-10 21:04:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2075, N'秒杀活动关闭', N'promotion:seckill-activity:close', 3, 5, 2059, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2022-11-28 20:20:15', N'1', N'2023-10-03 18:34:28', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2076, N'订单列表', N'', 2, 1, 2072, N'order', N'ep:list', N'mall/trade/order/index', N'TradeOrder', 0, N'1', N'1', N'1', N'1', N'2022-12-10 21:05:44', N'1', N'2023-10-01 21:42:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2083, N'地区管理', N'', 2, 14, 1, N'area', N'fa:map-marker', N'system/area/index', N'SystemArea', 0, N'1', N'1', N'1', N'1', N'2022-12-23 17:35:05', N'1', N'2024-02-29 08:50:28', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2084, N'公众号管理', N'', 1, 100, 0, N'/mp', N'ep:compass', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-01 20:11:04', N'1', N'2024-02-29 12:39:30', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2085, N'账号管理', N'', 2, 1, 2084, N'account', N'fa:user', N'mp/account/index', N'MpAccount', 0, N'1', N'1', N'1', N'1', N'2023-01-01 20:13:31', N'1', N'2024-02-29 12:42:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2086, N'新增账号', N'mp:account:create', 3, 1, 2085, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-01 20:21:40', N'1', N'2023-01-07 17:32:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2087, N'修改账号', N'mp:account:update', 3, 2, 2085, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-07 17:32:46', N'1', N'2023-01-07 17:32:46', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2088, N'查询账号', N'mp:account:query', 3, 0, 2085, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-07 17:33:07', N'1', N'2023-01-07 17:33:07', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2089, N'删除账号', N'mp:account:delete', 3, 3, 2085, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-07 17:33:21', N'1', N'2023-01-07 17:33:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2090, N'生成二维码', N'mp:account:qr-code', 3, 4, 2085, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-07 17:33:58', N'1', N'2023-01-07 17:33:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2091, N'清空 API 配额', N'mp:account:clear-quota', 3, 5, 2085, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-07 18:20:32', N'1', N'2023-01-07 18:20:59', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2092, N'数据统计', N'mp:statistics:query', 2, 2, 2084, N'statistics', N'ep:trend-charts', N'mp/statistics/index', N'MpStatistics', 0, N'1', N'1', N'1', N'1', N'2023-01-07 20:17:36', N'1', N'2024-02-29 12:42:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2093, N'标签管理', N'', 2, 3, 2084, N'tag', N'ep:collection-tag', N'mp/tag/index', N'MpTag', 0, N'1', N'1', N'1', N'1', N'2023-01-08 11:37:32', N'1', N'2024-02-29 12:42:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2094, N'查询标签', N'mp:tag:query', 3, 0, 2093, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-08 11:59:03', N'1', N'2023-01-08 11:59:03', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2095, N'新增标签', N'mp:tag:create', 3, 1, 2093, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-08 11:59:23', N'1', N'2023-01-08 11:59:23', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2096, N'修改标签', N'mp:tag:update', 3, 2, 2093, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-08 11:59:41', N'1', N'2023-01-08 11:59:41', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2097, N'删除标签', N'mp:tag:delete', 3, 3, 2093, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-08 12:00:04', N'1', N'2023-01-08 12:00:13', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2098, N'同步标签', N'mp:tag:sync', 3, 4, 2093, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-08 12:00:29', N'1', N'2023-01-08 12:00:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2099, N'粉丝管理', N'', 2, 4, 2084, N'user', N'fa:user-secret', N'mp/user/index', N'MpUser', 0, N'1', N'1', N'1', N'1', N'2023-01-08 16:51:20', N'1', N'2024-02-29 12:42:39', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2100, N'查询粉丝', N'mp:user:query', 3, 0, 2099, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-08 17:16:59', N'1', N'2023-01-08 17:17:23', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2101, N'修改粉丝', N'mp:user:update', 3, 1, 2099, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-08 17:17:11', N'1', N'2023-01-08 17:17:11', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2102, N'同步粉丝', N'mp:user:sync', 3, 2, 2099, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-08 17:17:40', N'1', N'2023-01-08 17:17:40', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2103, N'消息管理', N'', 2, 5, 2084, N'message', N'ep:message', N'mp/message/index', N'MpMessage', 0, N'1', N'1', N'1', N'1', N'2023-01-08 18:44:19', N'1', N'2024-02-29 12:42:50', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2104, N'图文发表记录', N'', 2, 10, 2084, N'free-publish', N'ep:edit-pen', N'mp/freePublish/index', N'MpFreePublish', 0, N'1', N'1', N'1', N'1', N'2023-01-13 00:30:50', N'1', N'2024-02-29 12:43:31', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2105, N'查询发布列表', N'mp:free-publish:query', 3, 1, 2104, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-13 07:19:17', N'1', N'2023-01-13 07:19:17', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2106, N'发布草稿', N'mp:free-publish:submit', 3, 2, 2104, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-13 07:19:46', N'1', N'2023-01-13 07:19:46', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2107, N'删除发布记录', N'mp:free-publish:delete', 3, 3, 2104, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-13 07:20:01', N'1', N'2023-01-13 07:20:01', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2108, N'图文草稿箱', N'', 2, 9, 2084, N'draft', N'ep:edit', N'mp/draft/index', N'MpDraft', 0, N'1', N'1', N'1', N'1', N'2023-01-13 07:40:21', N'1', N'2024-02-29 12:43:26', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2109, N'新建草稿', N'mp:draft:create', 3, 1, 2108, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-13 23:15:30', N'1', N'2023-01-13 23:15:44', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2110, N'修改草稿', N'mp:draft:update', 3, 2, 2108, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-14 10:08:47', N'1', N'2023-01-14 10:08:47', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2111, N'查询草稿', N'mp:draft:query', 3, 0, 2108, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-14 10:09:01', N'1', N'2023-01-14 10:09:01', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2112, N'删除草稿', N'mp:draft:delete', 3, 3, 2108, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-14 10:09:19', N'1', N'2023-01-14 10:09:19', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2113, N'素材管理', N'', 2, 8, 2084, N'material', N'ep:basketball', N'mp/material/index', N'MpMaterial', 0, N'1', N'1', N'1', N'1', N'2023-01-14 14:12:07', N'1', N'2024-02-29 12:43:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2114, N'上传临时素材', N'mp:material:upload-temporary', 3, 1, 2113, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-14 15:33:55', N'1', N'2023-01-14 15:33:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2115, N'上传永久素材', N'mp:material:upload-permanent', 3, 2, 2113, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-14 15:34:14', N'1', N'2023-01-14 15:34:14', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2116, N'删除素材', N'mp:material:delete', 3, 3, 2113, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-14 15:35:37', N'1', N'2023-01-14 15:35:37', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2117, N'上传图文图片', N'mp:material:upload-news-image', 3, 4, 2113, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-14 15:36:31', N'1', N'2023-01-14 15:36:31', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2118, N'查询素材', N'mp:material:query', 3, 5, 2113, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-14 15:39:22', N'1', N'2023-01-14 15:39:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2119, N'菜单管理', N'', 2, 6, 2084, N'menu', N'ep:menu', N'mp/menu/index', N'MpMenu', 0, N'1', N'1', N'1', N'1', N'2023-01-14 17:43:54', N'1', N'2024-02-29 12:42:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2120, N'自动回复', N'', 2, 7, 2084, N'auto-reply', N'fa-solid:republican', N'mp/autoReply/index', N'MpAutoReply', 0, N'1', N'1', N'1', N'1', N'2023-01-15 22:13:09', N'1', N'2024-02-29 12:43:10', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2121, N'查询回复', N'mp:auto-reply:query', 3, 0, 2120, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-16 22:28:41', N'1', N'2023-01-16 22:28:41', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2122, N'新增回复', N'mp:auto-reply:create', 3, 1, 2120, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-16 22:28:54', N'1', N'2023-01-16 22:28:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2123, N'修改回复', N'mp:auto-reply:update', 3, 2, 2120, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-16 22:29:05', N'1', N'2023-01-16 22:29:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2124, N'删除回复', N'mp:auto-reply:delete', 3, 3, 2120, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-16 22:29:34', N'1', N'2023-01-16 22:29:34', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2125, N'查询菜单', N'mp:menu:query', 3, 0, 2119, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-17 23:05:41', N'1', N'2023-01-17 23:05:41', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2126, N'保存菜单', N'mp:menu:save', 3, 1, 2119, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-17 23:06:01', N'1', N'2023-01-17 23:06:01', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2127, N'删除菜单', N'mp:menu:delete', 3, 2, 2119, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-17 23:06:16', N'1', N'2023-01-17 23:06:16', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2128, N'查询消息', N'mp:message:query', 3, 0, 2103, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-17 23:07:14', N'1', N'2023-01-17 23:07:14', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2129, N'发送消息', N'mp:message:send', 3, 1, 2103, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-17 23:07:26', N'1', N'2023-01-17 23:07:26', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2130, N'邮箱管理', N'', 2, 2, 2739, N'mail', N'fa-solid:mail-bulk', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-25 17:27:44', N'1', N'2024-04-22 23:56:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2131, N'邮箱账号', N'', 2, 0, 2130, N'mail-account', N'fa:universal-access', N'system/mail/account/index', N'SystemMailAccount', 0, N'1', N'1', N'1', N'', N'2023-01-25 09:33:48', N'1', N'2024-02-29 08:48:16', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2132, N'账号查询', N'system:mail-account:query', 3, 1, 2131, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-01-25 09:33:48', N'', N'2023-01-25 09:33:48', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2133, N'账号创建', N'system:mail-account:create', 3, 2, 2131, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-01-25 09:33:48', N'', N'2023-01-25 09:33:48', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2134, N'账号更新', N'system:mail-account:update', 3, 3, 2131, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-01-25 09:33:48', N'', N'2023-01-25 09:33:48', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2135, N'账号删除', N'system:mail-account:delete', 3, 4, 2131, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-01-25 09:33:48', N'', N'2023-01-25 09:33:48', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2136, N'邮件模版', N'', 2, 0, 2130, N'mail-template', N'fa:tag', N'system/mail/template/index', N'SystemMailTemplate', 0, N'1', N'1', N'1', N'', N'2023-01-25 12:05:31', N'1', N'2024-02-29 08:48:41', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2137, N'模版查询', N'system:mail-template:query', 3, 1, 2136, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-01-25 12:05:31', N'', N'2023-01-25 12:05:31', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2138, N'模版创建', N'system:mail-template:create', 3, 2, 2136, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-01-25 12:05:31', N'', N'2023-01-25 12:05:31', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2139, N'模版更新', N'system:mail-template:update', 3, 3, 2136, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-01-25 12:05:31', N'', N'2023-01-25 12:05:31', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2140, N'模版删除', N'system:mail-template:delete', 3, 4, 2136, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-01-25 12:05:31', N'', N'2023-01-25 12:05:31', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2141, N'邮件记录', N'', 2, 0, 2130, N'mail-log', N'fa:edit', N'system/mail/log/index', N'SystemMailLog', 0, N'1', N'1', N'1', N'', N'2023-01-26 02:16:50', N'1', N'2024-02-29 08:48:51', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2142, N'日志查询', N'system:mail-log:query', 3, 1, 2141, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-01-26 02:16:50', N'', N'2023-01-26 02:16:50', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2143, N'发送测试邮件', N'system:mail-template:send-mail', 3, 5, 2136, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-26 23:29:15', N'1', N'2023-01-26 23:29:15', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2144, N'站内信管理', N'', 1, 3, 2739, N'notify', N'ep:message-box', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-28 10:25:18', N'1', N'2024-04-22 23:56:12', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2145, N'模板管理', N'', 2, 0, 2144, N'notify-template', N'fa:archive', N'system/notify/template/index', N'SystemNotifyTemplate', 0, N'1', N'1', N'1', N'', N'2023-01-28 02:26:42', N'1', N'2024-02-29 08:49:14', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2146, N'站内信模板查询', N'system:notify-template:query', 3, 1, 2145, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-01-28 02:26:42', N'', N'2023-01-28 02:26:42', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2147, N'站内信模板创建', N'system:notify-template:create', 3, 2, 2145, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-01-28 02:26:42', N'', N'2023-01-28 02:26:42', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2148, N'站内信模板更新', N'system:notify-template:update', 3, 3, 2145, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-01-28 02:26:42', N'', N'2023-01-28 02:26:42', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2149, N'站内信模板删除', N'system:notify-template:delete', 3, 4, 2145, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-01-28 02:26:42', N'', N'2023-01-28 02:26:42', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2150, N'发送测试站内信', N'system:notify-template:send-notify', 3, 5, 2145, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-01-28 10:54:43', N'1', N'2023-01-28 10:54:43', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2151, N'消息记录', N'', 2, 0, 2144, N'notify-message', N'fa:edit', N'system/notify/message/index', N'SystemNotifyMessage', 0, N'1', N'1', N'1', N'', N'2023-01-28 04:28:22', N'1', N'2024-02-29 08:49:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2152, N'站内信消息查询', N'system:notify-message:query', 3, 1, 2151, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-01-28 04:28:22', N'', N'2023-01-28 04:28:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2153, N'大屏设计器', N'', 2, 2, 1281, N'go-view', N'fa:area-chart', N'report/goview/index', N'JimuReport', 0, N'1', N'1', N'1', N'1', N'2023-02-07 00:03:19', N'1', N'2024-02-29 12:34:02', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2154, N'创建项目', N'report:go-view-project:create', 3, 1, 2153, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-02-07 19:25:14', N'1', N'2023-02-07 19:25:14', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2155, N'更新项目', N'report:go-view-project:update', 3, 2, 2153, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-02-07 19:25:34', N'1', N'2024-04-24 20:01:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2156, N'查询项目', N'report:go-view-project:query', 3, 0, 2153, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-02-07 19:25:53', N'1', N'2023-02-07 19:25:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2157, N'使用 SQL 查询数据', N'report:go-view-data:get-by-sql', 3, 3, 2153, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-02-07 19:26:15', N'1', N'2023-02-07 19:26:15', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2158, N'使用 HTTP 查询数据', N'report:go-view-data:get-by-http', 3, 4, 2153, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'1', N'2023-02-07 19:26:35', N'1', N'2023-02-07 19:26:35', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2159, N'Boot 开发文档', N'', 1, 1, 0, N'https://doc.iocoder.cn/', N'ep:document', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2023-02-10 22:46:28', N'1', N'2023-12-02 21:32:20', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2160, N'Cloud 开发文档', N'', 1, 2, 0, N'https://cloud.iocoder.cn', N'ep:document-copy', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2023-02-10 22:47:07', N'1', N'2023-12-02 21:32:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2161, N'接入示例', N'', 1, 99, 1117, N'demo', N'fa-solid:dragon', N'pay/demo/index', NULL, 0, N'1', N'1', N'1', N'', N'2023-02-11 14:21:42', N'1', N'2024-01-18 23:50:00', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2162, N'商品导出', N'product:spu:export', 3, 5, 2014, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2022-07-30 14:22:58', N'', N'2022-07-30 14:22:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2164, N'配送管理', N'', 1, 3, 2072, N'delivery', N'ep:shopping-cart', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-05-18 09:18:02', N'1', N'2023-09-28 10:58:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2165, N'快递发货', N'', 1, 0, 2164, N'express', N'ep:bicycle', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-05-18 09:22:06', N'1', N'2023-08-30 21:02:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2166, N'门店自提', N'', 1, 1, 2164, N'pick-up-store', N'ep:add-location', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-05-18 09:23:14', N'1', N'2023-08-30 21:03:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2167, N'快递公司', N'', 2, 0, 2165, N'express', N'ep:compass', N'mall/trade/delivery/express/index', N'Express', 0, N'1', N'1', N'1', N'1', N'2023-05-18 09:27:21', N'1', N'2023-08-30 21:02:59', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2168, N'快递公司查询', N'trade:delivery:express:query', 3, 1, 2167, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-18 09:37:53', N'', N'2023-05-18 09:37:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2169, N'快递公司创建', N'trade:delivery:express:create', 3, 2, 2167, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-18 09:37:53', N'', N'2023-05-18 09:37:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2170, N'快递公司更新', N'trade:delivery:express:update', 3, 3, 2167, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-18 09:37:53', N'', N'2023-05-18 09:37:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2171, N'快递公司删除', N'trade:delivery:express:delete', 3, 4, 2167, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-18 09:37:53', N'', N'2023-05-18 09:37:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2172, N'快递公司导出', N'trade:delivery:express:export', 3, 5, 2167, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-18 09:37:53', N'', N'2023-05-18 09:37:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2173, N'运费模版', N'trade:delivery:express-template:query', 2, 1, 2165, N'express-template', N'ep:coordinate', N'mall/trade/delivery/expressTemplate/index', N'ExpressTemplate', 0, N'1', N'1', N'1', N'1', N'2023-05-20 06:48:10', N'1', N'2023-08-30 21:03:13', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2174, N'快递运费模板查询', N'trade:delivery:express-template:query', 3, 1, 2173, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-20 06:49:53', N'', N'2023-05-20 06:49:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2175, N'快递运费模板创建', N'trade:delivery:express-template:create', 3, 2, 2173, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-20 06:49:53', N'', N'2023-05-20 06:49:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2176, N'快递运费模板更新', N'trade:delivery:express-template:update', 3, 3, 2173, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-20 06:49:53', N'', N'2023-05-20 06:49:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2177, N'快递运费模板删除', N'trade:delivery:express-template:delete', 3, 4, 2173, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-20 06:49:53', N'', N'2023-05-20 06:49:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2178, N'快递运费模板导出', N'trade:delivery:express-template:export', 3, 5, 2173, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-20 06:49:53', N'', N'2023-05-20 06:49:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2179, N'门店管理', N'', 2, 1, 2166, N'pick-up-store', N'ep:basketball', N'mall/trade/delivery/pickUpStore/index', N'PickUpStore', 0, N'1', N'1', N'1', N'1', N'2023-05-25 10:50:00', N'1', N'2023-08-30 21:03:28', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2180, N'自提门店查询', N'trade:delivery:pick-up-store:query', 3, 1, 2179, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-25 10:53:29', N'', N'2023-05-25 10:53:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2181, N'自提门店创建', N'trade:delivery:pick-up-store:create', 3, 2, 2179, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-25 10:53:29', N'', N'2023-05-25 10:53:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2182, N'自提门店更新', N'trade:delivery:pick-up-store:update', 3, 3, 2179, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-25 10:53:29', N'', N'2023-05-25 10:53:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2183, N'自提门店删除', N'trade:delivery:pick-up-store:delete', 3, 4, 2179, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-25 10:53:29', N'', N'2023-05-25 10:53:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2184, N'自提门店导出', N'trade:delivery:pick-up-store:export', 3, 5, 2179, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-05-25 10:53:29', N'', N'2023-05-25 10:53:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2209, N'秒杀活动', N'', 2, 3, 2030, N'seckill', N'ep:place', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-06-24 17:39:13', N'1', N'2023-06-24 18:55:15', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2262, N'会员中心', N'', 1, 55, 0, N'/member', N'ep:bicycle', NULL, NULL, 0, N'1', N'1', N'1', N'1', N'2023-06-10 00:42:03', N'1', N'2023-08-20 09:23:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2275, N'会员配置', N'', 2, 0, 2262, N'config', N'fa:archive', N'member/config/index', N'MemberConfig', 0, N'1', N'1', N'1', N'', N'2023-06-10 02:07:44', N'1', N'2023-10-01 23:41:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2276, N'会员配置查询', N'member:config:query', 3, 1, 2275, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2023-06-10 02:07:44', N'1', N'2024-04-24 19:48:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2277, N'会员配置保存', N'member:config:save', 3, 2, 2275, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2023-06-10 02:07:44', N'1', N'2024-04-24 19:49:28', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2281, N'签到配置', N'', 2, 2, 2300, N'config', N'ep:calendar', N'member/signin/config/index', N'SignInConfig', 0, N'1', N'1', N'1', N'', N'2023-06-10 03:26:12', N'1', N'2023-08-20 19:25:51', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2282, N'积分签到规则查询', N'point:sign-in-config:query', 3, 1, 2281, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-06-10 03:26:12', N'', N'2023-06-10 03:26:12', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2283, N'积分签到规则创建', N'point:sign-in-config:create', 3, 2, 2281, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-06-10 03:26:12', N'', N'2023-06-10 03:26:12', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2284, N'积分签到规则更新', N'point:sign-in-config:update', 3, 3, 2281, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-06-10 03:26:12', N'', N'2023-06-10 03:26:12', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2285, N'积分签到规则删除', N'point:sign-in-config:delete', 3, 4, 2281, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-06-10 03:26:12', N'', N'2023-06-10 03:26:12', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2287, N'会员积分', N'', 2, 10, 2262, N'record', N'fa:asterisk', N'member/point/record/index', N'PointRecord', 0, N'1', N'1', N'1', N'', N'2023-06-10 04:18:50', N'1', N'2023-10-01 23:42:11', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2288, N'用户积分记录查询', N'point:record:query', 3, 1, 2287, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-06-10 04:18:50', N'', N'2023-06-10 04:18:50', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2293, N'签到记录', N'', 2, 3, 2300, N'record', N'ep:chicken', N'member/signin/record/index', N'SignInRecord', 0, N'1', N'1', N'1', N'', N'2023-06-10 04:48:22', N'1', N'2023-08-20 19:26:02', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2294, N'用户签到积分查询', N'point:sign-in-record:query', 3, 1, 2293, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-06-10 04:48:22', N'', N'2023-06-10 04:48:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2297, N'用户签到积分删除', N'point:sign-in-record:delete', 3, 4, 2293, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-06-10 04:48:22', N'', N'2023-06-10 04:48:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2300, N'会员签到', N'', 1, 11, 2262, N'signin', N'ep:alarm-clock', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-06-27 22:49:53', N'1', N'2023-08-20 09:23:48', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2301, N'回调通知', N'', 2, 5, 1117, N'notify', N'ep:mute-notification', N'pay/notify/index', N'PayNotify', 0, N'1', N'1', N'1', N'', N'2023-07-20 04:41:32', N'1', N'2024-01-18 23:56:48', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2302, N'支付通知查询', N'pay:notify:query', 3, 1, 2301, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-07-20 04:41:32', N'', N'2023-07-20 04:41:32', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2303, N'拼团活动', N'', 2, 3, 2030, N'combination', N'fa:group', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-12 17:19:54', N'1', N'2023-08-12 17:20:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2304, N'拼团商品', N'', 2, 1, 2303, N'acitivity', N'ep:apple', N'mall/promotion/combination/activity/index', N'PromotionCombinationActivity', 0, N'1', N'1', N'1', N'1', N'2023-08-12 17:22:03', N'1', N'2023-08-12 17:22:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2305, N'拼团活动查询', N'promotion:combination-activity:query', 3, 1, 2304, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-12 17:54:32', N'1', N'2023-11-24 11:57:40', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2306, N'拼团活动创建', N'promotion:combination-activity:create', 3, 2, 2304, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-12 17:54:49', N'1', N'2023-08-12 17:54:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2307, N'拼团活动更新', N'promotion:combination-activity:update', 3, 3, 2304, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-12 17:55:04', N'1', N'2023-08-12 17:55:04', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2308, N'拼团活动删除', N'promotion:combination-activity:delete', 3, 4, 2304, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-12 17:55:23', N'1', N'2023-08-12 17:55:23', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2309, N'拼团活动关闭', N'promotion:combination-activity:close', 3, 5, 2304, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-12 17:55:37', N'1', N'2023-10-06 10:51:57', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2310, N'砍价活动', N'', 2, 4, 2030, N'bargain', N'ep:box', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-13 00:27:25', N'1', N'2023-08-13 00:27:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2311, N'砍价商品', N'', 2, 1, 2310, N'activity', N'ep:burger', N'mall/promotion/bargain/activity/index', N'PromotionBargainActivity', 0, N'1', N'1', N'1', N'1', N'2023-08-13 00:28:49', N'1', N'2023-10-05 01:16:23', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2312, N'砍价活动查询', N'promotion:bargain-activity:query', 3, 1, 2311, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-13 00:32:30', N'1', N'2023-08-13 00:32:30', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2313, N'砍价活动创建', N'promotion:bargain-activity:create', 3, 2, 2311, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-13 00:32:44', N'1', N'2023-08-13 00:32:44', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2314, N'砍价活动更新', N'promotion:bargain-activity:update', 3, 3, 2311, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-13 00:32:55', N'1', N'2023-08-13 00:32:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2315, N'砍价活动删除', N'promotion:bargain-activity:delete', 3, 4, 2311, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-13 00:34:50', N'1', N'2023-08-13 00:34:50', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2316, N'砍价活动关闭', N'promotion:bargain-activity:close', 3, 5, 2311, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-13 00:35:02', N'1', N'2023-08-13 00:35:02', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2317, N'会员管理', N'', 2, 0, 2262, N'user', N'ep:avatar', N'member/user/index', N'MemberUser', 0, N'1', N'1', N'1', N'', N'2023-08-19 04:12:15', N'1', N'2023-08-24 00:50:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2318, N'会员用户查询', N'member:user:query', 3, 1, 2317, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-19 04:12:15', N'', N'2023-08-19 04:12:15', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2319, N'会员用户更新', N'member:user:update', 3, 3, 2317, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-19 04:12:15', N'', N'2023-08-19 04:12:15', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2320, N'会员标签', N'', 2, 1, 2262, N'tag', N'ep:collection-tag', N'member/tag/index', N'MemberTag', 0, N'1', N'1', N'1', N'', N'2023-08-20 01:03:08', N'1', N'2023-08-20 09:23:19', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2321, N'会员标签查询', N'member:tag:query', 3, 1, 2320, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-20 01:03:08', N'', N'2023-08-20 01:03:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2322, N'会员标签创建', N'member:tag:create', 3, 2, 2320, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-20 01:03:08', N'', N'2023-08-20 01:03:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2323, N'会员标签更新', N'member:tag:update', 3, 3, 2320, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-20 01:03:08', N'', N'2023-08-20 01:03:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2324, N'会员标签删除', N'member:tag:delete', 3, 4, 2320, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-20 01:03:08', N'', N'2023-08-20 01:03:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2325, N'会员等级', N'', 2, 2, 2262, N'level', N'fa:level-up', N'member/level/index', N'MemberLevel', 0, N'1', N'1', N'1', N'', N'2023-08-22 12:41:01', N'1', N'2023-08-22 21:47:00', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2326, N'会员等级查询', N'member:level:query', 3, 1, 2325, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-22 12:41:02', N'', N'2023-08-22 12:41:02', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2327, N'会员等级创建', N'member:level:create', 3, 2, 2325, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-22 12:41:02', N'', N'2023-08-22 12:41:02', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2328, N'会员等级更新', N'member:level:update', 3, 3, 2325, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-22 12:41:02', N'', N'2023-08-22 12:41:02', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2329, N'会员等级删除', N'member:level:delete', 3, 4, 2325, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-22 12:41:02', N'', N'2023-08-22 12:41:02', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2330, N'会员分组', N'', 2, 3, 2262, N'group', N'fa:group', N'member/group/index', N'MemberGroup', 0, N'1', N'1', N'1', N'', N'2023-08-22 13:50:06', N'1', N'2023-10-01 23:42:01', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2331, N'用户分组查询', N'member:group:query', 3, 1, 2330, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-22 13:50:06', N'', N'2023-08-22 13:50:06', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2332, N'用户分组创建', N'member:group:create', 3, 2, 2330, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-22 13:50:06', N'', N'2023-08-22 13:50:06', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2333, N'用户分组更新', N'member:group:update', 3, 3, 2330, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-22 13:50:06', N'', N'2023-08-22 13:50:06', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2334, N'用户分组删除', N'member:group:delete', 3, 4, 2330, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-22 13:50:06', N'', N'2023-08-22 13:50:06', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2335, N'用户等级修改', N'member:user:update-level', 3, 5, 2317, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-08-23 16:49:05', N'', N'2023-08-23 16:50:48', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2336, N'商品评论', N'', 2, 5, 2000, N'comment', N'ep:comment', N'mall/product/comment/index', N'ProductComment', 0, N'1', N'1', N'1', N'1', N'2023-08-26 11:03:00', N'1', N'2023-08-26 11:03:38', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2337, N'评论查询', N'product:comment:query', 3, 1, 2336, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-26 11:04:01', N'1', N'2023-08-26 11:04:01', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2338, N'添加自评', N'product:comment:create', 3, 2, 2336, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-26 11:04:23', N'1', N'2023-08-26 11:08:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2339, N'商家回复', N'product:comment:update', 3, 3, 2336, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-26 11:04:37', N'1', N'2023-08-26 11:04:37', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2340, N'显隐评论', N'product:comment:update', 3, 4, 2336, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-08-26 11:04:55', N'1', N'2023-08-26 11:04:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2341, N'优惠劵发送', N'promotion:coupon:send', 3, 2, 2038, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-09-02 00:03:14', N'1', N'2023-09-02 00:03:14', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2342, N'交易配置', N'', 2, 0, 2072, N'config', N'ep:setting', N'mall/trade/config/index', N'TradeConfig', 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'1', N'2024-02-26 20:30:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2343, N'交易中心配置查询', N'trade:config:query', 3, 1, 2342, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'', N'2023-09-28 02:46:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2344, N'交易中心配置保存', N'trade:config:save', 3, 2, 2342, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'', N'2023-09-28 02:46:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2345, N'分销管理', N'', 1, 4, 2072, N'brokerage', N'fa-solid:project-diagram', N'', N'', 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'1', N'2023-09-28 10:58:44', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2346, N'分销用户', N'', 2, 0, 2345, N'brokerage-user', N'fa-solid:user-tie', N'mall/trade/brokerage/user/index', N'TradeBrokerageUser', 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'1', N'2024-02-26 20:33:23', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2347, N'分销用户查询', N'trade:brokerage-user:query', 3, 1, 2346, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'', N'2023-09-28 02:46:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2348, N'分销用户推广人查询', N'trade:brokerage-user:user-query', 3, 2, 2346, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'', N'2023-09-28 02:46:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2349, N'分销用户推广订单查询', N'trade:brokerage-user:order-query', 3, 3, 2346, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'', N'2023-09-28 02:46:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2350, N'分销用户修改推广资格', N'trade:brokerage-user:update-brokerage-enable', 3, 4, 2346, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'', N'2023-09-28 02:46:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2351, N'分销用户修改推广员', N'trade:brokerage-user:update-bind-user', 3, 5, 2346, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'', N'2023-09-28 02:46:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2352, N'分销用户清除推广员', N'trade:brokerage-user:clear-bind-user', 3, 6, 2346, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'', N'2023-09-28 02:46:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2353, N'佣金记录', N'', 2, 1, 2345, N'brokerage-record', N'fa:money', N'mall/trade/brokerage/record/index', N'TradeBrokerageRecord', 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'1', N'2024-02-26 20:33:30', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2354, N'佣金记录查询', N'trade:brokerage-record:query', 3, 1, 2353, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'', N'2023-09-28 02:46:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2355, N'佣金提现', N'', 2, 2, 2345, N'brokerage-withdraw', N'fa:credit-card', N'mall/trade/brokerage/withdraw/index', N'TradeBrokerageWithdraw', 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'1', N'2024-02-26 20:33:35', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2356, N'佣金提现查询', N'trade:brokerage-withdraw:query', 3, 1, 2355, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'', N'2023-09-28 02:46:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2357, N'佣金提现审核', N'trade:brokerage-withdraw:audit', 3, 2, 2355, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-09-28 02:46:22', N'', N'2023-09-28 02:46:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2358, N'统计中心', N'', 1, 75, 2362, N'statistics', N'ep:data-line', N'', N'', 0, N'1', N'1', N'1', N'', N'2023-09-30 03:22:40', N'1', N'2023-09-30 11:54:48', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2359, N'交易统计', N'', 2, 4, 2358, N'trade', N'fa-solid:credit-card', N'mall/statistics/trade/index', N'TradeStatistics', 0, N'1', N'1', N'1', N'', N'2023-09-30 03:22:40', N'1', N'2024-02-26 20:42:00', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2360, N'交易统计查询', N'statistics:trade:query', 3, 1, 2359, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-09-30 03:22:40', N'', N'2023-09-30 03:22:40', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2361, N'交易统计导出', N'statistics:trade:export', 3, 2, 2359, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-09-30 03:22:40', N'', N'2023-09-30 03:22:40', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2362, N'商城系统', N'', 1, 59, 0, N'/mall', N'ep:shop', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-09-30 11:52:02', N'1', N'2023-09-30 11:52:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2363, N'用户积分修改', N'member:user:update-point', 3, 6, 2317, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-01 14:39:43', N'', N'2023-10-01 14:39:43', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2364, N'用户余额修改', N'member:user:update-balance', 3, 7, 2317, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2023-10-01 14:39:43', N'1', N'2023-10-01 22:42:31', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2365, N'优惠劵', N'', 1, 2, 2030, N'coupon', N'fa-solid:disease', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-10-03 12:39:15', N'1', N'2023-10-05 00:16:07', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2366, N'砍价记录', N'', 2, 2, 2310, N'record', N'ep:list', N'mall/promotion/bargain/record/index', N'PromotionBargainRecord', 0, N'1', N'1', N'1', N'', N'2023-10-05 02:49:06', N'1', N'2023-10-05 10:50:38', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2367, N'砍价记录查询', N'promotion:bargain-record:query', 3, 1, 2366, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-05 02:49:06', N'', N'2023-10-05 02:49:06', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2368, N'助力记录查询', N'promotion:bargain-help:query', 3, 2, 2366, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-10-05 12:27:49', N'1', N'2023-10-05 12:27:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2369, N'拼团记录', N'promotion:combination-record:query', 2, 2, 2303, N'record', N'ep:avatar', N'mall/promotion/combination/record/index.vue', N'PromotionCombinationRecord', 0, N'1', N'1', N'1', N'1', N'2023-10-08 07:10:22', N'1', N'2023-10-08 07:34:11', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2374, N'会员统计', N'', 2, 2, 2358, N'member', N'ep:avatar', N'mall/statistics/member/index', N'MemberStatistics', 0, N'1', N'1', N'1', N'', N'2023-10-11 04:39:24', N'1', N'2024-02-26 20:41:46', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2375, N'会员统计查询', N'statistics:member:query', 3, 1, 2374, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-11 04:39:24', N'', N'2023-10-11 04:39:24', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2376, N'订单核销', N'trade:order:pick-up', 3, 10, 2076, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-10-14 17:11:58', N'1', N'2023-10-14 17:11:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2377, N'文章分类', N'', 2, 0, 2387, N'article/category', N'fa:certificate', N'mall/promotion/article/category/index', N'ArticleCategory', 0, N'1', N'1', N'1', N'', N'2023-10-16 01:26:18', N'1', N'2023-10-16 09:38:26', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2378, N'分类查询', N'promotion:article-category:query', 3, 1, 2377, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-16 01:26:18', N'', N'2023-10-16 01:26:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2379, N'分类创建', N'promotion:article-category:create', 3, 2, 2377, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-16 01:26:18', N'', N'2023-10-16 01:26:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2380, N'分类更新', N'promotion:article-category:update', 3, 3, 2377, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-16 01:26:18', N'', N'2023-10-16 01:26:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2381, N'分类删除', N'promotion:article-category:delete', 3, 4, 2377, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-16 01:26:18', N'', N'2023-10-16 01:26:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2382, N'文章列表', N'', 2, 2, 2387, N'article', N'ep:connection', N'mall/promotion/article/index', N'Article', 0, N'1', N'1', N'1', N'', N'2023-10-16 01:26:18', N'1', N'2023-10-16 09:41:19', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2383, N'文章管理查询', N'promotion:article:query', 3, 1, 2382, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-16 01:26:18', N'', N'2023-10-16 01:26:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2384, N'文章管理创建', N'promotion:article:create', 3, 2, 2382, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-16 01:26:18', N'', N'2023-10-16 01:26:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2385, N'文章管理更新', N'promotion:article:update', 3, 3, 2382, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-16 01:26:18', N'', N'2023-10-16 01:26:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2386, N'文章管理删除', N'promotion:article:delete', 3, 4, 2382, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-16 01:26:18', N'', N'2023-10-16 01:26:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2387, N'内容管理', N'', 1, 1, 2030, N'content', N'ep:collection', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-10-16 09:37:31', N'1', N'2023-10-16 09:37:31', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2388, N'商城首页', N'', 2, 1, 2362, N'home', N'ep:home-filled', N'mall/home/index', N'MallHome', 0, N'1', N'1', N'1', N'', N'2023-10-16 12:10:33', N'', N'2023-10-16 12:10:33', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2389, N'核销订单', N'', 2, 2, 2166, N'pick-up-order', N'ep:list', N'mall/trade/delivery/pickUpOrder/index', N'PickUpOrder', 0, N'1', N'1', N'1', N'', N'2023-10-19 16:09:51', N'', N'2023-10-19 16:09:51', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2390, N'优惠活动', N'', 1, 99, 2030, N'youhui', N'ep:aim', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-10-21 19:23:49', N'1', N'2023-10-21 19:23:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2391, N'客户管理', N'', 2, 10, 2397, N'customer', N'fa:address-book-o', N'crm/customer/index', N'CrmCustomer', 0, N'1', N'1', N'1', N'', N'2023-10-29 09:04:21', N'1', N'2024-02-17 17:13:32', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2392, N'客户查询', N'crm:customer:query', 3, 1, 2391, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 09:04:21', N'', N'2023-10-29 09:04:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2393, N'客户创建', N'crm:customer:create', 3, 2, 2391, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 09:04:21', N'', N'2023-10-29 09:04:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2394, N'客户更新', N'crm:customer:update', 3, 3, 2391, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 09:04:21', N'', N'2023-10-29 09:04:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2395, N'客户删除', N'crm:customer:delete', 3, 4, 2391, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 09:04:21', N'', N'2023-10-29 09:04:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2396, N'客户导出', N'crm:customer:export', 3, 5, 2391, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 09:04:21', N'', N'2023-10-29 09:04:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2397, N'CRM 系统', N'', 1, 200, 0, N'/crm', N'ep:avatar', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-10-29 17:08:30', N'1', N'2024-02-04 15:37:31', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2398, N'合同管理', N'', 2, 50, 2397, N'contract', N'ep:notebook', N'crm/contract/index', N'CrmContract', 0, N'1', N'1', N'1', N'', N'2023-10-29 10:50:41', N'1', N'2024-02-17 17:15:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2399, N'合同查询', N'crm:contract:query', 3, 1, 2398, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 10:50:41', N'', N'2023-10-29 10:50:41', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2400, N'合同创建', N'crm:contract:create', 3, 2, 2398, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 10:50:41', N'', N'2023-10-29 10:50:41', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2401, N'合同更新', N'crm:contract:update', 3, 3, 2398, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 10:50:41', N'', N'2023-10-29 10:50:41', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2402, N'合同删除', N'crm:contract:delete', 3, 4, 2398, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 10:50:41', N'', N'2023-10-29 10:50:41', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2403, N'合同导出', N'crm:contract:export', 3, 5, 2398, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 10:50:41', N'', N'2023-10-29 10:50:41', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2404, N'线索管理', N'', 2, 8, 2397, N'clue', N'fa:pagelines', N'crm/clue/index', N'CrmClue', 0, N'1', N'1', N'1', N'', N'2023-10-29 11:06:29', N'1', N'2024-02-17 17:15:41', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2405, N'线索查询', N'crm:clue:query', 3, 1, 2404, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:06:29', N'', N'2023-10-29 11:06:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2406, N'线索创建', N'crm:clue:create', 3, 2, 2404, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:06:29', N'', N'2023-10-29 11:06:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2407, N'线索更新', N'crm:clue:update', 3, 3, 2404, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:06:29', N'', N'2023-10-29 11:06:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2408, N'线索删除', N'crm:clue:delete', 3, 4, 2404, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:06:29', N'', N'2023-10-29 11:06:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2409, N'线索导出', N'crm:clue:export', 3, 5, 2404, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:06:29', N'', N'2023-10-29 11:06:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2410, N'商机管理', N'', 2, 40, 2397, N'business', N'fa:bus', N'crm/business/index', N'CrmBusiness', 0, N'1', N'1', N'1', N'', N'2023-10-29 11:12:35', N'1', N'2024-02-17 17:14:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2411, N'商机查询', N'crm:business:query', 3, 1, 2410, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:12:35', N'', N'2023-10-29 11:12:35', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2412, N'商机创建', N'crm:business:create', 3, 2, 2410, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:12:35', N'', N'2023-10-29 11:12:35', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2413, N'商机更新', N'crm:business:update', 3, 3, 2410, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:12:35', N'', N'2023-10-29 11:12:35', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2414, N'商机删除', N'crm:business:delete', 3, 4, 2410, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:12:35', N'', N'2023-10-29 11:12:35', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2415, N'商机导出', N'crm:business:export', 3, 5, 2410, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:12:35', N'', N'2023-10-29 11:12:35', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2416, N'联系人管理', N'', 2, 20, 2397, N'contact', N'fa:address-book-o', N'crm/contact/index', N'CrmContact', 0, N'1', N'1', N'1', N'', N'2023-10-29 11:14:56', N'1', N'2024-02-17 17:13:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2417, N'联系人查询', N'crm:contact:query', 3, 1, 2416, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:14:56', N'', N'2023-10-29 11:14:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2418, N'联系人创建', N'crm:contact:create', 3, 2, 2416, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:14:56', N'', N'2023-10-29 11:14:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2419, N'联系人更新', N'crm:contact:update', 3, 3, 2416, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:14:56', N'', N'2023-10-29 11:14:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2420, N'联系人删除', N'crm:contact:delete', 3, 4, 2416, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:14:56', N'', N'2023-10-29 11:14:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2421, N'联系人导出', N'crm:contact:export', 3, 5, 2416, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:14:56', N'', N'2023-10-29 11:14:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2422, N'回款管理', N'', 2, 60, 2397, N'receivable', N'ep:money', N'crm/receivable/index', N'CrmReceivable', 0, N'1', N'1', N'1', N'', N'2023-10-29 11:18:09', N'1', N'2024-02-17 17:16:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2423, N'回款管理查询', N'crm:receivable:query', 3, 1, 2422, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:18:09', N'', N'2023-10-29 11:18:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2424, N'回款管理创建', N'crm:receivable:create', 3, 2, 2422, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:18:09', N'', N'2023-10-29 11:18:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2425, N'回款管理更新', N'crm:receivable:update', 3, 3, 2422, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:18:09', N'', N'2023-10-29 11:18:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2426, N'回款管理删除', N'crm:receivable:delete', 3, 4, 2422, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:18:09', N'', N'2023-10-29 11:18:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2427, N'回款管理导出', N'crm:receivable:export', 3, 5, 2422, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:18:09', N'', N'2023-10-29 11:18:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2428, N'回款计划', N'', 2, 61, 2397, N'receivable-plan', N'fa:money', N'crm/receivable/plan/index', N'CrmReceivablePlan', 0, N'1', N'1', N'1', N'', N'2023-10-29 11:18:09', N'1', N'2024-02-17 17:16:11', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2429, N'回款计划查询', N'crm:receivable-plan:query', 3, 1, 2428, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:18:09', N'', N'2023-10-29 11:18:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2430, N'回款计划创建', N'crm:receivable-plan:create', 3, 2, 2428, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:18:09', N'', N'2023-10-29 11:18:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2431, N'回款计划更新', N'crm:receivable-plan:update', 3, 3, 2428, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:18:09', N'', N'2023-10-29 11:18:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2432, N'回款计划删除', N'crm:receivable-plan:delete', 3, 4, 2428, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:18:09', N'', N'2023-10-29 11:18:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2433, N'回款计划导出', N'crm:receivable-plan:export', 3, 5, 2428, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 11:18:09', N'', N'2023-10-29 11:18:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2435, N'商城装修', N'', 2, 20, 2030, N'diy-template', N'fa6-solid:brush', N'mall/promotion/diy/template/index', N'DiyTemplate', 0, N'1', N'1', N'1', N'', N'2023-10-29 14:19:25', N'', N'2023-10-29 14:19:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2436, N'装修模板', N'', 2, 1, 2435, N'diy-template', N'fa6-solid:brush', N'mall/promotion/diy/template/index', N'DiyTemplate', 0, N'1', N'1', N'1', N'', N'2023-10-29 14:19:25', N'', N'2023-10-29 14:19:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2437, N'装修模板查询', N'promotion:diy-template:query', 3, 1, 2436, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 14:19:25', N'', N'2023-10-29 14:19:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2438, N'装修模板创建', N'promotion:diy-template:create', 3, 2, 2436, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 14:19:25', N'', N'2023-10-29 14:19:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2439, N'装修模板更新', N'promotion:diy-template:update', 3, 3, 2436, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 14:19:25', N'', N'2023-10-29 14:19:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2440, N'装修模板删除', N'promotion:diy-template:delete', 3, 4, 2436, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 14:19:25', N'', N'2023-10-29 14:19:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2441, N'装修模板使用', N'promotion:diy-template:use', 3, 5, 2436, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 14:19:25', N'', N'2023-10-29 14:19:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2442, N'装修页面', N'', 2, 2, 2435, N'diy-page', N'foundation:page-edit', N'mall/promotion/diy/page/index', N'DiyPage', 0, N'1', N'1', N'1', N'', N'2023-10-29 14:19:25', N'', N'2023-10-29 14:19:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2443, N'装修页面查询', N'promotion:diy-page:query', 3, 1, 2442, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 14:19:25', N'', N'2023-10-29 14:19:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2444, N'装修页面创建', N'promotion:diy-page:create', 3, 2, 2442, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 14:19:26', N'', N'2023-10-29 14:19:26', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2445, N'装修页面更新', N'promotion:diy-page:update', 3, 3, 2442, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 14:19:26', N'', N'2023-10-29 14:19:26', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2446, N'装修页面删除', N'promotion:diy-page:delete', 3, 4, 2442, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-10-29 14:19:26', N'', N'2023-10-29 14:19:26', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2447, N'三方登录', N'', 1, 10, 1, N'social', N'fa:rocket', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-11-04 12:12:01', N'1', N'2024-02-29 01:14:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2448, N'三方应用', N'', 2, 1, 2447, N'client', N'ep:set-up', N'views/system/social/client/index.vue', N'SocialClient', 0, N'1', N'1', N'1', N'1', N'2023-11-04 12:17:19', N'1', N'2023-11-04 12:17:19', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2449, N'三方应用查询', N'system:social-client:query', 3, 1, 2448, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-11-04 12:43:12', N'1', N'2023-11-04 12:43:33', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2450, N'三方应用创建', N'system:social-client:create', 3, 2, 2448, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-11-04 12:43:58', N'1', N'2023-11-04 12:43:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2451, N'三方应用更新', N'system:social-client:update', 3, 3, 2448, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-11-04 12:44:27', N'1', N'2023-11-04 12:44:27', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2452, N'三方应用删除', N'system:social-client:delete', 3, 4, 2448, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-11-04 12:44:43', N'1', N'2023-11-04 12:44:43', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2453, N'三方用户', N'system:social-user:query', 2, 2, 2447, N'user', N'ep:avatar', N'system/social/user/index.vue', N'SocialUser', 0, N'1', N'1', N'1', N'1', N'2023-11-04 14:01:05', N'1', N'2023-11-04 14:01:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2472, N'主子表(内嵌)', N'', 2, 12, 1070, N'demo03-inner', N'fa:power-off', N'infra/demo/demo03/inner/index', N'Demo03StudentInner', 0, N'1', N'1', N'1', N'', N'2023-11-13 04:39:51', N'1', N'2023-11-16 23:53:46', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2478, N'单表(增删改查)', N'', 2, 1, 1070, N'demo01-contact', N'ep:bicycle', N'infra/demo/demo01/index', N'Demo01Contact', 0, N'1', N'1', N'1', N'', N'2023-11-15 14:42:30', N'1', N'2023-11-16 20:34:40', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2479, N'示例联系人查询', N'infra:demo01-contact:query', 3, 1, 2478, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-15 14:42:30', N'', N'2023-11-15 14:42:30', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2480, N'示例联系人创建', N'infra:demo01-contact:create', 3, 2, 2478, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-15 14:42:30', N'', N'2023-11-15 14:42:30', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2481, N'示例联系人更新', N'infra:demo01-contact:update', 3, 3, 2478, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-15 14:42:30', N'', N'2023-11-15 14:42:30', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2482, N'示例联系人删除', N'infra:demo01-contact:delete', 3, 4, 2478, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-15 14:42:30', N'', N'2023-11-15 14:42:30', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2483, N'示例联系人导出', N'infra:demo01-contact:export', 3, 5, 2478, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-15 14:42:30', N'', N'2023-11-15 14:42:30', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2484, N'树表(增删改查)', N'', 2, 2, 1070, N'demo02-category', N'fa:tree', N'infra/demo/demo02/index', N'Demo02Category', 0, N'1', N'1', N'1', N'', N'2023-11-16 12:18:27', N'1', N'2023-11-16 20:35:01', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2485, N'示例分类查询', N'infra:demo02-category:query', 3, 1, 2484, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-16 12:18:27', N'', N'2023-11-16 12:18:27', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2486, N'示例分类创建', N'infra:demo02-category:create', 3, 2, 2484, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-16 12:18:27', N'', N'2023-11-16 12:18:27', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2487, N'示例分类更新', N'infra:demo02-category:update', 3, 3, 2484, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-16 12:18:27', N'', N'2023-11-16 12:18:27', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2488, N'示例分类删除', N'infra:demo02-category:delete', 3, 4, 2484, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-16 12:18:27', N'', N'2023-11-16 12:18:27', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2489, N'示例分类导出', N'infra:demo02-category:export', 3, 5, 2484, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-16 12:18:27', N'', N'2023-11-16 12:18:27', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2490, N'主子表(标准)', N'', 2, 10, 1070, N'demo03-normal', N'fa:battery-3', N'infra/demo/demo03/normal/index', N'Demo03StudentNormal', 0, N'1', N'1', N'1', N'', N'2023-11-16 12:53:37', N'1', N'2023-11-16 23:10:03', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2491, N'学生查询', N'infra:demo03-student:query', 3, 1, 2490, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-16 12:53:37', N'', N'2023-11-16 12:53:37', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2492, N'学生创建', N'infra:demo03-student:create', 3, 2, 2490, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-16 12:53:37', N'', N'2023-11-16 12:53:37', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2493, N'学生更新', N'infra:demo03-student:update', 3, 3, 2490, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-16 12:53:37', N'', N'2023-11-16 12:53:37', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2494, N'学生删除', N'infra:demo03-student:delete', 3, 4, 2490, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-16 12:53:37', N'', N'2023-11-16 12:53:37', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2495, N'学生导出', N'infra:demo03-student:export', 3, 5, 2490, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-16 12:53:37', N'', N'2023-11-16 12:53:37', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2497, N'主子表(ERP)', N'', 2, 11, 1070, N'demo03-erp', N'ep:calendar', N'infra/demo/demo03/erp/index', N'Demo03StudentERP', 0, N'1', N'1', N'1', N'', N'2023-11-16 15:50:59', N'1', N'2023-11-17 13:19:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2516, N'客户公海配置', N'', 2, 0, 2524, N'customer-pool-config', N'ep:data-analysis', N'crm/customer/poolConfig/index', N'CrmCustomerPoolConfig', 0, N'1', N'1', N'1', N'', N'2023-11-18 13:33:31', N'1', N'2024-01-03 19:52:06', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2517, N'客户公海配置保存', N'crm:customer-pool-config:update', 3, 1, 2516, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-18 13:33:31', N'', N'2023-11-18 13:33:31', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2518, N'客户限制配置', N'', 2, 1, 2524, N'customer-limit-config', N'ep:avatar', N'crm/customer/limitConfig/index', N'CrmCustomerLimitConfig', 0, N'1', N'1', N'1', N'', N'2023-11-18 13:33:53', N'1', N'2024-02-24 16:43:33', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2519, N'客户限制配置查询', N'crm:customer-limit-config:query', 3, 1, 2518, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-18 13:33:53', N'', N'2023-11-18 13:33:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2520, N'客户限制配置创建', N'crm:customer-limit-config:create', 3, 2, 2518, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-18 13:33:53', N'', N'2023-11-18 13:33:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2521, N'客户限制配置更新', N'crm:customer-limit-config:update', 3, 3, 2518, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-18 13:33:53', N'', N'2023-11-18 13:33:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2522, N'客户限制配置删除', N'crm:customer-limit-config:delete', 3, 4, 2518, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-18 13:33:53', N'', N'2023-11-18 13:33:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2523, N'客户限制配置导出', N'crm:customer-limit-config:export', 3, 5, 2518, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-11-18 13:33:53', N'', N'2023-11-18 13:33:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2524, N'系统配置', N'', 1, 999, 2397, N'config', N'ep:connection', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-11-18 21:58:00', N'1', N'2024-02-17 17:14:34', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2525, N'WebSocket', N'', 2, 5, 2, N'websocket', N'ep:connection', N'infra/webSocket/index', N'InfraWebSocket', 0, N'1', N'1', N'1', N'1', N'2023-11-23 19:41:55', N'1', N'2024-04-23 00:02:00', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2526, N'产品管理', N'', 2, 80, 2397, N'product', N'fa:product-hunt', N'crm/product/index', N'CrmProduct', 0, N'1', N'1', N'1', N'1', N'2023-12-05 22:45:26', N'1', N'2024-02-20 20:36:20', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2527, N'产品查询', N'crm:product:query', 3, 1, 2526, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-12-05 22:47:16', N'1', N'2023-12-05 22:47:16', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2528, N'产品创建', N'crm:product:create', 3, 2, 2526, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-12-05 22:47:41', N'1', N'2023-12-05 22:47:48', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2529, N'产品更新', N'crm:product:update', 3, 3, 2526, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-12-05 22:48:03', N'1', N'2023-12-05 22:48:03', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2530, N'产品删除', N'crm:product:delete', 3, 4, 2526, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-12-05 22:48:17', N'1', N'2023-12-05 22:48:17', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2531, N'产品导出', N'crm:product:export', 3, 5, 2526, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-12-05 22:48:29', N'1', N'2023-12-05 22:48:29', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2532, N'产品分类配置', N'', 2, 3, 2524, N'product/category', N'fa-solid:window-restore', N'crm/product/category/index', N'CrmProductCategory', 0, N'1', N'1', N'1', N'1', N'2023-12-06 12:52:36', N'1', N'2023-12-06 12:52:51', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2533, N'产品分类查询', N'crm:product-category:query', 3, 1, 2532, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-12-06 12:53:23', N'1', N'2023-12-06 12:53:23', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2534, N'产品分类创建', N'crm:product-category:create', 3, 2, 2532, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-12-06 12:53:41', N'1', N'2023-12-06 12:53:41', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2535, N'产品分类更新', N'crm:product-category:update', 3, 3, 2532, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-12-06 12:53:59', N'1', N'2023-12-06 12:53:59', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2536, N'产品分类删除', N'crm:product-category:delete', 3, 4, 2532, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2023-12-06 12:54:14', N'1', N'2023-12-06 12:54:14', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2543, N'关联商机', N'crm:contact:create-business', 3, 10, 2416, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-01-02 17:28:25', N'1', N'2024-01-02 17:28:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2544, N'取关商机', N'crm:contact:delete-business', 3, 11, 2416, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-01-02 17:28:43', N'1', N'2024-01-02 17:28:51', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2545, N'商品统计', N'', 2, 3, 2358, N'product', N'fa:product-hunt', N'mall/statistics/product/index', N'ProductStatistics', 0, N'1', N'1', N'1', N'', N'2023-12-15 18:54:28', N'1', N'2024-02-26 20:41:52', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2546, N'客户公海', N'', 2, 30, 2397, N'customer/pool', N'fa-solid:swimming-pool', N'crm/customer/pool/index', N'CrmCustomerPool', 0, N'1', N'1', N'1', N'1', N'2024-01-15 21:29:34', N'1', N'2024-02-17 17:14:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2547, N'订单查询', N'trade:order:query', 3, 1, 2076, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-01-16 08:52:00', N'1', N'2024-01-16 08:52:00', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2548, N'订单更新', N'trade:order:update', 3, 2, 2076, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-01-16 08:52:21', N'1', N'2024-01-16 08:52:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2549, N'支付&退款案例', N'', 2, 1, 2161, N'order', N'fa:paypal', N'pay/demo/order/index', N'', 0, N'1', N'1', N'1', N'1', N'2024-01-18 23:45:00', N'1', N'2024-01-18 23:47:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2550, N'转账案例', N'', 2, 2, 2161, N'transfer', N'fa:transgender-alt', N'pay/demo/transfer/index', N'', 0, N'1', N'1', N'1', N'1', N'2024-01-18 23:51:16', N'1', N'2024-01-18 23:51:16', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2551, N'钱包管理', N'', 1, 4, 1117, N'wallet', N'ep:wallet', N'', N'', 0, N'1', N'1', N'1', N'', N'2023-12-29 02:32:54', N'1', N'2024-02-29 08:58:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2552, N'充值套餐', N'', 2, 2, 2551, N'wallet-recharge-package', N'fa:leaf', N'pay/wallet/rechargePackage/index', N'WalletRechargePackage', 0, N'1', N'1', N'1', N'', N'2023-12-29 02:32:54', N'', N'2023-12-29 02:32:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2553, N'钱包充值套餐查询', N'pay:wallet-recharge-package:query', 3, 1, 2552, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-12-29 02:32:54', N'', N'2023-12-29 02:32:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2554, N'钱包充值套餐创建', N'pay:wallet-recharge-package:create', 3, 2, 2552, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-12-29 02:32:54', N'', N'2023-12-29 02:32:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2555, N'钱包充值套餐更新', N'pay:wallet-recharge-package:update', 3, 3, 2552, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-12-29 02:32:54', N'', N'2023-12-29 02:32:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2556, N'钱包充值套餐删除', N'pay:wallet-recharge-package:delete', 3, 4, 2552, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-12-29 02:32:54', N'', N'2023-12-29 02:32:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2557, N'钱包余额', N'', 2, 1, 2551, N'wallet-balance', N'fa:leaf', N'pay/wallet/balance/index', N'WalletBalance', 0, N'1', N'1', N'1', N'', N'2023-12-29 02:32:54', N'', N'2023-12-29 02:32:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2558, N'钱包余额查询', N'pay:wallet:query', 3, 1, 2557, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2023-12-29 02:32:54', N'', N'2023-12-29 02:32:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2559, N'转账订单', N'', 2, 3, 1117, N'transfer', N'ep:credit-card', N'pay/transfer/index', N'PayTransfer', 0, N'1', N'1', N'1', N'', N'2023-12-29 02:32:54', N'', N'2023-12-29 02:32:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2560, N'数据统计', N'', 1, 200, 2397, N'statistics', N'ep:data-line', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-01-26 22:50:35', N'1', N'2024-02-24 20:10:07', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2561, N'排行榜', N'crm:statistics-rank:query', 2, 1, 2560, N'ranking', N'fa:area-chart', N'crm/statistics/rank/index', N'CrmStatisticsRank', 0, N'1', N'1', N'1', N'1', N'2024-01-26 22:52:09', N'1', N'2024-04-24 19:39:11', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2562, N'客户导入', N'crm:customer:import', 3, 6, 2391, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-02-01 13:09:00', N'1', N'2024-02-01 13:09:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2563, N'ERP 系统', N'', 1, 300, 0, N'/erp', N'fa-solid:store', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-02-04 15:37:25', N'1', N'2024-02-04 15:37:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2564, N'产品管理', N'', 1, 40, 2563, N'product', N'fa:product-hunt', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-02-04 15:38:43', N'1', N'2024-02-04 15:38:43', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2565, N'产品信息', N'', 2, 0, 2564, N'product', N'fa-solid:apple-alt', N'erp/product/product/index', N'ErpProduct', 0, N'1', N'1', N'1', N'', N'2024-02-04 07:52:15', N'1', N'2024-02-05 14:42:11', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2566, N'产品查询', N'erp:product:query', 3, 1, 2565, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2024-02-04 07:52:15', N'1', N'2024-02-04 17:21:57', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2567, N'产品创建', N'erp:product:create', 3, 2, 2565, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2024-02-04 07:52:15', N'1', N'2024-02-04 17:22:12', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2568, N'产品更新', N'erp:product:update', 3, 3, 2565, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2024-02-04 07:52:15', N'1', N'2024-02-04 17:22:16', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2569, N'产品删除', N'erp:product:delete', 3, 4, 2565, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2024-02-04 07:52:15', N'1', N'2024-02-04 17:22:22', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2570, N'产品导出', N'erp:product:export', 3, 5, 2565, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2024-02-04 07:52:15', N'1', N'2024-02-04 17:22:26', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2571, N'产品分类', N'', 2, 1, 2564, N'product-category', N'fa:certificate', N'erp/product/category/index', N'ErpProductCategory', 0, N'1', N'1', N'1', N'', N'2024-02-04 09:21:04', N'1', N'2024-02-04 17:24:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2572, N'分类查询', N'erp:product-category:query', 3, 1, 2571, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 09:21:04', N'', N'2024-02-04 09:21:04', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2573, N'分类创建', N'erp:product-category:create', 3, 2, 2571, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 09:21:04', N'', N'2024-02-04 09:21:04', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2574, N'分类更新', N'erp:product-category:update', 3, 3, 2571, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 09:21:04', N'', N'2024-02-04 09:21:04', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2575, N'分类删除', N'erp:product-category:delete', 3, 4, 2571, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 09:21:04', N'', N'2024-02-04 09:21:04', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2576, N'分类导出', N'erp:product-category:export', 3, 5, 2571, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 09:21:04', N'', N'2024-02-04 09:21:04', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2577, N'产品单位', N'', 2, 2, 2564, N'unit', N'ep:opportunity', N'erp/product/unit/index', N'ErpProductUnit', 0, N'1', N'1', N'1', N'', N'2024-02-04 11:54:08', N'1', N'2024-02-04 19:54:37', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2578, N'单位查询', N'erp:product-unit:query', 3, 1, 2577, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 11:54:08', N'', N'2024-02-04 11:54:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2579, N'单位创建', N'erp:product-unit:create', 3, 2, 2577, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 11:54:08', N'', N'2024-02-04 11:54:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2580, N'单位更新', N'erp:product-unit:update', 3, 3, 2577, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 11:54:08', N'', N'2024-02-04 11:54:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2581, N'单位删除', N'erp:product-unit:delete', 3, 4, 2577, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 11:54:08', N'', N'2024-02-04 11:54:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2582, N'单位导出', N'erp:product-unit:export', 3, 5, 2577, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 11:54:08', N'', N'2024-02-04 11:54:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2583, N'库存管理', N'', 1, 30, 2563, N'stock', N'fa:window-restore', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-02-05 00:29:37', N'1', N'2024-02-05 00:29:37', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2584, N'仓库信息', N'', 2, 0, 2583, N'warehouse', N'ep:house', N'erp/stock/warehouse/index', N'ErpWarehouse', 0, N'1', N'1', N'1', N'', N'2024-02-04 17:12:09', N'1', N'2024-02-05 01:12:53', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2585, N'仓库查询', N'erp:warehouse:query', 3, 1, 2584, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 17:12:09', N'', N'2024-02-04 17:12:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2586, N'仓库创建', N'erp:warehouse:create', 3, 2, 2584, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 17:12:09', N'', N'2024-02-04 17:12:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2587, N'仓库更新', N'erp:warehouse:update', 3, 3, 2584, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 17:12:09', N'', N'2024-02-04 17:12:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2588, N'仓库删除', N'erp:warehouse:delete', 3, 4, 2584, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 17:12:09', N'', N'2024-02-04 17:12:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2589, N'仓库导出', N'erp:warehouse:export', 3, 5, 2584, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-04 17:12:09', N'', N'2024-02-04 17:12:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2590, N'产品库存', N'', 2, 1, 2583, N'stock', N'ep:coffee', N'erp/stock/stock/index', N'ErpStock', 0, N'1', N'1', N'1', N'', N'2024-02-05 06:40:50', N'1', N'2024-02-05 14:42:44', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2591, N'库存查询', N'erp:stock:query', 3, 1, 2590, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 06:40:50', N'', N'2024-02-05 06:40:50', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2592, N'库存导出', N'erp:stock:export', 3, 5, 2590, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 06:40:50', N'', N'2024-02-05 06:40:50', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2593, N'出入库明细', N'', 2, 2, 2583, N'record', N'fa-solid:blog', N'erp/stock/record/index', N'ErpStockRecord', 0, N'1', N'1', N'1', N'', N'2024-02-05 10:27:21', N'1', N'2024-02-06 17:26:11', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2594, N'库存明细查询', N'erp:stock-record:query', 3, 1, 2593, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 10:27:21', N'', N'2024-02-05 10:27:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2595, N'库存明细导出', N'erp:stock-record:export', 3, 5, 2593, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 10:27:21', N'', N'2024-02-05 10:27:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2596, N'其它入库', N'', 2, 3, 2583, N'in', N'ep:zoom-in', N'erp/stock/in/index', N'ErpStockIn', 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'1', N'2024-02-07 19:06:51', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2597, N'其它入库单查询', N'erp:stock-in:query', 3, 1, 2596, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-05 16:08:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2598, N'其它入库单创建', N'erp:stock-in:create', 3, 2, 2596, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-05 16:08:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2599, N'其它入库单更新', N'erp:stock-in:update', 3, 3, 2596, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-05 16:08:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2600, N'其它入库单删除', N'erp:stock-in:delete', 3, 4, 2596, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-05 16:08:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2601, N'其它入库单导出', N'erp:stock-in:export', 3, 5, 2596, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-05 16:08:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2602, N'采购管理', N'', 1, 10, 2563, N'purchase', N'fa:buysellads', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-02-06 16:01:01', N'1', N'2024-02-06 16:01:23', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2603, N'供应商信息', N'', 2, 4, 2602, N'supplier', N'fa:superpowers', N'erp/purchase/supplier/index', N'ErpSupplier', 0, N'1', N'1', N'1', N'', N'2024-02-06 08:21:55', N'1', N'2024-02-06 16:22:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2604, N'供应商查询', N'erp:supplier:query', 3, 1, 2603, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-06 08:21:55', N'', N'2024-02-06 08:21:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2605, N'供应商创建', N'erp:supplier:create', 3, 2, 2603, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-06 08:21:55', N'', N'2024-02-06 08:21:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2606, N'供应商更新', N'erp:supplier:update', 3, 3, 2603, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-06 08:21:55', N'', N'2024-02-06 08:21:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2607, N'供应商删除', N'erp:supplier:delete', 3, 4, 2603, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-06 08:21:55', N'', N'2024-02-06 08:21:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2608, N'供应商导出', N'erp:supplier:export', 3, 5, 2603, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-06 08:21:55', N'', N'2024-02-06 08:21:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2609, N'其它入库单审批', N'erp:stock-in:update-status', 3, 6, 2596, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-05 16:08:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2610, N'其它出库', N'', 2, 4, 2583, N'out', N'ep:zoom-out', N'erp/stock/out/index', N'ErpStockOut', 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'1', N'2024-02-07 19:06:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2611, N'其它出库单查询', N'erp:stock-out:query', 3, 1, 2610, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 06:43:39', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2612, N'其它出库单创建', N'erp:stock-out:create', 3, 2, 2610, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 06:43:42', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2613, N'其它出库单更新', N'erp:stock-out:update', 3, 3, 2610, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 06:43:44', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2614, N'其它出库单删除', N'erp:stock-out:delete', 3, 4, 2610, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 06:43:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2615, N'其它出库单导出', N'erp:stock-out:export', 3, 5, 2610, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 06:43:57', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2616, N'其它出库单审批', N'erp:stock-out:update-status', 3, 6, 2610, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 06:43:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2617, N'销售管理', N'', 1, 20, 2563, N'sale', N'fa:sellsy', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-02-07 15:12:32', N'1', N'2024-02-07 15:12:32', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2618, N'客户信息', N'', 2, 4, 2617, N'customer', N'ep:avatar', N'erp/sale/customer/index', N'ErpCustomer', 0, N'1', N'1', N'1', N'', N'2024-02-07 07:21:45', N'1', N'2024-02-07 15:22:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2619, N'客户查询', N'erp:customer:query', 3, 1, 2618, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-07 07:21:45', N'', N'2024-02-07 07:21:45', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2620, N'客户创建', N'erp:customer:create', 3, 2, 2618, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-07 07:21:45', N'', N'2024-02-07 07:21:45', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2621, N'客户更新', N'erp:customer:update', 3, 3, 2618, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-07 07:21:45', N'', N'2024-02-07 07:21:45', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2622, N'客户删除', N'erp:customer:delete', 3, 4, 2618, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-07 07:21:45', N'', N'2024-02-07 07:21:45', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2623, N'客户导出', N'erp:customer:export', 3, 5, 2618, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-07 07:21:45', N'', N'2024-02-07 07:21:45', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2624, N'库存调拨', N'', 2, 5, 2583, N'move', N'ep:folder-remove', N'erp/stock/move/index', N'ErpStockMove', 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'1', N'2024-02-16 18:53:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2625, N'库存调度单查询', N'erp:stock-move:query', 3, 1, 2624, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2626, N'库存调度单创建', N'erp:stock-move:create', 3, 2, 2624, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:52', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2627, N'库存调度单更新', N'erp:stock-move:update', 3, 3, 2624, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2628, N'库存调度单删除', N'erp:stock-move:delete', 3, 4, 2624, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:57', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2629, N'库存调度单导出', N'erp:stock-move:export', 3, 5, 2624, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:59', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2630, N'库存调度单审批', N'erp:stock-move:update-status', 3, 6, 2624, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:13:03', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2631, N'库存盘点', N'', 2, 6, 2583, N'check', N'ep:circle-check-filled', N'erp/stock/check/index', N'ErpStockCheck', 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'1', N'2024-02-08 08:31:09', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2632, N'库存盘点单查询', N'erp:stock-check:query', 3, 1, 2631, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2633, N'库存盘点单创建', N'erp:stock-check:create', 3, 2, 2631, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:52', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2634, N'库存盘点单更新', N'erp:stock-check:update', 3, 3, 2631, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2635, N'库存盘点单删除', N'erp:stock-check:delete', 3, 4, 2631, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:57', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2636, N'库存盘点单导出', N'erp:stock-check:export', 3, 5, 2631, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:59', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2637, N'库存盘点单审批', N'erp:stock-check:update-status', 3, 6, 2631, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:13:03', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2638, N'销售订单', N'', 2, 1, 2617, N'order', N'fa:first-order', N'erp/sale/order/index', N'ErpSaleOrder', 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'1', N'2024-02-10 21:59:20', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2639, N'销售订单查询', N'erp:sale-order:query', 3, 1, 2638, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2640, N'销售订单创建', N'erp:sale-order:create', 3, 2, 2638, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:52', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2641, N'销售订单更新', N'erp:sale-order:update', 3, 3, 2638, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2642, N'销售订单删除', N'erp:sale-order:delete', 3, 4, 2638, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:57', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2643, N'销售订单导出', N'erp:sale-order:export', 3, 5, 2638, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:59', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2644, N'销售订单审批', N'erp:sale-order:update-status', 3, 6, 2638, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:13:03', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2645, N'财务管理', N'', 1, 50, 2563, N'finance', N'ep:money', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-02-10 08:05:58', N'1', N'2024-02-10 08:06:07', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2646, N'结算账户', N'', 2, 10, 2645, N'account', N'fa:universal-access', N'erp/finance/account/index', N'ErpAccount', 0, N'1', N'1', N'1', N'', N'2024-02-10 00:15:07', N'1', N'2024-02-14 08:24:31', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2647, N'结算账户查询', N'erp:account:query', 3, 1, 2646, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-10 00:15:07', N'', N'2024-02-10 00:15:07', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2648, N'结算账户创建', N'erp:account:create', 3, 2, 2646, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-10 00:15:07', N'', N'2024-02-10 00:15:07', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2649, N'结算账户更新', N'erp:account:update', 3, 3, 2646, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-10 00:15:07', N'', N'2024-02-10 00:15:07', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2650, N'结算账户删除', N'erp:account:delete', 3, 4, 2646, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-10 00:15:07', N'', N'2024-02-10 00:15:07', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2651, N'结算账户导出', N'erp:account:export', 3, 5, 2646, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-10 00:15:07', N'', N'2024-02-10 00:15:07', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2652, N'销售出库', N'', 2, 2, 2617, N'out', N'ep:sold-out', N'erp/sale/out/index', N'ErpSaleOut', 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'1', N'2024-02-10 22:02:07', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2653, N'销售出库查询', N'erp:sale-out:query', 3, 1, 2652, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2654, N'销售出库创建', N'erp:sale-out:create', 3, 2, 2652, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:52', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2655, N'销售出库更新', N'erp:sale-out:update', 3, 3, 2652, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2656, N'销售出库删除', N'erp:sale-out:delete', 3, 4, 2652, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:57', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2657, N'销售出库导出', N'erp:sale-out:export', 3, 5, 2652, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:59', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2658, N'销售出库审批', N'erp:sale-out:update-status', 3, 6, 2652, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:13:03', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2659, N'销售退货', N'', 2, 3, 2617, N'return', N'fa-solid:bone', N'erp/sale/return/index', N'ErpSaleReturn', 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'1', N'2024-02-12 06:12:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2660, N'销售退货查询', N'erp:sale-return:query', 3, 1, 2659, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2661, N'销售退货创建', N'erp:sale-return:create', 3, 2, 2659, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:52', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2662, N'销售退货更新', N'erp:sale-return:update', 3, 3, 2659, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:55', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2663, N'销售退货删除', N'erp:sale-return:delete', 3, 4, 2659, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:57', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2664, N'销售退货导出', N'erp:sale-return:export', 3, 5, 2659, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:12:59', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2665, N'销售退货审批', N'erp:sale-return:update-status', 3, 6, 2659, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-07 11:13:03', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2666, N'采购订单', N'', 2, 1, 2602, N'order', N'fa-solid:border-all', N'erp/purchase/order/index', N'ErpPurchaseOrder', 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'1', N'2024-02-12 08:51:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2667, N'采购订单查询', N'erp:purchase-order:query', 3, 1, 2666, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:17', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2668, N'采购订单创建', N'erp:purchase-order:create', 3, 2, 2666, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:44:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2669, N'采购订单更新', N'erp:purchase-order:update', 3, 3, 2666, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:44:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2670, N'采购订单删除', N'erp:purchase-order:delete', 3, 4, 2666, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:00', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2671, N'采购订单导出', N'erp:purchase-order:export', 3, 5, 2666, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2672, N'采购订单审批', N'erp:purchase-order:update-status', 3, 6, 2666, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2673, N'采购入库', N'', 2, 2, 2602, N'in', N'fa-solid:gopuram', N'erp/purchase/in/index', N'ErpPurchaseIn', 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'1', N'2024-02-12 11:19:27', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2674, N'采购入库查询', N'erp:purchase-in:query', 3, 1, 2673, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:17', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2675, N'采购入库创建', N'erp:purchase-in:create', 3, 2, 2673, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:44:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2676, N'采购入库更新', N'erp:purchase-in:update', 3, 3, 2673, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:44:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2677, N'采购入库删除', N'erp:purchase-in:delete', 3, 4, 2673, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:00', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2678, N'采购入库导出', N'erp:purchase-in:export', 3, 5, 2673, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2679, N'采购入库审批', N'erp:purchase-in:update-status', 3, 6, 2673, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2680, N'采购退货', N'', 2, 3, 2602, N'return', N'ep:minus', N'erp/purchase/return/index', N'ErpPurchaseReturn', 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'1', N'2024-02-12 20:51:02', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2681, N'采购退货查询', N'erp:purchase-return:query', 3, 1, 2680, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:17', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2682, N'采购退货创建', N'erp:purchase-return:create', 3, 2, 2680, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:44:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2683, N'采购退货更新', N'erp:purchase-return:update', 3, 3, 2680, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:44:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2684, N'采购退货删除', N'erp:purchase-return:delete', 3, 4, 2680, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:00', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2685, N'采购退货导出', N'erp:purchase-return:export', 3, 5, 2680, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2686, N'采购退货审批', N'erp:purchase-return:update-status', 3, 6, 2680, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2687, N'付款单', N'', 2, 1, 2645, N'payment', N'ep:caret-right', N'erp/finance/payment/index', N'ErpFinancePayment', 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'1', N'2024-02-14 08:24:23', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2688, N'付款单查询', N'erp:finance-payment:query', 3, 1, 2687, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:17', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2689, N'付款单创建', N'erp:finance-payment:create', 3, 2, 2687, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:44:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2690, N'付款单更新', N'erp:finance-payment:update', 3, 3, 2687, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:44:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2691, N'付款单删除', N'erp:finance-payment:delete', 3, 4, 2687, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:00', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2692, N'付款单导出', N'erp:finance-payment:export', 3, 5, 2687, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2693, N'付款单审批', N'erp:finance-payment:update-status', 3, 6, 2687, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2694, N'收款单', N'', 2, 2, 2645, N'receipt', N'ep:expand', N'erp/finance/receipt/index', N'ErpFinanceReceipt', 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'1', N'2024-02-15 19:35:45', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2695, N'收款单查询', N'erp:finance-receipt:query', 3, 1, 2694, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:17', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2696, N'收款单创建', N'erp:finance-receipt:create', 3, 2, 2694, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:44:54', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2697, N'收款单更新', N'erp:finance-receipt:update', 3, 3, 2694, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:44:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2698, N'收款单删除', N'erp:finance-receipt:delete', 3, 4, 2694, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:00', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2699, N'收款单导出', N'erp:finance-receipt:export', 3, 5, 2694, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2700, N'收款单审批', N'erp:finance-receipt:update-status', 3, 6, 2694, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-02-05 16:08:56', N'', N'2024-02-12 00:45:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2701, N'待办事项', N'', 2, 0, 2397, N'backlog', N'fa-solid:tasks', N'crm/backlog/index', N'CrmBacklog', 0, N'1', N'1', N'1', N'1', N'2024-02-17 17:17:11', N'1', N'2024-02-17 17:17:11', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2702, N'ERP 首页', N'erp:statistics:query', 2, 0, 2563, N'home', N'ep:home-filled', N'erp/home/index.vue', N'ErpHome', 0, N'1', N'1', N'1', N'1', N'2024-02-18 16:49:40', N'1', N'2024-02-26 21:12:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2703, N'商机状态配置', N'', 2, 4, 2524, N'business-status', N'fa-solid:charging-station', N'crm/business/status/index', N'CrmBusinessStatus', 0, N'1', N'1', N'1', N'1', N'2024-02-21 20:15:17', N'1', N'2024-02-21 20:15:17', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2704, N'商机状态查询', N'crm:business-status:query', 3, 1, 2703, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-02-21 20:35:36', N'1', N'2024-02-21 20:36:06', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2705, N'商机状态创建', N'crm:business-status:create', 3, 2, 2703, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-02-21 20:35:57', N'1', N'2024-02-21 20:35:57', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2706, N'商机状态更新', N'crm:business-status:update', 3, 3, 2703, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-02-21 20:36:21', N'1', N'2024-02-21 20:36:21', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2707, N'商机状态删除', N'crm:business-status:delete', 3, 4, 2703, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-02-21 20:36:36', N'1', N'2024-02-21 20:36:36', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2708, N'合同配置', N'', 2, 5, 2524, N'contract-config', N'ep:connection', N'crm/contract/config/index', N'CrmContractConfig', 0, N'1', N'1', N'1', N'1', N'2024-02-24 16:44:40', N'1', N'2024-02-24 16:44:48', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2709, N'客户公海配置查询', N'crm:customer-pool-config:query', 3, 2, 2516, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-02-24 16:45:19', N'1', N'2024-02-24 16:45:28', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2710, N'合同配置更新', N'crm:contract-config:update', 3, 1, 2708, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-02-24 16:45:56', N'1', N'2024-02-24 16:45:56', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2711, N'合同配置查询', N'crm:contract-config:query', 3, 2, 2708, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-02-24 16:46:16', N'1', N'2024-02-24 16:46:16', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2712, N'客户分析', N'crm:statistics-customer:query', 2, 0, 2560, N'customer', N'ep:avatar', N'views/crm/statistics/customer/index.vue', N'CrmStatisticsCustomer', 0, N'1', N'1', N'1', N'1', N'2024-03-09 16:43:56', N'1', N'2024-04-24 19:42:52', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2713, N'抄送我的', N'bpm:process-instance-cc:query', 2, 30, 1200, N'copy', N'ep:copy-document', N'bpm/task/copy/index', N'BpmProcessInstanceCopy', 0, N'1', N'1', N'1', N'1', N'2024-03-17 21:50:23', N'1', N'2024-04-24 19:55:12', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2714, N'流程分类', N'', 2, 3, 1186, N'category', N'fa:object-ungroup', N'bpm/category/index', N'BpmCategory', 0, N'1', N'1', N'1', N'', N'2024-03-08 02:00:51', N'1', N'2024-03-21 23:51:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2715, N'分类查询', N'bpm:category:query', 3, 1, 2714, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2024-03-08 02:00:51', N'1', N'2024-03-19 14:36:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2716, N'分类创建', N'bpm:category:create', 3, 2, 2714, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2024-03-08 02:00:51', N'1', N'2024-03-19 14:36:31', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2717, N'分类更新', N'bpm:category:update', 3, 3, 2714, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2024-03-08 02:00:51', N'1', N'2024-03-19 14:36:35', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2718, N'分类删除', N'bpm:category:delete', 3, 4, 2714, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'', N'2024-03-08 02:00:51', N'1', N'2024-03-19 14:36:41', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2720, N'发起流程', N'', 2, 0, 1200, N'create', N'fa-solid:grin-stars', N'bpm/processInstance/create/index', N'BpmProcessInstanceCreate', 0, N'1', N'0', N'1', N'1', N'2024-03-19 19:46:05', N'1', N'2024-03-23 19:03:42', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2721, N'流程实例', N'', 2, 10, 1186, N'process-instance/manager', N'fa:square', N'bpm/processInstance/manager/index', N'BpmProcessInstanceManager', 0, N'1', N'1', N'1', N'1', N'2024-03-21 23:57:30', N'1', N'2024-03-21 23:57:30', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2722, N'流程实例的查询(管理员)', N'bpm:process-instance:manager-query', 3, 1, 2721, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-03-22 08:18:27', N'1', N'2024-03-22 08:19:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2723, N'流程实例的取消(管理员)', N'bpm:process-instance:cancel-by-admin', 3, 2, 2721, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-03-22 08:19:25', N'1', N'2024-03-22 08:19:25', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2724, N'流程任务', N'', 2, 11, 1186, N'process-tasnk', N'ep:collection-tag', N'bpm/task/manager/index', N'BpmManagerTask', 0, N'1', N'1', N'1', N'1', N'2024-03-22 08:43:22', N'1', N'2024-03-22 08:43:27', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2725, N'流程任务的查询(管理员)', N'bpm:task:mananger-query', 3, 1, 2724, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-03-22 08:43:49', N'1', N'2024-03-22 08:43:49', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2726, N'流程监听器', N'', 2, 5, 1186, N'process-listener', N'fa:assistive-listening-systems', N'bpm/processListener/index', N'BpmProcessListener', 0, N'1', N'1', N'1', N'', N'2024-03-09 16:05:34', N'1', N'2024-03-23 13:13:38', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2727, N'流程监听器查询', N'bpm:process-listener:query', 3, 1, 2726, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-03-09 16:05:34', N'', N'2024-03-09 16:05:34', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2728, N'流程监听器创建', N'bpm:process-listener:create', 3, 2, 2726, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-03-09 16:05:34', N'', N'2024-03-09 16:05:34', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2729, N'流程监听器更新', N'bpm:process-listener:update', 3, 3, 2726, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-03-09 16:05:34', N'', N'2024-03-09 16:05:34', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2730, N'流程监听器删除', N'bpm:process-listener:delete', 3, 4, 2726, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-03-09 16:05:34', N'', N'2024-03-09 16:05:34', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2731, N'流程表达式', N'', 2, 6, 1186, N'process-expression', N'fa:wpexplorer', N'bpm/processExpression/index', N'BpmProcessExpression', 0, N'1', N'1', N'1', N'', N'2024-03-09 22:35:08', N'1', N'2024-03-23 19:43:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2732, N'流程表达式查询', N'bpm:process-expression:query', 3, 1, 2731, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-03-09 22:35:08', N'', N'2024-03-09 22:35:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2733, N'流程表达式创建', N'bpm:process-expression:create', 3, 2, 2731, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-03-09 22:35:08', N'', N'2024-03-09 22:35:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2734, N'流程表达式更新', N'bpm:process-expression:update', 3, 3, 2731, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-03-09 22:35:08', N'', N'2024-03-09 22:35:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2735, N'流程表达式删除', N'bpm:process-expression:delete', 3, 4, 2731, N'', N'', N'', NULL, 0, N'1', N'1', N'1', N'', N'2024-03-09 22:35:08', N'', N'2024-03-09 22:35:08', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2736, N'员工业绩', N'crm:statistics-performance:query', 2, 3, 2560, N'performance', N'ep:dish-dot', N'crm/statistics/performance/index', N'CrmStatisticsPerformance', 0, N'1', N'1', N'1', N'1', N'2024-04-05 13:49:20', N'1', N'2024-04-24 19:42:43', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2737, N'客户画像', N'crm:statistics-portrait:query', 2, 4, 2560, N'portrait', N'ep:picture', N'crm/statistics/portrait/index', N'CrmStatisticsPortrait', 0, N'1', N'1', N'1', N'1', N'2024-04-05 13:57:40', N'1', N'2024-04-24 19:42:24', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2738, N'销售漏斗', N'crm:statistics-funnel:query', 2, 5, 2560, N'funnel', N'ep:grape', N'crm/statistics/funnel/index', N'CrmStatisticsFunnel', 0, N'1', N'1', N'1', N'1', N'2024-04-13 10:53:26', N'1', N'2024-04-24 19:39:33', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2739, N'消息中心', N'', 1, 7, 1, N'messages', N'ep:chat-dot-round', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-22 23:54:30', N'1', N'2024-04-23 09:36:35', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2740, N'监控中心', N'', 1, 10, 2, N'monitors', N'ep:monitor', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-23 00:04:44', N'1', N'2024-04-23 00:04:44', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2741, N'领取公海客户', N'crm:customer:receive', 3, 1, 2546, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 19:47:45', N'1', N'2024-04-24 19:47:45', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2742, N'分配公海客户', N'crm:customer:distribute', 3, 2, 2546, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 19:48:05', N'1', N'2024-04-24 19:48:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2743, N'商品统计查询', N'statistics:product:query', 3, 1, 2545, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 19:50:05', N'1', N'2024-04-24 19:50:05', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2744, N'商品统计导出', N'statistics:product:export', 3, 2, 2545, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 19:50:26', N'1', N'2024-04-24 19:50:26', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2745, N'支付渠道查询', N'pay:channel:query', 3, 10, 1126, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 19:53:01', N'1', N'2024-04-24 19:53:01', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2746, N'支付渠道创建', N'pay:channel:create', 3, 11, 1126, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 19:53:18', N'1', N'2024-04-24 19:53:18', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2747, N'支付渠道更新', N'pay:channel:update', 3, 12, 1126, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 19:53:32', N'1', N'2024-04-24 19:53:58', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2748, N'支付渠道删除', N'pay:channel:delete', 3, 13, 1126, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 19:54:34', N'1', N'2024-04-24 19:54:34', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2749, N'商品收藏查询', N'product:favorite:query', 3, 10, 2014, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 19:55:47', N'1', N'2024-04-24 19:55:47', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2750, N'商品浏览查询', N'product:browse-history:query', 3, 20, 2014, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 19:57:43', N'1', N'2024-04-24 19:57:43', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2751, N'售后同意', N'trade:after-sale:agree', 3, 2, 2073, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 19:58:40', N'1', N'2024-04-24 19:58:40', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2752, N'售后不同意', N'trade:after-sale:disagree', 3, 3, 2073, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 19:59:03', N'1', N'2024-04-24 19:59:03', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2753, N'售后确认退货', N'trade:after-sale:receive', 3, 4, 2073, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 20:00:07', N'1', N'2024-04-24 20:00:07', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2754, N'售后确认退款', N'trade:after-sale:refund', 3, 5, 2073, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 20:00:24', N'1', N'2024-04-24 20:00:24', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2755, N'删除项目', N'report:go-view-project:delete', 3, 2, 2153, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 20:01:37', N'1', N'2024-04-24 20:01:37', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2756, N'会员等级记录查询', N'member:level-record:query', 3, 10, 2325, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 20:02:32', N'1', N'2024-04-24 20:02:32', N'0') +GO +INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES (2757, N'会员经验记录查询', N'member:experience-record:query', 3, 11, 2325, N'', N'', N'', N'', 0, N'1', N'1', N'1', N'1', N'2024-04-24 20:02:51', N'1', N'2024-04-24 20:02:51', N'0') +GO +SET IDENTITY_INSERT system_menu OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_notice +-- ---------------------------- +DROP TABLE IF EXISTS system_notice; +CREATE TABLE system_notice +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + title nvarchar(50) NOT NULL, + content nvarchar(max) NOT NULL, + type tinyint NOT NULL, + status tinyint DEFAULT 0 NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'公告ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notice', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'公告标题', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notice', + 'COLUMN', N'title' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'公告内容', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notice', + 'COLUMN', N'content' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'公告类型(1通知 2公告)', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notice', + 'COLUMN', N'type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'公告状态(0正常 1关闭)', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notice', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notice', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notice', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notice', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notice', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notice', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notice', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'通知公告表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notice' +GO + +-- ---------------------------- +-- Records of system_notice +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_notice ON +GO +INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, N'芋道的公众', N'

    新版本内容133

    ', 1, 0, N'admin', N'2021-01-05 17:03:48', N'1', N'2022-05-04 21:00:20', N'0', 1) +GO +INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, N'维护通知:2018-07-01 系统凌晨维护', N'

    11112222

    ', 2, 1, N'admin', N'2021-01-05 17:03:48', N'1', N'2023-12-02 20:07:26', N'0', 1) +GO +INSERT INTO system_notice (id, title, content, type, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, N'我是测试标题', N'

    哈哈哈哈123

    ', 1, 0, N'110', N'2022-02-22 01:01:25', N'110', N'2022-02-22 01:01:46', N'0', 121) +GO +SET IDENTITY_INSERT system_notice OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_notify_message +-- ---------------------------- +DROP TABLE IF EXISTS system_notify_message; +CREATE TABLE system_notify_message +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint NOT NULL, + user_type tinyint NOT NULL, + template_id bigint NOT NULL, + template_code nvarchar(64) NOT NULL, + template_nickname nvarchar(63) NOT NULL, + template_content nvarchar(1024) NOT NULL, + template_type int NOT NULL, + template_params nvarchar(255) NOT NULL, + read_status varchar(1) NOT NULL, + read_time datetime2 DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户id', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'user_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模版编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'template_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板编码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'template_code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模版发送人名称', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'template_nickname' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模版内容', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'template_content' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模版类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'template_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模版参数', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'template_params' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否已读', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'read_status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'阅读时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'read_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'站内信消息表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_message' +GO + +-- ---------------------------- +-- Records of system_notify_message +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_notify_message ON +GO +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 1, 2, 1, N'test', N'123', N'我是 1,我开始 2 了', 1, N'{"name":"1","what":"2"}', N'1', N'2023-02-10 00:47:04', N'1', N'2023-01-28 11:44:08', N'1', N'2023-02-10 00:47:04', N'0', 1) +GO +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, 1, 2, 1, N'test', N'123', N'我是 1,我开始 2 了', 1, N'{"name":"1","what":"2"}', N'1', N'2023-02-10 00:47:04', N'1', N'2023-01-28 11:45:04', N'1', N'2023-02-10 00:47:04', N'0', 1) +GO +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, 103, 2, 2, N'register', N'系统消息', N'你好,欢迎 哈哈 加入大家庭!', 2, N'{"name":"哈哈"}', N'0', NULL, N'1', N'2023-01-28 21:02:20', N'1', N'2023-01-28 21:02:20', N'0', 1) +GO +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, 1, 2, 1, N'test', N'123', N'我是 芋艿,我开始 写代码 了', 1, N'{"name":"芋艿","what":"写代码"}', N'1', N'2023-02-10 00:47:04', N'1', N'2023-01-28 22:21:42', N'1', N'2023-02-10 00:47:04', N'0', 1) +GO +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, 1, 2, 1, N'test', N'123', N'我是 芋艿,我开始 写代码 了', 1, N'{"name":"芋艿","what":"写代码"}', N'1', N'2023-01-29 10:52:06', N'1', N'2023-01-28 22:22:07', N'1', N'2023-01-29 10:52:06', N'0', 1) +GO +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (7, 1, 2, 1, N'test', N'123', N'我是 2,我开始 3 了', 1, N'{"name":"2","what":"3"}', N'1', N'2023-01-29 10:52:06', N'1', N'2023-01-28 23:45:21', N'1', N'2023-01-29 10:52:06', N'0', 1) +GO +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (8, 1, 2, 2, N'register', N'系统消息', N'你好,欢迎 123 加入大家庭!', 2, N'{"name":"123"}', N'1', N'2023-01-29 10:52:06', N'1', N'2023-01-28 23:50:21', N'1', N'2023-01-29 10:52:06', N'0', 1) +GO +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, 247, 1, 4, N'brokerage_withdraw_audit_approve', N'system', N'您在2023-09-28 08:35:46提现¥0.09元的申请已通过审核', 2, N'{"reason":null,"createTime":"2023-09-28 08:35:46","price":"0.09"}', N'0', NULL, N'1', N'2023-09-28 16:36:22', N'1', N'2023-09-28 16:36:22', N'0', 1) +GO +INSERT INTO system_notify_message (id, user_id, user_type, template_id, template_code, template_nickname, template_content, template_type, template_params, read_status, read_time, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (10, 247, 1, 4, N'brokerage_withdraw_audit_approve', N'system', N'您在2023-09-30 20:59:40提现¥1.00元的申请已通过审核', 2, N'{"reason":null,"createTime":"2023-09-30 20:59:40","price":"1.00"}', N'0', NULL, N'1', N'2023-10-03 12:11:34', N'1', N'2023-10-03 12:11:34', N'0', 1) +GO +SET IDENTITY_INSERT system_notify_message OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_notify_template +-- ---------------------------- +DROP TABLE IF EXISTS system_notify_template; +CREATE TABLE system_notify_template +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(63) NOT NULL, + code nvarchar(64) NOT NULL, + nickname nvarchar(255) NOT NULL, + content nvarchar(1024) NOT NULL, + type tinyint NOT NULL, + params nvarchar(255) DEFAULT NULL NULL, + status tinyint NOT NULL, + remark nvarchar(255) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'主键', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板名称', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模版编码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template', + 'COLUMN', N'code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'发送人名称', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template', + 'COLUMN', N'nickname' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模版内容', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template', + 'COLUMN', N'content' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template', + 'COLUMN', N'type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'参数数组', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template', + 'COLUMN', N'params' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'状态', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'备注', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template', + 'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'站内信模板表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_notify_template' +GO + +-- ---------------------------- +-- Table structure for system_oauth2_access_token +-- ---------------------------- +DROP TABLE IF EXISTS system_oauth2_access_token; +CREATE TABLE system_oauth2_access_token +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint NOT NULL, + user_type tinyint NOT NULL, + user_info nvarchar(512) NOT NULL, + access_token nvarchar(255) NOT NULL, + refresh_token nvarchar(32) NOT NULL, + client_id nvarchar(255) NOT NULL, + scopes nvarchar(255) DEFAULT NULL NULL, + expires_time datetime2 NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +CREATE INDEX idx_system_oauth2_access_token_01 ON system_oauth2_access_token (access_token) +GO +CREATE INDEX idx_system_oauth2_access_token_02 ON system_oauth2_access_token (refresh_token) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'user_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户信息', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'user_info' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'访问令牌', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'access_token' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'刷新令牌', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'refresh_token' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'客户端编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'client_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'授权范围', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'scopes' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'过期时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'expires_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'OAuth2 访问令牌', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_access_token' +GO + +-- ---------------------------- +-- Table structure for system_oauth2_approve +-- ---------------------------- +DROP TABLE IF EXISTS system_oauth2_approve; +CREATE TABLE system_oauth2_approve +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint NOT NULL, + user_type tinyint NOT NULL, + client_id nvarchar(255) NOT NULL, + scope nvarchar(255) DEFAULT '' NOT NULL, + approved varchar(1) DEFAULT '0' NOT NULL, + expires_time datetime2 NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_approve', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_approve', + 'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_approve', + 'COLUMN', N'user_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'客户端编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_approve', + 'COLUMN', N'client_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'授权范围', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_approve', + 'COLUMN', N'scope' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否接受', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_approve', + 'COLUMN', N'approved' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'过期时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_approve', + 'COLUMN', N'expires_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_approve', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_approve', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_approve', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_approve', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_approve', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_approve', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'OAuth2 批准表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_approve' +GO + +-- ---------------------------- +-- Table structure for system_oauth2_client +-- ---------------------------- +DROP TABLE IF EXISTS system_oauth2_client; +CREATE TABLE system_oauth2_client +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + client_id nvarchar(255) NOT NULL, + secret nvarchar(255) NOT NULL, + name nvarchar(255) NOT NULL, + logo nvarchar(255) NOT NULL, + description nvarchar(255) DEFAULT NULL NULL, + status tinyint NOT NULL, + access_token_validity_seconds int NOT NULL, + refresh_token_validity_seconds int NOT NULL, + redirect_uris nvarchar(255) NOT NULL, + authorized_grant_types nvarchar(255) NOT NULL, + scopes nvarchar(255) DEFAULT NULL NULL, + auto_approve_scopes nvarchar(255) DEFAULT NULL NULL, + authorities nvarchar(255) DEFAULT NULL NULL, + resource_ids nvarchar(255) DEFAULT NULL NULL, + additional_information nvarchar(4000) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'客户端编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'client_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'客户端密钥', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'secret' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'应用名', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'应用图标', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'logo' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'应用描述', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'description' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'状态', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'访问令牌的有效期', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'access_token_validity_seconds' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'刷新令牌的有效期', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'refresh_token_validity_seconds' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'可重定向的 URI 地址', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'redirect_uris' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'授权类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'authorized_grant_types' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'授权范围', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'scopes' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'自动通过的授权范围', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'auto_approve_scopes' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'权限', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'authorities' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'资源', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'resource_ids' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'附加信息', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'additional_information' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'OAuth2 客户端表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_client' +GO + +-- ---------------------------- +-- Records of system_oauth2_client +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_oauth2_client ON +GO +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (1, N'default', N'admin123', N'芋道源码', N'http://test.win.iocoder.cn/a5e2e244368878a366b516805a4aabf1.png', N'我是描述', 0, 1800, 2592000, N'["https://www.iocoder.cn","https://doc.iocoder.cn"]', N'["password","authorization_code","implicit","refresh_token"]', N'["user.read","user.write"]', N'[]', N'["user.read","user.write"]', N'[]', N'{}', N'1', N'2022-05-11 21:47:12', N'1', N'2024-02-22 16:31:52', N'0') +GO +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (40, N'test', N'test2', N'biubiu', N'http://test.win.iocoder.cn/277a899d573723f1fcdfb57340f00379.png', N'啦啦啦啦', 0, 1800, 43200, N'["https://www.iocoder.cn"]', N'["password","authorization_code","implicit"]', N'["user_info","projects"]', N'["user_info"]', N'[]', N'[]', N'{}', N'1', N'2022-05-12 00:28:20', N'1', N'2023-12-02 21:01:01', N'0') +GO +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (41, N'win-sso-demo-by-code', N'test', N'基于授权码模式,如何实现 SSO 单点登录?', N'http://test.win.iocoder.cn/fe4ed36596adad5120036ef61a6d0153654544d44af8dd4ad3ffe8f759933d6f.png', NULL, 0, 1800, 43200, N'["http://127.0.0.1:18080"]', N'["authorization_code","refresh_token"]', N'["user.read","user.write"]', N'[]', N'[]', N'[]', NULL, N'1', N'2022-09-29 13:28:31', N'1', N'2022-09-29 13:28:31', N'0') +GO +INSERT INTO system_oauth2_client (id, client_id, secret, name, logo, description, status, access_token_validity_seconds, refresh_token_validity_seconds, redirect_uris, authorized_grant_types, scopes, auto_approve_scopes, authorities, resource_ids, additional_information, creator, create_time, updater, update_time, deleted) VALUES (42, N'win-sso-demo-by-password', N'test', N'基于密码模式,如何实现 SSO 单点登录?', N'http://test.win.iocoder.cn/604bdc695e13b3b22745be704d1f2aa8ee05c5f26f9fead6d1ca49005afbc857.jpeg', NULL, 0, 1800, 43200, N'["http://127.0.0.1:18080"]', N'["password","refresh_token"]', N'["user.read","user.write"]', N'[]', N'[]', N'[]', NULL, N'1', N'2022-10-04 17:40:16', N'1', N'2022-10-04 20:31:21', N'0') +GO +SET IDENTITY_INSERT system_oauth2_client OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_oauth2_code +-- ---------------------------- +DROP TABLE IF EXISTS system_oauth2_code; +CREATE TABLE system_oauth2_code +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint NOT NULL, + user_type tinyint NOT NULL, + code nvarchar(32) NOT NULL, + client_id nvarchar(255) NOT NULL, + scopes nvarchar(255) DEFAULT '' NULL, + expires_time datetime2 NOT NULL, + redirect_uri nvarchar(255) DEFAULT NULL NULL, + state nvarchar(255) DEFAULT '' NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'user_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'授权码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'客户端编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'client_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'授权范围', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'scopes' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'过期时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'expires_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'可重定向的 URI 地址', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'redirect_uri' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'状态', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'state' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'OAuth2 授权码表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_code' +GO + +-- ---------------------------- +-- Table structure for system_oauth2_refresh_token +-- ---------------------------- +DROP TABLE IF EXISTS system_oauth2_refresh_token; +CREATE TABLE system_oauth2_refresh_token +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint NOT NULL, + refresh_token nvarchar(32) NOT NULL, + user_type tinyint NOT NULL, + client_id nvarchar(255) NOT NULL, + scopes nvarchar(255) DEFAULT NULL NULL, + expires_time datetime2 NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_refresh_token', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_refresh_token', + 'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'刷新令牌', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_refresh_token', + 'COLUMN', N'refresh_token' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_refresh_token', + 'COLUMN', N'user_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'客户端编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_refresh_token', + 'COLUMN', N'client_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'授权范围', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_refresh_token', + 'COLUMN', N'scopes' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'过期时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_refresh_token', + 'COLUMN', N'expires_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_refresh_token', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_refresh_token', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_refresh_token', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_refresh_token', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_refresh_token', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_refresh_token', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'OAuth2 刷新令牌', + 'SCHEMA', N'dbo', + 'TABLE', N'system_oauth2_refresh_token' +GO + +-- ---------------------------- +-- Table structure for system_operate_log +-- ---------------------------- +DROP TABLE IF EXISTS system_operate_log; +CREATE TABLE system_operate_log +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + trace_id nvarchar(64) DEFAULT '' NOT NULL, + user_id bigint NOT NULL, + user_type tinyint DEFAULT 0 NOT NULL, + type nvarchar(50) NOT NULL, + sub_type nvarchar(50) NOT NULL, + biz_id bigint NOT NULL, + action nvarchar(2000) DEFAULT '' NOT NULL, + extra nvarchar(2000) DEFAULT '' NOT NULL, + request_method nvarchar(16) DEFAULT '' NULL, + request_url nvarchar(255) DEFAULT '' NULL, + user_ip nvarchar(50) DEFAULT NULL NULL, + user_agent nvarchar(200) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'日志主键', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'链路追踪编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'trace_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'user_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'操作模块类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'操作名', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'sub_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'操作数据模块编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'biz_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'操作内容', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'action' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'拓展字段', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'extra' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'请求方法名', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'request_method' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'请求地址', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'request_url' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户 IP', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'user_ip' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'浏览器 UA', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'user_agent' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'操作日志记录 V2 版本', + 'SCHEMA', N'dbo', + 'TABLE', N'system_operate_log' +GO + +-- ---------------------------- +-- Table structure for system_post +-- ---------------------------- +DROP TABLE IF EXISTS system_post; +CREATE TABLE system_post +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + code nvarchar(64) NOT NULL, + name nvarchar(50) NOT NULL, + sort int NOT NULL, + status tinyint NOT NULL, + remark nvarchar(500) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'岗位ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_post', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'岗位编码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_post', + 'COLUMN', N'code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'岗位名称', + 'SCHEMA', N'dbo', + 'TABLE', N'system_post', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'显示顺序', + 'SCHEMA', N'dbo', + 'TABLE', N'system_post', + 'COLUMN', N'sort' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'状态(0正常 1停用)', + 'SCHEMA', N'dbo', + 'TABLE', N'system_post', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'备注', + 'SCHEMA', N'dbo', + 'TABLE', N'system_post', + 'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_post', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_post', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_post', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_post', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_post', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_post', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'岗位信息表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_post' +GO + +-- ---------------------------- +-- Records of system_post +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_post ON +GO +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, N'ceo', N'董事长', 1, 0, N'', N'admin', N'2021-01-06 17:03:48', N'1', N'2023-02-11 15:19:04', N'0', 1) +GO +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, N'se', N'项目经理', 2, 0, N'', N'admin', N'2021-01-05 17:03:48', N'1', N'2023-11-15 09:18:20', N'0', 1) +GO +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, N'user', N'普通员工', 4, 0, N'111', N'admin', N'2021-01-05 17:03:48', N'1', N'2023-12-02 10:04:37', N'0', 1) +GO +INSERT INTO system_post (id, code, name, sort, status, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, N'HR', N'人力资源', 5, 0, N'', N'1', N'2024-03-24 20:45:40', N'1', N'2024-03-24 20:45:40', N'0', 1) +GO +SET IDENTITY_INSERT system_post OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_role +-- ---------------------------- +DROP TABLE IF EXISTS system_role; +CREATE TABLE system_role +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(30) NOT NULL, + code nvarchar(100) NOT NULL, + sort int NOT NULL, + data_scope tinyint DEFAULT 1 NOT NULL, + data_scope_dept_ids nvarchar(500) DEFAULT '' NOT NULL, + status tinyint NOT NULL, + type tinyint NOT NULL, + remark nvarchar(500) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'角色ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'角色名称', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'角色权限字符串', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'显示顺序', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'sort' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'data_scope' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'数据范围(指定部门数组)', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'data_scope_dept_ids' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'角色状态(0正常 1停用)', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'角色类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'备注', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'角色信息表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role' +GO + +-- ---------------------------- +-- Records of system_role +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_role ON +GO +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, N'超级管理员', N'super_admin', 1, 1, N'', 0, 1, N'超级管理员', N'admin', N'2021-01-05 17:03:48', N'', N'2022-02-22 05:08:21', N'0', 1) +GO +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, N'普通角色', N'common', 2, 2, N'', 0, 1, N'普通角色', N'admin', N'2021-01-05 17:03:48', N'', N'2022-02-22 05:08:20', N'0', 1) +GO +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, N'CRM 管理员', N'crm_admin', 2, 1, N'', 0, 1, N'CRM 专属角色', N'1', N'2024-02-24 10:51:13', N'1', N'2024-02-24 02:51:32', N'0', 1) +GO +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (101, N'测试账号', N'test', 0, 1, N'[]', 0, 2, N'我想测试', N'', N'2021-01-06 13:49:35', N'1', N'2024-03-24 22:22:45', N'0', 1) +GO +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (109, N'租户管理员', N'tenant_admin', 0, 1, N'', 0, 1, N'系统自动生成', N'1', N'2022-02-22 00:56:14', N'1', N'2022-02-22 00:56:14', N'0', 121) +GO +INSERT INTO system_role (id, name, code, sort, data_scope, data_scope_dept_ids, status, type, remark, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (111, N'租户管理员', N'tenant_admin', 0, 1, N'', 0, 1, N'系统自动生成', N'1', N'2022-03-07 21:37:58', N'1', N'2022-03-07 21:37:58', N'0', 122) +GO +SET IDENTITY_INSERT system_role OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS system_role_menu; +CREATE TABLE system_role_menu +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + role_id bigint NOT NULL, + menu_id bigint NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'自增编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role_menu', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'角色ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role_menu', + 'COLUMN', N'role_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'菜单ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role_menu', + 'COLUMN', N'menu_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role_menu', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role_menu', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role_menu', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role_menu', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role_menu', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role_menu', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'角色和菜单关联表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_role_menu' +GO + +-- ---------------------------- +-- Records of system_role_menu +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_role_menu ON +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (263, 109, 1, N'1', N'2022-02-22 00:56:14', N'1', N'2022-02-22 00:56:14', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (434, 2, 1, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (454, 2, 1093, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (455, 2, 1094, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (460, 2, 1100, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (467, 2, 1107, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (476, 2, 1117, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (477, 2, 100, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (478, 2, 101, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (479, 2, 102, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (480, 2, 1126, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (481, 2, 103, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (483, 2, 104, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (485, 2, 105, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (488, 2, 107, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (490, 2, 108, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (492, 2, 109, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (498, 2, 1138, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (523, 2, 1224, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (524, 2, 1225, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (541, 2, 500, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (543, 2, 501, N'1', N'2022-02-22 13:09:12', N'1', N'2022-02-22 13:09:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (675, 2, 2, N'1', N'2022-02-22 13:16:57', N'1', N'2022-02-22 13:16:57', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (689, 2, 1077, N'1', N'2022-02-22 13:16:57', N'1', N'2022-02-22 13:16:57', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (690, 2, 1078, N'1', N'2022-02-22 13:16:57', N'1', N'2022-02-22 13:16:57', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (692, 2, 1083, N'1', N'2022-02-22 13:16:57', N'1', N'2022-02-22 13:16:57', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (693, 2, 1084, N'1', N'2022-02-22 13:16:57', N'1', N'2022-02-22 13:16:57', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (699, 2, 1090, N'1', N'2022-02-22 13:16:57', N'1', N'2022-02-22 13:16:57', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (703, 2, 106, N'1', N'2022-02-22 13:16:57', N'1', N'2022-02-22 13:16:57', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (704, 2, 110, N'1', N'2022-02-22 13:16:57', N'1', N'2022-02-22 13:16:57', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (705, 2, 111, N'1', N'2022-02-22 13:16:57', N'1', N'2022-02-22 13:16:57', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (706, 2, 112, N'1', N'2022-02-22 13:16:57', N'1', N'2022-02-22 13:16:57', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (707, 2, 113, N'1', N'2022-02-22 13:16:57', N'1', N'2022-02-22 13:16:57', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1296, 110, 1, N'110', N'2022-02-23 00:23:55', N'110', N'2022-02-23 00:23:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1578, 111, 1, N'1', N'2022-03-07 21:37:58', N'1', N'2022-03-07 21:37:58', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1604, 101, 1216, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1605, 101, 1217, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1606, 101, 1218, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1607, 101, 1219, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1608, 101, 1220, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1609, 101, 1221, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1610, 101, 5, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1611, 101, 1222, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1612, 101, 1118, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1613, 101, 1119, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1614, 101, 1120, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1615, 101, 1185, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1616, 101, 1186, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1617, 101, 1187, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1618, 101, 1188, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1619, 101, 1189, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1620, 101, 1190, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1621, 101, 1191, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1622, 101, 1192, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1623, 101, 1193, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1624, 101, 1194, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1625, 101, 1195, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1626, 101, 1196, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1627, 101, 1197, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1628, 101, 1198, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1629, 101, 1199, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1630, 101, 1200, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1631, 101, 1201, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1632, 101, 1202, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1633, 101, 1207, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1634, 101, 1208, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1635, 101, 1209, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1636, 101, 1210, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1637, 101, 1211, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1638, 101, 1212, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1639, 101, 1213, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1640, 101, 1215, N'1', N'2022-03-19 21:45:52', N'1', N'2022-03-19 21:45:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1641, 101, 2, N'1', N'2022-04-01 22:21:24', N'1', N'2022-04-01 22:21:24', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1642, 101, 1031, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1643, 101, 1032, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1644, 101, 1033, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1645, 101, 1034, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1646, 101, 1035, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1647, 101, 1050, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1648, 101, 1051, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1649, 101, 1052, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1650, 101, 1053, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1651, 101, 1054, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1652, 101, 1056, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1653, 101, 1057, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1654, 101, 1058, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1655, 101, 1059, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1656, 101, 1060, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1657, 101, 1066, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1658, 101, 1067, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1659, 101, 1070, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1664, 101, 1075, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1666, 101, 1077, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1667, 101, 1078, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1668, 101, 1082, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1669, 101, 1083, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1670, 101, 1084, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1671, 101, 1085, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1672, 101, 1086, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1673, 101, 1087, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1674, 101, 1088, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1675, 101, 1089, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1679, 101, 1237, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1680, 101, 1238, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1681, 101, 1239, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1682, 101, 1240, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1683, 101, 1241, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1684, 101, 1242, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1685, 101, 1243, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1687, 101, 106, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1688, 101, 110, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1689, 101, 111, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1690, 101, 112, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1691, 101, 113, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1692, 101, 114, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1693, 101, 115, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1694, 101, 116, N'1', N'2022-04-01 22:21:37', N'1', N'2022-04-01 22:21:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1729, 109, 100, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1730, 109, 101, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1731, 109, 1063, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1732, 109, 1064, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1733, 109, 1001, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1734, 109, 1065, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1735, 109, 1002, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1736, 109, 1003, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1737, 109, 1004, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1738, 109, 1005, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1739, 109, 1006, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1740, 109, 1007, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1741, 109, 1008, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1742, 109, 1009, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1743, 109, 1010, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1744, 109, 1011, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1745, 109, 1012, N'1', N'2022-09-21 22:08:51', N'1', N'2022-09-21 22:08:51', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1746, 111, 100, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1747, 111, 101, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1748, 111, 1063, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1749, 111, 1064, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1750, 111, 1001, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1751, 111, 1065, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1752, 111, 1002, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1753, 111, 1003, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1754, 111, 1004, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1755, 111, 1005, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1756, 111, 1006, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1757, 111, 1007, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1758, 111, 1008, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1759, 111, 1009, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1760, 111, 1010, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1761, 111, 1011, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1762, 111, 1012, N'1', N'2022-09-21 22:08:52', N'1', N'2022-09-21 22:08:52', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1763, 109, 100, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1764, 109, 101, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1765, 109, 1063, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1766, 109, 1064, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1767, 109, 1001, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1768, 109, 1065, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1769, 109, 1002, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1770, 109, 1003, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1771, 109, 1004, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1772, 109, 1005, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1773, 109, 1006, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1774, 109, 1007, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1775, 109, 1008, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1776, 109, 1009, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1777, 109, 1010, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1778, 109, 1011, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1779, 109, 1012, N'1', N'2022-09-21 22:08:53', N'1', N'2022-09-21 22:08:53', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1780, 111, 100, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1781, 111, 101, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1782, 111, 1063, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1783, 111, 1064, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1784, 111, 1001, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1785, 111, 1065, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1786, 111, 1002, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1787, 111, 1003, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1788, 111, 1004, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1789, 111, 1005, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1790, 111, 1006, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1791, 111, 1007, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1792, 111, 1008, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1793, 111, 1009, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1794, 111, 1010, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1795, 111, 1011, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1796, 111, 1012, N'1', N'2022-09-21 22:08:54', N'1', N'2022-09-21 22:08:54', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1797, 109, 100, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1798, 109, 101, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1799, 109, 1063, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1800, 109, 1064, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1801, 109, 1001, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1802, 109, 1065, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1803, 109, 1002, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1804, 109, 1003, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1805, 109, 1004, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1806, 109, 1005, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1807, 109, 1006, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1808, 109, 1007, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1809, 109, 1008, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1810, 109, 1009, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1811, 109, 1010, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1812, 109, 1011, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1813, 109, 1012, N'1', N'2022-09-21 22:08:55', N'1', N'2022-09-21 22:08:55', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1814, 111, 100, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1815, 111, 101, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1816, 111, 1063, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1817, 111, 1064, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1818, 111, 1001, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1819, 111, 1065, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1820, 111, 1002, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1821, 111, 1003, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1822, 111, 1004, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1823, 111, 1005, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1824, 111, 1006, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1825, 111, 1007, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1826, 111, 1008, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1827, 111, 1009, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1828, 111, 1010, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1829, 111, 1011, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1830, 111, 1012, N'1', N'2022-09-21 22:08:56', N'1', N'2022-09-21 22:08:56', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1831, 109, 103, N'1', N'2022-09-21 22:43:23', N'1', N'2022-09-21 22:43:23', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1832, 109, 1017, N'1', N'2022-09-21 22:43:23', N'1', N'2022-09-21 22:43:23', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1833, 109, 1018, N'1', N'2022-09-21 22:43:23', N'1', N'2022-09-21 22:43:23', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1834, 109, 1019, N'1', N'2022-09-21 22:43:23', N'1', N'2022-09-21 22:43:23', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1835, 109, 1020, N'1', N'2022-09-21 22:43:23', N'1', N'2022-09-21 22:43:23', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1836, 111, 103, N'1', N'2022-09-21 22:43:24', N'1', N'2022-09-21 22:43:24', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1837, 111, 1017, N'1', N'2022-09-21 22:43:24', N'1', N'2022-09-21 22:43:24', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1838, 111, 1018, N'1', N'2022-09-21 22:43:24', N'1', N'2022-09-21 22:43:24', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1839, 111, 1019, N'1', N'2022-09-21 22:43:24', N'1', N'2022-09-21 22:43:24', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1840, 111, 1020, N'1', N'2022-09-21 22:43:24', N'1', N'2022-09-21 22:43:24', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1841, 109, 1036, N'1', N'2022-09-21 22:48:13', N'1', N'2022-09-21 22:48:13', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1842, 109, 1037, N'1', N'2022-09-21 22:48:13', N'1', N'2022-09-21 22:48:13', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1843, 109, 1038, N'1', N'2022-09-21 22:48:13', N'1', N'2022-09-21 22:48:13', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1844, 109, 1039, N'1', N'2022-09-21 22:48:13', N'1', N'2022-09-21 22:48:13', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1845, 109, 107, N'1', N'2022-09-21 22:48:13', N'1', N'2022-09-21 22:48:13', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1846, 111, 1036, N'1', N'2022-09-21 22:48:13', N'1', N'2022-09-21 22:48:13', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1847, 111, 1037, N'1', N'2022-09-21 22:48:13', N'1', N'2022-09-21 22:48:13', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1848, 111, 1038, N'1', N'2022-09-21 22:48:13', N'1', N'2022-09-21 22:48:13', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1849, 111, 1039, N'1', N'2022-09-21 22:48:13', N'1', N'2022-09-21 22:48:13', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1850, 111, 107, N'1', N'2022-09-21 22:48:13', N'1', N'2022-09-21 22:48:13', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1991, 2, 1024, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1992, 2, 1025, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1993, 2, 1026, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1994, 2, 1027, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1995, 2, 1028, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1996, 2, 1029, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1997, 2, 1030, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1998, 2, 1031, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1999, 2, 1032, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2000, 2, 1033, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2001, 2, 1034, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2002, 2, 1035, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2003, 2, 1036, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2004, 2, 1037, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2005, 2, 1038, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2006, 2, 1039, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2007, 2, 1040, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2008, 2, 1042, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2009, 2, 1043, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2010, 2, 1045, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2011, 2, 1046, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2012, 2, 1048, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2013, 2, 1050, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2014, 2, 1051, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2015, 2, 1052, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2016, 2, 1053, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2017, 2, 1054, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2018, 2, 1056, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2019, 2, 1057, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2020, 2, 1058, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2021, 2, 2083, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2022, 2, 1059, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2023, 2, 1060, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2024, 2, 1063, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2025, 2, 1064, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2026, 2, 1065, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2027, 2, 1066, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2028, 2, 1067, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2029, 2, 1070, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2034, 2, 1075, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2036, 2, 1082, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2037, 2, 1085, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2038, 2, 1086, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2039, 2, 1087, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2040, 2, 1088, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2041, 2, 1089, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2042, 2, 1091, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2043, 2, 1092, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2044, 2, 1095, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2045, 2, 1096, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2046, 2, 1097, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2047, 2, 1098, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2048, 2, 1101, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2049, 2, 1102, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2050, 2, 1103, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2051, 2, 1104, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2052, 2, 1105, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2053, 2, 1106, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2054, 2, 1108, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2055, 2, 1109, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2061, 2, 1127, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2062, 2, 1128, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2063, 2, 1129, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2064, 2, 1130, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2066, 2, 1132, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2067, 2, 1133, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2068, 2, 1134, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2069, 2, 1135, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2070, 2, 1136, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2071, 2, 1137, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2072, 2, 114, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2073, 2, 1139, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2074, 2, 115, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2075, 2, 1140, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2076, 2, 116, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2077, 2, 1141, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2078, 2, 1142, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2079, 2, 1143, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2080, 2, 1150, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2081, 2, 1161, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2082, 2, 1162, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2083, 2, 1163, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2084, 2, 1164, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2085, 2, 1165, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2086, 2, 1166, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2087, 2, 1173, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2088, 2, 1174, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2089, 2, 1175, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2090, 2, 1176, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2091, 2, 1177, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2092, 2, 1178, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2099, 2, 1226, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2100, 2, 1227, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2101, 2, 1228, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2102, 2, 1229, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2103, 2, 1237, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2104, 2, 1238, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2105, 2, 1239, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2106, 2, 1240, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2107, 2, 1241, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2108, 2, 1242, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2109, 2, 1243, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2116, 2, 1254, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2117, 2, 1255, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2118, 2, 1256, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2119, 2, 1257, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2120, 2, 1258, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2121, 2, 1259, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2122, 2, 1260, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2123, 2, 1261, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2124, 2, 1263, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2125, 2, 1264, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2126, 2, 1265, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2127, 2, 1266, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2128, 2, 1267, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2129, 2, 1001, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2130, 2, 1002, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2131, 2, 1003, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2132, 2, 1004, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2133, 2, 1005, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2134, 2, 1006, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2135, 2, 1007, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2136, 2, 1008, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2137, 2, 1009, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2138, 2, 1010, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2139, 2, 1011, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2140, 2, 1012, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2141, 2, 1013, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2142, 2, 1014, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2143, 2, 1015, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2144, 2, 1016, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2145, 2, 1017, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2146, 2, 1018, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2147, 2, 1019, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2148, 2, 1020, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2149, 2, 1021, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2150, 2, 1022, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2151, 2, 1023, N'1', N'2023-01-25 08:42:52', N'1', N'2023-01-25 08:42:52', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2152, 2, 1281, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2153, 2, 1282, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2154, 2, 2000, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2155, 2, 2002, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2156, 2, 2003, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2157, 2, 2004, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2158, 2, 2005, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2159, 2, 2006, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2160, 2, 2008, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2161, 2, 2009, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2162, 2, 2010, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2163, 2, 2011, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2164, 2, 2012, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2170, 2, 2019, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2171, 2, 2020, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2172, 2, 2021, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2173, 2, 2022, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2174, 2, 2023, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2175, 2, 2025, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2177, 2, 2027, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2178, 2, 2028, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2179, 2, 2029, N'1', N'2023-01-25 08:42:58', N'1', N'2023-01-25 08:42:58', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2180, 2, 2014, N'1', N'2023-01-25 08:43:12', N'1', N'2023-01-25 08:43:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2181, 2, 2015, N'1', N'2023-01-25 08:43:12', N'1', N'2023-01-25 08:43:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2182, 2, 2016, N'1', N'2023-01-25 08:43:12', N'1', N'2023-01-25 08:43:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2183, 2, 2017, N'1', N'2023-01-25 08:43:12', N'1', N'2023-01-25 08:43:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2184, 2, 2018, N'1', N'2023-01-25 08:43:12', N'1', N'2023-01-25 08:43:12', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2188, 101, 1024, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2189, 101, 1, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2190, 101, 1025, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2191, 101, 1026, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2192, 101, 1027, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2193, 101, 1028, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2194, 101, 1029, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2195, 101, 1030, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2196, 101, 1036, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2197, 101, 1037, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2198, 101, 1038, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2199, 101, 1039, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2200, 101, 1040, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2201, 101, 1042, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2202, 101, 1043, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2203, 101, 1045, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2204, 101, 1046, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2205, 101, 1048, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2206, 101, 2083, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2207, 101, 1063, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2208, 101, 1064, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2209, 101, 1065, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2210, 101, 1093, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2211, 101, 1094, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2212, 101, 1095, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2213, 101, 1096, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2214, 101, 1097, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2215, 101, 1098, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2216, 101, 1100, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2217, 101, 1101, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2218, 101, 1102, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2219, 101, 1103, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2220, 101, 1104, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2221, 101, 1105, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2222, 101, 1106, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2223, 101, 2130, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2224, 101, 1107, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2225, 101, 2131, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2226, 101, 1108, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2227, 101, 2132, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2228, 101, 1109, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2229, 101, 2133, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2230, 101, 2134, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2232, 101, 2135, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2234, 101, 2136, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2236, 101, 2137, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2238, 101, 2138, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2240, 101, 2139, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2242, 101, 2140, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2243, 101, 2141, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2244, 101, 2142, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2245, 101, 2143, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2246, 101, 2144, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2247, 101, 2145, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2248, 101, 2146, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2249, 101, 2147, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2250, 101, 100, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2251, 101, 2148, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2252, 101, 101, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2253, 101, 2149, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2254, 101, 102, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2255, 101, 2150, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2256, 101, 103, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2257, 101, 2151, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2258, 101, 104, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2259, 101, 2152, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2260, 101, 105, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2261, 101, 107, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2262, 101, 108, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2263, 101, 109, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2264, 101, 1138, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2265, 101, 1139, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2266, 101, 1140, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2267, 101, 1141, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2268, 101, 1142, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2269, 101, 1143, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2270, 101, 1224, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2271, 101, 1225, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2272, 101, 1226, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2273, 101, 1227, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2274, 101, 1228, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2275, 101, 1229, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2282, 101, 1261, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2283, 101, 1263, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2284, 101, 1264, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2285, 101, 1265, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2286, 101, 1266, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2287, 101, 1267, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2288, 101, 1001, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2289, 101, 1002, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2290, 101, 1003, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2291, 101, 1004, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2292, 101, 1005, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2293, 101, 1006, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2294, 101, 1007, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2295, 101, 1008, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2296, 101, 1009, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2297, 101, 1010, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2298, 101, 1011, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2299, 101, 1012, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2300, 101, 500, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2301, 101, 1013, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2302, 101, 501, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2303, 101, 1014, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2304, 101, 1015, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2305, 101, 1016, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2306, 101, 1017, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2307, 101, 1018, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2308, 101, 1019, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2309, 101, 1020, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2310, 101, 1021, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2311, 101, 1022, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2312, 101, 1023, N'1', N'2023-02-09 23:49:46', N'1', N'2023-02-09 23:49:46', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2929, 109, 1224, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2930, 109, 1225, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2931, 109, 1226, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2932, 109, 1227, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2933, 109, 1228, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2934, 109, 1229, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2935, 109, 1138, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2936, 109, 1139, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2937, 109, 1140, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2938, 109, 1141, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2939, 109, 1142, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2940, 109, 1143, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2941, 111, 1224, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2942, 111, 1225, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2943, 111, 1226, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2944, 111, 1227, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2945, 111, 1228, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2946, 111, 1229, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2947, 111, 1138, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2948, 111, 1139, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2949, 111, 1140, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2950, 111, 1141, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2951, 111, 1142, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2952, 111, 1143, N'1', N'2023-12-02 23:19:40', N'1', N'2023-12-02 23:19:40', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2993, 109, 2, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2994, 109, 1031, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2995, 109, 1032, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2996, 109, 1033, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2997, 109, 1034, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2998, 109, 1035, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2999, 109, 1050, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3000, 109, 1051, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3001, 109, 1052, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3002, 109, 1053, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3003, 109, 1054, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3004, 109, 1056, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3005, 109, 1057, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3006, 109, 1058, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3007, 109, 1059, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3008, 109, 1060, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3009, 109, 1066, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3010, 109, 1067, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3011, 109, 1070, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3012, 109, 1075, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3013, 109, 1076, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3014, 109, 1077, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3015, 109, 1078, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3016, 109, 1082, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3017, 109, 1083, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3018, 109, 1084, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3019, 109, 1085, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3020, 109, 1086, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3021, 109, 1087, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3022, 109, 1088, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3023, 109, 1089, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3024, 109, 1090, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3025, 109, 1091, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3026, 109, 1092, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3027, 109, 106, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3028, 109, 110, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3029, 109, 111, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3030, 109, 112, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3031, 109, 113, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3032, 109, 114, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3033, 109, 115, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3034, 109, 116, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3035, 109, 2472, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3036, 109, 2478, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3037, 109, 2479, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3038, 109, 2480, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3039, 109, 2481, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3040, 109, 2482, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3041, 109, 2483, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3042, 109, 2484, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3043, 109, 2485, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3044, 109, 2486, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3045, 109, 2487, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3046, 109, 2488, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3047, 109, 2489, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3048, 109, 2490, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3049, 109, 2491, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3050, 109, 2492, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3051, 109, 2493, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3052, 109, 2494, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3053, 109, 2495, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3054, 109, 2497, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3055, 109, 1237, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3056, 109, 1238, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3057, 109, 1239, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3058, 109, 1240, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3059, 109, 1241, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3060, 109, 1242, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3061, 109, 1243, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3062, 109, 2525, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3063, 109, 1255, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3064, 109, 1256, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3065, 109, 1257, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3066, 109, 1258, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3067, 109, 1259, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3068, 109, 1260, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3069, 111, 2, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3070, 111, 1031, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3071, 111, 1032, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3072, 111, 1033, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3073, 111, 1034, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3074, 111, 1035, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3075, 111, 1050, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3076, 111, 1051, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3077, 111, 1052, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3078, 111, 1053, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3079, 111, 1054, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3080, 111, 1056, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3081, 111, 1057, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3082, 111, 1058, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3083, 111, 1059, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3084, 111, 1060, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3085, 111, 1066, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3086, 111, 1067, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3087, 111, 1070, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3088, 111, 1075, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3089, 111, 1076, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3090, 111, 1077, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3091, 111, 1078, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3092, 111, 1082, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3093, 111, 1083, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3094, 111, 1084, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3095, 111, 1085, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3096, 111, 1086, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3097, 111, 1087, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3098, 111, 1088, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3099, 111, 1089, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3100, 111, 1090, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3101, 111, 1091, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3102, 111, 1092, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3103, 111, 106, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3104, 111, 110, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3105, 111, 111, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3106, 111, 112, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3107, 111, 113, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3108, 111, 114, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3109, 111, 115, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3110, 111, 116, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3111, 111, 2472, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3112, 111, 2478, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3113, 111, 2479, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3114, 111, 2480, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3115, 111, 2481, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3116, 111, 2482, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3117, 111, 2483, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3118, 111, 2484, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3119, 111, 2485, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3120, 111, 2486, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3121, 111, 2487, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3122, 111, 2488, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3123, 111, 2489, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3124, 111, 2490, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3125, 111, 2491, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3126, 111, 2492, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3127, 111, 2493, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3128, 111, 2494, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3129, 111, 2495, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3130, 111, 2497, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3131, 111, 1237, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3132, 111, 1238, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3133, 111, 1239, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3134, 111, 1240, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3135, 111, 1241, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3136, 111, 1242, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3137, 111, 1243, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3138, 111, 2525, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3139, 111, 1255, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3140, 111, 1256, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3141, 111, 1257, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3142, 111, 1258, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3143, 111, 1259, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3144, 111, 1260, N'1', N'2023-12-02 23:41:02', N'1', N'2023-12-02 23:41:02', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3221, 109, 102, N'1', N'2023-12-30 11:42:36', N'1', N'2023-12-30 11:42:36', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3222, 109, 1013, N'1', N'2023-12-30 11:42:36', N'1', N'2023-12-30 11:42:36', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3223, 109, 1014, N'1', N'2023-12-30 11:42:36', N'1', N'2023-12-30 11:42:36', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3224, 109, 1015, N'1', N'2023-12-30 11:42:36', N'1', N'2023-12-30 11:42:36', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3225, 109, 1016, N'1', N'2023-12-30 11:42:36', N'1', N'2023-12-30 11:42:36', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3226, 111, 102, N'1', N'2023-12-30 11:42:36', N'1', N'2023-12-30 11:42:36', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3227, 111, 1013, N'1', N'2023-12-30 11:42:36', N'1', N'2023-12-30 11:42:36', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3228, 111, 1014, N'1', N'2023-12-30 11:42:36', N'1', N'2023-12-30 11:42:36', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3229, 111, 1015, N'1', N'2023-12-30 11:42:36', N'1', N'2023-12-30 11:42:36', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3230, 111, 1016, N'1', N'2023-12-30 11:42:36', N'1', N'2023-12-30 11:42:36', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4163, 109, 5, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4164, 109, 1118, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4165, 109, 1119, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4166, 109, 1120, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4167, 109, 2713, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4168, 109, 2714, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4169, 109, 2715, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4170, 109, 2716, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4171, 109, 2717, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4172, 109, 2718, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4173, 109, 2720, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4174, 109, 1185, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4175, 109, 2721, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4176, 109, 1186, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4177, 109, 2722, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4178, 109, 1187, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4179, 109, 2723, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4180, 109, 1188, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4181, 109, 2724, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4182, 109, 1189, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4183, 109, 2725, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4184, 109, 1190, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4185, 109, 2726, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4186, 109, 1191, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4187, 109, 2727, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4188, 109, 1192, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4189, 109, 2728, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4190, 109, 1193, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4191, 109, 2729, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4192, 109, 1194, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4193, 109, 2730, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4194, 109, 1195, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4195, 109, 2731, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4196, 109, 1196, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4197, 109, 2732, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4198, 109, 1197, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4199, 109, 2733, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4200, 109, 1198, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4201, 109, 2734, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4202, 109, 1199, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4203, 109, 2735, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4204, 109, 1200, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4205, 109, 1201, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4206, 109, 1202, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4207, 109, 1207, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4208, 109, 1208, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4209, 109, 1209, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4210, 109, 1210, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4211, 109, 1211, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4212, 109, 1212, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4213, 109, 1213, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4214, 109, 1215, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4215, 109, 1216, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4216, 109, 1217, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4217, 109, 1218, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4218, 109, 1219, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4219, 109, 1220, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4220, 109, 1221, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4221, 109, 1222, N'1', N'2024-03-30 17:53:17', N'1', N'2024-03-30 17:53:17', N'0', 121) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4222, 111, 5, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4223, 111, 1118, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4224, 111, 1119, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4225, 111, 1120, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4226, 111, 2713, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4227, 111, 2714, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4228, 111, 2715, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4229, 111, 2716, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4230, 111, 2717, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4231, 111, 2718, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4232, 111, 2720, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4233, 111, 1185, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4234, 111, 2721, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4235, 111, 1186, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4236, 111, 2722, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4237, 111, 1187, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4238, 111, 2723, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4239, 111, 1188, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4240, 111, 2724, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4241, 111, 1189, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4242, 111, 2725, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4243, 111, 1190, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4244, 111, 2726, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4245, 111, 1191, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4246, 111, 2727, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4247, 111, 1192, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4248, 111, 2728, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4249, 111, 1193, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4250, 111, 2729, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4251, 111, 1194, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4252, 111, 2730, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4253, 111, 1195, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4254, 111, 2731, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4255, 111, 1196, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4256, 111, 2732, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4257, 111, 1197, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4258, 111, 2733, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4259, 111, 1198, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4260, 111, 2734, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4261, 111, 1199, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4262, 111, 2735, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4263, 111, 1200, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4264, 111, 1201, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4265, 111, 1202, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4266, 111, 1207, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4267, 111, 1208, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4268, 111, 1209, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4269, 111, 1210, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4270, 111, 1211, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4271, 111, 1212, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4272, 111, 1213, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4273, 111, 1215, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4274, 111, 1216, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4275, 111, 1217, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4276, 111, 1218, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4277, 111, 1219, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4278, 111, 1220, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4279, 111, 1221, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4280, 111, 1222, N'1', N'2024-03-30 17:53:18', N'1', N'2024-03-30 17:53:18', N'0', 122) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5777, 101, 2739, N'1', N'2024-04-30 09:38:37', N'1', N'2024-04-30 09:38:37', N'0', 1) +GO +INSERT INTO system_role_menu (id, role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5778, 101, 2740, N'1', N'2024-04-30 09:38:37', N'1', N'2024-04-30 09:38:37', N'0', 1) +GO +SET IDENTITY_INSERT system_role_menu OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_sms_channel +-- ---------------------------- +DROP TABLE IF EXISTS system_sms_channel; +CREATE TABLE system_sms_channel +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + signature nvarchar(12) NOT NULL, + code nvarchar(63) NOT NULL, + status tinyint NOT NULL, + remark nvarchar(255) DEFAULT NULL NULL, + api_key nvarchar(128) NOT NULL, + api_secret nvarchar(128) DEFAULT NULL NULL, + callback_url nvarchar(255) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_channel', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信签名', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_channel', + 'COLUMN', N'signature' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'渠道编码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_channel', + 'COLUMN', N'code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'开启状态', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_channel', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'备注', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_channel', + 'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信 API 的账号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_channel', + 'COLUMN', N'api_key' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信 API 的秘钥', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_channel', + 'COLUMN', N'api_secret' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信发送回调 URL', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_channel', + 'COLUMN', N'callback_url' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_channel', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_channel', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_channel', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_channel', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_channel', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信渠道', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_channel' +GO + +-- ---------------------------- +-- Records of system_sms_channel +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_sms_channel ON +GO +INSERT INTO system_sms_channel (id, signature, code, status, remark, api_key, api_secret, callback_url, creator, create_time, updater, update_time, deleted) VALUES (2, N'Ballcat', N'ALIYUN', 0, N'你要改哦,只有我可以用!!!!', N'LTAI5tCnKso2uG3kJ5gRav88', N'fGJ5SNXL7P1NHNRmJ7DJaMJGPyE55C', NULL, N'', N'2021-03-31 11:53:10', N'1', N'2023-12-02 22:10:17', N'0') +GO +INSERT INTO system_sms_channel (id, signature, code, status, remark, api_key, api_secret, callback_url, creator, create_time, updater, update_time, deleted) VALUES (4, N'测试渠道', N'DEBUG_DING_TALK', 0, N'123', N'696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859', N'SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67', NULL, N'1', N'2021-04-13 00:23:14', N'1', N'2022-03-27 20:29:49', N'0') +GO +INSERT INTO system_sms_channel (id, signature, code, status, remark, api_key, api_secret, callback_url, creator, create_time, updater, update_time, deleted) VALUES (6, N'测试演示', N'DEBUG_DING_TALK', 0, N'仅测试', N'696b5d8ead48071237e4aa5861ff08dbadb2b4ded1c688a7b7c9afc615579859', N'SEC5c4e5ff888bc8a9923ae47f59e7ccd30af1f14d93c55b4e2c9cb094e35aeed67', NULL, N'1', N'2022-04-10 23:07:59', N'1', N'2023-12-02 22:10:08', N'0') +GO +SET IDENTITY_INSERT system_sms_channel OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_sms_code +-- ---------------------------- +DROP TABLE IF EXISTS system_sms_code; +CREATE TABLE system_sms_code +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + mobile nvarchar(11) NOT NULL, + code nvarchar(6) NOT NULL, + create_ip nvarchar(15) NOT NULL, + scene tinyint NOT NULL, + today_index tinyint NOT NULL, + used tinyint NOT NULL, + used_time datetime2 DEFAULT NULL NULL, + used_ip nvarchar(255) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +CREATE INDEX idx_system_sms_code_01 ON system_sms_code (mobile) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'手机号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'mobile' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'验证码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建 IP', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'create_ip' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'发送场景', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'scene' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'今日发送的第几条', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'today_index' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否使用', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'used' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'使用时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'used_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'使用 IP', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'used_ip' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'手机验证码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_code' +GO + +-- ---------------------------- +-- Table structure for system_sms_log +-- ---------------------------- +DROP TABLE IF EXISTS system_sms_log; +CREATE TABLE system_sms_log +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + channel_id bigint NOT NULL, + channel_code nvarchar(63) NOT NULL, + template_id bigint NOT NULL, + template_code nvarchar(63) NOT NULL, + template_type tinyint NOT NULL, + template_content nvarchar(255) NOT NULL, + template_params nvarchar(255) NOT NULL, + api_template_id nvarchar(63) NOT NULL, + mobile nvarchar(11) NOT NULL, + user_id bigint DEFAULT NULL NULL, + user_type tinyint DEFAULT NULL NULL, + send_status tinyint DEFAULT 0 NOT NULL, + send_time datetime2 DEFAULT NULL NULL, + api_send_code nvarchar(63) DEFAULT NULL NULL, + api_send_msg nvarchar(255) DEFAULT NULL NULL, + api_request_id nvarchar(255) DEFAULT NULL NULL, + api_serial_no nvarchar(255) DEFAULT NULL NULL, + receive_status tinyint DEFAULT 0 NOT NULL, + receive_time datetime2 DEFAULT NULL NULL, + api_receive_code nvarchar(63) DEFAULT NULL NULL, + api_receive_msg nvarchar(255) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信渠道编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'channel_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信渠道编码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'channel_code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'template_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板编码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'template_code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'template_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信内容', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'template_content' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信参数', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'template_params' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信 API 的模板编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'api_template_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'手机号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'mobile' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'user_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'发送状态', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'send_status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'发送时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'send_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信 API 发送结果的编码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'api_send_code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信 API 发送失败的提示', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'api_send_msg' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信 API 发送返回的唯一请求 ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'api_request_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信 API 发送返回的序号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'api_serial_no' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'接收状态', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'receive_status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'接收时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'receive_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'API 接收结果的编码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'api_receive_code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'API 接收结果的说明', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'api_receive_msg' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信日志', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_log' +GO + +-- ---------------------------- +-- Table structure for system_sms_template +-- ---------------------------- +DROP TABLE IF EXISTS system_sms_template; +CREATE TABLE system_sms_template +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + type tinyint NOT NULL, + status tinyint NOT NULL, + code nvarchar(63) NOT NULL, + name nvarchar(63) NOT NULL, + content nvarchar(255) NOT NULL, + params nvarchar(255) NOT NULL, + remark nvarchar(255) DEFAULT NULL NULL, + api_template_id nvarchar(63) NOT NULL, + channel_id bigint NOT NULL, + channel_code nvarchar(63) NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'开启状态', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板编码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板名称', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'模板内容', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'content' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'参数数组', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'params' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'备注', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信 API 的模板编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'api_template_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信渠道编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'channel_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信渠道编码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'channel_code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'短信模板', + 'SCHEMA', N'dbo', + 'TABLE', N'system_sms_template' +GO + +-- ---------------------------- +-- Records of system_sms_template +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_sms_template ON +GO +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (2, 1, 0, N'test_01', N'测试验证码短信', N'正在进行登录操作{operation},您的验证码是{code}', N'["operation","code"]', N'测试备注', N'4383920', 6, N'DEBUG_DING_TALK', N'', N'2021-03-31 10:49:38', N'1', N'2023-12-02 22:32:47', N'0') +GO +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (3, 1, 0, N'test_02', N'公告通知', N'您的验证码{code},该验证码5分钟内有效,请勿泄漏于他人!', N'["code"]', NULL, N'SMS_207945135', 2, N'ALIYUN', N'', N'2021-03-31 11:56:30', N'1', N'2021-04-10 01:22:02', N'0') +GO +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (6, 3, 0, N'test-01', N'测试模板', N'哈哈哈 {name}', N'["name"]', N'f哈哈哈', N'4383920', 6, N'DEBUG_DING_TALK', N'1', N'2021-04-10 01:07:21', N'1', N'2022-12-10 21:26:09', N'0') +GO +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (7, 3, 0, N'test-04', N'测试下', N'老鸡{name},牛逼{code}', N'["name","code"]', N'哈哈哈哈', N'suibian', 4, N'DEBUG_DING_TALK', N'1', N'2021-04-13 00:29:53', N'1', N'2023-12-02 22:35:34', N'0') +GO +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (8, 1, 0, N'user-sms-login', N'前台用户短信登录', N'您的验证码是{code}', N'["code"]', NULL, N'4372216', 6, N'DEBUG_DING_TALK', N'1', N'2021-10-11 08:10:00', N'1', N'2022-12-10 21:25:59', N'0') +GO +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (9, 2, 0, N'bpm_task_assigned', N'【工作流】任务被分配', N'您收到了一条新的待办任务:{processInstanceName}-{taskName},申请人:{startUserNickname},处理链接:{detailUrl}', N'["processInstanceName","taskName","startUserNickname","detailUrl"]', NULL, N'suibian', 4, N'DEBUG_DING_TALK', N'1', N'2022-01-21 22:31:19', N'1', N'2022-01-22 00:03:36', N'0') +GO +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (10, 2, 0, N'bpm_process_instance_reject', N'【工作流】流程被不通过', N'您的流程被审批不通过:{processInstanceName},原因:{reason},查看链接:{detailUrl}', N'["processInstanceName","reason","detailUrl"]', NULL, N'suibian', 4, N'DEBUG_DING_TALK', N'1', N'2022-01-22 00:03:31', N'1', N'2022-05-01 12:33:14', N'0') +GO +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (11, 2, 0, N'bpm_process_instance_approve', N'【工作流】流程被通过', N'您的流程被审批通过:{processInstanceName},查看链接:{detailUrl}', N'["processInstanceName","detailUrl"]', NULL, N'suibian', 4, N'DEBUG_DING_TALK', N'1', N'2022-01-22 00:04:31', N'1', N'2022-03-27 20:32:21', N'0') +GO +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (12, 2, 0, N'demo', N'演示模板', N'我就是测试一下下', N'[]', NULL, N'biubiubiu', 6, N'DEBUG_DING_TALK', N'1', N'2022-04-10 23:22:49', N'1', N'2023-03-24 23:45:07', N'0') +GO +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (14, 1, 0, N'user-update-mobile', N'会员用户 - 修改手机', N'您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', N'["code"]', N'', N'null', 4, N'DEBUG_DING_TALK', N'1', N'2023-08-19 18:58:01', N'1', N'2023-08-19 11:34:04', N'0') +GO +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (15, 1, 0, N'user-update-password', N'会员用户 - 修改密码', N'您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', N'["code"]', N'', N'null', 4, N'DEBUG_DING_TALK', N'1', N'2023-08-19 18:58:01', N'1', N'2023-08-19 11:34:18', N'0') +GO +INSERT INTO system_sms_template (id, type, status, code, name, content, params, remark, api_template_id, channel_id, channel_code, creator, create_time, updater, update_time, deleted) VALUES (16, 1, 0, N'user-reset-password', N'会员用户 - 重置密码', N'您的验证码{code},该验证码 5 分钟内有效,请勿泄漏于他人!', N'["code"]', N'', N'null', 4, N'DEBUG_DING_TALK', N'1', N'2023-08-19 18:58:01', N'1', N'2023-12-02 22:35:27', N'0') +GO +SET IDENTITY_INSERT system_sms_template OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_social_client +-- ---------------------------- +DROP TABLE IF EXISTS system_social_client; +CREATE TABLE system_social_client +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(255) NOT NULL, + social_type tinyint NOT NULL, + user_type tinyint NOT NULL, + client_id nvarchar(255) NOT NULL, + client_secret nvarchar(255) NOT NULL, + agent_id nvarchar(255) DEFAULT NULL NULL, + status tinyint NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'应用名', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'社交平台的类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client', + 'COLUMN', N'social_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client', + 'COLUMN', N'user_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'客户端编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client', + 'COLUMN', N'client_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'客户端密钥', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client', + 'COLUMN', N'client_secret' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'代理编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client', + 'COLUMN', N'agent_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'状态', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'社交客户端表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_client' +GO + +-- ---------------------------- +-- Records of system_social_client +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_social_client ON +GO +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, N'钉钉', 20, 2, N'dingvrnreaje3yqvzhxg', N'i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI', NULL, 0, N'', N'2023-10-18 11:21:18', N'1', N'2023-12-20 21:28:26', N'1', 1) +GO +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, N'钉钉(王土豆)', 20, 2, N'dingtsu9hpepjkbmthhw', N'FP_bnSq_HAHKCSncmJjw5hxhnzs6vaVDSZZn3egj6rdqTQ_hu5tQVJyLMpgCakdP', NULL, 0, N'', N'2023-10-18 11:21:18', N'', N'2023-12-20 21:28:26', N'1', 121) +GO +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, N'微信公众号', 31, 1, N'wx5b23ba7a5589ecbb', N'2a7b3b20c537e52e74afd395eb85f61f', NULL, 0, N'', N'2023-10-18 16:07:46', N'1', N'2023-12-20 21:28:23', N'1', 1) +GO +INSERT INTO system_social_client (id, name, social_type, user_type, client_id, client_secret, agent_id, status, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (43, N'微信小程序', 34, 1, N'wx63c280fe3248a3e7', N'6f270509224a7ae1296bbf1c8cb97aed', NULL, 0, N'', N'2023-10-19 13:37:41', N'1', N'2023-12-20 21:28:25', N'1', 1) +GO +SET IDENTITY_INSERT system_social_client OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_social_user +-- ---------------------------- +DROP TABLE IF EXISTS system_social_user; +CREATE TABLE system_social_user +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + type tinyint NOT NULL, + openid nvarchar(32) NOT NULL, + token nvarchar(256) DEFAULT NULL NULL, + raw_token_info nvarchar(1024) NOT NULL, + nickname nvarchar(32) NOT NULL, + avatar nvarchar(255) DEFAULT NULL NULL, + raw_user_info nvarchar(1024) NOT NULL, + code nvarchar(256) NOT NULL, + state nvarchar(256) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'主键(自增策略)', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'社交平台的类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'社交 openid', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'openid' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'社交 token', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'token' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'原始 Token 数据,一般是 JSON 格式', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'raw_token_info' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户昵称', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'nickname' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户头像', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'avatar' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'原始用户数据,一般是 JSON 格式', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'raw_user_info' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'最后一次的认证 code', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'code' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'最后一次的认证 state', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'state' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'社交用户表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user' +GO + +-- ---------------------------- +-- Table structure for system_social_user_bind +-- ---------------------------- +DROP TABLE IF EXISTS system_social_user_bind; +CREATE TABLE system_social_user_bind +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint NOT NULL, + user_type tinyint NOT NULL, + social_type tinyint NOT NULL, + social_user_id bigint NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'主键(自增策略)', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user_bind', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user_bind', + 'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user_bind', + 'COLUMN', N'user_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'社交平台的类型', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user_bind', + 'COLUMN', N'social_type' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'社交用户的编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user_bind', + 'COLUMN', N'social_user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user_bind', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user_bind', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user_bind', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user_bind', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user_bind', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user_bind', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'社交绑定表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_social_user_bind' +GO + +-- ---------------------------- +-- Table structure for system_tenant +-- ---------------------------- +DROP TABLE IF EXISTS system_tenant; +CREATE TABLE system_tenant +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(30) NOT NULL, + contact_user_id bigint DEFAULT NULL NULL, + contact_name nvarchar(30) NOT NULL, + contact_mobile nvarchar(500) DEFAULT NULL NULL, + status tinyint DEFAULT 0 NOT NULL, + website nvarchar(256) DEFAULT '' NULL, + package_id bigint NOT NULL, + expire_time datetime2 NOT NULL, + account_count int NOT NULL, + creator nvarchar(64) DEFAULT '' NOT NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户名', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'联系人的用户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'contact_user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'联系人', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'contact_name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'联系手机', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'contact_mobile' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户状态(0正常 1停用)', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'绑定域名', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'website' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户套餐编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'package_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'过期时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'expire_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'账号数量', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'account_count' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant' +GO + +-- ---------------------------- +-- Records of system_tenant +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_tenant ON +GO +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, website, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (1, N'芋道源码', NULL, N'芋艿', N'17321315478', 0, N'www.iocoder.cn', 0, N'2099-02-19 17:14:16', 9999, N'1', N'2021-01-05 17:03:47', N'1', N'2023-11-06 11:41:41', N'0') +GO +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, website, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (121, N'小租户', 110, N'小王2', N'15601691300', 0, N'zsxq.iocoder.cn', 111, N'2024-03-11 00:00:00', 20, N'1', N'2022-02-22 00:56:14', N'1', N'2023-11-06 11:41:47', N'0') +GO +INSERT INTO system_tenant (id, name, contact_user_id, contact_name, contact_mobile, status, website, package_id, expire_time, account_count, creator, create_time, updater, update_time, deleted) VALUES (122, N'测试租户', 113, N'芋道', N'15601691300', 0, N'test.iocoder.cn', 111, N'2022-04-30 00:00:00', 50, N'1', N'2022-03-07 21:37:58', N'1', N'2023-11-06 11:41:53', N'0') +GO +SET IDENTITY_INSERT system_tenant OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_tenant_package +-- ---------------------------- +DROP TABLE IF EXISTS system_tenant_package; +CREATE TABLE system_tenant_package +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(30) NOT NULL, + status tinyint DEFAULT 0 NOT NULL, + remark nvarchar(256) DEFAULT '' NULL, + menu_ids nvarchar(4000) NOT NULL, + creator nvarchar(64) DEFAULT '' NOT NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'套餐编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant_package', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'套餐名', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant_package', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户状态(0正常 1停用)', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant_package', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'备注', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant_package', + 'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'关联的菜单编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant_package', + 'COLUMN', N'menu_ids' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant_package', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant_package', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant_package', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant_package', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant_package', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户套餐表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_tenant_package' +GO + +-- ---------------------------- +-- Records of system_tenant_package +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_tenant_package ON +GO +INSERT INTO system_tenant_package (id, name, status, remark, menu_ids, creator, create_time, updater, update_time, deleted) VALUES (111, N'普通套餐', 0, N'小功能', N'[1,2,5,1031,1032,1033,1034,1035,1036,1037,1038,1039,1050,1051,1052,1053,1054,1056,1057,1058,1059,1060,1063,1064,1065,1066,1067,1070,1075,1076,1077,1078,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1118,1119,1120,100,101,102,103,106,107,110,111,112,113,1138,114,1139,115,1140,116,1141,1142,1143,2713,2714,2715,2716,2717,2718,2720,1185,2721,1186,2722,1187,2723,1188,2724,1189,2725,1190,2726,1191,2727,2472,1192,2728,1193,2729,1194,2730,1195,2731,1196,2732,1197,2733,2478,1198,2734,2479,1199,2735,2480,1200,2481,1201,2482,1202,2483,2484,2485,2486,2487,1207,2488,1208,2489,1209,2490,1210,2491,1211,2492,1212,2493,1213,2494,2495,1215,1216,2497,1217,1218,1219,1220,1221,1222,1224,1225,1226,1227,1228,1229,1237,1238,1239,1240,1241,1242,1243,2525,1255,1256,1001,1257,1002,1258,1003,1259,1004,1260,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020]', N'1', N'2022-02-22 00:54:00', N'1', N'2024-03-30 17:53:17', N'0') +GO +SET IDENTITY_INSERT system_tenant_package OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_user_post +-- ---------------------------- +DROP TABLE IF EXISTS system_user_post; +CREATE TABLE system_user_post +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint DEFAULT 0 NOT NULL, + post_id bigint DEFAULT 0 NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'id', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_post', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_post', + 'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'岗位ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_post', + 'COLUMN', N'post_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_post', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_post', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_post', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_post', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_post', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_post', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户岗位表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_post' +GO + +-- ---------------------------- +-- Records of system_user_post +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_user_post ON +GO +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (112, 1, 1, N'admin', N'2022-05-02 07:25:24', N'admin', N'2022-05-02 07:25:24', N'0', 1) +GO +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (113, 100, 1, N'admin', N'2022-05-02 07:25:24', N'admin', N'2022-05-02 07:25:24', N'0', 1) +GO +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (115, 104, 1, N'1', N'2022-05-16 19:36:28', N'1', N'2022-05-16 19:36:28', N'0', 1) +GO +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (116, 117, 2, N'1', N'2022-07-09 17:40:26', N'1', N'2022-07-09 17:40:26', N'0', 1) +GO +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (117, 118, 1, N'1', N'2022-07-09 17:44:44', N'1', N'2022-07-09 17:44:44', N'0', 1) +GO +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (119, 114, 5, N'1', N'2024-03-24 20:45:51', N'1', N'2024-03-24 20:45:51', N'0', 1) +GO +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (123, 115, 1, N'1', N'2024-04-04 09:37:14', N'1', N'2024-04-04 09:37:14', N'0', 1) +GO +INSERT INTO system_user_post (id, user_id, post_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (124, 115, 2, N'1', N'2024-04-04 09:37:14', N'1', N'2024-04-04 09:37:14', N'0', 1) +GO +SET IDENTITY_INSERT system_user_post OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_user_role +-- ---------------------------- +DROP TABLE IF EXISTS system_user_role; +CREATE TABLE system_user_role +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + user_id bigint NOT NULL, + role_id bigint NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'自增编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_role', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_role', + 'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'角色ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_role', + 'COLUMN', N'role_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_role', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_role', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_role', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_role', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_role', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_role', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户和角色关联表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_user_role' +GO + +-- ---------------------------- +-- Records of system_user_role +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_user_role ON +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, 1, 1, N'', N'2022-01-11 13:19:45', N'', N'2022-05-12 12:35:17', N'0', 1) +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 2, 2, N'', N'2022-01-11 13:19:45', N'', N'2022-05-12 12:35:13', N'0', 1) +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, 100, 101, N'', N'2022-01-11 13:19:45', N'', N'2022-05-12 12:35:13', N'0', 1) +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, 100, 1, N'', N'2022-01-11 13:19:45', N'', N'2022-05-12 12:35:12', N'0', 1) +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, 100, 2, N'', N'2022-01-11 13:19:45', N'', N'2022-05-12 12:35:11', N'0', 1) +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (10, 103, 1, N'1', N'2022-01-11 13:19:45', N'1', N'2022-01-11 13:19:45', N'0', 1) +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (14, 110, 109, N'1', N'2022-02-22 00:56:14', N'1', N'2022-02-22 00:56:14', N'0', 121) +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (15, 111, 110, N'110', N'2022-02-23 13:14:38', N'110', N'2022-02-23 13:14:38', N'0', 121) +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (16, 113, 111, N'1', N'2022-03-07 21:37:58', N'1', N'2022-03-07 21:37:58', N'0', 122) +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (18, 1, 2, N'1', N'2022-05-12 20:39:29', N'1', N'2022-05-12 20:39:29', N'0', 1) +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (20, 104, 101, N'1', N'2022-05-28 15:43:57', N'1', N'2022-05-28 15:43:57', N'0', 1) +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (22, 115, 2, N'1', N'2022-07-21 22:08:30', N'1', N'2022-07-21 22:08:30', N'0', 1) +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (35, 112, 1, N'1', N'2024-03-15 20:00:24', N'1', N'2024-03-15 20:00:24', N'0', 1) +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (36, 118, 1, N'1', N'2024-03-17 09:12:08', N'1', N'2024-03-17 09:12:08', N'0', 1) +GO +INSERT INTO system_user_role (id, user_id, role_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (38, 114, 101, N'1', N'2024-03-24 22:23:03', N'1', N'2024-03-24 22:23:03', N'0', 1) +GO +SET IDENTITY_INSERT system_user_role OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for system_users +-- ---------------------------- +DROP TABLE IF EXISTS system_users; +CREATE TABLE system_users +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + username nvarchar(30) NOT NULL, + password nvarchar(100) DEFAULT '' NOT NULL, + nickname nvarchar(30) NOT NULL, + remark nvarchar(500) DEFAULT NULL NULL, + dept_id bigint DEFAULT NULL NULL, + post_ids nvarchar(255) DEFAULT NULL NULL, + email nvarchar(50) DEFAULT '' NULL, + mobile nvarchar(11) DEFAULT '' NULL, + sex tinyint DEFAULT 0 NULL, + avatar nvarchar(512) DEFAULT '' NULL, + status tinyint DEFAULT 0 NOT NULL, + login_ip nvarchar(50) DEFAULT '' NULL, + login_date datetime2 DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户账号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'username' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'密码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'password' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户昵称', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'nickname' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'备注', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'部门ID', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'dept_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'岗位编号数组', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'post_ids' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户邮箱', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'email' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'手机号码', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'mobile' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户性别', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'sex' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'头像地址', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'avatar' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'帐号状态(0正常 1停用)', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'最后登录IP', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'login_ip' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'最后登录时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'login_date' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'用户信息表', + 'SCHEMA', N'dbo', + 'TABLE', N'system_users' +GO + +-- ---------------------------- +-- Records of system_users +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT system_users ON +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, N'admin', N'$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', N'芋道源码', N'管理员', 103, N'[1]', N'aoteman@126.com', N'18818260277', 2, N'http://test.win.iocoder.cn/96c787a2ce88bf6d0ce3cd8b6cf5314e80e7703cd41bf4af8cd2e2909dbd6b6d.png', 0, N'0:0:0:0:0:0:0:1', N'2024-04-29 21:50:32', N'admin', N'2021-01-05 17:03:47', NULL, N'2024-04-29 21:50:32', N'0', 1) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (100, N'win', N'$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', N'芋道', N'不要吓我', 104, N'[1]', N'win@iocoder.cn', N'15601691300', 1, N'', 1, N'127.0.0.1', N'2022-07-09 23:03:33', N'', N'2021-01-07 09:07:17', NULL, N'2022-07-09 23:03:33', N'0', 1) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (103, N'yuanma', N'$2a$10$YMpimV4T6BtDhIaA8jSW.u8UTGBeGhc/qwXP4oxoMr4mOw9.qttt6', N'源码', NULL, 106, NULL, N'yuanma@iocoder.cn', N'15601701300', 0, N'', 0, N'0:0:0:0:0:0:0:1', N'2024-03-18 21:09:04', N'', N'2021-01-13 23:50:35', NULL, N'2024-03-18 21:09:04', N'0', 1) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (104, N'test', N'$2a$04$KhExCYl7lx6eWWZYKsibKOZ8IBJRyuNuCcEOLQ11RYhJKgHmlSwK.', N'测试号', NULL, 107, N'[1,2]', N'111@qq.com', N'15601691200', 1, N'', 0, N'0:0:0:0:0:0:0:1', N'2024-03-26 07:11:35', N'', N'2021-01-21 02:13:53', NULL, N'2024-03-26 07:11:35', N'0', 1) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (107, N'admin107', N'$2a$10$dYOOBKMO93v/.ReCqzyFg.o67Tqk.bbc2bhrpyBGkIw9aypCtr2pm', N'芋艿', NULL, NULL, NULL, N'', N'15601691300', 0, N'', 0, N'', NULL, N'1', N'2022-02-20 22:59:33', N'1', N'2022-02-27 08:26:51', N'0', 118) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (108, N'admin108', N'$2a$10$y6mfvKoNYL1GXWak8nYwVOH.kCWqjactkzdoIDgiKl93WN3Ejg.Lu', N'芋艿', NULL, NULL, NULL, N'', N'15601691300', 0, N'', 0, N'', NULL, N'1', N'2022-02-20 23:00:50', N'1', N'2022-02-27 08:26:53', N'0', 119) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (109, N'admin109', N'$2a$10$JAqvH0tEc0I7dfDVBI7zyuB4E3j.uH6daIjV53.vUS6PknFkDJkuK', N'芋艿', NULL, NULL, NULL, N'', N'15601691300', 0, N'', 0, N'', NULL, N'1', N'2022-02-20 23:11:50', N'1', N'2022-02-27 08:26:56', N'0', 120) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (110, N'admin110', N'$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', N'小王', NULL, NULL, NULL, N'', N'15601691300', 0, N'', 0, N'127.0.0.1', N'2022-09-25 22:47:33', N'1', N'2022-02-22 00:56:14', NULL, N'2022-09-25 22:47:33', N'0', 121) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (111, N'test', N'$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', N'测试用户', NULL, NULL, N'[]', N'', N'', 0, N'', 0, N'0:0:0:0:0:0:0:1', N'2023-12-30 11:42:17', N'110', N'2022-02-23 13:14:33', NULL, N'2023-12-30 11:42:17', N'0', 121) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (112, N'newobject', N'$2a$04$dB0z8Q819fJWz0hbaLe6B.VfHCjYgWx6LFfET5lyz3JwcqlyCkQ4C', N'新对象', NULL, 100, N'[]', N'', N'15601691235', 1, N'', 0, N'0:0:0:0:0:0:0:1', N'2024-03-16 23:11:38', N'1', N'2022-02-23 19:08:03', NULL, N'2024-03-16 23:11:38', N'0', 1) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (113, N'aoteman', N'$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', N'芋道', NULL, NULL, NULL, N'', N'15601691300', 0, N'', 0, N'127.0.0.1', N'2022-03-19 18:38:51', N'1', N'2022-03-07 21:37:58', NULL, N'2022-03-19 18:38:51', N'0', 122) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (114, N'hrmgr', N'$2a$10$TR4eybBioGRhBmDBWkqWLO6NIh3mzYa8KBKDDB5woiGYFVlRAi.fu', N'hr 小姐姐', NULL, NULL, N'[5]', N'', N'15601691236', 1, N'', 0, N'0:0:0:0:0:0:0:1', N'2024-03-24 22:21:05', N'1', N'2022-03-19 21:50:58', NULL, N'2024-03-24 22:21:05', N'0', 1) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (115, N'aotemane', N'$2a$04$GcyP0Vyzb2F2Yni5PuIK9ueGxM0tkZGMtDwVRwrNbtMvorzbpNsV2', N'阿呆', N'11222', 102, N'[1,2]', N'7648@qq.com', N'15601691229', 2, N'', 0, N'', NULL, N'1', N'2022-04-30 02:55:43', N'1', N'2024-04-04 09:37:14', N'0', 1) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (117, N'admin123', N'$2a$10$WI8Gg/lpZQIrOEZMHqka7OdFaD4Nx.B/qY8ZGTTUKrOJwaHFqibaC', N'测试号', N'1111', 100, N'[2]', N'', N'15601691234', 1, N'', 0, N'', NULL, N'1', N'2022-07-09 17:40:26', N'1', N'2022-07-09 17:40:26', N'0', 1) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (118, N'goudan', N'$2a$04$OB1SuphCdiLVRpiYRKeqH.8NYS7UIp5vmIv1W7U4w6toiFeOAATVK', N'狗蛋', NULL, 103, N'[1]', N'', N'15601691239', 1, N'', 0, N'0:0:0:0:0:0:0:1', N'2024-03-17 09:10:27', N'1', N'2022-07-09 17:44:43', N'1', N'2024-04-04 09:48:05', N'0', 1) +GO +INSERT INTO system_users (id, username, password, nickname, remark, dept_id, post_ids, email, mobile, sex, avatar, status, login_ip, login_date, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (131, N'hh', N'$2a$04$jyH9h6.gaw8mpOjPfHIpx.8as2Rzfcmdlj5rlJFwgCw4rsv/MTb2K', N'呵呵', NULL, 100, N'[]', N'777@qq.com', N'15601882312', 1, N'', 0, N'', NULL, N'1', N'2024-04-27 08:45:56', N'1', N'2024-04-27 08:45:56', N'0', 1) +GO +SET IDENTITY_INSERT system_users OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for win_demo01_contact +-- ---------------------------- +DROP TABLE IF EXISTS win_demo01_contact; +CREATE TABLE win_demo01_contact +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(100) DEFAULT '' NOT NULL, + sex tinyint NOT NULL, + birthday datetime2 NOT NULL, + description nvarchar(255) NOT NULL, + avatar nvarchar(512) DEFAULT NULL NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo01_contact', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'名字', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo01_contact', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'性别', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo01_contact', + 'COLUMN', N'sex' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'出生年', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo01_contact', + 'COLUMN', N'birthday' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'简介', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo01_contact', + 'COLUMN', N'description' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'头像', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo01_contact', + 'COLUMN', N'avatar' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo01_contact', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo01_contact', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo01_contact', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo01_contact', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo01_contact', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo01_contact', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'示例联系人表', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo01_contact' +GO + +-- ---------------------------- +-- Records of win_demo01_contact +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT win_demo01_contact ON +GO +INSERT INTO win_demo01_contact (id, name, sex, birthday, description, avatar, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, N'土豆', 2, N'2023-11-07 00:00:00', N'

    天蚕土豆!呀

    ', N'http://127.0.0.1:48080/admin-api/infra/file/4/get/46f8fa1a37db3f3960d8910ff2fe3962ab3b2db87cf2f8ccb4dc8145b8bdf237.jpeg', N'1', N'2023-11-15 23:34:30', N'1', N'2023-11-15 23:47:39', N'0', 1) +GO +SET IDENTITY_INSERT win_demo01_contact OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for win_demo02_category +-- ---------------------------- +DROP TABLE IF EXISTS win_demo02_category; +CREATE TABLE win_demo02_category +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(100) DEFAULT '' NOT NULL, + parent_id bigint NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo02_category', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'名字', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo02_category', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'父级编号', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo02_category', + 'COLUMN', N'parent_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo02_category', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo02_category', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo02_category', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo02_category', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo02_category', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo02_category', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'示例分类表', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo02_category' +GO + +-- ---------------------------- +-- Records of win_demo02_category +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT win_demo02_category ON +GO +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (1, N'土豆', 0, N'1', N'2023-11-15 23:34:30', N'1', N'2023-11-16 20:24:23', N'0', 1) +GO +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, N'番茄', 0, N'1', N'2023-11-16 20:24:00', N'1', N'2023-11-16 20:24:15', N'0', 1) +GO +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, N'怪怪', 0, N'1', N'2023-11-16 20:24:32', N'1', N'2023-11-16 20:24:32', N'0', 1) +GO +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (4, N'小番茄', 2, N'1', N'2023-11-16 20:24:39', N'1', N'2023-11-16 20:24:39', N'0', 1) +GO +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, N'大番茄', 2, N'1', N'2023-11-16 20:24:46', N'1', N'2023-11-16 20:24:46', N'0', 1) +GO +INSERT INTO win_demo02_category (id, name, parent_id, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, N'11', 3, N'1', N'2023-11-24 19:29:34', N'1', N'2023-11-24 19:29:34', N'0', 1) +GO +SET IDENTITY_INSERT win_demo02_category OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for win_demo03_course +-- ---------------------------- +DROP TABLE IF EXISTS win_demo03_course; +CREATE TABLE win_demo03_course +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + student_id bigint NOT NULL, + name nvarchar(100) DEFAULT '' NOT NULL, + score tinyint NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_course', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'学生编号', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_course', + 'COLUMN', N'student_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'名字', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_course', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'分数', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_course', + 'COLUMN', N'score' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_course', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_course', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_course', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_course', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_course', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_course', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'学生课程表', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_course' +GO + +-- ---------------------------- +-- Records of win_demo03_course +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT win_demo03_course ON +GO +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, 2, N'语文', 66, N'1', N'2023-11-16 23:21:49', N'1', N'2023-11-16 23:21:49', N'0', 1) +GO +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (3, 2, N'数学', 22, N'1', N'2023-11-16 23:21:49', N'1', N'2023-11-16 23:21:49', N'0', 1) +GO +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (6, 5, N'体育', 23, N'1', N'2023-11-16 23:22:46', N'1', N'2023-11-16 15:44:40', N'1', 1) +GO +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (7, 5, N'计算机', 11, N'1', N'2023-11-16 23:22:46', N'1', N'2023-11-16 15:44:40', N'1', 1) +GO +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (8, 5, N'体育', 23, N'1', N'2023-11-16 23:22:46', N'1', N'2023-11-16 15:47:09', N'1', 1) +GO +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, 5, N'计算机', 11, N'1', N'2023-11-16 23:22:46', N'1', N'2023-11-16 15:47:09', N'1', 1) +GO +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (10, 5, N'体育', 23, N'1', N'2023-11-16 23:22:46', N'1', N'2023-11-16 23:47:10', N'0', 1) +GO +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (11, 5, N'计算机', 11, N'1', N'2023-11-16 23:22:46', N'1', N'2023-11-16 23:47:10', N'0', 1) +GO +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (12, 2, N'电脑', 33, N'1', N'2023-11-17 00:20:42', N'1', N'2023-11-16 16:20:45', N'1', 1) +GO +INSERT INTO win_demo03_course (id, student_id, name, score, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (13, 9, N'滑雪', 12, N'1', N'2023-11-17 13:13:20', N'1', N'2023-11-17 13:13:20', N'0', 1) +GO +SET IDENTITY_INSERT win_demo03_course OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for win_demo03_grade +-- ---------------------------- +DROP TABLE IF EXISTS win_demo03_grade; +CREATE TABLE win_demo03_grade +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + student_id bigint NOT NULL, + name nvarchar(100) DEFAULT '' NOT NULL, + teacher nvarchar(255) NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_grade', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'学生编号', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_grade', + 'COLUMN', N'student_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'名字', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_grade', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'班主任', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_grade', + 'COLUMN', N'teacher' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_grade', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_grade', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_grade', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_grade', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_grade', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_grade', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'学生班级表', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_grade' +GO + +-- ---------------------------- +-- Records of win_demo03_grade +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT win_demo03_grade ON +GO +INSERT INTO win_demo03_grade (id, student_id, name, teacher, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (7, 2, N'三年 2 班', N'周杰伦', N'1', N'2023-11-16 23:21:49', N'1', N'2023-11-16 23:21:49', N'0', 1) +GO +INSERT INTO win_demo03_grade (id, student_id, name, teacher, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (8, 5, N'华为', N'遥遥领先', N'1', N'2023-11-16 23:22:46', N'1', N'2023-11-16 23:47:10', N'0', 1) +GO +INSERT INTO win_demo03_grade (id, student_id, name, teacher, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, 9, N'小图', N'小娃111', N'1', N'2023-11-17 13:10:23', N'1', N'2023-11-17 13:10:23', N'0', 1) +GO +SET IDENTITY_INSERT win_demo03_grade OFF +GO +COMMIT +GO +-- @formatter:on + +-- ---------------------------- +-- Table structure for win_demo03_student +-- ---------------------------- +DROP TABLE IF EXISTS win_demo03_student; +CREATE TABLE win_demo03_student +( + id bigint NOT NULL PRIMARY KEY IDENTITY, + name nvarchar(100) DEFAULT '' NOT NULL, + sex tinyint NOT NULL, + birthday datetime2 NOT NULL, + description nvarchar(255) NOT NULL, + creator nvarchar(64) DEFAULT '' NULL, + create_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + updater nvarchar(64) DEFAULT '' NULL, + update_time datetime2 DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted bit DEFAULT 0 NOT NULL, + tenant_id bigint DEFAULT 0 NOT NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'编号', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_student', + 'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'名字', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_student', + 'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'性别', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_student', + 'COLUMN', N'sex' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'出生日期', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_student', + 'COLUMN', N'birthday' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'简介', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_student', + 'COLUMN', N'description' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建者', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_student', + 'COLUMN', N'creator' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'创建时间', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_student', + 'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新者', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_student', + 'COLUMN', N'updater' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'更新时间', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_student', + 'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'是否删除', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_student', + 'COLUMN', N'deleted' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'租户编号', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_student', + 'COLUMN', N'tenant_id' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'学生表', + 'SCHEMA', N'dbo', + 'TABLE', N'win_demo03_student' +GO + +-- ---------------------------- +-- Records of win_demo03_student +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT win_demo03_student ON +GO +INSERT INTO win_demo03_student (id, name, sex, birthday, description, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (2, N'小白', 1, N'2023-11-16 00:00:00', N'

    厉害

    ', N'1', N'2023-11-16 23:21:49', N'1', N'2023-11-17 16:49:06', N'0', 1) +GO +INSERT INTO win_demo03_student (id, name, sex, birthday, description, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (5, N'大黑', 2, N'2023-11-13 00:00:00', N'

    你在教我做事?

    ', N'1', N'2023-11-16 23:22:46', N'1', N'2023-11-17 16:49:07', N'0', 1) +GO +INSERT INTO win_demo03_student (id, name, sex, birthday, description, creator, create_time, updater, update_time, deleted, tenant_id) VALUES (9, N'小花', 1, N'2023-11-07 00:00:00', N'

    哈哈哈

    ', N'1', N'2023-11-17 00:04:47', N'1', N'2023-11-17 16:49:08', N'0', 1) +GO +SET IDENTITY_INSERT win_demo03_student OFF +GO +COMMIT +GO +-- @formatter:on + diff --git a/sql/tools/.gitignore b/sql/tools/.gitignore new file mode 100644 index 0000000..e00c3e7 --- /dev/null +++ b/sql/tools/.gitignore @@ -0,0 +1,8 @@ +# 忽略python虚拟环境 +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ diff --git a/sql/tools/README.md b/sql/tools/README.md new file mode 100644 index 0000000..852ebaf --- /dev/null +++ b/sql/tools/README.md @@ -0,0 +1,101 @@ +## 0. 友情提示 + +在 `sql/tools` 目录下,我们提供一些数据库相关的工具,包括测试数据库的快速启动、MySQL 转换其它数据库等等。 + +注意!所有的操作,必须在 `sql/tools` 目录下执行。 + +## 1. 测试数据库的快速启动 + +基于 Docker Compose,快速启动 MySQL、Oracle、PostgreSQL、SQL Server 等数据库。 + +注意!使用 Docker Compose 启动完测试数据后,因为会自动导入项目的 SQL 脚本,所以可能需要等待 1-2 分钟。 + +### 1.1 MySQL + +```Bash +docker compose up -d mysql +``` + +#### 1.2 Oracle + +```Bash +docker compose up -d oracle +``` + +暂不支持 MacBook Apple Silicon,因为 Oracle 官方没有提供 Apple Silicon 版本的 Docker 镜像。 + +### 1.3 PostgreSQL + +```Bash +docker compose up -d postgres +``` + +### 1.4 SQL Server + +```Bash +docker compose up -d sqlserver +# 注意:启动完 sqlserver 后,需要手动再执行如下命令,因为 SQL Server 不支持初始化脚本 +docker compose exec sqlserver bash /tmp/create_schema.sh +``` + +暂不支持 MacBook Apple Silicon,因为 SQL Server 官方没有提供 Apple Silicon 版本的 Docker 镜像。 + +### 1.5 DM 达梦 + +① 下载达梦 Docker 镜像:https://download.dameng.com/eco/dm8/dm8_20230808_rev197096_x86_rh6_64_single.tar + +② 加载镜像文件,在镜像 tar 文件所在目录运行: + +```Bash +docker load -i dm8_20230808_rev197096_x86_rh6_64_single.tar +```` + +③ 在项目 `sql/tools` 目录下运行: + +```Bash +docker compose up -d dm8 +# 注意:启动完 dm 后,需要手动再执行如下命令,因为 dm 不支持初始化脚本 +docker compose exec dm8 bash -c "exec /opt/dmdbms/bin/disql SYSDBA/SYSDBA001 \`/tmp/schema.sql" +exit +``` + +**注意**: `sql/dm/ruoyi-vue-pro-dm8.sql` 文件编码必须为 `GBK` 或者 `GBK` 超集,否则会出现中文乱码。 + +暂不支持 MacBook Apple Silicon,因为 达梦 官方没有提供 Apple Silicon 版本的 Docker 镜像。 + +## 1.X 容器的销毁重建 + +开发测试过程中,有时候需要创建全新干净的数据库。由于测试数据 Docker 容器采用数据卷 Volume 挂载数据库实例的数据目录,因此销毁数据需要停止容器后,删除数据卷,然后再重新创建容器。 + +以 postgres 为例,操作如下: + +```Bash +docker compose down postgres +docker volume rm ruoyi-vue-pro_postgres +``` + +## 2. MySQL 转换其它数据库 + +### 2.1 实现原理 + +通过读取 MySQL 的 `sql/mysql/ruoyi-vue-pro.sql` 数据库文件,转换成 Oracle、PostgreSQL、SQL Server 等数据库的脚本。 + +### 2.2 使用方法 + +① 安装依赖库 `simple-ddl-parser` + +```bash +pip install simple-ddl-parser +# pip3 install simple-ddl-parser +``` + +② 执行如下命令打印生成 postgres 的脚本内容,其他可选参数有:`oracle`、`sqlserver`、`dm8`: + +```Bash +python3 convertor.py postgres +# python3 convertor.py postgres > tmp.sql +``` + +程序将 SQL 脚本打印到终端,可以重定向到临时文件 `tmp.sql`。 + +确认无误后,可以利用 IDEA 进行格式化。当然,也可以直接导入到数据库中。 \ No newline at end of file diff --git a/sql/tools/convertor.py b/sql/tools/convertor.py new file mode 100644 index 0000000..89352da --- /dev/null +++ b/sql/tools/convertor.py @@ -0,0 +1,781 @@ +# encoding=utf8 +"""芋道系统数据库迁移工具 + +Author: dhb52 (https://gitee.com/dhb52) + +pip install simple-ddl-parser +""" + +import argparse +import pathlib +import re +import time +from abc import ABC, abstractmethod +from typing import Dict, Generator, Optional, Tuple, Union + +from simple_ddl_parser import DDLParser + +PREAMBLE = """/* + Win Database Transfer Tool + + Source Server Type : MySQL + + Target Server Type : {db_type} + + Date: {date} +*/ + +""" + + +def load_and_clean(sql_file: str) -> str: + """加载源 SQL 文件,并清理内容方便下一步 ddl 解析 + + Args: + sql_file (str): sql文件路径 + + Returns: + str: 清理后的sql文件内容 + """ + REPLACE_PAIR_LIST = ( + (" CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ", " "), + (" KEY `", " INDEX `"), + ("UNIQUE INDEX", "UNIQUE KEY"), + ("b'0'", "'0'"), + ("b'1'", "'1'"), + ) + + content = open(sql_file).read() + for replace_pair in REPLACE_PAIR_LIST: + content = content.replace(*replace_pair) + content = re.sub(r"ENGINE.*COMMENT", "COMMENT", content) + content = re.sub(r"ENGINE.*;", ";", content) + return content + + +class Convertor(ABC): + def __init__(self, src: str, db_type) -> None: + self.src = src + self.db_type = db_type + self.content = load_and_clean(self.src) + self.table_script_list = re.findall(r"CREATE TABLE [^;]*;", self.content) + + @abstractmethod + def translate_type(self, type: str, size: Optional[Union[int, Tuple[int]]]) -> str: + """字段类型转换 + + Args: + type (str): 字段类型 + size (Optional[Union[int, Tuple[int]]]): 字段长度描述, 如varchar(255), decimal(10,2) + + Returns: + str: 类型定义 + """ + pass + + @abstractmethod + def gen_create(self, table_ddl: Dict) -> str: + """生成 create 脚本 + + Args: + table_ddl (Dict): 表DDL + + Returns: + str: 生成脚本 + """ + pass + + @abstractmethod + def gen_pk(self, table_name: str) -> str: + """生成主键定义 + + Args: + table_name (str): 表名 + + Returns: + str: 生成脚本 + """ + pass + + @abstractmethod + def gen_index(self, ddl: Dict) -> str: + """生成索引定义 + + Args: + table_ddl (Dict): 表DDL + + Returns: + str: 生成脚本 + """ + pass + + @abstractmethod + def gen_comment(self, table_sql: str, table_name: str) -> str: + """生成字段/表注释 + + Args: + table_sql (str): 原始表SQL + table_name (str): 表名 + + Returns: + str: 生成脚本 + """ + pass + + @abstractmethod + def gen_insert(self, table_name: str) -> str: + """生成 insert 语句块 + + Args: + table_name (str): 表名 + + Returns: + str: 生成脚本 + """ + pass + + def gen_dual(self) -> str: + """生成虚拟 dual 表 + + Returns: + str: 生成脚本, 默认返回空脚本, 表示当前数据库无需手工创建 + """ + return "" + + @staticmethod + def inserts(table_name: str, script_content: str) -> Generator: + PREFIX = f"INSERT INTO `{table_name}`" + + # 收集 `table_name` 对应的 insert 语句 + for line in script_content.split("\n"): + if line.startswith(PREFIX): + head, tail = line.replace(PREFIX, "").split(" VALUES ", maxsplit=1) + head = head.strip().replace("`", "").lower() + tail = tail.strip().replace(r"\"", '"') + # tail = tail.replace("b'0'", "'0'").replace("b'1'", "'1'") + yield f"INSERT INTO {table_name.lower()} {head} VALUES {tail}" + + @staticmethod + def index(ddl: Dict) -> Generator: + """生成索引定义 + + Args: + ddl (Dict): 表DDL + + Yields: + Generator[str]: create index 语句 + """ + + def generate_columns(columns): + keys = [ + f"{col['name'].lower()}{' ' + col['order'].lower() if col['order'] != 'ASC' else ''}" + for col in columns[0] + ] + return ", ".join(keys) + + for no, index in enumerate(ddl["index"], 1): + columns = generate_columns(index["columns"]) + table_name = ddl["table_name"].lower() + yield f"CREATE INDEX idx_{table_name}_{no:02d} ON {table_name} ({columns})" + + @staticmethod + def filed_comments(table_sql: str) -> Generator: + for line in table_sql.split("\n"): + match = re.match(r"^`([^`]+)`.* COMMENT '([^']+)'", line.strip()) + if match: + field = match.group(1) + comment_string = match.group(2).replace("\\n", "\n") + yield field, comment_string + + def table_comment(self, table_sql: str) -> str: + match = re.search(r"COMMENT \= '([^']+)';", table_sql) + return match.group(1) if match else None + + def print(self): + """打印转换后的sql脚本到终端""" + print( + PREAMBLE.format( + db_type=self.db_type, + date=time.strftime("%Y-%m-%d %H:%M:%S"), + ) + ) + + dual = self.gen_dual() + if dual: + print( + f"""-- ---------------------------- +-- Table structure for dual +-- ---------------------------- +{dual} + +""" + ) + + error_scripts = [] + for table_sql in self.table_script_list: + ddl = DDLParser(table_sql.replace("`", "")).run() + + # 如果parse失败, 需要跟进 + if len(ddl) == 0: + error_scripts.append(table_sql) + continue + + table_ddl = ddl[0] + table_name = table_ddl["table_name"] + + # 忽略 quartz 的内容 + if table_name.lower().startswith("qrtz"): + continue + + # 为每个表生成个5个基本部分 + create = self.gen_create(table_ddl) + pk = self.gen_pk(table_name) + index = self.gen_index(table_ddl) + comment = self.gen_comment(table_sql, table_name) + inserts = self.gen_insert(table_name) + + # 组合当前表的DDL脚本 + script = f"""{create} + +{pk} + +{index} + +{comment} + +{inserts} +""" + + # 清理 + script = re.sub("\n{3,}", "\n\n", script).strip() + "\n" + + print(script) + + # 将parse失败的脚本打印出来 + if error_scripts: + for script in error_scripts: + print(script) + + +class PostgreSQLConvertor(Convertor): + def __init__(self, src): + super().__init__(src, "PostgreSQL") + + def translate_type(self, type: str, size: Optional[Union[int, Tuple[int]]]): + """类型转换""" + + type = type.lower() + + if type == "varchar": + return f"varchar({size})" + if type == "int": + return "int4" + if type == "bigint" or type == "bigint unsigned": + return "int8" + if type == "datetime": + return "timestamp" + if type == "bit": + return "bool" + if type in ("tinyint", "smallint"): + return "int2" + if type == "text": + return "text" + if type in ("blob", "mediumblob"): + return "bytea" + if type == "decimal": + return ( + f"numeric({','.join(str(s) for s in size)})" if len(size) else "numeric" + ) + + def gen_create(self, ddl: Dict) -> str: + """生成 create""" + + def _generate_column(col): + name = col["name"].lower() + if name == "deleted": + return "deleted int2 NOT NULL DEFAULT 0" + + type = col["type"].lower() + full_type = self.translate_type(type, col["size"]) + nullable = "NULL" if col["nullable"] else "NOT NULL" + default = f"DEFAULT {col['default']}" if col["default"] is not None else "" + return f"{name} {full_type} {nullable} {default}" + + table_name = ddl["table_name"].lower() + columns = [f"{_generate_column(col).strip()}" for col in ddl["columns"]] + filed_def_list = ",\n ".join(columns) + script = f"""-- ---------------------------- +-- Table structure for {table_name} +-- ---------------------------- +DROP TABLE IF EXISTS {table_name}; +CREATE TABLE {table_name} ( + {filed_def_list} +);""" + + return script + + def gen_index(self, ddl: Dict) -> str: + return "\n".join(f"{script};" for script in self.index(ddl)) + + def gen_comment(self, table_sql: str, table_name: str) -> str: + """生成字段及表的注释""" + + script = "" + for field, comment_string in self.filed_comments(table_sql): + script += ( + f"COMMENT ON COLUMN {table_name}.{field} IS '{comment_string}';" + "\n" + ) + + table_comment = self.table_comment(table_sql) + if table_comment: + script += f"COMMENT ON TABLE {table_name} IS '{table_comment}';\n" + + return script + + def gen_pk(self, table_name) -> str: + """生成主键定义""" + return f"ALTER TABLE {table_name} ADD CONSTRAINT pk_{table_name} PRIMARY KEY (id);\n" + + def gen_insert(self, table_name: str) -> str: + """生成 insert 语句,以及根据最后的 insert id+1 生成 Sequence""" + + inserts = list(Convertor.inserts(table_name, self.content)) + ## 生成 insert 脚本 + script = "" + last_id = 0 + if inserts: + inserts_lines = "\n".join(inserts) + script += f"""\n\n-- ---------------------------- +-- Records of {table_name.lower()} +-- ---------------------------- +-- @formatter:off +BEGIN; +{inserts_lines} +COMMIT; +-- @formatter:on""" + match = re.search(r"VALUES \((\d+),", inserts[-1]) + if match: + last_id = int(match.group(1)) + + # 生成 Sequence + script += ( + "\n\n" + + f"""DROP SEQUENCE IF EXISTS {table_name}_seq; +CREATE SEQUENCE {table_name}_seq + START {last_id + 1};""" + ) + + return script + + def gen_dual(self) -> str: + return """DROP TABLE IF EXISTS dual; +CREATE TABLE dual +( +);""" + + +class OracleConvertor(Convertor): + def __init__(self, src): + super().__init__(src, "Oracle") + + def translate_type(self, type: str, size: Optional[Union[int, Tuple[int]]]): + """类型转换""" + type = type.lower() + + if type == "varchar": + return f"varchar2({size if size < 4000 else 4000})" + if type == "int": + return "number" + if type == "bigint" or type == "bigint unsigned": + return "number" + if type == "datetime": + return "date" + if type == "bit": + return "number(1,0)" + if type in ("tinyint", "smallint"): + return "smallint" + if type == "text": + return "clob" + if type in ("blob", "mediumblob"): + return "blob" + if type == "decimal": + return ( + f"number({','.join(str(s) for s in size)})" if len(size) else "number" + ) + + def gen_create(self, ddl) -> str: + """生成 CREATE 语句""" + + def generate_column(col): + name = col["name"].lower() + if name == "deleted": + return "deleted number(1,0) DEFAULT 0 NOT NULL" + + type = col["type"].lower() + full_type = self.translate_type(type, col["size"]) + nullable = "NULL" if col["nullable"] else "NOT NULL" + default = f"DEFAULT {col['default']}" if col["default"] is not None else "" + # Oracle 中 size 不能作为字段名 + field_name = '"size"' if name == "size" else name + # Oracle DEFAULT 定义在 NULLABLE 之前 + return f"{field_name} {full_type} {default} {nullable}" + + table_name = ddl["table_name"].lower() + columns = [f"{generate_column(col).strip()}" for col in ddl["columns"]] + field_def_list = ",\n ".join(columns) + script = f"""-- ---------------------------- +-- Table structure for {table_name} +-- ---------------------------- +CREATE TABLE {table_name} ( + {field_def_list} +);""" + + # oracle INSERT '' 不能通过 NOT NULL 校验 + script = script.replace("DEFAULT '' NOT NULL", "DEFAULT '' NULL") + + return script + + def gen_index(self, ddl: Dict) -> str: + return "\n".join(f"{script};" for script in self.index(ddl)) + + def gen_comment(self, table_sql: str, table_name: str) -> str: + script = "" + for field, comment_string in self.filed_comments(table_sql): + script += ( + f"COMMENT ON COLUMN {table_name}.{field} IS '{comment_string}';" + "\n" + ) + + table_comment = self.table_comment(table_sql) + if table_comment: + script += f"COMMENT ON TABLE {table_name} IS '{table_comment}';\n" + + return script + + def gen_pk(self, table_name: str) -> str: + """生成主键定义""" + return f"ALTER TABLE {table_name} ADD CONSTRAINT pk_{table_name} PRIMARY KEY (id);\n" + + def gen_index(self, ddl: Dict) -> str: + return "\n".join(f"{script};" for script in self.index(ddl)) + + def gen_insert(self, table_name: str) -> str: + """拷贝 INSERT 语句""" + inserts = [] + for insert_script in Convertor.inserts(table_name, self.content): + # 对日期数据添加 TO_DATE 转换 + insert_script = re.sub( + r"('\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}')", + r"to_date(\g<1>, 'SYYYY-MM-DD HH24:MI:SS')", + insert_script, + ) + inserts.append(insert_script) + + ## 生成 insert 脚本 + script = "" + last_id = 0 + if inserts: + inserts_lines = "\n".join(inserts) + script += f"""\n\n-- ---------------------------- +-- Records of {table_name.lower()} +-- ---------------------------- +-- @formatter:off +{inserts_lines} +COMMIT; +-- @formatter:on""" + match = re.search(r"VALUES \((\d+),", inserts[-1]) + if match: + last_id = int(match.group(1)) + + # 生成 Sequence + script += f""" + +CREATE SEQUENCE {table_name}_seq + START WITH {last_id + 1};""" + + return script + + +class SQLServerConvertor(Convertor): + """_summary_ + + Args: + Convertor (_type_): _description_ + """ + + def __init__(self, src): + super().__init__(src, "Microsoft SQL Server") + + def translate_type(self, type: str, size: Optional[Union[int, Tuple[int]]]): + """类型转换""" + + type = type.lower() + + if type == "varchar": + return f"nvarchar({size if size < 4000 else 4000})" + if type == "int": + return "int" + if type == "bigint" or type == "bigint unsigned": + return "bigint" + if type == "datetime": + return "datetime2" + if type == "bit": + return "varchar(1)" + if type in ("tinyint", "smallint"): + return "tinyint" + if type == "text": + return "nvarchar(max)" + if type in ("blob", "mediumblob"): + return "varbinary(max)" + if type == "decimal": + return ( + f"numeric({','.join(str(s) for s in size)})" if len(size) else "numeric" + ) + + def gen_create(self, ddl: Dict) -> str: + """生成 create""" + + def _generate_column(col): + name = col["name"].lower() + if name == "id": + return "id bigint NOT NULL PRIMARY KEY IDENTITY" + if name == "deleted": + return "deleted bit DEFAULT 0 NOT NULL" + + type = col["type"].lower() + full_type = self.translate_type(type, col["size"]) + nullable = "NULL" if col["nullable"] else "NOT NULL" + default = f"DEFAULT {col['default']}" if col["default"] is not None else "" + return f"{name} {full_type} {default} {nullable}" + + table_name = ddl["table_name"].lower() + columns = [f"{_generate_column(col).strip()}" for col in ddl["columns"]] + filed_def_list = ",\n ".join(columns) + script = f"""-- ---------------------------- +-- Table structure for {table_name} +-- ---------------------------- +DROP TABLE IF EXISTS {table_name}; +CREATE TABLE {table_name} ( + {filed_def_list} +) +GO""" + + return script + + def gen_comment(self, table_sql: str, table_name: str) -> str: + """生成字段及表的注释""" + + script = "" + + for field, comment_string in self.filed_comments(table_sql): + script += f"""EXEC sp_addextendedproperty + 'MS_Description', N'{comment_string}', + 'SCHEMA', N'dbo', + 'TABLE', N'{table_name}', + 'COLUMN', N'{field}' +GO + +""" + + table_comment = self.table_comment(table_sql) + if table_comment: + script += f"""EXEC sp_addextendedproperty + 'MS_Description', N'{table_comment}', + 'SCHEMA', N'dbo', + 'TABLE', N'{table_name}' +GO + +""" + return script + + def gen_pk(self, table_name: str) -> str: + """生成主键定义""" + return "" + + def gen_index(self, ddl: Dict) -> str: + """生成 index""" + return "\n".join(f"{script}\nGO" for script in self.index(ddl)) + + def gen_insert(self, table_name: str) -> str: + """生成 insert 语句""" + + # 收集 `table_name` 对应的 insert 语句 + inserts = [] + for insert_script in Convertor.inserts(table_name, self.content): + # SQLServer: 字符串前加N,hack,是否存在替换字符串内容的风险 + insert_script = insert_script.replace(", '", ", N'").replace( + "VALUES ('", "VALUES (N')" + ) + # 删除 insert 的结尾分号 + insert_script = re.sub(";$", r"\nGO", insert_script) + inserts.append(insert_script) + + ## 生成 insert 脚本 + script = "" + if inserts: + inserts_lines = "\n".join(inserts) + script += f"""\n\n-- ---------------------------- +-- Records of {table_name.lower()} +-- ---------------------------- +-- @formatter:off +BEGIN TRANSACTION +GO +SET IDENTITY_INSERT {table_name.lower()} ON +GO +{inserts_lines} +SET IDENTITY_INSERT {table_name.lower()} OFF +GO +COMMIT +GO +-- @formatter:on""" + + return script + + def gen_dual(self) -> str: + return """DROP TABLE IF EXISTS dual +GO + +CREATE TABLE dual +( + id int NULL +) +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'数据库连接的表', + 'SCHEMA', N'dbo', + 'TABLE', N'dual' +GO""" + + +class DM8Convertor(Convertor): + def __init__(self, src): + super().__init__(src, "DM8") + + def translate_type(self, type: str, size: Optional[Union[int, Tuple[int]]]): + """类型转换""" + type = type.lower() + + if type == "varchar": + return f"varchar({size})" + if type == "int": + return "int" + if type == "bigint" or type == "bigint unsigned": + return "bigint" + if type == "datetime": + return "datetime" + if type == "bit": + return "bit" + if type in ("tinyint", "smallint"): + return "smallint" + if type == "text": + return "text" + if type == "blob": + return "blob" + if type == "mediumblob": + return "varchar(10240)" + if type == "decimal": + return ( + f"decimal({','.join(str(s) for s in size)})" if len(size) else "decimal" + ) + + def gen_create(self, ddl) -> str: + """生成 CREATE 语句""" + + def generate_column(col): + name = col["name"].lower() + if name == "id": + return "id bigint NOT NULL PRIMARY KEY IDENTITY" + + type = col["type"].lower() + full_type = self.translate_type(type, col["size"]) + nullable = "NULL" if col["nullable"] else "NOT NULL" + default = f"DEFAULT {col['default']}" if col["default"] is not None else "" + return f"{name} {full_type} {default} {nullable}" + + table_name = ddl["table_name"].lower() + columns = [f"{generate_column(col).strip()}" for col in ddl["columns"]] + field_def_list = ",\n ".join(columns) + script = f"""-- ---------------------------- +-- Table structure for {table_name} +-- ---------------------------- +CREATE TABLE {table_name} ( + {field_def_list} +);""" + + # oracle INSERT '' 不能通过 NOT NULL 校验 + script = script.replace("DEFAULT '' NOT NULL", "DEFAULT '' NULL") + + return script + + def gen_index(self, ddl: Dict) -> str: + return "\n".join(f"{script};" for script in self.index(ddl)) + + def gen_comment(self, table_sql: str, table_name: str) -> str: + script = "" + for field, comment_string in self.filed_comments(table_sql): + script += ( + f"COMMENT ON COLUMN {table_name}.{field} IS '{comment_string}';" + "\n" + ) + + table_comment = self.table_comment(table_sql) + if table_comment: + script += f"COMMENT ON TABLE {table_name} IS '{table_comment}';\n" + + return script + + def gen_pk(self, table_name: str) -> str: + """生成主键定义""" + return "" + + def gen_index(self, ddl: Dict) -> str: + return "\n".join(f"{script};" for script in self.index(ddl)) + + def gen_insert(self, table_name: str) -> str: + """拷贝 INSERT 语句""" + inserts = list(Convertor.inserts(table_name, self.content)) + + ## 生成 insert 脚本 + script = "" + if inserts: + inserts_lines = "\n".join(inserts) + script += f"""\n\n-- ---------------------------- +-- Records of {table_name.lower()} +-- ---------------------------- +-- @formatter:off +SET IDENTITY_INSERT {table_name.lower()} ON; +{inserts_lines} +COMMIT; +SET IDENTITY_INSERT {table_name.lower()} OFF; +-- @formatter:on""" + + return script + + +def main(): + parser = argparse.ArgumentParser(description="芋道系统数据库转换工具") + parser.add_argument( + "type", + type=str, + help="目标数据库类型", + choices=["postgres", "oracle", "sqlserver", "dm8"], + ) + args = parser.parse_args() + + sql_file = pathlib.Path("../mysql/ruoyi-vue-pro.sql").resolve().as_posix() + convertor = None + if args.type == "postgres": + convertor = PostgreSQLConvertor(sql_file) + elif args.type == "oracle": + convertor = OracleConvertor(sql_file) + elif args.type == "sqlserver": + convertor = SQLServerConvertor(sql_file) + elif args.type == "dm8": + convertor = DM8Convertor(sql_file) + else: + raise NotImplementedError(f"不支持目标数据库类型: {args.type}") + + convertor.print() + + +if __name__ == "__main__": + main() diff --git a/sql/tools/docker-compose.yaml b/sql/tools/docker-compose.yaml new file mode 100644 index 0000000..6138a36 --- /dev/null +++ b/sql/tools/docker-compose.yaml @@ -0,0 +1,94 @@ +name: ruoyi-vue-pro + +volumes: + mysql: { } + postgres: { } + sqlserver: { } + dm8: { } + +services: + mysql: + image: mysql:8.0.33 + restart: unless-stopped + environment: + TZ: Asia/Shanghai + MYSQL_ROOT_PASSWORD: 123456 + MYSQL_DATABASE: ruoyi-vue-pro + ports: + - "3306:3306" + volumes: + - mysql:/var/lib/mysql/ + # 注入初始化脚本 + - ./mysql/ruoyi-vue-pro.sql:/docker-entrypoint-initdb.d/init.sql:ro + command: + --default-authentication-plugin=mysql_native_password + --character-set-server=utf8mb4 + --collation-server=utf8mb4_general_ci + --explicit_defaults_for_timestamp=true + --lower_case_table_names=1 + + postgres: + image: postgres:14.2 + restart: unless-stopped + environment: + POSTGRES_USER: root + POSTGRES_PASSWORD: 123456 + POSTGRES_DB: ruoyi-vue-pro + ports: + - "5432:5432" + volumes: + - postgres:/var/lib/postgresql/data + # 注入初始化脚本 + - ../postgresql/quartz.sql:/docker-entrypoint-initdb.d/quartz.sql:ro + - ../postgresql/ruoyi-vue-pro.sql:/docker-entrypoint-initdb.d/ruoyi-vue-pro.sql:ro + + oracle: + image: gvenzl/oracle-xe:18-slim-faststart + restart: unless-stopped + environment: + ## 登录信息 SID: XE user: system password: oracle + ORACLE_PASSWORD: oracle + ports: + - "1521:1521" + volumes: + - ../oracle/ruoyi-vue-pro.sql:/tmp/schema.sql:ro + # 创建app用户: ROOT/123456@//localhost/XEPDB1 + - ./oracle/1_create_user.sql:/docker-entrypoint-initdb.d/1_create_user.sql:ro + - ./oracle/2_create_schema.sh:/docker-entrypoint-initdb.d/2_create_schema.sh:ro + + sqlserver: + image: mcr.microsoft.com/mssql/server:2017-latest + restart: unless-stopped + environment: + TZ: Asia/Shanghai + ACCEPT_EULA: "Y" + SA_PASSWORD: "Win@2024" + ports: + - "1433:1433" + volumes: + - sqlserver:/var/opt/mssql + - ../sqlserver/ruoyi-vue-pro.sql:/tmp/schema.sql:ro + # docker compose exec sqlserver bash /tmp/create_schema.sh + - ./sqlserver/create_schema.sh:/tmp/create_schema.sh:ro + + + dm8: + # wget https://download.dameng.com/eco/dm8/dm8_20230808_rev197096_x86_rh6_64_single.tar + # docker load -i dm8_20230808_rev197096_x86_rh6_64_single.tar + image: dm8_single:dm8_20230808_rev197096_x86_rh6_64 + restart: unless-stopped + environment: + PAGE_SIZE: 16 + LD_LIBRARY_PATH: /opt/dmdbms/bin + EXTENT_SIZE: 32 + BLANK_PAD_MODE: 1 + LOG_SIZE: 1024 + UNICODE_FLAG: 1 + LENGTH_IN_CHAR: 1 + INSTANCE_NAME: dm8_test + ports: + - "5236:5236" + volumes: + - dm8:/opt/dmdbms/data + - ../dm/ruoyi-vue-pro-dm8.sql:/tmp/schema.sql:ro + # docker compose exec dm8 bash -c "exec /opt/dmdbms/bin/disql SYSDBA/SYSDBA001 \`/tmp/schema.sql" diff --git a/sql/tools/oracle/1_create_user.sql b/sql/tools/oracle/1_create_user.sql new file mode 100644 index 0000000..58c9658 --- /dev/null +++ b/sql/tools/oracle/1_create_user.sql @@ -0,0 +1,3 @@ +ALTER SESSION SET CONTAINER=XEPDB1; +CREATE USER ROOT IDENTIFIED BY 123456 QUOTA UNLIMITED ON USERS; +GRANT CONNECT, RESOURCE TO ROOT; diff --git a/sql/tools/oracle/2_create_schema.sh b/sql/tools/oracle/2_create_schema.sh new file mode 100644 index 0000000..ce7955d --- /dev/null +++ b/sql/tools/oracle/2_create_schema.sh @@ -0,0 +1 @@ +sqlplus -s ROOT/123456@//localhost/XEPDB1 @/tmp/schema.sql diff --git a/sql/tools/sqlserver/create_schema.sh b/sql/tools/sqlserver/create_schema.sh new file mode 100644 index 0000000..172650b --- /dev/null +++ b/sql/tools/sqlserver/create_schema.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SA_PASSWORD} -Q "CREATE DATABASE [ruoyi-vue-pro]; +GO" +/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SA_PASSWORD} -d 'ruoyi-vue-pro' -i /tmp/schema.sql diff --git a/win-dependencies/pom.xml b/win-dependencies/pom.xml new file mode 100644 index 0000000..1943450 --- /dev/null +++ b/win-dependencies/pom.xml @@ -0,0 +1,687 @@ + + + 4.0.0 + + com.win + win-dependencies + ${revision} + pom + + ${project.artifactId} + 基础 bom 文件,管理整个项目的依赖版本 + https://github.com/YunaiV/ruoyi-vue-pro + + + 2.1.0-snapshot + 1.5.0 + + 3.2.1 + 2023.0.0 + 2022.0.0.0 + + 2.2.0 + 4.3.0 + + 1.2.21 + 3.5.5 + 3.5.5 + 4.3.0 + 1.4.10 + 2.2.11 + 3.26.0 + 8.1.3.62 + + 2.2.3 + + + + 2.4.0 + + 2.2.7 + + 9.0.0 + 3.2.1 + 0.33.0 + + 8.0.1.RELEASE + 1.0.13 + 5.2.0 + + 7.0.1 + + 2.0.3 + 1.17.2 + 1.18.30 + 1.5.5.Final + 5.8.25 + 6.0.0-M10 + 3.3.3 + 2.3 + 1.0.5 + 1.2.83 + 33.0.0-jre + 5.1.0 + 2.14.5 + 3.10.0 + 0.1.55 + 2.9.1 + 2.7.0 + 3.0.6 + 0.10.2 + + 3.5.0 + 4.11.0 + 2.15.1 + 8.5.7 + 4.6.4 + 2.2.1 + 3.1.880 + 2.0.5 + 1.6.6-beta2 + 2.12.2 + 4.6.0 + + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring.boot.version} + pom + import + + + org.springframework.cloud + spring-cloud-dependencies + ${spring.cloud.version} + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring.cloud.alibaba.version} + pom + import + + + + + io.github.mouzt + bizlog-sdk + ${bizlog-sdk.version} + + + org.springframework.boot + spring-boot-starter + + + + + com.win + win-spring-boot-starter-biz-tenant + ${revision} + + + com.win + win-spring-boot-starter-biz-data-permission + ${revision} + + + com.win + win-spring-boot-starter-biz-ip + ${revision} + + + + + + org.springframework.boot + spring-boot-configuration-processor + ${spring.boot.version} + + + + com.win + win-spring-boot-starter-env + ${revision} + + + + + com.win + win-spring-boot-starter-web + ${revision} + + + + com.win + win-spring-boot-starter-security + ${revision} + + + + com.win + win-spring-boot-starter-websocket + ${revision} + + + + com.github.xiaoymin + knife4j-openapi3-jakarta-spring-boot-starter + ${knife4j.version} + + + org.springdoc + springdoc-openapi-starter-webmvc-api + ${springdoc.version} + + + com.github.xiaoymin + knife4j-gateway-spring-boot-starter + ${knife4j.version} + + + + + com.win + win-spring-boot-starter-mybatis + ${revision} + + + + com.alibaba + druid-spring-boot-3-starter + ${druid.version} + + + com.baomidou + mybatis-plus-spring-boot3-starter + ${mybatis-plus.version} + + + com.baomidou + mybatis-plus-generator + ${mybatis-plus-generator.version} + + + com.baomidou + dynamic-datasource-spring-boot3-starter + ${dynamic-datasource.version} + + + com.github.yulichang + mybatis-plus-join-boot-starter + ${mybatis-plus-join.version} + + + + com.fhs-opensource + easy-trans-spring-boot-starter + ${easy-trans.version} + + + org.springframework + spring-context + + + org.springframework.cloud + spring-cloud-commons + + + + + com.fhs-opensource + easy-trans-mybatis-plus-extend + ${easy-trans.version} + + + com.fhs-opensource + easy-trans-anno + ${easy-trans.version} + + + + com.win + win-spring-boot-starter-redis + ${revision} + + + + org.redisson + redisson-spring-boot-starter + ${redisson.version} + + + + com.dameng + DmJdbcDriver18 + ${dm8.jdbc.version} + + + + + com.win + win-spring-boot-starter-rpc + ${revision} + + + + + + + + + com.xuxueli + xxl-job-core + ${xxl-job.version} + + + com.win + win-spring-boot-starter-job + ${revision} + + + + + com.win + win-spring-boot-starter-mq + ${revision} + + + + org.apache.rocketmq + rocketmq-spring-boot-starter + ${rocketmq-spring.version} + + + + + com.win + win-spring-boot-starter-protection + ${revision} + + + + com.baomidou + lock4j-redisson-spring-boot-starter + ${lock4j.version} + + + redisson-spring-boot-starter + org.redisson + + + + + + + com.win + win-spring-boot-starter-monitor + ${revision} + + + + org.apache.skywalking + apm-toolkit-trace + ${skywalking.version} + + + org.apache.skywalking + apm-toolkit-logback-1.x + ${skywalking.version} + + + org.apache.skywalking + apm-toolkit-opentracing + ${skywalking.version} + + + + + + + + + + + + + io.opentracing + opentracing-api + ${opentracing.version} + + + io.opentracing + opentracing-util + ${opentracing.version} + + + io.opentracing + opentracing-noop + ${opentracing.version} + + + + de.codecentric + spring-boot-admin-starter-server + ${spring-boot-admin.version} + + + de.codecentric + spring-boot-admin-starter-client + ${spring-boot-admin.version} + + + + org.mockito + mockito-inline + ${mockito-inline.version} + + + + org.springframework.boot + spring-boot-starter-test + ${spring.boot.version} + + + asm + org.ow2.asm + + + org.mockito + mockito-core + + + + + + com.github.fppt + jedis-mock + ${jedis-mock.version} + + + + uk.co.jemos.podam + podam + ${podam.version} + + + + + org.flowable + flowable-spring-boot-starter-process + ${flowable.version} + + + org.flowable + flowable-spring-boot-starter-actuator + ${flowable.version} + + + + + + com.win + win-common + ${revision} + + + + com.win + win-spring-boot-starter-excel + ${revision} + + + + org.projectlombok + lombok + ${lombok.version} + + + + org.mapstruct + mapstruct + ${mapstruct.version} + + + org.mapstruct + mapstruct-jdk8 + ${mapstruct.version} + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + + + + cn.hutool + hutool-all + ${hutool-5.version} + + + org.dromara.hutool + hutool-extra + ${hutool-6.version} + + + + com.alibaba + easyexcel + ${easyexcel.verion} + + + + commons-io + commons-io + ${commons-io.version} + + + + org.apache.tika + tika-core + ${tika-core.version} + + + + org.apache.velocity + velocity-engine-core + ${velocity.version} + + + + com.alibaba + fastjson + ${fastjson.version} + + + + com.google.guava + guava + ${guava.version} + + + + com.google.inject + guice + ${guice.version} + + + + com.alibaba + transmittable-thread-local + ${transmittable-thread-local.version} + + + + commons-net + commons-net + ${commons-net.version} + + + com.jcraft + jsch + ${jsch.version} + + + + com.xingyuv + spring-boot-starter-captcha-plus + ${captcha-plus.version} + + + + org.lionsoul + ip2region + ${ip2region.version} + + + + org.jsoup + jsoup + ${jsoup.version} + + + + org.reflections + reflections + ${reflections.version} + + + + + com.squareup.okio + okio + ${okio.version} + + + com.squareup.okhttp3 + okhttp + ${okhttp3.version} + + + io.minio + minio + ${minio.version} + + + + com.github.binarywang + weixin-java-pay + ${weixin-java.version} + + + com.github.binarywang + wx-java-mp-spring-boot-starter + ${weixin-java.version} + + + com.github.binarywang + wx-java-miniapp-spring-boot-starter + ${weixin-java.version} + + + + + com.aliyun + aliyun-java-sdk-core + ${aliyun-java-sdk-core.version} + + + opentracing-api + io.opentracing + + + opentracing-util + io.opentracing + + + + + com.aliyun + aliyun-java-sdk-dysmsapi + ${aliyun-java-sdk-dysmsapi.version} + + + com.tencentcloudapi + tencentcloud-sdk-java-sms + ${tencentcloud-sdk-java.version} + + + + + com.xingyuv + spring-boot-starter-justauth + ${justauth.version} + + + cn.hutool + hutool-core + + + + + + + org.jeecgframework.jimureport + jimureport-spring-boot3-starter + ${jimureport.version} + + + com.alibaba + druid + + + + + xerces + xercesImpl + ${xercesImpl.version} + + + + org.postgresql + postgresql + 42.7.3 + + + + + + + + + + org.codehaus.mojo + flatten-maven-plugin + ${flatten-maven-plugin.version} + + resolveCiFriendliesOnly + true + + + + + flatten + + flatten + process-resources + + + + clean + + flatten.clean + clean + + + + + + + diff --git a/win-framework/pom.xml b/win-framework/pom.xml new file mode 100644 index 0000000..5a1132f --- /dev/null +++ b/win-framework/pom.xml @@ -0,0 +1,48 @@ + + + 4.0.0 + + win + com.win + ${revision} + + pom + + win-common + win-spring-boot-starter-env + win-spring-boot-starter-mybatis + win-spring-boot-starter-redis + win-spring-boot-starter-web + win-spring-boot-starter-security + win-spring-boot-starter-websocket + + win-spring-boot-starter-monitor + win-spring-boot-starter-protection + + win-spring-boot-starter-job + win-spring-boot-starter-mq + win-spring-boot-starter-rpc + + win-spring-boot-starter-excel + + win-spring-boot-starter-biz-tenant + win-spring-boot-starter-biz-data-permission + win-spring-boot-starter-biz-ip + + + win-framework + + 该包是技术组件,每个子包,代表一个组件。每个组件包括两部分: + 1. core 包:是该组件的核心封装 + 2. config 包:是该组件基于 Spring 的配置 + + 技术组件,也分成两类: + 1. 框架组件:和我们熟悉的 MyBatis、Redis 等等的拓展 + 2. 业务组件:和业务相关的组件的封装,例如说数据字典、操作日志等等。 + 如果是业务组件,Maven 名字会包含 biz + + https://github.com/YunaiV/ruoyi-vue-pro + + diff --git a/win-framework/win-common/pom.xml b/win-framework/win-common/pom.xml new file mode 100644 index 0000000..a1fb24b --- /dev/null +++ b/win-framework/win-common/pom.xml @@ -0,0 +1,149 @@ + + + + com.win + win-framework + ${revision} + + 4.0.0 + win-common + jar + + ${project.artifactId} + 定义基础 pojo 类、枚举、工具类等等 + https://github.com/YunaiV/ruoyi-vue-pro + + + + + org.springframework + spring-core + provided + + + org.springframework + spring-expression + provided + + + org.springframework + spring-aop + provided + + + org.aspectj + aspectjweaver + provided + + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + + org.springframework + spring-web + provided + + + + jakarta.servlet + jakarta.servlet-api + provided + + + + org.springdoc + springdoc-openapi-starter-webmvc-api + provided + + + + + org.apache.skywalking + apm-toolkit-trace + + + + + org.projectlombok + lombok + + + + org.mapstruct + mapstruct + + + org.mapstruct + mapstruct-jdk8 + + + org.mapstruct + mapstruct-processor + + + + com.google.guava + guava + provided + + + + com.fasterxml.jackson.core + jackson-databind + provided + + + com.fasterxml.jackson.core + jackson-core + provided + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + provided + + + + org.slf4j + slf4j-api + provided + + + + jakarta.validation + jakarta.validation-api + provided + + + + cn.hutool + hutool-all + + + + com.alibaba + transmittable-thread-local + + + + com.fhs-opensource + easy-trans-anno + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + diff --git a/win-framework/win-common/src/main/java/com/fhs/trans/service/AutoTransable.java b/win-framework/win-common/src/main/java/com/fhs/trans/service/AutoTransable.java new file mode 100644 index 0000000..2db0c70 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/fhs/trans/service/AutoTransable.java @@ -0,0 +1,59 @@ +package com.fhs.trans.service; + +import com.fhs.core.trans.vo.VO; + +import java.util.ArrayList; +import java.util.List; + +/** + * 只有实现了这个接口的才能自动翻译 + * + * 为什么要赋值粘贴到 win-common 包下? + * 因为 AutoTransable 属于 easy-trans-service 下,无法方便的在 win-module-xxx-api 模块下使用 + * + * @author jackwang + * @since 2020-05-19 10:26:15 + */ +public interface AutoTransable { + + /** + * 根据 ids 查询数据列表 + * + * 改方法已过期啦,请使用 selectByIds + * + * @param ids 编号数组 + * @return 数据列表 + */ + @Deprecated + default List findByIds(List ids){ + return new ArrayList<>(); + } + + /** + * 根据 ids 查询 + * + * @param ids 编号数组 + * @return 数据列表 + */ + default List selectByIds(List ids){ + return this.findByIds(ids); + } + + /** + * 获取 db 中所有的数据 + * + * @return db 中所有的数据 + */ + default List select(){ + return new ArrayList<>(); + } + + /** + * 根据 id 获取 vo + * + * @param primaryValue id + * @return vo + */ + V selectById(Object primaryValue); + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/core/IntArrayValuable.java b/win-framework/win-common/src/main/java/com/win/framework/common/core/IntArrayValuable.java new file mode 100644 index 0000000..02a39f0 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/core/IntArrayValuable.java @@ -0,0 +1,15 @@ +package com.win.framework.common.core; + +/** + * 可生成 Int 数组的接口 + * + * @author 芋道源码 + */ +public interface IntArrayValuable { + + /** + * @return int 数组 + */ + int[] array(); + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/core/KeyValue.java b/win-framework/win-common/src/main/java/com/win/framework/common/core/KeyValue.java new file mode 100644 index 0000000..63c0538 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/core/KeyValue.java @@ -0,0 +1,22 @@ +package com.win.framework.common.core; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * Key Value 的键值对 + * + * @author 芋道源码 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class KeyValue implements Serializable { + + private K key; + private V value; + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/enums/CommonStatusEnum.java b/win-framework/win-common/src/main/java/com/win/framework/common/enums/CommonStatusEnum.java new file mode 100644 index 0000000..0e28561 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/enums/CommonStatusEnum.java @@ -0,0 +1,46 @@ +package com.win.framework.common.enums; + +import cn.hutool.core.util.ObjUtil; +import com.win.framework.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 通用状态枚举 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum CommonStatusEnum implements IntArrayValuable { + + ENABLE(0, "开启"), + DISABLE(1, "关闭"); + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CommonStatusEnum::getStatus).toArray(); + + /** + * 状态值 + */ + private final Integer status; + /** + * 状态名 + */ + private final String name; + + @Override + public int[] array() { + return ARRAYS; + } + + public static boolean isEnable(Integer status) { + return ObjUtil.equal(ENABLE.status, status); + } + + public static boolean isDisable(Integer status) { + return ObjUtil.equal(DISABLE.status, status); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/enums/DateIntervalEnum.java b/win-framework/win-common/src/main/java/com/win/framework/common/enums/DateIntervalEnum.java new file mode 100644 index 0000000..fcd4d72 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/enums/DateIntervalEnum.java @@ -0,0 +1,46 @@ +package com.win.framework.common.enums; + +import cn.hutool.core.util.ArrayUtil; +import com.win.framework.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 时间间隔的枚举 + * + * @author dhb52 + */ +@Getter +@AllArgsConstructor +public enum DateIntervalEnum implements IntArrayValuable { + + DAY(1, "天"), + WEEK(2, "周"), + MONTH(3, "月"), + QUARTER(4, "季度"), + YEAR(5, "年") + ; + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(DateIntervalEnum::getInterval).toArray(); + + /** + * 类型 + */ + private final Integer interval; + /** + * 名称 + */ + private final String name; + + @Override + public int[] array() { + return ARRAYS; + } + + public static DateIntervalEnum valueOf(Integer interval) { + return ArrayUtil.firstMatch(item -> item.getInterval().equals(interval), DateIntervalEnum.values()); + } + +} \ No newline at end of file diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/enums/DocumentEnum.java b/win-framework/win-common/src/main/java/com/win/framework/common/enums/DocumentEnum.java new file mode 100644 index 0000000..0903865 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/enums/DocumentEnum.java @@ -0,0 +1,21 @@ +package com.win.framework.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 文档地址 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum DocumentEnum { + + REDIS_INSTALL("https://gitee.com/zhijiantianya/ruoyi-vue-pro/issues/I4VCSJ", "Redis 安装文档"), + TENANT("https://doc.iocoder.cn", "SaaS 多租户文档"); + + private final String url; + private final String memo; + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/enums/RpcConstants.java b/win-framework/win-common/src/main/java/com/win/framework/common/enums/RpcConstants.java new file mode 100644 index 0000000..5a0bfd9 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/enums/RpcConstants.java @@ -0,0 +1,17 @@ +package com.win.framework.common.enums; + +/** + * RPC 相关的枚举 + * + * 虽然放在 win-spring-boot-starter-rpc 会相对合适,但是每个 API 模块需要使用到,所以暂时只好放在此处 + * + * @author 芋道源码 + */ +public class RpcConstants { + + /** + * RPC API 的前缀 + */ + public static final String RPC_API_PREFIX = "/rpc-api"; + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/enums/TerminalEnum.java b/win-framework/win-common/src/main/java/com/win/framework/common/enums/TerminalEnum.java new file mode 100644 index 0000000..2381ca3 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/enums/TerminalEnum.java @@ -0,0 +1,40 @@ +package com.win.framework.common.enums; + +import com.win.framework.common.core.IntArrayValuable; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 终端的枚举 + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +@Getter +public enum TerminalEnum implements IntArrayValuable { + + UNKNOWN(0, "未知"), // 目的:在无法解析到 terminal 时,使用它 + WECHAT_MINI_PROGRAM(10, "微信小程序"), + WECHAT_WAP(11, "微信公众号"), + H5(20, "H5 网页"), + APP(31, "手机 App"), + ; + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(TerminalEnum::getTerminal).toArray(); + + /** + * 终端 + */ + private final Integer terminal; + /** + * 终端名 + */ + private final String name; + + @Override + public int[] array() { + return ARRAYS; + } +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/enums/UserTypeEnum.java b/win-framework/win-common/src/main/java/com/win/framework/common/enums/UserTypeEnum.java new file mode 100644 index 0000000..b33a375 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/enums/UserTypeEnum.java @@ -0,0 +1,39 @@ +package com.win.framework.common.enums; + +import cn.hutool.core.util.ArrayUtil; +import com.win.framework.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 全局用户类型枚举 + */ +@AllArgsConstructor +@Getter +public enum UserTypeEnum implements IntArrayValuable { + + MEMBER(1, "会员"), // 面向 c 端,普通用户 + ADMIN(2, "管理员"); // 面向 b 端,管理后台 + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(UserTypeEnum::getValue).toArray(); + + /** + * 类型 + */ + private final Integer value; + /** + * 类型名 + */ + private final String name; + + public static UserTypeEnum valueOf(Integer value) { + return ArrayUtil.firstMatch(userType -> userType.getValue().equals(value), UserTypeEnum.values()); + } + + @Override + public int[] array() { + return ARRAYS; + } +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/enums/WebFilterOrderEnum.java b/win-framework/win-common/src/main/java/com/win/framework/common/enums/WebFilterOrderEnum.java new file mode 100644 index 0000000..654bc9a --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/enums/WebFilterOrderEnum.java @@ -0,0 +1,36 @@ +package com.win.framework.common.enums; + +/** + * Web 过滤器顺序的枚举类,保证过滤器按照符合我们的预期 + * + * 考虑到每个 starter 都需要用到该工具类,所以放到 common 模块下的 enum 包下 + * + * @author 芋道源码 + */ +public interface WebFilterOrderEnum { + + int CORS_FILTER = Integer.MIN_VALUE; + + int TRACE_FILTER = CORS_FILTER + 1; + + int ENV_TAG_FILTER = TRACE_FILTER + 1; + + int REQUEST_BODY_CACHE_FILTER = Integer.MIN_VALUE + 500; + + // OrderedRequestContextFilter 默认为 -105,用于国际化上下文等等 + + int TENANT_CONTEXT_FILTER = - 104; // 需要保证在 ApiAccessLogFilter 前面 + + int API_ACCESS_LOG_FILTER = -103; // 需要保证在 RequestBodyCacheFilter 后面 + + int XSS_FILTER = -102; // 需要保证在 RequestBodyCacheFilter 后面 + + // Spring Security Filter 默认为 -100,可见 org.springframework.boot.autoconfigure.security.SecurityProperties 配置属性类 + + int TENANT_SECURITY_FILTER = -99; // 需要保证在 Spring Security 过滤器后面 + + int FLOWABLE_FILTER = -98; // 需要保证在 Spring Security 过滤后面 + + int DEMO_FILTER = Integer.MAX_VALUE; + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/exception/ErrorCode.java b/win-framework/win-common/src/main/java/com/win/framework/common/exception/ErrorCode.java new file mode 100644 index 0000000..f14fe99 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/exception/ErrorCode.java @@ -0,0 +1,32 @@ +package com.win.framework.common.exception; + +import com.win.framework.common.exception.enums.GlobalErrorCodeConstants; +import com.win.framework.common.exception.enums.ServiceErrorCodeRange; +import lombok.Data; + +/** + * 错误码对象 + * + * 全局错误码,占用 [0, 999], 参见 {@link GlobalErrorCodeConstants} + * 业务异常错误码,占用 [1 000 000 000, +∞),参见 {@link ServiceErrorCodeRange} + * + * TODO 错误码设计成对象的原因,为未来的 i18 国际化做准备 + */ +@Data +public class ErrorCode { + + /** + * 错误码 + */ + private final Integer code; + /** + * 错误提示 + */ + private final String msg; + + public ErrorCode(Integer code, String message) { + this.code = code; + this.msg = message; + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/exception/ServerException.java b/win-framework/win-common/src/main/java/com/win/framework/common/exception/ServerException.java new file mode 100644 index 0000000..de580c3 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/exception/ServerException.java @@ -0,0 +1,60 @@ +package com.win.framework.common.exception; + +import com.win.framework.common.exception.enums.GlobalErrorCodeConstants; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 服务器异常 Exception + */ +@Data +@EqualsAndHashCode(callSuper = true) +public final class ServerException extends RuntimeException { + + /** + * 全局错误码 + * + * @see GlobalErrorCodeConstants + */ + private Integer code; + /** + * 错误提示 + */ + private String message; + + /** + * 空构造方法,避免反序列化问题 + */ + public ServerException() { + } + + public ServerException(ErrorCode errorCode) { + this.code = errorCode.getCode(); + this.message = errorCode.getMsg(); + } + + public ServerException(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public ServerException setCode(Integer code) { + this.code = code; + return this; + } + + @Override + public String getMessage() { + return message; + } + + public ServerException setMessage(String message) { + this.message = message; + return this; + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/exception/ServiceException.java b/win-framework/win-common/src/main/java/com/win/framework/common/exception/ServiceException.java new file mode 100644 index 0000000..4455451 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/exception/ServiceException.java @@ -0,0 +1,60 @@ +package com.win.framework.common.exception; + +import com.win.framework.common.exception.enums.ServiceErrorCodeRange; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 业务逻辑异常 Exception + */ +@Data +@EqualsAndHashCode(callSuper = true) +public final class ServiceException extends RuntimeException { + + /** + * 业务错误码 + * + * @see ServiceErrorCodeRange + */ + private Integer code; + /** + * 错误提示 + */ + private String message; + + /** + * 空构造方法,避免反序列化问题 + */ + public ServiceException() { + } + + public ServiceException(ErrorCode errorCode) { + this.code = errorCode.getCode(); + this.message = errorCode.getMsg(); + } + + public ServiceException(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public ServiceException setCode(Integer code) { + this.code = code; + return this; + } + + @Override + public String getMessage() { + return message; + } + + public ServiceException setMessage(String message) { + this.message = message; + return this; + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/exception/enums/GlobalErrorCodeConstants.java b/win-framework/win-common/src/main/java/com/win/framework/common/exception/enums/GlobalErrorCodeConstants.java new file mode 100644 index 0000000..5507071 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/exception/enums/GlobalErrorCodeConstants.java @@ -0,0 +1,41 @@ +package com.win.framework.common.exception.enums; + +import com.win.framework.common.exception.ErrorCode; + +/** + * 全局错误码枚举 + * 0-999 系统异常编码保留 + * + * 一般情况下,使用 HTTP 响应状态码 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status + * 虽然说,HTTP 响应状态码作为业务使用表达能力偏弱,但是使用在系统层面还是非常不错的 + * 比较特殊的是,因为之前一直使用 0 作为成功,就不使用 200 啦。 + * + * @author 芋道源码 + */ +public interface GlobalErrorCodeConstants { + + ErrorCode SUCCESS = new ErrorCode(0, "成功"); + + // ========== 客户端错误段 ========== + + ErrorCode BAD_REQUEST = new ErrorCode(400, "请求参数不正确"); + ErrorCode UNAUTHORIZED = new ErrorCode(401, "账号未登录"); + ErrorCode FORBIDDEN = new ErrorCode(403, "没有该操作权限"); + ErrorCode NOT_FOUND = new ErrorCode(404, "请求未找到"); + ErrorCode METHOD_NOT_ALLOWED = new ErrorCode(405, "请求方法不正确"); + ErrorCode LOCKED = new ErrorCode(423, "请求失败,请稍后重试"); // 并发请求,不允许 + ErrorCode TOO_MANY_REQUESTS = new ErrorCode(429, "请求过于频繁,请稍后重试"); + + // ========== 服务端错误段 ========== + + ErrorCode INTERNAL_SERVER_ERROR = new ErrorCode(500, "系统异常"); + ErrorCode NOT_IMPLEMENTED = new ErrorCode(501, "功能未实现/未开启"); + ErrorCode ERROR_CONFIGURATION = new ErrorCode(502, "错误的配置项"); + + // ========== 自定义错误段 ========== + ErrorCode REPEATED_REQUESTS = new ErrorCode(900, "重复请求,请稍后重试"); // 重复请求 + ErrorCode DEMO_DENY = new ErrorCode(901, "演示模式,禁止写操作"); + + ErrorCode UNKNOWN = new ErrorCode(999, "未知错误"); + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/exception/enums/ServiceErrorCodeRange.java b/win-framework/win-common/src/main/java/com/win/framework/common/exception/enums/ServiceErrorCodeRange.java new file mode 100644 index 0000000..3453a15 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/exception/enums/ServiceErrorCodeRange.java @@ -0,0 +1,46 @@ +package com.win.framework.common.exception.enums; + +/** + * 业务异常的错误码区间,解决:解决各模块错误码定义,避免重复,在此只声明不做实际使用 + * + * 一共 10 位,分成四段 + * + * 第一段,1 位,类型 + * 1 - 业务级别异常 + * x - 预留 + * 第二段,3 位,系统类型 + * 001 - 用户系统 + * 002 - 商品系统 + * 003 - 订单系统 + * 004 - 支付系统 + * 005 - 优惠劵系统 + * ... - ... + * 第三段,3 位,模块 + * 不限制规则。 + * 一般建议,每个系统里面,可能有多个模块,可以再去做分段。以用户系统为例子: + * 001 - OAuth2 模块 + * 002 - User 模块 + * 003 - MobileCode 模块 + * 第四段,3 位,错误码 + * 不限制规则。 + * 一般建议,每个模块自增。 + * + * @author 芋道源码 + */ +public class ServiceErrorCodeRange { + + // 模块 infra 错误码区间 [1-001-000-000 ~ 1-002-000-000) + // 模块 system 错误码区间 [1-002-000-000 ~ 1-003-000-000) + // 模块 report 错误码区间 [1-003-000-000 ~ 1-004-000-000) + // 模块 member 错误码区间 [1-004-000-000 ~ 1-005-000-000) + // 模块 mp 错误码区间 [1-006-000-000 ~ 1-007-000-000) + // 模块 pay 错误码区间 [1-007-000-000 ~ 1-008-000-000) + // 模块 bpm 错误码区间 [1-009-000-000 ~ 1-010-000-000) + + // 模块 product 错误码区间 [1-008-000-000 ~ 1-009-000-000) + // 模块 trade 错误码区间 [1-011-000-000 ~ 1-012-000-000) + // 模块 promotion 错误码区间 [1-013-000-000 ~ 1-014-000-000) + + // 模块 crm 错误码区间 [1-020-000-000 ~ 1-021-000-000) + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/exception/util/ServiceExceptionUtil.java b/win-framework/win-common/src/main/java/com/win/framework/common/exception/util/ServiceExceptionUtil.java new file mode 100644 index 0000000..217cb3a --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/exception/util/ServiceExceptionUtil.java @@ -0,0 +1,77 @@ +package com.win.framework.common.exception.util; + +import com.win.framework.common.exception.ErrorCode; +import com.win.framework.common.exception.ServiceException; +import com.win.framework.common.exception.enums.GlobalErrorCodeConstants; +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; + +/** + * {@link ServiceException} 工具类 + * + * 目的在于,格式化异常信息提示。 + * 考虑到 String.format 在参数不正确时会报错,因此使用 {} 作为占位符,并使用 {@link #doFormat(int, String, Object...)} 方法来格式化 + * + */ +@Slf4j +public class ServiceExceptionUtil { + + // ========== 和 ServiceException 的集成 ========== + + public static ServiceException exception(ErrorCode errorCode) { + return exception0(errorCode.getCode(), errorCode.getMsg()); + } + + public static ServiceException exception(ErrorCode errorCode, Object... params) { + return exception0(errorCode.getCode(), errorCode.getMsg(), params); + } + + public static ServiceException exception0(Integer code, String messagePattern, Object... params) { + String message = doFormat(code, messagePattern, params); + return new ServiceException(code, message); + } + + public static ServiceException invalidParamException(String messagePattern, Object... params) { + return exception0(GlobalErrorCodeConstants.BAD_REQUEST.getCode(), messagePattern, params); + } + + // ========== 格式化方法 ========== + + /** + * 将错误编号对应的消息使用 params 进行格式化。 + * + * @param code 错误编号 + * @param messagePattern 消息模版 + * @param params 参数 + * @return 格式化后的提示 + */ + @VisibleForTesting + public static String doFormat(int code, String messagePattern, Object... params) { + StringBuilder sbuf = new StringBuilder(messagePattern.length() + 50); + int i = 0; + int j; + int l; + for (l = 0; l < params.length; l++) { + j = messagePattern.indexOf("{}", i); + if (j == -1) { + log.error("[doFormat][参数过多:错误码({})|错误内容({})|参数({})", code, messagePattern, params); + if (i == 0) { + return messagePattern; + } else { + sbuf.append(messagePattern.substring(i)); + return sbuf.toString(); + } + } else { + sbuf.append(messagePattern, i, j); + sbuf.append(params[l]); + i = j + 2; + } + } + if (messagePattern.indexOf("{}", i) != -1) { + log.error("[doFormat][参数过少:错误码({})|错误内容({})|参数({})", code, messagePattern, params); + } + sbuf.append(messagePattern.substring(i)); + return sbuf.toString(); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/package-info.java b/win-framework/win-common/src/main/java/com/win/framework/common/package-info.java new file mode 100644 index 0000000..b547792 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/package-info.java @@ -0,0 +1,6 @@ +/** + * 基础的通用类,和框架无关 + * + * 例如说,CommonResult 为通用返回 + */ +package com.win.framework.common; diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/pojo/CommonResult.java b/win-framework/win-common/src/main/java/com/win/framework/common/pojo/CommonResult.java new file mode 100644 index 0000000..81716f9 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/pojo/CommonResult.java @@ -0,0 +1,112 @@ +package com.win.framework.common.pojo; + +import com.win.framework.common.exception.ErrorCode; +import com.win.framework.common.exception.ServiceException; +import com.win.framework.common.exception.enums.GlobalErrorCodeConstants; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import org.springframework.util.Assert; + +import java.io.Serializable; +import java.util.Objects; + +/** + * 通用返回 + * + * @param 数据泛型 + */ +@Data +public class CommonResult implements Serializable { + + /** + * 错误码 + * + * @see ErrorCode#getCode() + */ + private Integer code; + /** + * 返回数据 + */ + private T data; + /** + * 错误提示,用户可阅读 + * + * @see ErrorCode#getMsg() () + */ + private String msg; + + /** + * 将传入的 result 对象,转换成另外一个泛型结果的对象 + * + * 因为 A 方法返回的 CommonResult 对象,不满足调用其的 B 方法的返回,所以需要进行转换。 + * + * @param result 传入的 result 对象 + * @param 返回的泛型 + * @return 新的 CommonResult 对象 + */ + public static CommonResult error(CommonResult result) { + return error(result.getCode(), result.getMsg()); + } + + public static CommonResult error(Integer code, String message) { + Assert.isTrue(!GlobalErrorCodeConstants.SUCCESS.getCode().equals(code), "code 必须是错误的!"); + CommonResult result = new CommonResult<>(); + result.code = code; + result.msg = message; + return result; + } + + public static CommonResult error(ErrorCode errorCode) { + return error(errorCode.getCode(), errorCode.getMsg()); + } + + public static CommonResult success(T data) { + CommonResult result = new CommonResult<>(); + result.code = GlobalErrorCodeConstants.SUCCESS.getCode(); + result.data = data; + result.msg = ""; + return result; + } + + public static boolean isSuccess(Integer code) { + return Objects.equals(code, GlobalErrorCodeConstants.SUCCESS.getCode()); + } + + @JsonIgnore // 避免 jackson 序列化 + public boolean isSuccess() { + return isSuccess(code); + } + + @JsonIgnore // 避免 jackson 序列化 + public boolean isError() { + return !isSuccess(); + } + + // ========= 和 Exception 异常体系集成 ========= + + /** + * 判断是否有异常。如果有,则抛出 {@link ServiceException} 异常 + */ + public void checkError() throws ServiceException { + if (isSuccess()) { + return; + } + // 业务异常 + throw new ServiceException(code, msg); + } + + /** + * 判断是否有异常。如果有,则抛出 {@link ServiceException} 异常 + * 如果没有,则返回 {@link #data} 数据 + */ + @JsonIgnore // 避免 jackson 序列化 + public T getCheckedData() { + checkError(); + return data; + } + + public static CommonResult error(ServiceException serviceException) { + return error(serviceException.getCode(), serviceException.getMessage()); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/pojo/PageParam.java b/win-framework/win-common/src/main/java/com/win/framework/common/pojo/PageParam.java new file mode 100644 index 0000000..7ea32ed --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/pojo/PageParam.java @@ -0,0 +1,36 @@ +package com.win.framework.common.pojo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.NotNull; +import java.io.Serializable; + +@Schema(description="分页参数") +@Data +public class PageParam implements Serializable { + + private static final Integer PAGE_NO = 1; + private static final Integer PAGE_SIZE = 10; + + /** + * 每页条数 - 不分页 + * + * 例如说,导出接口,可以设置 {@link #pageSize} 为 -1 不分页,查询所有数据。 + */ + public static final Integer PAGE_SIZE_NONE = -1; + + @Schema(description = "页码,从 1 开始", requiredMode = Schema.RequiredMode.REQUIRED,example = "1") + @NotNull(message = "页码不能为空") + @Min(value = 1, message = "页码最小值为 1") + private Integer pageNo = PAGE_NO; + + @Schema(description = "每页条数,最大值为 100", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + @NotNull(message = "每页条数不能为空") + @Min(value = 1, message = "每页条数最小值为 1") + @Max(value = 100, message = "每页条数最大值为 100") + private Integer pageSize = PAGE_SIZE; + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/pojo/PageResult.java b/win-framework/win-common/src/main/java/com/win/framework/common/pojo/PageResult.java new file mode 100644 index 0000000..d9dee04 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/pojo/PageResult.java @@ -0,0 +1,41 @@ +package com.win.framework.common.pojo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +@Schema(description = "分页结果") +@Data +public final class PageResult implements Serializable { + + @Schema(description = "数据", requiredMode = Schema.RequiredMode.REQUIRED) + private List list; + + @Schema(description = "总量", requiredMode = Schema.RequiredMode.REQUIRED) + private Long total; + + public PageResult() { + } + + public PageResult(List list, Long total) { + this.list = list; + this.total = total; + } + + public PageResult(Long total) { + this.list = new ArrayList<>(); + this.total = total; + } + + public static PageResult empty() { + return new PageResult<>(0L); + } + + public static PageResult empty(Long total) { + return new PageResult<>(total); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/pojo/SortablePageParam.java b/win-framework/win-common/src/main/java/com/win/framework/common/pojo/SortablePageParam.java new file mode 100644 index 0000000..75f6a76 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/pojo/SortablePageParam.java @@ -0,0 +1,19 @@ +package com.win.framework.common.pojo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.List; + +@Schema(description = "可排序的分页参数") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SortablePageParam extends PageParam { + + @Schema(description = "排序字段") + private List sortingFields; + +} \ No newline at end of file diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/pojo/SortingField.java b/win-framework/win-common/src/main/java/com/win/framework/common/pojo/SortingField.java new file mode 100644 index 0000000..41787e4 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/pojo/SortingField.java @@ -0,0 +1,37 @@ +package com.win.framework.common.pojo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 排序字段 DTO + * + * 类名加了 ing 的原因是,避免和 ES SortField 重名。 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SortingField implements Serializable { + + /** + * 顺序 - 升序 + */ + public static final String ORDER_ASC = "asc"; + /** + * 顺序 - 降序 + */ + public static final String ORDER_DESC = "desc"; + + /** + * 字段 + */ + private String field; + /** + * 顺序 + */ + private String order; + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/cache/CacheUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/cache/CacheUtils.java new file mode 100644 index 0000000..65434cc --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/cache/CacheUtils.java @@ -0,0 +1,49 @@ +package com.win.framework.common.util.cache; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; + +import java.time.Duration; +import java.util.concurrent.Executors; + +/** + * Cache 工具类 + * + * @author 芋道源码 + */ +public class CacheUtils { + + /** + * 构建异步刷新的 LoadingCache 对象 + * + * 注意:如果你的缓存和 ThreadLocal 有关系,要么自己处理 ThreadLocal 的传递,要么使用 {@link #buildCache(Duration, CacheLoader)} 方法 + * + * 或者简单理解: + * 1、和“人”相关的,使用 {@link #buildCache(Duration, CacheLoader)} 方法 + * 2、和“全局”、“系统”相关的,使用当前缓存方法 + * + * @param duration 过期时间 + * @param loader CacheLoader 对象 + * @return LoadingCache 对象 + */ + public static LoadingCache buildAsyncReloadingCache(Duration duration, CacheLoader loader) { + return CacheBuilder.newBuilder() + // 只阻塞当前数据加载线程,其他线程返回旧值 + .refreshAfterWrite(duration) + // 通过 asyncReloading 实现全异步加载,包括 refreshAfterWrite 被阻塞的加载线程 + .build(CacheLoader.asyncReloading(loader, Executors.newCachedThreadPool())); // TODO 芋艿:可能要思考下,未来要不要做成可配置 + } + + /** + * 构建同步刷新的 LoadingCache 对象 + * + * @param duration 过期时间 + * @param loader CacheLoader 对象 + * @return LoadingCache 对象 + */ + public static LoadingCache buildCache(Duration duration, CacheLoader loader) { + return CacheBuilder.newBuilder().refreshAfterWrite(duration).build(loader); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/collection/ArrayUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/collection/ArrayUtils.java new file mode 100644 index 0000000..63f463e --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/collection/ArrayUtils.java @@ -0,0 +1,58 @@ +package com.win.framework.common.util.collection; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.IterUtil; +import cn.hutool.core.util.ArrayUtil; + +import java.util.Collection; +import java.util.function.Consumer; +import java.util.function.Function; + +import static com.win.framework.common.util.collection.CollectionUtils.convertList; + +/** + * Array 工具类 + * + * @author 芋道源码 + */ +public class ArrayUtils { + + /** + * 将 object 和 newElements 合并成一个数组 + * + * @param object 对象 + * @param newElements 数组 + * @param 泛型 + * @return 结果数组 + */ + @SafeVarargs + public static Consumer[] append(Consumer object, Consumer... newElements) { + if (object == null) { + return newElements; + } + Consumer[] result = ArrayUtil.newArray(Consumer.class, 1 + newElements.length); + result[0] = object; + System.arraycopy(newElements, 0, result, 1, newElements.length); + return result; + } + + public static V[] toArray(Collection from, Function mapper) { + return toArray(convertList(from, mapper)); + } + + @SuppressWarnings("unchecked") + public static T[] toArray(Collection from) { + if (CollectionUtil.isEmpty(from)) { + return (T[]) (new Object[0]); + } + return ArrayUtil.toArray(from, (Class) IterUtil.getElementType(from.iterator())); + } + + public static T get(T[] array, int index) { + if (null == array || index >= array.length) { + return null; + } + return array[index]; + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/collection/CollectionUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/collection/CollectionUtils.java new file mode 100644 index 0000000..5cbddc1 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/collection/CollectionUtils.java @@ -0,0 +1,322 @@ +package com.win.framework.common.util.collection; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ArrayUtil; +import com.google.common.collect.ImmutableMap; + +import java.util.*; +import java.util.function.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static java.util.Arrays.asList; + +/** + * Collection 工具类 + * + * @author 芋道源码 + */ +public class CollectionUtils { + + public static boolean containsAny(Object source, Object... targets) { + return asList(targets).contains(source); + } + + public static boolean isAnyEmpty(Collection... collections) { + return Arrays.stream(collections).anyMatch(CollectionUtil::isEmpty); + } + + public static boolean anyMatch(Collection from, Predicate predicate) { + return from.stream().anyMatch(predicate); + } + + public static List filterList(Collection from, Predicate predicate) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return from.stream().filter(predicate).collect(Collectors.toList()); + } + + public static List distinct(Collection from, Function keyMapper) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return distinct(from, keyMapper, (t1, t2) -> t1); + } + + public static List distinct(Collection from, Function keyMapper, BinaryOperator cover) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return new ArrayList<>(convertMap(from, keyMapper, Function.identity(), cover).values()); + } + + public static List convertList(T[] from, Function func) { + if (ArrayUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return convertList(Arrays.asList(from), func); + } + + public static List convertList(Collection from, Function func) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return from.stream().map(func).filter(Objects::nonNull).collect(Collectors.toList()); + } + + public static List convertList(Collection from, Function func, Predicate filter) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return from.stream().filter(filter).map(func).filter(Objects::nonNull).collect(Collectors.toList()); + } + + public static List convertListByFlatMap(Collection from, + Function> func) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return from.stream().filter(Objects::nonNull).flatMap(func).filter(Objects::nonNull).collect(Collectors.toList()); + } + + public static List convertListByFlatMap(Collection from, + Function mapper, + Function> func) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return from.stream().map(mapper).filter(Objects::nonNull).flatMap(func).filter(Objects::nonNull).collect(Collectors.toList()); + } + + public static List mergeValuesFromMap(Map> map) { + return map.values() + .stream() + .flatMap(List::stream) + .collect(Collectors.toList()); + } + + public static Set convertSet(Collection from) { + return convertSet(from, v -> v); + } + + public static Set convertSet(Collection from, Function func) { + if (CollUtil.isEmpty(from)) { + return new HashSet<>(); + } + return from.stream().map(func).filter(Objects::nonNull).collect(Collectors.toSet()); + } + + public static Set convertSet(Collection from, Function func, Predicate filter) { + if (CollUtil.isEmpty(from)) { + return new HashSet<>(); + } + return from.stream().filter(filter).map(func).filter(Objects::nonNull).collect(Collectors.toSet()); + } + + public static Map convertMapByFilter(Collection from, Predicate filter, Function keyFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return from.stream().filter(filter).collect(Collectors.toMap(keyFunc, v -> v)); + } + + public static Set convertSetByFlatMap(Collection from, + Function> func) { + if (CollUtil.isEmpty(from)) { + return new HashSet<>(); + } + return from.stream().filter(Objects::nonNull).flatMap(func).filter(Objects::nonNull).collect(Collectors.toSet()); + } + + public static Set convertSetByFlatMap(Collection from, + Function mapper, + Function> func) { + if (CollUtil.isEmpty(from)) { + return new HashSet<>(); + } + return from.stream().map(mapper).filter(Objects::nonNull).flatMap(func).filter(Objects::nonNull).collect(Collectors.toSet()); + } + + public static Map convertMap(Collection from, Function keyFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return convertMap(from, keyFunc, Function.identity()); + } + + public static Map convertMap(Collection from, Function keyFunc, Supplier> supplier) { + if (CollUtil.isEmpty(from)) { + return supplier.get(); + } + return convertMap(from, keyFunc, Function.identity(), supplier); + } + + public static Map convertMap(Collection from, Function keyFunc, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return convertMap(from, keyFunc, valueFunc, (v1, v2) -> v1); + } + + public static Map convertMap(Collection from, Function keyFunc, Function valueFunc, BinaryOperator mergeFunction) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return convertMap(from, keyFunc, valueFunc, mergeFunction, HashMap::new); + } + + public static Map convertMap(Collection from, Function keyFunc, Function valueFunc, Supplier> supplier) { + if (CollUtil.isEmpty(from)) { + return supplier.get(); + } + return convertMap(from, keyFunc, valueFunc, (v1, v2) -> v1, supplier); + } + + public static Map convertMap(Collection from, Function keyFunc, Function valueFunc, BinaryOperator mergeFunction, Supplier> supplier) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return from.stream().collect(Collectors.toMap(keyFunc, valueFunc, mergeFunction, supplier)); + } + + public static Map> convertMultiMap(Collection from, Function keyFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return from.stream().collect(Collectors.groupingBy(keyFunc, Collectors.mapping(t -> t, Collectors.toList()))); + } + + public static Map> convertMultiMap(Collection from, Function keyFunc, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return from.stream() + .collect(Collectors.groupingBy(keyFunc, Collectors.mapping(valueFunc, Collectors.toList()))); + } + + // 暂时没想好名字,先以 2 结尾噶 + public static Map> convertMultiMap2(Collection from, Function keyFunc, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return from.stream().collect(Collectors.groupingBy(keyFunc, Collectors.mapping(valueFunc, Collectors.toSet()))); + } + + public static Map convertImmutableMap(Collection from, Function keyFunc) { + if (CollUtil.isEmpty(from)) { + return Collections.emptyMap(); + } + ImmutableMap.Builder builder = ImmutableMap.builder(); + from.forEach(item -> builder.put(keyFunc.apply(item), item)); + return builder.build(); + } + + /** + * 对比老、新两个列表,找出新增、修改、删除的数据 + * + * @param oldList 老列表 + * @param newList 新列表 + * @param sameFunc 对比函数,返回 true 表示相同,返回 false 表示不同 + * 注意,same 是通过每个元素的“标识”,判断它们是不是同一个数据 + * @return [新增列表、修改列表、删除列表] + */ + public static List> diffList(Collection oldList, Collection newList, + BiFunction sameFunc) { + List createList = new LinkedList<>(newList); // 默认都认为是新增的,后续会进行移除 + List updateList = new ArrayList<>(); + List deleteList = new ArrayList<>(); + + // 通过以 oldList 为主遍历,找出 updateList 和 deleteList + for (T oldObj : oldList) { + // 1. 寻找是否有匹配的 + T foundObj = null; + for (Iterator iterator = createList.iterator(); iterator.hasNext(); ) { + T newObj = iterator.next(); + // 1.1 不匹配,则直接跳过 + if (!sameFunc.apply(oldObj, newObj)) { + continue; + } + // 1.2 匹配,则移除,并结束寻找 + iterator.remove(); + foundObj = newObj; + break; + } + // 2. 匹配添加到 updateList;不匹配则添加到 deleteList 中 + if (foundObj != null) { + updateList.add(foundObj); + } else { + deleteList.add(oldObj); + } + } + return asList(createList, updateList, deleteList); + } + + public static boolean containsAny(Collection source, Collection candidates) { + return org.springframework.util.CollectionUtils.containsAny(source, candidates); + } + + public static T getFirst(List from) { + return !CollectionUtil.isEmpty(from) ? from.get(0) : null; + } + + public static T findFirst(Collection from, Predicate predicate) { + return findFirst(from, predicate, Function.identity()); + } + + public static U findFirst(Collection from, Predicate predicate, Function func) { + if (CollUtil.isEmpty(from)) { + return null; + } + return from.stream().filter(predicate).findFirst().map(func).orElse(null); + } + + public static > V getMaxValue(Collection from, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return null; + } + assert !from.isEmpty(); // 断言,避免告警 + T t = from.stream().max(Comparator.comparing(valueFunc)).get(); + return valueFunc.apply(t); + } + + public static > V getMinValue(List from, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return null; + } + assert from.size() > 0; // 断言,避免告警 + T t = from.stream().min(Comparator.comparing(valueFunc)).get(); + return valueFunc.apply(t); + } + + public static > V getSumValue(List from, Function valueFunc, + BinaryOperator accumulator) { + return getSumValue(from, valueFunc, accumulator, null); + } + + public static > V getSumValue(Collection from, Function valueFunc, + BinaryOperator accumulator, V defaultValue) { + if (CollUtil.isEmpty(from)) { + return defaultValue; + } + assert !from.isEmpty(); // 断言,避免告警 + return from.stream().map(valueFunc).filter(Objects::nonNull).reduce(accumulator).orElse(defaultValue); + } + + public static void addIfNotNull(Collection coll, T item) { + if (item == null) { + return; + } + coll.add(item); + } + + public static Collection singleton(T obj) { + return obj == null ? Collections.emptyList() : Collections.singleton(obj); + } + + public static List newArrayList(List> list) { + return list.stream().flatMap(Collection::stream).collect(Collectors.toList()); + } + +} \ No newline at end of file diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/collection/MapUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/collection/MapUtils.java new file mode 100644 index 0000000..9808dcc --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/collection/MapUtils.java @@ -0,0 +1,68 @@ +package com.win.framework.common.util.collection; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjUtil; +import com.win.framework.common.core.KeyValue; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +/** + * Map 工具类 + * + * @author 芋道源码 + */ +public class MapUtils { + + /** + * 从哈希表表中,获得 keys 对应的所有 value 数组 + * + * @param multimap 哈希表 + * @param keys keys + * @return value 数组 + */ + public static List getList(Multimap multimap, Collection keys) { + List result = new ArrayList<>(); + keys.forEach(k -> { + Collection values = multimap.get(k); + if (CollectionUtil.isEmpty(values)) { + return; + } + result.addAll(values); + }); + return result; + } + + /** + * 从哈希表查找到 key 对应的 value,然后进一步处理 + * key 为 null 时, 不处理 + * 注意,如果查找到的 value 为 null 时,不进行处理 + * + * @param map 哈希表 + * @param key key + * @param consumer 进一步处理的逻辑 + */ + public static void findAndThen(Map map, K key, Consumer consumer) { + if (ObjUtil.isNull(key) || CollUtil.isEmpty(map)) { + return; + } + V value = map.get(key); + if (value == null) { + return; + } + consumer.accept(value); + } + + public static Map convertMap(List> keyValues) { + Map map = Maps.newLinkedHashMapWithExpectedSize(keyValues.size()); + keyValues.forEach(keyValue -> map.put(keyValue.getKey(), keyValue.getValue())); + return map; + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/collection/SetUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/collection/SetUtils.java new file mode 100644 index 0000000..1f3dceb --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/collection/SetUtils.java @@ -0,0 +1,19 @@ +package com.win.framework.common.util.collection; + +import cn.hutool.core.collection.CollUtil; + +import java.util.Set; + +/** + * Set 工具类 + * + * @author 芋道源码 + */ +public class SetUtils { + + @SafeVarargs + public static Set asSet(T... objs) { + return CollUtil.newHashSet(objs); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/date/DateUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/date/DateUtils.java new file mode 100644 index 0000000..e0a22b2 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/date/DateUtils.java @@ -0,0 +1,149 @@ +package com.win.framework.common.util.date; + +import cn.hutool.core.date.LocalDateTimeUtil; + +import java.time.*; +import java.util.Calendar; +import java.util.Date; + +/** + * 时间工具类 + * + * @author 芋道源码 + */ +public class DateUtils { + + /** + * 时区 - 默认 + */ + public static final String TIME_ZONE_DEFAULT = "GMT+8"; + + /** + * 秒转换成毫秒 + */ + public static final long SECOND_MILLIS = 1000; + + public static final String FORMAT_YEAR_MONTH_DAY = "yyyy-MM-dd"; + + public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss"; + + /** + * 将 LocalDateTime 转换成 Date + * + * @param date LocalDateTime + * @return LocalDateTime + */ + public static Date of(LocalDateTime date) { + if (date == null) { + return null; + } + // 将此日期时间与时区相结合以创建 ZonedDateTime + ZonedDateTime zonedDateTime = date.atZone(ZoneId.systemDefault()); + // 本地时间线 LocalDateTime 到即时时间线 Instant 时间戳 + Instant instant = zonedDateTime.toInstant(); + // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间 + return Date.from(instant); + } + + /** + * 将 Date 转换成 LocalDateTime + * + * @param date Date + * @return LocalDateTime + */ + public static LocalDateTime of(Date date) { + if (date == null) { + return null; + } + // 转为时间戳 + Instant instant = date.toInstant(); + // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间 + return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); + } + + public static Date addTime(Duration duration) { + return new Date(System.currentTimeMillis() + duration.toMillis()); + } + + public static boolean isExpired(LocalDateTime time) { + LocalDateTime now = LocalDateTime.now(); + return now.isAfter(time); + } + + /** + * 创建指定时间 + * + * @param year 年 + * @param mouth 月 + * @param day 日 + * @return 指定时间 + */ + public static Date buildTime(int year, int mouth, int day) { + return buildTime(year, mouth, day, 0, 0, 0); + } + + /** + * 创建指定时间 + * + * @param year 年 + * @param mouth 月 + * @param day 日 + * @param hour 小时 + * @param minute 分钟 + * @param second 秒 + * @return 指定时间 + */ + public static Date buildTime(int year, int mouth, int day, + int hour, int minute, int second) { + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.YEAR, year); + calendar.set(Calendar.MONTH, mouth - 1); + calendar.set(Calendar.DAY_OF_MONTH, day); + calendar.set(Calendar.HOUR_OF_DAY, hour); + calendar.set(Calendar.MINUTE, minute); + calendar.set(Calendar.SECOND, second); + calendar.set(Calendar.MILLISECOND, 0); // 一般情况下,都是 0 毫秒 + return calendar.getTime(); + } + + public static Date max(Date a, Date b) { + if (a == null) { + return b; + } + if (b == null) { + return a; + } + return a.compareTo(b) > 0 ? a : b; + } + + public static LocalDateTime max(LocalDateTime a, LocalDateTime b) { + if (a == null) { + return b; + } + if (b == null) { + return a; + } + return a.isAfter(b) ? a : b; + } + + /** + * 是否今天 + * + * @param date 日期 + * @return 是否 + */ + public static boolean isToday(LocalDateTime date) { + return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now()); + } + + /** + * 是否昨天 + * + * @param date 日期 + * @return 是否 + */ + public static boolean isYesterday(LocalDateTime date) { + return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now().minusDays(1)); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/date/LocalDateTimeUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/date/LocalDateTimeUtils.java new file mode 100644 index 0000000..51b065c --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/date/LocalDateTimeUtils.java @@ -0,0 +1,309 @@ +package com.win.framework.common.util.date; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.enums.DateIntervalEnum; + +import java.time.*; +import java.time.format.DateTimeParseException; +import java.time.temporal.ChronoUnit; +import java.time.temporal.TemporalAdjusters; +import java.util.ArrayList; +import java.util.List; + +/** + * 时间工具类,用于 {@link java.time.LocalDateTime} + * + * @author 芋道源码 + */ +public class LocalDateTimeUtils { + + /** + * 空的 LocalDateTime 对象,主要用于 DB 唯一索引的默认值 + */ + public static LocalDateTime EMPTY = buildTime(1970, 1, 1); + + /** + * 解析时间 + * + * 相比 {@link LocalDateTimeUtil#parse(CharSequence)} 方法来说,会尽量去解析,直到成功 + * + * @param time 时间 + * @return 时间字符串 + */ + public static LocalDateTime parse(String time) { + try { + return LocalDateTimeUtil.parse(time, DatePattern.NORM_DATE_PATTERN); + } catch (DateTimeParseException e) { + return LocalDateTimeUtil.parse(time); + } + } + + public static LocalDateTime addTime(Duration duration) { + return LocalDateTime.now().plus(duration); + } + + public static LocalDateTime minusTime(Duration duration) { + return LocalDateTime.now().minus(duration); + } + + public static boolean beforeNow(LocalDateTime date) { + return date.isBefore(LocalDateTime.now()); + } + + public static boolean afterNow(LocalDateTime date) { + return date.isAfter(LocalDateTime.now()); + } + + /** + * 创建指定时间 + * + * @param year 年 + * @param mouth 月 + * @param day 日 + * @return 指定时间 + */ + public static LocalDateTime buildTime(int year, int mouth, int day) { + return LocalDateTime.of(year, mouth, day, 0, 0, 0); + } + + public static LocalDateTime[] buildBetweenTime(int year1, int mouth1, int day1, + int year2, int mouth2, int day2) { + return new LocalDateTime[]{buildTime(year1, mouth1, day1), buildTime(year2, mouth2, day2)}; + } + + /** + * 判指定断时间,是否在该时间范围内 + * + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param time 指定时间 + * @return 是否 + */ + public static boolean isBetween(LocalDateTime startTime, LocalDateTime endTime, String time) { + if (startTime == null || endTime == null || time == null) { + return false; + } + return LocalDateTimeUtil.isIn(parse(time), startTime, endTime); + } + + /** + * 判断当前时间是否在该时间范围内 + * + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return 是否 + */ + public static boolean isBetween(LocalDateTime startTime, LocalDateTime endTime) { + if (startTime == null || endTime == null) { + return false; + } + return LocalDateTimeUtil.isIn(LocalDateTime.now(), startTime, endTime); + } + + /** + * 判断当前时间是否在该时间范围内 + * + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return 是否 + */ + public static boolean isBetween(String startTime, String endTime) { + if (startTime == null || endTime == null) { + return false; + } + LocalDate nowDate = LocalDate.now(); + return LocalDateTimeUtil.isIn(LocalDateTime.now(), + LocalDateTime.of(nowDate, LocalTime.parse(startTime)), + LocalDateTime.of(nowDate, LocalTime.parse(endTime))); + } + + /** + * 判断时间段是否重叠 + * + * @param startTime1 开始 time1 + * @param endTime1 结束 time1 + * @param startTime2 开始 time2 + * @param endTime2 结束 time2 + * @return 重叠:true 不重叠:false + */ + public static boolean isOverlap(LocalTime startTime1, LocalTime endTime1, LocalTime startTime2, LocalTime endTime2) { + LocalDate nowDate = LocalDate.now(); + return LocalDateTimeUtil.isOverlap(LocalDateTime.of(nowDate, startTime1), LocalDateTime.of(nowDate, endTime1), + LocalDateTime.of(nowDate, startTime2), LocalDateTime.of(nowDate, endTime2)); + } + + /** + * 获取指定日期所在的月份的开始时间 + * 例如:2023-09-30 00:00:00,000 + * + * @param date 日期 + * @return 月份的开始时间 + */ + public static LocalDateTime beginOfMonth(LocalDateTime date) { + return date.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN); + } + + /** + * 获取指定日期所在的月份的最后时间 + * 例如:2023-09-30 23:59:59,999 + * + * @param date 日期 + * @return 月份的结束时间 + */ + public static LocalDateTime endOfMonth(LocalDateTime date) { + return date.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX); + } + + /** + * 获得指定日期所在季度 + * + * @param date 日期 + * @return 所在季度 + */ + public static int getQuarterOfYear(LocalDateTime date) { + return (date.getMonthValue() - 1) / 3 + 1; + } + + /** + * 获取指定日期到现在过了几天,如果指定日期在当前日期之后,获取结果为负 + * + * @param dateTime 日期 + * @return 相差天数 + */ + public static Long between(LocalDateTime dateTime) { + return LocalDateTimeUtil.between(dateTime, LocalDateTime.now(), ChronoUnit.DAYS); + } + + /** + * 获取今天的开始时间 + * + * @return 今天 + */ + public static LocalDateTime getToday() { + return LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); + } + + /** + * 获取昨天的开始时间 + * + * @return 昨天 + */ + public static LocalDateTime getYesterday() { + return LocalDateTimeUtil.beginOfDay(LocalDateTime.now().minusDays(1)); + } + + /** + * 获取本月的开始时间 + * + * @return 本月 + */ + public static LocalDateTime getMonth() { + return beginOfMonth(LocalDateTime.now()); + } + + /** + * 获取本年的开始时间 + * + * @return 本年 + */ + public static LocalDateTime getYear() { + return LocalDateTime.now().with(TemporalAdjusters.firstDayOfYear()).with(LocalTime.MIN); + } + + public static List getDateRangeList(LocalDateTime startTime, + LocalDateTime endTime, + Integer interval) { + // 1.1 找到枚举 + DateIntervalEnum intervalEnum = DateIntervalEnum.valueOf(interval); + Assert.notNull(intervalEnum, "interval({}} 找不到对应的枚举", interval); + // 1.2 将时间对齐 + startTime = LocalDateTimeUtil.beginOfDay(startTime); + endTime = LocalDateTimeUtil.endOfDay(endTime); + + // 2. 循环,生成时间范围 + List timeRanges = new ArrayList<>(); + switch (intervalEnum) { + case DAY: + while (startTime.isBefore(endTime)) { + timeRanges.add(new LocalDateTime[]{startTime, startTime.plusDays(1).minusNanos(1)}); + startTime = startTime.plusDays(1); + } + break; + case WEEK: + while (startTime.isBefore(endTime)) { + LocalDateTime endOfWeek = startTime.with(DayOfWeek.SUNDAY).plusDays(1).minusNanos(1); + timeRanges.add(new LocalDateTime[]{startTime, endOfWeek}); + startTime = endOfWeek.plusNanos(1); + } + break; + case MONTH: + while (startTime.isBefore(endTime)) { + LocalDateTime endOfMonth = startTime.with(TemporalAdjusters.lastDayOfMonth()).plusDays(1).minusNanos(1); + timeRanges.add(new LocalDateTime[]{startTime, endOfMonth}); + startTime = endOfMonth.plusNanos(1); + } + break; + case QUARTER: + while (startTime.isBefore(endTime)) { + int quarterOfYear = getQuarterOfYear(startTime); + LocalDateTime quarterEnd = quarterOfYear == 4 + ? startTime.with(TemporalAdjusters.lastDayOfYear()).plusDays(1).minusNanos(1) + : startTime.withMonth(quarterOfYear * 3 + 1).withDayOfMonth(1).minusNanos(1); + timeRanges.add(new LocalDateTime[]{startTime, quarterEnd}); + startTime = quarterEnd.plusNanos(1); + } + break; + case YEAR: + while (startTime.isBefore(endTime)) { + LocalDateTime endOfYear = startTime.with(TemporalAdjusters.lastDayOfYear()).plusDays(1).minusNanos(1); + timeRanges.add(new LocalDateTime[]{startTime, endOfYear}); + startTime = endOfYear.plusNanos(1); + } + break; + default: + throw new IllegalArgumentException("Invalid interval: " + interval); + } + // 3. 兜底,最后一个时间,需要保持在 endTime 之前 + LocalDateTime[] lastTimeRange = CollUtil.getLast(timeRanges); + if (lastTimeRange != null) { + lastTimeRange[1] = endTime; + } + return timeRanges; + } + + /** + * 格式化时间范围 + * + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param interval 时间间隔 + * @return 时间范围 + */ + public static String formatDateRange(LocalDateTime startTime, LocalDateTime endTime, Integer interval) { + // 1. 找到枚举 + DateIntervalEnum intervalEnum = DateIntervalEnum.valueOf(interval); + Assert.notNull(intervalEnum, "interval({}} 找不到对应的枚举", interval); + + // 2. 循环,生成时间范围 + switch (intervalEnum) { + case DAY: + return LocalDateTimeUtil.format(startTime, DatePattern.NORM_DATE_PATTERN); + case WEEK: + return LocalDateTimeUtil.format(startTime, DatePattern.NORM_DATE_PATTERN) + + StrUtil.format("(第 {} 周)", LocalDateTimeUtil.weekOfYear(startTime)); + case MONTH: + return LocalDateTimeUtil.format(startTime, DatePattern.NORM_MONTH_PATTERN); + case QUARTER: + return StrUtil.format("{}-Q{}", startTime.getYear(), getQuarterOfYear(startTime)); + case YEAR: + return LocalDateTimeUtil.format(startTime, DatePattern.NORM_YEAR_PATTERN); + default: + throw new IllegalArgumentException("Invalid interval: " + interval); + } + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/http/HttpUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/http/HttpUtils.java new file mode 100644 index 0000000..8718565 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/http/HttpUtils.java @@ -0,0 +1,126 @@ +package com.win.framework.common.util.http; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.map.TableMap; +import cn.hutool.core.net.url.UrlBuilder; +import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.StrUtil; +import org.springframework.util.StringUtils; +import org.springframework.web.util.UriComponents; +import org.springframework.web.util.UriComponentsBuilder; + +import jakarta.servlet.http.HttpServletRequest; +import java.net.URI; +import java.nio.charset.Charset; +import java.util.Map; + +/** + * HTTP 工具类 + * + * @author 芋道源码 + */ +public class HttpUtils { + + @SuppressWarnings("unchecked") + public static String replaceUrlQuery(String url, String key, String value) { + UrlBuilder builder = UrlBuilder.of(url, Charset.defaultCharset()); + // 先移除 + TableMap query = (TableMap) + ReflectUtil.getFieldValue(builder.getQuery(), "query"); + query.remove(key); + // 后添加 + builder.addQuery(key, value); + return builder.build(); + } + + private String append(String base, Map query, boolean fragment) { + return append(base, query, null, fragment); + } + + /** + * 拼接 URL + * + * copy from Spring Security OAuth2 的 AuthorizationEndpoint 类的 append 方法 + * + * @param base 基础 URL + * @param query 查询参数 + * @param keys query 的 key,对应的原本的 key 的映射。例如说 query 里有个 key 是 xx,实际它的 key 是 extra_xx,则通过 keys 里添加这个映射 + * @param fragment URL 的 fragment,即拼接到 # 中 + * @return 拼接后的 URL + */ + public static String append(String base, Map query, Map keys, boolean fragment) { + UriComponentsBuilder template = UriComponentsBuilder.newInstance(); + UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(base); + URI redirectUri; + try { + // assume it's encoded to start with (if it came in over the wire) + redirectUri = builder.build(true).toUri(); + } catch (Exception e) { + // ... but allow client registrations to contain hard-coded non-encoded values + redirectUri = builder.build().toUri(); + builder = UriComponentsBuilder.fromUri(redirectUri); + } + template.scheme(redirectUri.getScheme()).port(redirectUri.getPort()).host(redirectUri.getHost()) + .userInfo(redirectUri.getUserInfo()).path(redirectUri.getPath()); + + if (fragment) { + StringBuilder values = new StringBuilder(); + if (redirectUri.getFragment() != null) { + String append = redirectUri.getFragment(); + values.append(append); + } + for (String key : query.keySet()) { + if (values.length() > 0) { + values.append("&"); + } + String name = key; + if (keys != null && keys.containsKey(key)) { + name = keys.get(key); + } + values.append(name).append("={").append(key).append("}"); + } + if (values.length() > 0) { + template.fragment(values.toString()); + } + UriComponents encoded = template.build().expand(query).encode(); + builder.fragment(encoded.getFragment()); + } else { + for (String key : query.keySet()) { + String name = key; + if (keys != null && keys.containsKey(key)) { + name = keys.get(key); + } + template.queryParam(name, "{" + key + "}"); + } + template.fragment(redirectUri.getFragment()); + UriComponents encoded = template.build().expand(query).encode(); + builder.query(encoded.getQuery()); + } + return builder.build().toUriString(); + } + + public static String[] obtainBasicAuthorization(HttpServletRequest request) { + String clientId; + String clientSecret; + // 先从 Header 中获取 + String authorization = request.getHeader("Authorization"); + authorization = StrUtil.subAfter(authorization, "Basic ", true); + if (StringUtils.hasText(authorization)) { + authorization = Base64.decodeStr(authorization); + clientId = StrUtil.subBefore(authorization, ":", false); + clientSecret = StrUtil.subAfter(authorization, ":", false); + // 再从 Param 中获取 + } else { + clientId = request.getParameter("client_id"); + clientSecret = request.getParameter("client_secret"); + } + + // 如果两者非空,则返回 + if (StrUtil.isNotEmpty(clientId) && StrUtil.isNotEmpty(clientSecret)) { + return new String[]{clientId, clientSecret}; + } + return null; + } + + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/io/FileUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/io/FileUtils.java new file mode 100644 index 0000000..c4110d9 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/io/FileUtils.java @@ -0,0 +1,84 @@ +package com.win.framework.common.util.io; + +import cn.hutool.core.io.FileTypeUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileNameUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.digest.DigestUtil; +import lombok.SneakyThrows; + +import java.io.ByteArrayInputStream; +import java.io.File; + +/** + * 文件工具类 + * + * @author 芋道源码 + */ +public class FileUtils { + + /** + * 创建临时文件 + * 该文件会在 JVM 退出时,进行删除 + * + * @param data 文件内容 + * @return 文件 + */ + @SneakyThrows + public static File createTempFile(String data) { + File file = createTempFile(); + // 写入内容 + FileUtil.writeUtf8String(data, file); + return file; + } + + /** + * 创建临时文件 + * 该文件会在 JVM 退出时,进行删除 + * + * @param data 文件内容 + * @return 文件 + */ + @SneakyThrows + public static File createTempFile(byte[] data) { + File file = createTempFile(); + // 写入内容 + FileUtil.writeBytes(data, file); + return file; + } + + /** + * 创建临时文件,无内容 + * 该文件会在 JVM 退出时,进行删除 + * + * @return 文件 + */ + @SneakyThrows + public static File createTempFile() { + // 创建文件,通过 UUID 保证唯一 + File file = File.createTempFile(IdUtil.simpleUUID(), null); + // 标记 JVM 退出时,自动删除 + file.deleteOnExit(); + return file; + } + + /** + * 生成文件路径 + * + * @param content 文件内容 + * @param originalName 原始文件名 + * @return path,唯一不可重复 + */ + public static String generatePath(byte[] content, String originalName) { + String sha256Hex = DigestUtil.sha256Hex(content); + // 情况一:如果存在 name,则优先使用 name 的后缀 + if (StrUtil.isNotBlank(originalName)) { + String extName = FileNameUtil.extName(originalName); + return StrUtil.isBlank(extName) ? sha256Hex : sha256Hex + "." + extName; + } + // 情况二:基于 content 计算 + return sha256Hex + '.' + FileTypeUtil.getType(new ByteArrayInputStream(content)); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/io/IoUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/io/IoUtils.java new file mode 100644 index 0000000..bb8a5cd --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/io/IoUtils.java @@ -0,0 +1,28 @@ +package com.win.framework.common.util.io; + +import cn.hutool.core.io.IORuntimeException; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.StrUtil; + +import java.io.InputStream; + +/** + * IO 工具类,用于 {@link cn.hutool.core.io.IoUtil} 缺失的方法 + * + * @author 芋道源码 + */ +public class IoUtils { + + /** + * 从流中读取 UTF8 编码的内容 + * + * @param in 输入流 + * @param isClose 是否关闭 + * @return 内容 + * @throws IORuntimeException IO 异常 + */ + public static String readUtf8(InputStream in, boolean isClose) throws IORuntimeException { + return StrUtil.utf8Str(IoUtil.read(in, isClose)); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/json/JsonUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/json/JsonUtils.java new file mode 100644 index 0000000..829f64e --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/json/JsonUtils.java @@ -0,0 +1,202 @@ +package com.win.framework.common.util.json; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +/** + * JSON 工具类 + * + * @author 芋道源码 + */ +@Slf4j +public class JsonUtils { + + private static ObjectMapper objectMapper = new ObjectMapper(); + + static { + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 忽略 null 值 + objectMapper.registerModules(new JavaTimeModule()); // 解决 LocalDateTime 的序列化 + } + + /** + * 初始化 objectMapper 属性 + *

    + * 通过这样的方式,使用 Spring 创建的 ObjectMapper Bean + * + * @param objectMapper ObjectMapper 对象 + */ + public static void init(ObjectMapper objectMapper) { + JsonUtils.objectMapper = objectMapper; + } + + @SneakyThrows + public static String toJsonString(Object object) { + return objectMapper.writeValueAsString(object); + } + + @SneakyThrows + public static byte[] toJsonByte(Object object) { + return objectMapper.writeValueAsBytes(object); + } + + @SneakyThrows + public static String toJsonPrettyString(Object object) { + return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object); + } + + public static T parseObject(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return null; + } + try { + return objectMapper.readValue(text, clazz); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static T parseObject(String text, String path, Class clazz) { + if (StrUtil.isEmpty(text)) { + return null; + } + try { + JsonNode treeNode = objectMapper.readTree(text); + JsonNode pathNode = treeNode.path(path); + return objectMapper.readValue(pathNode.toString(), clazz); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static T parseObject(String text, Type type) { + if (StrUtil.isEmpty(text)) { + return null; + } + try { + return objectMapper.readValue(text, objectMapper.getTypeFactory().constructType(type)); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + /** + * 将字符串解析成指定类型的对象 + * 使用 {@link #parseObject(String, Class)} 时,在@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) 的场景下, + * 如果 text 没有 class 属性,则会报错。此时,使用这个方法,可以解决。 + * + * @param text 字符串 + * @param clazz 类型 + * @return 对象 + */ + public static T parseObject2(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return null; + } + return JSONUtil.toBean(text, clazz); + } + + public static T parseObject(byte[] bytes, Class clazz) { + if (ArrayUtil.isEmpty(bytes)) { + return null; + } + try { + return objectMapper.readValue(bytes, clazz); + } catch (IOException e) { + log.error("json parse err,json:{}", bytes, e); + throw new RuntimeException(e); + } + } + + public static T parseObject(String text, TypeReference typeReference) { + try { + return objectMapper.readValue(text, typeReference); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + /** + * 解析 JSON 字符串成指定类型的对象,如果解析失败,则返回 null + * + * @param text 字符串 + * @param typeReference 类型引用 + * @return 指定类型的对象 + */ + public static T parseObjectQuietly(String text, TypeReference typeReference) { + try { + return objectMapper.readValue(text, typeReference); + } catch (IOException e) { + return null; + } + } + + public static List parseArray(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return new ArrayList<>(); + } + try { + return objectMapper.readValue(text, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz)); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static List parseArray(String text, String path, Class clazz) { + if (StrUtil.isEmpty(text)) { + return null; + } + try { + JsonNode treeNode = objectMapper.readTree(text); + JsonNode pathNode = treeNode.path(path); + return objectMapper.readValue(pathNode.toString(), objectMapper.getTypeFactory().constructCollectionType(List.class, clazz)); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static JsonNode parseTree(String text) { + try { + return objectMapper.readTree(text); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static JsonNode parseTree(byte[] text) { + try { + return objectMapper.readTree(text); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static boolean isJson(String text) { + return JSONUtil.isTypeJSON(text); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/monitor/TracerUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/monitor/TracerUtils.java new file mode 100644 index 0000000..62d1d72 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/monitor/TracerUtils.java @@ -0,0 +1,30 @@ +package com.win.framework.common.util.monitor; + +import org.apache.skywalking.apm.toolkit.trace.TraceContext; + +/** + * 链路追踪工具类 + * + * 考虑到每个 starter 都需要用到该工具类,所以放到 common 模块下的 util 包下 + * + * @author 芋道源码 + */ +public class TracerUtils { + + /** + * 私有化构造方法 + */ + private TracerUtils() { + } + + /** + * 获得链路追踪编号,直接返回 SkyWalking 的 TraceId。 + * 如果不存在的话为空字符串!!! + * + * @return 链路追踪编号 + */ + public static String getTraceId() { + return TraceContext.traceId(); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/number/MoneyUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/number/MoneyUtils.java new file mode 100644 index 0000000..1969ba6 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/number/MoneyUtils.java @@ -0,0 +1,131 @@ +package com.win.framework.common.util.number; + +import cn.hutool.core.math.Money; +import cn.hutool.core.util.NumberUtil; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +/** + * 金额工具类 + * + * @author 芋道源码 + */ +public class MoneyUtils { + + /** + * 金额的小数位数 + */ + private static final int PRICE_SCALE = 2; + + /** + * 百分比对应的 BigDecimal 对象 + */ + public static final BigDecimal PERCENT_100 = BigDecimal.valueOf(100); + + /** + * 计算百分比金额,四舍五入 + * + * @param price 金额 + * @param rate 百分比,例如说 56.77% 则传入 56.77 + * @return 百分比金额 + */ + public static Integer calculateRatePrice(Integer price, Double rate) { + return calculateRatePrice(price, rate, 0, RoundingMode.HALF_UP).intValue(); + } + + /** + * 计算百分比金额,向下传入 + * + * @param price 金额 + * @param rate 百分比,例如说 56.77% 则传入 56.77 + * @return 百分比金额 + */ + public static Integer calculateRatePriceFloor(Integer price, Double rate) { + return calculateRatePrice(price, rate, 0, RoundingMode.FLOOR).intValue(); + } + + /** + * 计算百分比金额 + * + * @param price 金额(单位分) + * @param count 数量 + * @param percent 折扣(单位分),列如 60.2%,则传入 6020 + * @return 商品总价 + */ + public static Integer calculator(Integer price, Integer count, Integer percent) { + price = price * count; + if (percent == null) { + return price; + } + return MoneyUtils.calculateRatePriceFloor(price, (double) (percent / 100)); + } + + /** + * 计算百分比金额 + * + * @param price 金额 + * @param rate 百分比,例如说 56.77% 则传入 56.77 + * @param scale 保留小数位数 + * @param roundingMode 舍入模式 + */ + public static BigDecimal calculateRatePrice(Number price, Number rate, int scale, RoundingMode roundingMode) { + return NumberUtil.toBigDecimal(price).multiply(NumberUtil.toBigDecimal(rate)) // 乘以 + .divide(BigDecimal.valueOf(100), scale, roundingMode); // 除以 100 + } + + /** + * 分转元 + * + * @param fen 分 + * @return 元 + */ + public static BigDecimal fenToYuan(int fen) { + return new Money(0, fen).getAmount(); + } + + /** + * 分转元(字符串) + * + * 例如说 fen 为 1 时,则结果为 0.01 + * + * @param fen 分 + * @return 元 + */ + public static String fenToYuanStr(int fen) { + return new Money(0, fen).toString(); + } + + /** + * 金额相乘,默认进行四舍五入 + * + * 位数:{@link #PRICE_SCALE} + * + * @param price 金额 + * @param count 数量 + * @return 金额相乘结果 + */ + public static BigDecimal priceMultiply(BigDecimal price, BigDecimal count) { + if (price == null || count == null) { + return null; + } + return price.multiply(count).setScale(PRICE_SCALE, RoundingMode.HALF_UP); + } + + /** + * 金额相乘(百分比),默认进行四舍五入 + * + * 位数:{@link #PRICE_SCALE} + * + * @param price 金额 + * @param percent 百分比 + * @return 金额相乘结果 + */ + public static BigDecimal priceMultiplyPercent(BigDecimal price, BigDecimal percent) { + if (price == null || percent == null) { + return null; + } + return price.multiply(percent).divide(PERCENT_100, PRICE_SCALE, RoundingMode.HALF_UP); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/number/NumberUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/number/NumberUtils.java new file mode 100644 index 0000000..b806339 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/number/NumberUtils.java @@ -0,0 +1,64 @@ +package com.win.framework.common.util.number; + +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; + +import java.math.BigDecimal; + +/** + * 数字的工具类,补全 {@link cn.hutool.core.util.NumberUtil} 的功能 + * + * @author 芋道源码 + */ +public class NumberUtils { + + public static Long parseLong(String str) { + return StrUtil.isNotEmpty(str) ? Long.valueOf(str) : null; + } + + public static Integer parseInt(String str) { + return StrUtil.isNotEmpty(str) ? Integer.valueOf(str) : null; + } + + /** + * 通过经纬度获取地球上两点之间的距离 + * + * 参考 <DistanceUtil> 实现,目前它已经被 hutool 删除 + * + * @param lat1 经度1 + * @param lng1 纬度1 + * @param lat2 经度2 + * @param lng2 纬度2 + * @return 距离,单位:千米 + */ + public static double getDistance(double lat1, double lng1, double lat2, double lng2) { + double radLat1 = lat1 * Math.PI / 180.0; + double radLat2 = lat2 * Math.PI / 180.0; + double a = radLat1 - radLat2; + double b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0; + double distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + + Math.cos(radLat1) * Math.cos(radLat2) + * Math.pow(Math.sin(b / 2), 2))); + distance = distance * 6378.137; + distance = Math.round(distance * 10000d) / 10000d; + return distance; + } + + /** + * 提供精确的乘法运算 + * + * 和 hutool {@link NumberUtil#mul(BigDecimal...)} 的差别是,如果存在 null,则返回 null + * + * @param values 多个被乘值 + * @return 积 + */ + public static BigDecimal mul(BigDecimal... values) { + for (BigDecimal value : values) { + if (value == null) { + return null; + } + } + return NumberUtil.mul(values); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/object/BeanUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/object/BeanUtils.java new file mode 100644 index 0000000..1ce0121 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/object/BeanUtils.java @@ -0,0 +1,62 @@ +package com.win.framework.common.util.object; + +import cn.hutool.core.bean.BeanUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.CollectionUtils; + +import java.util.List; +import java.util.function.Consumer; + +/** + * Bean 工具类 + * + * 1. 默认使用 {@link cn.hutool.core.bean.BeanUtil} 作为实现类,虽然不同 bean 工具的性能有差别,但是对绝大多数同学的项目,不用在意这点性能 + * 2. 针对复杂的对象转换,可以搜参考 AuthConvert 实现,通过 mapstruct + default 配合实现 + * + * @author 芋道源码 + */ +public class BeanUtils { + + public static T toBean(Object source, Class targetClass) { + return BeanUtil.toBean(source, targetClass); + } + + public static T toBean(Object source, Class targetClass, Consumer peek) { + T target = toBean(source, targetClass); + if (target != null) { + peek.accept(target); + } + return target; + } + + public static List toBean(List source, Class targetType) { + if (source == null) { + return null; + } + return CollectionUtils.convertList(source, s -> toBean(s, targetType)); + } + + public static List toBean(List source, Class targetType, Consumer peek) { + List list = toBean(source, targetType); + if (list != null) { + list.forEach(peek); + } + return list; + } + + public static PageResult toBean(PageResult source, Class targetType) { + return toBean(source, targetType, null); + } + + public static PageResult toBean(PageResult source, Class targetType, Consumer peek) { + if (source == null) { + return null; + } + List list = toBean(source.getList(), targetType); + if (peek != null) { + list.forEach(peek); + } + return new PageResult<>(list, source.getTotal()); + } + +} \ No newline at end of file diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/object/ObjectUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/object/ObjectUtils.java new file mode 100644 index 0000000..730e62a --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/object/ObjectUtils.java @@ -0,0 +1,63 @@ +package com.win.framework.common.util.object; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReflectUtil; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.function.Consumer; + +/** + * Object 工具类 + * + * @author 芋道源码 + */ +public class ObjectUtils { + + /** + * 复制对象,并忽略 Id 编号 + * + * @param object 被复制对象 + * @param consumer 消费者,可以二次编辑被复制对象 + * @return 复制后的对象 + */ + public static T cloneIgnoreId(T object, Consumer consumer) { + T result = ObjectUtil.clone(object); + // 忽略 id 编号 + Field field = ReflectUtil.getField(object.getClass(), "id"); + if (field != null) { + ReflectUtil.setFieldValue(result, field, null); + } + // 二次编辑 + if (result != null) { + consumer.accept(result); + } + return result; + } + + public static > T max(T obj1, T obj2) { + if (obj1 == null) { + return obj2; + } + if (obj2 == null) { + return obj1; + } + return obj1.compareTo(obj2) > 0 ? obj1 : obj2; + } + + @SafeVarargs + public static T defaultIfNull(T... array) { + for (T item : array) { + if (item != null) { + return item; + } + } + return null; + } + + @SafeVarargs + public static boolean equalsAny(T obj, T... array) { + return Arrays.asList(array).contains(obj); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/object/PageUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/object/PageUtils.java new file mode 100644 index 0000000..835c522 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/object/PageUtils.java @@ -0,0 +1,67 @@ +package com.win.framework.common.util.object; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.func.Func1; +import cn.hutool.core.lang.func.LambdaUtil; +import cn.hutool.core.util.ArrayUtil; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.SortablePageParam; +import com.win.framework.common.pojo.SortingField; +import org.springframework.util.Assert; + +import static java.util.Collections.singletonList; + +/** + * {@link com.win.framework.common.pojo.PageParam} 工具类 + * + * @author 芋道源码 + */ +public class PageUtils { + + private static final Object[] ORDER_TYPES = new String[]{SortingField.ORDER_ASC, SortingField.ORDER_DESC}; + + public static int getStart(PageParam pageParam) { + return (pageParam.getPageNo() - 1) * pageParam.getPageSize(); + } + + /** + * 构建排序字段(默认倒序) + * + * @param func 排序字段的 Lambda 表达式 + * @param 排序字段所属的类型 + * @return 排序字段 + */ + public static SortingField buildSortingField(Func1 func) { + return buildSortingField(func, SortingField.ORDER_DESC); + } + + /** + * 构建排序字段 + * + * @param func 排序字段的 Lambda 表达式 + * @param order 排序类型 {@link SortingField#ORDER_ASC} {@link SortingField#ORDER_DESC} + * @param 排序字段所属的类型 + * @return 排序字段 + */ + public static SortingField buildSortingField(Func1 func, String order) { + Assert.isTrue(ArrayUtil.contains(ORDER_TYPES, order), String.format("字段的排序类型只能是 %s/%s", ORDER_TYPES)); + + String fieldName = LambdaUtil.getFieldName(func); + return new SortingField(fieldName, order); + } + + /** + * 构建默认的排序字段 + * 如果排序字段为空,则设置排序字段;否则忽略 + * + * @param sortablePageParam 排序分页查询参数 + * @param func 排序字段的 Lambda 表达式 + * @param 排序字段所属的类型 + */ + public static void buildDefaultSortingField(SortablePageParam sortablePageParam, Func1 func) { + if (sortablePageParam != null && CollUtil.isEmpty(sortablePageParam.getSortingFields())) { + sortablePageParam.setSortingFields(singletonList(buildSortingField(func))); + } + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/package-info.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/package-info.java new file mode 100644 index 0000000..f9b8af7 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/package-info.java @@ -0,0 +1,7 @@ +/** + * 对于工具类的选择,优先查找 Hutool 中有没对应的方法 + * 如果没有,则自己封装对应的工具类,以 Utils 结尾,用于区分 + * + * ps:如果担心 Hutool 存在坑的问题,可以阅读 Hutool 的实现源码,以确保可靠性。并且,可以补充相关的单元测试。 + */ +package com.win.framework.common.util; diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/servlet/ServletUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/servlet/ServletUtils.java new file mode 100644 index 0000000..d6c26a9 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/servlet/ServletUtils.java @@ -0,0 +1,101 @@ +package com.win.framework.common.util.servlet; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.servlet.JakartaServletUtil; +import com.win.framework.common.util.json.JsonUtils; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.http.MediaType; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.util.Map; + +/** + * 客户端工具类 + * + * @author 芋道源码 + */ +public class ServletUtils { + + /** + * 返回 JSON 字符串 + * + * @param response 响应 + * @param object 对象,会序列化成 JSON 字符串 + */ + @SuppressWarnings("deprecation") // 必须使用 APPLICATION_JSON_UTF8_VALUE,否则会乱码 + public static void writeJSON(HttpServletResponse response, Object object) { + String content = JsonUtils.toJsonString(object); + JakartaServletUtil.write(response, content, MediaType.APPLICATION_JSON_UTF8_VALUE); + } + + /** + * @param request 请求 + * @return ua + */ + public static String getUserAgent(HttpServletRequest request) { + String ua = request.getHeader("User-Agent"); + return ua != null ? ua : ""; + } + + /** + * 获得请求 + * + * @return HttpServletRequest + */ + public static HttpServletRequest getRequest() { + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + if (!(requestAttributes instanceof ServletRequestAttributes)) { + return null; + } + return ((ServletRequestAttributes) requestAttributes).getRequest(); + } + + public static String getUserAgent() { + HttpServletRequest request = getRequest(); + if (request == null) { + return null; + } + return getUserAgent(request); + } + + public static String getClientIP() { + HttpServletRequest request = getRequest(); + if (request == null) { + return null; + } + return JakartaServletUtil.getClientIP(request); + } + + public static boolean isJsonRequest(ServletRequest request) { + return StrUtil.startWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE); + } + + public static String getBody(HttpServletRequest request) { + // 只有在 json 请求在读取,因为只有 CacheRequestBodyFilter 才会进行缓存,支持重复读取 + if (isJsonRequest(request)) { + return JakartaServletUtil.getBody(request); + } + return null; + } + + public static byte[] getBodyBytes(HttpServletRequest request) { + // 只有在 json 请求在读取,因为只有 CacheRequestBodyFilter 才会进行缓存,支持重复读取 + if (isJsonRequest(request)) { + return JakartaServletUtil.getBodyBytes(request); + } + return null; + } + + public static String getClientIP(HttpServletRequest request) { + return JakartaServletUtil.getClientIP(request); + } + + public static Map getParamMap(HttpServletRequest request) { + return JakartaServletUtil.getParamMap(request); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/spring/SpringExpressionUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/spring/SpringExpressionUtils.java new file mode 100644 index 0000000..fbc88c9 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/spring/SpringExpressionUtils.java @@ -0,0 +1,89 @@ +package com.win.framework.common.util.spring; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ArrayUtil; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.core.ParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; + +import java.lang.reflect.Method; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +/** + * Spring EL 表达式的工具类 + * + * @author mashu + */ +public class SpringExpressionUtils { + + /** + * Spring EL 表达式解析器 + */ + private static final ExpressionParser EXPRESSION_PARSER = new SpelExpressionParser(); + /** + * 参数名发现器 + */ + private static final ParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = new DefaultParameterNameDiscoverer(); + + private SpringExpressionUtils() { + } + + /** + * 从切面中,单个解析 EL 表达式的结果 + * + * @param joinPoint 切面点 + * @param expressionString EL 表达式数组 + * @return 执行界面 + */ + public static Object parseExpression(JoinPoint joinPoint, String expressionString) { + Map result = parseExpressions(joinPoint, Collections.singletonList(expressionString)); + return result.get(expressionString); + } + + /** + * 从切面中,批量解析 EL 表达式的结果 + * + * @param joinPoint 切面点 + * @param expressionStrings EL 表达式数组 + * @return 结果,key 为表达式,value 为对应值 + */ + public static Map parseExpressions(JoinPoint joinPoint, List expressionStrings) { + // 如果为空,则不进行解析 + if (CollUtil.isEmpty(expressionStrings)) { + return MapUtil.newHashMap(); + } + + // 第一步,构建解析的上下文 EvaluationContext + // 通过 joinPoint 获取被注解方法 + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + Method method = methodSignature.getMethod(); + // 使用 spring 的 ParameterNameDiscoverer 获取方法形参名数组 + String[] paramNames = PARAMETER_NAME_DISCOVERER.getParameterNames(method); + // Spring 的表达式上下文对象 + EvaluationContext context = new StandardEvaluationContext(); + // 给上下文赋值 + if (ArrayUtil.isNotEmpty(paramNames)) { + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < paramNames.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + } + + // 第二步,逐个参数解析 + Map result = MapUtil.newHashMap(expressionStrings.size(), true); + expressionStrings.forEach(key -> { + Object value = EXPRESSION_PARSER.parseExpression(key).getValue(context); + result.put(key, value); + }); + return result; + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/spring/SpringUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/spring/SpringUtils.java new file mode 100644 index 0000000..5440746 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/spring/SpringUtils.java @@ -0,0 +1,24 @@ +package com.win.framework.common.util.spring; + +import cn.hutool.extra.spring.SpringUtil; + +import java.util.Objects; + +/** + * Spring 工具类 + * + * @author 芋道源码 + */ +public class SpringUtils extends SpringUtil { + + /** + * 是否为生产环境 + * + * @return 是否生产环境 + */ + public static boolean isProd() { + String activeProfile = getActiveProfile(); + return Objects.equals("prod", activeProfile); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/string/StrUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/string/StrUtils.java new file mode 100644 index 0000000..c88c8e9 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/string/StrUtils.java @@ -0,0 +1,80 @@ +package com.win.framework.common.util.string; + +import cn.hutool.core.text.StrPool; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 字符串工具类 + * + * @author 芋道源码 + */ +public class StrUtils { + + public static String maxLength(CharSequence str, int maxLength) { + return StrUtil.maxLength(str, maxLength - 3); // -3 的原因,是该方法会补充 ... 恰好 + } + + /** + * 给定字符串是否以任何一个字符串开始 + * 给定字符串和数组为空都返回 false + * + * @param str 给定字符串 + * @param prefixes 需要检测的开始字符串 + * @since 3.0.6 + */ + public static boolean startWithAny(String str, Collection prefixes) { + if (StrUtil.isEmpty(str) || ArrayUtil.isEmpty(prefixes)) { + return false; + } + + for (CharSequence suffix : prefixes) { + if (StrUtil.startWith(str, suffix, false)) { + return true; + } + } + return false; + } + + public static List splitToLong(String value, CharSequence separator) { + long[] longs = StrUtil.splitToLong(value, separator); + return Arrays.stream(longs).boxed().collect(Collectors.toList()); + } + + public static Set splitToLongSet(String value) { + return splitToLongSet(value, StrPool.COMMA); + } + + public static Set splitToLongSet(String value, CharSequence separator) { + long[] longs = StrUtil.splitToLong(value, separator); + return Arrays.stream(longs).boxed().collect(Collectors.toSet()); + } + + public static List splitToInteger(String value, CharSequence separator) { + int[] integers = StrUtil.splitToInt(value, separator); + return Arrays.stream(integers).boxed().collect(Collectors.toList()); + } + + /** + * 移除字符串中,包含指定字符串的行 + * + * @param content 字符串 + * @param sequence 包含的字符串 + * @return 移除后的字符串 + */ + public static String removeLineContains(String content, String sequence) { + if (StrUtil.isEmpty(content) || StrUtil.isEmpty(sequence)) { + return content; + } + return Arrays.stream(content.split("\n")) + .filter(line -> !line.contains(sequence)) + .collect(Collectors.joining("\n")); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/util/validation/ValidationUtils.java b/win-framework/win-common/src/main/java/com/win/framework/common/util/validation/ValidationUtils.java new file mode 100644 index 0000000..56a3d0c --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/util/validation/ValidationUtils.java @@ -0,0 +1,55 @@ +package com.win.framework.common.util.validation; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import org.springframework.util.StringUtils; + +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import java.util.Set; +import java.util.regex.Pattern; + +/** + * 校验工具类 + * + * @author 芋道源码 + */ +public class ValidationUtils { + + private static final Pattern PATTERN_MOBILE = Pattern.compile("^(?:(?:\\+|00)86)?1(?:(?:3[\\d])|(?:4[0,1,4-9])|(?:5[0-3,5-9])|(?:6[2,5-7])|(?:7[0-8])|(?:8[\\d])|(?:9[0-3,5-9]))\\d{8}$"); + + private static final Pattern PATTERN_URL = Pattern.compile("^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"); + + private static final Pattern PATTERN_XML_NCNAME = Pattern.compile("[a-zA-Z_][\\-_.0-9_a-zA-Z$]*"); + + public static boolean isMobile(String mobile) { + return StringUtils.hasText(mobile) + && PATTERN_MOBILE.matcher(mobile).matches(); + } + + public static boolean isURL(String url) { + return StringUtils.hasText(url) + && PATTERN_URL.matcher(url).matches(); + } + + public static boolean isXmlNCName(String str) { + return StringUtils.hasText(str) + && PATTERN_XML_NCNAME.matcher(str).matches(); + } + + public static void validate(Object object, Class... groups) { + Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); + Assert.notNull(validator); + validate(validator, object, groups); + } + + public static void validate(Validator validator, Object object, Class... groups) { + Set> constraintViolations = validator.validate(object, groups); + if (CollUtil.isNotEmpty(constraintViolations)) { + throw new ConstraintViolationException(constraintViolations); + } + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/validation/InEnum.java b/win-framework/win-common/src/main/java/com/win/framework/common/validation/InEnum.java new file mode 100644 index 0000000..abd2934 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/validation/InEnum.java @@ -0,0 +1,35 @@ +package com.win.framework.common.validation; + +import com.win.framework.common.core.IntArrayValuable; + +import jakarta.validation.Constraint; +import jakarta.validation.Payload; +import java.lang.annotation.*; + +@Target({ + ElementType.METHOD, + ElementType.FIELD, + ElementType.ANNOTATION_TYPE, + ElementType.CONSTRUCTOR, + ElementType.PARAMETER, + ElementType.TYPE_USE +}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Constraint( + validatedBy = {InEnumValidator.class, InEnumCollectionValidator.class} +) +public @interface InEnum { + + /** + * @return 实现 EnumValuable 接口的 + */ + Class value(); + + String message() default "必须在指定范围 {value}"; + + Class[] groups() default {}; + + Class[] payload() default {}; + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/validation/InEnumCollectionValidator.java b/win-framework/win-common/src/main/java/com/win/framework/common/validation/InEnumCollectionValidator.java new file mode 100644 index 0000000..d7d86cd --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/validation/InEnumCollectionValidator.java @@ -0,0 +1,42 @@ +package com.win.framework.common.validation; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.core.IntArrayValuable; + +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public class InEnumCollectionValidator implements ConstraintValidator> { + + private List values; + + @Override + public void initialize(InEnum annotation) { + IntArrayValuable[] values = annotation.value().getEnumConstants(); + if (values.length == 0) { + this.values = Collections.emptyList(); + } else { + this.values = Arrays.stream(values[0].array()).boxed().collect(Collectors.toList()); + } + } + + @Override + public boolean isValid(Collection list, ConstraintValidatorContext context) { + // 校验通过 + if (CollUtil.containsAll(values, list)) { + return true; + } + // 校验不通过,自定义提示语句(因为,注解上的 value 是枚举类,无法获得枚举类的实际值) + context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值 + context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate() + .replaceAll("\\{value}", CollUtil.join(list, ","))).addConstraintViolation(); // 重新添加错误提示语句 + return false; + } + +} + diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/validation/InEnumValidator.java b/win-framework/win-common/src/main/java/com/win/framework/common/validation/InEnumValidator.java new file mode 100644 index 0000000..f922d80 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/validation/InEnumValidator.java @@ -0,0 +1,44 @@ +package com.win.framework.common.validation; + +import com.win.framework.common.core.IntArrayValuable; + +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public class InEnumValidator implements ConstraintValidator { + + private List values; + + @Override + public void initialize(InEnum annotation) { + IntArrayValuable[] values = annotation.value().getEnumConstants(); + if (values.length == 0) { + this.values = Collections.emptyList(); + } else { + this.values = Arrays.stream(values[0].array()).boxed().collect(Collectors.toList()); + } + } + + @Override + public boolean isValid(Integer value, ConstraintValidatorContext context) { + // 为空时,默认不校验,即认为通过 + if (value == null) { + return true; + } + // 校验通过 + if (values.contains(value)) { + return true; + } + // 校验不通过,自定义提示语句(因为,注解上的 value 是枚举类,无法获得枚举类的实际值) + context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值 + context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate() + .replaceAll("\\{value}", values.toString())).addConstraintViolation(); // 重新添加错误提示语句 + return false; + } + +} + diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/validation/Mobile.java b/win-framework/win-common/src/main/java/com/win/framework/common/validation/Mobile.java new file mode 100644 index 0000000..4512825 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/validation/Mobile.java @@ -0,0 +1,28 @@ +package com.win.framework.common.validation; + +import jakarta.validation.Constraint; +import jakarta.validation.Payload; +import java.lang.annotation.*; + +@Target({ + ElementType.METHOD, + ElementType.FIELD, + ElementType.ANNOTATION_TYPE, + ElementType.CONSTRUCTOR, + ElementType.PARAMETER, + ElementType.TYPE_USE +}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Constraint( + validatedBy = MobileValidator.class +) +public @interface Mobile { + + String message() default "手机号格式不正确"; + + Class[] groups() default {}; + + Class[] payload() default {}; + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/validation/MobileValidator.java b/win-framework/win-common/src/main/java/com/win/framework/common/validation/MobileValidator.java new file mode 100644 index 0000000..684be37 --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/validation/MobileValidator.java @@ -0,0 +1,25 @@ +package com.win.framework.common.validation; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.util.validation.ValidationUtils; + +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +public class MobileValidator implements ConstraintValidator { + + @Override + public void initialize(Mobile annotation) { + } + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + // 如果手机号为空,默认不校验,即校验通过 + if (StrUtil.isEmpty(value)) { + return true; + } + // 校验手机 + return ValidationUtils.isMobile(value); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/validation/Telephone.java b/win-framework/win-common/src/main/java/com/win/framework/common/validation/Telephone.java new file mode 100644 index 0000000..a8fc0df --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/validation/Telephone.java @@ -0,0 +1,28 @@ +package com.win.framework.common.validation; + +import jakarta.validation.Constraint; +import jakarta.validation.Payload; +import java.lang.annotation.*; + +@Target({ + ElementType.METHOD, + ElementType.FIELD, + ElementType.ANNOTATION_TYPE, + ElementType.CONSTRUCTOR, + ElementType.PARAMETER, + ElementType.TYPE_USE +}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Constraint( + validatedBy = TelephoneValidator.class +) +public @interface Telephone { + + String message() default "电话格式不正确"; + + Class[] groups() default {}; + + Class[] payload() default {}; + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/validation/TelephoneValidator.java b/win-framework/win-common/src/main/java/com/win/framework/common/validation/TelephoneValidator.java new file mode 100644 index 0000000..30f7d5f --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/validation/TelephoneValidator.java @@ -0,0 +1,25 @@ +package com.win.framework.common.validation; + +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.PhoneUtil; + +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +public class TelephoneValidator implements ConstraintValidator { + + @Override + public void initialize(Telephone annotation) { + } + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + // 如果手机号为空,默认不校验,即校验通过 + if (CharSequenceUtil.isEmpty(value)) { + return true; + } + // 校验手机 + return PhoneUtil.isTel(value) || PhoneUtil.isPhone(value); + } + +} diff --git a/win-framework/win-common/src/main/java/com/win/framework/common/validation/package-info.java b/win-framework/win-common/src/main/java/com/win/framework/common/validation/package-info.java new file mode 100644 index 0000000..488269f --- /dev/null +++ b/win-framework/win-common/src/main/java/com/win/framework/common/validation/package-info.java @@ -0,0 +1,4 @@ +/** + * 使用 Hibernate Validator 实现参数校验 + */ +package com.win.framework.common.validation; diff --git a/win-framework/win-common/《芋道 Spring Boot 参数校验 Validation 入门》.md b/win-framework/win-common/《芋道 Spring Boot 参数校验 Validation 入门》.md new file mode 100644 index 0000000..6067d8f --- /dev/null +++ b/win-framework/win-common/《芋道 Spring Boot 参数校验 Validation 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/pom.xml b/win-framework/win-spring-boot-starter-biz-data-permission/pom.xml new file mode 100644 index 0000000..c42c5e0 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/pom.xml @@ -0,0 +1,45 @@ + + + + win-framework + com.win + ${revision} + + 4.0.0 + win-spring-boot-starter-biz-data-permission + jar + + ${project.artifactId} + 数据权限 + https://github.com/YunaiV/ruoyi-vue-pro + + + + com.win + win-common + + + + + com.win + win-spring-boot-starter-security + true + + + + + com.win + win-spring-boot-starter-mybatis + + + + + com.win + win-module-system-api + ${revision} + + + + diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/config/WinDataPermissionAutoConfiguration.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/config/WinDataPermissionAutoConfiguration.java new file mode 100644 index 0000000..074b99b --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/config/WinDataPermissionAutoConfiguration.java @@ -0,0 +1,44 @@ +package com.win.framework.datapermission.config; + +import com.win.framework.datapermission.core.aop.DataPermissionAnnotationAdvisor; +import com.win.framework.datapermission.core.db.DataPermissionDatabaseInterceptor; +import com.win.framework.datapermission.core.rule.DataPermissionRule; +import com.win.framework.datapermission.core.rule.DataPermissionRuleFactory; +import com.win.framework.datapermission.core.rule.DataPermissionRuleFactoryImpl; +import com.win.framework.mybatis.core.util.MyBatisUtils; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Bean; + +import java.util.List; + +/** + * 数据权限的自动配置类 + * + * @author 芋道源码 + */ +@AutoConfiguration +public class WinDataPermissionAutoConfiguration { + + @Bean + public DataPermissionRuleFactory dataPermissionRuleFactory(List rules) { + return new DataPermissionRuleFactoryImpl(rules); + } + + @Bean + public DataPermissionDatabaseInterceptor dataPermissionDatabaseInterceptor(MybatisPlusInterceptor interceptor, + DataPermissionRuleFactory ruleFactory) { + // 创建 DataPermissionDatabaseInterceptor 拦截器 + DataPermissionDatabaseInterceptor inner = new DataPermissionDatabaseInterceptor(ruleFactory); + // 添加到 interceptor 中 + // 需要加在首个,主要是为了在分页插件前面。这个是 MyBatis Plus 的规定 + MyBatisUtils.addInterceptor(interceptor, inner, 0); + return inner; + } + + @Bean + public DataPermissionAnnotationAdvisor dataPermissionAnnotationAdvisor() { + return new DataPermissionAnnotationAdvisor(); + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/config/WinDeptDataPermissionAutoConfiguration.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/config/WinDeptDataPermissionAutoConfiguration.java new file mode 100644 index 0000000..1f6f1fa --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/config/WinDeptDataPermissionAutoConfiguration.java @@ -0,0 +1,44 @@ +package com.win.framework.datapermission.config; + +import cn.hutool.extra.spring.SpringUtil; +import com.win.framework.datapermission.core.rule.dept.DeptDataPermissionRule; +import com.win.framework.datapermission.core.rule.dept.DeptDataPermissionRuleCustomizer; +import com.win.framework.security.core.LoginUser; +import com.win.module.system.api.permission.PermissionApi; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Bean; + +import java.util.List; + +/** + * 基于部门的数据权限 AutoConfiguration + * + * @author 芋道源码 + */ +@AutoConfiguration +@ConditionalOnClass(LoginUser.class) +@ConditionalOnBean(value = DeptDataPermissionRuleCustomizer.class) +public class WinDeptDataPermissionAutoConfiguration { + + @Bean + public DeptDataPermissionRule deptDataPermissionRule(PermissionApi permissionApi, + List customizers) { + // Cloud 专属逻辑:优先使用本地的 PermissionApi 实现类,而不是 Feign 调用 + // 原因:在创建租户时,租户还没创建好,导致 Feign 调用获取数据权限时,报“租户不存在”的错误 + try { + PermissionApi permissionApiImpl = SpringUtil.getBean("permissionApiImpl", PermissionApi.class); + if (permissionApiImpl != null) { + permissionApi = permissionApiImpl; + } + } catch (Exception ignored) {} + + // 创建 DeptDataPermissionRule 对象 + DeptDataPermissionRule rule = new DeptDataPermissionRule(permissionApi); + // 补全表配置 + customizers.forEach(customizer -> customizer.customize(rule)); + return rule; + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/annotation/DataPermission.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/annotation/DataPermission.java new file mode 100644 index 0000000..e796a52 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/annotation/DataPermission.java @@ -0,0 +1,35 @@ +package com.win.framework.datapermission.core.annotation; + +import com.win.framework.datapermission.core.rule.DataPermissionRule; + +import java.lang.annotation.*; + +/** + * 数据权限注解 + * 可声明在类或者方法上,标识使用的数据权限规则 + * + * @author 芋道源码 + */ +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataPermission { + + /** + * 当前类或方法是否开启数据权限 + * 即使不添加 @DataPermission 注解,默认是开启状态 + * 可通过设置 enable 为 false 禁用 + */ + boolean enable() default true; + + /** + * 生效的数据权限规则数组,优先级高于 {@link #excludeRules()} + */ + Class[] includeRules() default {}; + + /** + * 排除的数据权限规则数组,优先级最低 + */ + Class[] excludeRules() default {}; + +} diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/aop/DataPermissionAnnotationAdvisor.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/aop/DataPermissionAnnotationAdvisor.java new file mode 100644 index 0000000..2fd821a --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/aop/DataPermissionAnnotationAdvisor.java @@ -0,0 +1,36 @@ +package com.win.framework.datapermission.core.aop; + +import com.win.framework.datapermission.core.annotation.DataPermission; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import org.aopalliance.aop.Advice; +import org.springframework.aop.Pointcut; +import org.springframework.aop.support.AbstractPointcutAdvisor; +import org.springframework.aop.support.ComposablePointcut; +import org.springframework.aop.support.annotation.AnnotationMatchingPointcut; + +/** + * {@link com.win.framework.datapermission.core.annotation.DataPermission} 注解的 Advisor 实现类 + * + * @author 芋道源码 + */ +@Getter +@EqualsAndHashCode(callSuper = true) +public class DataPermissionAnnotationAdvisor extends AbstractPointcutAdvisor { + + private final Advice advice; + + private final Pointcut pointcut; + + public DataPermissionAnnotationAdvisor() { + this.advice = new DataPermissionAnnotationInterceptor(); + this.pointcut = this.buildPointcut(); + } + + protected Pointcut buildPointcut() { + Pointcut classPointcut = new AnnotationMatchingPointcut(DataPermission.class, true); + Pointcut methodPointcut = new AnnotationMatchingPointcut(null, DataPermission.class, true); + return new ComposablePointcut(classPointcut).union(methodPointcut); + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/aop/DataPermissionAnnotationInterceptor.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/aop/DataPermissionAnnotationInterceptor.java new file mode 100644 index 0000000..03cebca --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/aop/DataPermissionAnnotationInterceptor.java @@ -0,0 +1,72 @@ +package com.win.framework.datapermission.core.aop; + +import com.win.framework.datapermission.core.annotation.DataPermission; +import lombok.Getter; +import org.aopalliance.intercept.MethodInterceptor; +import org.aopalliance.intercept.MethodInvocation; +import org.springframework.core.MethodClassKey; +import org.springframework.core.annotation.AnnotationUtils; + +import java.lang.reflect.Method; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * {@link DataPermission} 注解的拦截器 + * 1. 在执行方法前,将 @DataPermission 注解入栈 + * 2. 在执行方法后,将 @DataPermission 注解出栈 + * + * @author 芋道源码 + */ +@DataPermission // 该注解,用于 {@link DATA_PERMISSION_NULL} 的空对象 +public class DataPermissionAnnotationInterceptor implements MethodInterceptor { + + /** + * DataPermission 空对象,用于方法无 {@link DataPermission} 注解时,使用 DATA_PERMISSION_NULL 进行占位 + */ + static final DataPermission DATA_PERMISSION_NULL = DataPermissionAnnotationInterceptor.class.getAnnotation(DataPermission.class); + + @Getter + private final Map dataPermissionCache = new ConcurrentHashMap<>(); + + @Override + public Object invoke(MethodInvocation methodInvocation) throws Throwable { + // 入栈 + DataPermission dataPermission = this.findAnnotation(methodInvocation); + if (dataPermission != null) { + DataPermissionContextHolder.add(dataPermission); + } + try { + // 执行逻辑 + return methodInvocation.proceed(); + } finally { + // 出栈 + if (dataPermission != null) { + DataPermissionContextHolder.remove(); + } + } + } + + private DataPermission findAnnotation(MethodInvocation methodInvocation) { + // 1. 从缓存中获取 + Method method = methodInvocation.getMethod(); + Object targetObject = methodInvocation.getThis(); + Class clazz = targetObject != null ? targetObject.getClass() : method.getDeclaringClass(); + MethodClassKey methodClassKey = new MethodClassKey(method, clazz); + DataPermission dataPermission = dataPermissionCache.get(methodClassKey); + if (dataPermission != null) { + return dataPermission != DATA_PERMISSION_NULL ? dataPermission : null; + } + + // 2.1 从方法中获取 + dataPermission = AnnotationUtils.findAnnotation(method, DataPermission.class); + // 2.2 从类上获取 + if (dataPermission == null) { + dataPermission = AnnotationUtils.findAnnotation(clazz, DataPermission.class); + } + // 2.3 添加到缓存中 + dataPermissionCache.put(methodClassKey, dataPermission != null ? dataPermission : DATA_PERMISSION_NULL); + return dataPermission; + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/aop/DataPermissionContextHolder.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/aop/DataPermissionContextHolder.java new file mode 100644 index 0000000..6ae7ab2 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/aop/DataPermissionContextHolder.java @@ -0,0 +1,72 @@ +package com.win.framework.datapermission.core.aop; + +import com.win.framework.datapermission.core.annotation.DataPermission; +import com.alibaba.ttl.TransmittableThreadLocal; + +import java.util.LinkedList; +import java.util.List; + +/** + * {@link DataPermission} 注解的 Context 上下文 + * + * @author 芋道源码 + */ +public class DataPermissionContextHolder { + + /** + * 使用 List 的原因,可能存在方法的嵌套调用 + */ + private static final ThreadLocal> DATA_PERMISSIONS = + TransmittableThreadLocal.withInitial(LinkedList::new); + + /** + * 获得当前的 DataPermission 注解 + * + * @return DataPermission 注解 + */ + public static DataPermission get() { + return DATA_PERMISSIONS.get().peekLast(); + } + + /** + * 入栈 DataPermission 注解 + * + * @param dataPermission DataPermission 注解 + */ + public static void add(DataPermission dataPermission) { + DATA_PERMISSIONS.get().addLast(dataPermission); + } + + /** + * 出栈 DataPermission 注解 + * + * @return DataPermission 注解 + */ + public static DataPermission remove() { + DataPermission dataPermission = DATA_PERMISSIONS.get().removeLast(); + // 无元素时,清空 ThreadLocal + if (DATA_PERMISSIONS.get().isEmpty()) { + DATA_PERMISSIONS.remove(); + } + return dataPermission; + } + + /** + * 获得所有 DataPermission + * + * @return DataPermission 队列 + */ + public static List getAll() { + return DATA_PERMISSIONS.get(); + } + + /** + * 清空上下文 + * + * 目前仅仅用于单测 + */ + public static void clear() { + DATA_PERMISSIONS.remove(); + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/db/DataPermissionDatabaseInterceptor.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/db/DataPermissionDatabaseInterceptor.java new file mode 100644 index 0000000..d7e8851 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/db/DataPermissionDatabaseInterceptor.java @@ -0,0 +1,641 @@ +package com.win.framework.datapermission.core.db; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.util.collection.SetUtils; +import com.win.framework.datapermission.core.rule.DataPermissionRule; +import com.win.framework.datapermission.core.rule.DataPermissionRuleFactory; +import com.win.framework.mybatis.core.util.MyBatisUtils; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.PluginUtils; +import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport; +import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import net.sf.jsqlparser.expression.*; +import net.sf.jsqlparser.expression.operators.conditional.AndExpression; +import net.sf.jsqlparser.expression.operators.conditional.OrExpression; +import net.sf.jsqlparser.expression.operators.relational.ExistsExpression; +import net.sf.jsqlparser.expression.operators.relational.ExpressionList; +import net.sf.jsqlparser.expression.operators.relational.InExpression; +import net.sf.jsqlparser.schema.Table; +import net.sf.jsqlparser.statement.delete.Delete; +import net.sf.jsqlparser.statement.select.*; +import net.sf.jsqlparser.statement.update.Update; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.executor.statement.StatementHandler; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.SqlCommandType; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; + +import java.sql.Connection; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 数据权限拦截器,通过 {@link DataPermissionRule} 数据权限规则,重写 SQL 的方式来实现 + * 主要的 SQL 重写方法,可见 {@link #builderExpression(Expression, List)} 方法 + * + * 整体的代码实现上,参考 {@link com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor} 实现。 + * 所以每次 MyBatis Plus 升级时,需要 Review 下其具体的实现是否有变更! + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +public class DataPermissionDatabaseInterceptor extends JsqlParserSupport implements InnerInterceptor { + + private final DataPermissionRuleFactory ruleFactory; + + @Getter + private final MappedStatementCache mappedStatementCache = new MappedStatementCache(); + + @Override // SELECT 场景 + public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { + // 获得 Mapper 对应的数据权限的规则 + List rules = ruleFactory.getDataPermissionRule(ms.getId()); + if (mappedStatementCache.noRewritable(ms, rules)) { // 如果无需重写,则跳过 + return; + } + + PluginUtils.MPBoundSql mpBs = PluginUtils.mpBoundSql(boundSql); + try { + // 初始化上下文 + ContextHolder.init(rules); + // 处理 SQL + mpBs.sql(parserSingle(mpBs.sql(), null)); + } finally { + // 添加是否需要重写的缓存 + addMappedStatementCache(ms); + // 清空上下文 + ContextHolder.clear(); + } + } + + @Override // 只处理 UPDATE / DELETE 场景,不处理 INSERT 场景(因为 INSERT 不需要数据权限) + public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) { + PluginUtils.MPStatementHandler mpSh = PluginUtils.mpStatementHandler(sh); + MappedStatement ms = mpSh.mappedStatement(); + SqlCommandType sct = ms.getSqlCommandType(); + if (sct == SqlCommandType.UPDATE || sct == SqlCommandType.DELETE) { + // 获得 Mapper 对应的数据权限的规则 + List rules = ruleFactory.getDataPermissionRule(ms.getId()); + if (mappedStatementCache.noRewritable(ms, rules)) { // 如果无需重写,则跳过 + return; + } + + PluginUtils.MPBoundSql mpBs = mpSh.mPBoundSql(); + try { + // 初始化上下文 + ContextHolder.init(rules); + // 处理 SQL + mpBs.sql(parserMulti(mpBs.sql(), null)); + } finally { + // 添加是否需要重写的缓存 + addMappedStatementCache(ms); + // 清空上下文 + ContextHolder.clear(); + } + } + } + + @Override + protected void processSelect(Select select, int index, String sql, Object obj) { + processSelectBody(select.getSelectBody()); + List withItemsList = select.getWithItemsList(); + if (!CollectionUtils.isEmpty(withItemsList)) { + withItemsList.forEach(this::processSelectBody); + } + } + + /** + * update 语句处理 + */ + @Override + protected void processUpdate(Update update, int index, String sql, Object obj) { + final Table table = update.getTable(); + update.setWhere(this.builderExpression(update.getWhere(), table)); + } + + /** + * delete 语句处理 + */ + @Override + protected void processDelete(Delete delete, int index, String sql, Object obj) { + delete.setWhere(this.builderExpression(delete.getWhere(), delete.getTable())); + } + + // ========== 和 TenantLineInnerInterceptor 一致的逻辑 ========== + + protected void processSelectBody(SelectBody selectBody) { + if (selectBody == null) { + return; + } + if (selectBody instanceof PlainSelect) { + processPlainSelect((PlainSelect) selectBody); + } else if (selectBody instanceof WithItem) { + WithItem withItem = (WithItem) selectBody; + processSelectBody(withItem.getSubSelect().getSelectBody()); + } else { + SetOperationList operationList = (SetOperationList) selectBody; + List selectBodyList = operationList.getSelects(); + if (CollectionUtils.isNotEmpty(selectBodyList)) { + selectBodyList.forEach(this::processSelectBody); + } + } + } + + /** + * 处理 PlainSelect + */ + protected void processPlainSelect(PlainSelect plainSelect) { + //#3087 github + List selectItems = plainSelect.getSelectItems(); + if (CollectionUtils.isNotEmpty(selectItems)) { + selectItems.forEach(this::processSelectItem); + } + + // 处理 where 中的子查询 + Expression where = plainSelect.getWhere(); + processWhereSubSelect(where); + + // 处理 fromItem + FromItem fromItem = plainSelect.getFromItem(); + List list = processFromItem(fromItem); + List
    mainTables = new ArrayList<>(list); + + // 处理 join + List joins = plainSelect.getJoins(); + if (CollectionUtils.isNotEmpty(joins)) { + mainTables = processJoins(mainTables, joins); + } + + // 当有 mainTable 时,进行 where 条件追加 + if (CollectionUtils.isNotEmpty(mainTables)) { + plainSelect.setWhere(builderExpression(where, mainTables)); + } + } + + private List
    processFromItem(FromItem fromItem) { + // 处理括号括起来的表达式 + while (fromItem instanceof ParenthesisFromItem) { + fromItem = ((ParenthesisFromItem) fromItem).getFromItem(); + } + + List
    mainTables = new ArrayList<>(); + // 无 join 时的处理逻辑 + if (fromItem instanceof Table) { + Table fromTable = (Table) fromItem; + mainTables.add(fromTable); + } else if (fromItem instanceof SubJoin) { + // SubJoin 类型则还需要添加上 where 条件 + List
    tables = processSubJoin((SubJoin) fromItem); + mainTables.addAll(tables); + } else { + // 处理下 fromItem + processOtherFromItem(fromItem); + } + return mainTables; + } + + /** + * 处理where条件内的子查询 + *

    + * 支持如下: + * 1. in + * 2. = + * 3. > + * 4. < + * 5. >= + * 6. <= + * 7. <> + * 8. EXISTS + * 9. NOT EXISTS + *

    + * 前提条件: + * 1. 子查询必须放在小括号中 + * 2. 子查询一般放在比较操作符的右边 + * + * @param where where 条件 + */ + protected void processWhereSubSelect(Expression where) { + if (where == null) { + return; + } + if (where instanceof FromItem) { + processOtherFromItem((FromItem) where); + return; + } + if (where.toString().indexOf("SELECT") > 0) { + // 有子查询 + if (where instanceof BinaryExpression) { + // 比较符号 , and , or , 等等 + BinaryExpression expression = (BinaryExpression) where; + processWhereSubSelect(expression.getLeftExpression()); + processWhereSubSelect(expression.getRightExpression()); + } else if (where instanceof InExpression) { + // in + InExpression expression = (InExpression) where; + Expression inExpression = expression.getRightExpression(); + if (inExpression instanceof SubSelect) { + processSelectBody(((SubSelect) inExpression).getSelectBody()); + } + } else if (where instanceof ExistsExpression) { + // exists + ExistsExpression expression = (ExistsExpression) where; + processWhereSubSelect(expression.getRightExpression()); + } else if (where instanceof NotExpression) { + // not exists + NotExpression expression = (NotExpression) where; + processWhereSubSelect(expression.getExpression()); + } else if (where instanceof Parenthesis) { + Parenthesis expression = (Parenthesis) where; + processWhereSubSelect(expression.getExpression()); + } + } + } + + protected void processSelectItem(SelectItem selectItem) { + if (selectItem instanceof SelectExpressionItem) { + SelectExpressionItem selectExpressionItem = (SelectExpressionItem) selectItem; + if (selectExpressionItem.getExpression() instanceof SubSelect) { + processSelectBody(((SubSelect) selectExpressionItem.getExpression()).getSelectBody()); + } else if (selectExpressionItem.getExpression() instanceof Function) { + processFunction((Function) selectExpressionItem.getExpression()); + } + } + } + + /** + * 处理函数 + *

    支持: 1. select fun(args..) 2. select fun1(fun2(args..),args..)

    + *

    fixed gitee pulls/141

    + * + * @param function + */ + protected void processFunction(Function function) { + ExpressionList parameters = function.getParameters(); + if (parameters != null) { + parameters.getExpressions().forEach(expression -> { + if (expression instanceof SubSelect) { + processSelectBody(((SubSelect) expression).getSelectBody()); + } else if (expression instanceof Function) { + processFunction((Function) expression); + } + }); + } + } + + /** + * 处理子查询等 + */ + protected void processOtherFromItem(FromItem fromItem) { + // 去除括号 + while (fromItem instanceof ParenthesisFromItem) { + fromItem = ((ParenthesisFromItem) fromItem).getFromItem(); + } + + if (fromItem instanceof SubSelect) { + SubSelect subSelect = (SubSelect) fromItem; + if (subSelect.getSelectBody() != null) { + processSelectBody(subSelect.getSelectBody()); + } + } else if (fromItem instanceof ValuesList) { + logger.debug("Perform a subQuery, if you do not give us feedback"); + } else if (fromItem instanceof LateralSubSelect) { + LateralSubSelect lateralSubSelect = (LateralSubSelect) fromItem; + if (lateralSubSelect.getSubSelect() != null) { + SubSelect subSelect = lateralSubSelect.getSubSelect(); + if (subSelect.getSelectBody() != null) { + processSelectBody(subSelect.getSelectBody()); + } + } + } + } + + /** + * 处理 sub join + * + * @param subJoin subJoin + * @return Table subJoin 中的主表 + */ + private List
    processSubJoin(SubJoin subJoin) { + List
    mainTables = new ArrayList<>(); + if (subJoin.getJoinList() != null) { + List
    list = processFromItem(subJoin.getLeft()); + mainTables.addAll(list); + mainTables = processJoins(mainTables, subJoin.getJoinList()); + } + return mainTables; + } + + /** + * 处理 joins + * + * @param mainTables 可以为 null + * @param joins join 集合 + * @return List
    右连接查询的 Table 列表 + */ + private List
    processJoins(List
    mainTables, List joins) { + // join 表达式中最终的主表 + Table mainTable = null; + // 当前 join 的左表 + Table leftTable = null; + + if (mainTables == null) { + mainTables = new ArrayList<>(); + } else if (mainTables.size() == 1) { + mainTable = mainTables.get(0); + leftTable = mainTable; + } + + //对于 on 表达式写在最后的 join,需要记录下前面多个 on 的表名 + Deque> onTableDeque = new LinkedList<>(); + for (Join join : joins) { + // 处理 on 表达式 + FromItem joinItem = join.getRightItem(); + + // 获取当前 join 的表,subJoint 可以看作是一张表 + List
    joinTables = null; + if (joinItem instanceof Table) { + joinTables = new ArrayList<>(); + joinTables.add((Table) joinItem); + } else if (joinItem instanceof SubJoin) { + joinTables = processSubJoin((SubJoin) joinItem); + } + + if (joinTables != null) { + + // 如果是隐式内连接 + if (join.isSimple()) { + mainTables.addAll(joinTables); + continue; + } + + // 当前表是否忽略 + Table joinTable = joinTables.get(0); + + List
    onTables = null; + // 如果不要忽略,且是右连接,则记录下当前表 + if (join.isRight()) { + mainTable = joinTable; + if (leftTable != null) { + onTables = Collections.singletonList(leftTable); + } + } else if (join.isLeft()) { + onTables = Collections.singletonList(joinTable); + } else if (join.isInner()) { + if (mainTable == null) { + onTables = Collections.singletonList(joinTable); + } else { + onTables = Arrays.asList(mainTable, joinTable); + } + mainTable = null; + } + + mainTables = new ArrayList<>(); + if (mainTable != null) { + mainTables.add(mainTable); + } + + // 获取 join 尾缀的 on 表达式列表 + Collection originOnExpressions = join.getOnExpressions(); + // 正常 join on 表达式只有一个,立刻处理 + if (originOnExpressions.size() == 1 && onTables != null) { + List onExpressions = new LinkedList<>(); + onExpressions.add(builderExpression(originOnExpressions.iterator().next(), onTables)); + join.setOnExpressions(onExpressions); + leftTable = joinTable; + continue; + } + // 表名压栈,忽略的表压入 null,以便后续不处理 + onTableDeque.push(onTables); + // 尾缀多个 on 表达式的时候统一处理 + if (originOnExpressions.size() > 1) { + Collection onExpressions = new LinkedList<>(); + for (Expression originOnExpression : originOnExpressions) { + List
    currentTableList = onTableDeque.poll(); + if (CollectionUtils.isEmpty(currentTableList)) { + onExpressions.add(originOnExpression); + } else { + onExpressions.add(builderExpression(originOnExpression, currentTableList)); + } + } + join.setOnExpressions(onExpressions); + } + leftTable = joinTable; + } else { + processOtherFromItem(joinItem); + leftTable = null; + } + } + + return mainTables; + } + + // ========== 和 TenantLineInnerInterceptor 存在差异的逻辑:关键,实现权限条件的拼接 ========== + + /** + * 处理条件 + * + * @param currentExpression 当前 where 条件 + * @param table 单个表 + */ + protected Expression builderExpression(Expression currentExpression, Table table) { + return this.builderExpression(currentExpression, Collections.singletonList(table)); + } + + /** + * 处理条件 + * + * @param currentExpression 当前 where 条件 + * @param tables 多个表 + */ + protected Expression builderExpression(Expression currentExpression, List
    tables) { + // 没有表需要处理直接返回 + if (CollectionUtils.isEmpty(tables)) { + return currentExpression; + } + + // 第一步,获得 Table 对应的数据权限条件 + Expression dataPermissionExpression = null; + for (Table table : tables) { + // 构建每个表的权限 Expression 条件 + Expression expression = buildDataPermissionExpression(table); + if (expression == null) { + continue; + } + // 合并到 dataPermissionExpression 中 + dataPermissionExpression = dataPermissionExpression == null ? expression + : new AndExpression(dataPermissionExpression, expression); + } + + // 第二步,合并多个 Expression 条件 + if (dataPermissionExpression == null) { + return currentExpression; + } + if (currentExpression == null) { + return dataPermissionExpression; + } + // ① 如果表达式为 Or,则需要 (currentExpression) AND dataPermissionExpression + if (currentExpression instanceof OrExpression) { + return new AndExpression(new Parenthesis(currentExpression), dataPermissionExpression); + } + // ② 如果表达式为 And,则直接返回 where AND dataPermissionExpression + return new AndExpression(currentExpression, dataPermissionExpression); + } + + /** + * 构建指定表的数据权限的 Expression 过滤条件 + * + * @param table 表 + * @return Expression 过滤条件 + */ + private Expression buildDataPermissionExpression(Table table) { + // 生成条件 + Expression allExpression = null; + for (DataPermissionRule rule : ContextHolder.getRules()) { + // 判断表名是否匹配 + String tableName = MyBatisUtils.getTableName(table); + if (!rule.getTableNames().contains(tableName)) { + continue; + } + // 如果有匹配的规则,说明可重写。 + // 为什么不是有 allExpression 非空才重写呢?在生成 column = value 过滤条件时,会因为 value 不存在,导致未重写。 + // 这样导致第一次无 value,被标记成无需重写;但是第二次有 value,此时会需要重写。 + ContextHolder.setRewrite(true); + + // 单条规则的条件 + Expression oneExpress = rule.getExpression(tableName, table.getAlias()); + if (oneExpress == null){ + continue; + } + // 拼接到 allExpression 中 + allExpression = allExpression == null ? oneExpress + : new AndExpression(allExpression, oneExpress); + } + + return allExpression; + } + + /** + * 判断 SQL 是否重写。如果没有重写,则添加到 {@link MappedStatementCache} 中 + * + * @param ms MappedStatement + */ + private void addMappedStatementCache(MappedStatement ms) { + if (ContextHolder.getRewrite()) { + return; + } + // 无重写,进行添加 + mappedStatementCache.addNoRewritable(ms, ContextHolder.getRules()); + } + + /** + * SQL 解析上下文,方便透传 {@link DataPermissionRule} 规则 + * + * @author 芋道源码 + */ + static final class ContextHolder { + + /** + * 该 {@link MappedStatement} 对应的规则 + */ + private static final ThreadLocal> RULES = ThreadLocal.withInitial(Collections::emptyList); + /** + * SQL 是否进行重写 + */ + private static final ThreadLocal REWRITE = ThreadLocal.withInitial(() -> Boolean.FALSE); + + public static void init(List rules) { + RULES.set(rules); + REWRITE.set(false); + } + + public static void clear() { + RULES.remove(); + REWRITE.remove(); + } + + public static boolean getRewrite() { + return REWRITE.get(); + } + + public static void setRewrite(boolean rewrite) { + REWRITE.set(rewrite); + } + + public static List getRules() { + return RULES.get(); + } + + } + + /** + * {@link MappedStatement} 缓存 + * 目前主要用于,记录 {@link DataPermissionRule} 是否对指定 {@link MappedStatement} 无效 + * 如果无效,则可以避免 SQL 的解析,加快速度 + * + * @author 芋道源码 + */ + static final class MappedStatementCache { + + /** + * 指定数据权限规则,对指定 MappedStatement 无需重写(不生效)的缓存 + * + * value:{@link MappedStatement#getId()} 编号 + */ + @Getter + private final Map, Set> noRewritableMappedStatements = new ConcurrentHashMap<>(); + + /** + * 判断是否无需重写 + * ps:虽然有点中文式英语,但是容易读懂即可 + * + * @param ms MappedStatement + * @param rules 数据权限规则数组 + * @return 是否无需重写 + */ + public boolean noRewritable(MappedStatement ms, List rules) { + // 如果规则为空,说明无需重写 + if (CollUtil.isEmpty(rules)) { + return true; + } + // 任一规则不在 noRewritableMap 中,则说明可能需要重写 + for (DataPermissionRule rule : rules) { + Set mappedStatementIds = noRewritableMappedStatements.get(rule.getClass()); + if (!CollUtil.contains(mappedStatementIds, ms.getId())) { + return false; + } + } + return true; + } + + /** + * 添加无需重写的 MappedStatement + * + * @param ms MappedStatement + * @param rules 数据权限规则数组 + */ + public void addNoRewritable(MappedStatement ms, List rules) { + for (DataPermissionRule rule : rules) { + Set mappedStatementIds = noRewritableMappedStatements.get(rule.getClass()); + if (CollUtil.isNotEmpty(mappedStatementIds)) { + mappedStatementIds.add(ms.getId()); + } else { + noRewritableMappedStatements.put(rule.getClass(), SetUtils.asSet(ms.getId())); + } + } + } + + /** + * 清空缓存 + * 目前主要提供给单元测试 + */ + public void clear() { + noRewritableMappedStatements.clear(); + } + + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/DataPermissionRule.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/DataPermissionRule.java new file mode 100644 index 0000000..83efe1c --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/DataPermissionRule.java @@ -0,0 +1,36 @@ +package com.win.framework.datapermission.core.rule; + +import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; +import net.sf.jsqlparser.expression.Alias; +import net.sf.jsqlparser.expression.Expression; + +import java.util.Set; + +/** + * 数据权限规则接口 + * 通过实现接口,自定义数据规则。例如说, + * + * @author 芋道源码 + */ +public interface DataPermissionRule { + + /** + * 返回需要生效的表名数组 + * 为什么需要该方法?Data Permission 数组基于 SQL 重写,通过 Where 返回只有权限的数据 + * + * 如果需要基于实体名获得表名,可调用 {@link TableInfoHelper#getTableInfo(Class)} 获得 + * + * @return 表名数组 + */ + Set getTableNames(); + + /** + * 根据表名和别名,生成对应的 WHERE / OR 过滤条件 + * + * @param tableName 表名 + * @param tableAlias 别名,可能为空 + * @return 过滤条件 Expression 表达式 + */ + Expression getExpression(String tableName, Alias tableAlias); + +} diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/DataPermissionRuleFactory.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/DataPermissionRuleFactory.java new file mode 100644 index 0000000..88b9094 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/DataPermissionRuleFactory.java @@ -0,0 +1,28 @@ +package com.win.framework.datapermission.core.rule; + +import java.util.List; + +/** + * {@link DataPermissionRule} 工厂接口 + * 作为 {@link DataPermissionRule} 的容器,提供管理能力 + * + * @author 芋道源码 + */ +public interface DataPermissionRuleFactory { + + /** + * 获得所有数据权限规则数组 + * + * @return 数据权限规则数组 + */ + List getDataPermissionRules(); + + /** + * 获得指定 Mapper 的数据权限规则数组 + * + * @param mappedStatementId 指定 Mapper 的编号 + * @return 数据权限规则数组 + */ + List getDataPermissionRule(String mappedStatementId); + +} diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/DataPermissionRuleFactoryImpl.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/DataPermissionRuleFactoryImpl.java new file mode 100644 index 0000000..1e1e703 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/DataPermissionRuleFactoryImpl.java @@ -0,0 +1,62 @@ +package com.win.framework.datapermission.core.rule; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ArrayUtil; +import com.win.framework.datapermission.core.annotation.DataPermission; +import com.win.framework.datapermission.core.aop.DataPermissionContextHolder; +import lombok.RequiredArgsConstructor; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 默认的 DataPermissionRuleFactoryImpl 实现类 + * 支持通过 {@link DataPermissionContextHolder} 过滤数据权限 + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +public class DataPermissionRuleFactoryImpl implements DataPermissionRuleFactory { + + /** + * 数据权限规则数组 + */ + private final List rules; + + @Override + public List getDataPermissionRules() { + return rules; + } + + @Override // mappedStatementId 参数,暂时没有用。以后,可以基于 mappedStatementId + DataPermission 进行缓存 + public List getDataPermissionRule(String mappedStatementId) { + // 1. 无数据权限 + if (CollUtil.isEmpty(rules)) { + return Collections.emptyList(); + } + // 2. 未配置,则默认开启 + DataPermission dataPermission = DataPermissionContextHolder.get(); + if (dataPermission == null) { + return rules; + } + // 3. 已配置,但禁用 + if (!dataPermission.enable()) { + return Collections.emptyList(); + } + + // 4. 已配置,只选择部分规则 + if (ArrayUtil.isNotEmpty(dataPermission.includeRules())) { + return rules.stream().filter(rule -> ArrayUtil.contains(dataPermission.includeRules(), rule.getClass())) + .collect(Collectors.toList()); // 一般规则不会太多,所以不采用 HashSet 查询 + } + // 5. 已配置,只排除部分规则 + if (ArrayUtil.isNotEmpty(dataPermission.excludeRules())) { + return rules.stream().filter(rule -> !ArrayUtil.contains(dataPermission.excludeRules(), rule.getClass())) + .collect(Collectors.toList()); // 一般规则不会太多,所以不采用 HashSet 查询 + } + // 6. 已配置,全部规则 + return rules; + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java new file mode 100644 index 0000000..9eb160d --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java @@ -0,0 +1,205 @@ +package com.win.framework.datapermission.core.rule.dept; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.datapermission.core.rule.DataPermissionRule; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.framework.mybatis.core.util.MyBatisUtils; +import com.win.framework.security.core.LoginUser; +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import com.win.module.system.api.permission.PermissionApi; +import com.win.module.system.api.permission.dto.DeptDataPermissionRespDTO; +import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.sf.jsqlparser.expression.*; +import net.sf.jsqlparser.expression.operators.conditional.OrExpression; +import net.sf.jsqlparser.expression.operators.relational.EqualsTo; +import net.sf.jsqlparser.expression.operators.relational.ExpressionList; +import net.sf.jsqlparser.expression.operators.relational.InExpression; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * 基于部门的 {@link DataPermissionRule} 数据权限规则实现 + * + * 注意,使用 DeptDataPermissionRule 时,需要保证表中有 dept_id 部门编号的字段,可自定义。 + * + * 实际业务场景下,会存在一个经典的问题?当用户修改部门时,冗余的 dept_id 是否需要修改? + * 1. 一般情况下,dept_id 不进行修改,则会导致用户看不到之前的数据。【win-server 采用该方案】 + * 2. 部分情况下,希望该用户还是能看到之前的数据,则有两种方式解决:【需要你改造该 DeptDataPermissionRule 的实现代码】 + * 1)编写洗数据的脚本,将 dept_id 修改成新部门的编号;【建议】 + * 最终过滤条件是 WHERE dept_id = ? + * 2)洗数据的话,可能涉及的数据量较大,也可以采用 user_id 进行过滤的方式,此时需要获取到 dept_id 对应的所有 user_id 用户编号; + * 最终过滤条件是 WHERE user_id IN (?, ?, ? ...) + * 3)想要保证原 dept_id 和 user_id 都可以看的到,此时使用 dept_id 和 user_id 一起过滤; + * 最终过滤条件是 WHERE dept_id = ? OR user_id IN (?, ?, ? ...) + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Slf4j +public class DeptDataPermissionRule implements DataPermissionRule { + + /** + * LoginUser 的 Context 缓存 Key + */ + protected static final String CONTEXT_KEY = DeptDataPermissionRule.class.getSimpleName(); + + private static final String DEPT_COLUMN_NAME = "dept_id"; + private static final String USER_COLUMN_NAME = "user_id"; + + static final Expression EXPRESSION_NULL = new NullValue(); + + private final PermissionApi permissionApi; + + /** + * 基于部门的表字段配置 + * 一般情况下,每个表的部门编号字段是 dept_id,通过该配置自定义。 + * + * key:表名 + * value:字段名 + */ + private final Map deptColumns = new HashMap<>(); + /** + * 基于用户的表字段配置 + * 一般情况下,每个表的部门编号字段是 dept_id,通过该配置自定义。 + * + * key:表名 + * value:字段名 + */ + private final Map userColumns = new HashMap<>(); + /** + * 所有表名,是 {@link #deptColumns} 和 {@link #userColumns} 的合集 + */ + private final Set TABLE_NAMES = new HashSet<>(); + + @Override + public Set getTableNames() { + return TABLE_NAMES; + } + + @Override + public Expression getExpression(String tableName, Alias tableAlias) { + // 只有有登陆用户的情况下,才进行数据权限的处理 + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + if (loginUser == null) { + return null; + } + // 只有管理员类型的用户,才进行数据权限的处理 + if (ObjectUtil.notEqual(loginUser.getUserType(), UserTypeEnum.ADMIN.getValue())) { + return null; + } + + // 获得数据权限 + DeptDataPermissionRespDTO deptDataPermission = loginUser.getContext(CONTEXT_KEY, DeptDataPermissionRespDTO.class); + // 从上下文中拿不到,则调用逻辑进行获取 + if (deptDataPermission == null) { + deptDataPermission = permissionApi.getDeptDataPermission(loginUser.getId()).getCheckedData(); + if (deptDataPermission == null) { + log.error("[getExpression][LoginUser({}) 获取数据权限为 null]", JsonUtils.toJsonString(loginUser)); + throw new NullPointerException(String.format("LoginUser(%d) Table(%s/%s) 未返回数据权限", + loginUser.getId(), tableName, tableAlias.getName())); + } + // 添加到上下文中,避免重复计算 + loginUser.setContext(CONTEXT_KEY, deptDataPermission); + } + + // 情况一,如果是 ALL 可查看全部,则无需拼接条件 + if (deptDataPermission.getAll()) { + return null; + } + + // 情况二,即不能查看部门,又不能查看自己,则说明 100% 无权限 + if (CollUtil.isEmpty(deptDataPermission.getDeptIds()) + && Boolean.FALSE.equals(deptDataPermission.getSelf())) { + return new EqualsTo(null, null); // WHERE null = null,可以保证返回的数据为空 + } + + // 情况三,拼接 Dept 和 User 的条件,最后组合 + Expression deptExpression = buildDeptExpression(tableName,tableAlias, deptDataPermission.getDeptIds()); + Expression userExpression = buildUserExpression(tableName, tableAlias, deptDataPermission.getSelf(), loginUser.getId()); + if (deptExpression == null && userExpression == null) { + // TODO 芋艿:获得不到条件的时候,暂时不抛出异常,而是不返回数据 + log.warn("[getExpression][LoginUser({}) Table({}/{}) DeptDataPermission({}) 构建的条件为空]", + JsonUtils.toJsonString(loginUser), tableName, tableAlias, JsonUtils.toJsonString(deptDataPermission)); +// throw new NullPointerException(String.format("LoginUser(%d) Table(%s/%s) 构建的条件为空", +// loginUser.getId(), tableName, tableAlias.getName())); + return EXPRESSION_NULL; + } + if (deptExpression == null) { + return userExpression; + } + if (userExpression == null) { + return deptExpression; + } + // 目前,如果有指定部门 + 可查看自己,采用 OR 条件。即,WHERE (dept_id IN ? OR user_id = ?) + return new Parenthesis(new OrExpression(deptExpression, userExpression)); + } + + private Expression buildDeptExpression(String tableName, Alias tableAlias, Set deptIds) { + // 如果不存在配置,则无需作为条件 + String columnName = deptColumns.get(tableName); + if (StrUtil.isEmpty(columnName)) { + return null; + } + // 如果为空,则无条件 + if (CollUtil.isEmpty(deptIds)) { + return null; + } + // 拼接条件 + return new InExpression(MyBatisUtils.buildColumn(tableName, tableAlias, columnName), + new ExpressionList(CollectionUtils.convertList(deptIds, LongValue::new))); + } + + private Expression buildUserExpression(String tableName, Alias tableAlias, Boolean self, Long userId) { + // 如果不查看自己,则无需作为条件 + if (Boolean.FALSE.equals(self)) { + return null; + } + String columnName = userColumns.get(tableName); + if (StrUtil.isEmpty(columnName)) { + return null; + } + // 拼接条件 + return new EqualsTo(MyBatisUtils.buildColumn(tableName, tableAlias, columnName), new LongValue(userId)); + } + + // ==================== 添加配置 ==================== + + public void addDeptColumn(Class entityClass) { + addDeptColumn(entityClass, DEPT_COLUMN_NAME); + } + + public void addDeptColumn(Class entityClass, String columnName) { + String tableName = TableInfoHelper.getTableInfo(entityClass).getTableName(); + addDeptColumn(tableName, columnName); + } + + public void addDeptColumn(String tableName, String columnName) { + deptColumns.put(tableName, columnName); + TABLE_NAMES.add(tableName); + } + + public void addUserColumn(Class entityClass) { + addUserColumn(entityClass, USER_COLUMN_NAME); + } + + public void addUserColumn(Class entityClass, String columnName) { + String tableName = TableInfoHelper.getTableInfo(entityClass).getTableName(); + addUserColumn(tableName, columnName); + } + + public void addUserColumn(String tableName, String columnName) { + userColumns.put(tableName, columnName); + TABLE_NAMES.add(tableName); + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/dept/DeptDataPermissionRuleCustomizer.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/dept/DeptDataPermissionRuleCustomizer.java new file mode 100644 index 0000000..ae4ca72 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/dept/DeptDataPermissionRuleCustomizer.java @@ -0,0 +1,20 @@ +package com.win.framework.datapermission.core.rule.dept; + +/** + * {@link DeptDataPermissionRule} 的自定义配置接口 + * + * @author 芋道源码 + */ +@FunctionalInterface +public interface DeptDataPermissionRuleCustomizer { + + /** + * 自定义该权限规则 + * 1. 调用 {@link DeptDataPermissionRule#addDeptColumn(Class, String)} 方法,配置基于 dept_id 的过滤规则 + * 2. 调用 {@link DeptDataPermissionRule#addUserColumn(Class, String)} 方法,配置基于 user_id 的过滤规则 + * + * @param rule 权限规则 + */ + void customize(DeptDataPermissionRule rule); + +} diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/dept/package-info.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/dept/package-info.java new file mode 100644 index 0000000..f372520 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/rule/dept/package-info.java @@ -0,0 +1,6 @@ +/** + * 基于部门的数据权限规则 + * + * @author 芋道源码 + */ +package com.win.framework.datapermission.core.rule.dept; diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/util/DataPermissionUtils.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/util/DataPermissionUtils.java new file mode 100644 index 0000000..3511967 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/core/util/DataPermissionUtils.java @@ -0,0 +1,63 @@ +package com.win.framework.datapermission.core.util; + +import com.win.framework.datapermission.core.annotation.DataPermission; +import com.win.framework.datapermission.core.aop.DataPermissionContextHolder; +import lombok.SneakyThrows; + +import java.util.concurrent.Callable; + +/** + * 数据权限 Util + * + * @author 芋道源码 + */ +public class DataPermissionUtils { + + private static DataPermission DATA_PERMISSION_DISABLE; + + @DataPermission(enable = false) + @SneakyThrows + private static DataPermission getDisableDataPermissionDisable() { + if (DATA_PERMISSION_DISABLE == null) { + DATA_PERMISSION_DISABLE = DataPermissionUtils.class + .getDeclaredMethod("getDisableDataPermissionDisable") + .getAnnotation(DataPermission.class); + } + return DATA_PERMISSION_DISABLE; + } + + /** + * 忽略数据权限,执行对应的逻辑 + * + * @param runnable 逻辑 + */ + public static void executeIgnore(Runnable runnable) { + DataPermission dataPermission = getDisableDataPermissionDisable(); + DataPermissionContextHolder.add(dataPermission); + try { + // 执行 runnable + runnable.run(); + } finally { + DataPermissionContextHolder.remove(); + } + } + + /** + * 忽略数据权限,执行对应的逻辑 + * + * @param callable 逻辑 + * @return 执行结果 + */ + @SneakyThrows + public static T executeIgnore(Callable callable) { + DataPermission dataPermission = getDisableDataPermissionDisable(); + DataPermissionContextHolder.add(dataPermission); + try { + // 执行 callable + return callable.call(); + } finally { + DataPermissionContextHolder.remove(); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/package-info.java b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/package-info.java new file mode 100644 index 0000000..241e474 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/java/com/win/framework/datapermission/package-info.java @@ -0,0 +1,4 @@ +/** + * 基于 JSqlParser 解析 SQL,增加数据权限的 WHERE 条件 + */ +package com.win.framework.datapermission; diff --git a/win-framework/win-spring-boot-starter-biz-data-permission/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..afa7b29 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-data-permission/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +com.win.framework.datapermission.config.WinDataPermissionAutoConfiguration +com.win.framework.datapermission.config.WinDeptDataPermissionAutoConfiguration diff --git a/win-framework/win-spring-boot-starter-biz-ip/pom.xml b/win-framework/win-spring-boot-starter-biz-ip/pom.xml new file mode 100644 index 0000000..afec64e --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-ip/pom.xml @@ -0,0 +1,47 @@ + + + + com.win + win-framework + ${revision} + + 4.0.0 + win-spring-boot-starter-biz-ip + jar + + ${project.artifactId} + IP 拓展,支持如下功能: + 1. IP 功能:查询 IP 对应的城市信息 + 基于 https://gitee.com/lionsoul/ip2region 实现 + 2. 城市功能:查询城市编码对应的城市信息 + 基于 https://github.com/modood/Administrative-divisions-of-China 实现 + + https://github.com/YunaiV/ruoyi-vue-pro + + + + com.win + win-common + + + + + org.lionsoul + ip2region + + + + org.projectlombok + lombok + + + + org.slf4j + slf4j-api + provided + + + + diff --git a/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/Area.java b/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/Area.java new file mode 100644 index 0000000..b981541 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/Area.java @@ -0,0 +1,55 @@ +package com.win.framework.ip.core; + +import com.win.framework.ip.core.enums.AreaTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 区域节点,包括国家、省份、城市、地区等信息 + * + * 数据可见 resources/area.csv 文件 + * + * @author 芋道源码 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Area { + + /** + * 编号 - 全球,即根目录 + */ + public static final Integer ID_GLOBAL = 0; + /** + * 编号 - 中国 + */ + public static final Integer ID_CHINA = 1; + + /** + * 编号 + */ + private Integer id; + /** + * 名字 + */ + private String name; + /** + * 类型 + * + * 枚举 {@link AreaTypeEnum} + */ + private Integer type; + + /** + * 父节点 + */ + private Area parent; + /** + * 子节点 + */ + private List children; + +} diff --git a/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/enums/AreaTypeEnum.java b/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/enums/AreaTypeEnum.java new file mode 100644 index 0000000..57c7144 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/enums/AreaTypeEnum.java @@ -0,0 +1,39 @@ +package com.win.framework.ip.core.enums; + +import com.win.framework.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 区域类型枚举 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum AreaTypeEnum implements IntArrayValuable { + + COUNTRY(1, "国家"), + PROVINCE(2, "省份"), + CITY(3, "城市"), + DISTRICT(4, "地区"), // 县、镇、区等 + ; + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(AreaTypeEnum::getType).toArray(); + + /** + * 类型 + */ + private final Integer type; + /** + * 名字 + */ + private final String name; + + @Override + public int[] array() { + return ARRAYS; + } +} diff --git a/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/utils/AreaUtils.java b/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/utils/AreaUtils.java new file mode 100644 index 0000000..3b079d6 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/utils/AreaUtils.java @@ -0,0 +1,214 @@ +package com.win.framework.ip.core.utils; + +import cn.hutool.core.io.resource.ResourceUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.text.csv.CsvRow; +import cn.hutool.core.text.csv.CsvUtil; +import com.win.framework.common.util.object.ObjectUtils; +import com.win.framework.ip.core.Area; +import com.win.framework.ip.core.enums.AreaTypeEnum; +import lombok.NonNull; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +import static com.win.framework.common.util.collection.CollectionUtils.convertList; +import static com.win.framework.common.util.collection.CollectionUtils.findFirst; + +/** + * 区域工具类 + * + * @author 芋道源码 + */ +@Slf4j +public class AreaUtils { + + /** + * 初始化 SEARCHER + */ + @SuppressWarnings("InstantiationOfUtilityClass") + private final static AreaUtils INSTANCE = new AreaUtils(); + + /** + * Area 内存缓存,提升访问速度 + */ + private static Map areas; + + private AreaUtils() { + long now = System.currentTimeMillis(); + areas = new HashMap<>(); + areas.put(Area.ID_GLOBAL, new Area(Area.ID_GLOBAL, "全球", 0, + null, new ArrayList<>())); + // 从 csv 中加载数据 + List rows = CsvUtil.getReader().read(ResourceUtil.getUtf8Reader("area.csv")).getRows(); + rows.remove(0); // 删除 header + for (CsvRow row : rows) { + // 创建 Area 对象 + Area area = new Area(Integer.valueOf(row.get(0)), row.get(1), Integer.valueOf(row.get(2)), + null, new ArrayList<>()); + // 添加到 areas 中 + areas.put(area.getId(), area); + } + + // 构建父子关系:因为 Area 中没有 parentId 字段,所以需要重复读取 + for (CsvRow row : rows) { + Area area = areas.get(Integer.valueOf(row.get(0))); // 自己 + Area parent = areas.get(Integer.valueOf(row.get(3))); // 父 + Assert.isTrue(area != parent, "{}:父子节点相同", area.getName()); + area.setParent(parent); + parent.getChildren().add(area); + } + log.info("启动加载 AreaUtils 成功,耗时 ({}) 毫秒", System.currentTimeMillis() - now); + } + + /** + * 获得指定编号对应的区域 + * + * @param id 区域编号 + * @return 区域 + */ + public static Area getArea(Integer id) { + return areas.get(id); + } + + /** + * 获得指定区域对应的编号 + * + * @param pathStr 区域路径,例如说:河南省/石家庄市/新华区 + * @return 区域 + */ + public static Area parseArea(String pathStr) { + String[] paths = pathStr.split("/"); + Area area = null; + for (String path : paths) { + if (area == null) { + area = findFirst(areas.values(), item -> item.getName().equals(path)); + } else { + area = findFirst(area.getChildren(), item -> item.getName().equals(path)); + } + } + return area; + } + + /** + * 获取所有节点的全路径名称如:河南省/石家庄市/新华区 + * + * @param areas 地区树 + * @return 所有节点的全路径名称 + */ + public static List getAreaNodePathList(List areas) { + List paths = new ArrayList<>(); + areas.forEach(area -> getAreaNodePathList(area, "", paths)); + return paths; + } + + /** + * 构建一棵树的所有节点的全路径名称,并将其存储为 "祖先/父级/子级" 的形式 + * + * @param node 父节点 + * @param path 全路径名称 + * @param paths 全路径名称列表,省份/城市/地区 + */ + private static void getAreaNodePathList(Area node, String path, List paths) { + if (node == null) { + return; + } + // 构建当前节点的路径 + String currentPath = path.isEmpty() ? node.getName() : path + "/" + node.getName(); + paths.add(currentPath); + // 递归遍历子节点 + for (Area child : node.getChildren()) { + getAreaNodePathList(child, currentPath, paths); + } + } + + /** + * 格式化区域 + * + * @param id 区域编号 + * @return 格式化后的区域 + */ + public static String format(Integer id) { + return format(id, " "); + } + + /** + * 格式化区域 + * + * 例如说: + * 1. id = “静安区”时:上海 上海市 静安区 + * 2. id = “上海市”时:上海 上海市 + * 3. id = “上海”时:上海 + * 4. id = “美国”时:美国 + * 当区域在中国时,默认不显示中国 + * + * @param id 区域编号 + * @param separator 分隔符 + * @return 格式化后的区域 + */ + public static String format(Integer id, String separator) { + // 获得区域 + Area area = areas.get(id); + if (area == null) { + return null; + } + + // 格式化 + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < AreaTypeEnum.values().length; i++) { // 避免死循环 + sb.insert(0, area.getName()); + // “递归”父节点 + area = area.getParent(); + if (area == null + || ObjectUtils.equalsAny(area.getId(), Area.ID_GLOBAL, Area.ID_CHINA)) { // 跳过父节点为中国的情况 + break; + } + sb.insert(0, separator); + } + return sb.toString(); + } + + /** + * 获取指定类型的区域列表 + * + * @param type 区域类型 + * @param func 转换函数 + * @param 结果类型 + * @return 区域列表 + */ + public static List getByType(AreaTypeEnum type, Function func) { + return convertList(areas.values(), func, area -> type.getType().equals(area.getType())); + } + + /** + * 根据区域编号、上级区域类型,获取上级区域编号 + * + * @param id 区域编号 + * @param type 区域类型 + * @return 上级区域编号 + */ + public static Integer getParentIdByType(Integer id, @NonNull AreaTypeEnum type) { + for (int i = 0; i < Byte.MAX_VALUE; i++) { + Area area = AreaUtils.getArea(id); + if (area == null) { + return null; + } + // 情况一:匹配到,返回它 + if (type.getType().equals(area.getType())) { + return area.getId(); + } + // 情况二:找到根节点,返回空 + if (area.getParent() == null || area.getParent().getId() == null) { + return null; + } + // 其它:继续向上查找 + id = area.getParent().getId(); + } + return null; + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/utils/IPUtils.java b/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/utils/IPUtils.java new file mode 100644 index 0000000..2bef970 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/core/utils/IPUtils.java @@ -0,0 +1,87 @@ +package com.win.framework.ip.core.utils; + +import cn.hutool.core.io.resource.ResourceUtil; +import com.win.framework.ip.core.Area; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.lionsoul.ip2region.xdb.Searcher; + +import java.io.IOException; + +/** + * IP 工具类 + * + * IP 数据源来自 ip2region.xdb 精简版,基于 项目 + * + * @author wanglhup + */ +@Slf4j +public class IPUtils { + + /** + * 初始化 SEARCHER + */ + @SuppressWarnings("InstantiationOfUtilityClass") + private final static IPUtils INSTANCE = new IPUtils(); + + /** + * IP 查询器,启动加载到内存中 + */ + private static Searcher SEARCHER; + + /** + * 私有化构造 + */ + private IPUtils() { + try { + long now = System.currentTimeMillis(); + byte[] bytes = ResourceUtil.readBytes("ip2region.xdb"); + SEARCHER = Searcher.newWithBuffer(bytes); + log.info("启动加载 IPUtils 成功,耗时 ({}) 毫秒", System.currentTimeMillis() - now); + } catch (IOException e) { + log.error("启动加载 IPUtils 失败", e); + } + } + + /** + * 查询 IP 对应的地区编号 + * + * @param ip IP 地址,格式为 127.0.0.1 + * @return 地区id + */ + @SneakyThrows + public static Integer getAreaId(String ip) { + return Integer.parseInt(SEARCHER.search(ip.trim())); + } + + /** + * 查询 IP 对应的地区编号 + * + * @param ip IP 地址的时间戳,格式参考{@link Searcher#checkIP(String)} 的返回 + * @return 地区编号 + */ + @SneakyThrows + public static Integer getAreaId(long ip) { + return Integer.parseInt(SEARCHER.search(ip)); + } + + /** + * 查询 IP 对应的地区 + * + * @param ip IP 地址,格式为 127.0.0.1 + * @return 地区 + */ + public static Area getArea(String ip) { + return AreaUtils.getArea(getAreaId(ip)); + } + + /** + * 查询 IP 对应的地区 + * + * @param ip IP 地址的时间戳,格式参考{@link Searcher#checkIP(String)} 的返回 + * @return 地区 + */ + public static Area getArea(long ip) { + return AreaUtils.getArea(getAreaId(ip)); + } +} diff --git a/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/package-info.java b/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/package-info.java new file mode 100644 index 0000000..5a89bd3 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-ip/src/main/java/com/win/framework/ip/package-info.java @@ -0,0 +1,11 @@ +/** + * IP 拓展,支持如下功能: + * + * 1. IP 功能:查询 IP 对应的城市信息 + * 基于 https://gitee.com/lionsoul/ip2region 实现 + * 2. 城市功能:查询城市编码对应的城市信息 + * 基于 https://github.com/modood/Administrative-divisions-of-China 实现 + * + * @author 芋道源码 + */ +package com.win.framework.ip; diff --git a/win-framework/win-spring-boot-starter-biz-ip/src/main/resources/area.csv b/win-framework/win-spring-boot-starter-biz-ip/src/main/resources/area.csv new file mode 100644 index 0000000..06954ba --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-ip/src/main/resources/area.csv @@ -0,0 +1,3662 @@ +id,name,type,parentId +1,中国,1,0 +2,蒙古,1,0 +3,朝鲜,1,0 +4,韩国,1,0 +5,日本,1,0 +6,菲律宾,1,0 +7,越南,1,0 +8,老挝,1,0 +9,柬埔寨,1,0 +10,缅甸,1,0 +11,泰国,1,0 +12,马来西亚,1,0 +13,文莱,1,0 +14,新加坡,1,0 +15,印度尼西亚,1,0 +16,东帝汶,1,0 +17,尼泊尔,1,0 +18,不丹,1,0 +19,孟加拉国,1,0 +20,印度,1,0 +21,巴基斯坦,1,0 +22,斯里兰卡,1,0 +23,马尔代夫,1,0 +24,哈萨克斯坦,1,0 +25,吉尔吉斯斯坦,1,0 +26,塔吉克斯坦,1,0 +27,乌兹别克斯坦,1,0 +28,土库曼斯坦,1,0 +29,阿富汗,1,0 +30,伊拉克,1,0 +31,伊朗,1,0 +32,叙利亚,1,0 +33,约旦,1,0 +34,黎巴嫩,1,0 +35,以色列,1,0 +36,巴勒斯坦,1,0 +37,沙特阿拉伯,1,0 +38,巴林,1,0 +39,卡塔尔,1,0 +40,科威特,1,0 +41,阿拉伯联合酋长国,1,0 +42,阿曼,1,0 +43,也门,1,0 +44,格鲁吉亚,1,0 +45,亚美尼亚,1,0 +46,阿塞拜疆,1,0 +47,土耳其,1,0 +48,塞浦路斯,1,0 +49,芬兰,1,0 +50,瑞典,1,0 +51,挪威,1,0 +52,冰岛,1,0 +53,丹麦,1,0 +54,爱沙尼亚,1,0 +55,拉脱维亚,1,0 +56,立陶宛,1,0 +57,白俄罗斯,1,0 +58,俄罗斯,1,0 +59,乌克兰,1,0 +60,摩尔多瓦,1,0 +61,波兰,1,0 +62,捷克,1,0 +63,斯洛伐克,1,0 +64,匈牙利,1,0 +65,德国,1,0 +66,奥地利,1,0 +67,瑞士,1,0 +68,列支敦士登,1,0 +69,英国,1,0 +70,爱尔兰,1,0 +71,荷兰,1,0 +72,比利时,1,0 +73,卢森堡,1,0 +74,法国,1,0 +75,摩纳哥,1,0 +76,罗马尼亚,1,0 +77,保加利亚,1,0 +78,塞尔维亚,1,0 +79,马其顿,1,0 +80,阿尔巴尼亚,1,0 +81,希腊,1,0 +82,斯洛文尼亚,1,0 +83,克罗地亚,1,0 +84,波斯尼亚和墨塞哥维那,1,0 +85,意大利,1,0 +86,梵蒂冈,1,0 +87,圣马力诺,1,0 +88,马耳他,1,0 +89,西班牙,1,0 +90,葡萄牙,1,0 +91,安道尔共和国,1,0 +92,埃及,1,0 +93,利比亚,1,0 +94,苏丹,1,0 +95,突尼斯,1,0 +96,阿尔及利亚,1,0 +97,摩洛哥,1,0 +98,亚速尔群岛,1,0 +99,马德拉群岛,1,0 +100,埃塞俄比亚,1,0 +101,厄立特里亚,1,0 +102,索马里,1,0 +103,吉布提,1,0 +104,肯尼亚,1,0 +105,坦桑尼亚,1,0 +106,乌干达,1,0 +107,卢旺达,1,0 +108,布隆迪,1,0 +109,塞舌尔,1,0 +110,圣多美及普林西比,1,0 +111,塞内加尔,1,0 +112,冈比亚,1,0 +113,马里,1,0 +114,布基纳法索,1,0 +115,几内亚,1,0 +116,几内亚比绍,1,0 +117,佛得角,1,0 +118,塞拉利昂,1,0 +119,利比里亚,1,0 +120,科特迪瓦,1,0 +121,加纳,1,0 +122,多哥,1,0 +123,贝宁,1,0 +124,尼日尔,1,0 +125,加那利群岛,1,0 +126,赞比亚,1,0 +127,安哥拉,1,0 +128,津巴布韦,1,0 +129,马拉维,1,0 +130,莫桑比克,1,0 +131,博茨瓦纳,1,0 +132,纳米比亚,1,0 +133,南非,1,0 +134,斯威士兰,1,0 +135,莱索托,1,0 +136,马达加斯加,1,0 +137,科摩罗,1,0 +138,毛里求斯,1,0 +139,留尼旺,1,0 +140,圣赫勒拿,1,0 +141,澳大利亚,1,0 +142,新西兰,1,0 +143,巴布亚新几内亚,1,0 +144,所罗门群岛,1,0 +145,瓦努阿图共和国,1,0 +146,密克罗尼西亚,1,0 +147,马绍尔群岛,1,0 +148,帕劳,1,0 +149,瑙鲁,1,0 +150,基里巴斯,1,0 +151,图瓦卢,1,0 +152,萨摩亚,1,0 +153,斐济,1,0 +154,汤加,1,0 +155,库克群岛,1,0 +156,关岛,1,0 +157,新喀里多尼亚,1,0 +158,法属波利尼西亚,1,0 +159,皮特凯恩岛,1,0 +160,瓦利斯与富图纳,1,0 +161,纽埃,1,0 +162,托克劳,1,0 +163,美属萨摩亚,1,0 +164,北马里亚纳,1,0 +165,加拿大,1,0 +166,美国,1,0 +167,墨西哥,1,0 +168,格陵兰,1,0 +169,危地马拉,1,0 +170,伯利兹,1,0 +171,萨尔瓦多,1,0 +172,洪都拉斯,1,0 +173,尼加拉瓜,1,0 +174,哥斯达黎加,1,0 +175,巴拿马,1,0 +176,巴哈马,1,0 +177,古巴,1,0 +178,牙买加,1,0 +179,海地,1,0 +180,多米尼加共和国,1,0 +181,安提瓜和巴布达,1,0 +182,圣基茨和尼维斯,1,0 +183,多米尼克,1,0 +184,圣卢西亚,1,0 +185,圣文森特和格林纳丁斯,1,0 +186,格林纳达,1,0 +187,巴巴多斯,1,0 +188,特立尼达和多巴哥,1,0 +189,波多黎各,1,0 +190,英属维尔京群岛,1,0 +191,美属维尔京群岛,1,0 +192,安圭拉,1,0 +193,蒙特塞拉特岛,1,0 +194,瓜德罗普,1,0 +195,马提尼克,1,0 +196,荷属安的列斯,1,0 +197,阿鲁巴,1,0 +198,特克斯和凯科斯群岛,1,0 +199,开曼群岛,1,0 +200,百慕大,1,0 +201,哥伦比亚,1,0 +202,委内瑞拉,1,0 +203,圭亚那,1,0 +204,法属圭亚那,1,0 +205,苏里南,1,0 +206,厄瓜多尔,1,0 +207,秘鲁,1,0 +208,玻利维亚,1,0 +209,巴西,1,0 +210,智利,1,0 +211,阿根廷,1,0 +212,乌拉圭,1,0 +213,巴拉圭,1,0 +214,波黑,1,0 +215,直布罗陀,1,0 +216,新喀里多尼亚群岛,1,0 +217,瓦利斯和富图纳群岛,1,0 +218,泽西岛,1,0 +219,黑山,1,0 +220,英属马恩岛,1,0 +221,尼日利亚,1,0 +222,喀麦隆,1,0 +223,加蓬,1,0 +224,乍得,1,0 +225,刚果共和国,1,0 +226,中非共和国,1,0 +227,南苏丹,1,0 +228,赤道几内亚,1,0 +229,毛里塔尼亚,1,0 +230,刚果民主共和国,1,0 +231,留尼汪岛,1,0 +232,格陵兰岛,1,0 +233,法罗群岛,1,0 +234,根西岛,1,0 +235,百慕大群岛,1,0 +236,圣皮埃尔和密克隆群岛,1,0 +237,法属圣马丁,1,0 +238,奥兰群岛,1,0 +239,北马里亚纳群岛,1,0 +240,库拉索,1,0 +241,博内尔岛,1,0 +242,圣马丁岛,1,0 +243,圣巴泰勒米岛,1,0 +244,福克兰群岛,1,0 +245,圣多美和普林西比,1,0 +246,英属印度洋领地,1,0 +247,东萨摩亚,1,0 +248,诺福克岛,1,0 +110000,北京,2,1 +120000,天津,2,1 +130000,河北省,2,1 +140000,山西省,2,1 +150000,内蒙古自治区,2,1 +210000,辽宁省,2,1 +220000,吉林省,2,1 +230000,黑龙江省,2,1 +310000,上海,2,1 +320000,江苏省,2,1 +330000,浙江省,2,1 +340000,安徽省,2,1 +350000,福建省,2,1 +360000,江西省,2,1 +370000,山东省,2,1 +410000,河南省,2,1 +420000,湖北省,2,1 +430000,湖南省,2,1 +440000,广东省,2,1 +450000,广西壮族自治区,2,1 +460000,海南省,2,1 +500000,重庆,2,1 +510000,四川省,2,1 +520000,贵州省,2,1 +530000,云南省,2,1 +540000,西藏自治区,2,1 +610000,陕西省,2,1 +620000,甘肃省,2,1 +630000,青海省,2,1 +640000,宁夏回族自治区,2,1 +650000,新疆维吾尔自治区,2,1 +110100,北京市,3,110000 +120100,天津市,3,120000 +130100,石家庄市,3,130000 +130200,唐山市,3,130000 +130300,秦皇岛市,3,130000 +130400,邯郸市,3,130000 +130500,邢台市,3,130000 +130600,保定市,3,130000 +130700,张家口市,3,130000 +130800,承德市,3,130000 +130900,沧州市,3,130000 +131000,廊坊市,3,130000 +131100,衡水市,3,130000 +140100,太原市,3,140000 +140200,大同市,3,140000 +140300,阳泉市,3,140000 +140400,长治市,3,140000 +140500,晋城市,3,140000 +140600,朔州市,3,140000 +140700,晋中市,3,140000 +140800,运城市,3,140000 +140900,忻州市,3,140000 +141000,临汾市,3,140000 +141100,吕梁市,3,140000 +150100,呼和浩特市,3,150000 +150200,包头市,3,150000 +150300,乌海市,3,150000 +150400,赤峰市,3,150000 +150500,通辽市,3,150000 +150600,鄂尔多斯市,3,150000 +150700,呼伦贝尔市,3,150000 +150800,巴彦淖尔市,3,150000 +150900,乌兰察布市,3,150000 +152200,兴安盟,3,150000 +152500,锡林郭勒盟,3,150000 +152900,阿拉善盟,3,150000 +210100,沈阳市,3,210000 +210200,大连市,3,210000 +210300,鞍山市,3,210000 +210400,抚顺市,3,210000 +210500,本溪市,3,210000 +210600,丹东市,3,210000 +210700,锦州市,3,210000 +210800,营口市,3,210000 +210900,阜新市,3,210000 +211000,辽阳市,3,210000 +211100,盘锦市,3,210000 +211200,铁岭市,3,210000 +211300,朝阳市,3,210000 +211400,葫芦岛市,3,210000 +220100,长春市,3,220000 +220200,吉林市,3,220000 +220300,四平市,3,220000 +220400,辽源市,3,220000 +220500,通化市,3,220000 +220600,白山市,3,220000 +220700,松原市,3,220000 +220800,白城市,3,220000 +222400,延边朝鲜族自治州,3,220000 +230100,哈尔滨市,3,230000 +230200,齐齐哈尔市,3,230000 +230300,鸡西市,3,230000 +230400,鹤岗市,3,230000 +230500,双鸭山市,3,230000 +230600,大庆市,3,230000 +230700,伊春市,3,230000 +230800,佳木斯市,3,230000 +230900,七台河市,3,230000 +231000,牡丹江市,3,230000 +231100,黑河市,3,230000 +231200,绥化市,3,230000 +232700,大兴安岭地区,3,230000 +310100,上海市,3,310000 +320100,南京市,3,320000 +320200,无锡市,3,320000 +320300,徐州市,3,320000 +320400,常州市,3,320000 +320500,苏州市,3,320000 +320600,南通市,3,320000 +320700,连云港市,3,320000 +320800,淮安市,3,320000 +320900,盐城市,3,320000 +321000,扬州市,3,320000 +321100,镇江市,3,320000 +321200,泰州市,3,320000 +321300,宿迁市,3,320000 +330100,杭州市,3,330000 +330200,宁波市,3,330000 +330300,温州市,3,330000 +330400,嘉兴市,3,330000 +330500,湖州市,3,330000 +330600,绍兴市,3,330000 +330700,金华市,3,330000 +330800,衢州市,3,330000 +330900,舟山市,3,330000 +331000,台州市,3,330000 +331100,丽水市,3,330000 +340100,合肥市,3,340000 +340200,芜湖市,3,340000 +340300,蚌埠市,3,340000 +340400,淮南市,3,340000 +340500,马鞍山市,3,340000 +340600,淮北市,3,340000 +340700,铜陵市,3,340000 +340800,安庆市,3,340000 +341000,黄山市,3,340000 +341100,滁州市,3,340000 +341200,阜阳市,3,340000 +341300,宿州市,3,340000 +341500,六安市,3,340000 +341600,亳州市,3,340000 +341700,池州市,3,340000 +341800,宣城市,3,340000 +350100,福州市,3,350000 +350200,厦门市,3,350000 +350300,莆田市,3,350000 +350400,三明市,3,350000 +350500,泉州市,3,350000 +350600,漳州市,3,350000 +350700,南平市,3,350000 +350800,龙岩市,3,350000 +350900,宁德市,3,350000 +360100,南昌市,3,360000 +360200,景德镇市,3,360000 +360300,萍乡市,3,360000 +360400,九江市,3,360000 +360500,新余市,3,360000 +360600,鹰潭市,3,360000 +360700,赣州市,3,360000 +360800,吉安市,3,360000 +360900,宜春市,3,360000 +361000,抚州市,3,360000 +361100,上饶市,3,360000 +370100,济南市,3,370000 +370200,青岛市,3,370000 +370300,淄博市,3,370000 +370400,枣庄市,3,370000 +370500,东营市,3,370000 +370600,烟台市,3,370000 +370700,潍坊市,3,370000 +370800,济宁市,3,370000 +370900,泰安市,3,370000 +371000,威海市,3,370000 +371100,日照市,3,370000 +371300,临沂市,3,370000 +371400,德州市,3,370000 +371500,聊城市,3,370000 +371600,滨州市,3,370000 +371700,菏泽市,3,370000 +410100,郑州市,3,410000 +410200,开封市,3,410000 +410300,洛阳市,3,410000 +410400,平顶山市,3,410000 +410500,安阳市,3,410000 +410600,鹤壁市,3,410000 +410700,新乡市,3,410000 +410800,焦作市,3,410000 +410900,濮阳市,3,410000 +411000,许昌市,3,410000 +411100,漯河市,3,410000 +411200,三门峡市,3,410000 +411300,南阳市,3,410000 +411400,商丘市,3,410000 +411500,信阳市,3,410000 +411600,周口市,3,410000 +411700,驻马店市,3,410000 +419000,省直辖县级行政区划,3,410000 +420100,武汉市,3,420000 +420200,黄石市,3,420000 +420300,十堰市,3,420000 +420500,宜昌市,3,420000 +420600,襄阳市,3,420000 +420700,鄂州市,3,420000 +420800,荆门市,3,420000 +420900,孝感市,3,420000 +421000,荆州市,3,420000 +421100,黄冈市,3,420000 +421200,咸宁市,3,420000 +421300,随州市,3,420000 +422800,恩施土家族苗族自治州,3,420000 +429000,省直辖县级行政区划,3,420000 +430100,长沙市,3,430000 +430200,株洲市,3,430000 +430300,湘潭市,3,430000 +430400,衡阳市,3,430000 +430500,邵阳市,3,430000 +430600,岳阳市,3,430000 +430700,常德市,3,430000 +430800,张家界市,3,430000 +430900,益阳市,3,430000 +431000,郴州市,3,430000 +431100,永州市,3,430000 +431200,怀化市,3,430000 +431300,娄底市,3,430000 +433100,湘西土家族苗族自治州,3,430000 +440100,广州市,3,440000 +440200,韶关市,3,440000 +440300,深圳市,3,440000 +440400,珠海市,3,440000 +440500,汕头市,3,440000 +440600,佛山市,3,440000 +440700,江门市,3,440000 +440800,湛江市,3,440000 +440900,茂名市,3,440000 +441200,肇庆市,3,440000 +441300,惠州市,3,440000 +441400,梅州市,3,440000 +441500,汕尾市,3,440000 +441600,河源市,3,440000 +441700,阳江市,3,440000 +441800,清远市,3,440000 +441900,东莞市,3,440000 +441901,莞城区,4,441900 +441902,南城区,4,441900 +441904,万江区,4,441900 +441905,石碣镇,4,441900 +441906,石龙镇,4,441900 +441907,茶山镇,4,441900 +441908,石排镇,4,441900 +441909,企石镇,4,441900 +441910,横沥镇,4,441900 +441911,桥头镇,4,441900 +441912,谢岗镇,4,441900 +441913,东坑镇,4,441900 +441914,常平镇,4,441900 +441915,寮步镇,4,441900 +441916,大朗镇,4,441900 +441917,麻涌镇,4,441900 +441918,中堂镇,4,441900 +441919,高埗镇,4,441900 +441920,樟木头镇,4,441900 +441921,大岭山镇,4,441900 +441922,望牛墩镇,4,441900 +441923,黄江镇,4,441900 +441924,洪梅镇,4,441900 +441925,清溪镇,4,441900 +441926,沙田镇,4,441900 +441927,道滘镇,4,441900 +441928,塘厦镇,4,441900 +441929,虎门镇,4,441900 +441930,厚街镇,4,441900 +441931,凤岗镇,4,441900 +441932,长安镇,4,441900 +442000,中山市,3,440000 +442001,石岐街道,4,442000 +442002,东区街道,4,442000 +442003,中山港街道,4,442000 +442004,西区街道,4,442000 +442005,南区街道,4,442000 +442006,五桂山街道,4,442000 +442007,民众街道,4,442000 +442008,南朗街道,4,442000 +442009,黄圃镇,4,442000 +442010,东凤镇,4,442000 +442011,古镇镇,4,442000 +442012,沙溪镇,4,442000 +442013,坦洲镇,4,442000 +442014,港口镇,4,442000 +442015,三角镇,4,442000 +442016,横栏镇,4,442000 +442017,南头镇,4,442000 +442018,阜沙镇,4,442000 +442019,三乡镇,4,442000 +442020,板芙镇,4,442000 +442021,大涌镇,4,442000 +442022,神湾镇,4,442000 +442023,小榄镇,4,442000 +445100,潮州市,3,440000 +445200,揭阳市,3,440000 +445300,云浮市,3,440000 +450100,南宁市,3,450000 +450200,柳州市,3,450000 +450300,桂林市,3,450000 +450400,梧州市,3,450000 +450500,北海市,3,450000 +450600,防城港市,3,450000 +450700,钦州市,3,450000 +450800,贵港市,3,450000 +450900,玉林市,3,450000 +451000,百色市,3,450000 +451100,贺州市,3,450000 +451200,河池市,3,450000 +451300,来宾市,3,450000 +451400,崇左市,3,450000 +460100,海口市,3,460000 +460200,三亚市,3,460000 +460300,三沙市,3,460000 +460400,儋州市,3,460000 +469000,省直辖县级行政区划,3,460000 +500100,重庆市,3,500000 +510100,成都市,3,510000 +510300,自贡市,3,510000 +510400,攀枝花市,3,510000 +510500,泸州市,3,510000 +510600,德阳市,3,510000 +510700,绵阳市,3,510000 +510800,广元市,3,510000 +510900,遂宁市,3,510000 +511000,内江市,3,510000 +511100,乐山市,3,510000 +511300,南充市,3,510000 +511400,眉山市,3,510000 +511500,宜宾市,3,510000 +511600,广安市,3,510000 +511700,达州市,3,510000 +511800,雅安市,3,510000 +511900,巴中市,3,510000 +512000,资阳市,3,510000 +513200,阿坝藏族羌族自治州,3,510000 +513300,甘孜藏族自治州,3,510000 +513400,凉山彝族自治州,3,510000 +520100,贵阳市,3,520000 +520200,六盘水市,3,520000 +520300,遵义市,3,520000 +520400,安顺市,3,520000 +520500,毕节市,3,520000 +520600,铜仁市,3,520000 +522300,黔西南布依族苗族自治州,3,520000 +522600,黔东南苗族侗族自治州,3,520000 +522700,黔南布依族苗族自治州,3,520000 +530100,昆明市,3,530000 +530300,曲靖市,3,530000 +530400,玉溪市,3,530000 +530500,保山市,3,530000 +530600,昭通市,3,530000 +530700,丽江市,3,530000 +530800,普洱市,3,530000 +530900,临沧市,3,530000 +532300,楚雄彝族自治州,3,530000 +532500,红河哈尼族彝族自治州,3,530000 +532600,文山壮族苗族自治州,3,530000 +532800,西双版纳傣族自治州,3,530000 +532900,大理白族自治州,3,530000 +533100,德宏傣族景颇族自治州,3,530000 +533300,怒江傈僳族自治州,3,530000 +533400,迪庆藏族自治州,3,530000 +540100,拉萨市,3,540000 +540200,日喀则市,3,540000 +540300,昌都市,3,540000 +540400,林芝市,3,540000 +540500,山南市,3,540000 +540600,那曲市,3,540000 +542500,阿里地区,3,540000 +610100,西安市,3,610000 +610200,铜川市,3,610000 +610300,宝鸡市,3,610000 +610400,咸阳市,3,610000 +610500,渭南市,3,610000 +610600,延安市,3,610000 +610700,汉中市,3,610000 +610800,榆林市,3,610000 +610900,安康市,3,610000 +611000,商洛市,3,610000 +620100,兰州市,3,620000 +620200,嘉峪关市,3,620000 +620300,金昌市,3,620000 +620400,白银市,3,620000 +620500,天水市,3,620000 +620600,武威市,3,620000 +620700,张掖市,3,620000 +620800,平凉市,3,620000 +620900,酒泉市,3,620000 +621000,庆阳市,3,620000 +621100,定西市,3,620000 +621200,陇南市,3,620000 +622900,临夏回族自治州,3,620000 +623000,甘南藏族自治州,3,620000 +630100,西宁市,3,630000 +630200,海东市,3,630000 +632200,海北藏族自治州,3,630000 +632300,黄南藏族自治州,3,630000 +632500,海南藏族自治州,3,630000 +632600,果洛藏族自治州,3,630000 +632700,玉树藏族自治州,3,630000 +632800,海西蒙古族藏族自治州,3,630000 +640100,银川市,3,640000 +640200,石嘴山市,3,640000 +640300,吴忠市,3,640000 +640400,固原市,3,640000 +640500,中卫市,3,640000 +650100,乌鲁木齐市,3,650000 +650200,克拉玛依市,3,650000 +650400,吐鲁番市,3,650000 +650500,哈密市,3,650000 +652300,昌吉回族自治州,3,650000 +652700,博尔塔拉蒙古自治州,3,650000 +652800,巴音郭楞蒙古自治州,3,650000 +652900,阿克苏地区,3,650000 +653000,克孜勒苏柯尔克孜自治州,3,650000 +653100,喀什地区,3,650000 +653200,和田地区,3,650000 +654000,伊犁哈萨克自治州,3,650000 +654200,塔城地区,3,650000 +654300,阿勒泰地区,3,650000 +659000,自治区直辖县级行政区划,3,650000 +110101,东城区,4,110100 +110102,西城区,4,110100 +110105,朝阳区,4,110100 +110106,丰台区,4,110100 +110107,石景山区,4,110100 +110108,海淀区,4,110100 +110109,门头沟区,4,110100 +110111,房山区,4,110100 +110112,通州区,4,110100 +110113,顺义区,4,110100 +110114,昌平区,4,110100 +110115,大兴区,4,110100 +110116,怀柔区,4,110100 +110117,平谷区,4,110100 +110118,密云区,4,110100 +110119,延庆区,4,110100 +120101,和平区,4,120100 +120102,河东区,4,120100 +120103,河西区,4,120100 +120104,南开区,4,120100 +120105,河北区,4,120100 +120106,红桥区,4,120100 +120110,东丽区,4,120100 +120111,西青区,4,120100 +120112,津南区,4,120100 +120113,北辰区,4,120100 +120114,武清区,4,120100 +120115,宝坻区,4,120100 +120116,滨海新区,4,120100 +120117,宁河区,4,120100 +120118,静海区,4,120100 +120119,蓟州区,4,120100 +130102,长安区,4,130100 +130104,桥西区,4,130100 +130105,新华区,4,130100 +130107,井陉矿区,4,130100 +130108,裕华区,4,130100 +130109,藁城区,4,130100 +130110,鹿泉区,4,130100 +130111,栾城区,4,130100 +130121,井陉县,4,130100 +130123,正定县,4,130100 +130125,行唐县,4,130100 +130126,灵寿县,4,130100 +130127,高邑县,4,130100 +130128,深泽县,4,130100 +130129,赞皇县,4,130100 +130130,无极县,4,130100 +130131,平山县,4,130100 +130132,元氏县,4,130100 +130133,赵县,4,130100 +130171,石家庄高新技术产业开发区,4,130100 +130172,石家庄循环化工园区,4,130100 +130181,辛集市,4,130100 +130183,晋州市,4,130100 +130184,新乐市,4,130100 +130202,路南区,4,130200 +130203,路北区,4,130200 +130204,古冶区,4,130200 +130205,开平区,4,130200 +130207,丰南区,4,130200 +130208,丰润区,4,130200 +130209,曹妃甸区,4,130200 +130224,滦南县,4,130200 +130225,乐亭县,4,130200 +130227,迁西县,4,130200 +130229,玉田县,4,130200 +130271,河北唐山芦台经济开发区,4,130200 +130272,唐山市汉沽管理区,4,130200 +130273,唐山高新技术产业开发区,4,130200 +130274,河北唐山海港经济开发区,4,130200 +130281,遵化市,4,130200 +130283,迁安市,4,130200 +130284,滦州市,4,130200 +130302,海港区,4,130300 +130303,山海关区,4,130300 +130304,北戴河区,4,130300 +130306,抚宁区,4,130300 +130321,青龙满族自治县,4,130300 +130322,昌黎县,4,130300 +130324,卢龙县,4,130300 +130371,秦皇岛市经济技术开发区,4,130300 +130372,北戴河新区,4,130300 +130402,邯山区,4,130400 +130403,丛台区,4,130400 +130404,复兴区,4,130400 +130406,峰峰矿区,4,130400 +130407,肥乡区,4,130400 +130408,永年区,4,130400 +130423,临漳县,4,130400 +130424,成安县,4,130400 +130425,大名县,4,130400 +130426,涉县,4,130400 +130427,磁县,4,130400 +130430,邱县,4,130400 +130431,鸡泽县,4,130400 +130432,广平县,4,130400 +130433,馆陶县,4,130400 +130434,魏县,4,130400 +130435,曲周县,4,130400 +130471,邯郸经济技术开发区,4,130400 +130473,邯郸冀南新区,4,130400 +130481,武安市,4,130400 +130502,襄都区,4,130500 +130503,信都区,4,130500 +130505,任泽区,4,130500 +130506,南和区,4,130500 +130522,临城县,4,130500 +130523,内丘县,4,130500 +130524,柏乡县,4,130500 +130525,隆尧县,4,130500 +130528,宁晋县,4,130500 +130529,巨鹿县,4,130500 +130530,新河县,4,130500 +130531,广宗县,4,130500 +130532,平乡县,4,130500 +130533,威县,4,130500 +130534,清河县,4,130500 +130535,临西县,4,130500 +130571,河北邢台经济开发区,4,130500 +130581,南宫市,4,130500 +130582,沙河市,4,130500 +130602,竞秀区,4,130600 +130606,莲池区,4,130600 +130607,满城区,4,130600 +130608,清苑区,4,130600 +130609,徐水区,4,130600 +130623,涞水县,4,130600 +130624,阜平县,4,130600 +130626,定兴县,4,130600 +130627,唐县,4,130600 +130628,高阳县,4,130600 +130629,容城县,4,130600 +130630,涞源县,4,130600 +130631,望都县,4,130600 +130632,安新县,4,130600 +130633,易县,4,130600 +130634,曲阳县,4,130600 +130635,蠡县,4,130600 +130636,顺平县,4,130600 +130637,博野县,4,130600 +130638,雄县,4,130600 +130671,保定高新技术产业开发区,4,130600 +130672,保定白沟新城,4,130600 +130681,涿州市,4,130600 +130682,定州市,4,130600 +130683,安国市,4,130600 +130684,高碑店市,4,130600 +130702,桥东区,4,130700 +130703,桥西区,4,130700 +130705,宣化区,4,130700 +130706,下花园区,4,130700 +130708,万全区,4,130700 +130709,崇礼区,4,130700 +130722,张北县,4,130700 +130723,康保县,4,130700 +130724,沽源县,4,130700 +130725,尚义县,4,130700 +130726,蔚县,4,130700 +130727,阳原县,4,130700 +130728,怀安县,4,130700 +130730,怀来县,4,130700 +130731,涿鹿县,4,130700 +130732,赤城县,4,130700 +130771,张家口经济开发区,4,130700 +130772,张家口市察北管理区,4,130700 +130773,张家口市塞北管理区,4,130700 +130802,双桥区,4,130800 +130803,双滦区,4,130800 +130804,鹰手营子矿区,4,130800 +130821,承德县,4,130800 +130822,兴隆县,4,130800 +130824,滦平县,4,130800 +130825,隆化县,4,130800 +130826,丰宁满族自治县,4,130800 +130827,宽城满族自治县,4,130800 +130828,围场满族蒙古族自治县,4,130800 +130871,承德高新技术产业开发区,4,130800 +130881,平泉市,4,130800 +130902,新华区,4,130900 +130903,运河区,4,130900 +130921,沧县,4,130900 +130922,青县,4,130900 +130923,东光县,4,130900 +130924,海兴县,4,130900 +130925,盐山县,4,130900 +130926,肃宁县,4,130900 +130927,南皮县,4,130900 +130928,吴桥县,4,130900 +130929,献县,4,130900 +130930,孟村回族自治县,4,130900 +130971,河北沧州经济开发区,4,130900 +130972,沧州高新技术产业开发区,4,130900 +130973,沧州渤海新区,4,130900 +130981,泊头市,4,130900 +130982,任丘市,4,130900 +130983,黄骅市,4,130900 +130984,河间市,4,130900 +131002,安次区,4,131000 +131003,广阳区,4,131000 +131022,固安县,4,131000 +131023,永清县,4,131000 +131024,香河县,4,131000 +131025,大城县,4,131000 +131026,文安县,4,131000 +131028,大厂回族自治县,4,131000 +131071,廊坊经济技术开发区,4,131000 +131081,霸州市,4,131000 +131082,三河市,4,131000 +131102,桃城区,4,131100 +131103,冀州区,4,131100 +131121,枣强县,4,131100 +131122,武邑县,4,131100 +131123,武强县,4,131100 +131124,饶阳县,4,131100 +131125,安平县,4,131100 +131126,故城县,4,131100 +131127,景县,4,131100 +131128,阜城县,4,131100 +131171,河北衡水高新技术产业开发区,4,131100 +131172,衡水滨湖新区,4,131100 +131182,深州市,4,131100 +140105,小店区,4,140100 +140106,迎泽区,4,140100 +140107,杏花岭区,4,140100 +140108,尖草坪区,4,140100 +140109,万柏林区,4,140100 +140110,晋源区,4,140100 +140121,清徐县,4,140100 +140122,阳曲县,4,140100 +140123,娄烦县,4,140100 +140171,山西转型综合改革示范区,4,140100 +140181,古交市,4,140100 +140212,新荣区,4,140200 +140213,平城区,4,140200 +140214,云冈区,4,140200 +140215,云州区,4,140200 +140221,阳高县,4,140200 +140222,天镇县,4,140200 +140223,广灵县,4,140200 +140224,灵丘县,4,140200 +140225,浑源县,4,140200 +140226,左云县,4,140200 +140271,山西大同经济开发区,4,140200 +140302,城区,4,140300 +140303,矿区,4,140300 +140311,郊区,4,140300 +140321,平定县,4,140300 +140322,盂县,4,140300 +140403,潞州区,4,140400 +140404,上党区,4,140400 +140405,屯留区,4,140400 +140406,潞城区,4,140400 +140423,襄垣县,4,140400 +140425,平顺县,4,140400 +140426,黎城县,4,140400 +140427,壶关县,4,140400 +140428,长子县,4,140400 +140429,武乡县,4,140400 +140430,沁县,4,140400 +140431,沁源县,4,140400 +140471,山西长治高新技术产业园区,4,140400 +140502,城区,4,140500 +140521,沁水县,4,140500 +140522,阳城县,4,140500 +140524,陵川县,4,140500 +140525,泽州县,4,140500 +140581,高平市,4,140500 +140602,朔城区,4,140600 +140603,平鲁区,4,140600 +140621,山阴县,4,140600 +140622,应县,4,140600 +140623,右玉县,4,140600 +140671,山西朔州经济开发区,4,140600 +140681,怀仁市,4,140600 +140702,榆次区,4,140700 +140703,太谷区,4,140700 +140721,榆社县,4,140700 +140722,左权县,4,140700 +140723,和顺县,4,140700 +140724,昔阳县,4,140700 +140725,寿阳县,4,140700 +140727,祁县,4,140700 +140728,平遥县,4,140700 +140729,灵石县,4,140700 +140781,介休市,4,140700 +140802,盐湖区,4,140800 +140821,临猗县,4,140800 +140822,万荣县,4,140800 +140823,闻喜县,4,140800 +140824,稷山县,4,140800 +140825,新绛县,4,140800 +140826,绛县,4,140800 +140827,垣曲县,4,140800 +140828,夏县,4,140800 +140829,平陆县,4,140800 +140830,芮城县,4,140800 +140881,永济市,4,140800 +140882,河津市,4,140800 +140902,忻府区,4,140900 +140921,定襄县,4,140900 +140922,五台县,4,140900 +140923,代县,4,140900 +140924,繁峙县,4,140900 +140925,宁武县,4,140900 +140926,静乐县,4,140900 +140927,神池县,4,140900 +140928,五寨县,4,140900 +140929,岢岚县,4,140900 +140930,河曲县,4,140900 +140931,保德县,4,140900 +140932,偏关县,4,140900 +140971,五台山风景名胜区,4,140900 +140981,原平市,4,140900 +141002,尧都区,4,141000 +141021,曲沃县,4,141000 +141022,翼城县,4,141000 +141023,襄汾县,4,141000 +141024,洪洞县,4,141000 +141025,古县,4,141000 +141026,安泽县,4,141000 +141027,浮山县,4,141000 +141028,吉县,4,141000 +141029,乡宁县,4,141000 +141030,大宁县,4,141000 +141031,隰县,4,141000 +141032,永和县,4,141000 +141033,蒲县,4,141000 +141034,汾西县,4,141000 +141081,侯马市,4,141000 +141082,霍州市,4,141000 +141102,离石区,4,141100 +141121,文水县,4,141100 +141122,交城县,4,141100 +141123,兴县,4,141100 +141124,临县,4,141100 +141125,柳林县,4,141100 +141126,石楼县,4,141100 +141127,岚县,4,141100 +141128,方山县,4,141100 +141129,中阳县,4,141100 +141130,交口县,4,141100 +141181,孝义市,4,141100 +141182,汾阳市,4,141100 +150102,新城区,4,150100 +150103,回民区,4,150100 +150104,玉泉区,4,150100 +150105,赛罕区,4,150100 +150121,土默特左旗,4,150100 +150122,托克托县,4,150100 +150123,和林格尔县,4,150100 +150124,清水河县,4,150100 +150125,武川县,4,150100 +150172,呼和浩特经济技术开发区,4,150100 +150202,东河区,4,150200 +150203,昆都仑区,4,150200 +150204,青山区,4,150200 +150205,石拐区,4,150200 +150206,白云鄂博矿区,4,150200 +150207,九原区,4,150200 +150221,土默特右旗,4,150200 +150222,固阳县,4,150200 +150223,达尔罕茂明安联合旗,4,150200 +150271,包头稀土高新技术产业开发区,4,150200 +150302,海勃湾区,4,150300 +150303,海南区,4,150300 +150304,乌达区,4,150300 +150402,红山区,4,150400 +150403,元宝山区,4,150400 +150404,松山区,4,150400 +150421,阿鲁科尔沁旗,4,150400 +150422,巴林左旗,4,150400 +150423,巴林右旗,4,150400 +150424,林西县,4,150400 +150425,克什克腾旗,4,150400 +150426,翁牛特旗,4,150400 +150428,喀喇沁旗,4,150400 +150429,宁城县,4,150400 +150430,敖汉旗,4,150400 +150502,科尔沁区,4,150500 +150521,科尔沁左翼中旗,4,150500 +150522,科尔沁左翼后旗,4,150500 +150523,开鲁县,4,150500 +150524,库伦旗,4,150500 +150525,奈曼旗,4,150500 +150526,扎鲁特旗,4,150500 +150571,通辽经济技术开发区,4,150500 +150581,霍林郭勒市,4,150500 +150602,东胜区,4,150600 +150603,康巴什区,4,150600 +150621,达拉特旗,4,150600 +150622,准格尔旗,4,150600 +150623,鄂托克前旗,4,150600 +150624,鄂托克旗,4,150600 +150625,杭锦旗,4,150600 +150626,乌审旗,4,150600 +150627,伊金霍洛旗,4,150600 +150702,海拉尔区,4,150700 +150703,扎赉诺尔区,4,150700 +150721,阿荣旗,4,150700 +150722,莫力达瓦达斡尔族自治旗,4,150700 +150723,鄂伦春自治旗,4,150700 +150724,鄂温克族自治旗,4,150700 +150725,陈巴尔虎旗,4,150700 +150726,新巴尔虎左旗,4,150700 +150727,新巴尔虎右旗,4,150700 +150781,满洲里市,4,150700 +150782,牙克石市,4,150700 +150783,扎兰屯市,4,150700 +150784,额尔古纳市,4,150700 +150785,根河市,4,150700 +150802,临河区,4,150800 +150821,五原县,4,150800 +150822,磴口县,4,150800 +150823,乌拉特前旗,4,150800 +150824,乌拉特中旗,4,150800 +150825,乌拉特后旗,4,150800 +150826,杭锦后旗,4,150800 +150902,集宁区,4,150900 +150921,卓资县,4,150900 +150922,化德县,4,150900 +150923,商都县,4,150900 +150924,兴和县,4,150900 +150925,凉城县,4,150900 +150926,察哈尔右翼前旗,4,150900 +150927,察哈尔右翼中旗,4,150900 +150928,察哈尔右翼后旗,4,150900 +150929,四子王旗,4,150900 +150981,丰镇市,4,150900 +152201,乌兰浩特市,4,152200 +152202,阿尔山市,4,152200 +152221,科尔沁右翼前旗,4,152200 +152222,科尔沁右翼中旗,4,152200 +152223,扎赉特旗,4,152200 +152224,突泉县,4,152200 +152501,二连浩特市,4,152500 +152502,锡林浩特市,4,152500 +152522,阿巴嘎旗,4,152500 +152523,苏尼特左旗,4,152500 +152524,苏尼特右旗,4,152500 +152525,东乌珠穆沁旗,4,152500 +152526,西乌珠穆沁旗,4,152500 +152527,太仆寺旗,4,152500 +152528,镶黄旗,4,152500 +152529,正镶白旗,4,152500 +152530,正蓝旗,4,152500 +152531,多伦县,4,152500 +152571,乌拉盖管委会,4,152500 +152921,阿拉善左旗,4,152900 +152922,阿拉善右旗,4,152900 +152923,额济纳旗,4,152900 +152971,内蒙古阿拉善高新技术产业开发区,4,152900 +210102,和平区,4,210100 +210103,沈河区,4,210100 +210104,大东区,4,210100 +210105,皇姑区,4,210100 +210106,铁西区,4,210100 +210111,苏家屯区,4,210100 +210112,浑南区,4,210100 +210113,沈北新区,4,210100 +210114,于洪区,4,210100 +210115,辽中区,4,210100 +210123,康平县,4,210100 +210124,法库县,4,210100 +210181,新民市,4,210100 +210202,中山区,4,210200 +210203,西岗区,4,210200 +210204,沙河口区,4,210200 +210211,甘井子区,4,210200 +210212,旅顺口区,4,210200 +210213,金州区,4,210200 +210214,普兰店区,4,210200 +210224,长海县,4,210200 +210281,瓦房店市,4,210200 +210283,庄河市,4,210200 +210302,铁东区,4,210300 +210303,铁西区,4,210300 +210304,立山区,4,210300 +210311,千山区,4,210300 +210321,台安县,4,210300 +210323,岫岩满族自治县,4,210300 +210381,海城市,4,210300 +210402,新抚区,4,210400 +210403,东洲区,4,210400 +210404,望花区,4,210400 +210411,顺城区,4,210400 +210421,抚顺县,4,210400 +210422,新宾满族自治县,4,210400 +210423,清原满族自治县,4,210400 +210502,平山区,4,210500 +210503,溪湖区,4,210500 +210504,明山区,4,210500 +210505,南芬区,4,210500 +210521,本溪满族自治县,4,210500 +210522,桓仁满族自治县,4,210500 +210602,元宝区,4,210600 +210603,振兴区,4,210600 +210604,振安区,4,210600 +210624,宽甸满族自治县,4,210600 +210681,东港市,4,210600 +210682,凤城市,4,210600 +210702,古塔区,4,210700 +210703,凌河区,4,210700 +210711,太和区,4,210700 +210726,黑山县,4,210700 +210727,义县,4,210700 +210781,凌海市,4,210700 +210782,北镇市,4,210700 +210802,站前区,4,210800 +210803,西市区,4,210800 +210804,鲅鱼圈区,4,210800 +210811,老边区,4,210800 +210881,盖州市,4,210800 +210882,大石桥市,4,210800 +210902,海州区,4,210900 +210903,新邱区,4,210900 +210904,太平区,4,210900 +210905,清河门区,4,210900 +210911,细河区,4,210900 +210921,阜新蒙古族自治县,4,210900 +210922,彰武县,4,210900 +211002,白塔区,4,211000 +211003,文圣区,4,211000 +211004,宏伟区,4,211000 +211005,弓长岭区,4,211000 +211011,太子河区,4,211000 +211021,辽阳县,4,211000 +211081,灯塔市,4,211000 +211102,双台子区,4,211100 +211103,兴隆台区,4,211100 +211104,大洼区,4,211100 +211122,盘山县,4,211100 +211202,银州区,4,211200 +211204,清河区,4,211200 +211221,铁岭县,4,211200 +211223,西丰县,4,211200 +211224,昌图县,4,211200 +211281,调兵山市,4,211200 +211282,开原市,4,211200 +211302,双塔区,4,211300 +211303,龙城区,4,211300 +211321,朝阳县,4,211300 +211322,建平县,4,211300 +211324,喀喇沁左翼蒙古族自治县,4,211300 +211381,北票市,4,211300 +211382,凌源市,4,211300 +211402,连山区,4,211400 +211403,龙港区,4,211400 +211404,南票区,4,211400 +211421,绥中县,4,211400 +211422,建昌县,4,211400 +211481,兴城市,4,211400 +220102,南关区,4,220100 +220103,宽城区,4,220100 +220104,朝阳区,4,220100 +220105,二道区,4,220100 +220106,绿园区,4,220100 +220112,双阳区,4,220100 +220113,九台区,4,220100 +220122,农安县,4,220100 +220171,长春经济技术开发区,4,220100 +220172,长春净月高新技术产业开发区,4,220100 +220173,长春高新技术产业开发区,4,220100 +220174,长春汽车经济技术开发区,4,220100 +220182,榆树市,4,220100 +220183,德惠市,4,220100 +220184,公主岭市,4,220100 +220202,昌邑区,4,220200 +220203,龙潭区,4,220200 +220204,船营区,4,220200 +220211,丰满区,4,220200 +220221,永吉县,4,220200 +220271,吉林经济开发区,4,220200 +220272,吉林高新技术产业开发区,4,220200 +220273,吉林中国新加坡食品区,4,220200 +220281,蛟河市,4,220200 +220282,桦甸市,4,220200 +220283,舒兰市,4,220200 +220284,磐石市,4,220200 +220302,铁西区,4,220300 +220303,铁东区,4,220300 +220322,梨树县,4,220300 +220323,伊通满族自治县,4,220300 +220382,双辽市,4,220300 +220402,龙山区,4,220400 +220403,西安区,4,220400 +220421,东丰县,4,220400 +220422,东辽县,4,220400 +220502,东昌区,4,220500 +220503,二道江区,4,220500 +220521,通化县,4,220500 +220523,辉南县,4,220500 +220524,柳河县,4,220500 +220581,梅河口市,4,220500 +220582,集安市,4,220500 +220602,浑江区,4,220600 +220605,江源区,4,220600 +220621,抚松县,4,220600 +220622,靖宇县,4,220600 +220623,长白朝鲜族自治县,4,220600 +220681,临江市,4,220600 +220702,宁江区,4,220700 +220721,前郭尔罗斯蒙古族自治县,4,220700 +220722,长岭县,4,220700 +220723,乾安县,4,220700 +220771,吉林松原经济开发区,4,220700 +220781,扶余市,4,220700 +220802,洮北区,4,220800 +220821,镇赉县,4,220800 +220822,通榆县,4,220800 +220871,吉林白城经济开发区,4,220800 +220881,洮南市,4,220800 +220882,大安市,4,220800 +222401,延吉市,4,222400 +222402,图们市,4,222400 +222403,敦化市,4,222400 +222404,珲春市,4,222400 +222405,龙井市,4,222400 +222406,和龙市,4,222400 +222424,汪清县,4,222400 +222426,安图县,4,222400 +230102,道里区,4,230100 +230103,南岗区,4,230100 +230104,道外区,4,230100 +230108,平房区,4,230100 +230109,松北区,4,230100 +230110,香坊区,4,230100 +230111,呼兰区,4,230100 +230112,阿城区,4,230100 +230113,双城区,4,230100 +230123,依兰县,4,230100 +230124,方正县,4,230100 +230125,宾县,4,230100 +230126,巴彦县,4,230100 +230127,木兰县,4,230100 +230128,通河县,4,230100 +230129,延寿县,4,230100 +230183,尚志市,4,230100 +230184,五常市,4,230100 +230202,龙沙区,4,230200 +230203,建华区,4,230200 +230204,铁锋区,4,230200 +230205,昂昂溪区,4,230200 +230206,富拉尔基区,4,230200 +230207,碾子山区,4,230200 +230208,梅里斯达斡尔族区,4,230200 +230221,龙江县,4,230200 +230223,依安县,4,230200 +230224,泰来县,4,230200 +230225,甘南县,4,230200 +230227,富裕县,4,230200 +230229,克山县,4,230200 +230230,克东县,4,230200 +230231,拜泉县,4,230200 +230281,讷河市,4,230200 +230302,鸡冠区,4,230300 +230303,恒山区,4,230300 +230304,滴道区,4,230300 +230305,梨树区,4,230300 +230306,城子河区,4,230300 +230307,麻山区,4,230300 +230321,鸡东县,4,230300 +230381,虎林市,4,230300 +230382,密山市,4,230300 +230402,向阳区,4,230400 +230403,工农区,4,230400 +230404,南山区,4,230400 +230405,兴安区,4,230400 +230406,东山区,4,230400 +230407,兴山区,4,230400 +230421,萝北县,4,230400 +230422,绥滨县,4,230400 +230502,尖山区,4,230500 +230503,岭东区,4,230500 +230505,四方台区,4,230500 +230506,宝山区,4,230500 +230521,集贤县,4,230500 +230522,友谊县,4,230500 +230523,宝清县,4,230500 +230524,饶河县,4,230500 +230602,萨尔图区,4,230600 +230603,龙凤区,4,230600 +230604,让胡路区,4,230600 +230605,红岗区,4,230600 +230606,大同区,4,230600 +230621,肇州县,4,230600 +230622,肇源县,4,230600 +230623,林甸县,4,230600 +230624,杜尔伯特蒙古族自治县,4,230600 +230671,大庆高新技术产业开发区,4,230600 +230717,伊美区,4,230700 +230718,乌翠区,4,230700 +230719,友好区,4,230700 +230722,嘉荫县,4,230700 +230723,汤旺县,4,230700 +230724,丰林县,4,230700 +230725,大箐山县,4,230700 +230726,南岔县,4,230700 +230751,金林区,4,230700 +230781,铁力市,4,230700 +230803,向阳区,4,230800 +230804,前进区,4,230800 +230805,东风区,4,230800 +230811,郊区,4,230800 +230822,桦南县,4,230800 +230826,桦川县,4,230800 +230828,汤原县,4,230800 +230881,同江市,4,230800 +230882,富锦市,4,230800 +230883,抚远市,4,230800 +230902,新兴区,4,230900 +230903,桃山区,4,230900 +230904,茄子河区,4,230900 +230921,勃利县,4,230900 +231002,东安区,4,231000 +231003,阳明区,4,231000 +231004,爱民区,4,231000 +231005,西安区,4,231000 +231025,林口县,4,231000 +231071,牡丹江经济技术开发区,4,231000 +231081,绥芬河市,4,231000 +231083,海林市,4,231000 +231084,宁安市,4,231000 +231085,穆棱市,4,231000 +231086,东宁市,4,231000 +231102,爱辉区,4,231100 +231123,逊克县,4,231100 +231124,孙吴县,4,231100 +231181,北安市,4,231100 +231182,五大连池市,4,231100 +231183,嫩江市,4,231100 +231202,北林区,4,231200 +231221,望奎县,4,231200 +231222,兰西县,4,231200 +231223,青冈县,4,231200 +231224,庆安县,4,231200 +231225,明水县,4,231200 +231226,绥棱县,4,231200 +231281,安达市,4,231200 +231282,肇东市,4,231200 +231283,海伦市,4,231200 +232701,漠河市,4,232700 +232721,呼玛县,4,232700 +232722,塔河县,4,232700 +232761,加格达奇区,4,232700 +232762,松岭区,4,232700 +232763,新林区,4,232700 +232764,呼中区,4,232700 +310101,黄浦区,4,310100 +310104,徐汇区,4,310100 +310105,长宁区,4,310100 +310106,静安区,4,310100 +310107,普陀区,4,310100 +310109,虹口区,4,310100 +310110,杨浦区,4,310100 +310112,闵行区,4,310100 +310113,宝山区,4,310100 +310114,嘉定区,4,310100 +310115,浦东新区,4,310100 +310116,金山区,4,310100 +310117,松江区,4,310100 +310118,青浦区,4,310100 +310120,奉贤区,4,310100 +310151,崇明区,4,310100 +320102,玄武区,4,320100 +320104,秦淮区,4,320100 +320105,建邺区,4,320100 +320106,鼓楼区,4,320100 +320111,浦口区,4,320100 +320113,栖霞区,4,320100 +320114,雨花台区,4,320100 +320115,江宁区,4,320100 +320116,六合区,4,320100 +320117,溧水区,4,320100 +320118,高淳区,4,320100 +320205,锡山区,4,320200 +320206,惠山区,4,320200 +320211,滨湖区,4,320200 +320213,梁溪区,4,320200 +320214,新吴区,4,320200 +320281,江阴市,4,320200 +320282,宜兴市,4,320200 +320302,鼓楼区,4,320300 +320303,云龙区,4,320300 +320305,贾汪区,4,320300 +320311,泉山区,4,320300 +320312,铜山区,4,320300 +320321,丰县,4,320300 +320322,沛县,4,320300 +320324,睢宁县,4,320300 +320371,徐州经济技术开发区,4,320300 +320381,新沂市,4,320300 +320382,邳州市,4,320300 +320402,天宁区,4,320400 +320404,钟楼区,4,320400 +320411,新北区,4,320400 +320412,武进区,4,320400 +320413,金坛区,4,320400 +320481,溧阳市,4,320400 +320505,虎丘区,4,320500 +320506,吴中区,4,320500 +320507,相城区,4,320500 +320508,姑苏区,4,320500 +320509,吴江区,4,320500 +320571,苏州工业园区,4,320500 +320581,常熟市,4,320500 +320582,张家港市,4,320500 +320583,昆山市,4,320500 +320585,太仓市,4,320500 +320612,通州区,4,320600 +320613,崇川区,4,320600 +320614,海门区,4,320600 +320623,如东县,4,320600 +320671,南通经济技术开发区,4,320600 +320681,启东市,4,320600 +320682,如皋市,4,320600 +320685,海安市,4,320600 +320703,连云区,4,320700 +320706,海州区,4,320700 +320707,赣榆区,4,320700 +320722,东海县,4,320700 +320723,灌云县,4,320700 +320724,灌南县,4,320700 +320771,连云港经济技术开发区,4,320700 +320772,连云港高新技术产业开发区,4,320700 +320803,淮安区,4,320800 +320804,淮阴区,4,320800 +320812,清江浦区,4,320800 +320813,洪泽区,4,320800 +320826,涟水县,4,320800 +320830,盱眙县,4,320800 +320831,金湖县,4,320800 +320871,淮安经济技术开发区,4,320800 +320902,亭湖区,4,320900 +320903,盐都区,4,320900 +320904,大丰区,4,320900 +320921,响水县,4,320900 +320922,滨海县,4,320900 +320923,阜宁县,4,320900 +320924,射阳县,4,320900 +320925,建湖县,4,320900 +320971,盐城经济技术开发区,4,320900 +320981,东台市,4,320900 +321002,广陵区,4,321000 +321003,邗江区,4,321000 +321012,江都区,4,321000 +321023,宝应县,4,321000 +321071,扬州经济技术开发区,4,321000 +321081,仪征市,4,321000 +321084,高邮市,4,321000 +321102,京口区,4,321100 +321111,润州区,4,321100 +321112,丹徒区,4,321100 +321171,镇江新区,4,321100 +321181,丹阳市,4,321100 +321182,扬中市,4,321100 +321183,句容市,4,321100 +321202,海陵区,4,321200 +321203,高港区,4,321200 +321204,姜堰区,4,321200 +321271,泰州医药高新技术产业开发区,4,321200 +321281,兴化市,4,321200 +321282,靖江市,4,321200 +321283,泰兴市,4,321200 +321302,宿城区,4,321300 +321311,宿豫区,4,321300 +321322,沭阳县,4,321300 +321323,泗阳县,4,321300 +321324,泗洪县,4,321300 +321371,宿迁经济技术开发区,4,321300 +330102,上城区,4,330100 +330105,拱墅区,4,330100 +330106,西湖区,4,330100 +330108,滨江区,4,330100 +330109,萧山区,4,330100 +330110,余杭区,4,330100 +330111,富阳区,4,330100 +330112,临安区,4,330100 +330113,临平区,4,330100 +330114,钱塘区,4,330100 +330122,桐庐县,4,330100 +330127,淳安县,4,330100 +330182,建德市,4,330100 +330203,海曙区,4,330200 +330205,江北区,4,330200 +330206,北仑区,4,330200 +330211,镇海区,4,330200 +330212,鄞州区,4,330200 +330213,奉化区,4,330200 +330225,象山县,4,330200 +330226,宁海县,4,330200 +330281,余姚市,4,330200 +330282,慈溪市,4,330200 +330302,鹿城区,4,330300 +330303,龙湾区,4,330300 +330304,瓯海区,4,330300 +330305,洞头区,4,330300 +330324,永嘉县,4,330300 +330326,平阳县,4,330300 +330327,苍南县,4,330300 +330328,文成县,4,330300 +330329,泰顺县,4,330300 +330371,温州经济技术开发区,4,330300 +330381,瑞安市,4,330300 +330382,乐清市,4,330300 +330383,龙港市,4,330300 +330402,南湖区,4,330400 +330411,秀洲区,4,330400 +330421,嘉善县,4,330400 +330424,海盐县,4,330400 +330481,海宁市,4,330400 +330482,平湖市,4,330400 +330483,桐乡市,4,330400 +330502,吴兴区,4,330500 +330503,南浔区,4,330500 +330521,德清县,4,330500 +330522,长兴县,4,330500 +330523,安吉县,4,330500 +330602,越城区,4,330600 +330603,柯桥区,4,330600 +330604,上虞区,4,330600 +330624,新昌县,4,330600 +330681,诸暨市,4,330600 +330683,嵊州市,4,330600 +330702,婺城区,4,330700 +330703,金东区,4,330700 +330723,武义县,4,330700 +330726,浦江县,4,330700 +330727,磐安县,4,330700 +330781,兰溪市,4,330700 +330782,义乌市,4,330700 +330783,东阳市,4,330700 +330784,永康市,4,330700 +330802,柯城区,4,330800 +330803,衢江区,4,330800 +330822,常山县,4,330800 +330824,开化县,4,330800 +330825,龙游县,4,330800 +330881,江山市,4,330800 +330902,定海区,4,330900 +330903,普陀区,4,330900 +330921,岱山县,4,330900 +330922,嵊泗县,4,330900 +331002,椒江区,4,331000 +331003,黄岩区,4,331000 +331004,路桥区,4,331000 +331022,三门县,4,331000 +331023,天台县,4,331000 +331024,仙居县,4,331000 +331081,温岭市,4,331000 +331082,临海市,4,331000 +331083,玉环市,4,331000 +331102,莲都区,4,331100 +331121,青田县,4,331100 +331122,缙云县,4,331100 +331123,遂昌县,4,331100 +331124,松阳县,4,331100 +331125,云和县,4,331100 +331126,庆元县,4,331100 +331127,景宁畲族自治县,4,331100 +331181,龙泉市,4,331100 +340102,瑶海区,4,340100 +340103,庐阳区,4,340100 +340104,蜀山区,4,340100 +340111,包河区,4,340100 +340121,长丰县,4,340100 +340122,肥东县,4,340100 +340123,肥西县,4,340100 +340124,庐江县,4,340100 +340171,合肥高新技术产业开发区,4,340100 +340172,合肥经济技术开发区,4,340100 +340173,合肥新站高新技术产业开发区,4,340100 +340181,巢湖市,4,340100 +340202,镜湖区,4,340200 +340207,鸠江区,4,340200 +340209,弋江区,4,340200 +340210,湾沚区,4,340200 +340212,繁昌区,4,340200 +340223,南陵县,4,340200 +340271,芜湖经济技术开发区,4,340200 +340272,安徽芜湖三山经济开发区,4,340200 +340281,无为市,4,340200 +340302,龙子湖区,4,340300 +340303,蚌山区,4,340300 +340304,禹会区,4,340300 +340311,淮上区,4,340300 +340321,怀远县,4,340300 +340322,五河县,4,340300 +340323,固镇县,4,340300 +340371,蚌埠市高新技术开发区,4,340300 +340372,蚌埠市经济开发区,4,340300 +340402,大通区,4,340400 +340403,田家庵区,4,340400 +340404,谢家集区,4,340400 +340405,八公山区,4,340400 +340406,潘集区,4,340400 +340421,凤台县,4,340400 +340422,寿县,4,340400 +340503,花山区,4,340500 +340504,雨山区,4,340500 +340506,博望区,4,340500 +340521,当涂县,4,340500 +340522,含山县,4,340500 +340523,和县,4,340500 +340602,杜集区,4,340600 +340603,相山区,4,340600 +340604,烈山区,4,340600 +340621,濉溪县,4,340600 +340705,铜官区,4,340700 +340706,义安区,4,340700 +340711,郊区,4,340700 +340722,枞阳县,4,340700 +340802,迎江区,4,340800 +340803,大观区,4,340800 +340811,宜秀区,4,340800 +340822,怀宁县,4,340800 +340825,太湖县,4,340800 +340826,宿松县,4,340800 +340827,望江县,4,340800 +340828,岳西县,4,340800 +340871,安徽安庆经济开发区,4,340800 +340881,桐城市,4,340800 +340882,潜山市,4,340800 +341002,屯溪区,4,341000 +341003,黄山区,4,341000 +341004,徽州区,4,341000 +341021,歙县,4,341000 +341022,休宁县,4,341000 +341023,黟县,4,341000 +341024,祁门县,4,341000 +341102,琅琊区,4,341100 +341103,南谯区,4,341100 +341122,来安县,4,341100 +341124,全椒县,4,341100 +341125,定远县,4,341100 +341126,凤阳县,4,341100 +341171,中新苏滁高新技术产业开发区,4,341100 +341172,滁州经济技术开发区,4,341100 +341181,天长市,4,341100 +341182,明光市,4,341100 +341202,颍州区,4,341200 +341203,颍东区,4,341200 +341204,颍泉区,4,341200 +341221,临泉县,4,341200 +341222,太和县,4,341200 +341225,阜南县,4,341200 +341226,颍上县,4,341200 +341271,阜阳合肥现代产业园区,4,341200 +341272,阜阳经济技术开发区,4,341200 +341282,界首市,4,341200 +341302,埇桥区,4,341300 +341321,砀山县,4,341300 +341322,萧县,4,341300 +341323,灵璧县,4,341300 +341324,泗县,4,341300 +341371,宿州马鞍山现代产业园区,4,341300 +341372,宿州经济技术开发区,4,341300 +341502,金安区,4,341500 +341503,裕安区,4,341500 +341504,叶集区,4,341500 +341522,霍邱县,4,341500 +341523,舒城县,4,341500 +341524,金寨县,4,341500 +341525,霍山县,4,341500 +341602,谯城区,4,341600 +341621,涡阳县,4,341600 +341622,蒙城县,4,341600 +341623,利辛县,4,341600 +341702,贵池区,4,341700 +341721,东至县,4,341700 +341722,石台县,4,341700 +341723,青阳县,4,341700 +341802,宣州区,4,341800 +341821,郎溪县,4,341800 +341823,泾县,4,341800 +341824,绩溪县,4,341800 +341825,旌德县,4,341800 +341871,宣城市经济开发区,4,341800 +341881,宁国市,4,341800 +341882,广德市,4,341800 +350102,鼓楼区,4,350100 +350103,台江区,4,350100 +350104,仓山区,4,350100 +350105,马尾区,4,350100 +350111,晋安区,4,350100 +350112,长乐区,4,350100 +350121,闽侯县,4,350100 +350122,连江县,4,350100 +350123,罗源县,4,350100 +350124,闽清县,4,350100 +350125,永泰县,4,350100 +350128,平潭县,4,350100 +350181,福清市,4,350100 +350203,思明区,4,350200 +350205,海沧区,4,350200 +350206,湖里区,4,350200 +350211,集美区,4,350200 +350212,同安区,4,350200 +350213,翔安区,4,350200 +350302,城厢区,4,350300 +350303,涵江区,4,350300 +350304,荔城区,4,350300 +350305,秀屿区,4,350300 +350322,仙游县,4,350300 +350404,三元区,4,350400 +350405,沙县区,4,350400 +350421,明溪县,4,350400 +350423,清流县,4,350400 +350424,宁化县,4,350400 +350425,大田县,4,350400 +350426,尤溪县,4,350400 +350428,将乐县,4,350400 +350429,泰宁县,4,350400 +350430,建宁县,4,350400 +350481,永安市,4,350400 +350502,鲤城区,4,350500 +350503,丰泽区,4,350500 +350504,洛江区,4,350500 +350505,泉港区,4,350500 +350521,惠安县,4,350500 +350524,安溪县,4,350500 +350525,永春县,4,350500 +350526,德化县,4,350500 +350527,金门县,4,350500 +350581,石狮市,4,350500 +350582,晋江市,4,350500 +350583,南安市,4,350500 +350602,芗城区,4,350600 +350603,龙文区,4,350600 +350604,龙海区,4,350600 +350605,长泰区,4,350600 +350622,云霄县,4,350600 +350623,漳浦县,4,350600 +350624,诏安县,4,350600 +350626,东山县,4,350600 +350627,南靖县,4,350600 +350628,平和县,4,350600 +350629,华安县,4,350600 +350702,延平区,4,350700 +350703,建阳区,4,350700 +350721,顺昌县,4,350700 +350722,浦城县,4,350700 +350723,光泽县,4,350700 +350724,松溪县,4,350700 +350725,政和县,4,350700 +350781,邵武市,4,350700 +350782,武夷山市,4,350700 +350783,建瓯市,4,350700 +350802,新罗区,4,350800 +350803,永定区,4,350800 +350821,长汀县,4,350800 +350823,上杭县,4,350800 +350824,武平县,4,350800 +350825,连城县,4,350800 +350881,漳平市,4,350800 +350902,蕉城区,4,350900 +350921,霞浦县,4,350900 +350922,古田县,4,350900 +350923,屏南县,4,350900 +350924,寿宁县,4,350900 +350925,周宁县,4,350900 +350926,柘荣县,4,350900 +350981,福安市,4,350900 +350982,福鼎市,4,350900 +360102,东湖区,4,360100 +360103,西湖区,4,360100 +360104,青云谱区,4,360100 +360111,青山湖区,4,360100 +360112,新建区,4,360100 +360113,红谷滩区,4,360100 +360121,南昌县,4,360100 +360123,安义县,4,360100 +360124,进贤县,4,360100 +360202,昌江区,4,360200 +360203,珠山区,4,360200 +360222,浮梁县,4,360200 +360281,乐平市,4,360200 +360302,安源区,4,360300 +360313,湘东区,4,360300 +360321,莲花县,4,360300 +360322,上栗县,4,360300 +360323,芦溪县,4,360300 +360402,濂溪区,4,360400 +360403,浔阳区,4,360400 +360404,柴桑区,4,360400 +360423,武宁县,4,360400 +360424,修水县,4,360400 +360425,永修县,4,360400 +360426,德安县,4,360400 +360428,都昌县,4,360400 +360429,湖口县,4,360400 +360430,彭泽县,4,360400 +360481,瑞昌市,4,360400 +360482,共青城市,4,360400 +360483,庐山市,4,360400 +360502,渝水区,4,360500 +360521,分宜县,4,360500 +360602,月湖区,4,360600 +360603,余江区,4,360600 +360681,贵溪市,4,360600 +360702,章贡区,4,360700 +360703,南康区,4,360700 +360704,赣县区,4,360700 +360722,信丰县,4,360700 +360723,大余县,4,360700 +360724,上犹县,4,360700 +360725,崇义县,4,360700 +360726,安远县,4,360700 +360728,定南县,4,360700 +360729,全南县,4,360700 +360730,宁都县,4,360700 +360731,于都县,4,360700 +360732,兴国县,4,360700 +360733,会昌县,4,360700 +360734,寻乌县,4,360700 +360735,石城县,4,360700 +360781,瑞金市,4,360700 +360783,龙南市,4,360700 +360802,吉州区,4,360800 +360803,青原区,4,360800 +360821,吉安县,4,360800 +360822,吉水县,4,360800 +360823,峡江县,4,360800 +360824,新干县,4,360800 +360825,永丰县,4,360800 +360826,泰和县,4,360800 +360827,遂川县,4,360800 +360828,万安县,4,360800 +360829,安福县,4,360800 +360830,永新县,4,360800 +360881,井冈山市,4,360800 +360902,袁州区,4,360900 +360921,奉新县,4,360900 +360922,万载县,4,360900 +360923,上高县,4,360900 +360924,宜丰县,4,360900 +360925,靖安县,4,360900 +360926,铜鼓县,4,360900 +360981,丰城市,4,360900 +360982,樟树市,4,360900 +360983,高安市,4,360900 +361002,临川区,4,361000 +361003,东乡区,4,361000 +361021,南城县,4,361000 +361022,黎川县,4,361000 +361023,南丰县,4,361000 +361024,崇仁县,4,361000 +361025,乐安县,4,361000 +361026,宜黄县,4,361000 +361027,金溪县,4,361000 +361028,资溪县,4,361000 +361030,广昌县,4,361000 +361102,信州区,4,361100 +361103,广丰区,4,361100 +361104,广信区,4,361100 +361123,玉山县,4,361100 +361124,铅山县,4,361100 +361125,横峰县,4,361100 +361126,弋阳县,4,361100 +361127,余干县,4,361100 +361128,鄱阳县,4,361100 +361129,万年县,4,361100 +361130,婺源县,4,361100 +361181,德兴市,4,361100 +370102,历下区,4,370100 +370103,市中区,4,370100 +370104,槐荫区,4,370100 +370105,天桥区,4,370100 +370112,历城区,4,370100 +370113,长清区,4,370100 +370114,章丘区,4,370100 +370115,济阳区,4,370100 +370116,莱芜区,4,370100 +370117,钢城区,4,370100 +370124,平阴县,4,370100 +370126,商河县,4,370100 +370171,济南高新技术产业开发区,4,370100 +370202,市南区,4,370200 +370203,市北区,4,370200 +370211,黄岛区,4,370200 +370212,崂山区,4,370200 +370213,李沧区,4,370200 +370214,城阳区,4,370200 +370215,即墨区,4,370200 +370271,青岛高新技术产业开发区,4,370200 +370281,胶州市,4,370200 +370283,平度市,4,370200 +370285,莱西市,4,370200 +370302,淄川区,4,370300 +370303,张店区,4,370300 +370304,博山区,4,370300 +370305,临淄区,4,370300 +370306,周村区,4,370300 +370321,桓台县,4,370300 +370322,高青县,4,370300 +370323,沂源县,4,370300 +370402,市中区,4,370400 +370403,薛城区,4,370400 +370404,峄城区,4,370400 +370405,台儿庄区,4,370400 +370406,山亭区,4,370400 +370481,滕州市,4,370400 +370502,东营区,4,370500 +370503,河口区,4,370500 +370505,垦利区,4,370500 +370522,利津县,4,370500 +370523,广饶县,4,370500 +370571,东营经济技术开发区,4,370500 +370572,东营港经济开发区,4,370500 +370602,芝罘区,4,370600 +370611,福山区,4,370600 +370612,牟平区,4,370600 +370613,莱山区,4,370600 +370614,蓬莱区,4,370600 +370671,烟台高新技术产业开发区,4,370600 +370672,烟台经济技术开发区,4,370600 +370681,龙口市,4,370600 +370682,莱阳市,4,370600 +370683,莱州市,4,370600 +370685,招远市,4,370600 +370686,栖霞市,4,370600 +370687,海阳市,4,370600 +370702,潍城区,4,370700 +370703,寒亭区,4,370700 +370704,坊子区,4,370700 +370705,奎文区,4,370700 +370724,临朐县,4,370700 +370725,昌乐县,4,370700 +370772,潍坊滨海经济技术开发区,4,370700 +370781,青州市,4,370700 +370782,诸城市,4,370700 +370783,寿光市,4,370700 +370784,安丘市,4,370700 +370785,高密市,4,370700 +370786,昌邑市,4,370700 +370811,任城区,4,370800 +370812,兖州区,4,370800 +370826,微山县,4,370800 +370827,鱼台县,4,370800 +370828,金乡县,4,370800 +370829,嘉祥县,4,370800 +370830,汶上县,4,370800 +370831,泗水县,4,370800 +370832,梁山县,4,370800 +370871,济宁高新技术产业开发区,4,370800 +370881,曲阜市,4,370800 +370883,邹城市,4,370800 +370902,泰山区,4,370900 +370911,岱岳区,4,370900 +370921,宁阳县,4,370900 +370923,东平县,4,370900 +370982,新泰市,4,370900 +370983,肥城市,4,370900 +371002,环翠区,4,371000 +371003,文登区,4,371000 +371071,威海火炬高技术产业开发区,4,371000 +371072,威海经济技术开发区,4,371000 +371073,威海临港经济技术开发区,4,371000 +371082,荣成市,4,371000 +371083,乳山市,4,371000 +371102,东港区,4,371100 +371103,岚山区,4,371100 +371121,五莲县,4,371100 +371122,莒县,4,371100 +371171,日照经济技术开发区,4,371100 +371302,兰山区,4,371300 +371311,罗庄区,4,371300 +371312,河东区,4,371300 +371321,沂南县,4,371300 +371322,郯城县,4,371300 +371323,沂水县,4,371300 +371324,兰陵县,4,371300 +371325,费县,4,371300 +371326,平邑县,4,371300 +371327,莒南县,4,371300 +371328,蒙阴县,4,371300 +371329,临沭县,4,371300 +371371,临沂高新技术产业开发区,4,371300 +371402,德城区,4,371400 +371403,陵城区,4,371400 +371422,宁津县,4,371400 +371423,庆云县,4,371400 +371424,临邑县,4,371400 +371425,齐河县,4,371400 +371426,平原县,4,371400 +371427,夏津县,4,371400 +371428,武城县,4,371400 +371471,德州经济技术开发区,4,371400 +371472,德州运河经济开发区,4,371400 +371481,乐陵市,4,371400 +371482,禹城市,4,371400 +371502,东昌府区,4,371500 +371503,茌平区,4,371500 +371521,阳谷县,4,371500 +371522,莘县,4,371500 +371524,东阿县,4,371500 +371525,冠县,4,371500 +371526,高唐县,4,371500 +371581,临清市,4,371500 +371602,滨城区,4,371600 +371603,沾化区,4,371600 +371621,惠民县,4,371600 +371622,阳信县,4,371600 +371623,无棣县,4,371600 +371625,博兴县,4,371600 +371681,邹平市,4,371600 +371702,牡丹区,4,371700 +371703,定陶区,4,371700 +371721,曹县,4,371700 +371722,单县,4,371700 +371723,成武县,4,371700 +371724,巨野县,4,371700 +371725,郓城县,4,371700 +371726,鄄城县,4,371700 +371728,东明县,4,371700 +371771,菏泽经济技术开发区,4,371700 +371772,菏泽高新技术开发区,4,371700 +410102,中原区,4,410100 +410103,二七区,4,410100 +410104,管城回族区,4,410100 +410105,金水区,4,410100 +410106,上街区,4,410100 +410108,惠济区,4,410100 +410122,中牟县,4,410100 +410171,郑州经济技术开发区,4,410100 +410172,郑州高新技术产业开发区,4,410100 +410173,郑州航空港经济综合实验区,4,410100 +410181,巩义市,4,410100 +410182,荥阳市,4,410100 +410183,新密市,4,410100 +410184,新郑市,4,410100 +410185,登封市,4,410100 +410202,龙亭区,4,410200 +410203,顺河回族区,4,410200 +410204,鼓楼区,4,410200 +410205,禹王台区,4,410200 +410212,祥符区,4,410200 +410221,杞县,4,410200 +410222,通许县,4,410200 +410223,尉氏县,4,410200 +410225,兰考县,4,410200 +410302,老城区,4,410300 +410303,西工区,4,410300 +410304,瀍河回族区,4,410300 +410305,涧西区,4,410300 +410307,偃师区,4,410300 +410308,孟津区,4,410300 +410311,洛龙区,4,410300 +410323,新安县,4,410300 +410324,栾川县,4,410300 +410325,嵩县,4,410300 +410326,汝阳县,4,410300 +410327,宜阳县,4,410300 +410328,洛宁县,4,410300 +410329,伊川县,4,410300 +410371,洛阳高新技术产业开发区,4,410300 +410402,新华区,4,410400 +410403,卫东区,4,410400 +410404,石龙区,4,410400 +410411,湛河区,4,410400 +410421,宝丰县,4,410400 +410422,叶县,4,410400 +410423,鲁山县,4,410400 +410425,郏县,4,410400 +410471,平顶山高新技术产业开发区,4,410400 +410472,平顶山市城乡一体化示范区,4,410400 +410481,舞钢市,4,410400 +410482,汝州市,4,410400 +410502,文峰区,4,410500 +410503,北关区,4,410500 +410505,殷都区,4,410500 +410506,龙安区,4,410500 +410522,安阳县,4,410500 +410523,汤阴县,4,410500 +410526,滑县,4,410500 +410527,内黄县,4,410500 +410571,安阳高新技术产业开发区,4,410500 +410581,林州市,4,410500 +410602,鹤山区,4,410600 +410603,山城区,4,410600 +410611,淇滨区,4,410600 +410621,浚县,4,410600 +410622,淇县,4,410600 +410671,鹤壁经济技术开发区,4,410600 +410702,红旗区,4,410700 +410703,卫滨区,4,410700 +410704,凤泉区,4,410700 +410711,牧野区,4,410700 +410721,新乡县,4,410700 +410724,获嘉县,4,410700 +410725,原阳县,4,410700 +410726,延津县,4,410700 +410727,封丘县,4,410700 +410771,新乡高新技术产业开发区,4,410700 +410772,新乡经济技术开发区,4,410700 +410773,新乡市平原城乡一体化示范区,4,410700 +410781,卫辉市,4,410700 +410782,辉县市,4,410700 +410783,长垣市,4,410700 +410802,解放区,4,410800 +410803,中站区,4,410800 +410804,马村区,4,410800 +410811,山阳区,4,410800 +410821,修武县,4,410800 +410822,博爱县,4,410800 +410823,武陟县,4,410800 +410825,温县,4,410800 +410871,焦作城乡一体化示范区,4,410800 +410882,沁阳市,4,410800 +410883,孟州市,4,410800 +410902,华龙区,4,410900 +410922,清丰县,4,410900 +410923,南乐县,4,410900 +410926,范县,4,410900 +410927,台前县,4,410900 +410928,濮阳县,4,410900 +410971,河南濮阳工业园区,4,410900 +410972,濮阳经济技术开发区,4,410900 +411002,魏都区,4,411000 +411003,建安区,4,411000 +411024,鄢陵县,4,411000 +411025,襄城县,4,411000 +411071,许昌经济技术开发区,4,411000 +411081,禹州市,4,411000 +411082,长葛市,4,411000 +411102,源汇区,4,411100 +411103,郾城区,4,411100 +411104,召陵区,4,411100 +411121,舞阳县,4,411100 +411122,临颍县,4,411100 +411171,漯河经济技术开发区,4,411100 +411202,湖滨区,4,411200 +411203,陕州区,4,411200 +411221,渑池县,4,411200 +411224,卢氏县,4,411200 +411271,河南三门峡经济开发区,4,411200 +411281,义马市,4,411200 +411282,灵宝市,4,411200 +411302,宛城区,4,411300 +411303,卧龙区,4,411300 +411321,南召县,4,411300 +411322,方城县,4,411300 +411323,西峡县,4,411300 +411324,镇平县,4,411300 +411325,内乡县,4,411300 +411326,淅川县,4,411300 +411327,社旗县,4,411300 +411328,唐河县,4,411300 +411329,新野县,4,411300 +411330,桐柏县,4,411300 +411371,南阳高新技术产业开发区,4,411300 +411372,南阳市城乡一体化示范区,4,411300 +411381,邓州市,4,411300 +411402,梁园区,4,411400 +411403,睢阳区,4,411400 +411421,民权县,4,411400 +411422,睢县,4,411400 +411423,宁陵县,4,411400 +411424,柘城县,4,411400 +411425,虞城县,4,411400 +411426,夏邑县,4,411400 +411471,豫东综合物流产业聚集区,4,411400 +411472,河南商丘经济开发区,4,411400 +411481,永城市,4,411400 +411502,浉河区,4,411500 +411503,平桥区,4,411500 +411521,罗山县,4,411500 +411522,光山县,4,411500 +411523,新县,4,411500 +411524,商城县,4,411500 +411525,固始县,4,411500 +411526,潢川县,4,411500 +411527,淮滨县,4,411500 +411528,息县,4,411500 +411571,信阳高新技术产业开发区,4,411500 +411602,川汇区,4,411600 +411603,淮阳区,4,411600 +411621,扶沟县,4,411600 +411622,西华县,4,411600 +411623,商水县,4,411600 +411624,沈丘县,4,411600 +411625,郸城县,4,411600 +411627,太康县,4,411600 +411628,鹿邑县,4,411600 +411671,河南周口经济开发区,4,411600 +411681,项城市,4,411600 +411702,驿城区,4,411700 +411721,西平县,4,411700 +411722,上蔡县,4,411700 +411723,平舆县,4,411700 +411724,正阳县,4,411700 +411725,确山县,4,411700 +411726,泌阳县,4,411700 +411727,汝南县,4,411700 +411728,遂平县,4,411700 +411729,新蔡县,4,411700 +411771,河南驻马店经济开发区,4,411700 +419001,济源市,4,419000 +420102,江岸区,4,420100 +420103,江汉区,4,420100 +420104,硚口区,4,420100 +420105,汉阳区,4,420100 +420106,武昌区,4,420100 +420107,青山区,4,420100 +420111,洪山区,4,420100 +420112,东西湖区,4,420100 +420113,汉南区,4,420100 +420114,蔡甸区,4,420100 +420115,江夏区,4,420100 +420116,黄陂区,4,420100 +420117,新洲区,4,420100 +420202,黄石港区,4,420200 +420203,西塞山区,4,420200 +420204,下陆区,4,420200 +420205,铁山区,4,420200 +420222,阳新县,4,420200 +420281,大冶市,4,420200 +420302,茅箭区,4,420300 +420303,张湾区,4,420300 +420304,郧阳区,4,420300 +420322,郧西县,4,420300 +420323,竹山县,4,420300 +420324,竹溪县,4,420300 +420325,房县,4,420300 +420381,丹江口市,4,420300 +420502,西陵区,4,420500 +420503,伍家岗区,4,420500 +420504,点军区,4,420500 +420505,猇亭区,4,420500 +420506,夷陵区,4,420500 +420525,远安县,4,420500 +420526,兴山县,4,420500 +420527,秭归县,4,420500 +420528,长阳土家族自治县,4,420500 +420529,五峰土家族自治县,4,420500 +420581,宜都市,4,420500 +420582,当阳市,4,420500 +420583,枝江市,4,420500 +420602,襄城区,4,420600 +420606,樊城区,4,420600 +420607,襄州区,4,420600 +420624,南漳县,4,420600 +420625,谷城县,4,420600 +420626,保康县,4,420600 +420682,老河口市,4,420600 +420683,枣阳市,4,420600 +420684,宜城市,4,420600 +420702,梁子湖区,4,420700 +420703,华容区,4,420700 +420704,鄂城区,4,420700 +420802,东宝区,4,420800 +420804,掇刀区,4,420800 +420822,沙洋县,4,420800 +420881,钟祥市,4,420800 +420882,京山市,4,420800 +420902,孝南区,4,420900 +420921,孝昌县,4,420900 +420922,大悟县,4,420900 +420923,云梦县,4,420900 +420981,应城市,4,420900 +420982,安陆市,4,420900 +420984,汉川市,4,420900 +421002,沙市区,4,421000 +421003,荆州区,4,421000 +421022,公安县,4,421000 +421024,江陵县,4,421000 +421071,荆州经济技术开发区,4,421000 +421081,石首市,4,421000 +421083,洪湖市,4,421000 +421087,松滋市,4,421000 +421088,监利市,4,421000 +421102,黄州区,4,421100 +421121,团风县,4,421100 +421122,红安县,4,421100 +421123,罗田县,4,421100 +421124,英山县,4,421100 +421125,浠水县,4,421100 +421126,蕲春县,4,421100 +421127,黄梅县,4,421100 +421171,龙感湖管理区,4,421100 +421181,麻城市,4,421100 +421182,武穴市,4,421100 +421202,咸安区,4,421200 +421221,嘉鱼县,4,421200 +421222,通城县,4,421200 +421223,崇阳县,4,421200 +421224,通山县,4,421200 +421281,赤壁市,4,421200 +421303,曾都区,4,421300 +421321,随县,4,421300 +421381,广水市,4,421300 +422801,恩施市,4,422800 +422802,利川市,4,422800 +422822,建始县,4,422800 +422823,巴东县,4,422800 +422825,宣恩县,4,422800 +422826,咸丰县,4,422800 +422827,来凤县,4,422800 +422828,鹤峰县,4,422800 +429004,仙桃市,4,429000 +429005,潜江市,4,429000 +429006,天门市,4,429000 +429021,神农架林区,4,429000 +430102,芙蓉区,4,430100 +430103,天心区,4,430100 +430104,岳麓区,4,430100 +430105,开福区,4,430100 +430111,雨花区,4,430100 +430112,望城区,4,430100 +430121,长沙县,4,430100 +430181,浏阳市,4,430100 +430182,宁乡市,4,430100 +430202,荷塘区,4,430200 +430203,芦淞区,4,430200 +430204,石峰区,4,430200 +430211,天元区,4,430200 +430212,渌口区,4,430200 +430223,攸县,4,430200 +430224,茶陵县,4,430200 +430225,炎陵县,4,430200 +430271,云龙示范区,4,430200 +430281,醴陵市,4,430200 +430302,雨湖区,4,430300 +430304,岳塘区,4,430300 +430321,湘潭县,4,430300 +430371,湖南湘潭高新技术产业园区,4,430300 +430372,湘潭昭山示范区,4,430300 +430373,湘潭九华示范区,4,430300 +430381,湘乡市,4,430300 +430382,韶山市,4,430300 +430405,珠晖区,4,430400 +430406,雁峰区,4,430400 +430407,石鼓区,4,430400 +430408,蒸湘区,4,430400 +430412,南岳区,4,430400 +430421,衡阳县,4,430400 +430422,衡南县,4,430400 +430423,衡山县,4,430400 +430424,衡东县,4,430400 +430426,祁东县,4,430400 +430471,衡阳综合保税区,4,430400 +430472,湖南衡阳高新技术产业园区,4,430400 +430473,湖南衡阳松木经济开发区,4,430400 +430481,耒阳市,4,430400 +430482,常宁市,4,430400 +430502,双清区,4,430500 +430503,大祥区,4,430500 +430511,北塔区,4,430500 +430522,新邵县,4,430500 +430523,邵阳县,4,430500 +430524,隆回县,4,430500 +430525,洞口县,4,430500 +430527,绥宁县,4,430500 +430528,新宁县,4,430500 +430529,城步苗族自治县,4,430500 +430581,武冈市,4,430500 +430582,邵东市,4,430500 +430602,岳阳楼区,4,430600 +430603,云溪区,4,430600 +430611,君山区,4,430600 +430621,岳阳县,4,430600 +430623,华容县,4,430600 +430624,湘阴县,4,430600 +430626,平江县,4,430600 +430671,岳阳市屈原管理区,4,430600 +430681,汨罗市,4,430600 +430682,临湘市,4,430600 +430702,武陵区,4,430700 +430703,鼎城区,4,430700 +430721,安乡县,4,430700 +430722,汉寿县,4,430700 +430723,澧县,4,430700 +430724,临澧县,4,430700 +430725,桃源县,4,430700 +430726,石门县,4,430700 +430771,常德市西洞庭管理区,4,430700 +430781,津市市,4,430700 +430802,永定区,4,430800 +430811,武陵源区,4,430800 +430821,慈利县,4,430800 +430822,桑植县,4,430800 +430902,资阳区,4,430900 +430903,赫山区,4,430900 +430921,南县,4,430900 +430922,桃江县,4,430900 +430923,安化县,4,430900 +430971,益阳市大通湖管理区,4,430900 +430972,湖南益阳高新技术产业园区,4,430900 +430981,沅江市,4,430900 +431002,北湖区,4,431000 +431003,苏仙区,4,431000 +431021,桂阳县,4,431000 +431022,宜章县,4,431000 +431023,永兴县,4,431000 +431024,嘉禾县,4,431000 +431025,临武县,4,431000 +431026,汝城县,4,431000 +431027,桂东县,4,431000 +431028,安仁县,4,431000 +431081,资兴市,4,431000 +431102,零陵区,4,431100 +431103,冷水滩区,4,431100 +431122,东安县,4,431100 +431123,双牌县,4,431100 +431124,道县,4,431100 +431125,江永县,4,431100 +431126,宁远县,4,431100 +431127,蓝山县,4,431100 +431128,新田县,4,431100 +431129,江华瑶族自治县,4,431100 +431171,永州经济技术开发区,4,431100 +431173,永州市回龙圩管理区,4,431100 +431181,祁阳市,4,431100 +431202,鹤城区,4,431200 +431221,中方县,4,431200 +431222,沅陵县,4,431200 +431223,辰溪县,4,431200 +431224,溆浦县,4,431200 +431225,会同县,4,431200 +431226,麻阳苗族自治县,4,431200 +431227,新晃侗族自治县,4,431200 +431228,芷江侗族自治县,4,431200 +431229,靖州苗族侗族自治县,4,431200 +431230,通道侗族自治县,4,431200 +431271,怀化市洪江管理区,4,431200 +431281,洪江市,4,431200 +431302,娄星区,4,431300 +431321,双峰县,4,431300 +431322,新化县,4,431300 +431381,冷水江市,4,431300 +431382,涟源市,4,431300 +433101,吉首市,4,433100 +433122,泸溪县,4,433100 +433123,凤凰县,4,433100 +433124,花垣县,4,433100 +433125,保靖县,4,433100 +433126,古丈县,4,433100 +433127,永顺县,4,433100 +433130,龙山县,4,433100 +440103,荔湾区,4,440100 +440104,越秀区,4,440100 +440105,海珠区,4,440100 +440106,天河区,4,440100 +440111,白云区,4,440100 +440112,黄埔区,4,440100 +440113,番禺区,4,440100 +440114,花都区,4,440100 +440115,南沙区,4,440100 +440117,从化区,4,440100 +440118,增城区,4,440100 +440203,武江区,4,440200 +440204,浈江区,4,440200 +440205,曲江区,4,440200 +440222,始兴县,4,440200 +440224,仁化县,4,440200 +440229,翁源县,4,440200 +440232,乳源瑶族自治县,4,440200 +440233,新丰县,4,440200 +440281,乐昌市,4,440200 +440282,南雄市,4,440200 +440303,罗湖区,4,440300 +440304,福田区,4,440300 +440305,南山区,4,440300 +440306,宝安区,4,440300 +440307,龙岗区,4,440300 +440308,盐田区,4,440300 +440309,龙华区,4,440300 +440310,坪山区,4,440300 +440311,光明区,4,440300 +440402,香洲区,4,440400 +440403,斗门区,4,440400 +440404,金湾区,4,440400 +440507,龙湖区,4,440500 +440511,金平区,4,440500 +440512,濠江区,4,440500 +440513,潮阳区,4,440500 +440514,潮南区,4,440500 +440515,澄海区,4,440500 +440523,南澳县,4,440500 +440604,禅城区,4,440600 +440605,南海区,4,440600 +440606,顺德区,4,440600 +440607,三水区,4,440600 +440608,高明区,4,440600 +440703,蓬江区,4,440700 +440704,江海区,4,440700 +440705,新会区,4,440700 +440781,台山市,4,440700 +440783,开平市,4,440700 +440784,鹤山市,4,440700 +440785,恩平市,4,440700 +440802,赤坎区,4,440800 +440803,霞山区,4,440800 +440804,坡头区,4,440800 +440811,麻章区,4,440800 +440823,遂溪县,4,440800 +440825,徐闻县,4,440800 +440881,廉江市,4,440800 +440882,雷州市,4,440800 +440883,吴川市,4,440800 +440902,茂南区,4,440900 +440904,电白区,4,440900 +440981,高州市,4,440900 +440982,化州市,4,440900 +440983,信宜市,4,440900 +441202,端州区,4,441200 +441203,鼎湖区,4,441200 +441204,高要区,4,441200 +441223,广宁县,4,441200 +441224,怀集县,4,441200 +441225,封开县,4,441200 +441226,德庆县,4,441200 +441284,四会市,4,441200 +441302,惠城区,4,441300 +441303,惠阳区,4,441300 +441322,博罗县,4,441300 +441323,惠东县,4,441300 +441324,龙门县,4,441300 +441402,梅江区,4,441400 +441403,梅县区,4,441400 +441422,大埔县,4,441400 +441423,丰顺县,4,441400 +441424,五华县,4,441400 +441426,平远县,4,441400 +441427,蕉岭县,4,441400 +441481,兴宁市,4,441400 +441502,城区,4,441500 +441521,海丰县,4,441500 +441523,陆河县,4,441500 +441581,陆丰市,4,441500 +441602,源城区,4,441600 +441621,紫金县,4,441600 +441622,龙川县,4,441600 +441623,连平县,4,441600 +441624,和平县,4,441600 +441625,东源县,4,441600 +441702,江城区,4,441700 +441704,阳东区,4,441700 +441721,阳西县,4,441700 +441781,阳春市,4,441700 +441802,清城区,4,441800 +441803,清新区,4,441800 +441821,佛冈县,4,441800 +441823,阳山县,4,441800 +441825,连山壮族瑶族自治县,4,441800 +441826,连南瑶族自治县,4,441800 +441881,英德市,4,441800 +441882,连州市,4,441800 +445102,湘桥区,4,445100 +445103,潮安区,4,445100 +445122,饶平县,4,445100 +445202,榕城区,4,445200 +445203,揭东区,4,445200 +445222,揭西县,4,445200 +445224,惠来县,4,445200 +445281,普宁市,4,445200 +445302,云城区,4,445300 +445303,云安区,4,445300 +445321,新兴县,4,445300 +445322,郁南县,4,445300 +445381,罗定市,4,445300 +450102,兴宁区,4,450100 +450103,青秀区,4,450100 +450105,江南区,4,450100 +450107,西乡塘区,4,450100 +450108,良庆区,4,450100 +450109,邕宁区,4,450100 +450110,武鸣区,4,450100 +450123,隆安县,4,450100 +450124,马山县,4,450100 +450125,上林县,4,450100 +450126,宾阳县,4,450100 +450181,横州市,4,450100 +450202,城中区,4,450200 +450203,鱼峰区,4,450200 +450204,柳南区,4,450200 +450205,柳北区,4,450200 +450206,柳江区,4,450200 +450222,柳城县,4,450200 +450223,鹿寨县,4,450200 +450224,融安县,4,450200 +450225,融水苗族自治县,4,450200 +450226,三江侗族自治县,4,450200 +450302,秀峰区,4,450300 +450303,叠彩区,4,450300 +450304,象山区,4,450300 +450305,七星区,4,450300 +450311,雁山区,4,450300 +450312,临桂区,4,450300 +450321,阳朔县,4,450300 +450323,灵川县,4,450300 +450324,全州县,4,450300 +450325,兴安县,4,450300 +450326,永福县,4,450300 +450327,灌阳县,4,450300 +450328,龙胜各族自治县,4,450300 +450329,资源县,4,450300 +450330,平乐县,4,450300 +450332,恭城瑶族自治县,4,450300 +450381,荔浦市,4,450300 +450403,万秀区,4,450400 +450405,长洲区,4,450400 +450406,龙圩区,4,450400 +450421,苍梧县,4,450400 +450422,藤县,4,450400 +450423,蒙山县,4,450400 +450481,岑溪市,4,450400 +450502,海城区,4,450500 +450503,银海区,4,450500 +450512,铁山港区,4,450500 +450521,合浦县,4,450500 +450602,港口区,4,450600 +450603,防城区,4,450600 +450621,上思县,4,450600 +450681,东兴市,4,450600 +450702,钦南区,4,450700 +450703,钦北区,4,450700 +450721,灵山县,4,450700 +450722,浦北县,4,450700 +450802,港北区,4,450800 +450803,港南区,4,450800 +450804,覃塘区,4,450800 +450821,平南县,4,450800 +450881,桂平市,4,450800 +450902,玉州区,4,450900 +450903,福绵区,4,450900 +450921,容县,4,450900 +450922,陆川县,4,450900 +450923,博白县,4,450900 +450924,兴业县,4,450900 +450981,北流市,4,450900 +451002,右江区,4,451000 +451003,田阳区,4,451000 +451022,田东县,4,451000 +451024,德保县,4,451000 +451026,那坡县,4,451000 +451027,凌云县,4,451000 +451028,乐业县,4,451000 +451029,田林县,4,451000 +451030,西林县,4,451000 +451031,隆林各族自治县,4,451000 +451081,靖西市,4,451000 +451082,平果市,4,451000 +451102,八步区,4,451100 +451103,平桂区,4,451100 +451121,昭平县,4,451100 +451122,钟山县,4,451100 +451123,富川瑶族自治县,4,451100 +451202,金城江区,4,451200 +451203,宜州区,4,451200 +451221,南丹县,4,451200 +451222,天峨县,4,451200 +451223,凤山县,4,451200 +451224,东兰县,4,451200 +451225,罗城仫佬族自治县,4,451200 +451226,环江毛南族自治县,4,451200 +451227,巴马瑶族自治县,4,451200 +451228,都安瑶族自治县,4,451200 +451229,大化瑶族自治县,4,451200 +451302,兴宾区,4,451300 +451321,忻城县,4,451300 +451322,象州县,4,451300 +451323,武宣县,4,451300 +451324,金秀瑶族自治县,4,451300 +451381,合山市,4,451300 +451402,江州区,4,451400 +451421,扶绥县,4,451400 +451422,宁明县,4,451400 +451423,龙州县,4,451400 +451424,大新县,4,451400 +451425,天等县,4,451400 +451481,凭祥市,4,451400 +460105,秀英区,4,460100 +460106,龙华区,4,460100 +460107,琼山区,4,460100 +460108,美兰区,4,460100 +460202,海棠区,4,460200 +460203,吉阳区,4,460200 +460204,天涯区,4,460200 +460205,崖州区,4,460200 +460321,西沙群岛,4,460300 +460322,南沙群岛,4,460300 +460323,中沙群岛的岛礁及其海域,4,460300 +469001,五指山市,4,469000 +469002,琼海市,4,469000 +469005,文昌市,4,469000 +469006,万宁市,4,469000 +469007,东方市,4,469000 +469021,定安县,4,469000 +469022,屯昌县,4,469000 +469023,澄迈县,4,469000 +469024,临高县,4,469000 +469025,白沙黎族自治县,4,469000 +469026,昌江黎族自治县,4,469000 +469027,乐东黎族自治县,4,469000 +469028,陵水黎族自治县,4,469000 +469029,保亭黎族苗族自治县,4,469000 +469030,琼中黎族苗族自治县,4,469000 +500101,万州区,4,500100 +500102,涪陵区,4,500100 +500103,渝中区,4,500100 +500104,大渡口区,4,500100 +500105,江北区,4,500100 +500106,沙坪坝区,4,500100 +500107,九龙坡区,4,500100 +500108,南岸区,4,500100 +500109,北碚区,4,500100 +500110,綦江区,4,500100 +500111,大足区,4,500100 +500112,渝北区,4,500100 +500113,巴南区,4,500100 +500114,黔江区,4,500100 +500115,长寿区,4,500100 +500116,江津区,4,500100 +500117,合川区,4,500100 +500118,永川区,4,500100 +500119,南川区,4,500100 +500120,璧山区,4,500100 +500151,铜梁区,4,500100 +500152,潼南区,4,500100 +500153,荣昌区,4,500100 +500154,开州区,4,500100 +500155,梁平区,4,500100 +500156,武隆区,4,500100 +500229,城口县,4,500100 +500230,丰都县,4,500100 +500231,垫江县,4,500100 +500233,忠县,4,500100 +500235,云阳县,4,500100 +500236,奉节县,4,500100 +500237,巫山县,4,500100 +500238,巫溪县,4,500100 +500240,石柱土家族自治县,4,500100 +500241,秀山土家族苗族自治县,4,500100 +500242,酉阳土家族苗族自治县,4,500100 +500243,彭水苗族土家族自治县,4,500100 +510104,锦江区,4,510100 +510105,青羊区,4,510100 +510106,金牛区,4,510100 +510107,武侯区,4,510100 +510108,成华区,4,510100 +510112,龙泉驿区,4,510100 +510113,青白江区,4,510100 +510114,新都区,4,510100 +510115,温江区,4,510100 +510116,双流区,4,510100 +510117,郫都区,4,510100 +510118,新津区,4,510100 +510121,金堂县,4,510100 +510129,大邑县,4,510100 +510131,蒲江县,4,510100 +510181,都江堰市,4,510100 +510182,彭州市,4,510100 +510183,邛崃市,4,510100 +510184,崇州市,4,510100 +510185,简阳市,4,510100 +510302,自流井区,4,510300 +510303,贡井区,4,510300 +510304,大安区,4,510300 +510311,沿滩区,4,510300 +510321,荣县,4,510300 +510322,富顺县,4,510300 +510402,东区,4,510400 +510403,西区,4,510400 +510411,仁和区,4,510400 +510421,米易县,4,510400 +510422,盐边县,4,510400 +510502,江阳区,4,510500 +510503,纳溪区,4,510500 +510504,龙马潭区,4,510500 +510521,泸县,4,510500 +510522,合江县,4,510500 +510524,叙永县,4,510500 +510525,古蔺县,4,510500 +510603,旌阳区,4,510600 +510604,罗江区,4,510600 +510623,中江县,4,510600 +510681,广汉市,4,510600 +510682,什邡市,4,510600 +510683,绵竹市,4,510600 +510703,涪城区,4,510700 +510704,游仙区,4,510700 +510705,安州区,4,510700 +510722,三台县,4,510700 +510723,盐亭县,4,510700 +510725,梓潼县,4,510700 +510726,北川羌族自治县,4,510700 +510727,平武县,4,510700 +510781,江油市,4,510700 +510802,利州区,4,510800 +510811,昭化区,4,510800 +510812,朝天区,4,510800 +510821,旺苍县,4,510800 +510822,青川县,4,510800 +510823,剑阁县,4,510800 +510824,苍溪县,4,510800 +510903,船山区,4,510900 +510904,安居区,4,510900 +510921,蓬溪县,4,510900 +510923,大英县,4,510900 +510981,射洪市,4,510900 +511002,市中区,4,511000 +511011,东兴区,4,511000 +511024,威远县,4,511000 +511025,资中县,4,511000 +511071,内江经济开发区,4,511000 +511083,隆昌市,4,511000 +511102,市中区,4,511100 +511111,沙湾区,4,511100 +511112,五通桥区,4,511100 +511113,金口河区,4,511100 +511123,犍为县,4,511100 +511124,井研县,4,511100 +511126,夹江县,4,511100 +511129,沐川县,4,511100 +511132,峨边彝族自治县,4,511100 +511133,马边彝族自治县,4,511100 +511181,峨眉山市,4,511100 +511302,顺庆区,4,511300 +511303,高坪区,4,511300 +511304,嘉陵区,4,511300 +511321,南部县,4,511300 +511322,营山县,4,511300 +511323,蓬安县,4,511300 +511324,仪陇县,4,511300 +511325,西充县,4,511300 +511381,阆中市,4,511300 +511402,东坡区,4,511400 +511403,彭山区,4,511400 +511421,仁寿县,4,511400 +511423,洪雅县,4,511400 +511424,丹棱县,4,511400 +511425,青神县,4,511400 +511502,翠屏区,4,511500 +511503,南溪区,4,511500 +511504,叙州区,4,511500 +511523,江安县,4,511500 +511524,长宁县,4,511500 +511525,高县,4,511500 +511526,珙县,4,511500 +511527,筠连县,4,511500 +511528,兴文县,4,511500 +511529,屏山县,4,511500 +511602,广安区,4,511600 +511603,前锋区,4,511600 +511621,岳池县,4,511600 +511622,武胜县,4,511600 +511623,邻水县,4,511600 +511681,华蓥市,4,511600 +511702,通川区,4,511700 +511703,达川区,4,511700 +511722,宣汉县,4,511700 +511723,开江县,4,511700 +511724,大竹县,4,511700 +511725,渠县,4,511700 +511771,达州经济开发区,4,511700 +511781,万源市,4,511700 +511802,雨城区,4,511800 +511803,名山区,4,511800 +511822,荥经县,4,511800 +511823,汉源县,4,511800 +511824,石棉县,4,511800 +511825,天全县,4,511800 +511826,芦山县,4,511800 +511827,宝兴县,4,511800 +511902,巴州区,4,511900 +511903,恩阳区,4,511900 +511921,通江县,4,511900 +511922,南江县,4,511900 +511923,平昌县,4,511900 +511971,巴中经济开发区,4,511900 +512002,雁江区,4,512000 +512021,安岳县,4,512000 +512022,乐至县,4,512000 +513201,马尔康市,4,513200 +513221,汶川县,4,513200 +513222,理县,4,513200 +513223,茂县,4,513200 +513224,松潘县,4,513200 +513225,九寨沟县,4,513200 +513226,金川县,4,513200 +513227,小金县,4,513200 +513228,黑水县,4,513200 +513230,壤塘县,4,513200 +513231,阿坝县,4,513200 +513232,若尔盖县,4,513200 +513233,红原县,4,513200 +513301,康定市,4,513300 +513322,泸定县,4,513300 +513323,丹巴县,4,513300 +513324,九龙县,4,513300 +513325,雅江县,4,513300 +513326,道孚县,4,513300 +513327,炉霍县,4,513300 +513328,甘孜县,4,513300 +513329,新龙县,4,513300 +513330,德格县,4,513300 +513331,白玉县,4,513300 +513332,石渠县,4,513300 +513333,色达县,4,513300 +513334,理塘县,4,513300 +513335,巴塘县,4,513300 +513336,乡城县,4,513300 +513337,稻城县,4,513300 +513338,得荣县,4,513300 +513401,西昌市,4,513400 +513402,会理市,4,513400 +513422,木里藏族自治县,4,513400 +513423,盐源县,4,513400 +513424,德昌县,4,513400 +513426,会东县,4,513400 +513427,宁南县,4,513400 +513428,普格县,4,513400 +513429,布拖县,4,513400 +513430,金阳县,4,513400 +513431,昭觉县,4,513400 +513432,喜德县,4,513400 +513433,冕宁县,4,513400 +513434,越西县,4,513400 +513435,甘洛县,4,513400 +513436,美姑县,4,513400 +513437,雷波县,4,513400 +520102,南明区,4,520100 +520103,云岩区,4,520100 +520111,花溪区,4,520100 +520112,乌当区,4,520100 +520113,白云区,4,520100 +520115,观山湖区,4,520100 +520121,开阳县,4,520100 +520122,息烽县,4,520100 +520123,修文县,4,520100 +520181,清镇市,4,520100 +520201,钟山区,4,520200 +520203,六枝特区,4,520200 +520204,水城区,4,520200 +520281,盘州市,4,520200 +520302,红花岗区,4,520300 +520303,汇川区,4,520300 +520304,播州区,4,520300 +520322,桐梓县,4,520300 +520323,绥阳县,4,520300 +520324,正安县,4,520300 +520325,道真仡佬族苗族自治县,4,520300 +520326,务川仡佬族苗族自治县,4,520300 +520327,凤冈县,4,520300 +520328,湄潭县,4,520300 +520329,余庆县,4,520300 +520330,习水县,4,520300 +520381,赤水市,4,520300 +520382,仁怀市,4,520300 +520402,西秀区,4,520400 +520403,平坝区,4,520400 +520422,普定县,4,520400 +520423,镇宁布依族苗族自治县,4,520400 +520424,关岭布依族苗族自治县,4,520400 +520425,紫云苗族布依族自治县,4,520400 +520502,七星关区,4,520500 +520521,大方县,4,520500 +520523,金沙县,4,520500 +520524,织金县,4,520500 +520525,纳雍县,4,520500 +520526,威宁彝族回族苗族自治县,4,520500 +520527,赫章县,4,520500 +520581,黔西市,4,520500 +520602,碧江区,4,520600 +520603,万山区,4,520600 +520621,江口县,4,520600 +520622,玉屏侗族自治县,4,520600 +520623,石阡县,4,520600 +520624,思南县,4,520600 +520625,印江土家族苗族自治县,4,520600 +520626,德江县,4,520600 +520627,沿河土家族自治县,4,520600 +520628,松桃苗族自治县,4,520600 +522301,兴义市,4,522300 +522302,兴仁市,4,522300 +522323,普安县,4,522300 +522324,晴隆县,4,522300 +522325,贞丰县,4,522300 +522326,望谟县,4,522300 +522327,册亨县,4,522300 +522328,安龙县,4,522300 +522601,凯里市,4,522600 +522622,黄平县,4,522600 +522623,施秉县,4,522600 +522624,三穗县,4,522600 +522625,镇远县,4,522600 +522626,岑巩县,4,522600 +522627,天柱县,4,522600 +522628,锦屏县,4,522600 +522629,剑河县,4,522600 +522630,台江县,4,522600 +522631,黎平县,4,522600 +522632,榕江县,4,522600 +522633,从江县,4,522600 +522634,雷山县,4,522600 +522635,麻江县,4,522600 +522636,丹寨县,4,522600 +522701,都匀市,4,522700 +522702,福泉市,4,522700 +522722,荔波县,4,522700 +522723,贵定县,4,522700 +522725,瓮安县,4,522700 +522726,独山县,4,522700 +522727,平塘县,4,522700 +522728,罗甸县,4,522700 +522729,长顺县,4,522700 +522730,龙里县,4,522700 +522731,惠水县,4,522700 +522732,三都水族自治县,4,522700 +530102,五华区,4,530100 +530103,盘龙区,4,530100 +530111,官渡区,4,530100 +530112,西山区,4,530100 +530113,东川区,4,530100 +530114,呈贡区,4,530100 +530115,晋宁区,4,530100 +530124,富民县,4,530100 +530125,宜良县,4,530100 +530126,石林彝族自治县,4,530100 +530127,嵩明县,4,530100 +530128,禄劝彝族苗族自治县,4,530100 +530129,寻甸回族彝族自治县,4,530100 +530181,安宁市,4,530100 +530302,麒麟区,4,530300 +530303,沾益区,4,530300 +530304,马龙区,4,530300 +530322,陆良县,4,530300 +530323,师宗县,4,530300 +530324,罗平县,4,530300 +530325,富源县,4,530300 +530326,会泽县,4,530300 +530381,宣威市,4,530300 +530402,红塔区,4,530400 +530403,江川区,4,530400 +530423,通海县,4,530400 +530424,华宁县,4,530400 +530425,易门县,4,530400 +530426,峨山彝族自治县,4,530400 +530427,新平彝族傣族自治县,4,530400 +530428,元江哈尼族彝族傣族自治县,4,530400 +530481,澄江市,4,530400 +530502,隆阳区,4,530500 +530521,施甸县,4,530500 +530523,龙陵县,4,530500 +530524,昌宁县,4,530500 +530581,腾冲市,4,530500 +530602,昭阳区,4,530600 +530621,鲁甸县,4,530600 +530622,巧家县,4,530600 +530623,盐津县,4,530600 +530624,大关县,4,530600 +530625,永善县,4,530600 +530626,绥江县,4,530600 +530627,镇雄县,4,530600 +530628,彝良县,4,530600 +530629,威信县,4,530600 +530681,水富市,4,530600 +530702,古城区,4,530700 +530721,玉龙纳西族自治县,4,530700 +530722,永胜县,4,530700 +530723,华坪县,4,530700 +530724,宁蒗彝族自治县,4,530700 +530802,思茅区,4,530800 +530821,宁洱哈尼族彝族自治县,4,530800 +530822,墨江哈尼族自治县,4,530800 +530823,景东彝族自治县,4,530800 +530824,景谷傣族彝族自治县,4,530800 +530825,镇沅彝族哈尼族拉祜族自治县,4,530800 +530826,江城哈尼族彝族自治县,4,530800 +530827,孟连傣族拉祜族佤族自治县,4,530800 +530828,澜沧拉祜族自治县,4,530800 +530829,西盟佤族自治县,4,530800 +530902,临翔区,4,530900 +530921,凤庆县,4,530900 +530922,云县,4,530900 +530923,永德县,4,530900 +530924,镇康县,4,530900 +530925,双江拉祜族佤族布朗族傣族自治县,4,530900 +530926,耿马傣族佤族自治县,4,530900 +530927,沧源佤族自治县,4,530900 +532301,楚雄市,4,532300 +532302,禄丰市,4,532300 +532322,双柏县,4,532300 +532323,牟定县,4,532300 +532324,南华县,4,532300 +532325,姚安县,4,532300 +532326,大姚县,4,532300 +532327,永仁县,4,532300 +532328,元谋县,4,532300 +532329,武定县,4,532300 +532501,个旧市,4,532500 +532502,开远市,4,532500 +532503,蒙自市,4,532500 +532504,弥勒市,4,532500 +532523,屏边苗族自治县,4,532500 +532524,建水县,4,532500 +532525,石屏县,4,532500 +532527,泸西县,4,532500 +532528,元阳县,4,532500 +532529,红河县,4,532500 +532530,金平苗族瑶族傣族自治县,4,532500 +532531,绿春县,4,532500 +532532,河口瑶族自治县,4,532500 +532601,文山市,4,532600 +532622,砚山县,4,532600 +532623,西畴县,4,532600 +532624,麻栗坡县,4,532600 +532625,马关县,4,532600 +532626,丘北县,4,532600 +532627,广南县,4,532600 +532628,富宁县,4,532600 +532801,景洪市,4,532800 +532822,勐海县,4,532800 +532823,勐腊县,4,532800 +532901,大理市,4,532900 +532922,漾濞彝族自治县,4,532900 +532923,祥云县,4,532900 +532924,宾川县,4,532900 +532925,弥渡县,4,532900 +532926,南涧彝族自治县,4,532900 +532927,巍山彝族回族自治县,4,532900 +532928,永平县,4,532900 +532929,云龙县,4,532900 +532930,洱源县,4,532900 +532931,剑川县,4,532900 +532932,鹤庆县,4,532900 +533102,瑞丽市,4,533100 +533103,芒市,4,533100 +533122,梁河县,4,533100 +533123,盈江县,4,533100 +533124,陇川县,4,533100 +533301,泸水市,4,533300 +533323,福贡县,4,533300 +533324,贡山独龙族怒族自治县,4,533300 +533325,兰坪白族普米族自治县,4,533300 +533401,香格里拉市,4,533400 +533422,德钦县,4,533400 +533423,维西傈僳族自治县,4,533400 +540102,城关区,4,540100 +540103,堆龙德庆区,4,540100 +540104,达孜区,4,540100 +540121,林周县,4,540100 +540122,当雄县,4,540100 +540123,尼木县,4,540100 +540124,曲水县,4,540100 +540127,墨竹工卡县,4,540100 +540171,格尔木藏青工业园区,4,540100 +540172,拉萨经济技术开发区,4,540100 +540173,西藏文化旅游创意园区,4,540100 +540174,达孜工业园区,4,540100 +540202,桑珠孜区,4,540200 +540221,南木林县,4,540200 +540222,江孜县,4,540200 +540223,定日县,4,540200 +540224,萨迦县,4,540200 +540225,拉孜县,4,540200 +540226,昂仁县,4,540200 +540227,谢通门县,4,540200 +540228,白朗县,4,540200 +540229,仁布县,4,540200 +540230,康马县,4,540200 +540231,定结县,4,540200 +540232,仲巴县,4,540200 +540233,亚东县,4,540200 +540234,吉隆县,4,540200 +540235,聂拉木县,4,540200 +540236,萨嘎县,4,540200 +540237,岗巴县,4,540200 +540302,卡若区,4,540300 +540321,江达县,4,540300 +540322,贡觉县,4,540300 +540323,类乌齐县,4,540300 +540324,丁青县,4,540300 +540325,察雅县,4,540300 +540326,八宿县,4,540300 +540327,左贡县,4,540300 +540328,芒康县,4,540300 +540329,洛隆县,4,540300 +540330,边坝县,4,540300 +540402,巴宜区,4,540400 +540421,工布江达县,4,540400 +540422,米林县,4,540400 +540423,墨脱县,4,540400 +540424,波密县,4,540400 +540425,察隅县,4,540400 +540426,朗县,4,540400 +540502,乃东区,4,540500 +540521,扎囊县,4,540500 +540522,贡嘎县,4,540500 +540523,桑日县,4,540500 +540524,琼结县,4,540500 +540525,曲松县,4,540500 +540526,措美县,4,540500 +540527,洛扎县,4,540500 +540528,加查县,4,540500 +540529,隆子县,4,540500 +540530,错那县,4,540500 +540531,浪卡子县,4,540500 +540602,色尼区,4,540600 +540621,嘉黎县,4,540600 +540622,比如县,4,540600 +540623,聂荣县,4,540600 +540624,安多县,4,540600 +540625,申扎县,4,540600 +540626,索县,4,540600 +540627,班戈县,4,540600 +540628,巴青县,4,540600 +540629,尼玛县,4,540600 +540630,双湖县,4,540600 +542521,普兰县,4,542500 +542522,札达县,4,542500 +542523,噶尔县,4,542500 +542524,日土县,4,542500 +542525,革吉县,4,542500 +542526,改则县,4,542500 +542527,措勤县,4,542500 +610102,新城区,4,610100 +610103,碑林区,4,610100 +610104,莲湖区,4,610100 +610111,灞桥区,4,610100 +610112,未央区,4,610100 +610113,雁塔区,4,610100 +610114,阎良区,4,610100 +610115,临潼区,4,610100 +610116,长安区,4,610100 +610117,高陵区,4,610100 +610118,鄠邑区,4,610100 +610122,蓝田县,4,610100 +610124,周至县,4,610100 +610202,王益区,4,610200 +610203,印台区,4,610200 +610204,耀州区,4,610200 +610222,宜君县,4,610200 +610302,渭滨区,4,610300 +610303,金台区,4,610300 +610304,陈仓区,4,610300 +610305,凤翔区,4,610300 +610323,岐山县,4,610300 +610324,扶风县,4,610300 +610326,眉县,4,610300 +610327,陇县,4,610300 +610328,千阳县,4,610300 +610329,麟游县,4,610300 +610330,凤县,4,610300 +610331,太白县,4,610300 +610402,秦都区,4,610400 +610403,杨陵区,4,610400 +610404,渭城区,4,610400 +610422,三原县,4,610400 +610423,泾阳县,4,610400 +610424,乾县,4,610400 +610425,礼泉县,4,610400 +610426,永寿县,4,610400 +610428,长武县,4,610400 +610429,旬邑县,4,610400 +610430,淳化县,4,610400 +610431,武功县,4,610400 +610481,兴平市,4,610400 +610482,彬州市,4,610400 +610502,临渭区,4,610500 +610503,华州区,4,610500 +610522,潼关县,4,610500 +610523,大荔县,4,610500 +610524,合阳县,4,610500 +610525,澄城县,4,610500 +610526,蒲城县,4,610500 +610527,白水县,4,610500 +610528,富平县,4,610500 +610581,韩城市,4,610500 +610582,华阴市,4,610500 +610602,宝塔区,4,610600 +610603,安塞区,4,610600 +610621,延长县,4,610600 +610622,延川县,4,610600 +610625,志丹县,4,610600 +610626,吴起县,4,610600 +610627,甘泉县,4,610600 +610628,富县,4,610600 +610629,洛川县,4,610600 +610630,宜川县,4,610600 +610631,黄龙县,4,610600 +610632,黄陵县,4,610600 +610681,子长市,4,610600 +610702,汉台区,4,610700 +610703,南郑区,4,610700 +610722,城固县,4,610700 +610723,洋县,4,610700 +610724,西乡县,4,610700 +610725,勉县,4,610700 +610726,宁强县,4,610700 +610727,略阳县,4,610700 +610728,镇巴县,4,610700 +610729,留坝县,4,610700 +610730,佛坪县,4,610700 +610802,榆阳区,4,610800 +610803,横山区,4,610800 +610822,府谷县,4,610800 +610824,靖边县,4,610800 +610825,定边县,4,610800 +610826,绥德县,4,610800 +610827,米脂县,4,610800 +610828,佳县,4,610800 +610829,吴堡县,4,610800 +610830,清涧县,4,610800 +610831,子洲县,4,610800 +610881,神木市,4,610800 +610902,汉滨区,4,610900 +610921,汉阴县,4,610900 +610922,石泉县,4,610900 +610923,宁陕县,4,610900 +610924,紫阳县,4,610900 +610925,岚皋县,4,610900 +610926,平利县,4,610900 +610927,镇坪县,4,610900 +610929,白河县,4,610900 +610981,旬阳市,4,610900 +611002,商州区,4,611000 +611021,洛南县,4,611000 +611022,丹凤县,4,611000 +611023,商南县,4,611000 +611024,山阳县,4,611000 +611025,镇安县,4,611000 +611026,柞水县,4,611000 +620102,城关区,4,620100 +620103,七里河区,4,620100 +620104,西固区,4,620100 +620105,安宁区,4,620100 +620111,红古区,4,620100 +620121,永登县,4,620100 +620122,皋兰县,4,620100 +620123,榆中县,4,620100 +620171,兰州新区,4,620100 +620201,嘉峪关市,4,620200 +620302,金川区,4,620300 +620321,永昌县,4,620300 +620402,白银区,4,620400 +620403,平川区,4,620400 +620421,靖远县,4,620400 +620422,会宁县,4,620400 +620423,景泰县,4,620400 +620502,秦州区,4,620500 +620503,麦积区,4,620500 +620521,清水县,4,620500 +620522,秦安县,4,620500 +620523,甘谷县,4,620500 +620524,武山县,4,620500 +620525,张家川回族自治县,4,620500 +620602,凉州区,4,620600 +620621,民勤县,4,620600 +620622,古浪县,4,620600 +620623,天祝藏族自治县,4,620600 +620702,甘州区,4,620700 +620721,肃南裕固族自治县,4,620700 +620722,民乐县,4,620700 +620723,临泽县,4,620700 +620724,高台县,4,620700 +620725,山丹县,4,620700 +620802,崆峒区,4,620800 +620821,泾川县,4,620800 +620822,灵台县,4,620800 +620823,崇信县,4,620800 +620825,庄浪县,4,620800 +620826,静宁县,4,620800 +620881,华亭市,4,620800 +620902,肃州区,4,620900 +620921,金塔县,4,620900 +620922,瓜州县,4,620900 +620923,肃北蒙古族自治县,4,620900 +620924,阿克塞哈萨克族自治县,4,620900 +620981,玉门市,4,620900 +620982,敦煌市,4,620900 +621002,西峰区,4,621000 +621021,庆城县,4,621000 +621022,环县,4,621000 +621023,华池县,4,621000 +621024,合水县,4,621000 +621025,正宁县,4,621000 +621026,宁县,4,621000 +621027,镇原县,4,621000 +621102,安定区,4,621100 +621121,通渭县,4,621100 +621122,陇西县,4,621100 +621123,渭源县,4,621100 +621124,临洮县,4,621100 +621125,漳县,4,621100 +621126,岷县,4,621100 +621202,武都区,4,621200 +621221,成县,4,621200 +621222,文县,4,621200 +621223,宕昌县,4,621200 +621224,康县,4,621200 +621225,西和县,4,621200 +621226,礼县,4,621200 +621227,徽县,4,621200 +621228,两当县,4,621200 +622901,临夏市,4,622900 +622921,临夏县,4,622900 +622922,康乐县,4,622900 +622923,永靖县,4,622900 +622924,广河县,4,622900 +622925,和政县,4,622900 +622926,东乡族自治县,4,622900 +622927,积石山保安族东乡族撒拉族自治县,4,622900 +623001,合作市,4,623000 +623021,临潭县,4,623000 +623022,卓尼县,4,623000 +623023,舟曲县,4,623000 +623024,迭部县,4,623000 +623025,玛曲县,4,623000 +623026,碌曲县,4,623000 +623027,夏河县,4,623000 +630102,城东区,4,630100 +630103,城中区,4,630100 +630104,城西区,4,630100 +630105,城北区,4,630100 +630106,湟中区,4,630100 +630121,大通回族土族自治县,4,630100 +630123,湟源县,4,630100 +630202,乐都区,4,630200 +630203,平安区,4,630200 +630222,民和回族土族自治县,4,630200 +630223,互助土族自治县,4,630200 +630224,化隆回族自治县,4,630200 +630225,循化撒拉族自治县,4,630200 +632221,门源回族自治县,4,632200 +632222,祁连县,4,632200 +632223,海晏县,4,632200 +632224,刚察县,4,632200 +632301,同仁市,4,632300 +632322,尖扎县,4,632300 +632323,泽库县,4,632300 +632324,河南蒙古族自治县,4,632300 +632521,共和县,4,632500 +632522,同德县,4,632500 +632523,贵德县,4,632500 +632524,兴海县,4,632500 +632525,贵南县,4,632500 +632621,玛沁县,4,632600 +632622,班玛县,4,632600 +632623,甘德县,4,632600 +632624,达日县,4,632600 +632625,久治县,4,632600 +632626,玛多县,4,632600 +632701,玉树市,4,632700 +632722,杂多县,4,632700 +632723,称多县,4,632700 +632724,治多县,4,632700 +632725,囊谦县,4,632700 +632726,曲麻莱县,4,632700 +632801,格尔木市,4,632800 +632802,德令哈市,4,632800 +632803,茫崖市,4,632800 +632821,乌兰县,4,632800 +632822,都兰县,4,632800 +632823,天峻县,4,632800 +632857,大柴旦行政委员会,4,632800 +640104,兴庆区,4,640100 +640105,西夏区,4,640100 +640106,金凤区,4,640100 +640121,永宁县,4,640100 +640122,贺兰县,4,640100 +640181,灵武市,4,640100 +640202,大武口区,4,640200 +640205,惠农区,4,640200 +640221,平罗县,4,640200 +640302,利通区,4,640300 +640303,红寺堡区,4,640300 +640323,盐池县,4,640300 +640324,同心县,4,640300 +640381,青铜峡市,4,640300 +640402,原州区,4,640400 +640422,西吉县,4,640400 +640423,隆德县,4,640400 +640424,泾源县,4,640400 +640425,彭阳县,4,640400 +640502,沙坡头区,4,640500 +640521,中宁县,4,640500 +640522,海原县,4,640500 +650102,天山区,4,650100 +650103,沙依巴克区,4,650100 +650104,新市区,4,650100 +650105,水磨沟区,4,650100 +650106,头屯河区,4,650100 +650107,达坂城区,4,650100 +650109,米东区,4,650100 +650121,乌鲁木齐县,4,650100 +650202,独山子区,4,650200 +650203,克拉玛依区,4,650200 +650204,白碱滩区,4,650200 +650205,乌尔禾区,4,650200 +650402,高昌区,4,650400 +650421,鄯善县,4,650400 +650422,托克逊县,4,650400 +650502,伊州区,4,650500 +650521,巴里坤哈萨克自治县,4,650500 +650522,伊吾县,4,650500 +652301,昌吉市,4,652300 +652302,阜康市,4,652300 +652323,呼图壁县,4,652300 +652324,玛纳斯县,4,652300 +652325,奇台县,4,652300 +652327,吉木萨尔县,4,652300 +652328,木垒哈萨克自治县,4,652300 +652701,博乐市,4,652700 +652702,阿拉山口市,4,652700 +652722,精河县,4,652700 +652723,温泉县,4,652700 +652801,库尔勒市,4,652800 +652822,轮台县,4,652800 +652823,尉犁县,4,652800 +652824,若羌县,4,652800 +652825,且末县,4,652800 +652826,焉耆回族自治县,4,652800 +652827,和静县,4,652800 +652828,和硕县,4,652800 +652829,博湖县,4,652800 +652871,库尔勒经济技术开发区,4,652800 +652901,阿克苏市,4,652900 +652902,库车市,4,652900 +652922,温宿县,4,652900 +652924,沙雅县,4,652900 +652925,新和县,4,652900 +652926,拜城县,4,652900 +652927,乌什县,4,652900 +652928,阿瓦提县,4,652900 +652929,柯坪县,4,652900 +653001,阿图什市,4,653000 +653022,阿克陶县,4,653000 +653023,阿合奇县,4,653000 +653024,乌恰县,4,653000 +653101,喀什市,4,653100 +653121,疏附县,4,653100 +653122,疏勒县,4,653100 +653123,英吉沙县,4,653100 +653124,泽普县,4,653100 +653125,莎车县,4,653100 +653126,叶城县,4,653100 +653127,麦盖提县,4,653100 +653128,岳普湖县,4,653100 +653129,伽师县,4,653100 +653130,巴楚县,4,653100 +653131,塔什库尔干塔吉克自治县,4,653100 +653201,和田市,4,653200 +653221,和田县,4,653200 +653222,墨玉县,4,653200 +653223,皮山县,4,653200 +653224,洛浦县,4,653200 +653225,策勒县,4,653200 +653226,于田县,4,653200 +653227,民丰县,4,653200 +654002,伊宁市,4,654000 +654003,奎屯市,4,654000 +654004,霍尔果斯市,4,654000 +654021,伊宁县,4,654000 +654022,察布查尔锡伯自治县,4,654000 +654023,霍城县,4,654000 +654024,巩留县,4,654000 +654025,新源县,4,654000 +654026,昭苏县,4,654000 +654027,特克斯县,4,654000 +654028,尼勒克县,4,654000 +654201,塔城市,4,654200 +654202,乌苏市,4,654200 +654203,沙湾市,4,654200 +654221,额敏县,4,654200 +654224,托里县,4,654200 +654225,裕民县,4,654200 +654226,和布克赛尔蒙古自治县,4,654200 +654301,阿勒泰市,4,654300 +654321,布尔津县,4,654300 +654322,富蕴县,4,654300 +654323,福海县,4,654300 +654324,哈巴河县,4,654300 +654325,青河县,4,654300 +654326,吉木乃县,4,654300 +659001,石河子市,4,659000 +659002,阿拉尔市,4,659000 +659003,图木舒克市,4,659000 +659004,五家渠市,4,659000 +659005,北屯市,4,659000 +659006,铁门关市,4,659000 +659007,双河市,4,659000 +659008,可克达拉市,4,659000 +659009,昆玉市,4,659000 +659010,胡杨河市,4,659000 +659011,新星市,4,659000 \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-biz-ip/src/main/resources/ip2region.xdb b/win-framework/win-spring-boot-starter-biz-ip/src/main/resources/ip2region.xdb new file mode 100644 index 0000000000000000000000000000000000000000..25522736d3f97c8b375be159b0690dbafbcd9bb8 GIT binary patch literal 6428681 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

    !Q+^rEg29Zw~)D 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 z zB=S*^k3~KXa$4kckTW7@f_x(KNsv!PJ~fiY;8~HgVRKI8T#)l3=YxDE@>!5+k?9~8 zL@osRT;%g0Ux<7W--vt@n?^x}w;d8!hed6+iK`Ka{OJkj*E)MVE&g z|IpGZ-I-U?is!4KxMwt5riFV(u%(I74lmq*;iageRCp;06rcZisqiTe815qr%W+ZM zC%Pp*a)u>7WH!dM@ewoFRANlKC#JeHg&MU$TxU_&4OepYZKgNp3&|s&_z2(2!@4nj zIWarJ_Z2Anou%bvZGr4{HdCn-$MX^~a;0Sr%PIwS^xQXaLz&uP3ZCw)?NYJsq%`Hb z3uV9Q$MPcXzGvkX-?LiJ*L%%gd1soQb3A1#^3DEjWPWvmr!(FTBRIF;<%zM)@cIZ? zQ~FBj2X0$SOlj(Dpk;C;{Mqjnwej=ctF&#Ut(wZhI*pX@WEAo7G}LPc&pg4V60;+E zXis!5burMhSaSoEv*rNhQ>Fo`T-3P!xVuJ6&sZvT6HjoCjlGh}hG!|`Jf9H3%09_+ zvnW}$@QfbbSUZ|Y@kAJmp}qzZul|5BlpS6GIyTB<`mDFjbE9wIimcwmx&5k!OV4>g z(~sF!YE8DKXCxI{i-flG`jK_%$-qt@QS=ZKig) z(Q}S-G!Be{TQs%Dt$O%vuZPP1#4?-mdyD>1^>Awh{IDaSbv$*_)^R<%YuzStTaX1J z3xX^ZSr}xI$f6*(i`*V$vB=^eOGK6g84?)^a)-zrLGBc}Gsserr9qa7EDLg%$X!A1 z7P&jfu*h(b5s{G~_lVpRQ$mB^|f4~RSv zqXWF*&wnZ$Ri?; z1bI~C(I6W|HU`-wvMI=8B98^xEV4Ps7LhGMwu)>G^0>(3L7otKBFLD?Sdej%@gPr% zJQ?IEk*9)e6WJDIyU6w+Pm4Sq`T!64@1Gx5(}w zdqnmGd0yoCARUoTkgiBK$O|Gb1bI>9#UOh{_6B)LYio6=+HIdhX91uAWL7M7uVGBSSiLh$qo>{qqUQ|1I_#LF7>`rjQu1N zVKGU4@Yr#E?sbUzFs?J#N2pIjvs`DWr%N6$kX#OrSE&2Y{+Sku6|xkI$_}DTtH%7v zLOHfSk1I32TU3c#yjfDVGZXZKilu6{#+p)@du+Z{T=U5GtFdN}qOIfVQOCXJTPH+L z7%AfZ*Pvd*b55&uQh7aTc}-7o-V=Gx2wS!_B{F3s-3|0adPdkITJMXzALIj(4~%$S zof11$VjqfqXe`~|e-7)DzI`d6U$Kq4{3_ z5$Y*u)=iK4G&G;xoT0u9&9=Hi-G}B1VAVmwP@zji9J`sa zJ!|p37tfZqkN(;0np1A3obhYS5^A2dVFcX1iYfEcGUHi)OOVMRn()<*U>g@>UD8_J@p1?j?qV`?HGOYQ4%}KVk5O3wI*$% zwxfFYW7Kv`f4kb+Ol?O!+22C_MA(l}+fmoYsdwNyYjr1e2bv}5QcpmqzE6D+nl*Tc z`Y<$m$r0))=pA=h4fLo_L#r*%ken@%b0pIsOydIeWoWkA73zK|hPfhRsFZ7r{h`Ku z4J^m?zEo!3x66zpx#rKuMcIxexJkRFJhKLB{@5}#)|9T9pcl5zXs$j}v_k6>u>L0n zF-gWyEm318HRF^mn<@KuExykM<=9?_W#(lmGp~m-JIm62ijoX}>b+%zdL=a5b`|v~ zG~2&T-GNrlyChR3(j%D$nMN8Hs4qh^Z&#=-I*8}2%)Inv=A|k#?`dV`J*~`?Q>JJK zrR?=twrom;9$RNoPy5b#8TM08K-148_2IaFgnBBj_oy$%^-I+Kv%c3g=OheOE3I=# zbKyBpa}o7YXr{T0dib3C7@=N{>-a9B)(YyC(D)np)+*}t;co-=BhXyq9;Mz0eUJS$ zZ)+2^9T&Dw&G6eXQ7$?bJV+_ncv;iorvG1o{IQA>S<_{+fuwh z(hm#6Bn-o``D7iF zTn1r|uTb})nPW2}VJNRP=Bq&2j=8DX`G}j%&ReT&H-sKp^Jnt*K{|KKrgXgbl+$KQ z)Y7J1>oc^r{e0%N*P0fY4st={f|2y;`R5{^2l+zeiy#+8E(W)p5y!EBXmqES~ z`6^;v7P%bcipUismUZ-j*4JWR8)K`tz7hGx2(|MdYiffEw5dY zi4vJ4nTj|)>S<_>ybIKQXzzO@<`9f47SHVis|#@JW!RwLMGVr&zyYkW_J*|9D0{TQ&r z+mFV0e~Pys!L}sEbhnD(jYzX&-yIjj_rBQu!gZ{`_}&-9-GMO1$xcy*T1TE0W2n20 z=foH)hr7fWs&u=>ItU{b?+JS=^d;Hi{UWnvsqr=za*211iuicT2o!G?SzFl=Er>UX zK=F>8*>a}D8**TH>(dx(7jJ!nsUI>O?}gwV_k`>iYTs~DY%1B=5h?dX&nC)tJtsDu z7~A23*u}&+;xCC^PK-IcBF0cF{MTX(RXg8^T}LQ8e7zA$p?>er8bvL@S+Q%Va`jVL zr2rO{?;(PBS>*lr42Rf-y=DT%E_05L2F_M&;D%81^SYAD)16w+%~>U{IeXuk)$Q|n zVvi{D`s3fR8kO~*{tnW#qk7oCrv3>u*O;GD{~0vv;?Jq=s1f!*Q-24|UD@~4KZ8~Z zKPUM`iTsk}SK;H=)Hk39>$`Ad{!~B4yhsIM@)euGin55l^Qu%eyS>FNqT{T1R9@#C zPADL}XzFB++G3h;I8AoNG$gph7!uW4RF``VUP%it&sx4XY4{Yc^z90|WGx4xo(D~N ztQnv17^-4khJX9jBt|=*#HMg9^4XK6CKyvl-KQ9pRn!7m>nyx9T=ABz$H>(i>!&g4b-x=InW}qaqE>hBeRL&Fi@^ z-H?ymyw+@;tKzihQ;O<>@=)u9^w5^&7(#W{aj_>8WBoiO#(hE5I(G(r?F(RMR#YCk zrE3qJ^Q%9PceFRKtLCFi)!$>vawM-*6VE4>>?WzE#8B=Y&+Tfbh}-Jo+N)Ehhk=G9g4%P)}e9@l`DR&BYgLJmOiWS``=?Bp)DuXsz}*v!s!Y#i)e76g38*9 z+E13E7C@%}XH8Rf;w)gzH%C#;^Vxwcr}()ZYgZAY=DE^5Y6@BQ;LmeGzSM2Z0wwT{GiwdYUg;<(w|1pHnyif#-J@1>vahwu ztX|9jUQ>Xx+%8{tk^}bT0?5;k|B2<2gYQrO2|WL6XtvG2q5dwee@}fQt~YqE4B}Cw z5Gl5mo>o5g%5gEZn<=zWtyXe_Q`Q#9i_Vn$25t!c|EC|ZoIkR>vA_Qt>Yx0`Y7_s} zp!HMg8*zQWQ&H<`ilUTeTQHyhoHWJr5jSX4xWbw8n#)VAe{p=*>d~U2^o55T|3lWR zzkz_1?ROZV>UBg+t;^Z0EvB|*i+S5>{Ou`^zNzGot5i>MrxRnHT@dRh#<+GWs z4Of_}25zWY2jBg^m5cfP{`XPR8_>0B->|_Vs+uZc+Tvn`vi|=YqO9S8{NAFejeqlc zNN?fQd&zGd)tKfi-d1k$4Yt<(Iim2*wdm)a#Aw$Q)0j4e5!Msc2o|+KTxaEBRliaj z!#DoGa^auaR0bP|uXkP*!JHu*UI=B5mOnt&1}6w)eqf5e@h|i9MpLHg*0bD6E?Em* z)s2dw!qo~wk9JA6I?F%TqvrzCBOiWtA9z7f}vfc+vU9>UF(xQvUr-6T707AhM-J=$PJ?3A4b0@L-T(!&Mb zOZvkFZ8T^%sknzzy7YHM>{w##<|tSEs)qc-1r0XZd3Vt53@1LnozcdHwdflc-QqCa z+AWTyIM*I-rYWy1lT->4uMJgMMAvGF!5lSkLyfu0_nLtiKZ#}Hr>xWOpm{_3J@wC^ zS#v+9{slCLCy2e$2F*qo4eVwFY;)Km8Nrg9rfJqKT!V~ z797_9k@^NS-%2)P71fBBvml;h5m?I%iGi}|<0Hwgs2adjwO|Hdk+14p)p43v>=YzF zo@J;q_l(#1eC@f$CdYH|U-_rF75lj^Y5&UV#*#y=egCiE;YNwn3&TQsLoCEq4fRE` zT#}d_;c!TlVI;%F#;$15VMY6*!%)-9QpH}5P@Q0f*viD1pH*V36XR60Mr<@OE>3N+ z^@*{fH;8RajPt=Ju`P+Q0c)T6+ZB{=T$Xye&qtMfwr_k#ip`1Bm%v?#adz9Sxa`iF z3B5DxBP_E(D*W)u&JU#6EOYIXczX23@?gpC5YFwFGo$76xWW(A!kWD=M1U$7iyo*SDpu4OtIN2mvC;smlIc{F_!L{>@?7Q!zgM& zvb7^}B%OkErTKIEVyS{v*`9TfK!qF1q`-VO#F)RQd>T1lxh+I4Px%z~&a-s6lyeX1 z^C{=A* zvfN-HQqt_p8ui)tFX8ZVz%r~xLW#T8O7Hb#M zQ%%<9X@1%~^E|x|vBT$nDEnooRqR!<*ODc3#M#|6L#+os%WFort0+%pPFD^2oPIQU zWKHr02|6*R;`97eVw{zGveDd6yUN_JPa)38PIEu|N@eEPyKp}9pHFGf?lZ;J-kJHk zAg0xTW4X2(Fz!sNfw@Sj*fBG2iTTWT?^NNv6+ni)-BNro= zcJ5=|dF`55^tIbXR_u)ml)`$4bQnMP9s&)Mhp3g!a!>a#e$qTWV2doKPT9nxHw z7<1_JI_GfhzAAHg%o3G3Jm`>o-jRGVojb)Cs$`tyjWdkcKHuM!Vlzi~E4J1EdaSJh zw5zQFYzJQf@J}zT)Vy27_hq8g+K+RM^Ht%2WXC#wPmquosF#KXysJ8JxYJEXxd zO1EB=p=Lo}Paa9JIl>>6oz@tpyh%)Jj48D0X3;GOwHEp+qo?QW7yk5otYqgakKX;^ z>Nvx@KNeH>2fX{4!)m0K_SI-lN_!9TU3+_n^Nz1j_|8Qu3)>X`jRy6&H!;@4OJZ8H z*j8MrjB}NW`hHE8TAyg?>(d*_qaBf-H)V&Vp<*9e|&ZP2-md2eJs1viP;e; z&tZM!II69W%%QK33^k*0tu)_SGufwn&HOy2%y#_(=k}|0)XtC_UrE1AmTa%DWT|^C zrhG;0>tsid--umJjJduhc0Do1{Z`C^M45_I3KF*?^3-sJeg=5{aV2N00eg-A2A;c5 z%&jb}O@5!Xx+{O!9^UV=w ztcDWg@-zRE)F==9UpJA^l&%WE_Ub6PLRN6tx()W-v?ibk-cPn-6 z7g^hL*e^2YzF*YdkfmHDf7%-=KegQhY+eXYsE$rqsO+Gc8r`Oe8;H0A$LTz zy&*?dZEt9vFivW_L$+saZ^#_ZVQ)w~-y3dAxn|vLSFWE&i~MK#ot}1-_i(+7b2eiY#Z?8?t6=J43~;?G4#3zB8Oi z>9Bm0N=3Ux=BKt-sM<0r5x5ymTc8jdD+Fp@0@u}jTP5$`YqPACL>-%0&`$ER8?F(6B zwS6J;Qri`>bhTX}TcEZpv>c(twS6H|@qMA0q{;Fho?E-w zE)DjEP^N|}xg6zE&iw^SZoiUGIaf!yRW$EuPo`|m>v#TR#AbWlQ8v_FK1aFQ%g4yI zL#{=0dCjMgi;?R~x%SEV$>lV+N658v?ipsThH|Z+YlEDh`S;*liE}B>KZRUf=gN?4 zvs_*0+CEo;eDAuME4kd}N_QRO9FrK$|UwDK2yE`z$?gV;}cD)mXA)Z>sH|m}lQVX{Th? zs0ZIGX{q)Wmf3ef45JpgCo)UzjcDmRBZhi*#9flvG1T*m{Ypj8 z%vck?FVY@}uW9%msQKC0VR+Gu>${uNiP;h5_T7Yb4s03UIcS%_y6{~>^OK^>$>&~p z^!5L0B^_Vu`xR;eItA$p_c#rlz8kn9q}p&LH%eKT4fgX-A?IoSdCEQW$$QGpWjRl| z(&hZ*QqDhL%cYQOQTD5bc9?(4xfn4L8&b)&U2avOeQmZRtId_li_exzP5TI3hI9L! zVFp#~+8oMsYICS8YqRKHjD^}P$`-E8qMRLTvnWgMv#36`;23&B`PR&;lxuUVXl-_7 z&V6oW7;VD4Qj4X#Q(D&UPUUk>^DyK4Jj|IiQmW0REK_YRW$Zc4rF`0R#Bzp~~i894u!iMbiuvXV(5H;2qOr}-3eo_@#}xt(t=ZT7)=v`;>-x%$hk3iJO= zKR5g5%A8xjSQkG3GK`+e=bKhWJ?B(u7g&h#$xu5j?s9P**EB|b{$?0HZ&&R9m%X>` zvZ4s0bek6e1qB5K1*Mf&1qB5K1*ElAP*6}%P(eUYP(V;nP(aq2KX~s?x)Hmc%syS@ zZYic`=6;y9`qVzTD>5Q7GAlDO&*^SqWf#B-`L@+UIAN76^S=;Douq~|C#s5ZIZqYV z+FCV2QY!|v^;vvyLVPc0tU~fUtu7(AEMCz@_3+dAK3>9V zBt+x0)D=?qIk=UH$qleVX5@`(63GwYgpB%0I3fOg1ov?wkhIx%)x%S;LVm^MG@Oum@dr2| zR?ff)se2YqSgo9c6;k_0I3aO34<{tr7vO}{{RvK3t^5ottn5WtA#uC}C&czIa6)4H zE1ZzJm*Ir?cm?iiB7aN$H@IsZr}ghToUnTMJM15wq~?ela6&BKgcH`mjG#?Z#Y;oPKvI z?&N)hoMjgYw=Z>j4;Kk1@BC?xM&_(&Ui{>0z&oDm2JhPCM#|70b3Nnq4DT@)QD?!) zyZvYc&CEyc8)EJgSJyVz$IeqHKYTuLqt{t*qt1EiJaYPdtevO6hV#{Z_sWfUZ^7T$ zW_}a;yctO@eoo%C!O441hu0Y9YyCa2a3OxC%}LI-v*3Dk(nNKr{^28_J-hjwV5mpF z-`woxYxp~^-7c^h7)3C z37nAK%ad@zs_`jUA-0#o2|4Rq1}DVw({RG7@flcQWtYPWiT4UPVU>IqR)|N>!3k;4 zN;qMyy$V){o#)|%)P4a@NPAYp39H66u)@l|2rDE*d?1vLp$q85?c0Pa;V&_9RAt!^Aa6+tn z1SjP5>ti@!wfqUJkU8@JoRH`DAe^w){uEZoDa&VYLe6jx!3k;0VK^ae`5aDIt$YD1 z#GfN@!YX+b_Nzo2gcGvvU4j$x zwEqGpMBlG)!fN?4tgy0IV1?Me3MZU9rX9;~a6(4PH8>$-^g5i79{e3n$XVqda5oZ> zy9p<(9{vd{q=kRM2^kZ&;DojIZCD}g`x{P(KmWkpNkr~0oUm%V2P-5J|H28Yf%wUJgLhN^ z)2q)9_sGT1onj2P;A%L_lV&VAd8a>OV>CGnZUne*jSto1#;~*N^t+SLq57R37g0BQ zo&U}sr+;{lxiR52xf;$__hfnt{*G(6+kc-MIDWn5N4ev?brErMx*Ijlr+H(KFK&N_ z*^M*ztt!_7XPN&?6}RJO+I;JJ$ZK-ZaL=3@m+mBK(u@r^j-5ZQWv-W zg@@gDz(}>(=xGfzQ z*L-re!fxwW)!q)bqvPbwPB_j@K*wd+r7Kx{^Vw>aMH9vipj$}kf@)5g6U8{Q-CXUx6g^y!N4Go)=>IdE|tgD!%}?IuW_vdJuQg$8jXr zb&|5O9*$K4$=*7l{_L$1^1G}OyE=`M+l|IO9j6sfD@K%A5A@7WAjf*3k=a`fLL&X{ ztp~DFRs&{!&0l5S=WJJUn%hHO6ko^v%F?|X4&2e zsaBHS38|h^tqh@?6#^^0H3GJ*61SpU`ucXhkJp`!Q)_zbfy*H$vprD_4ZPzNvcU&s zYPkH!*Kj$w{GS!uuGQYB_8y7aqqz zDJ}O_0oCrU0Z5irfIWdEkD{}^Ctw|rWN#hN^HJ6T=6uQZW_-<1n(4z5IXwQ9`I#*K za<-w$u&m3Sy}${=49;jW@YK@ z&B+?aWlo-9_C;fve>rPWe9mSJ;>DbdWN%iU%;&Vs%0e>xULLO2Ov}UBO)CEm-NG7+ zE7%@J+?|my#wR_)6lx=0Np@A$`Bda%K z#@+O%H)pCf4>e~}zs#D4(qD4_!}&g5M>;O9X{pSRLUx>ABFT5(JsOt{kDMOwk*jgfSRQ^};VigVxVHH=4EL!W*EwSw^MBY6i0jZ5 z$hFO_1d3g6-W6Bo-NBiuTD~lrn9ua`#QLPHfL+Yr6`t+{w@Cnt^L$T2@_CG5@5 zk}I>bkh$ko>I(TT=4)`m>fshxAt$lDxn0rOj@*vKTDvztOR_gR%g5gAtaWYzjg!+f zmbv*rvULqPh%7U<;@F$9Wk>UL$TAOW4D{w<`S=jCuue?QVwW6OeQ*KpVj`bKUV^)v z$eMcvj`>^Tv^Rfi_xTXBw|u^fJ|QdaJvd?e+ozi2^$BFi3fZ?rk=ndtC2a6+=8|6x z`Qhh>TC*COoP`iIv#G!1bWIvfPJXxrm&Iy~HCjD1-m~YCYqOhWhst|T-ARnA;XZBj zqj>1*sJ4}rVovx`p7y!*V5^qe`dC@t!qB9xOug@lH}J?Gtc|J5J+e z2^=emyeaF+vz?s&6Y+D%vBpTQtTB8dspqlxiKKj4L){lUeUs_)OK>lDTwIfV1(wwa zwyZ~-Z|khKoNsUH>dTJSrYOJOaguu@-^WWU3-eiTub?=Ty#g!GzVxQ7J8yUT)V_Dn zx2NM2hqCVM>o~Py_4_vR-}O$;p>5 zkYm@OxRfKShW$X7~SUuI^vU>hBqVH$)v7+jUC@bnOot%33SLC$H@*7WO zmA%@@sm1!Olqj?E#=C5BS$lu)BxU7~d>^kH9jDr5J^r)fG>-m4?pDXC#kb-99+CS8 z?oP+WH7#q!j`#PbvHxZ%UaZNo6Gd3w`R@if`QdACm`X1jw%xkrYYaPoUodum(C)y` z`5Ie|7N|!X{65oSJy{KT7YQfd{>-}O%@0_pnQr6GS`(uXHLY;1cISj{b$5E4yz2$; zsjK1kpDy0+X>k4QJsM`&k4P6g=c$W?llLufHC)TQCg+nI-EPnA#*2HZoV;s+Yq9GC zXV>X*e`mr+PMW6Wj*OI&J1Sq~w+-iqo?HpY{^WJZ{y5uJPfR=6WzAkj-KP`DNS=Ws zOVl&a%MwE(=Z;>UD6e~YB9gsK5w_%tYttgx!Faxp7x|;c%FNj#nWB2VWQtoxG;T%X zwvLNy`mVe&-YaJ$8ogXm8hg2-qFZvsUDGt~&QiRD?55v^6Ov`U2e&7YR`)W^xRXBi za!uF?>XU8Cqmpe-b~=uX5KNlwc_8CAU;RHLQjpyZb7+g@&|^`PXICpycLJBi(P z&X_TZcE>f_STaN*BT(65+$U?ilPg#+Ym|>?u`@$9s2RVP4Pv?EgXDhlyqEiF1oSdL zwYr!2sctXx!%8prli#=To7_)6K2+`}$zJBCUJZrl3W}>@y?D`S1Mnk@I(4EZnJ>*W~gA zU&G&Vx}3LOlfUDl?rXS=#bsh{ym||+-M+@7+;RT8K6mYQ^27e3qJJ)i_xA87!#&$h zlSWNW`?>xK@qZ4Ski4bjnL3(3Kh7l&LcKUSX1$;nb|2&*?GYZekkWzZq5 z?3p&}>@_$cax2g%B>PjQ9lVhLLRd0xVYRGN+K?1ddledmRq}aQVP#8pF0AZoWQCP2 zIlGV^dl5+?_DdEoI&&EW%Q1kdh4Pt9iJgnXL$Dx9!dc@4I;&(MB@_PvhW_Czde#}Q?A9-5=d&O=Du z9n=-#P1%hI8BuQ|C#0Xs4nBp2x-Y48kpzl9Z6_B&W15&Irai1kx&LgY@v z35nPbaKdWk46Km;I}0bAJGN+k?3vEN32W^iVTJf}9!|(eyZ|SxwSR&YR`zFDA>2oC#+Wf zg%x7uKAf;h1_{r*N4qn0ALjB_ms2|V|2?|_XT|Ma-0mSlZ1%DKjovKv z4_`x>S=^4FoKJZ-(`a*1bedf2!jy@+i>=$uc}>pta82&B1Lv!=tep!{?jWu)Yq%%X zedgv`;GRhLOgOvFPp99tcX;0nwcsM;^h}yj=RI{#mFokq$=^9Q*ef?8hqup-f#H4X zMvZT`tKn?B&(d70T^~8S?m2P(xL)urb~A=+nH%3jTj1oqr>;hOyv!SWGjrrn7eCY1 zl6D`ENjBuYN3Iuqjdp+f|J&-?>@2r?)9Y`?f~>I-i}twov2(MY^WVu2^|P(NelI15 zMUDv}dzU$I!kTf+g%z@!ng=IjKRh2!$d2YQI3d~j0yrUYUI-^-SF#9BSiN~1R!GMF z1e}oXxh;kh*4j&8h4k5za8D&-dnufdUDq-=A^(5xX*eO?JOd}JmY2f{(YOLmNW`9n zdoB@gR>BF1;wm^{wemcy5Gyah3E5Syh7)3W4V;kt=S4Une<$}PIAOKC7FI~Fj>8G7 z^I3aQe;e^P23MWMFGdN-UZ~ZHeIgFeTeV@Y#neD!S6EfCH=ULe_;};DmVnE1Zy#bs0{GzAJD-R`9EELVWoRPKe!Wa6;O99ZpEk{SGH&R`>%> zSfhFa_GTh2`4div*MGqYYwcUGLVENz+~0|ehJWCM$lZYx(&oExLgenj3F*&&;e^$j z`>+A|j{1~3==it}-ebBwNjocjl)o|N@=Wh-JL9Goy9VcT$~$7$;N7m?=?@iyDMxi)+?i1-rUqH44|jZR)tVrsQT=&Rp&#w-s(%C#l-o;W!PEKRe-e zjmYhW+tYD+!uG;((xB0&6Ncb9DbO5OP6`fmbrt)A)IHR3itb^!BONDSj>56SR#}jBNBkyvr7!g3&IMe$h@dcy^cartB`YldSWB_K+dTeo%I_4-AeyUA#*> z+Rep#?a#2IJz8+=wva6QtvgXJBSrhCC=1!)mwl9WN$e*>Bx`k$?|eQkUmNmIm`^&~ ztRE_}eGN^{!laQOIyX7}-Xnj<>2fQulOJxu*YJ0ob+^*GoX+WSeLZP<&gpT#^X&Zm zj~16XRLJgkPSnZqF60DdE}W2OZ62JkKK=7yXPA}M<}xQU|3#K$MSMLR^R(o8v$VW%`rH5snX8x7N39L+ZmiMJxZ~mornSnW5 z&1WI*s8q1q4V6;CZZ;~Vg8x&ptO9x-%PPQ(uU7SDe2uV~XZ$naSD9bW=KFY^?>LRy zvI=O%XC8gz`Ck22=6h!Lu$8edb9)p!>uL|B4mv)rDc`u`YPcN6%?EC_(->*kbu;#G zPlwlVbClQQqTy?}xDK!3X1v+6FgzZvx8-XNvwR|ibH}db$m`9uM4>m^s7Lu%H>f5rK39+*pJ3{#!Ya8AR!FO?u4W&+1GlTI zJDJ>WIAQhrU05Mj-h&e|cJ{ytvAh>Fye4>IwLF332P3sVgcDMG5>8la ze*`PU_Q!C-D)|Yl5S<6$gnV0~+5jB>hfnV{@&=MZY~O?v64^iDg!uCpoRD6*1t+BLZ8#xq{u@q+zJK6^ z=(__aq(|?<2^pLB;Dohx|H2CSt-JehLY|7CV0nk<4c?tvYZh+EyNvf0^LMj`XQM8! zb=j!1;5>CXs%x?H$Juq~-cG-MSFRChr{C?IoL%R?i^EX6u3gcjT*(_Pa~=(~?BtzC zZjb6B=kyG3nH!7FBiFK_k#q9C1br{B#t!%rw? zZ+y8=$lT}FF4n%+hH7%Nk+)g0-{prSqZ<(v%`qOLjcU&uc zjoH1Uwqz=k`$A#+w{o=R%|%YgUSJ-akbTK~I3aS6!3o(jEPxYoF0&9$$o_v3oUra0 z9)}fH_6b;F`?qq`<|W7pYwagth3sOUf)nETQaB-dkY#W}c70F72{}>Hd1dgzYI!-5 zLTayodoGdP;Yv6m-mHQX67T2XUg+xTsap*vMBf@XA^rCvoUnTM60DH(k+pC_c6j4( zLcGy=WAMVN@f9S6w0RwzkoK*I6XN#oRA*a11GGl+Y7rd5smM|39ICOSRrkmfD>Zp12`eSDfc0q zuxgxy6%w(J;Dq?|F`STyeF7)si9P@)#G8X~Lh61BC*-#zK7%`y$apvmCnU0;!wKoB zFW`jOI07eR6d#2X)+l@lDN@oQKi{(J)`q%9}lgv9?OoRAoP z3n#2rzJnFwk4CYG5Dnq)8q>$Rb!3h}=*Wj*qb(Piq z4);gLDRa94CnQ=o;e>eoC!7!)f58cf>Mb~7ZOLuezY}>{{(%#+;@^S0+sUcL_uz!I z_+L07-rR>1R?9)c^Nt>D@Ghrw8E&XB=Sgm-?y_{3bGwYy>2W!<+e5jQ4VBk-H5(Ci z`rTf_eV58d+Ii}0%7++;QshC2&hSPMPa6xaA!e*X*Gc zuq!)O=k=@LR(G7dSp&DWE?C=iW)b{>PEK_XBFDLc>XvhbBO`J; z6NvJOj*Dx0s9kt69jj5JeRP!1bewui``{?E&z0q}&td8UM7)I6qu!2C zEz(XfB!%o_qey+;4bO3W4YzKDscd({wp-(T4VSIE8DEiTSRTIDa+RHSH|xrBZ_bsKGUGCns(oc1 zz13M!-P>5X({Ym1{268D!FV@tOuIQ}xF%m?_}uAgxNiWsCsQ#B$KogZkasi9F0-d; zxNTQMqomP_q4F*pm!2}W2z#G6&&~MNsA={IM#xMsKPBQNtdftx3duSbzzO-pMHy)D zLTr~gOvpL>{3?6rw$tQCjC^NZ`xIRy9A%4FAC&ZuC za6;l=)&OC({34P8VX{LfWwzPDowtMS^EfqJ3J~lL(R13K(*%g!{5bwxUm1BltS3kd|m46TFb8 zOzUTGtfTQRb(WR%t<-|#j(i_4A@Sb{C!|N;h7(fv9XMh2aTlzR7Vd@<@+`j#Cq(W& zI3bbU11H4tUN~X3ybo4b+4o_EjGX;&LZ0ynI3bbv08U8V58;IPGYKce?~mX;}>v3>K=g;^1K{{6C$Ti zq=OgY^;gIV>FHx|Undf=Z{UQrB`08ol|2djZC78b@po`So{k*b^~G-|oPrbbsrYF) zAwK>9C#;swzzQpS7FI~R&%p_+u^H+`5jJ(-+#afiS`XR zAu+rOCq&<$a6-Oo@)w+tc-?{%(oeVHgp8cO;e`0|51f#`y8|ag?k?QDM11}iPKexn zI3ax;6fE!Pfd=pLKbJj+3bQ+K8K$q{_6_a)x&FTN1Fi5U23jv4kY}Vc__k%{uZFxk zUkyuEPuy+@C7$F;)ia{cXVv?D@R5!K=+*InK*_cr*UJN4n?!^M1fl*0Yy6Ys}?8~^Tk zbn>nZ&Lbah*J?KcT)f=~AKC&Z@BDP1UOGRW9v4w}ChqjK{r4kcvN?iS=Nr$5o1uNr zyO#MHL;KQ=756MVdFQG79K)SU`IZf}>^@_4qrzKuSwnlg`2Kg6-8k|dxf*URa?y5r zoV@qwQSSW5^N`6;t~+xQ$*AYT&Fi@H`2@~~d#vN)n(PADg&nKEi?9f8amT6l61XQj zF0NVoDcGgc*k!O!cdY6^1Gl{6G$vNSJv$=z9NhCGaxcKG?l|?v8n_obPNV)MxV0Up z`EeZX<&KMM`uz&*x{j5H>)|$ZoUCkw+thLD@6B+pcAQ%B8r+tSlfJERuXmiD{5RmX zjmT|>d$Z%D?=83;BXT;Mit^hXr)=aM+ z`8eFy9j6w41IL+(dark4qIu;z zon>%t5qHy$PAuX*rxc2qPA7unL_+;vP9${pz{;vKhmhm+Ky}OM0Vf4m(HTL!=UhO3 z>pUPh&Hxl|?frvezpv3#_WRn~V_AFpkh>GFshIV4^72PJ_>f}P9`CZ%0a>$yeCNN7 zE-ejtx2jDV{fc5kk6W+Xdi-|~+kR>_#OyivnhaCxQ6 znL@Sc1-CxB-f^*T^4_x3>}q!yo;#Q~X zZT4+&qsWb4?~#k%@ER^_c5NGO!PjuMht82skBgF<7o5DCFPyv^VNTvh$o0acd77PN zw^}%lTn{*Zd<%wp>MXcEc75s2u3d{~@7Z*FGS@O6JLl_gO>SH`O)eTkJ#u>7sBp1! z^3EUE-u7tm|2x%O<(+Ti|9nDeOpMEMoo^;uhw|IEj?j60c@ zXHL!;f#$AqM!;#ny__#+It^eqkH)f}7qb3qZy)!Ce5P3T_`;f@uEZZ9r@5=(*wJg; zj>EBck5YPBcJJ)e)q7>9-rAM3v!?b=bnZ&59+jQ6u(H}$haCHBoz9f~wGiL;pi@Z8 z_rkH`)@Yr8n@l8XAHlJ+mR#9cvx^RiY+Rtk5TBBBWuXj32(ph$p>=xUzj6Wy5Gw^R6I{maIfY$KN ze?IDF8Lw%04X;bF!^aNd8oj5dwZR9Kebu<5(~Ac0Yq)l}Jj2Nkx8Pdsevi({yEeP| z-nGE#*F2iR&S#3bRXTcetLpdW*2(OrCDi3iRdVG-mHAdS%51wj<#|fhP*+%=y%%AH zl`W^G!pdr<4S6A2$EiQ#j4MBTGp=H~mD-$nD*olnlUZ1GXP$%iq!#?yi^lyO7uSs2 z1T6EYboS;^c=pe3T zv^Dsk21dhKa63jfpANS?n>F0r>Eep*G8+mRWBRlz?hARY%coXCzH6o#H1))5>M1I7 zsgQ4n>2s}+5~8tux+Nr6UYMHVCFGlLWgZq{`Elfg+>=4 z2+ilg3CaJ` z1~?&d8{vf5*aRoUm$KRk`Ap+gCkb9yd#|jOLagZX!;s{2M16`? zK1USdq1M-s6Y}lS?N}Dlclw+$cp*_JpEnBGt7vTwIU#*q)@UIuc^ex-BKQuRkalQq z75t2QtjU~Ldpj)6F1;O=o`5}A5!M*)h257}+4o_Ec)1@=NOUIPg!JhLa6+QpJ z!3&8&`D|8Lqk4qe!pa_n72@}oa6;^S1t&!A7@Uw1b{tMf-LK(xLKf(!l#?QlD zNTj!Zf)iFNKf?+cix=U9Sh)lzthIlE6(ad7oUlq>h80%!3apTCO1@6qughMzQe+xlOUgS_2my!AF*pE^zLGYi)jb=7XP!i`Ed zntU7FxbZdI2zRz!l)MF3WA-dKP2Q(=#C_knZ;rS1u*(Yb@iT4ycF)A58Lh)x=GH|w z(>M#R*L+Nek3APXHzvJpcP{JZU9ZXYgqsDtCRfAtkk|Amcic!r*H~bV%sGjy26N%& zb)4q6`EZYQTwHUcE`VJ)ja>x$c*iP|PrxniIAy&{;GP_jdkSu8$Hg`6EQ4L%u^Ou@ z;GXTcxTfTDuq&srt6-n+Sk-?4Zgt0L46cD&J0dp@_j1Q6|9J&&!-(8QI3Y90Cb%sl za$DhE?>O0g18!T#DdOAV-t0K}{1)7fj??EEJK^3Qk$VSjSI6lY-VOKeh}?T{dpb@% zwHI#Rh}`>d`#UbK8S4qy52mpn!g5BXCsJoq!E;8XwtS47ke%lza0e0@jXH;lGG|YU zjn15cJJiX=HT^l9rFebbvC7WBfIHH0n*EN#aZ;q`P$xve3+cUM$O-3;>DvIu;l56+ zYxy^@CpuP^Pr`lMaq8#q;L^*|zEg0gJ8oaLL?=2?K9d~Y=;S8KoYu%|ozes+BwppT zMo3(Bauaetr9RG{e$Myt;#@|3QqE;KfzfyoMrT=3(8))X zIqisd*=C({#Cy&*wDZx4MsS>B$RC|v1a~K1(H3dcNkx?JbzEFiV>zGTEJBiTD`h&! zceM}y58iR>ocg5Um-`&kwNQQ5(4%Lm!Ml}dcrFmivnLuhoUhKdi-or^+*{|u$_!{ms!D({i%*lJpuHDXp8wK8i8_TXwy{1RGH+wc5$MXn4!Akkd-e)iDm3%B26&VncB?ltg(X3LkoowY)EK6>qJchiZ`d^c}wj`@yg+%?a#Jn2-7 zXsTnSai?vY+-HFNaG%sW4GY6Hx!GlSG`wwp=l@&;o#o+?b(&~(nGJ<}hd{gfxG(JO z?&k&{PpbUT3>sz4os6r;@_xL8d``IlPKcc5+2EOPwf9+soDg4h8W23E0y;@6rvgGg zEz}Gha>Dvll(|~S_px+t5Ry7Gz?-F57SiHna6+s+4JYLD$YWs?iDy8a_iuP#9}?1uv*>#E2Q>DI3X*E*4W^MwRTx+h1hwO z+Cuv4H8>&P7T5wOtQxn%3h_s$H^B?}e7&6F2pMNu-9t{;{?3%1>o>6>td`$`6=G!v zoDhvW;e_eg{rit?YsoQhPU?kkR}uoDjM9;Doe!51g=C*$XSgpM7vbPRrki z6ViYC;e^zkfD_`)2XMk_x#T;-%1$CHMCV6vLUeu%C#wC> z`1m!Puv+;BR#@2+utNT_?MXOcmHZa=yF?=NJ)Dr4;uM^aXXZ4Vkh(v>2^r02;DogL zES!+}W%rxaK6d_2+gty)cKuV^*2LTq4#ZEcWxShd zUI-D>7tV$o8(x#E;YQPNO|Hi9`Nxew=c}7#T$`PztT}Nzen$Gvx4@l)dkfAd_bn_p z0=$JuGnSlX7i~8uI{j{Lb@ILiZXR$m&}_~R&fDSr;M>=ZlpkfT=h}M6lf!)cjErJG zGtFk(oUhJ?llRecJ>+Y+@6xz=!)t0k?=!6)UYEb)V&caC?8Vku9`38_B{!>h3qxDy zqU749r)Vtf=d&^=v98r~VdqU_=fghMu{t4N0JpH?jWptr#mjLsqu#_#fvi< z<#*+brhOj6*^6xJ%q41b$|5^DT?wvrqQdEkdbOOMa84q9y>k*h1v(!IeVmBIyYyRU zA@RO_`oT$uJ}J@pMo4l3A=^562<}e2%2|WX9iq$`g8YeMN_3F#IO%BcPCi7_-vKq; znkdg3diELpE{AhD%j~s4V{m|{uEoxybEd^U*8WaApQ!6kqZMA4>mk<;C-34hIk?@f zubt(gp88lgO)lPU5A?s@Q)j_Nd+6wPk#Kf>Ox+Xh#>?zw-S|{;G_o;`u9Az9cOlu! zywui`cadSK$4iDqE+vg6ms%aVV#ZbcN-ngvy!xM#+!Jg+d~q zqmm7g`N&Gid&pdnEV&DL3T(+#_N2u+UzEIr90b{kl!+G^hrBNt2f2ktRmm;L4&+lW zJ3wQ}56A?x@|H}1wH(Q_*k;{^Eh~3xm1adovaHGN^_P`ao|cvNPFk!HDeG#G9WPl* z9d!Kg=VA6VIos|;*U3ANqJ@L!?%}#-uZC-%i%0vnyXK6InGaY?pb5otwK9VXdt_S=?c77Vol+ zWp^ed*VkMe_nDKC?9Ixu-kXy(0?M46<1c!9GOe7-_wiz$R^2j73$d*ISI7zHjU9O+ z>i$SwA)`k#d+;;P@QUOmYR|CeQp|dLF4etGU1t0!Wn0ReFJ$EYiKLLW=+ooiZ{d(>N=-8(KOlg3{s@8W^CB@dey<(Qi#U2-mES$q#!JG_t)a;jJ| zt|z;?^5Cg_A20H)CG%tED)|=sJjty!6UrB8tD^D*63yF+W z$-;zur)o8|g=AMHGaJu)XjJwUWnp`dskW3H?A5NW{4Tkbu==h2W=OH`jCbi{*?Dg3 z>Pu(IxP*LnO4(P)kcDYJEm_z*BXxJ>`*;cY{#(hy_H}adv7DI;iOqiMl9x%YKsztv+hq1M>d!{SeI-Jy3&D+2CDf(zaatwV}z?7-~Tyc7Xm6 zHEnji(6->C>RRT`fSr8Xt{)X{)VYZINIc3Nm*cu~W7ldYzt8lV)8nEyRNg(aK1Qw| z+&8U;dgSzbkDLWJGF+S8ywjE+{)7x~nQwD@H{pHqnz+-;7v<~xxR%Y_F`N*&C2(Ys=W^69gCjePQnDpKBol<~<$^k)R0bILSEn9qm#j~SZJo`9 zjF5G|oYAcvsjEye%Ii8#Pulu?AFmA^r@3?^oUpD1n_z{N-3&`6sS*1c+?GUq+zLm= zs1d15G58&woa*jG?(L47%!nydj567wx9rZ;z~Eu<~?;Dn6gf8p*Y)@L9J@VtAp zJ8o8&-whjXrF8j_dZVGo$%kmhrcuLr`il`kddUEbAIPwB)o%0gz$-pOg)%~4ZwVVuTXzoS6}_I9KJoV=EtSxEM{C-uZj zh%bBL_9xOa6L24N+|_Kyhj5b}7uRGzf+e?B&-5~DBuj2BWZdc$Htv&eYdn^Go7|e( zN3nA(k#p(eaNl;EY<~xrtqeJ7JOwAj@@Y6>9TPvm3W?cm9{wf>$(?m{9~df9c{ z$@uj0Ywb}=e*H_>aDAV`O zf{Wcyd2jhq?l|i%9*<%}Gk#QzpIlXV=X1YF6WO*NR+$I%`@Wm4Pcqz77_Ky1FucW1 z6PawI&2E%^kRIjIlRZGztaz5JnG9L`du7HUM>ecArI!uI-PBm};m1=mPovI=qdY^7 zOzn~-3&|^PtwX@{N8@l@Hv5nLwZqd{3@Jq?%37rgPG2m$*!YT zN|yXu$aAAyJMNQnD~`&vgA>-a%#?F0_a~i0OwO&RNx61# zdpbGAW^cZa*Zz)EY$o7@{P!~D+QE}^ORkr5YsB|5Zp{V<(I>>ePvL}oo2KO3GkmK- z8KrXXsNc@PkEUkE`kq!2>66tf+GnXPx`AK}g?@=R(c5M}KGu-wc2^*xD8)cvKat5H*Oe_?Hl zb^;;AjzAuk9l_PEw)*NfGzx3&Yp_C|{OfSq1>pDJaKc*qA6Oxhci@EN#bxJkFYndb z<$OKJj(6vYY7Pt4lR0}f+UxXdo@vOt z6H=$YE${OP=a0+gTpXPLL-j-mOyrzpU&FP{?O~h+*EVn2-*GmE?vcF(f5*kc`Q$YX zui;|ud~))``@%)mx6Wnz&L=nLxv}p&njARtoj-1F9=iKrO^rasPp(g&edqL+ ztdP}d4xF&APG!d+WNp*#A*9(ws9(!2LOTcYK%J$BoUnJMz9_BX<>OcuV&e%o;oLF( zPbKX!f@iOxe7JWWuQ9ody6h@6;(NOa$@O*>8VhAtu{w3&OK%UL^>7>;FOSH*0!RL@ zF;wz@a(&s|jNF#4Zd`NpY=tF@mt-%8m&R?#2{}zv?jAf@I2ubH{&v=&Ey~HGtbDxo z^6r#~*Pc#NXJ#c6-`8>S=Y8aa?9j7OzWaq-_&BsUz zEBguTp{~CCIShBCRe zXlNw7NB&MbdOW9%D7m(I3q$t;uGP*{=h4u;hFhn7%bZ8UYuqyTBO(sUibCJJX^V{Y zJ?sjxy9bWkNNa&|qTtDc)Ke44wKExIG(_eAl0qVL5RQx|N*UK)&ZB3wWIRGN_Rbn5 z*E?&}Y_2RRbdxP%rI#;BvSdr-MVf8C!^a#w5izy8Eg_bF z$BK|1_ydlNOjb%pb|>#4cNaObG-VLIEKPQMS(=;SLR)$sfL`9s8+&$fiy!)#n#;!g zC%vu)v3tN%;?m$o|F{9q!GJi)%*wEm$Gn@7n<ui%8V zGv)&7DL@-2&7a6)?JHr(G`U3v2loDjJ?aKbun?!pS` z1LeKJlmE(_UjBP1BiqY=qeij;=;R$*8@yWqHBuY$ifV%o%2@Vy+{xqY*>-u{@K!jV zeCvkSaM`H)?x#k;1AQ@P?4J4ig|5}kQ#UqT9`EGc+1cda5#ublmbJe>;CFW}$8ixF z-uqf-9_TY>)CTWj?ON5)x-+Ucm_&4bLFAJdycQc~_K$_&0O@^;}n5F%DaLmUqZ5EOhP<$iuYt; zYUOrn3&{fBgcA}s8HY)dvuwsoMZtMPOYePmlv$|xL#C1;Z4akvwS{FNi+O7K(B?&U&pKXsl(?tE8Y zIxoPHA<4^u2f15fkuIbHYBwy`V?Y3Tn6S4{^>kFRjPyJVNKOwPE9vE`ugKA0dTX%6cEzgt> zlIO{rlIM}DQM;F|Y2=q|ZGXs2fesK(PxI3aR6c?({MU7frICuDpoe+{mc$8rLvxv!kSwQ^gXr7=JB&d@X#LVf&X zta(=>+qmOqBsW7kd5x}yewVwtwZiEM)j28~7F?U%9PBl@8qUI1<&VqZMUCSoTGvXrW>^eQp zu5X#YGhCOvEqR-ed09DJSQ6IxS6N)zk5{ZjvNu29$BQ#VX?y~1$%x#Oa6+t~WSA%!)nIy($$VP$)t#K!#`i6!48kJS92{4wqeYkg&q z!3sIwE19HnM^^srA(Q>5GeUgd0Vm{tGVO#Tk5qd~7Ad4(-bGGGKfebj#O@wAAz4i? z165y5AlJ?zKh3*X`3%X=J5Fm-$svVALHT6J2=V49b^qt`$`hSs#pWa$Gq&NOyg3Co zL;e{O+0V*6*@Py5PV&ZiMyaz64qyt$p4 z;`R54#**O)*(2RSPRR3e7fy&b_uz!|p0dK=l@Zoa90anwL%P9hv^03dslf+j=60uP zcn!BMYQ|~!G~BW~6>%1>nl`&A4fn|9f@1o>-$LV)^+`QoQxYJdq-$%~XkVhp4 zB@;wT$pw}F@q1&+0pmV-pW;~ZJ|Sz2a=?&V8LwCc(YPv0@mf8NT?0%07NwjeO9m%I z>&r+AtJdCmA@zINo;>a4dWuOe(^EW3p7(0nt9D+)y0Eg!1>+7mp`QDa6TaEiSMMsr zi!zyByvtTj%k}tM<0aPfRe$y(xxZu8?g=(qqa7gC{GLH@&Pd?q(!PUPulo$*<6OED?>z;lAlO z$tm-TvXD%;WPsmxa+7J}JL(E)T}Cxur#m_I)emq&>?&&vUP#@u$O(zyIXEG8e}vbQ5Py`1MxEc%UhU^=S&EkskFLZ0-bpHof56@B zxVWa5y*yQMEP1Ms5qgW-0n_SJ?x4Hl)Rup-Fx>c()3AO)isDtQ!`bWhd{> zV!TH#N<%Gs3;vF?(T=PCZh%`iUE5sr_L=^7`kkI(?c!N!^u8OZPQUYWXdHZxxd^#P zIFE+vnKV7)^qe#DF4J)lb?q7|@8aMi?M{V#4L4d`8@wie=Rb7iA4w)vhIQGv=oulVj@{WQDXz z*=q1)t(xmsAg4@~C;hqP?(5pkX;D_GASazGsVl6Wm+bb%yo<(iHaXsL8s#rjTS#8r z%VE{(^~ecXWlIK2wyBZT%QjW_E$Rw6|LWzMn#+}AhODwiZ0w`1u(s}f*j8Toao(fF zpCBhBUOGJtUN~oLS$<3VAaZ1tnlC<4kqMq+wt|+;$s4HZIDsK#4IU|w& z8aW{?{svCDAniB>cRH~~p=5?+fpIU#+*xGF@8r(~I3YRdPjEtFQ!>6^@?N#m%kJV{ z+9~;+5Z|w$vz6T`%cI@O^g@=54~>6NTgdn4Z@>wOhH}E-mF1!FHgcRns?~SkgtYoD z+`UA+{ufTj`SX3afKE~xDRt2CZqC*iYRCs=Rvowg4qZit>T#zi&aP{L&%9hL+_{l! z!O%W%EpU3Ayz|G&PnsTfc4u!*cB9et8Bf#$Y~)v??;`}?|RMc zx?JzLEYXd2=Z|Zz^T&-wr^mH-vN=lmjPHRFL7vp$o&KTzIC=LCNl*tMtgy1mG2;%orba|L z30FMm{PO8%&fk#nQx@kUs^c>#9yh~+hKYdcO6R(=^} za!QTYUQRig(NQiLazfVP4d@f%%|^IQiF}s08Sb@?Q%knM35mj1xYtMI-hdO57i@zQ z))sGv-O<&KYx=ztR>*VlHk^=Nc?V8N_P+~GNY=F*PKeyQa6){14^Bw?_P`0N-^!rl zju3B@K?f%!+9i(`VnsQ1$O)-CffXT^KY$Z5wm*d9#8#u>BRJ*T=J8n@H{N;DkgmpXU0a?kTv_U0sd$ zAK--OI|C=I-kgO!*VT?|j=LXWXUOceMk=EZSz*;#a{G&&PCYS~(0IAy;+l4@z+Rii zmQz~tc-1d?{OwLs{rxw!g|zY?I3Z8)9XKK5=Pum6L?Zbw-2IM|-FOSjJL)%hH|MKI z8uCtmh-PdC)Nq#dcWxVc+~2%&d4u=pQSLZzo%Pv^pUbbDN3MsQo}u}YYnjtO)K4ex z{PexqJ^`;!d}EBc*m)cNj*EvIF|OV24AY&?Iz8S~=h5(pyZ8<7iFWk-ZpK+|>mhS$ zi~t`c*AFgA&LeNZ-)Z;tyszwy@3E|g6IP9DVAm#+GmXOu$$4Lf6V}>g=OD!Mbw~>Nrb2Hwq0!mfO=y($ zb`zl~`=;zC*gL?M-GdO%wUdbZGwdkzB=vR_8Y|oJyS<-aPk`;+$nHsOe=8Qr2_z>w zNsZ`|bqn$QW8{Q2zMsGfkyNf8ypTDmDMpdjwE8^C|o<+CtsJ9lSm55GQWir(vt7s@`(>Cs$24PA>Jr=4;gZJ%^wy-tW;J-{>F_>opGEs!sFU}WU8~*b z8lHhVO|Jikjk}rpXQ%}qCD)^Fta?pDTj%=6dE}x!RF9M2XJ$wz?;_;<_mOk+lxwl; zeb<8F9(iB=9p|lkuADp;a(T=Ag5869q3j-ntakH|6Y}3R=feq^*B^ruQg;E|!bDc) z-X24l=n~|f?Bo>Br{LIiXf%{vhjta%)y^Vhh1e+j3-%ImH^*MtO$e#2okiRilBa85 z5gdC2#j)%Vg#3la7egi^D8%wha6;s?s|fzpyhmhSLrzF;qs%^dGJHj0D{?}zzSrTD zztfIh-mZPbPUM8teH%_#XTW!0cO@cOvU?#b*1O0F@%lZuJzZUSy%%nO$0>rnJwV*a zK2i1`@5%U8yO-~4WKPTXtKTK#CzGE{jfb)Qd1qVWrey6x+M*0TWXR<8S?SD~{MVgE z`S=Z1PK;PlRu5ltSY_+M39H}A*Mk)j?~=DGSLZK-l^mTcHfoqTR6fP+_{kB;yK1jI z>l%rb9Y?w~-ZaLl*Xp72(O47L8T)zWF~6>hr+RXIzK_?Y zj#FGV!wH$QHGc=soGt6UIa_Tmb2js{Y?S$#=R!6nu<=1>SNcALo9sC0D|4if`Cjv7 z$S`llyNpq9=2WD6GpBayW!@ArAL@i8^vp1q>NzQMDf6a2@h|hHWi-M( zpEI4CxuU)q>%(h!U5ZoO##`P!$_c}N*eK5+qaNup?iu6qrZ>j*%*;H-HLiIw%Xrp! zpfAtTx@(EG*RI2ABp_Kvf{-(+KamqMivEJTHBIAf*!JkqD5=&pRzjXJqvx}X86lQ5 zenPJMnev|U=$&?7qNgG6W@V?x$+y=)e@3FY;{kvCm~(dBobTk72|r+$o^SB&b}`Nx z@-A*pPdg62zlQ2}?RBfSi<|70=XY&1JVv4RYUBAnUOa!2E6*QmLfp++tgH&;$g)&& zWS&%cRi0Fh`uePd5-jn~_nG^Cuxm5^H7q>Jo#ST4_PX3$?);sxj~cCTW6yi!?@TsZ z=bu|=+qI#sf2L8eXnu^XMyq`r-1u<5YD^EZ(C#@GCI6|ho88=B_V;a;N9FnD>_+XH zA9eEiU6@$oya;x2$0{;Q;Dl9DXEbp~$h`OzlENyv6jq4jGPvgxd7@u{TitQ8y$0^Z zME!TP$D`L@f@MBZd&+#YzpJe|Y63atBaOW>8y)ZD;+i8{d-`~Pv16t2QofJZwT@Hm zk~c6%4Id${hI=mBBZ{+va10-L=g;+r>JNp@C*IG#z6N*7C}hv2NUV>08RHF!b;N9h z71mzg1S_nvn_)SV(7L)4ZpJf-kjWO7F~aUkxj_vIi3~%V?~J9AjSXDP#Uj`cO5V%~HI&pVA^q zqx_^932sceF&;XNrvDu^hFf>fp7Ykl!>v2gQ=SUq&XYYe%N$3G$_Qp$Y7CWe$tal2 zxR+6IG3rHcOYTy>kJsgnliU@!dmSgavO8hklU&?Jl6QRfqrtn+CPLJV2p9X=%9-4n z{~sPb&@ae8!0Wtu7Fhi+tS~Zmig{#gPM#sh&z#E4g_&EKc`)-TGaqJtWgdfhtTGE= z7F1>-%)-hnf>~6V$6+3?%o8wARAw>E;>s+6SyGuNVV~9W=V6|&%nL9tRAx2I>dLHv zSyP!8VP34vOE520W-ZLx%8bK|2cxHO>}8mjEAtA>E0tLXv#v7hlexb>%9^#JAV#Pa zI-ldQ4U*arQgMSPTU->ARo$_TDfQUKQeL3)!YpgGTBP#QdViV9%d?Eu6=I&P63?l; zaztX4n6=61dy3;Kzg%m)qHr?cJ>Mt0Nj-6SJ*q*sk)9 z5s95*b|oXPcB_13MB=EJV^zm-mA}ri_5|Oke5&3*t#VvzJAM!oS8AM5IRaPf=zUy- zQ+tysxjADS`8MkmH`VW>T-m3La(5ba&oLH8<@CR=r};9qeoV=={TqA0MoVtq*pY_a zGJdCQ5UHLoWz8Cud(h{W-FEyQtlN@n>1)Mh?%0F++I7qKC#KrblH>0SOp8HFj&spz za&yO8ecl=y-SfXGpZ}$sVuUKj%T!*Q<;m=?ah12#``cCCpXI2R5))#MBqNPSRX#H! zaaPQ=Dsf%q-#5k6tTFM2%5kNQH#VKRAFs042s=^guB^K^RgNnf{)`&&nm6{!V~f(S zc;8)%j%Yk;`?w$X<5lG2UX;4)ys>SeHPwm{PCbF6T;?;GRv~HO69d#R+cfY@}?@kS>{>_b%D;ctKITwbXFVHTE^BWSN4*lT+5>}$BxQr z?2m0_{@WUTqWNmnzv)B)_gJBlF|6xuJW!dOUrJR z_m9+=5OaTo36CX;mwGYN^zOa zj=e2yZ;xmbb3YlyFyzGu>-g=lx@FGs?v+tsT3hX;-N^q4NDKBM~4@ICX|T%C#jmcaH5&{qeIqG|JbpcVXVG%zH5J zRb~&&p33Y^X6fE2YyMxR^4cuxH?hZ6UYBKAS+DY@ENiT7R(V^N6^-pG@6R&cPl!2^ zjOMhXDxb-+VtQ8P`&C0!6C-5R>2YPg9F;5MVU)vzUhR^Vj!LR6J-K%6vi9sfl^<-S z*I73|*xGw44?{~k@-TGosXPiTGIo?f^C)(zUe}hOdTe^}Ae)hRkj-d3$mYrF zgKYN1gKXPcj-3Z(+di~4K9c3MJ9bp%Gg(&Fcvj{6Sw>@kIN{WaG0K$@J<3UYuWnmo zc}7NSm)*iB*Q!1BJ)HlNWDc3;(bWF`ziLmN9!yC-eC?_8m#Nw)RR2R9>59JQ)|WEg7wy+g0A5W$B$z`AC-4o}((C8PRZ7%(W_UUFG{( zF6)k%FqoWrS?}WlSDv0xxiX4Ixf0P)ZnovZC3#{Q$t&7I7iR_E`nTRNK zWB&t~4=VE^%!iekgqf_&M=&2%=3|(TEAt7=CzUyn%$@_KyjSJ@Syqoss2n0yV(cI~ z4u;HR#$@bMm`^M78O&#uIRta4GKXOfSLSn=&nxo<%omk80&}D?M`4ZzqfaBpzJ&R* zGGD=bRheTj$0~Ci=6GekhWWZO-@trRnG-N4DsvL%WH4Gi#=eF5wld$rd{>$8VZN`- zDVS50ISq5VGC#olP?<9@XDV|R=4>!m)nDge&Q<0|m>(;19_D;yF2Gy}M&o|$Czziq z^E1rP!E|lE2y?MAmtZahqZw}O7nolv^DE4+mAMRaxiVK^t_0IPH&?@_SX@ zU*#uMK9Xg;JSrxxwBt*azp6EksT@~4IIi;7_5L?1pUAR$?WD@z*ZZebjw`G5X_e2{ z`xjKcSnFR>`F_10Zi*3Bug7lCqc=h?Eg8EBcQd$dCi@fS&&vFj%)Gy%EN|zlyfDj` zbEGU%dGTM}2~9?HiI}*e^GTKC$`kRF%5f!rOI405+0ZhTpQ-nks~lJEuTXhq-lrX_ z#H=1+)`)qj>R79CT=8jK<#kzB*1BHhxK^DT#B5APqkEIeapjratn!w6f2+!I#mm=K zjw>1G8!E?@IBrvUf0dt5`Apu|+;Uds^I6tBazW*bS=Q5aN#)B~R(^6t<+#=sTon^n zeh2n9mE(#B*Hn%x{cv67xDun^RgNq2f2bT+B636JxN`rd%D1wt7Ti|(PL?&c?y7vh z-jB``BSfahX@vE-DCW59v9dUgo7z!~T4~oVnc}EqIc=Wern2=Zu10&BZ6Y*{Yt_0~3G`Y4f<*)pW zwyvBxk8&k19pze4Xj>_JkZoav*xWB`-;?jl^17OtzV+@@>^xLSfTRD zD!)qQ)%E@wmDlEd&BEg5g<;%7H6_u}5`Rgj* z$g+CkrpmXntTxF6X3Ht=;p-CR|BM#vc2DlXXtkoy?xnWnveTVvOC1T* zY(IPpTRygWulyC%|FS%_){aW*dtTE#Bobq{b1s{6J4W;?`E91TD$mQZJe#j_h$N$t zJN9?hSo?RBmFbVGyg$pjKcVu0ENdhkRQX7~e^liYf0w!Eq{^YPN{s!J78d^#8nmNZ zqVm!#2cPr8GBL}Okq;|WUYlikJ+AVmEUU*htGp%4itSdFw`E!L#CDbA%5(mv%5g>C zTPnwu`a4vPE2Dd-%5lY?w^fcSpO3zya$LE;OXaxoDgADh_hecA>{WSxmb;j$Jeg&E zdi9aY2ePd89aQ;Ht$$eMBUx5Fj;eet%Q|5@uJVa2OaDogzt6Jbb4um7;_qpd&R|{$1s`5`jNdzEL&Y zRQXnxW#P8Ue`i^HfPYkuD?M^Y<+zf?+*SEr-d9BbRr!9F)q-$KjIesyW6SI?Dk*Pz zaxIPJnV+gV^}WFU+Y!gRPS$Ac}tcRo2@Eu&$4X1sd8Mo|CY+TvaDQux61poEd3KIPi9$d z`AFrs66cRqjw|w?sC=NxA5=N6JiVW)99QH&Q#r2qb4ca5GCLerIj+cmu5w(Nuf9+@ zuK0IE<+!5nsLIE(tn-26DxbI$Yu2so>ys*fpZE3qwx?7+UG@E-@|im^yXZT@XH`C* z_4U2a3o6Hzc>JVtT#5J3Dqqa9>|av(a+cLUS5&@M>t9#-My-ESi zF+P(k<86wYntP_WmRwt3dA|OuZh0O?<;pBG$~`DI^?CNF+=FdvwPW7cC7##Ox-Fl} z^EE10X17tURrkS|j;PN$|NB3@PHH@q{r@XFQ}6uW==|U4Xg=Tx z{QuQ>(Cq)f?9yg6M?N4sjb+YJ#z8wf$hNz=B<``ArqqASPqWyGTitEhcKiN6_TIC( zj%+*AOnT5%0W5lZ4lU>bde3uMpm#vg7aa}>k^n70SD-)LtuGy#mhK;DNzvbCq!~?5 z^cVF=aTOuQYDv@N)s<8w6T`nUYrXqjEB8rclHjdU>)vTZ0J-yha_zO(wrOxq;#26q zl;3bJ$+p7?)fVBId&mgPZylVehiRMd;s4K6+B0`eD&h^}T|Y=_y`dlf)HypoupafQ zA1hUcl+Vrew1^^Lh|H!m3lyH>Iln)0c{N-}-7qWN1* zhLr8HhOA9f=4~fK%6IFmCqv46@(pB2c|W6X57GFLvJ8ETh_cO^^7)UxAy*kv+UZ+H zlp$pq`uJj@}BM>8B)e_hzu$H>Dy1VT%@drzWqemQBC>GSKo7@ z3@O`L-*Tc1Dcf1!a-s|=`xn>n!jSSF-mc`4GM2BH7b#;tNp?z8wu`JtTV+**zxH_cU4`>3bTrP4&&5*1ylmUTDf#UXr~E4Ck-cWc9%8 zo|aUS!11&o$OM5>Sk zomF1Xy!9jx`dpuoPIHxgg^gt$Rc($l{m5wJZc9o8+Z;nR0`sP(N%CM_y zUK!&&Vpqnv;^klH?24CHvaqu&*}N;%5B7XfdlZey;&%G+a^$a2>EAOXhK4iTk7bWf zKO|Z2tg-RB9_PH5-K;fQ!EDC{Td;AoM9M3$@nlH(_u&a-NO{lRL^fGdj)Ey*mRR%^EGM{9=lLaIToGc_+=%hqaa#AKK3&9GNEFxLtWHHHN zCre0{I9W=v)X6fEWlolpEO*jM(&}Ud$qFYcNme>pMY77tYLeAX){v}mvX*46lXWEP zoV1a&IcX0}qlE+@N5c01Wavd2kS4a%j1)}K94&Bee}X*{%z|Rbf?-Qo-XKq)re;Rx~>}WOC3RwGKLJZPcp`K z)(R*f=h(7mdqIPLpBkXuU7 z%D18Ks7Ca6q5Gp810Z!Jh*2DYAWdgz%&g8a%gc)hGX5B6hT3@im`9YHT+&vYaLMY_ z1l_C}BeMm1mTLSZWHxk3HAY$)x>YrzUIE>v8m-z6y;U{J+Xh`x&FHHj2i?OV=uXvG z0lJ{O{df(!S2ZH&gYH+oTYGH)deH5kLf2K>a}p3KUKygqzHG>>{bM`$&e-MU&9k$W zIrfLMTE-vdR)*!plIJhaF0a0}`p2>4+2#4mi!U!0se<-Iav5XmvbAy(bhBz&w1CV~ z0zb2%OR6zP%h0W=F?v=&x2Z-uw?oU8>(qK^*?I{ZKsH{!%%?Y-pk?b8n?YpD=N4O_ zw|b6k(3L1h73822w8$ao&d8z*M7AvTD`?qr44#CRt^dX46o_m`CwO9U8v2~)I1hbM zHG1X}^kuC%zBOe=53S>4jOg~%o^pZadhH!4G{y<;nn(Y+5XFV80Hd#FvQZCqA(UKx|TTyi|q z0(n;1+UC`5Xn8|p%J{ySj>@DL{Ulp{Zln+Tj_MAHFu4oeuNr5p0q8;1n5|Et>#A)n z1d$3Vv$Zg0wid?Bp8v%RYZCm(hW>1QjP30ExiQNt!`9o_F0TwJN^3rhl84qVv~)Ia zo}GPjFpefKYV<;K1#ABmX;J7V=w{W7wgqIC5?ry&hHh1jHd_HLThFl)M7Hd?RnW5K z*rp zI3s7Gu^ANG<(2U&C%(MAd9k1;GUXzcq#I+bTUrXfnxJQ?Mr+Q7E~#d#l|fpSgzE|D zHq|J(9eS&3^w&1%ifXiG75boRdOQTu8IdlKb4t+1=b^h*qg89ry{b`WA9TNJL_GjK zs2a6;3SIZ(QZNY8bd1EzS}|tU+A+(svtEwvSl3L+dAV&>%;X*)R;QTSx)`(ka%>!b z+!A$6YC0<9r)DjhTqU{c<08XQM)FYmrTL-V<+MPT9;U5U25D1*9PQ9sRHL1@LhtnByPzwo(E?TI zy{a*XzJ!)7{dGXgmdE!&%a+IYL(7&ebpZObA3p;vTb6eg`kZRScOLqp+h2n2c7HYK zUO(Ok-LIN`JpfX73&9{r8Fd3o`!u$*)h}i?Mq*}bQp`}3hBETXWs7C(Y%Pub+4zcC zUMzWbd9e(&$_*ITYv}etaji zY}rb?pm#?e_kdKCpg*e62i?OV=%Zf3G3ZV`jyc)|ea`LALtj*lb@UQ+w;!)TUsa8{ zdkuQfk3WU3t4>D^m`J5IUSpPTnNRcb+jx(C+UQJKx>BVqKOVdCj_q(Ai#o^#DO)_l z@?x>M7yBD-J$^{u;g&J9tr12<>sns}U7E8>;32PVAyxi8-vEA@JhAZxGv@WG@q%N3yW#}cUG1rzt%huK# z=w+%A(Q;_na-_FH%a-;lpjZ3xHPCH-ydAotn)R-NbSgppx}du~M-5txqddtVducHB zBNj2Wc8M8F%vhowlBepi`>EBV23>z@^^}7kNbL^e8OFsk$zwAJL~Nc(K1tZGF~xsK zf`x2oiT`kvVR?39lH>6cb0^Oc^>c|DH5aEKNZE_Y3)sA9Xk9R|Qre?&Brjq0(zF}{ zLF)aRyn@xM247%er!JbqGFr=yfI{equoN^otDQl^{p?2X%Y(uaA z>QIRkZJv$zSA}Es7}5*BbW}fGDx<^Z^G8~n)_4LTrdjJSOGs&p(Vk-)o+~uk+8s{T zujt&dfc4YbSU;03H9>j$nQR^X`uXd0p6DmAmFlOhg(6!0w6(I5rd;F8WcsORvBSAj zKlQA3ZGjFK-1_-vWxF+HEc)#uWtG5ClPZ~h z??CL(YWlqcwL2G>Y_)aHllBG*%RaLHz!3ES*| znGtho!a>(SEaOKbLr+^|-NBt~HQpLMGTx4Y9?p!FH@_nR;crym{*IRZRyEr19rSmq z;p=;7G0}3^CsZK`9Jbb;JkC!F{R&YDT-$F*#2Jp`Y>QD^fB8k~!%e@{t5m9`)NZR<^#CLm5){sNXYIij*F) z)(b=GmbT_&ou}m-=ANsmTk7|1)F)C}>i2Dwl{9tBGO2!hCZ+nl8MWnEL-w>s?7X4h zmPu{(`!Z_V7AV@z&L;XDn$%LiMWdET8I`_4LmAIIvZp24nWv&h{c5~Q+k={V4GxhW z2^8fYB}3|#$4HT~e0__AmalJ)NPTvaB4v--nM&Uiky`4TA~e5#Z%!ymKTXDS8m=(x zjCL{D$yV#B-;~kZ_~l%`Ld_Kh9&2Psxkl)_8Z;kLucN-LLFo-m8P82Jq;83Gs~pky zCzz$aKS6Wzd@6eyrJYgrZ3$+nZ%a^1r0(+tsU*6`@~J`+xNOyP&XMT*JL;bn#pmlH z`{EMNqB$l1>*n|oN`L#i*5dDeSKIFAs?k1w3;mrR{~r1uRI}WF1d%QK?4O`z>lXhE z^4={ZBRfcJ?CC~Itd&!e)-Yv5t?YE1y4Ss5WF&pilh#|q$U8USY~c0Q?@X#CQl~gm z2wkK{8Qo%9=C7K0>m$}T_gQ8B{Pm4%8T!*!GOS*nA8VNS;Ho8iI>&6?!hC0>eJrW2 zspl6#&b<#Ev7XE37@U+puZ!#@f5A%dubCsWs=WC<>*H^KPshSvsmA#FYv}*($KOKB z*4yqK$j{v3Z=ip!I?PSzzw_gN4=r2w@EwS3oqP}S4@z(s{*Tbw73oCLI0KO_n>b}w z!IW5Yr(~#&O{vsoXs*1{GFA;?*-RApNgOkfD-W*GBzJT0fNN;GTACFY?tF3OB)SwB zuE)!|FTb3%yS1t8N{4e6--ESl8qQf%DKlfy7j`|uSqM9ugS;X@e0D|99b!S#))))t zD(q~o_D6ODwBvaiW!PDoa~glu7c*LNFC89Pj(H=Rx$ljjaX8q%H6*+zc70iEo z&QDKoeqRRn9ku=T_qD&?sz$55gZ>-Ui0bFi-~GOQX7_vO_kNrXHA&k;T?S$`ONsEz z1WNx_lv-u;4Y6q~P?h|K9}Ar-<*5^44fc51*bw`?8*t6}seWj0lamt$1I;E3CxUp_ z#<8iuh|)W4Ej>Wp zuuia`kf=rGP94oV{#r8d44p zeS4qQ7%A^wa2F^lKgC}t&&LjS9#oRi9g3 zW#r#k;l7Ebyrd;kA4RW7k@A1=ye31+l?>xUILC>tNwkzi_uMOWNE(i0#)=$^Cpo=i z1m*ZB8lCiFzDo@ymQ~4bB~U!`tCH;v4CQ@Ewm&f0YGemUy90$~jST(D{<41M*%Wrx zhv*yH+1Zpm13T*()IR+@H%pNulwCBtKRO3F-!OJBU?vao#G2;tqGei4wS+{{X!M{| z8$D=;;wK12o>A9~U$Bf{d>S+-;>=TPTJUf6=68a|&Fh*b)?u=y9EVfL_{$YEM??-SNEwvlAikz=jIC@_O8iZ(5SJ=V_h z5E*M~k#z<;dbD}k-9T&1-ybMu`2bnH!BPY{_ljr5r_IwLe%}6p)DG*&yFbv`^E1_m z>~Eldt{Uf%zlHug)tFm<4=r1^&Uet?|AF<{KS0Zt{{9jAy&q32C>A2PN@x(_M=%Q3 zgG$+Hc$k{$G7N|^?bv0n)M2K}khe;^U!cp7KhtGJi+#}_^NI#98eKwTblfXmaPe`# z)c);%mG*+~cmGve>%D488=EzciBXC(jg6kpH1=+FnQ3fvRHm^J%&;08O<2=7ca7D?nM_tKvItDL#HyecNbdR5o44{F>w%aSXi2pHlmA=Glr8UK{uKJHYP82Y==Z9{PJ3Q6%daNs z;2avb+2Qo&mj`x&<6Op=x8a48536S(Mg0XvfPlQA*E~c5BMVbv3fyz>vF- zj1!NlMKB+)%yNm7L*@S;IzgF&r^V_!5`ItxZd zQMpBvu_zw2b_g(vv-q4=0atA%P}A^spJSJ5~^Vn=>t;+*J7C|gQj1>QnrS&Q8AkwNEr`404Fv` zxxU~7aKezXQFhWFQrhhzLrQTWQ zHQMzCJK1X2W+o+CH8Uw`Y18sm$Pb@*_#~R=qx`9nuF0BHe#1{RRI(g(pjB+&kvqlw z3S-zgiXYqB;AKQ_w3THalK`>5Rf725L4T(jxxR;f@5kvv6Zg@;u%xCW7#2M@K#>}X zHXx^f>}g;&33y?J6J`r7KQJ+vyG%=d257f>%zOd}&q!>#@FI%2+nJk#6c;X4G7eI7 z+99$|O*wG8$T)CCY1x^fi`+F@a_HVsyUf5v`(y?#2D1%Y4pFp@xT8nz6+a)c%ZaRg z(NHg1)g`}1&GJH`K8w#|s8No6QA9=SddB|EPo+$ZvTuK?W9hAGl=Tk!JJlEk-$VbC zYP8xvL%&yTKGi{}g+-f^4%Rm%Vwu|p#pf_9N6QFB>0Yrt%G5?yYt9n*usM=9A6nI( z{g4^uXa^hPTZ0|S*v2wGusDl_);2Tp(N39>k5V$@9*aX}+|y%brTcu};R3jB_%cWW19JBomx8 zku*7(NHWpMB$7!^CX-BdGKFM{lg~&#bMiUK=T4eQnw_*LncN~8BX0_{Z2biI8Hj9Y z@j0|?d4bamEnB|&rv+NJynL7nEnDXQ0(zR;PluK*kI#UXE&b1gmMt%kW-!L5uXjLbl!_*Fj{<2yZ~&REr+Hkm`k& zE&ur32mRX0OzP0GP5;deh!m>~7r@C>_S94%cx7ku1<4me@L(yKMlwwZN=~MeOcx^V zG@4`v*^G$IB%3J=m%+&_l37A!x}qA-uBy-nJ^vx-6K>xLEnAk~1>LKfb?*bYqXZ@1g}&z=??d;y z#{uZN+lw0zq}IlB*iv)EYiRYkO4iOz%UuW3HrHCJ9r{vaaT%mXEg0){5ZQY4H$ZwL zn?8`ck1i;A0-`@k4B9w-GT5EjmwI zv_3Cw3z1+*y@itb?2Gx{7YmScfoZV^L7L`U2&;u+Ww$IKVx>$H%$$;1RZ3=6g|4ga z(BpCt1gVXMG9xOB748g@MI?)yEGAj(WC_UAzKr%waQ9s%~Kg#kP_yDk`1Yiq1Y0wnXFS^6V^#i zjFl$n$*OVNH3hm^HC|2E0zFMN=Js^xk{>Tax2lG}70?yc@K=TIR*mv&(6Z&Keid4_ z93$7DWy|9|(EWaV0J`q}r7|E$(?8C{%x))RhPq|)=GocYiSyc>Xv}PU#|-OxrVRTy zSZtS<7j2cvJ2V!yQN}K>Zh2)4^_R}mI6nIbTFmm=Dz6OKC2btjZPLpUEM|Q>S$o9R zldX@~2C@ypFshS{BpaPU zx@wzmAd*d)o#$c}M#mAvc*OEmp%1E-tlFoCKxE6=a~QfFS%@JRQqPy6doezaqO_yp zJ+ugPUA46ch~#w}?8}A>voJXZKgZH2t047=h&>omwo-j|L(9g#Y{(=*L|u%$OYFi~ z{VS5MoSY;%>Esm2DJQ2%PCGe6a>mJ7lCw_Ek(_gKp5(lfuSvdka)IQ6lZzx5om?Wh z2^{hsR^+*yGnL7V%Ny7MXZOcCt}x?HD6Cj3&=Dj7?;zbWy`rT z1G?nL%g}AA(O>P*mB?ciq*Docz6-irHAYVjx0P;c!Vt5H%S8cDs1Ch{`*?5W> z#xst~hIYF-?qWMckg*e)W0_A;c5(x)ctc{rJzfiRNj2t78M;k1?AxI$s?lau=uXv$ zrwh7UHCDMAbiW@TfPQqt`s6Y6pdM$GPeEQp7tkry za(#RPJ*W}jI|)yr>+Vm&0zsP2*_herj~Q#zkb6vGFV;*gz1|I$dF3=(>Suv8=5b@~ zgZZh?kLQ-m$e(BF>t`k+TQ%Zx#DptEO!F+!cf;_AK5wuaeya`Nl4GNxocy*JZe51P zZR^G>opH^tY&^C=&r*%`U^a9~HGGtzTmAS7=&hcA8}v@q_-n#0=-sL@!}dT|{CE|* zQ#Jf|L7!8N8GatRTQ%xhgYHo+abre;^uDqg(g)qI7ASE5dQdf92KN-Y9(fQ)U`W#^ zKryqkO3duuE@sxwF+&uYGVBS}$Lv_gOm4J9hS?c1_Go9ZH&csdFAHW+0|d1 zH_y&yT5N~0k<>Ak>e7}{C7tvMUnDVf9i52KPJo47O0qLGS2+z`nkb}9{HqcVYk0qwe{Q9|AvBMy$ zl641$pD>1P{UfCt(p4TAfh;Jvi+ZB{?a^fP&rY2I(Hhrst+9Bm~tZ!9Nre9_?fBGd>W%{{udzdqu z3@Mj-eQSc+A?30;mrUQJVE*(?3TnsxKz~|)u7NZP_<{J|4``<`gqQSZWYn$^ZJ!EQt zD9T!b{IVx-5<(5as1NJmD2rd;-71CP)TeK5y|N11Fv3=2Uno*q>3fURKT?iFeSeWM zwuYTZNhQ&}A+>g%Z(n>)DOxQ)*xM{EBq5&6O62j#PQiLqbdIpgH1!+Y=pHX{0%+hJ z1^)B>6t~0=w14xP7UQ?Ssqwv4jox?%{heyu27C|wUiHw}1=?wgwG>ixTCis=+CZUY zbdOi|HlVpg;;Pn`NG^vs1=(_lC5_9!Eoq$2s77WoV1i&WNSOyixw6&H(67j7Je`3e zcNf{Yz;Kc|Pu3k6BDBfW8yJR_enCe4VF|N)9WwnQjMNzZo|3%?Otu=$OHxiKYh6-F zbnjCqRIz>0L_mA7w2*{yi~2Ttf#dPUV~xHfYy7-$-1LsfoxX?P5ujaRfbv(*DB=divNKx4~Sq`ZOCH`i;qNICKK&GpKV^1ZbBiWOy?_~?F{ z_?+aZbD4I_HRT|0C2I>zw%Q8qq+0_;gxkm}fx%;yjFTMWrbfm|4!g`G7Yi+AfR>!R zq>_+xuXs8#2l^@)Yfhgs#&J#NG;>vkKh%^ppZqQg`7zBGlLaJO4Y`5Y-*_}<_!(NZ zb4*gpk1I{qOJA3w9*}YY)c1EOL+X)Z5f_TosV(OptRIqYmH$I|LUcLgnx@{^S-$&m8Ay^3tL zrnFl_#)*p&U`upGkMWZSRoZ=E+Kx}^`Wb~9Es=8M;}%CaQkIMx8ezDJ;gfK?iRo7# zv};((8{TOY%@^8AHq9B5-~;m_hubIhv-YBMXJl~+=nG^AWMGf!Pujy-ol%E)mhl;cPlxt;ZQMm5}}`|^t^#FnU%A*H{) zWJu}nOERRi>mWl)yM1H_HD!w(BFmqq=Yl1M*?C%a2Zlew)yO_DO)&&*n({gf1HF%V zk+NNHks)O(+$MXbDQowf3@NWhUyvc?^^Dz;y^iwYWFQ)8@!fvWHA4Ogn{kO-M!~)G zvLMTgmXi-I4mtjd{Me;Nw%p9}_Wu8}k&qe+v0Cbo)B|}pa)Fy=nmusTL+21(1S(sd zk;CRaxz_pgQ+;RbIrB&{=VYIAWw*wWnJZ{vyAI_{!E&0JDQF>^DIXbi4Xsv^@}=b& zQCXGz@>GtJR*-Gg)GfD>vPQ79`W$VrJVr}KB}(fl2|4#NtN%x>=|>%D#I#4R(W4~a z{!tq7fBPe~lkKRaMK1~d5?Z!gx&8`Twxg2edi<}UW$ShRe?WfbIsOJ(wxbigTl448 zvK^E3X&wI-TDJVJ>wgE$=-g|j26&E;*5D)7nfhj}hxqX`PR!fyd2H z(-3>FSI!ZP@Ek5EcT6aP5TAF;|`eK`tgmD+nbIY;82NppBz8%EZ6Rq~OtsGjtg zUZ4qRh%_@6-~6#ekD31M9}l&&(%fsqI`co4>M)g9F*|gKYP8LP$yUc2uKZ*l*JHHA z)t9hRutaZ`bzgqDBEqAsh)6juGPgGPdw|{AAZ7pJHb?yNb_eT5=5_~X&vur(UQ_SU z4WwL)5lv<#?$Fv*X?HN>MxPxb<5gJRnFT$TIkO;|8uRuBf5_WM#@iyqGC(#M?C?1F zDH&I2dx%6TNw7tJs*nU;^p};QwFJGEqd7R6a~?Nrnb zMUU1$)gITyHdj9|PY_>bmPqw^Yn zAyOdTsJWX zY~8GcyjaDnwBrg1J6j>UgPm;EV~v*mfuf}c$ar4vDOf{_&Zme#T+j>mKK(rSspU#R z1(Cv&^%9;Qa+SwZL&=x-q!4F7+BLB*NO?6sQCWSGZiAKVLCxngMs1%3*e_ultjgH0 zL^f6IcSklg?AJ*~$vvm|hO#uoU`kRv!{pan@C>sQeLk#gPc@O!D)X5!^k!zvq20>j zT~|AfIoZ=z&Wt+buF~=YqYh__8tpjdP)cUZu@p&Y%e~@rU`IjU7o8`H>@!cOyxgKE za)@60N86}bQ;zgZTOxm^Es;0Vl87tQlDL}bVi_Ntzc^c3TS|r~9;%Q8UUcq8TsiiF z3R=1NNYQFw|EN_X2}S81+b+|dXuC{%BF0R6GKx%#B6p@mX_;wL#9Grhrpce=xF zQTmmHUbt8MdDY?^MIVhRx^^qNZzwLI_z13O7<))$E4@=R3yNmV?t<}B6e~u5PPw1z z$G(uEQOEHYjqIYU%=~hBR>+C7$bV70VcoRRK1-wJ46r*X{N;w9Zn3}IAf?>`)(|Pr zObf}7`V)c@DN^RP`O_LoMwE7MhG!4-xR!a>MRsju2LnUR50P~SCR^=)n`OK=!?@1e zn<2N&Jl=ERZwr0&$k_-xn~j5^6trRHo{J?*!u;H0y>s{ndnm_VP{G(PK2kI~Itn}$ z*%y~kREy#qpI%0>ui_&O<6O+-$40u1ey4aQHH6}R(kQP?i_Yzg1J-y-DrIRKkG1@x zLiu;J-AC)b<_HYW-R!y$*MOV@xb_p9=3s}sExIqioKxt>G8yL->}*b9&d^^w?JAn` zx~59T`GZ(&_Hb6944V~f2b3XMnVWkY>sDu{SkpdC852g6#l*6H;qhW6(l`8Md>37h zNazJK1mlV|3yEyABkLC^v8a~#yYnz=QXDZnXFSk4(;CG-ijN%CcFK5f_zN8VBG12B z?-M^ddXaJj?k790DZk-#f{ddQ{%lm94R)A`Sl>l=2ZnQMjd_u>4E()bIR9>sKFoZ) z2L7%yFGpU{Il8E?aGjKC3-PEeRBiN(8VMrhUh&nA7{u-TfmH(6IkrmVo!?7ZCZFJy zSw2?|%!bU$(V^wq%CR-%MZ0Wc-n_AXFxbgfb04B5dlRj1y?HuVqV>cc z(AVtG%(+~SYB}g}+2^_ipSEuGt8cDP1G+E2gMp!jnX`FO4@(X$NfON)65T64%NJcc zBf16Q}YC+W6V;fx{~|_ziA|aTi$zqblLTo%QAzKo$rDRKmVSP=Okt`Du zYP+0dd6ch}tW{X(qZK48goHVmrLb5ZN-0cIb*~ z#94*zRvo@c3*F=P*P(m;cptQEJ%(E#w>`%l=(~}{JrLQlPwzv&@*Je zO=#J=MK6eKS#BS+R4lTAk_{Rdm|M zU?P=YIvT9N#7b$f+6SwB4OU=cr8HRW zht+=3_V*4Du~8-o;yM7U1C~oL2vUpvpxVgKL9gdxm1YNxo7~rLQDs zhqg}{x}q9S2ddC@)ndmr6HKJi-8l@Na9lRD3pF{3xKF0usvz}q6^tYqE zNw@(3HJ&V0p-*}K)6lYId1s){>T%4!bI`K&bNhJ^*^WsD zwO_u5zMwhKE*GI?%Lp$)%a+G4Lw9=#HRv8cejQr2?5`WpcU0pHbQfB-W5Rbl?m^%8 z8uUZUmS^Mv=(^{Z<_AH_m@*74mtnRVrFqkrfTxVT)Q~s*D|T#$F`cnPdp5BA`0Vdc zu|Jz(F&kP&zQ3V$i`Rw^drZH2d%e3Ev4_<_AI4wr)-PaQ?+z`ckL9m-m#_`r$0=i9 zHc0c@Gq3H~?+tl5)-o)wP3-wvN&&E8|T>#w~Rc0_7|BU}&#=d_!gnzN<0?TDEMl&!Abs*EI@ZuF@30+r>`b$TGAZ3{uhI(e0tq5^mo2@ZJ8)ov_ ziV)l7`O7Oe&tG2NyjX12iOZGHbeuLsI3}D+8(4ZSi*pYxnO6?O$UEE!hnB&f&6JT> zySyIGvm0(1d3N?qrnp`5%09+NzF@`U7xlW$1AaWY6U=;SHMQz2L>l4m5(oIEFa?&Jl@3nwp0UOIV2 z^2*6;lGje^By}g!G|Kez7Q!&Ho5=JMPZ&nFUgD{pUf2o4Oqoqq3Jjm>EtBczEyNC2 zVETCr&D$0j^0t$04Gd-I=PlH(5*V&Ys$}|k3-Kpg9dr753$^SF6dt?C&IN{&^-~mT zr{7GI+^C&?0!EpBhC&$Tw|<5~S$|-%)lvpX2Lr_%&`(jQrM|mDa^o+(`pybvNO|q0 z@2pT(*OYd$OUk|Ue3a!j-?JPwW$uuu1xHd2FY*(;V?v{3&UBqouQ8W>Z4uhVM~Wgs zkN(NOQ7?b?ZzRIS`Yr!Ihn6k>p7s~evSmxWf&NZ4=IZy*@BMf~`C??%W2{2Nq99PS z6^n+dp&-qtl+%D-G82I`GZj$L%v8WYE7Rv9O+B*3q?{mlwQ^>H;KRI`34$my69hG? z(jO-XqRC7T*kz^%BDCqDHMiER(I2M=9yevC2g=Ay4lHFhIqJb5%8*@p zV{aE!!?j0zsh>ChHf{ZH|E<>btr9$#du0S1nS z3!s6AHJ{e{`B=MK8%xF^h>|h`5OXav{1A3#_~C45!;b?^yz9is3^lBNnW2UVGeeEJ zGlLB)VrHZdW7nHnn*6@`cM=O?{Py3eeybWWyo3HuHO{=>L%&xoc0(3H zyD6q$P10MW6b3HaAr8V36s-klFwKFXikV@Fp_&<%uq!h!hb4x2W>BK5GJ{fbX+)V} z3Ck)y9t_c-u`+`aC1(aD>@q_Vb~XCz4gNZ`+&(gWjg_<;^4=!96WQG*yB8Q%Kz*6I zw$=v*xE$3|GD93C%OU3HUVitgP4S>by>dLE9yxsI+86xi`|-ymLp-IA^fZ4sta~{* z-u#-xk4gRQuVJ98#sc#W`a9Jq|9j~7s)xpJMrnCMaFPwBM?n-f7u?z)XFhNCADh=T z)by{7Y2bllB3YTV&F_XG5yCqCXI@#)nZ|qb>k@_7=s^7T*R`GADuLBI==Z9lx74Uj z_z{knEY5t&fK~WdEdE*3@O*m z3K>$4fht+2rW|&*TxdBKVU2d2%Az#F0n&P~B$b4mdyFZEf22Qiazvl8)%d&wyH6LO z{Ox~`$X{uU@BV}8_o^jTB8mJkw_uy|DKTd$v6E;@>>4j6Hmp)IG*<@$NNsix2}y(F zA8s{PHRS+8bJ+mm4Jka@`35N;YU_&~H7`=0@#c~((3Exy$x4BtUS%>4$cFP$CD_SU zBd^j@OG=x#Mp_TFsE%^9p!U|5^z-&N#5ZdH?l-ig_o{~u1v3&0X5^mteWpRt_12*J zW=`>d2GBQhYC-ycOzb*U-^8hm4G+79hUcQ6X?V$@m9(ZubF-8ZJtAdpYkH)#!;O^K z;&Oovp>KlHXjW@VJN=fWGIkpptevb9*;UCp1H%yNBGdfhPqrF$jkG^d)OmpHk*19L zF&WY^;W_IQGNgQW-8W=NnHNtPgd=5MyC6Wyym;~;c1XFVWu8FbugUfV0xA8yWVuM0 z_Z1mZ-j}~7L&|dNWJnpaAX4t7|42T|Geg(TBllX1XwD9a2OJWi_8jspgvX9f(eU^2r6VcKv(^KtNsJ9^|^ z`azW}7p+mzE+lHhPR!w`S<2u3L~O(L)KAcWsxvmhVbPscL-WxwuMadXb^6OoD;gmy zY~9GNK-V(zxDJ@*IUFO|YD~XkrrneAOq$~Z4WIFWD=YKBJb7IthomM$qrgSA{$p|T z!TO=!a$+c|9|lP#Hp!k-zoElNW6Qa?XX#v@(^&reKT1tH)bn5b$8N#0<;wB~TDHvd zE%aZy{a-=9RgJUPJ80R`{%6oXcl*DEmMxF}9kgs&-rqxi=l0)2zgI1B4Vij^5w;xD zxHX9ljit+^kssb+^~GJL`gKNkmz3VjFO{qcjPa-fM-EL)-N=eZ<8kPx5DQU_xW2Q#1vl=0#-CpM9 z!@~}3A$xduB=UEZc1SrIj*;p2`mJ33UcZLTOGI>`=x@+MNpw!~Hzj#lVpF z64~XzkoO9imSg4C$Rr6AHKqzl;P$C@Rr34(e-{sS3#lOdnA?PAB~5v!TqdgoCR=SZ zG%AmXCFZIHRS%X3UUq54y>yYx^2{Uk_y33a%{9z~iZPrC6(h|8MaubaqW~$Naq0hF z&;~*33!c8~K`F-z`pCvh-faQ<7ge|ZWpfnuP*F2w=G6P&m*y}Z8dCTXh{=*^4pcqU z9FifY=SXXks#gYkM=eE?a*vZJhi8NRKP4_((;I?C4J=p|mdWge$&QARu{O7Iw83+} zwXHV8v$polTBF|uW_eNHW$fSn7i*4p|3zbdui9$ON|;4%5t$|sn}Yt~5wjPm{y1=q z&I*jSvsKA&DbR+I!{ranV#^;=&Uh?^%x|UCsQLF4obT-KDR)8{veo$S(y|_CQRCxJ zWEMM8j;&G5KTcC#1n57h(b^#OX*_`xDJ`4G_!I!8f9NT|N20{)Wl@T2_3q{Wi*ZCf z#QP7Y4L5~en-Lm%^@q1ZN4&5#wl7skLV5Yu?l|QQ>3b|aL#X)4EwN#w;NuCr!T!+4 z6EJi5Wp#aptIoH{AyW98Le?CZY_;qb(iwpwPW=vn=ANf1=jD8|lBT?bER!t>Y`6Mb zO4b?}KH{{3Y;|C=Rm(M`oaxAIGhP1$fRuu0^dA6dG)Q^Tw~-7f*PTsdTQ%hc?KZMX zU}%Rb87?B&Ui-)n20PhmgojAE-eN7mIx8G0+s4*gUV3L_5poEF%5TJlYu|LP@)ryAl{$Ju|lud1h`QZ)Rp;#@Nj24E~T8 zGez{N!1ij?r*&U`F=KcQm6_ZShGQ4f#ekUqKR zbL5kbe5x<5A30@ws;6HpUYvn*O7GB?&*6d!juhQa6x9PGD5r#?HE4H1xkY}8%Kh}3 z6@BRU$7_pEt@Ee0b#bI{{XxXxME1_jOI+?0p zfmj8-+K;b+mMuSKu@-urA8&(}EswWDSNwPty3>z$K@a-zr_j&zI9A)|(6VKGFQ8@1 zulBu!mhG5iz5WBcSJ1L${a!;$W4H(G%Lb{pQv*$}4&vNv^d$%xJA8B{!|WgLrFmJG zWP*QkZ5egeApj*_oMOU+3^)8 zNt2E?`DwDTlT1`nnP|ES-91tI`n9%s4f?en7dvgUI*4r3mIaZ+6J-R@3Q9JlOWA*^ zCGX%H?9!Jrq;_00GIscftPL#BAJ?mlo%K{&hSx36GMU6Sn`AXkCX-BdGKFM{lg~&# zbMiUK=T4eQnw_*L8Pj5VEcCb*n_1(bOMbiz-P&R^e+6`#9#=ooTkRkhJ;x>JZuN+3 zu^RL>Ki&f^TmDnq>(ISwkF~!K`i>sQT5uP-UyoyL9)N!2{vJaQ>T!JO^(pi-KmHv0 zg&xP+@e=x#AAb#9_wuD$AV|{@n6h*Xr7Yjh#?XiD(%C-5E}4qnnp)%R8VfyPs?-J7 z+fC5TQ>`~!pi8RRJ7ti=ZgB+q=v3>^W6)yk7TA{!()16{sU6R84R+~@5Zj^u8|>0{ zitSeL9G9|uJ6t<_)L+`3u|HeiV`lR-X78Jl~=cPOvV24${k)C z#Axi&`Aa`{~MqwUQ3ntY*SRDQm&QJ734ndW3V$@Fw&CNs!pL~JJ6%!th*n-#Iy zWV3~#m6ACmbDYd2nd@X8$vh|XN#;9QK(fHeLM4@jrmN8Pg)#@RUdcfaq(1L5G{jh< z?~?gS$|Pkci%1qZSxmCn$r6$!PL`4^b+U|PnUm!t%bm26v^rTqvckzql9f(Yk*spE zT1oe6(>3V+)wY5UK#Pf6U|%+5lJHvT2UsR+G>Xz1i=qr&SDpF?6X{mimkpUD8cDKN zeKoI5^R|GTSAxF$8d|noZ7x7x^y8PHW$UG129d3kDr86WOMSZ6@0su`Og>Tp+pN zD^9vex}DTWYEG__Ty=7d%O_G~V zdP#bn^pW&AxkYlz$!(I`PVSK0adMaBu9JHt_nh1(x$mT(q~FN^$$*mwBoCZCBzfrM z5y>Mbk4YXoc|!8U$u}h5I2j}vbn=wssgq|U&zw9bdG6!|$qOehNnSd6rKJAKvgqVMK8%cqU)3wea?Q$x0`yNLD#nO|sg_8j>|m){?AsvW{e(lQxnz zC+#HdPS%sGcd~(GgOiOU8=Y(-+2mw1$z~^8NVYiHO0w0-Hj-^lwv%jkvV&xYlbs|x zo$MmnZYO(4_Bg4KRGd_mtgo8h0KHMQaDAe%2}Fe3Bzx&)ujNXB=w2T6yM zeI)yw>?hgpoLnWj>f{>9H77kJ zJx;EZTz7JVhY$8lbIwloy;PckX1}7UyHagivvdM@{+mxlBzfYOX=grKy*>WaZNVYiHO0w0-Hj-^lwv%jk zvV&xYlbs|xo$MmnZYO(4_Bg4KRGd^vs!sNj>~-=b$(K$#NIIPCBiZLrWdvrf*DoO5!XHta|x30$@u0zC5eC+7FvPc;8~)kCb* zI33H(DoNn7je~Wbt#7a%p*iiK?}D-x)^|Z^SLnN+($1)n>N}jw@)j9Ve%nz0PnhP` zcRZQhT{5IxE$)$F81Y+^zvv(mS5awHAyJ-wr&U$TM~Ck<2hhOrb|M{yN=uq@^p(kw zGU`QSYa_dLWJrBLw~?}CF%qp^wIqoY-;~z(%&FEFa9hdx9xY{PU)rIKg`r&;p|vYg z+TCYfNp!DxCe7A&KF~^%_rFtUoBjtS4XV*ANr18)nVe~(YwI?&&&YBV4W5zK;h(Ta zM#;#$7?~H+0^!F_LnG_M|Fr8vq8CN-BmV?|Z7_;tl#|gUqn(T)8RKLu$yg`jNX9uC zPcq)g1d<6(nn;?QOeC4;WD?0FCzDAgJDEZ<#mQ$RpE>!QM$*+#O>$##B=w2T6yMeI)yw>?hgpKS58i%-A_jC4k9j2iVZzM$p&d!*Vxitg>|w=pNwc; z9Xqv#oZ*3k`LQ&8#Z{VD$5=M6jxoz)X*vqhSkhOH#Z24Sa#`vvB_Op;M?%WN>+UR{ zrRo0`x5&e&Z;U)Vz_C1*rt>2$CBJ2D&ct@&MSED1n1=hUQ|#kY)~Cs7CC#U$PcX+@ zpi8IaI9^3rhHg_05AD#E(>;u_3f<|)yP&((AJ&2zbls0jVIWA;dZsMxwUn{!mMNzOVsM{>@|d6M%^z9#wF$pw-NPA-yMbaIL0l9S6Mmz`W8x#Faoq}xf2q~_!* z$yF!UNUk~QA?a~)o#eWc8zeWJ+$6c_q?e@ENgqj{lUpRWoZKe4?c@&09Vd55?mD?g za?ix978>fK8d+5W(=x*Z@p7}@E+LK+&8z$}N?91hPp{6qG^{F6%f@mh|t z7F_|zVI5sV${XR@Uw(f#(mo^OWMn)<*9*Vs`jF_qOq8GGx~)i~NJcpsO)}ca7?Lqg z#*&P6GLB@Nlkp_uolGE^;G~J9$;m{LiB2YwOmZ@rWU`YfBvYJxM)H}H&q+Ra(oE9q zq=lr#$yAc5PQD=d!pSs}X-=k-Om{MaWQLQOBr~1NBAMl6Hpy%!b4cbmnM*R)$vl#I zPUe%$cd~$Ffs=(K3!RimN>0ioWhaYB7CBi=ve?NIk|j=-k}P$yjAWUU**Icj2uN|+-zIc!yx4?eN zWRKU_Kh#n$+S8J)1WQ>X*rZJMib_w`UaxOo%bJUw?1!z@E!iO!f+8Cz*^o*?@1J6s z=C>}TWRsK4B%7UVA=%<&E6G+T+eo%K z*-oU6|lA}(JksNb!oaDHZ6C@{`bdq#B z=_2WJ@)gNfPEL}XbaIO1l#|mWr=6T3IpgFk$yq1oNX|JqPjcSL*Cby%xj=Hk$wiWj zPA-vLa&npEvXd($SDbW{bUUe$)SO%;x$5K^$u%cEBt1^9lU#RlgXD&jno!lY0 z9+NzF@`U7xlW$1AaWY6U=;SHMQzy?zo;i6=^4!S_k{3>1lDu^CisY4(*Cel<)Jf`2 zWW6TSJzMEVs6WjgX`S#aYor}U+F@jU2$#1b?J&{~Bj-(fRsG1BVdTv4E4v~lH)JUr zliV1ejMecx7J5Q*gP-ASf?kl^;B&o&&?U96t9==|qW1W-Wfi)f+(!b=@SB=Ir*IAb0^It%}!dBR9Zwc?kb1~GDJO<`KG3J$rof_L~I(_w1`b7 zn;x+l%IY&xA`%R#$CAv1-OL6%FtLkhG7EOI8tlNtE~3e7#xgrtqHc4LcaD%n>|qee zsZ0{>&15dD=B7jrfFVuo=COo%sbw-BdFQ7@@_->t^Dcnhf(APNNB@KYkv%+w<3;uP&A7@wc99 z&^=3KjmJ}h>(Dnne=oFb{U4O}f!tDp7P$>w_Z(6~5TsVqWvtgSiE|$MaXHCyt69=Y z(&}Ud$qFYcNme>pMY77tYLeAX){v|bB4OzYm#igQ8?klDO6vl_84;wSWRmJCbT=)u z9yO5uhzx+#Nw}JViF2iMxI)HE4xv@rG=kQ@#2FY;_*T1NQIwIivo+goTqf&D)@xlf(qw~@F&kv$;Tt7mp(kvx zanuCeyus{Spi6FFhTiJ-+n{%}-DI1flXFXEJ zx+Pl}^%iTrWUG?;R*O&s2-4Jh$~ao`?2>KtzD-&Q-^5C`lWcdggJg%3og_P*>>}Ca zWH-rfCwoZtIH{0SoK#7wQrr0x!bpwT4rR$+TI~%z$+nAW6?R|J?n|*dKyNWyk;9~! zCWdlj%f&gC$ena(8I=wx0rR*DU001*XanfFYUCH6AV|}mi&>tXm~*VemNsribGPW!IRJ*#?eb}ISpC%x2Y>7vFu|leo9EEv2y!1u zqmf)-NaM0|XmS*}k2d56liZ(5M~&AN@tAsSJ{CMS326aojmQd+ijuu(Kj=Cw^b9F3 zz>tnlu5dKPOb+E(wrcw&$2A7|IUb^*U509Guo+^ToY4GZPDt)>rwl#egq?Ytpqo{% zpQJT}E}f8b$5Jh;3|-OuxGJea*Y&tv&4WlG>I2U(l1|3lX=l@m0#^xNk$n}h zlVm3&c8cs>i)j@TKpGZ8yWb~a+?$j(LVJlXk(eNFat#4eCsh}cE4ixIm-b}3?) z$u39i3fYy2b(3{Rtfp*2O$e?Zo1iDEMz2hQo~&Bzv~{O|G}ojDglJE;fRx-v8M>kt zxCX02*P|Sg5e%tam0s0IN>?pc8M<=So_STF#l$U=Ypl;TvB4Et(xar(lg3sBxzb~! zt{Ymm{*C7vNWI5eKpcP|9h1z!T)EDYu3JfRG-VvI$qkf#Lu}+Q<}66}4f9=t?ztiH zVLV@lmMxzX-hh@Z?;&qO_xkZZ=(_upVnC4c3OKomC~jIiR-wCZdJND#e*8N0O+Aih zmA%liWek1LbK%5fWI+?FzMZ&-!yR=r0()u8LD8G|HXNaK3NbQWtBGpy

    *?PM?0jYZqDGvmxjhcRz+i&G010(}JjvkOaaPpAkp_4}>kDNRv zdFT&MU?AB$0fht%B%lx>fdmu`RrjC%>%5DuIAn9`OY!t9P`(B=JTu{+mvry`PP(gT{$=9+?5MerY{oDz?aIR z+v-3QR5i_Vu1S_%jdS(NtM9DE@2+ap^Od1zwNGoWTv|<+ zvKF`wtF>x(^)+4VP1A37rLod)cG2RM9X*&aO+Or}Ys*?SRbKS3v>K|_G~T9CgZXIX zu3j|XdKmiO{*!1#v(W4>vrWCSdL^^y+r7#gjHTq;xaeO#YpE8mTmB%9T(`fPrQ4}j z&*QJ#{-bJnl>c${+B}Kd>iK`D|EzIH?|D_Phkr+^&G^-edKpjNt9_1h{dGP49+Bz) z`Cn5V|K(qG*Zu8ZC3Ym6Y#aVN8iZ?s;6FUOTK@kY#^K*C6v@&o1pDm6uDVvaz?dc| z|79!KFC;ZNH*KPSUQIW*ogWbXQGc(Eez(?VT94JOzq2ie2;TG>F>U(FPEx)6&X_7M zSNadRoR)0Ut&-Kt9NDGN+PHeTYAqec%-Sq&I?lwK`PKGusH@h?mtdcR6j?ZG-K%`9 z58={Lt66Kpk_RkSZ|9ZzifUb^y-;QOqNz3;LTa1lBgS6UH1?ZSHEdZ8jGTKQqUrY6 zy~?20QP4%YA?K+Z^zIwMxWi_ zBU-y3)Hcn@vex6a`lB4$R(YoMUj+rahneT({PCzd7CY=`lHJMAxvdF88um6zgHgZ*{W;Wyq&uC_0qoUUEBtnO>qSXbqb z!rr}CxvyU{y|#C6s-txE{AbvTZ?{?B%w2kbA!V{?!(Pz-S%0ry)aG7=2X3i{RtFEs z()`;T{>&bzT(3EO^zOROgOpV7FRt2>R3G&|Fxy{NslPH+e<uKk#9_kLDpP()NM zwUKMl#^0-^KIY|1EtTvp?ME}BEb*&GwK1=B*xKljnKRET&zbgIraf=k^O@FZT4$zp znbwtQFPQd1roCv|i<#DKT6d=PnAVe4N#!L|UUKDSQ(hM3TTXMmru2#;y+Z3VtuK|6 zj9g12oNFBTbrwpOTPoE_v=Q^X?Q&^R z3oVuEESF~`RJ9a8zkRLsLOZt~&yq(k+j;0(I~IF#mC}`0Y;C@h)@J2ZRk~lj+6n4k z56bYX$zlW^Rkr?*p$NE5rQho9Po*jYrVL2USJ%JSOnJ?f*G+ldl|fSmT^TZE$dxxt zdBc@AO?lImVN-@(88Kx<6zfOjzG?R}?Jd*Z%Cu3_Ml)^9w6RQk+qAbc?H$wJ$+U6P z#xrfgv5TC_}xRPR~uGw1Kh04?rVXEm05iw@VMJg!0&qgd$6Q70+X<$zVfC}rcKe+I)gH= z3Rk2Bcrh!pgtDBKSwUINlr@xfRd^o00Us;l`3Zb#C3JV4p`3e(3-~g#kU>J@)q7C+ z&_?>hRCnbkru@W}SyN_RnKNb1m5)sM$d!*x`B)U2p~}2z^O?3_+Ct1^%8)rDWAFWxhbE!vTn+{D;uV4xbkaLe(lO{ zO!F_N{5(X4<)F=b3h4 z+C`>)XWDm}_E*#XnrWA&U1pk$nX3A9BGegE^$G7)Uo<-FGhVgTXS|}ad-NHvYWgH2 zdaX|~RMn>zqNcNssq%8AOKNAE>pA5Tb|ta$S1(%f?`h#`?_0awSuH)L>67p1QJ<;( zS1P3kOp})@6|Z#_YTv6>BYFATf4ZvGPLHCPbu{*9O>=MRv0u%T7dQ6I#`0198op{t zQuTGjyc%~^=WfE($trcqR92Pwn%0zLUD;O6K=YNx2)0;h^Zj?)dYTn4{fMzneJ|Dd zY}R(WwZp4Nj}B99mDA3nSGhj5PBZe*O6#-gm{5IIt+Tv&rBdgXX@^&uq}tCTQ;)Ay z#^}T}dAU+4Z*=u?rAvCleoA*WYL}Pz;Wbg>+6Z%2yEbcA&xfo%TS@dLt)tS~h9_XxZ~vW) z1tVEi%hdqY1Ql)mdxJ$)MOle7&6e*|@Xyw5qe?S6mDd&$1Jk2k$^WH=RN8*}){gX> z<39^UxU~6puk0AkJ^fq$*MDL@jhX&4^Qs+QX_BgkN2Z=$sd#v1+U1od=?!xsIa-Ij zsO8m*{&mwV`KT94h@^F;`Ix?{$J7}m`QLoU%WIySW%B)h{Fmg#|MV|f@_$w~oBsvn ze|3xh4gTN%B@PY$2g-kTi~j=upURBy{{{cwS)Kn6%HJ|Y8k7HOM!*Q4{4>iMrszo}pUwdghTn2&$HvVW-FEd|nA?$N*H|5EH2)ja!{#F*KYchRQi z+8*69OQHv3t!pU7k8d)|Z_ScdJ93?y#;ZMCxiIZ}*0GP5m|Kaz{rAZ$6Z9pwv(1!Q zh2eGE8*nr(=?kUqSc6L z%#ua(G)v=GWoNa%3A3|9D88g4D6i(r`)0?hMWqi+lNbHVEK`qNl|O#Kdi<|t|JC?u z>+hz+i;aSf%GHacGHUmWaW`LwYL}Ogzi%j0d$_r3gEetg#Vu%6K=|0*4+ zu5?Ln@bl)J@A0%|b^TC#Yq_SLTk3!NAL6PlMXHA3rYdmpmJM2YIIv0HTung-;YZ_pp1>g4=8bS zKYr+??T7d9hkJYTXx*H1vtK`KCH&BOZXQ{go*OQdH?6^&O5EJWO?|tmCOcjiRt|@Z zYgZ^A?f=k!&~f*lHEuP>QJc4amM*^~TfEu-$JIx~^<$nmzdi`_o zyyo*$I}7ll*S`cWdwnbL10S)6@T%9p2Cw^wZNQtFFC(I3w1u**HBRa`ly=}=En`$+fXE$sN2jVinR+Y5P(wI0R~A%`7N%RX_HtB>hORkc$Z8z0juOIur2 z+U+gv$6~IP=0|R-v~nx#qAI)Fx17E|c}Jtd;+?cUmf&S&ei(8EesCwPmWS}F=dZ!* zcVq>>&?uw00dIQ#7QE~A@4@?8A9Hp9AKpn(v9I3C10b%96ay#3-F>c{x8AHp1%S= z(DtO?TEjz>)w^k>ufgleIxV_)P&VCS3*Lq`YVE+g%6wC658hYSA4;zrz=z6GqkhNh z2<2E6ew^?GKFuu7P|j81`yLmtq|~9ceupBdD}P0~%oJ%3jn`OLxt4xxDc4@K?~&!& zp~d1{OF#3TYabQtR%^6ak$G7gooin6{l05j$+A>u?Ad51u7{!7Nu{clQd#!9eM>J& zmn=)ISnRB7B_dMP7gwLq%DqcJBNBFHUv6ucP9AxE>1U2YEBjJw7yn>Fl#TclT6}9X z*V5HL*LXvrYW(bkR;BsguGDFCyIYr{O&wgXOmt{~o9j~aYk^zq(p9Yu?o_7bF1Wi+ z_S~he=^nV(%lETR@cf7Hs@Jy$ue*O6@TM|9b-e{|E7QLnc-PDC!TVZ2SBnGq z(EU4t|LFODf{(rY34H4IXRxHU;=X|;wH5O%eD3)d@TL1FlaIoyuZk)))^b?-eZVzK zPBv9q?DD*H`e#Byv-zzm8>>F-B0_{#_Au?Xu#5N}+HK30{FD0ZOdj>g&vffLy4H`h zD|0*6N0nVfy4)^BoLrl=`;c6#?QcYqu)CqZcKr#vQrS3T<#y>_C)aBGR;up?U+n4; z^_AL<>rvQQ8dmHYLTm z@vYebc+guMf`{G15qK02bbQBPN$tD#Z^PqW{{%d#`M*;8DR?^bXa?m&Z}BJatk*CH zf8>4o7?#w=XdYhlF<62>b^D*elA8T8EUAsa3jDy!KZIA^ehuFC`gY)5?Gaa|Jy=p3 z^DkjZEn0d|%lV9dbKXQdNCCx z$xEl$85-@__tHbXsh!dYrP!92u5Bm3mWHLRrK*uEjjpY+Yj&kpYCSB?!cG0FU3qaL z4X?{%d)sj!0#@~eInbz5xu=o$v3qGx-GL>wwSE_t)W)q2uD_RJKm**UOi!BNX18yF zTQwgq+TeCC-vK}8_RqtT`s{V0NNOH+!QEPdvrZ5ElIOn+OKLON3rlJ}=z|A6e+V9S z4@clp_izjzcl!x=+U;lHS*@Ql#vDBF`3vx(G7)77UcM($kn{2i{J`@c!oN~xWv#+% z-oMXaNv;2%!|R^E0dIQyTky8B&a}+=4$7{#xCcw>7GI)BYGd{lysvGr<__RPErE|m z@Ub$pd;&{q<^K%-#mDdzmel6-3_kbzF5pYAPaH?#HR4%l5t&0P*~QKbyV(7qmCD|> zjZ%Gf>Zs~R?CEH?)JCc7ZT&0x;%BTXZ{m6v-jrKO*RkAAs_}p!Ed_<@4(|;;{-hE9!0GzbYeh}>bwsAmW0<>cVQR1Dl~S1?fX#UG#y&(`_O!btJ*HL zQ!dSDR+Wvt5v|<5&uI@u*^)02Ny4t&6I%~e9{yWcmPV)4cBwZJ^`kdsJLyKvOy8|c z*prqhU0OT0pM%;tWsTWgNwgBbNR?|PALEHrSl)gX%41RMWn3xqR?;10XmPgBwN_5z z4H~KMHpsby<^<5okbZRE3jc6D+CC_EWH=-oK|&n$?2X*8;aTq}bC2w`&Rd z)B$&@J+ZJ0enIVty)VMunolI@fqTtIT_1fY!)ifv9f3!^g)w;C`!E4dsy)$j3YPS- z%7~82`>>?u!3VIUR{u0Csg<9BXT7~Scs}!R0p$}PgP+37Uc(Cf!1Eu%n_lAV9-qUPUS1cA zt|VT?#&&IJv8Hp4Ytgl`tbuDl_zvP*FPaUN?vt6H=r~=;gJw-ej@Fm7WkPbQq*`Bmejm%hb6U4@SwKH_zl6so<9QLcaPqJCAH7KjKY%IE*XR8-F^XH z)O>c#61^OUF@rhUYXUZ=`fsE znBIgAEq^;b)L8zZMW6{Sf?jC1wTtbZmz924NDnnOXlM}%L%W5Y&W2vMsz&f?@UM?x zsUM|QuT2v*N5~8BN@H3o8#fqHw(LuJtWtoB(xp}+ApLN=+pn4U7)9Pnx+vyax)|qL ztzBt`p`;eBuCaKufnE2(yv3QSA{L!0847^JpoH==n`> z^OLp+D=l!V*2f#YZE(Bh6XZJJPOq;E?pBt$*PG=YlwNP450=zc>MO9M*85lCe$O9( z2en3KU3D5KuO7(A{e2%HnJq_)1_g(bByc@LiT{5g2uJy?Jj-F^xFRPCAn zpTWz@c(?-p-0S-V{J_gUgjX3;jU;REde);2lucE**loevUgHkDt9*5-fcHKB0G8A| z`U5PfdHgjjsg1}XEUC@G5q#_;Z~~ut`7`+3%U{5fnm^ycfAt<;!ji_GMv)2hI`~@> z)6&j*v|U8#N89;YxzM|>S}A)d!)({cymUGMhi2>L+N}KjVR%)V5n1>r#*7${F?f%vTzT z(v7nEIquiNk2lJ0<7j&iu22^S^@k zJ^uhc^!y|ESlQP33CgLrcm|)V1v7jBU#f@c?1Li3)h6wW&|*F1TKdRXuB9_{XmPR# zE%sSxWjjU`za-(cR5tcN)E9dtwEP?vYN^I@>GUCqDC=jRDj$6&s?^dbmS&)27qKqd z{zpd4&P!GPmHJ#7o6=~Pd@0pe>c>B3mp(8N;}Z80p_SSwjdQ7QC7;W7>Cr~sE-|!f zoJ(_FYU2?*vC^b5TvArFo@*aNk<>i9150W%co%Ne60G7TxLNbrV=ZuNQ;HF7@H3wO zEG(&&Z-*td@*QxeGEuGz?)Lm1xVI^t-232uuWtYzRC}WE5In3*oEd>f)t;z421{x) z`!+nT^>bC2fZz4{--9K!`X^yYtv^%nwAROr&A_v2zpP)#DLIZpM;h_L=Dx(xvIw46_2(nwGul%%9cEg zrw3tYb5i9?scbwacy!sae^R}j4)fBCdsWM&R!Y4qk89cQQY*}GRmAIhLojzin zYw0YIYo&J6Gq$iR&wDxxU=ch&YEb?eM}ZjP_5Ex%C)pZL-YPn zN)jub)@N>+_EfGhU)Rc(TB$7?`!TOC-DBihscdcUA~rq-N|*Xq_NLUA+Hoz7zwPI$`7E_tDqFTI`BJ-P$|GZ=Pu-0tN&U`eg~ zbFif5&+~An=Cc#J;BIANNe|qs?J*L4aKAFost4df_kRd}!~J;^mel$?43B&J6Y#rU z|9kMH+Oun>;Azdb6+VM9>ov^5^X|a{{E5~;kA4a-x<^Z}q&8!p!jf8i{uwN(^>`VU z)I3^&A9(qP@aoeN+xBz@*5GyZM?6+#17*`a-h#i-8d-6_g(bDSf^Aq*%in=_-J?Bt z-}4V(No9_;y+6Q`+6a6NAA0@~eCqX`!Ixg2xQ)VV?4Hor0Tyj?l@IV#m9|w~rN!Qh zvJpc<%lBERHYVR&W2xncKv7@Gn^GHbvX8QH-3qPLM!CKeNuz9OtbN^A_1I?mnwH{M z)L80W*~4@ljIw2~)3q$@N+W&Sc1!bq`%$eO!BV?+?)=`dDz#f)>A9u;T&V6GJ^#y} z*IKC^t+-Q*5zOmLb=WLbnt9IMoT617T;D9wW>e2m4RE9K)yL=HX18yFTRp!G?$CVV z`E#(O=EL)Fx99i3FKc;D*S)Z$R=y8@MawfAufmdAem^X!&GY~~sP?S5A$YhsU5`fK zQMH$m&=@m@GOHz6-*fQ1*SG+G;x+sfmelMQVM%SBF2RzTho8dB-oq96ftP;>ue$vj zysr6NkvHH?_h$>1)V@Ob1-$JuumkUEc~-|ByzliNz=vMn5qzxv%ZO-vKS4Qli!=D# zYq)?VwGsFZmegAOD}3oABGsbs8qpy%8>wq{Ji)5c;yte@8}Af_#+{9Q)i_sE49c~% z$E!5E_JmgQI^xo!?Ml6i*cW9ZR)rQ3JG7E7aq14ch~c>=1FH9YRpVN&F-7|*UFu0` z{7ZJF-j(cbTVEbI!^2WfZrgHctV?59YNIrt5p^H!pWla9%}J@{vWK`}DAbShks`HvzOn3CAB#jg(bCl8-vGN(iLq2o^<;ucv{=% zU6UDj*2~Yq^KQQYFDlc&C0J5x|5JEb8UI$`b#H$I-uC);;NN-q-^07gSMeO)_xuC+ zQ0wC>^+)irw|4@c`*>f#m)^dtIuu@GZHE@CDYV<##lHByvMDy_cH)w*pehezH-}}Z z6~De$m5!MG=+b37)?Zb9WpC0oCE6&DSK7H@R~qY5@5IioQF+qmK(;DE$AEi@g6Wpx%w9^9r z=tn7L{1}$h#-tUN)M8Q_+^*%tMV*-rly0xF2bR=!@k?;8=l8+=n$J!cfCtq>&fP=s zuzDmd=oNefWz>BdgU6K_=Lz^-@56hrq?SJkOKNLm3ZB+{YheauR(;?zD|7I?THxaX zyy$&cftIDk0HF!N6#SIimZC-v2OKPL|8+g<6x8QxR@c{mV z=JPb^YxvOfkKkh+1HLwR0-t()XYe;V0x~9gKlClixv!iH_&cqU=W*yHbs@x5Li+SXHCV)iq7fPLWaGM&O!d+Vf#o z^3hh*-&wY{jobFQfrhxM^tP;X;uqHsReFTW)9oncF*sCJGBO4eHYy8 z_I>c+k5ddAg5S`5X6sFO*zHH)akrmOa+W7t%mej`gFYu}N z_Y6Mw`Y+&1uU}Re3a_zlLW^}1TAZCii+Gc3Y2Stxt2nfOep%^`MXyJ*_F9!o=Rm)b5gR4&j5rk`E?=G+s;aS7b41*Mj=jpxn1qZ zlviB(%wd!*` zn$C4Cu%y1OeuUDhHQ+@X-0n4Yz>?aNlIP$~t>Nl^8t!%vd*GL{7G6e?)ZUTmg(Y<# z`cNdbxb_Mxsg3@tu%y;zKP;*FJOB@BF9+%+t`5P&-s=%~RLe8NWAM0_pMWR5y(xHF z`^-$wz_VW896Yc5x_;?<0bca{CHUuF-!I??%FNP3_*XurtFWY;w)IKk8p^tRxB+jv zM_cfAHikPWyK2F;We?uR2faf$fDhfLBly^BJb}-Bj4t3y<@EkFitK&&ioYc>Eybiq z+eI9Bv|XH)!p>LBwU*QV3CnUTDWZj4#D>sHWh0`6UF`W>t8Jrfm(F)lw$$U2FQxiQ zcBQ`Eegq@(g@+NZLo2tEB5Bx_JS_FZVnC&h$k!%&hA3JGH@2lc+ypnbd1Qmz+R~nV z2A0(N@hsf#`5kbl=JPqZF1TBn)zkyOr1i^U(|fU(Q6zPx7e!JVgFd+5eH?%XwFK`r z4Z*{1KLX!(pWcEcwKy>fOKN=>gU6NGYZI`fHn#7=l3E|$gC(^+JPAu`^-sam?#~Q7 z>*eR*dG((=@&$O&`?mxyYx^=rdZJxHd7u_N&3p*2dWkhyQrl0T!ID~!K8M$p*+(0& zq~`IjVM%Soe*;Tu`J1q$mcIpWd;2@^muk-}e+BP*dk65L+aJNlIs!ZwIe||#pQv~S zODg_ql>G*l)UKA_!sqVa1uW^^%3J!gEZ@PG?vD&33a_!-LW_5QLyOoHnvG{wefi!G z%lOtouBH7O8mr!(0)`qpIJAfeq1k*^`D1fdrIpL3E6bznE0<02ILbyO3eD!P%9pZT zy4FP5vR#VrVRz^1yHnrWM!6s9+!*!6^&+(Rxu0B1=he_kZItV)E$i{`dwXIlv+@kF z{25vG)K&*KD)X*u6Wsia>?)~J*H{aRq_)0(1WRf){1|Ta{5H7V^E=>9&1YYB!IE0P zUx2$cpLyzmdzBgIKDb})*$D&ipysm{hu~qiAAv``{V{l4^I0zw@VlP>9z5y!Q}DF= zHv@mD`S|w}c-HOb;CW^IU4R#r@ox!UcKa1rQmgOhu%tEvzknaO{X=+Fnf*QA(z8aY?Fc30I{ z^1I|?X(Zyx5^a<`EY%lx-BC8~FG7o}MQFBCuk|BE_ppm77FxMJ{z0Q_^`+<@WlJMn z@};!CN_O^RGS}K=7gwGoPChHE{-NGi*1`44?1~1sQF&UUWE0%1EY<1xs|BUi6t!tX zY0s1nlulLnCsDfK?yQy`lwMWpw2nTwUzsP%1Mr|SYikG|wisgr%lucC__bqt)*>v^Tfp@KhK5^JX+0SY{Kshu;eLq4uR;6G01U^;fXQ|HMb7g)< z;{v|48q`ynWHesm^ptC9Kjd0k)1k$_4lQCrXt9@ajpshsd|~}w(`tPw)mQGvZGBGf zONW1@zU6T~EF(gNRw`ZcI(B=MjVKdZxxU+uVC^VGwEVs{(g{B7ZW@K!d5U-*rAwn# z?(zM?TCHuv_Ex2xnAe_8c6D%ldpdbFz>V#)D`a_T%}prHZqWj_Y7Mm92Di7Tvr7m3 zf->XzA}pzS-wjJ@SGFFw*Yo?}er54MquT(=pqCheCAC%Y1}v%VsW;(a&mVzDm3g0d z3?A1WSPK&SfT=%e-%SW??fv+zgW;>WP0wjSqUNo~v)U`ee9pTLXS zK2I)|;AO9W1zuHq?t|Chb!FDw2E6I^TkvnazHL}iYi|eMReM&-9=z}V9>9lge*_R%oQ+IPFH&pK~CRdx|;@>Wt@2`&HpYp4RZ<9GlyvyY|q^vv<4I5a->zzS7*KD?-@awjZS#F84QGO`?sGU1^-fPIpb!>hNe- zrJC234x)NT+TV3>eMgE<4RE986F-{Zr!=4a^E51}dD9F_YA5OzxK+zb^Xgk0O1suT zKRe*g4vAo#QM=$5v<9vcFT#>q3*E4!mfr*SY75MDAKdTt55R+NKLo#_%rlKQVM)!O zVOUaYZv-Co9*@D}+8#S>0-p5zDR|oJn}KJ&zBzc_%P+u7Uj9>9QoBO@3|`jqGJ<+t zT|s%EHLw~V!t37R2E6I{Tky8#^Mrl}-u3)Fc;7uZfDgUCBly@n(Cg|6%Bjwo_@w9g zGn8|+VN@^RORq!BP6Xp1!wlcPjJt zy^W}^)UHRFsv65Ji;1q>%5xe4>z_;ezX5*YxwN~Ugd07-32s*Ad;BeMtJ)JG+u-i! zWN&a!+5`70_v`NMgZn*y03L*OEQa7=Z*K%1rM$+^F<4StrEkNM+IYMJk83`2Fab|` z{uC^!jmrD5q_)C8fF-s1r(sDge+Hgae{2NjQ0Bcy3-F@1ummq_jf~g|{6Lv!pbz0y zWmeo8ysqW1&ZzLFG7)|Y-d20Ac02H{+wZ~q-u?l6h`r9h5q#_;asr&)vTZ zSUT$-^0y?WrB9E9-Q7x${v+Ji?9#g+H)Wfwaj?BcYPYiT#;T5TKo z?g`7=wh~b|%0|QuEh1!S5pi>^*27YLCI4Dtw0^;MqdjQ4zsNOf@i^SXa@KQzFN%8Ymu-0b-+aO?AFf3(5vi6> zG^)>`%zKFi_!F=3r|_b;xCAd-4eH|x%Bothzt`Y(uWITbVxYz`ytMyRfA8TPb_+q1zw9$I8t734H2fat5Efe;4qj`y&H|!fUMf z&|)=)7SSa%|14Bhjpfqm>0^|R(@1E{qRv58jd5xW%TnpsZDAMBOhb#EA6m(-+>;dZ zqio5Sc+WoUN^O*UF8h~aVqRa0?zvX7OZUu=w(~tyHTt*pkkT4eu9Z&FDQ~;98l;%c ze5F%kmZUcNkHM1KsN8`iHNWn{lG;kHgX=pbBGhSp4RE8|H^I%C&vms0ZuR^&xLui< z?tnYh{^~9j?sb3qU`eh0S71pkR=*1OyZrz>sQu%NGXzU&{d)r**7}&W5qQ-78-vHa z{t0+e{j(9ALYdVTOqoNO_cj;cMXi&WSb~>*%vazCZvPNobsyH?b@yQd-t<0f!P`E@ zJMgZS=iIgj?|b_P@S(SV1Rs0;2`s6N$)DjJGL zMUhc>ji+j%#hwf;_I+rvTS6<@{UdFZe2H^Zv>UNK*HU~4tyEvczOajvOK7FOmFr7S zC8KP~&Q?g(d_>%gvZcP2e2x=SUN*(U&`SL%jcLiQ+>hEe%4@?`WL1ytw>GM@Qp@F0 zs2yo*xzfdXuuJv<_fvIneb-g&(9=@`N~0=7$0oSBOLwlu_7=ERYcRjtP$acccm{6w z5*_e!S^~eGhdVW&5$b}wJ--L;&srEj8PpayVGqH>YQa;m5qQ)+7=zz-58i>ty~PQ5 z((|X_S*?%z_&Ipq+gpGowH|%~OKLs(DZJ?QEy2s~-wOP|^B=;i$})y}=f8&XnV0w+ zURMj^^9C%bdGKp^(`(#T9M-ja?CS#)&VqSnIi#PGh;2B3x*(LqjXqmrf>+wu`+Ob~p7d zozcRw+~f2apxmyuY^f&^_o8gX>Rgk7ubIDya@Q<19#qX#sqNAzmPV)4XNy8rZItXv z9+uiD`4{m&dS`7^ULYF2kak%e{J64?ySOEPU!~^3J-9wuR2tw$W%fxE-26g{Of7Kh z3n`km!Ov>G)T=Ym{=#m({C_or4f2=hu;q84bZQG%(Gq?^nN|KG-2H+?hWi?yd*FW0 zAAkonpZn(_c-Zqt;8FE}=sX6GyZr<_srKxQDR^3$e`R0>o^|^7CGx}z>?ak|1~VBdH5SxQtQzsEUAs)7QC&@2=2hU-rgSk zrRFoIU%`i7{s@-TM)Z%cq}JY_U`egLV^~tNKY>rZ{WJJnncaQ?Un-|NClnbTT}SP< zD|0P99}F!bLay;i2I`T7*Vw&b=bv!6W|^XDZkgUE4J|(Xo@*(Ng%*1?w6Zs~ZN%Px zbXlp-qFvbCw%v$BQ8vz@p~ZcEXyrC)$M3fNE&IYhcY1A(YR9=;HeKa%pNSt;^_BV& z@ifYo+VK5cd66jlVp`vIaQ%yE|2Dvl%0!?hxLNHPu@<=XMcF@`{@UR77gJ2_fIGdu zF1TCEvwwQvUS%R^AKb6@(pg;}11N)D!w@{IEnI5;2t4X7j=|&Z@dP~SJ)DB4J%0wC z^&ZW^^WNS9yy*5z@UrKxzz@9qLwM8M+k&^%KR&m)1MhnIJ$T>iKY$OFIqx39$66oH zCr{v0Z|@BLMwt=(7C!g(FW^hq_8W=}ulvB?lJJ_J4#P55QLd#G9a@|XLo1byJM6HF z$Prqs^3Wpo=31>UrFLUiN7>uAk)lMDjZ;#tapzMts`hKJRa$8b;+Nr~KAYKVWoz3g z_k&eYRW`S)C+BMSHr!|>8RV5luQba3wCh@p={=a}TU-l6E3Ki@+9-K*x6*6x@I`&* zVWnGRout<0WANQ>*_q$!FTdBp_1!6!HNcH--vl=+6AN45cF*sCpX*LL@p)KM8}Ck7 zQoB-h!QGzU1HYvCtmT*CUbpXq`#paE9&~?(;9<`nfk(A}(r-PPjG>IH!l`5ep7b6} z!PA;Qq36{Zcp>!>4=eBk^?`f8hw!Sh_`uyX%DVS@1K#u!Td<_|>ycl; zlHRGz>Sqmp3vaszJMg}jKY%5*DDemQP?=FZf{(rZ6Zq77a0Xv0i^mo*(F9dZpIi$q z)?sL|u5*obLp_r48oMX#V*Q5}F)!Cr%nQxu`dTX`%XBi0(h+HLEuC~ji^vt4odB-2 zn<8e|#ZC?_?uT=&*1y~Lt~_41^QJU+r8zE-R%xWueL?iD)JAD!O6{6mrHA{`p0t}g z;Le^D-@4##&6i2hmE42UZ;I~l0hB>i-cXAncvSfV%^!oumDlxKC=>9c@|@;R!PClh zT7CweRpyDw96YbgcV!mfMPlO#_q4Jb|2j&Pqwi>lpCn%?0!x?<87N6)ST)>yg&)H|YP{d`c#qI-h z^|7+0MVPRRl@VIL?ysrZ1KO2@*K+w+)bA=g`}b3-v~pQ7DfH(}9qX#nkML4QwaT{K z5^Ji;?q20*H9e%Ag333Tu9X%nSc+<&Z_7tBedaCK_-t5hoi+W5-_6NO^Np!%rTGR} zT46+{8HN8EpV&mzoR{DgWIW5*Hj1GsmwRMy5MeQ zX+h_+2c_3*?1THwLVGxXGN?)`(E%P-eqYzq2t2AxFUH_WWp@7*Jgv;`o`L7R#RYg# z^BMakc-iw;;8icb2CpkiAJn4_lua+O1)o!+=3l^EctO)5~82*BTx@ER*Kw@d3F zv>WWS)mzjjCbp-(ug2S3eqnn&YP?tZjqTE0ORF-pa$lIU+x4X|vgzs_t@x}}Ue?uL z|8iQ(4RGVjSM#d9XhLaL1ut6QR%QOxr#86LO6W*-p>(T4|9arw%%TsaUln{CfCrU{ z>O=6ba+i+U2t2Axn`7{_dp!fsYQD|U9Ll^~EWo>JL5q9vzULpnhnmmT_6R=p{4@Am z^Vv@q@TGE^8x(2Y%kZ}(y!wdOsw@TS+d1#heU z)#rraT`#`}?|XX(@S)~&CvpV;(d+vYe5^d7XRH(W)XSg2-+2As!jjs&pTm-x{}=G3 z)|Z}FpvZ7~oBS;auW=6-cJVYi*V4T~uBCgDTuV=YLyNr>T0F-IE$(|lyM0;iu&?zk zJwJ;2O5+muE@4+1my$1WAC;F)?;VF0Pq#xWwGsDBVOJU}_PL!7!!jaNXr&kXH53seXs8TK2-ilpI{xq$L`??eCq9;!IxfMI*!6??15ZM@4|)V<5g8Uc4=6~ zr{#04w#Hb;VdvMFs#apRgk|i>&|;_MS~}U}npAJ+m0V@?t6Gk`u-uN*-8H*(V#w{p z#G*m2mi(!0xzy*k7H*<*?X1e?PMQXsmGeBXoDrStIacT`>QDmbikd;ydT^JcYA&h+^gle zSL=iOy}bc=(DR4jVdZc2OfUkEy8ReDuJyA!C*Vo#59f|4cv|h*O*8PU`!fg6dwmP= zqB2*{C3soeC+4ic54`+CcvbUd3F-*1p?u~weh#mDi4Az$Yutf%)t*z&9=z}N2k@cS zcLX16K0Q8xPpMDaKZDPGMlWD-&THUrNqEh#ykY4P^_p$El7!`*%KP@6+R$PTg%*1< zw0IvSv{KnPYldCf!`S7yCF4}plae>F%k#2nSLT{jW#`;bBbI~~`!}?*hqtXU?$h!b zrL@j`RS$3LPk9{6v%vjoRVxwC!=F5!UsLT=6so_^T23jeL*y%f8|) ze-D<_#;_ii)MlgsZgl%5xLKKf*#furr%2ZZxA#k=xv!C_1Mc+vF1Xw4>w$YczYp$L zCQ=T-uk}kL;T-=uJm~%n!NcC(2t4Ngy$wrhbN3D`sr7#xmelem;7Rvq3ZC}-8F*Ix zVb{;Wi)zn)T7s9o{0jU)+q-%%9bWbN*5GxmPv%9Rnr@(MYYn34j@m)l^)~n5eJi7* ze1LN3tscRWTCe^HOKM*J2|m_*X6Xbz^-(#4zwz?l!snXL_2L4)^!mh66kcPUh88;~ zw31!y^qD^SAKXXl-x1AVjsh!*Q<@RwEhxjL=*k&E868NgeGGov+js{a*L-&K1U&2ZbMQx=|1mu8 zexUiBqaMPm-p4g~U3@tFPf>FMk4`Vz1+Q2A_NR3s{EVTi|a=c$HS{ikRCmdsTL^ zMjve#CxftyRTf&T+R$Pbg;uIBz7rpIrGEITtLjO)<#f`B8smM6&`P6_@9D5C^*K&M zVP~tV%EQ?EVHZyvaxIn zi*COJFMIw9{J_gUgjc=2HF#H<{_es1ZhrtvYIFGq_-o4R73~m~)aLLAK6Zaj;8U;f z3_kbr7x1O$%QT?y>Q~k(HFiU8nRaWgNio~kxmvPJD?jXF{e>30CNzt9RUXE=&+WuS zN36<{eN&^B+ObGjRrC;H z*#iGqYhYit!tJl8eb@naYI#0O)&+Na`5w4e^NDERLxs?O!>auHM?}ph&D>TlVW!<~b&3#6Q$qPkGJ-J%D6#cOyK?jKCCX#gJd{2_SQJs5#Uy}mJcT=Tg$Ou&;~ z-xNHp_Ke01EUAsehp?p9qo2UD-rgKM@AeDuqSwC!FKhmNy~A69A9{VigjY46y|4yL zYG=aF;0>?u*RZ74pWncn%DgAJ1@Gzz6Px$oeH(F&8V4wc-r^A~srB%Wu%za}pI}KX z{}`6kM(hNZ)K=)9VM*;fdw+o?wa@*Z!jhW(8GNqxJngxFFS9iwO9hSB*ngqLJ_s#h zWN5L6LW_MLn*S2$wU*QAA}no8s_gP_c7|oyM=5B}Cm(HD@;pwFk1oqzv+G4z`VOq} zz1*Ky?VC7JIwEaoae@lXuh>>z>Py`cQnDxZr=j`$n$>;w|agX+^+e=gAVw)p|o3`hdb4tb3zx~?e;xzuiN** z{cb-14|@I(EUAs*8?dA{!*9aFZa)H#yT23gyWakL@Z?a6KU46m=g+~C+IW2gOKSV@ zV^~rf?|E2KyU$pF7nR@8dz&SAS?gnWuD}npecm~L2(NnmYw)`JvjJ~)|ct^dCE?+89td)C(peCqX` z!IwVXvd>U>jo6lJ>C6>ctoP93lc}La6bjA8rK;W7dtn#*EVNR)CA)|=Q8u0)g;uIB z;!4=%u`gHC)1J^uBWOG2T928XYZ_;uDy`I$_%466D_+}mA++-7N4s}v>1zDys#?vX zaMb6cPXTPWg&YNK`)%QeZ;l2}M$meU2xG`o3e?r*P^71WlmscAlu+()ebIJx#FGs5a@-PN7)@Azu<+!?Uo9 z9T-~NMTHi-JTzZ1RjtGx{65Rux1IJ@)EN6Cw1^0ymHO<@QmXte)p)n^p?&`=YAo5s zoz$c4V!ec2$?G^>g`It_spNBIm^-uKbe*~bOKQEp3rlM4*TMC}Y2`G)jc(rrw+_p7 zh>>rD2i2Z^H3ScP{s=tk`D5^;=TE_s+V$goSW;VQAHdVc;D?0;8U;f4E|Qj z^KWCH!;<(Fa^Gs}%j4;zYmAr>cJX98w9-g3Cw9HbEo=QQjZLY>I8){I z)sBB@97^+f+jdL!mCLd|DkEHxMr04db#VPi+EEQ~<4B4zO|YbPf_e&;)cX50+^qIo z@mk=e5yEF(WKv zPli_V(DqbSeYY)p`%#QI8Qw&k49)snxle?+FKdJSQ3u!GPiw0IZq$6{wh3;&AJ@nh zlvXd%2DfJx9VngmWjzvwy5MeQuAe<{uQCy|50=#D;1v`}t;DNvzqdI6zoz-y`iaih zVM(p$gRrFbgmVZU_Fj*`lbX-`PQlaO>lt`fnN>drOKSEX!ID~>`xu_jda!`9tfRsz zUx6QJiBHwzhw!RWWt_nE&X;WbVikG6|@@7ylMp3q9|ny*#u z#xBgu@+7Cq?zZ*CPLKK`#^hRhHXT~rS>)PVcJ~rm?EYNi%v$BM&2^Pl_Ah<=FzSmK z5n9|o=30t?p_R*)?8G(uyu+hQm%NV17G+C4zG2pD+AZ0Y+BLh%TN){w-%2~81#W#S zMaDL`U76L{0e7lBJFpAx_WU0BCCz7~UWR+$N;{|ze)X-0wEZZO`aQ+~%AnSHb-IBU z)q-8T1V8XL9>S~c!y3Hq@8cG{t@%X%9eCG$+=KVkUdBexItM5M?gM{I!fT9q z*u@UdwX}M2E#33vTG~~i#gmoL;@2rdEBO*D`O$W3+He!}gagd3Il{6Q1ktoF3o0=H_uOoz@_8%nR&&3j?sE77t&8 zCADk$>#(GjKL|@|`9tuqGP_^|9`*b&cv6`epMoW|8G9d=)aw5LmegYGG%Tr&;0!!V zdwLq5gXg{c0=(?)t-!0^-!*vK^LOCiX?d;@zlS9?e|KR?t$%y)zA`g*03Z4c9Kpx# z&k20$^_{`zUj72UbpK@9Pz(+T&pc>{iuv- zRFKsA@E9zq`EUomtNHA)I{0zVzXwZd%#`hW>)7G%06Yd*1?B94oC2@GST(~K6M|?;B)uk0=`sE zbB`hpc%A$$39qqk!md=dY{%NDsxQ`m)EE0Ww1_F8#dlY8E#1L~7W*W$*zcinrqNNY z@(|VDJqp{nN{5y|;|sOan>d|^UD?ZY-gva#jo#Q3jwl^*DYVkqmgcnVVQEg&=^}4K z2Gt^VsHIlo`EJ;iR!LkH9&KlBRNm$(!`rgbuObwD@9nfx>S0N3EF0iP&u@a8wLCke z1#VTAo^g&rY4aAIfhDyP&%*86!hO9H=zu%38oE%rwN1|NJ#epDunzj*L9cNL9#-br z<_LUWTi|N@7Ch>G7=z#O^5d|i*5?U$QthQrdd-+Znf4Mh@VwW!055v}61=R;D6hZ| zJpUp5OJ&X`zk*jie+^#GJlH_ld^^SIEqGfk7^59{SM&MI>>m6_uklZ?q_*;p;Zq-@ zGx*%=yMQmXJ{bes_h^Eurr(mtwG?x5tz>7TN==gR8oMt_N6g5zQt8-1VHx-8p_S}> zmaF`U*c7Gn&$@*gzt$L9$@7S{VOMS?oe^`p6kkG%I22l`zLGDcvi4p2s!=G7VO(#b z-BKInalO4|X|78Cl)k zZ)$n&{fA*mZEudiqh8+_JnrpHz>{u21y6ha3_R=Y&%yKWr1-V~FRDH5FToGg{^~ol z@T%t9-dRIg_ZBzcO)bGX+k*e#Eq)D4Y7zJlmekhK5qzxm@k`Msur#Jhx(bFCt1qv&qZZE&~dvrc==n$RAH6?+f=}K43_kbzFW^fppLQ;aEC;WHza`-{R$17^ zQ-jcMYgcMFVpY^<<6GrRM4+%MwHv!C>>?6`R%$nohhbT2CE`ffak{g+qfpDGrE7Lq zm|OCRqielRdq3=KcU0MxdKmE_%9chazsC&Avfs7dl*X}Cw&YF8?zZ(wPYNTLPJ7Xh zQjcx+DifStCer?{gXGOKLq@fETp}ersw8URLJ!iC5qU?!iNN)9c@Y zw>6*B*$%w#Jve|5z5Ee;>iK8zxz~3AUn-}Fh$7wdI`~@>)6xkn?DBmdYOLeXV!el! z@4is;NEB*BozUXn6A7(k7k3)DT{@M77W*``a((GD%(-1{eG#{FyA(%4i)SyPm3)av z7j`B8O5<;Km3P_q@1|8*2iL!w)_nuq_-pzOvP${o>K3?F^XW$$+^$UA=zu%5 zK2}Q?-0k)Ez`fpnAKdTl4Zwq5-w-_N<;UQ0^@kWZ0Z+m_VS%UBo?S8n&$_>Ju%xyg zKZ55ye*u=%cEu;Kq-Ot9SkgO{4SoK$2upgWvZlNQFRMSYY4o|&3d*Xtum($NC%?~N zNv(y?VM%ROtizI8{sz3MJ>*|K+=6#~g!bTlW${4A=mEgO3*T8?vCuB9lKYiTcrR&JLw?Jays&zGaV zh_1PoVnt}N-*b&Me63wUyZYyrqUu~w=HXS zmG?9%HNPk8506{mR%J%C4Q_u=_JG)F?>kUB-;-VPP_M>a@T}J`2hYDJYo7DK0=%gC ztnejx-R(EvP0!zgw>^Ic-dASs4&Xny{nxOhHs6P^q-K8vOKSOlgeA2e{t1@Osgh=5J^?R!eM|82umNwX{i0rFw%~0qzXR{O{T{sU`3LafWV+@Y!N=-Rokool_|!a9 zyGE}<$+E665(Rc=y)I53?Zuk5SxKs1F zVsydXZr=m&FSJ;vxt5;egjOmW`z`EZJ%?6mqf}q4=O{}YvUeOq^%Zule?<0cTDrA15B z?WP*jbvP_bp2zho>`Eh1Dq9+zQhm2AYb&>E6yn+({*~%0`&>H)CI9@2QPpzUGF>ym zo6;!U)1&c`?5FL4;^r) z*VhGidwvhx>-F`){qD~IEUESNHCR$>?{#?4?T6q|Wf@Y9r(-CS-og|-{eFsWGw__} ze*}N*EzZM|T8j(ty4!ESo8H4Mc-zbGz`Jh02k&e9;-Q|24p5HW;sieR7SG^w@8bo0 zsrl)y3q`8)R{2{JUSmy!U0g47Ev>Q8Vs(dBsxQ`T*u@znwA@l+xk};>4?rzpZQ$*fF1rp+R=4z{Rgso=w}1m zsQEI4x?`G9+SP(R-T`;21#{8`zwklYlP|*ESq(iXlG=E@1WRhZzYI%iE%d^Y+8Fe~ zuegt|!u?*~06ggBhu~rNa0Hgr`gk9f)J_aO(V`^Qa@x;f87n2%YFmkw zoZF>ya%d%Qd{n;In>Y~^5d+x!v;BB>M)OKJ=t^VJ^lA3?Nhb8rWxQimG zmDq#NGm8rp>6X{R-;(eea}##?+=LqIG1vGuUsa7IJNuVpui2%w9QDQ3AT)cHTvaw! zUf9L^9if%%N^SUfR<#l<<OcKb=?HFYCf^54Swdsw9cM|CAINuhkHH050=#S*DLU#*FOXgD{~DSfk(AHaZ_XA z7|OUQdcv7NnN)@MQl{X=%wh>;Qx(Q%3;sgAVE6nM-gYl`;A6Kxflrl*wr8+7WNp|p zm|RWs5L(Q2Xz>nOXmRceEh1U2i355?#Sck%EtM{{?4Jj|Rysw(Xve;HTV)sPJGV>m zJG9tExi)Ff*>f%3--cH5x>R4uF7{B=7oVZZwc2(|ZN%v*FUyn9%1?C1wEraSfDZUM zWunycaOY3bj_86VwK04Fmeh8{i?F1&zq?^cZ4LCmy+287xeu1q>|cQ;wSK$`OKRiP z4@+wK1Mr~M$G^uu1dppd^Em-ed;K%;tmaF<^{MF`%EzgMsPgw!YJHlACAB&i;9n}U z-hKs3YWb_Mq?W%1ud5GIudewGluh?)3*Pn;JMgaO@4;VbubJ_ESW;`@06uj4Blz6& zFW^fpf8TaHinyaT>3%%4SVf^(Ta=N6SMO1kTCyzF82j+it;F>s?Be>7Yw6A**V4OX zq1ilD`Amei&no4XDWZf{YPr zX*5Oq)`ZeJo7PPm+&(KSllLe(;OA!3?s^`U)Z=X@ilo-NF1TB3VC;L~mo%R{sF&eh zx9@}dmAOA3fCtq_t~o>Sc;@p2%A{LN!PClI!)M@mWxfrt0Iw?ZuavC8o61*LPk39I ztKkm3t1RQDqqK*zZ;FoO0m`W={5$4n@MTs;ilXrvC#_uL7vQhiS&LO_teYqu>npU_ z6}gtyYiOmi`8o_so3ko!N~KG7@vCT2U+k37N_Mdy!>-(JZSP8BT^^bA->f-@%gF zy7()6spZr9M3L@moAP4Uq)_AE^vE@_)YA;*B;oZ=WxAl%wi7EQYK*-RT6}9TwAiPi z#hTBxbREt$ansg(sO1`2AJ=-9*8D%KY&sh~y1v*$VHbB9p~a~?*V5+=LMzo*8iU)~ zl}5ijbG7}A=okK#>ht|s`A8$gV;`mUeFtv-DDAfvxb>r}wXE;EwV}M|7TvI<*5@9$ z-}47xNo_n|gC{+I3Z7Qxnam74tISHDgXcez9mlta7T`s1ZwcP_`VL@8y^nuDk<@13 zYxq!^Pkqc zva!CxF0Q1ZmCK6j7Hh)tZsiI4z4}~BJ0P@j%jx}_+^#e-DGG$0&m7|^iH&QmWofKq z@BKYBmS^C$eW|sJD3W`V?sGybjbYsFJ=!j!L)hJZ6wI>nF=vI3)2gq7>p#}@tTDa; zZv0px0q5{0xLNZ#OSHhP*y}xN8{DqU+V6lnKbAN^-0Fh6wLO_$ZJ`HcSW7U|Bk)^V zf;Be^OKM{}2EU^oaUL6oCAAek0l(|z--9K!`X^yY&3+1=_WT)m*2~YqlG>{K2$t09 z`xsty`z82Oum5MTq-MViOKSD4zz;nCA-t+goLYlF)A|{~&tVxnFTvlEn3kS#hh413 zT%)#YWz${@yND&ZR%;h0>qpy_>WftyWg}jN7P~aGQr~Q(tNK=IqhuG?&1fTbT4*Kz zZrit#&zu_VDNo)?iW#BV&aCQPsV60`$VAQ zcKa5%UGrHT9k8S}QqRGX`t|d96iF>sbi$I_Ty?>{UPB+;ugs_nz{6UeSTq8Uy8ReD z?jB9RlG<7PU0720=sgrk?K#IJEU8;eq0Fj6FX!O-`KyzX#U=;smd;P!K3ZUzDQMe4-%zgkB1gJBiGW2B-d)aj+hp9@tbj> z`6t<{`d4cCwjRbAAX+Jnb!lu$UYG1j_4zu#){}IO&Amzg?pkQ2RwAB;owZz9AmS{@ zUgAnu2S2`$_V+!wQS+IbCU|@y?W_rS(esz!Wo6>Q3jFhhv@d=EKhXL);Xi~|z5O*< zQk$jEU`fsXb9i0z`S(STnp)xD@2tL*kks39YoS>Yl!Y`1X!RPMd1$?RbJZF_+D7?nX2`yG}Xfe;B#cmGm zwq@h}!zf#7qg3B*eU4vbi8f+4hURlqH8K$+!?NVfZAYQha=E^AN{e=HTh`v^t$d=p ztosw0alV_{1NVL+YlvOd2lp$pYX;!KPtqD3f`>hS1RnMJ#^7 zc+RytyXu7&J0-MOOQFTu46S5WsxLmR5@qAJfkG>_aj(KBBC$Lf z*~(A3*8Vi@m^xTe>;2=fq&AZG;Cjtx2R6WsZr=ny<@ry;&C24sJ{@a8Y4s9qaJw?& z(*ckERCWaCJGD4Jl(g5>3#@j=v@0HC9U4#fl0oR%mFkDsnBILqm&eT&_v;1rO61JuFMDl)b5K z`L<8{plU|qDM7T$d|EUJHBQ-~m3mxi`L-i?Tf5RaD$V;p z;!Al{dCpf^Bt9&9e1IDlQ#@#bS3Q3XUSCYRcLUy3Cc zVq&{9%6n|QR-OoZO-t96C>^UIv{Ku#f*)-ct0C-e>S21q9hNt=Y^Rg3D~)5RY}u}M zWa54@+KAJ6uBBg|&NZ$S*G9T_J(NbKJgT*`RJN;aH=<+iUphJDTFF16d}T@Z>|;x5 zP2Yhf^>ua^MbdPK4L5p;Cb(0Xk?w+DaQhcwNo|C?VM+aoM-NKxQree&aKD!rfCse% zPxFW1Va;buM&SFN{}wE%c{B=3YURh^NzG?mrr_zN6o+QuS!Mo>g*kX$S;k7Q01GIK zs@&JRl_mIr*Z2@#^&YLkpJ_h3;B#0~^JpEG)I8dNH?2jD0b3~BT7u63?!dcVVh@(o z*7ldMr1oivui$;PXT2T3hhF{&KGqgFIi0|#non#$gU{Xm0+!V3`wqVJ9?3wV@EYqh zv{>W0mey%#aeWP~TsG~Gu#0$*YvPi<^BQWriyvC4bROFtZ5i`H!@T8XFbRb?$M z=2|-a=UVL;#ti_7gv!eTk3DQZ?~PN`*zlQi1(Xt7a)M|JNmelN@hMT>`7PwWJ-n7B(p5FmKr{yhTJde`p z7F}@nr?TI;bLoMHJ%0oqRc4;X;BmE=8Z{zJpiG*gD|!lLTFcoKcKv>)rat^*3Tz^*5LK54;v_(?!gwk z?KSSeyUO%v58kH*T^$GTq1zw9lA6bVge5hP{{%~F5$PC~)bdZ@Q|i|qoWbXwe*s^5 zdomR$yjmSqnyjCq z`hVGb_b;uAB;CJ6q)_MvEfiW%Q0Oic6c7};K|#STT2N5XLP0?br4$epw9qQ8b!shAn7WP_m#Ot~G;g#xMn6iI zy=k|uTywi;%J$lNu?E7Il7BHfL$6#%+vj-O5@k#6pttlsyRO;xy5wQmn{+D;dl7+x zE7_BWefv0#>`UunHn@LZ+EeC&=jHtQ;062AI$H=H@O;i9i@+x3@6}+F^5Gh=N#!pF zo7CB533%zgbh20mUha6%*ZB(Y%4}~HcwN?C58jyl+XUY1m{Y1MMIsZ8LM9v=tpU(9^4?g4eZ4vva;VjJgT;e70%Z}Oa#=s_3 z;|1_|_HY6`nQJh!Fr?_Sl=AUaYi> z*-Phy&?}XV?^T3e#IN8Yw$!<{&(qb@%xm<)bo-^$4$X_c{X~}iY2M5R_wP@UV=j1} zV^-#T@B-JTEepW|Ie!uO>iucuT?1a6^_PH`XZ;o6l{tSEc+fHT&eh;G+1^_4y8X6N ztt&hhtcTg?C789Fz$WG4?O>DYtvkTGa{j$wlbWHw1rIr9M(hUf@fsiSePJ)yq(sA=jm|?+1bf|M_W(OA$Be;^i9Mc*#$DEDQYC%Juc7Zu<6k=htXQoKM1Dtob^ZzTqC6e!Hk)FW!fRUTNe?KF7Q3df5~o zgDdrYeBK*+rST}0o$mOSe3rew2Z?77rrACl-2b4hUf!b41T9L6WF9igL+u5dR1e$_-k0s|2M@cxdFT=35X{l6aSS}-9`l~)IQZ%8!82f!s^J9Kq{eF$ z{H$XGO>s*SVb*|mEQrU7(x9v?|Z-d?i*L`V^QpuOtAL?b>eOmUVtyh|D zrST}~$-lmbh=UK=n&bB@W`i$#D8;=w;C|1i&*p;XIi~;TgBRrdh2Vi)ei3-ku}xQ> zWvgLs@e;J?R`9x-#(J2I52Z-B3A{Pm+ydU}n7V^@(G7!GtuN;)Z=4{8&P+;AJUtlx?bDwh%a@$ zQrYxbU0ts|lVT4Dy>cC;vKtg9qip^Js;3v)BVVdnYoqUgM=X79VAgmDd=Q^}B|i){DIXpI4`=;DV3TU|qhOQj z)yKdlm46s)Qu#-~Pg9@w=`&!Hs_z8Yr0(mZ;4_X{IcLG=yhYry&V$FYy$j&+Tz&#< zQaj~q;Ma3~lVI!4Tm#Q0NMqehtrs!xVtOfdgkHqP;38@Trygqf7cn&S;$2*Dr8;7@ zhF+;1)9-^6pX&BfybG>eZ(Fa_wsIe|%hn@&)SP2MqYq0qOZ`>yN8{9Ykn`BVw9;pT z=N+_J$4Z|MUf}thbrymL4yI_h2)xwu%{9MgE`wQ~ORNB|%q3QV2fYSPbgRK@4yJXq z7Q8O&uLp0;9&Q3}_VPr-E#R%5&pY{T;O(AI@9qHal!qQEcEJo~josiquEEOO3*P4* zSev}WewYKf#6j@U?Bg-8N!9rz*km5Jr(i~ME02RuxCXn?DEOpf=He;vnOwtJ@Qb

    Dc2j6^=a}EBx}~!XpKJ6^@kR9uJ}o_juCB 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

    eqredQ<&<>7FQ2KV7_EqC9yR;fW)*U`iG~ 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

    >^Tvkj0pC;Q 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%0A_ahXALW^U3!i5T&8zL! zvSqL1=?a+sP$R+8yy+nq+Va4WG#r6zfS!T__t$C zN7Wz8QBSh z7S5=@55CsFU;SD5?2S1kha<-k^?Q*+!jz~T$X@3b%`@LpdFK6}XWB=l@~ZN(Wu-_T zH~A8)BdhAJs;4UMK*joLT=uQbQ{Q?|Hq~#z*Yvjf9r$cjSIJ=zJvtmw|CMijR(MtY zUZhJlC2G@Nn`dc#^VHh+9opCWF4f;w(gX1|RU%XH}8unm!*n z!Cua@{<^F4vX<=o|Bt;lf3mB(@_dg5QUVE-wgeL6y^IoLCT5Tr@3jR;X38{RON{qo zz!GC7gDu$%_f=KIdo^`CUc{^FA3M6DJ1RO}ynfNq)ums$!Vv}=4A@}6%pf|d`q}SM z5%n*;^OJVpqpxHpJj|-T3%ZWw-Kr0uYmP(J_hcUSDwzw5dDZtp*Lz0$ zRUc(3Bx_|FF0aYYf@RedvbZH+Ce?}+%F zs?R{D$5|!2Ky+=`t@@pr#a&A72GO$Lqxt~4)^Di#9CR)9yz2X)YZ>;dK8kqBSc!&w z|G2@tCv!U=S2^?1k~7w;;jv6h=}UQ+QH={fWNyUUrM3FYkGg1=Jh zX!)x5bv1t9d#A7Z40P6NR>>$V1S`=nJ+sJ}mp*6yBr&lxa}(oNX&ZTXEpt1c;W_ix z%^7Ra@K~m$e7qNPp9|~4+0n?w*Tg(+sf?vOd>zQsmh4LHz}i(Gpl{cGkos~`Ne4uI zbyc5&uH~9my$4;-pZcoLK-adJReb=Rc?^|^0_Nq*nb$XGOslD6$J9%-tUg5TWcx6c zruvBNql|q__Ho7zk{!&Ld9ywH6Sa)(cZ*4}FwYw$)Vbea+O7?zJwi^Oh@vpk%0tp4`OI+ zPOT6j^`19|8=&bwM~vB?BRWTF>+>p)C_k4;bGmLT8duml_f@Y>+pIq??z1M(HLa{U zO}{jd(-qa;LT$<(*rpseHcE6|XdNZ!f3_q0ACE$K$Ar&8@UVlUjn6mm*n+9}%)&;E z*0nZf#1N&=Mh)*k)yB+K3r0+N6!^L>USmtwAAv+zR!!pWeU6kqTcDf~4coHcrP#KO zaLK69qhn_YE3!h8aur``#a*RD+mG+(AYk7dX*O$=Xp62jf{`J=A&K95ImF1&^Ae5> z>th{Hhv;LD&RQSq?3=gzZB;1EjB=}U%vj>sr~h;bBtootIULKk7keXLfo&!!VSBAt zk6Nb{Qqe8PF6+UR-WNoLbYHeDk&Bej)l?XG#%+Fi>%YpDhj`1!n% zIVIZbwN@A0USCTZ`}Vdh&rdCNq&6X4A>9UN0aHs(7FzQ?(QXoPCuO=g-jb0}S(NcwZtey(5>2tX>&tl$a-3#+Zb1uvq zoo8v@+~;-BeD60+_A#Hd-3zlxY*6RId}7R!XOz|?3XlusYXY<2-Pznc;JI3p{bUIR_Ub#@diZYAzWHwLXaffX0!pzV%E6fZXZH1Ykqo*)0^r_mC z=7o;i!o1LNo90Cve>8`F)H{wp+R8hF$2?L$OPEJ`Mv>-G%op`jm@nFLh1p{F`J+5> z^wAa#oD1diX0vEJxAWNF#wt3_=eSyEOXU>{Io;n36vFs9J#G#i{(K)-i~GjR=tmJ( zm_@plA9@zyazr+sRr88OKpc0pMupj>JyMum+TvTHDW}}Oj^)DK(s~!>mOce7%q@NY zp)j|!R|<1W%fCCy6X$lCZ((j}TNmb*ctA@RW|w-}A2~ejHP+SSnc$STUOpQs@uRWT^Wc1v)@`=wevsY85oZ8L~kM@$$8*c2{w$1{*ql!1>CnKg~Qmoe9h&jIz zb3w$grs1tnSFs&apGC!{`bNuYFBWneH%6D3S6kb1ja*)BMf>s2m-wc{Idqf|+bAtV zEpSzbn`E|8iWcWRGl^{PKlWtY5odo&n&{b!>-`!lv$ok1R%U&BrLZ!$o%QHkPAhYq z-RRnI=oNTijlx+tG)?w#7NfJQu+r)kP+Di7bU!*{p9(+woa@S;*58ryakEnM4p+G_ z{(M#}$BceGHs#Jj9)CVHZbcn;wlOZhaWx#5-}oAiE6upIe_UUTJJyWzdARAuwamEs zm7XD32bb^Hd)zpm+Aetb``pDx+$t|C}LA!>~M(mPggn zuOZctIjto-+AMeB-u^LU8p{9d93gBSnTCtJ279>Pf7Cmk47 z%OTmEu{)4@o@``H+fw|HQew>u{7jU;z_p(XTo6~IW)9k8OG?r1t35`){a(mL+oHhR z>TyX+z4guIf}i#h9ZpPJsoHv@J&(5bXiuSeSNsQiF@qGNF8fD&{L6jfc$#M$q{R7X zPZ*@ck1%7|Lt0VkxU43ELgFm1c$y>xl2e`}34xS6*H4!cub(dYSLf=dN>0;h5~SpV zCr!d2C7w=xAthcvbxJ&)5<~J_za+A4keq%wD5T_rm&w8)C7v#rA+4x3;ay4pWqcuc zpy%{Bk!^$Il&5n-AURE^b&yhi$BSkgq{L4M4k>XwH?$2>;(UlG3{v7Jo3ZR6C4Ne9 zNQrlXLrT0G98%(^28Wb5e@sCbB=3#W!y1y)GlD|mF{AOTvrf+nTS!hf2ZiKxOHfEo z&khR7={ZJkK*)04NOqGko!K{&%@~8RjE`B;TaD_m=r*#ujp<5q581#NQx8c+&1|Vj z5Zu?bro9;OsL_mROQFyEt8>ly3WU*fD@l7swcLHO8Dr{omh3)bdVIQ{Y)@vlmu$`$ z%Q{aw$}A;{lu|m!u5}-SNGmRI+LLfO!m&A~qPKj(AB&X9sA#pT_)Z~b? z<9jnkTd3j#)E>eWl^%WiWIK#$tL-G4F=nkxHZX?&*sX?SbD7;d**;@>9gXA<_kV8r>UH_Ny z#M8fwL*kilb%i;WJtU`B8towDO4lWuGKL80g=x~BQ5&mdgPP@#bk3-@-O#b{Z2>SKHX2R^E6YN+(&Ga`%JC#bQh)0+soP3 zZe{;V^^@K-tCy#(o!k7Uw{z=$mTteadifFKY8er>LE?<_U%Ow|6ULsMge+UfnBIHq zl1*iH(`3EOu1_{Xn6GZ+LJv14y?wA)UrSGs*0N?EdNgP0C0Il~d_8V@lB7I?X~y_G zsq=K?s`E5%nq1F#s=gId_Kkepr<6q3{WkH0v*E^Hw=-4PU$ z)15&fIsJN2NKUU03d!jWK_NN4F(@RbHwA^{^yZ+DoX!M=KkeuEV z6q3_HP)JUPK_NN4Hz*{h-wq1N>3u;VIlVt9B&QDqh2-=*K_NNa6BLruy+I*4eK05_ zrw;{%0zZVpe(|ti9Io%%=lGE=8h2-=HK_NMPIw&Nk&jf|!^x2@0oIV#6lG9O8NKONW z@I}lQt@C$Zj1WD0`eH78F&Dm=3wCJu-I)tN{x4RdAO9CG)AJwBp(I&nB?Oi2T2YFiPM;tBbbkvFYNT?jcA5{j&`xkN;!QI<9EHhb*ktYNc=zV z#=93zmxnDRrz?U&a=J1oB&T@O!Zt`wCxSw9x+*9nr>lcPa(ZM?NKTIm3d!l3ppcxd z4GPKW(Lo_OJtin5r|W`3ayl6llG85*h2-?hK_NL^9~6?)4M8C}JvJyLr^f|_dQwnGPEQUB$>}LUAvx^?h2*pw6q3_ZgFB+Z%#Ha(biDbqM)vXp&3_ zq>1WyZJV3SQudIX-W(K?)0v=YI{Ewh_YI6S>e@O!Y0ZmpvqJ!Cgixgv%@a zKmKKq*XiE+Z&KwBi9|~8byXYb-oD%iPH&`NLN6~T)6jB2R&}ah&|9JT>Yn+kyixa- z$0n6Kw81agbXA@r!LQg%tGreB_N#2$RPK?Wj(wHatwfIIc~a$$?k)GO%A+I92C2kY zH4pVAcKr9s1Z$%q$NVZX4cW4*$u#8m4v!?$a7A@2M%qzi8q(hyuvNPEd{?U`m{faj zEz@eqJdP&Qkp7MVTcLZiTB))?GWE8ODNjI1ZzqyzNN*>RX-K=1$u#8e1Dyi4M)$UE zu2or}hHR$}Q)j|8Ktukt9fktC{l$kLuh{~EF!r;};O z8k|A486oYqK;HZnBgl1&%3Dd$lG{}7k%+mBo4#ry_cC97$g*uu-l}WJG~_yaE!Ya( z+bCbDvcMgdQu}WwuzJ<~dpkJx8yR zc@R@tCuwo*mAvCEJNJ(3kJO5|?tr#6C~Aqbd(c#OUAIY7`7V|fUm$ss+FN{FFX?<~ z@#U@S?Pxu>upK42^o7?oFVSMWC;R%y^IY3{557Im)Mi$ez65B?VXqb=Vy`}Xo+G+-`-9-Cj7I) zz1@<grkRh)j*~r*R zwk@foHGVaGQZvWKMQ%y)_;Qru4l^DhoTzT%|Gkk4Gp?np?xZck{Q8AlXvDxbbxUM1 z+Ij`9Whrn$+E#a&lXVDr9y3YSL&&k%CmR{l>v@SKrL?@dlx@}Iz6R8J8aH*G#!a24 z@mJ?<_HF*te60Ivx7Rc51@&#W$NG$3s{8jV>boVzHb`+^RNZ5+gD_~9^mK$Q`59!J zYnEF`r;O@vn@*E$Mac4QBkLjLwQrwnfKXQljMpLQTxK~>whtja?k5{%b`ncUDfLp5 z`>(LpdFt&tUr}Ai)@^eA7TcopO}$t5!x3K%#FK0zgvpjv7$lvmSfi**@H-SU`kgHq zn(lYC)&6HI+ZUsNJz5P#kZl)2ow+!E?LHAF@00E^s+N1n#I9yb-P~mM1@663@Whra#PB?>8RKK2$tBx%U*lt{ zZ(AkSBhF!2vkek!Qs9Ev=FJo~V(vF5s}P3&)uhK5Rm*i`8;xnpZ6Z6~ z81p)T^z0fvhg8F8<#S0j40;}^hC$CK)iCGNMOs=i}Il0Bs8>1vPh4#H@?E@`hu`=m2L z(MGeR_Zijl-A^{ESxOG%l(?Q`KQF&GFGcmBXtqI$(p3)yhvZ%!4hqTXBS9fKeKaVf z)EbWkhm`nSa7c;I2ZzLCQuTOHNKT&!3d!k{K_Mm2PX&jR_;-!>5VAIXvVk#)z^EFM zj%rjQ$tkI4j>2Y)kEteS4omk{eNWQZ1}XBc_63KO`2OIK690a1NQwU-IHbg%4h|{t zXM#gY{8{58gh53nr}TNpczd_xQaxv-l0Brzy&46Flz89}?D??XurbD@>26b)hM@j< z&naLChl*Xs>%&O!;va}OQLO@h39@Xj89N&6b+TXo!QX`M-~7Sfzz}4CKl31a`V2i6 z!c!IWbdw_HjEI?O#LPwvAB0R)>rqnNcDD^T!(0+4e8!?e27sl60EDyW&wMFx+ zUi?GRSpJtF%l4)*?UA?0J}@?mCyXDG9W-`5pE`!yU;km&Q-6q_`ZOc|s6^nxHdsi^ z=S20bW*(7QTN+O(AzCZ-bI)RU_qiXA*fZ&AQ^bUj?t2CbVO%=CnGm+Qu&lZeZ;Rz9 z?Fl3Ew?cqhH zO~WH^EqGl_Yn^L_iM-B>!d;Zbz}v+UleZSyB(>HKPjfs{?2Ht#O0EY_YviD2KMec4 zZIL1(azV??vytGh{fUSX^Ex!ye*Gu5>cH1;{zQ)t8HvQX5I%Aka4E@jn376Q}CFr+Qw<*9?m&S`{>ALF>0S?aXxO)UgdFv zHi;tVLi9-vL)O^eUfS`V$MDRH(M`U9P)TOCZ#x8Fk}6s`!kQE@t&6! z``Qnss9GY_=5=VY9SqtWm%sjDI_m%ChkDdsLcNej8d;W??8jZt>Dxk|EzK&+DBiJJ z9T~4NiPybrgRe7*?_Z@AF;+f(|1Pb3C)WI&6n?lOvVPs*oFDX`X2+oBXBhSz&FNjJ zhzTKT7bF+PU1{@O%-lTWap}h2E%0{+!_{m5hlup|I%L`2LAboq_vhXvJBV;xnfMM{ z8WU_~`Z;tfvo)7h(_`*4`CF$}(0pHLlNbL&4A>qoL6%KJ+Ww48L)yJe_8LNO7qWv0 z)BBa?Q1*ZS7k|Ss^ACUVH=_TKzxW$^`+roIJw5$eb=h;w{6_UpkzQN-A65S+*gwlB zKaqU|59qJ_vj)i)1~%`n5g*|ahOf9ebFxEW9UDByXf32j?VU3 z$+@0V#oDd!jCZ4(dnVDoAAGw>T!XF&&g%uPe(75B2D9Mvo*ToS68+y4oDzSD_2%G| z=w~K4CHhI%B6pev%X3%Q&zZ!vB%QDBGtN~j-Mzx&JK0!YJhZbdj$zLgR&O&Y96utt zJUikWxq(8Ms7_q+Y9;kSIa0rdH#lUas^5klA+#kg_lmRHxbUZZeK^<&x(3fm?@)aZ@k7<;pg#%wdDTbIr6gPYyz(JH++ zy;b_E%YJ#KUy=Q)>N}w8`mj^=8QAN}Hmmxr5r3QNyCQzK>I1~<71vPpQP@l7N;G6! zRBxe7vb`lE$^LWlS0uj*^0t=yZ7)Y(^}*YIT|88M1YI2Q-5h12zU{S9S#}zxR!??m z1x$?dzLqxiY_dx|mKa;1mNt$hHA>6s9oGCEsi|FKzf1D2*R^_&N^mx$LXD_44n zUWPNo))vI&Qn{ttTGeNxmBjYTs*2|wby~L7V`Oe9vL2BN@BNj_mW~*?n{v;z)uVL3 zyUo_FSL%5!?C-;yx#)pfefXr==EsISQ<2McOzUB8Uh^6e~H;NKW}+Q3xcb>G2{Y zr$>rx8ziSk1%>34k0pgba+)4bLUPKNI)p%SnqKaJ z3R_4{PYw#n=_x@WIqd|6 zL2`OlP)I4i&A}n@`?T3hWLuQphO^4*Y_shlR1cti(vi_4cy354md5>iYfTPU;)Qk+ zM2ZfNu+0>0p8R{G3+$Kbzi6M17ft`IBqk&*yKwqXPf_YXQAo8 zobOWY+w$eFy)Sy4#JOl8MO#VRdZujeGyEJIw6cekX4bjEAtioZa7gau{GgDWUJw+L z)2X14oK6RYl=8bUIHbhC5*$+E7X^ou_{G5?C4Nb8NQqw>98%(2gF{MuTX0B;Ultrv z;+F@9l=v0FAtioga7c+?6&zCH=`~hJiTA=DQsVvKkXBUsRqw{{U_1R<*g|r;Jt!on z*93)>^1C)Tq{Oca4k_^+!67BSGdQHgzaAV?;@1a9>MHa=I%hB&WNBLUMY0P)JVi2nxyRok1Zvy(=grr*{X1HR?=Iej1~B&XjA3d!l7ppcyI4GPKWgFzuVeJCg-rw<2(mMmq?}x@0|L9o!%8lZjPkNzGgsha0O$Gevuhtzi4ijqD+L`Su5ew4$=}@$UzP z2Shc3c9|5+RW&?gb?=b!=D z_Z&xsz86cLCq`vgb4Q0@({*qv|IlKS@@SVNUHh_fy*aG*Z3@GJ4TR^%BeWQmRAsGqRs$>}9f-GxiGED;ay0?A46@ob2Zr`vuuAGWHtT zYZ-f;>~&$A^lg)0f{cDCy4OmHKrp?kt=?d&H-y+6ev{-)A$ELvi{vdKY_;lFWWN$- zSCwyrbl-OURMlnAd)KF_E_>RauDa}bulfwtWzYCCRhK>E&r)6XjNh!f>>0mBb=foi zY}IAY_;XZ0FXGQvUG|K>Ky}$O{gmpmXZ*D4vS<8-s$UfG7ppFN#$TfPr4heXb=k8$ zwyC}&;&-ZkL!`e^b=fojn^c$m^6FlU+nZJYX2gF>b=gNB?NYKkEN)j__AJ32s!OMZ zh03ziFuk4e+p|mWX^hWfd36)#>UcZ0eXSmBzXlU^kscRonV!*%FJr0BJhnH==;w6F z-(vGvY|$HKN=Uft5xTGcz4_sie$alb-!*|V%GRbL(PN2)G+=6#gv$3*-( z)ny;go+g!S2#aG?mpyy-IMurmf2!)T=llAnseWF>pRc;?`99|bs>|MIzUouqe_D0f z`^;BeDjgOo%TB{IZ;~D7>>}*0Wjm*|Y5eBQ&tP)q<0Y|Dz9oNYyri@xyI5OlH7Qxj zn>~E;Jl^Btb6#AH%dPLDd_h^NcX=Fp*L$~mkL0}|?~}YA+(SOz>fFz0 z>eRMHni@PW58C`oURNC$>|Y6Avv803d!lJppcxd4hqTXkwGCj zJt`<9r)z>ja=JDsB&SCQh2->@ppcxd3ku2Uq|p(=^j0;gFyn}{m9!p{j+1qs{=cBk z)BnTOdHPScCink6sB?YCpT9#?k4aY}b>3Fec6-ga`jWMe>>)|3p&hC(8yz7`btM%B zDg8G^oyY%lRqN>mVX`I_W?auBstslbPLB%;$>~O;BZTaIkw__}QZ%`r z%{009Po1ZJuJiO8K6Re{{GAR?c4l#8*H*RkUb=y1IGu2R%g4{ZBnBV*f{o>c6NKdR;0V(DcMiT{!AZ&>TQ)Tuwt4qHg6Kh6mbX`;GFSFCf5 zu0%Ldoq_*)K7ve$(F<|5T%Bi@BZU0Vd67sdu^kKCdgy$Kk!^%9wJ)hKDWOk3{qM@>zu0vtt6ntb-TLIknAD(ueN-}=n90)aV6O* zggoxACR>-;O_FuY4#qM@x}-g$`afWOvh4`fqp$O{j?{S?lXV{F ztP5(;mUB9zuY1bpLp>(V#5zy&q0ZB<*VK7i9nuQ0So<4z_o!)qAx2-JCH$^z-9GO7 z7gG3>iF%6mUM}0WwNP8{)4tj&C9(|?+b8>c#5Se6W>=SmEhInQTpkpX(<_2Pa(ZP@ zNKUUZ+C#{*{XW?UVX6bEFtbIZ^~2(0{2S@b6#mPeb$&Q`+iwG1ErqiU5=Uy)3ku0; zKPV(`m#+qe5ia~obC(?$?4aFLUMY2P)JU1 z2nxyRjX@zfy(uUpr#A!#@nV|G9Np)N-<>HiZEJu8)*+AE&F66v(z4y zSW-%<9qK&wX`N40ZGOZd$9yw|*Qd$Lo(_?7b(>@)TMywx)x~dV^vMRsHh>Mu=8P=| zn3TmVlhnM75f~(9z_#>2HaBQ|x5xA=DlK?URm-YJL(=N@=1p58o19wjM&} z)+ZYo^Yo-*XI$$>O@iPjpv2WKLmh-#GSDt*FQ}H6bYN7=H6$Au^Hv}gpTBubo_hCrI(yZ+c^gZTP_K^HoHwX&J>Ck8o zA;(ysY+y_xFcyZSqGq=K^>(56CJ+7{^R3@jrlVmSWZAATCK9|}N!l~2V@bbWF7exI zmefeYfeSZoSiH42`z868eX@Zu&230FXG~nc=RD~svy>=ON@@LSa&Ort*YXzp2tvzN_lqDKziFN#WdIZrw=>ODd#M#jB`o4n25*T<&4*SyKS=1ndI&^~-X z1lf8BeP)sI`^sJtQn52zFL{%DNt)co%y%rm)d(jl9SKL02{Eee@82|@+M|}%Cy-_1 zw~Ms|{^jC*ncaTc@yo?tB2sZ+wqCO)_u0_oK6{$n`=rSwBhK4qjQ2{Dx2I^!TSs8_ z@tD2h!jHlaiY(hYgfTxSNjpZhu3fSzW7@9MWIbcrR(-M=W8xO|n)w&JI=8S0% z%#)2WJ8?luDau)h@qQ_!z*t^F3h()*Cm+*IZe#Z$$w9UbLbh?2tY=Ij&?0@(9W}a> zbjGOm=q%a5nD*w7Y|fb0dY)`#jQL1FPAMHjn%ryL*i&PRC_p&v)w{nw9Layb_81MNew=wpZB$Ta#(ANyI zo-rF?WCLSb>LJ;jF_vJSR8-@hf0KJnn%ryN`^`Jeu#6ps5F6PkW%%S$%54oQw&A;p+O;qPNAH>p?}@34+duB}^r&pZzhhUX#a(?-?u8M0B$ zQc{sql3%W6eogM>XmUx&-f4-c_KAsYkfN0SgR8y$N^Pt`mThFr%R(v<#&rZzvjoOP z*7p9sLD@q}IsU--2x00qQennLV2xU0s;B7(VR#proRWOCo^9FWVxZ-GMg-d+O;p;( z)w4k%h5za~<2{5y`=leIK8i@ivSv-)9Azo0k)a;Ksg>V;|@+gVwhBNDZGE)NEL}hIQYNFZlZdONBlg>_J30_(!rU#)Oru81R@{akE85D!i;@TYD)+ zjWm%Y7s6u>LzdZ7FGu92Jhgn5Ld2Fdj2V|I{NzHEF||jOV}Z}8^_eI|?k42$7bF)n zmd~4WZgQk8xR$l4Uh_BpL=us{3Ay1TNX8E{XYqiPsZ@i8&tYU1EhJ=o8`V9|WFC<& zJ!0c&4@XNnwTYY-tQi0B=YJdR{6GHuZ>QwX+G$#(?W##`lK(X#&$uqR&Wb!x9V2ik z(wu5oUFJm^sb)2ky=b=gejCdq(zYmDYR{9i7}WlhFz#eAXt8d@^s*SF=|@boj1a^` zL@scBPLYdDHQuML!v&v*STpNmA&OaOsVL=w8TkDFF6ko03(#ac7<5cah+Vw|k;@{E zD}~yMzwx;pIyQN=ddNQNmf|`VsWI@`4db52Xbt+oLnwG#7#Bo@gMTTzMIF^s`Jxn( z6fK;}ai_VClBb6)(e_MZhK+rsYj9J?)s4?=QW?WTdko)YDx~pmu7r~i{Ao>q5GJaX zc+;ie&EMn+(-0QKux0s$+tjWDOTwpH!*IY>P496st3V+v$iHJz%d0JTFSHwm zr<=sKJR>;IG59W2I>R`(W`ADTPnpCrO$WcoB);8raqz7sEkmoKb+<*#6(+F{uM8e7 z_$=&G3-VPR=KQs=r^I*pw+E-hmc1r8UZ;_bE%Ei>Jkqg6({YYH7d1$I7fJp92m*w# zASS%&bI0UsWJ$)2g9W~_To!&a!Xg)pkKdCtjqhD>OmJ4GF%f;NZ_lMZ-r=>^F~lAh zc7t)g6Lw=XM)bYfr@m*eu;s%%7udo%3VB?*71gozV_T%+8c_uZp*@CQ94(~zB1SHr zt4mwj`kyOi+}yRX{$rf8%J$>Gb=&7jo)7W@$qPY#Lh_R!KPCBTkQYf_4Du4mOX+;P z`We~Jgq_bfK6Ca1UjOIp9Nult*Pq#b`Utw_BxXu9oT$9sIdf01!c*r}Nhu*}*j3U4 z*{Qx&A3^uFQX=MH-c~uIC$*3rExlb1ZRvH$EwwBSkJ|dx&)MrgPj#q%LH3J`y{0vN zO^CLBSM?rrZT-IL1L)dbL)GV?OSWkBc_kwdFO3q32J@E4nU9a0d0*$udnjime_C?Q zPj<}LTPsgn%C}VJQobdB-t&1LB|9mSj?dTG{;$V;{UymSgS9K)o=5Y6 z0Lqd6GenfwbO!V8b3hR$Dt{_fr=sZ{d7~>NVEtAaStSAUUTtK(1iUKSU}U2NQRYp? zIuh{wr)$L8PLG}jVoz_On@}1n;xYRzRm(%Hvuh_@Ah8Bp%nvS&cm~PqA}fiWJDN%C zSyQZnvi0O|qMF4l?;AnNIC>b0z1$l^IYKvKqWTunFQ5W=jLoB%TP^=p@Vcn{+kBGO z3K6xa%^ElSai7+$f;b4d74SFGraJO#@r2%VxaM;A)u zaS|5VyAjK_Fxncoh>~cZFa zSui3vQWlH{o@1oZfCH**wC6EZ0LKN7T|BM|Khf-Ylsm~Z*>m*7kvNSXN=$KTq&Uqa z-c39`I3?OI;qIe&z_sXt`;YXLM(0JA7q90pj-0nT*Dup@mI~ucu?>^3$AFfEV z;h&?A$N9jy;O8Ce&=Ep8iu33}D$Mv^T??0)gC4?(Y8zOeY-CI#=z&~-#XQ!+nW9=Q zf^0p66P4!ICmR`~r3B=Z(oAV`7)TilDXwN|nklYn;ab;%A1!BrFV&B(5*5x%ZG)8R z)#TT+lua&)T4H<^YNqgdHMy6+$t4FpkLGD}520LLBiBCJz!=LiBpuZ#BIVCEi_wx) zM+AlBYtBSaNU2?#+}owey_QYBo_Ca*+-E_Pd#g0LkESNKI`PmcC5Ob;s?vf9X`*_H zJ=f$CiJ0n05p08`M*!tV8Js~VcbLFt$sRVQo*y9-tIV=mW2t2iDUK`E+Tf59KRP(1 z#E%IMDRG`02!oV(IxIj+{7a(Q1}X6`8{}_pdH;|~93;74!!~SkiPW~@AxKn6wD(`v z>fw+i=ZmoH^YAn<#`Htdkx`%fq+(RF_TT3k9jkub8k%j!Mb@(MWJy#=6P1psDxEYz za+(g3kkWi;avxJouA`(nUeekIiR*cFLQqKZ`#oAZ9*l)Ra+(gxker?@vTP%S+Jo>Q zGC8G)$zET;iwrD>Na?i(up)2155yok^-8XU60SEY654tL zG}$y{nT{pXkTc^rG7V|BkxWC5=1pW8Mk$Xcm5d-UJv9k}i@*`kOyS3=Cb#}TevZ`Seh${;ZT4*?YO~j4TA`daws}d$-(7Rxq>>5}+mMl zl>8X|6|>e~N%J#gGX7SX&l*y(hm_7@nq0>#t<1UEi>$MW7n>b~yn^bI^^DQ7PdYN{ zGmKP>jC+qYxvv6EPVY=FLETezv7sJ9p6~X_=8Q=MYBEnc$}A;{lv2#jt^?)#JHEEY41JX^@Pa-?nn62n!9b-BMx@4P;>FD1= zw$&KRzKv8vt^=2mX&7Vea?)O;M{D&-cNo?AzLRXmn6||%*{;lPH`$yqw#7W@6Gk=l zlVlolop_2&!zkrW5~nKzJi zEVYi*F4?KZ)Z=MnryJAKoI$oZv)e+}Gp7FfWCLTmG7QP~7?WyaHtr>T*r>M6BV>;n z)1$;=WOK&U<2>0uW8x8Gd_U>aMzuemAsf{!B>_1l-rXp0`u?0^{7j;myS979TeQm% z+PD@$H4m*PUGva;-E|M!thGm%GdB%+mAZmVL-mTDT1mPtm8+U0TW?Hqgyja(V~y%P zljF!X8q;3cM0TPvJ&!$!>||r&5q)|JsfL{E9Wo8MCUnU*TWTFmTgc8ersMNGvMFOa z!luc#8e?6yk@k#goAt@Ihb78*4XK9FYS)r#$QAoKvQaI)WJpely;0zTkYgc6%U9rn zc_KCi&qHK$#&q1wlZ}k|s3ev0827Q)0{S>uPP|QJ5s3*ye4M|T@9KQ=`+S*Lppt{>5V}lIlU<;B&RnU9U?!T*9FHdUyI#0jEU+4a7>9+4-%4axJ{9TXDZ#%lb|s?$5nc7%|1 z6N!{kni)+l2JD@B480dTc`wxMQ?E6-{U70-;z_m+!Wea3(kqPW?7EVyhmiH@lMRgN z*EEJ?BZR4yNrgeuHH^pLddzYRV2SB=L$<@1mU$=Hj4>S-vt+xBS!|tYCrboy|#(Xs+m3)o+I@;vkK27f9y~*4Bd;2u)+x&Y^Htm<{ zM=Hp%)%4VsvyN%Div-a^ZT7yZHT~-huZHGA_K^J8e{WDoPQM)#lGFQwLUMY4P)JT6 z2nxyRcY;E4x+f?kr+b4!a{6FUNKPLL3d!liK_NMPBq$`Oj|PS0^s%6joZ{|}ZIGPK z2ZiMH@t}~LJ`og>Q`|qY4U$vbN3so))9(g_1^U0=P!u=l|U|ZFwH^W4w?NzAI5@ObwYqr^BWE6d+ZPpDQ zeWh*O56)Xg6P4B?-6)Da(JyQi`eZ?^5B{&>^mD5BqIzCiF)ES^g;Kos$67i~^EzbN z-Za)nU%y56o-wW6`(z(vb{~=*H0IwQiQIqv$I|!O#=rUF142KAt~vap>i-0NL8?fe z?%4$jf$56lMvUrnHcK@wPD@(!*dC*EqnM^WM%%NPraeaIXE9BCjE?$Zn)Vp&onjhY zJ&G~XruF|d&f2>@r}lEU$LLromf`b_kqYSD#i+8nS}q;B8x25Zlua{54l*M zga1LxCOfpvC;y>Qx?5W6xWrttGUy0M1?*T9$8k3dqZKr#&)y0L|5{wf82IF`QP1D} zwTud#bN{dE{~vUiNlSdHB#J}3RPHFBnBeLwl`u=A*HbA?^q_vrJnV8o^XGlroSV#h z9(lxz|53C^^%6AM4%X-=|FO}l`U~c%TpKM>c-dsS?57$r(-D)`ALUK;A2iYoBTdx5 z^lK-LRFNnb_&e~aI6xfgwgghyev z-EIN%~j!>Fm_~E$algKn`_n8I#qzidokTc(OA}U9YX$4w z4<7SK%ai62C6UZ)k#LS$+NY66iLJ_UDE5>%PiLb%ZDWsPiG8|YEb(dgF#K=~ zEUPYT{l({TW1!J%;g+joVRVd(k>n^vO2yJmRD&^V?Zac@G+pwSmG5?>D#k1*MV4w@ zoE{I_JdVpv<9>X=viY%{#VC88?D>qn0JiQ0Be?pVR5C?^rg6AZ$tn`9mrIGMkH)Y|Y3vC0AtRN+rFF^p#wj zk?WM~0MQ!kRQ(28AnzNM$Ua*5CMB{Damt3Jvsq_dT27`c5m%F*@t`t=$1`FfR#a*lq!etkY4uGi0+zO`P9?wilr-eYP| zy@)kt{flXIZ&0#1BU_Yg&B!(-SAeMRD^;J#EM}G5nvvU-3^FoQa$iR7SF#60>%3R> zhiQTKdPK>iS(?X`%w;z7N~Btum1?p}l&!xgTaL?raog%8^j7C3X&*fk>Z;y@z880m z`>GG1@4(s3Q1ub?o1jZ#B^stPzMS1!uoH8hx#pIBPM9-2<7?znPW^zMef;kQs&fKD`%c>&dRC19db)= zubg??PiWKmfxR47)1h)S&U3y6$0GS+p#g zhTjua+3hTEB+u>q?rhG)ge&KvsefNGxBRR=my&#6A#YJ?(<{lpA$8QlcFU~e(gX< z{=6l+B2T$4`A>`7%k;j;Gnqas@*vZPBF|;|yvUDd`V%6LGF@sbn(eg=R_BaithHOM zJ3WG2>Zt|~eUWBV6JOE}vmy^%7we(ObD2Ib@+i|Km1wrl%K6X7&WRp7 zSIaS->Rnx^WM5e9SN%Cy=u91{F8g#8QXi_hb+lXO^%!GS zS4j^<=W$>40WIKvsAQB8aiL5@?*WvqL6KvF`dZPjL_XCowQRrimg=hBgDy_stFL50 zqGeMu0&&kuBte!=HQ6P~c5B!csCup5(2~7jC4p5}Ne@JOwXgahvluEFWkhmUreWS{ zi=u4H+*Wh0-qf=0}!pxQ1ww}A!SmgA?ws&qOyH*OKG7E90OvAj@8kFtRpe%8N!nXPqO4s|9=iFC)09`mNhDt^x^rTD- zGCS2|muT6xomOw7EGyoYy!G9Om8wrbzXPdOsV@7d|7s;ig6xOIQL3*A4{KFFDNAv( zk`BldNYPb&GxSHGZ&Ceh=+8kvNA>feYnd)k{SxR>R#;rBMD|?CwyJ(*q_|4;tFsh6 zC9|xlyX+}Te1|lDv?S=8kIMa zSncqV$J+BP8B=CK|%1@F=APoNtkoQx$4rVL+hIP4( zk-OVYX$l+5(<pg>(7fX zZDh2M0W?(J{;+H^jDjXZ{>DyZ&0uws%05=}QO>au72$*P|NUCVT?>QiAqt@;(vS*9zM$et;#QoZ+% zA9?$#Z_iR(qvWngakuIN=xD)esQS0F6!$5SJ@dF>2+Z)gR0}JfuYS zQSOJ8$eunPQC;?IiAPnJJayqA z*i)*@K0JO`iR^=XPl+@>nD&v%vLllKt=OP?w%1^#)IM+XTrjtq{z_>}dFZHXcw07(d6**VeZwtnE#`9rC)DjTPP6-ww(W0ma~%GYW+`; z_uy;rp8FcA{y22?^MvaApfmUVN<_(+YO*6eh9$@?y#zTc*_}{Gt0isZv7ulmCTx#9 zm$S;2pw;`R{hIf^wrf?FJzMr@)xQi~?2ux;l2bss&^xMcfv&YVTlEW|YYC@R-v(XV z^D@O-q9p6#zzvW^5#GAEUEGMlav*~^nC zSe&Z*>Cjg}KSTA+nU5_>rZOMXN_v@1U&)S)>{N1Vmg+VoyE2>IO7>(ndzCz#**v0T zl-Wq7m1(Gb&1beb)w(UpQj7}emq__$MP7okhb5J(;8pwRGt}!bt~-Y=X}SE1&wufj zk`roLeWc_0qij4YSp#x3`e?1{r)L&tD3Lu!^O>s4KE}maN@P!q&8o{@Es*aPB~w|N zX(hdk^p)($$WA3UfM}cEsQRgUn|bv{qYR9H-_eqrY0D@rcP(p;=$Tco*6^4N&yh!sZ(=h6|kg{h!Ut4YSMdh`4OL50>oR`(-QO?A&P%9rT zhqf%|R4Qr7=a>>zpB(t#P7v=t2t_>MlLJ3oi2lt&^luFvZBOqd*X>0TaBQE+aUIGi$0VcMrNg6J0aeXTigg` zCMUB{Zq3PUP<9zXX?H`s({y;f3*x|Zk)%(CP-L5uKW`WR{xUjz^1THq-$E*}oQ0np_>r3$G%eq^Wtm>ESd4X>m(P!5 z`i-kEMFSN!~TSz4zHf}w~vDS3cktER~T}$6Sh;(rD%?dZ*BPH&@%Vxt$ z2gcBd4JwgQLOi#U&4$&|T8|#gLF^Ab+`?3ZC~Xc8i(nyH(Mw=cmQR!i1E@IIa^}iqZw+=12Y5#rkv)2;j`?e*+GN^J> zk)yY25&yE(#=QPuJx4r#CQr+R*M%RpDj?vG3qN860Y8WKs1f{JU8KVkY1t6)gEe?6 zEgOQUF@LEJofRp~EcWT+h=JTXjf;p%ACeEG*8YS1b?P6ZsMDp`O3Gp>%AUoVuVB}6 z^v|i(X`6MqeEtLfi}N8?#d4QRlI0ll%1W2#W->o!)QE`Q<;X|C@wCiL5roxpV|a0b z{*Ew$2fQ2+c)BYa0**ueTmS<9beh@VmjhzVtuclm@>^>R0Y4CVv=IdSRNXN~5b(27 z>x>`>?~}&xO9cFE7=MNU0Y7E8-fR%C4K^4-!1^9*1Oe;IA2C1>xotEn1pWzMBY3DC zR>vDd5DaI;vc>5##wAa<>?BM-tAuwCWJ3@sPd0|%$YNPLMi7Km*BAn})~QAia78%H z2mop1;fp0*;rL zjUZqf^o;bC$PV-StHuy$so?8t#t=kF@z#QD2*M8UF35&}^NT+ygMcl1o!KDZyxC!7 zrxMwr6#PL91Z;=v%?bg>?F~i{L z9wP`M$Gyf7u%r(fdC09$hKG$Ih?I{QdsLbB&|^lhV1|{U*t4{uo4~QTfC@nF3%GyQ zE01XN;h*}d+xn-+>QuC1er?=8ytFtk<>OWPxS1V)!g+g}ww2F6jT0_JX!qhD*r{9l z$J^>uG>pR>ikv=un@6ONN!F=o#n$%E%Pp`*j?8kEL~<=&ZFXyv$PPZ&8nfe+jusxJ z>(=9NTQ%6Vl5{dk{W^Wdi>%K>vNh;Kl3+l>7G;~JCxulWBZ(;r2CCMtxS9N86)FYiPlkve9S@Yxo(AS z!f$guD9?NU{9#@Yoo&T3|9;N<^2+NUq+DFh#j4mMayk0+ZA0Dt(s`Tb)Eki*tQKz;n6B%?d%Z9WLNyvsFyTL2V7wy6ra`Td&H;^_y!qLkTNc~OLjhfgPPztSvzkX088j3@wEi&@-6-F@Qcj@P9f+FPoh2)2RRSz`t=*^k{D6JS$g3Yb}bcS+*`u z8*!I>;K(JLU0hC@(s71rbWOn#KsIkjEdR32)ak6LF>-Z>>5nxD{{XpEi0U&u%xSv#JLGd#dDK&YNf{z_NJXZXs$ea=%|hCkgjXKmU3O9 zzIbL}M|~Y=wW|_s`EBOAr}=5BzL6bDWQT#cq^pu|Xi8oAZ!uq(rabE3Zp4o9BEvh6 z@&mQfD~X|5wO!3<&tq7~_OPZp+-n&2o zuAkDuGH4smTqY|0I1!&cNfdjiZ5+F|aUT#98@#u}Q7T%;Q|YI9xE2V*aFvap_u`5m zVBlOrjGCe8vX9bfZ35>4KiQR|kjH;AO+W1vwzSo*`tMWiwVYfq2$^pg_1KxDtpX|aqTv)Y~x1$xS8Jg z7#c3uWRsUF@e}T=O_TkR&R61RX>h~YHeAffCjYtsd#-E(a5ABMJvh%M1mLnxx%%Oi zoq!kvnr~`JoCd1>nef9iK><8k%Iopq(`F@mT-eDrQC$em6;i+z&b6FZnkM@joU5N3 zgU>iW8h&_QBMc{#vdK{Z{5I2MkAt*w&6me%0daFi{qSr^c#L7KZyEWY>KX{B;EoU0D zd)$w<6|ZK5#TXga_T&0f=S*au3**PnIG^Ljmd?36n~=Ezdplxl8 zHBiS*S_3y)HtfGmk!h?^+J0$`+UoY&Pus%&GUwW_e1Aw-^sD+w{Td17{iZQ9{BUQ- zxL(lJHS*7e@vF_@j-+w*tB*2vh7`&ABXtMvA=+lE>lvY^Q*9eV=S2*sxaj6>I$}7< zH3qGb4mI1u#@gbV(0NeNG-!!*Sh+K7Y^2^5`XD6vcU(y`4E^Ddtp6Vgod*%oEloO% za4FCjjEhLp5Uk`47^-;tZRHdL%c9^**XNB#Aqu5k=G+?ijW zrQuiGW86xk$E;L7ynLu>u#>Zz>rK!16V+P$yhKV9ksgzxAo25E)v~aI6b*d4U$v5Pi-3{r|W}4a=IZXB&X>H3M8j|%~}W~ z`BWOtv#WG;faJD3MsyG^ueQsNz*k+e5klIDL`rEzbsqn7s>zW^ycAN*wD1nfx4?dR zb#06NGOf??l0vq12>F?~NwN+?ek!s{Hf44@;B%U+hmbYwlg$`Igjmj!4iM7gknBFQ z)Y9Kirs0Z8Yx)4$Lz&&fWEw87u0kGZ6#`Ji8lMT8Z6!ZOSmso@g=!+2$xs4pstf->k%@)4P+b5?rDs^O=Kq{WDlJ} z)%4A^lxWb_GJto-4_2HKzT18`&;|%wsp1hRgMEExFuIdIv(b%$;O+A>_(%H`#re z-Th>H5Hgp&WE#@ngJc>mt19%;Lu4AVmmUUNp?e!QD^(U~F_qTs5vH6&$PahUlRb%$ z-ku^80*PgzCIO{1hwJvN&jR~4KP#$zoRM`uZT8Eno0e$r$FI8owsN-BYZ-c;t90Gd z|IgmNcGZ&AdA?t{Hz_D6C@55cf`WpAf`WpALJA5B3JMAeRbYV$3R_U90)><}a~^fS zfqvZgs_Of#s_*CdIpe&B6Z7}`&RA>B9aEt?yGQpJH3pggSfBNed5ak{VqIY8T3Y{& z?B@Jj&HSURuZ>);MK9xAd~J_h4O|f`^0flI=F}X&W~)CV@S>(`xBiMivBQV^i~o`L zk+5C-=#LBdA7QTPZwnNrKPSLQ>8}YCHXiah8zI#APO#GuDenxsY{gRoPIk|q-@35QmbM36({XI2bXH&&ERF6-5r7}?LQT)6SVmXsvpf9buvb11t zhDa~pgS9r~wPEkIsrL6_?G1SySZ9cgW*7G9hP=;UlzPciP1)C3%Iu@|EY#ObvW6L2@-U{}O5P3cFO>8wp=E54L z$O`){?E4LQ+nC~u+Ikq59qb1Uc|XKKe({ z%BioPPtAXa`>Chp*Wc@ST7G@KeOi7wZ(i%!i`oJAoKGvMeuey>lV86FPRlQvUfI&; zwkSUq@7`>A?$NKFjk&WU*G^W=*N$;MKR2eiJ$}zTt$nm8u=sf+M9O%9y|k&PE!dkO zzNmdBytaK0)^5|gMjhDuL!`V9V4XIV*M)sBMAqgHVcj7zl0BFr*Rc;{iZ5z!g*o;S ztT)7Xw~zJP)V=}iqqbLJ-;ZH~HobQ-gpGzsTgI?Yhsf)r&tQtQZyZxB=k5gh`4AbI zFJRLlmiN{(=$9KZzkVzTv#^MA7SSqN`21hJGu=@^!$s z(eF4{Bl%ry)0v+NtLGN>J?H5ikndyLA-=4gg}QgJU7J?$J?uvz(wiS+`!>C2eSjT? zNDq&&W9N;8wwz!;4UrLh8#@h=JJ&Pp+@`i%V6SXy^DnSVo9<$-ut!@cw5YiVI9s&x zHGfgl{HuMec&7N743XR^Y%xTx9ZOgt4VgSD0$cUf^=bLscf3{(EvXH<=++RiHtfAN zy|ev3?1K$?AHuprdiFT4#ECBJ1U_s<{bX4}*oyk8Qo~l% z(Ne=!)Ui^-R@6_I8n&W-rqr+%wf>EOuoboby@0S4^|NIOVJqtAN)204>)$5`TT$!Z zDhOLqKVOy*w$NfLJbEO?)wXzu9GB08Gy8-`=cN`K#W{Py<06#LXeFq9!PFTdb#`IB zAu@;hFh%nI08`|w{6nliMDhl(kA}##@MGAZO?P}l*kXw6yM%2!PuH#;Op#UY2bdzO z>klzS+P8}-awhI!KMIk0e~kT6h~)h-rbyl)rpRXiN7!YEwB-tWwCM^{Jd3gwk8W6D zo1dw_YtiiWcQKp2zD71Xt$wZi`nw#J`8B@U)Dj|PyotRhL}p1Vrbu2J*6zG-g)2x0 zrbt`gk14Y62QWq2*oi4}WV*2K5ZSi}>$PbO@5A~-q|F1^p!0NA3}K4AlKVI|){ysU zOp&&H1{-h4o4_VRtzqlV(>o^{*nUIa z0e0v-)q8{;+w`9G3HH+v8Rxe#MaJM1yJ*OJg(-5(e}P>$Z|8dPLHpo+Bc9ZZp<{##6uyhlutbGaxMWsBU`{6+1Yd!wi2Gg7aWlPkY|ra!Ix z#(l27gduO6P9|NQpsJ?jY6*Sx3pxB3X@j%4|I=gB>0&NY0! zJ$#9j@vqf?5h!d${Zg^*pRg5mw$!i{b*|K~74^%dhOMYyDK%_Goi8t%k}s^>449=7VfQhL~``!`AtTXp|t z>0ztxtEGpny04WUwqmcoRchFZ`t4G~R@8OtV~AL>g|b!FSMiLlW))r#=So_Z?+Q1H z1pkDs*qZN@8n&W-x74r|b+gp46?LoBuod-trG~Aj-!C<6an-DCmm0QWF5j%}3=!+X z21DeP=nyvPypUX6Gp5kR5ILKdutJ<0N3z-L=YF%-*T!b2ZIoJsvixF$BhtJ_`5r~Z zKGkiiUn!bP%C#xihg@6hucw>KZ=8qeGu17vufWau&u!83YkqDGxv|TSk>1OxIA-zM z+uUQysr{hXqxcyN5gWoLZMu)0!WKj1eTOA%(|H>4E$q;yx{t8ShP*56F~s`VpoKYC zb@QkQY}N04()@VTo1IVGUMr_Qmd*M3_Thww>osak1Toygh8+d3sHCfc;5B z-Z7@g5jw$s8Y1WI+t{g1-$p*e&O@Yk7ucoqRPPn0NZv0oMON5fVb|VwF^tO%c57p_ z?$F|4*s33~X0LxH*6jKGIJ46HxE?lp{WHL3&y`?OoVlh~;aIA#~E2dKZ5RJG5!GA7PgvGJ03oqx0gCL5n=+ zh8>Fe!{Z{9&&1CdoA;<+kR^PW~iZY;{S>JQBMXzqmrN)204|JeE%V&h#MUZ|gm^CR`Jo9AZwO!XejgxaC&?F{i{?X%%Mr!K4zYb+sk z>Z~2PjN<=cEB5ForG~Aje^P4LiW=U__fOc08s5|QPuPn3(^A7$)VE6wTTxF-4O>yq ztdk*PQ`lmNjLj0ZY18+6x3JR?+4l^4be^tb#j_||vF@K0kMI8={NM7R?MEcAelbsv z`-kdz1KJ)$oHwLL*9}=W+P-bdy3?cgF4fC=pSC;o{};7CEo$u2_GcS%KBw(T#Pv<- z(GME3eyHu;rmQ_Z`cXsHkG1Xp$GN>PJ8sB2(e~SjYdqB>|KH$lo2o>la^5g*0ql`lSu(Y3@!F}|qn_-Hnjo68NK z7{@(h)MyoduOvQ>G4J7Ajaf1JJ%IQq#_D$DOAeov$9-e0E+ek#F)PMgcDSR9IWgvP z!(BwoiIJ<(Tbkkezt7+nZNG_pwW#Gi+HOU{Yn(Q1x9k6|vqRhOCnwbR0d038p`0#l ze-H^P!-urpjf6FzN87zf(bmHH^ym+;a5wsg+U`ffegoS6C=%|*Kc?-$hMXa7f4m{* z6WSg|!f)h^X#0~5IiJ$@s{Zf3u4(&QkL>q6VF$O(J>Lfe-} z=*5+`@AZH0^`Px{$O&WiTWvog;mj>YNso&7&H8#39~E)cT5J{BwYBi*&8>Rod$iq( zIIB&M-rJD%K5e%*Wp(J$`}Kdn8~p)ocOp9K+8);b-KP<4f0CRqk3XgDaU_hygtn*k zfA2M;?OFZbtIV9X-)YGCt+pTaf3I^zZ}h1Dd-eVfX#1o3zgzt=Z4V+IfgwHmc$0lX zk3OmYyH%gk_GnYqm>zw;A?pj;o+c~Ivl(p{H8o_#M=|=hnhfg8GqgcA%zlddrd#muQ zdlc@e!Xy9G%lLgY{_mFme){2A`~efQ0+t@aP?)+x%M|Jrc_`j>qRs+2LC}p^QtSv#)q`O?1gO zJh~;iZFf8>0$a|mKdx`RsD;l{>yPVO@9sW+gm*&q|NryT6Gf&N9N7S$`Tqk%F%Ab|L5=gJ@)y3|IXj@6J_527bW`dnbD2q{`bFI zJSt22zyB^}Ke42z9Ho~{Wwn%*w|a~D(pGv`Q~n1_A8pDXD}B5vf1-4@xZn9~>7Q%L z=cpIP7VqlTkN>puDQBiE=ZmqNB8JuROXV}O@fjV5xzfX}d-3z4b{z5-N@uoEL;V~J zFBXa)j{8cP&lY!P;VW4FVXHiv;Y(QlS#{u3!?n`ay+sWhrEkXk@G7O@ufUcG>`_1d z`5B+z=Wm~h$EO&H*GBaJsL}cRtQ&tnu2Qvsfc%3}{vq-YOZi90KPu%PBmcORe}epz zQvNCOPfPi8dVKms0*K@?T5&Z^(Zu<-a5Uy_9kyXJ&cT%>P@fUJ>5yaq+RKD)n!liHma_ zo%+QtZ1ESc;$O*B^N=zNlS?yRuJWiX4|uVT$x+6jLl~8ABCI{WPk`n12RSq@Hn1kzP+= zin<34e~!>0lxr`~Y_X?)SS@#W0@kQ;2q2_O5ie)XUs3Ie|hAEbr-$E5%)ZQ1qJ@jo%k$$gZ zip;bPOp$hf2U9F-`7Wwh>L#kl>z^%5k=ge>Op$uNk14Y6Hm1m0vx6y?HU9urq{JU$ zihM787gH?v-a{3s`$w1}$MwgUBFAtaQ)C7@lXUZN_Jfm;LSGe9ssqlg_z0mgvEB45h6n|499Y6hj%!+ct zcTTFt`>Pq(Jx4`3`5tH{K5LI$oAPz!dR=`?f7g-AwKmtL+;PZ_U#^_+-M^~ipucML zu8dyp$W^!Wcg_1;Nx8no-v>_TWOdD4y(;>gE5G_2iLcCF6eWe36C!J13)X7WF>J%y z8}d4^PFpCYI7(e;cSB|m)@#%G--q?v)XD)&k?YGxvB8GCA#B)o9O@mxMr~T(#;|dl zX3GRNX;ZyZm?H1Be;!kO>A%SI1#CJ*@@BBv5Luz;uz8z~%mTJ(Q~Q>%Wt;9JSFlx^ zR;D#<-KPF-V4F4_r7djRroQc9yEd)wd)U5Bh1r^d&Tts$2818r!#RjX+S)@jq< z&gjCrZ948fSg(zC^`ZS%)jfcH)TSPP3>&nmw?o*lO|^_*qc)wXW7xP&{hq)kZQ-{z zYE#&>O=sr}HXCAj&7VW(ovHI_0b8_rb;p)%>fH*qYE!G%uuYqKyoGJs)ao7Vup#dV zJ8sB3!A?VbS(^#}M(Y`N?mUg)1$JrEXkB5~Hm}dvtxfCM9rkM*$MZMneUm<*k4+kO zDgN`1pV0_acw8yd{E%Aotzr+2YlY|c$UpNcQ-|h%MIG@qTH4xp?xvpWb*>NbTu;l% zkO;$ z<&KvjmTPMZ+G?a5ISttIX{Ap zHf4^X<4rn&PFhv_6gF*B?K9Y{?dW~Q`86TSwr-<` z8|bE0C2nEcO_@9BZj`hA66+jKtNV7E4v zc!%BFbPxG}J=%1YE2=`-s^4X$9?!VcD0m9?zfDH{rpWsypT!jYo5{7$VT!zKJc%jtS&BJW#$4^!mW zeIHXKZyQr2ZwK2Ak@wj4uzj1_e1IL=)VCw-*rv1U1Ut3q2%ll+Hb(FQy|ik6USZcZ z)pCQ~+SvOJy|?N-e83)U@k~IA9UF3aRD{yw-xhglzK&5vIq}R)%gN;zMX)NQd*q+V zl@(X8v?LveXS6lGmz$Oo*R|B+wJY^pz42O<=0A7ra`ooMCqJUOlHv-VwluD%smE(e z>iL>={#P8E{2uvda&tajY13Badi{IGulAmz3857s@@ZiU)@oBr+OT$;@8q#gn`-L9 zx^48Y2kmXrKD56{2hc&Qj=~T&Y*ULyuu+@FWegj)>Aq?Lo3yEwQ`odkGh+suwW;1Y zY~Dt17SKhj=Fbwg+?2V3u3DGF>ad2b+jQJEuuYq<57@R%?cTw5ZEE)(wr^8;2iT!a zEj+@GZEDL2c50)4XXtr|<$FdK=%sU2_Z4<+)0o|0w>Gu=4!gIh?g#9#A+M+pWvhN~ z-|T#H@#OsSRcgf^@%(SDfh%oAenG7A=^k;-OFh3wT$9p0G-?%f$JO?!`MJKu)gmn? z-_r9;pYwa~rmfA5Uar@j_xf$mBeH-HV=)XE|3<2H@hCoo06H8PAT z@-37RY}EUz)nnMWO?6CQlQy+w3Y%`oo55yn^mq=Pw`vR*u*Ig#C3M-U_N-uvtQOzE zR-LCluVL#p?Yn_(Hsoz#-?M4veIMIy$lJkoZ5oF?Y~QAR53s|Ayd&(`ruLm+r#9_- zhMn8Au3uo6Hud8QyS8c8-e9*jweJqQw=w*7J0a<&5WA`uvh|W0x-}_e}jA z@3a?jeNH_$9?$Pxt{1r)axJ27HGVPjWr#0o?}Ve!g0 zwe+C9R+ZR?_1km~4`72f^>qjvwrPfrV52teJBE$hsCfdN46(eYoI|uvC z&5k4N*rxJMuv6Rj!>0&m*tw0~T%ea$m3W0++q4?oV7E54<_^2J>3BV0k2cMTqAHXv z?j|Zc&i6E5^;P7@d$}}Uqfn8rHdc6iUn4Ci*M7~9igI%8EK*qs(;DKLoO-V2cwI~L zb1jN%d77UaiCn$8BNJakq~*s?AyUtk|NN25^*A>t^2b24rS{$;A>@R}d&VtTt4;5s zwPEcxy^`s`I&JDp7xqD$#_vOzB6qCam?GaI>cM)wuiDp#_1n~z0c_BwdWW!Ko9Z3G zMr}U{b8!qCw=p^s=%iJ@buooa+f?EVHfz&tn#1O8x=UHW7HwMDmat`;TD^j;+Gx!h zx@$cS?cT%on=%j3L#x_&gdN*7iYM4lZF(pFZS2&h`E!O{+SJA??Ak^fZ_rz-X5}5G zSiW2EYgCcn?f4CL@4YGW0e!T_`#rQsva3}*DnjXTjY#v01XiK+nfU&2>Tz{ST}Ps# z=D4b)`5OC*e9goP&y}zFQ<1OZUE#U*=SD79Z+yQZ?N_e+xCW*9MH4eeAXjtsh?e&} z6@AY2EjQM={9KE2V;!%dX`kb}6{+XugvPY?zM^Mgv_j-uX~7iBv+7M$k$d>}V2Zq& zZp9SK@oPidL*%#cIP1ox=Y`!6H0b8`Gyd`YeM$IdzBA=Rm1N){k)$Ubn z-NxP<=%!V@-omzRI(v4oU7Oa`J#62mBXfWq+Enuq_9r%t!!f4F@4=m5r_NJ(XP6>$ z=VzEA?-u_YQ{=Y?&M`&aZN9)RL*)8?gG*@1RibzSVjx@~G#57ukbk?zC#ZS-sa9cI9W({4pYVQqfvng{6-EPtybl0kT+dXW*Df0kTWDWcy?9iDS?<4Hkrd93)JGJSm zeTJRewC@FW*^qaIUE5UN4R&kOe7?i(ZH&(Ys>soL2YU>W6~5R)*`kLPt}(7~9nA`l zt7=+)uAI2$rTMw?c0$KS0@J+3>c7fojcdpDkmD{fj=uC=*d=SC^6VQKlfdgGNL z&5!r(sppPbuHNUiKbM~?Ki99^_~iPfSybyN4t6-+A#%6Yf+=#Qyoo9Dj>>y5MeA_0<-- z?Oa_acCcNW%G|^DZL0eKJ8Z~1!j5g~_X&1tqdjNnxmC0F0=u+n23}#;Huk?IX z?y!5CX2t{dXj5N`B2c!NZxtTT;WR&`I2&Njjt=xw*Jn!R}25PLZ~am_zn-&YNI7>XnT`(pq*CrrVHzC%IraVo3sz@ zw`!CIutA$<;}E9Ear`)@$T9f@Htc;>-Uv2o(_9+E#%&s-32f4)eW$Q#oBB6{&Dt2B zIdtBtqqKl6+O+yDVaqnPW(8ZdsmE*Bx=l52V4F6Tw}ovtOLbQiv-8SvpgZ0{U7uSdN+jPtZutA%~a|j!@sk{+v z)TVvMu*rtJDQw!N_RV0kHr=PpVT(4Ew}dU*)aDgz)uy(rVe2*>(G6_Vrm@<>wrw1h z9dzHS8G3*n+SKYJOp&AX6HJj+`cE)LehcUrQ{Q<|UeS^k;$+qF+GD>q8{I&ypD`kfoU zTz*{1(>}!e;M8;F=X;=$T|> za39v+kT-x0+NgO59d5`R!A5PGRb$w=?I+=kn7}4&I^U+SS({oohkZFjX5&||dFQEj z3)rGf^)6w{A(pGg3cBh{)v|`I+w@t<2DWL_3crPI+tlhEY~QAu53oa!>r+>m#I zo!V5#8Fp^de7?XgZJHrh*tLyga)aJl)tWo(-lm!QfIZscr$cB_m_5$k)Z_Y?I;~*; zB9tY?zj2Z75#JF_Jy&x)FVlRDT}8bGu>z-ic)CYiQ&Z37YxJMhCe4(JJ#r=G z@^y|?loPL0X%FJ6nR>3?+(_h(W`3-5CFPEPuBEx2sEm&)a<$Y8e+HTdjcVL|%mg`p++U-o8xjk5~O>OGK`fVJ60d&x+dWNu3n?`I5 z8@H*%32fS?BQ%4}+I(+}&D&JR0=8(=Xf9#P4S6frYKUc@*U)umYVQr~J2ut)T}+X` z0=0=L^4*LrOp*KG?_r9(Gx2>)kyqZ^m?HPpJD4KhEByiX!w}hb7gH>c{T`~wcS3%I zDKc|@j46`0k13LOfE|WNYmTsEo6ge{?A)f~bb(#kG}2etwM`>^gWcM+?;Un;(~A6n zJ=&OsMZnprf6keDTw7CDjTPm@D_NQ!*MZb?<-~O$&Cive%a8ZGX*qGFOg*k+spr}m zuZL;=GFQFS@(g^&Nat#qBm~=WEutw=0fLZeD0KYW(AAFGGy)%VVuJ9mO`Ry&$GV; zbz$8Nc|BOKO+D+w`fWM_1K6NVBQt~z+tij3Y_uV73>&xU9G}1@Z8~44uxXpxGK0-F zo!T@T&aiWvM&Saxw5ios*tJb_`v$wUsk}Sv-ln7UfIZsk^A<0_!#DnjY1 zt-^Epssu~Aca&95?L$Qkp$#GO z&Gi5(^aPf>$HVZip(yw+p2rC9<0}<68o@zo6e2_Y|y5oGK3A=)SD4( z)TW+{VdEikpE`j}I#2aZVbeC1H-pXEG@s|Nc^kc3Ko^^I30-c|6?E0A^L!0kx4jca zYy;c0od?^(wrx7LJJ_yGcRPF7zD+$mzz%I1og?hnrt(g((}uh=?A)f~e1YBCRL325 zZ__9~V2=%X#jv4l@mi?D<2sn;$N8K3bMxb!QgbJ(m+cb_nSg%cIb05}kQ=0~`L7T3eL)fTIb&O%-Hq|kKP1^JdbqbrdX%@_2vo@7C zhb`JP(o5K~jUKO{t5&so4O?%@+(0**bPL_K>b`IX+qJ3Jd)U5BJv_h;ZQAz;JGRlv z6ZEH6_2+F&k$(a46jS8;C}-Gth;P(BAASS>0=o>6*S1&KwN0Nz-e9*jtuuGny-mG) zz#eV1x(GO1d`4U0@g6D7kLP*n@f=A#p5>{>b1ij^c}08T8I|Tgw>=u2it;r}D_mz% zg~#ho+Me7vp?C**V0_Q`IhF6O|ItnY5P-qoEy7bz4?~v z`d;fP5{jQULgbF-1*XV(`4Us)`@1bztM^q8+pu<cTgZ0{Up7&w> zHhMFF4mRl!I&4*YMli+lKIoIEBE9|;HtM~pX$&2=sy`Fhq)l^e3Y)d5?m2AUMu`jP zVngN*&smGN#^?2``IwMul(!a?wIu_3=E7z{vc*NBy?ZqH{@SOxq{dg2&Cle|l-!Kb z+^c=KXhLX3i2Tc~Em*5f_d;!0yNz~tpq*Bg*oAdBW%i)G4VisdzfEiG05)jTI1gdN zHqFoxY}BScj$z|AjrjyNY16(_*tAWn=?u1L(^<2GE!#AAR$ z;yW#Aems{_&$TpH{#%*$vfpyx{t}d+G7D_H^=|Ov~>RBJwZ_|7pzy@vXJ%kQ7=?FS%)qEYp z#%+4naRQsPX_Th0X`5!^3^r@i^?44Pw`ry=V2d`jdkI^%(e4#=)vB7;uyvb`{RXye z(|GS-yEgT158Jm<%K>_5)k<}Q9osa6Pq0&)`f`Sy+tlX^?9!&Oxx%h(I{G)*ZA0E2 zc5kDF59p&co=<3zWLHf*DnjY!tY~R|TrpGEI9HTYP^P5Z9y+!aCB=7Y)0*SE+|B;7 zwwbB-RmOE}D(a0ZT66hab1U+5?az-yZjW4x;#&077RBpmnxCsT*W-K-a*6(^It_$fNaRp1A_EgjnuRBlQBd$G9-y>gp{NCi# z%hC~etsnJwGSZT&Tbs|1D^^-gz7M%$5w8wuNv~MDo4x)omo$66rMdE}dt84-&|E&> zH+gMD>)*^w^K<1NSN5y^e#=wK$&YmP$nh`J(}PE%`&&HVaeb@)H$2i7<<1_>xmur# zco|}OZnmJURvnWztlg$-X$RJ6Q;A(zw@ve?2kW(I-#)D0rZaW`8?QN>cC^VG&0?AE68?y!5C+Wmk%+Twe{XimGP}_3hRhzU*QUFOKCIuS zm3RRAXoy@%KNhy%(Enp=Ug*(FEWB^fqU|@4Fk|1N?Nd|)5h(Whh?^6uX(qWs|y)PQ@sb6B6lKxgemf><&QB%KHWLQ6#3TI5q2CR`<`H@Hr+p-Vdu72 zVeBukOPkK`E9_S`9gk~Fk-N4V?ACc4%{%nosuCZtM_YVdjut!Gbp&`+gwi#~Dm<4T z*XFc*9i@tL;;NSB>u6Qv$9Lh={J7?%9>3?4dQo&Z1{F2rYL1_5q$TN$t0+guxWeNq zo0gLsA*}`#zl)UVj~sjzn$_<>tzBM=m#4sz)f_&Y~|3W7pU-o~iwz@kNMn{ja@575TeYEm*5F zb!^+PcAMs32i9#<&wH?5n`V3;_6Ii2#XrRQZOftU1K6NVbAJdMw$YanbkwT7$FOmm z_MX5dZR*JsHf_@koxx^p+IJ3{x9K=7V2d`*jU{Z^rsKAPt=hEeu3_so)vdJdbn>EC2p zz!q(^X9-IN!QSItLFU%wrSHyZeiOtwQ>jBwP|$suzedXIzSJb^awq+>Z*K# zo!V5-8Fp@?%nS6=s#acM*EU_@ZZJh&SNth<>pZ=abBEpAba(%NJ=)^ggBA_3(;^-h zp?oIJ?sSh_N%8DS^K<2Bd@AbIv8eD|e!L@3>wRu}a`o!yRJ14Fho<%B+L;@N+<3FW5I|jL9mK&p@rM#P%*6=%eUAaf&wYjpa z+CWiR7?}{`zlx2u+Eiy7)@}=X6nD}cXs1>E>B72gnm0X|BCjnzjP-`dSodN5A(A(M z4cc_9hOps=yb)~FreiUNjoY;E1g6L;^I1%hdOwFLk~fJdk~f7-hse7yGuW(6YxNv9 zZ&Ujgutl5h9hb0WoAzD76uGPV2Bt{+zKN}d$e6BSio6f{Ellx6O;@OIV~XXxSw|K5 z%z6Xc43V0*ux*=Ky@UP0rXK$g+qLN(`#tQ?rdf1^9osYqPq0&)-cvZk&TXOF;aw*5 zvPrMdYpd$H!ESAut#_DW`3m;esA8$VK^6JSKKGbnnfZV|hFEH`jkEQ;o{67tqDMgDmv zzxudSPVJ*bNyX305V01l)uz{fZP@#4IMb_R9tkZd_y9?{Kh1!ahs0Zz}s>D95 z-==o}2CzY!MsWxmxB2RYP1YY*GE=`Q{NJG8O)5qfM@-6z;-Q|1|Z-jI2LUD`Bnudr*I zj>-*oYts?9!|rWb(;l#*an?A4Q;&DjsmC)X^>`+y&L~h{5z3l15)~fLwX~#Mi;5yR ztI|DkHRSrBQLAWCu5Y=P=3A7jAzp9N9^^~P^&!{iTp!{}o7S9bX>~a-YvHrg@E%%P zPIZ3$8^URRzQ?&1<&HvbB&ebGv0@`^hZz5EGuCP&vkh&xsz)7Ix9wP~CDvop5&AIp zkr25a^lM3n#Ein?`5~o3^Qz8En?3 zwRR4hx2bmv*s4wCtzqjS(&G(m(|NRT3*EMA?;UK{rrEiN?c3P<06ny--ACB5O?^JW zPHkG}&#<4_DDmg$xm9~#VAnRa@dmqX$h*VtZIt+cK3d~d9xamWaR#SODdZKQ+#{Z~ z=^pWK45pqhDc*gjduV1=)Ew_1)BIeE;yU%z{CEeM=ErxqQ_tn+>eUgf=vRJ(a(ifg zRFsq(iF^&Yw&vzVTvOAr$mQo+nr~5Vk6cT0eU9HFgcA25q|U8^VTdp-08F za0DH->bx1l#%(%Y6WFAUy{FJ=tLmP?W^Jl_4pZbe>%NRBvI2hvQ{?lXc}$V-GcI6@ zAu?V|*s@LM!wR-))9acwY~4mrHqcG0@3XOOn|il{?b_IT58ZFbJirc{GLO(>t6sUD zV5c_SL7rjfHqG1%?AE5)e}~=MXwL)s*rdgiI9v5s=FMJzMcVB3-+@nEBU@2^T({Hw zc!s7P*M`*NT9SJF1UL1#GNhg>C)b|%j(J*6yvt8LUOQ8N#l3&(xpqEx+;aWW%2aV& zbXHb)b^FVADqq{xi+lbrlZ(_eZZ#IP@R|}{qDlLou|I_V7)foH}zrtHhphx02{Pv-yv++ zrkOB;joNhfjA7$8t(z0rq%HKlxK>P|(^mC(2Aj2MyymcZo96fewrHcoB~+1bKE8#0 z-I>~Z8B-*01zT;%Tf^3EYRv|w$jbH|Op)u%cd^ZeeYdb}o5pYl+qJ2Ed)U5>-W{Na zR{!N6>}{LYyHiY&7M@|3&QnjWuxp!+@(p%tQw#5~dz)JLfIZscd`F80+i5wEi%>qJ zQYt*2gK0_eOiMkkFsT*8EJl0#uAfuGi0P zQ@pOFHESNcR&V`!-JDQuzs8N9l!={di^tm4cm0B8No(vI^)K$ahuAUz$R^>m*IMWPB-ZcI@_dk=)6@| zp#^NwrYq+Xwrtbtvx2SKbUfFvb=!Gp&jz+>(`avD+csLhgYJgN*|mr5J5&8Wzz%Jy z`3O6<=??M)J8j52!_IBge1TqCH4azUbyMaIdTUkPci6p6^YHI4YJVTr-;_Ck4qCNJ4q?MK9la53)TVQL3>&vChjve3lQy+`3Y)g6 zju~v$M!V<2qfY(bpBHp#dk_gN8PfJ75{|%>wil7miY0AtBH_&4()J+|T7RVNOC-#= zD{U7Iz|{6H(@sVHR?=56MeZ-=F-6|pTEG@V7yS8OikvX-3 zt%k_!u{G?}RyU z9?$;NHRmeI*Zi#TTscK*7>$ZObe>fB^Gnj0y(=Z<>dv)QN3f#i=e8(bIn$#M-+gKJ z`dxgpmovAbMY-ddYiX`$xe+R=%pB+ZGr79s>$S9ZxufvBzP(ZF3ZL!PhKq(3KP@5h ze&w5(B4_-2u-1mWHmu!74?ECKt46R3>u$>IL3^#ba`s{UHjT{yHfYloa0nZ=>3ED_ zlQxah6gF*Bc{A9o&7Xr}^9^|m*rHAKE@8_ytph9Ax=nR#V2Zqh{~b(`wfVc4A~Sju zQzUN-+YYgu;XCNARqvneVf!|<<^Vgi={!5aj%^yj6YSK+5j{iCt*^oizrZeSI?7kr zwM`}7VD~m1lLze4rWO`ep={OPJ5QZfy|zbvJ!sye{;EFs8)f<7J%blKdRb~{O$(1c zN^}X~)2>iLcs(4Vk4(5P43A>;Ctl&44f<80OZXa(-Xg~LOuo+J<)-Wv9<4TJ7rzU- z#^dicWpDB*#+S9p;@j6-Xc3yS!<8tsukQ8FHd45lZ>!dniWcb{tMGhD&#yaIN3PfT zx~q>-?i|g}zFZ%wTbeIFH;c8Z*G7ttguaBxopcNKrcLh`y$5TxX@zUUhHa{61RJ%z z6K3TYHg40t6WF9peVW3iZH({?I&0Oneh!;&%3MGftvYf`*s@LatYE7lmS^o6y6#NX zvw>~e)Wa=o+eRyQ(A^NrGWXE^rrZPc(5f@^2s^f&hjBZ>PHh^uGwj@^K3-s#Hns8! zySDj?gx%XT77y5?jouUiXRH1otC5DlBp;su9|6nzHj+w;>wwp75@TA>eX|S``C)MQgiK-#YXX?$U6Q8 zrdVFBU!X5Tq}&#))u!3dhPB%?XFIS?8+CV~-B$IW2kW(|#6GOw#@++ypjF3w2phKP z^QjR`ksf{$Q{;D%KZPlhH;O5eH-?Re$TzJfut}TN?H1sZD*=IJJ_yGXY?MnZ=*d2=%H16A7RH$nJ1`XS^G~>Mc$`+ z8&l++uTxC1-1`hY50SqDaDiRgXy+ArZPhAxgWcNH_B-s}=6AHPM_XLS(4qo+Tp3c= zHIl3%l=<;2O!MRVnR;9?QqPrBRK&`i?vZ~cS5{mlpI%aKH1c)FRV=MT$AwWV0$VR? z@%P%&{CBVB+-T%l6hGrmTNJNKspop!INFc&*S~{R?|*&E>ref0eakCO{c(LOUmB}a zks4b2exmF60FT1I0UVz7Yv%B8ONK|`-!ij?_pQRe91|YJ=&L~Zmj{Bz=-R?xz787x zrl?DJrzj!(wZHHvjzGSjyi-Pg5!m8&LWLKUIX800BzM;5^7A$1O3KZ)-&0cUQ$<3^ z2{HcbI#{bsckXRiyG^xqV4XI#tPAV5>1^u3dTpAYeOSLutJVNEXrtvr=*L6kYWWFF zk>4*I#uUjL!A3*mPGSrjx2Y!+*knWA6gJzCH;2vJXyF37Xw|B}ge}{21zo{bZS1{< zt~cohx@lD_x3F!S=FSebYtwk|Vf!{6mjmq3rekn~9otmi33h7JzGv8ZL*51U3!7d? zTw;pl-P{#=?M&5jgWcNHyF2XO#^^ktk4;)UiL+HdS5uE?Sn6>VPCc%+smJrK*~@#0 ziWcQ+t}dzmZdh{-!{$Sz zjsyB57)N?iD@^j;w%UAiev7$xAPiu&Ag~!@$ z+P?$qwyCZjtk+f)5N1Lj+Hcj~1K6NVM`s8dwz2mJI%?I5FouoWwD$xyY14hm6gF+6 z#2Iwfs`)*K&D*q2EMSW^y>q>UEjQ$?V5>Hrr)$`{P2Yjoz&34a^%k~m(_PUHwrkVA zd)U5BXVL+7Y*U+0uv44n>KUfUYW_1!v0S--jw*7cJI54xrFel|hR7A{3cI%Xy)x|9 zrulV;-P<@O59p&c&QP>SvTMwERD{x1a)lSfT9lTQt0A7w3P2;eEZQ3-Gx3F!S z_T9mDZPc=d?pt*>A7F=kF0eb4lyYjZ(gb{4?=YOm zY{)ypj&1b$1Ug@jfB-cYBhnt?r7uT96H59_z7-T_RJ_ftQLDYDjo3{x!6;6Zde zL^3C^Nt;G*3Y%`oo55ynYRw!rZwup5jLibNXjO?z*m8)RD=XM)L*5#;Zqu>Zz&33< zj$7EaP2;tL?bX@H#x%d{>-7+;BkG6^Q6M#%8{0z8=<0zOpD_EWm=Nv za7E2=ZA$a=HRRe9SNyc3+)>Eo=WCAl=V=YOKIco)O7gCZhK^iqq9`lW79#IOw_vR{ z&6GB*vmvhw>$a)99_+(59ixw6y*97w*q}}O4q?MK)jNWX+Coc<)oTo$v}#PIuvwem zbH?Uvy6!Gui#FA~gemg=?OWK_Lu5T$#uPaxRy^~wH8XX6YEse8xGtypx%R~O*wg%6J9GWb<>$uvoy-x_icrz7 z+;MsS5!RVs`)sk};+x_BUP+d;T|8_L#_NrauwDFgI#2IwcVXQ&jcX6qYtwy8AJ%VE ztpnJg&Fd~UY|}Y0f{ogW7HHi?$4d>LQB0tpwQ9UShbgjpPGX9Dw{QxZ_P%QO3^r@i zz0({vZ_}Jyz!q&fK1U++p`NweSIZw8e89En3)+ z%cCNc9?zvTKUYq%BWGE6`gwb6z?wBM@h-~cvg z(+n8GhHdOUf{t1>yT-6_+fPE>6WFv(?U})58}jC`d7JvOfGygnc?n&%s*Nj{BKN-E zz!W)yzlkZ9tLiGM$ShmKz8xa}V%9pQ$bI|^2FIibY?UkIyYx)Frl#YUYgJKg<}m+qLPe*~9j2^!orkY|f))kRhj%KW&hr}??^<9nga z`Srg;(Cob5RZ(w2oU`d3nnx9T#PvMQ&zBV6D@pgrjYYnsc&D9~l;7iT^2~GFn;WTo z-MQHjuP15$a{bPY;B#kFuAF!UNZXTZf3C+|0cul4LdXe`_hnnKRvRU>q3u?!N*!3I zO{-ED)@{>~=)rnz8oNHM-==%?0c_BwI)<>1+cb`!z=mxas}XF}rh3P)aT`6EK&P!5 z(HU&krdsB(d7Elkz!pO+@7tHqWoNz$=kE%(YSZ3p*t$(^+`u+NEKA%%x1Fi^zk}`D zbi@y^L)&tw`3O_wIR6AYcAjSS33h5z3(v4~o65VuE^XTP3cI$cCpXxwP5a(q_cpDO z57?uPqf!K%E&dI+3XkVNnx8Kzo_*;a@vbfPd`bCd)ZdEM#?MI8I&%4O#YywyomsP& zGp3^E>OJb;S!ph*{vK88`98;0=jnS?AG`YfXj)Qkl(b${^f{NG8;fJEwQ0TYWIR`X zZj5-JxT2*RiQ4CjXTrWAmai6C(AFkxL))#I(;Zl+O}*^Gx@~H457ui_-F;ZUO}|$= zfDPJI-Vin%BKI>R*tqjFXD6^pn~u;FHf_@yGlR|A{7EM^Z&TkEutl5JjwNi_rlYrl zt=iPzHEi9c_HAIB4S8GG_ZsrPk16sV&UUax{ok){mbAU8|HpH1OOJ}ghP>JirR}d9ZRjZG%^QO!T^wO$vxWcY&+WQ8(wNd*WdT-THdB7fR+Pg?c*{ZJ{ zsmD9C)O9o}%2Aya9?#RXoVZe_9#^2$i=sJ$pZ-j)tlU^=)GPXs%a8AVq%G2YQ$;zs z_UQiU8Tt9K$c=WqUZyS8x=~ScE%*Z=%L?14S(G=JPKC= zYbZTzh5!6x&-E%dAL8q?w47Y8^d5HY3$F5Ih(6YXV`g&{07SfcImw3aP+URYnys^gWcLRu6NkIP5VAzkG8n3phdlQ zmC2(buvNcjOY=2KujTXVvcls!_tbKVB3RqgJ>r>}dagye{J1Wr<>Xo#uVzopkAK4? z&CmBNu9)c_@zd1Qb1lt{L@qzqvwTZ)HRO7bn|1MOnf5GKPVQLhT&$RN?_SSze$=Lm zI>M-g$V%9Pwc6CeHtc;i^|BpPkpB?hc|!?+H}l@uwk24^bu^-rge1;8@JKw33Sq``8S14hgh!ZGw2tc zspIw~Y}T2B;a@bE!{!_E7O+K|=H?Q%Y@=($xbyudDP8rduC+NR@jgWcNHnmg>? zrdjuZJ=)^=jTQ~D$MZGy_+7-*OJbO_|uYdJ&r3^njf#bsmH5R>Y8H}?JOuW7P+y@wJ3Lt^EKq3$sLFIZ;YqC%Z*09 zhTM#)?p^(UCat+TzkIi*Xh6D0{OioA$7@~cxv|I{pIkYwGRIjxsLd2DEq+=<H`uL>67SG^tB&de_GnXIigc8% z#`7V4CeH8FhY<+v!9le%V#dUHq!NP8>J=XdYr2vHxfT#1xw3+ev9JOHZ5s6Q-fMs`(ja1s4GP7 zkz24RrGVZ8}a%*s@Ktcm-RvsV!^Rx{Z<9KsTFo3*EMA z9Col>o6g2P?8i3sWgk;4*P{dU(3$GZ5q50T`E-Jv+VmRz3_G{c@(c9Rs(|NI`ul_D)E{uQRwb1kYKiTc$kEvGua{?}*H{9L`ckt+t1wJt5`xWO08 zBOlh1rHUhvYiGXv{4=>ecn zt4-%-8`f^qHK+sYv{7Ogx@grnEn&+x^=$=Px2azn*rrYUZeiOt9jP5`*XH{cY`-Dz z06Vm4ERL{ao7RpK?9`^VoMGoSdUt_dTYWZQkG6P(&|=4iTpksn^f;5Anjf#8X})?= zQGWbPB+bvYvnYbIC*3378Kj=8Ii6K%{&A*!9mk3uJin#6G0l|}KkZ3d8dsRqbNRU* z$5kOMC)b|*F~~oYD=T-@a{0NV8Q+yn`=GI|%@qv`Z3{8JzQbB=%4@^g8}d4^P8&V! zLc5!^2ko`${OiN|Z5rzVY`7tB1RJ$!6&k}PZEE8bHf_^*%wV%N)jNmH+cYN@u;qrl z6>Qa}I@Yjt8-3nDH?11+Eo|GSns=}thRA*JE~d!)347Rnh%aid!g+Uq9owk+1U$It5UD$_g)ZUFMmhbTNpuNu3QRu_^Z8|dtutA&7_91NCrWrDUP1>k?3Z1rU4Vb}Z zZEE=(HXkDYhS&nO7$Pg-61E&7pWClstG0K-IkASV+i1-Ox@lFrx3F!S?!b1iU7L=< z9=31OF*v{uZ7S~wJ8sB3!A=|U&aiWv>bSrzZ8|1b*sV=>EqBWmP1MJV@(=WV)2JaVrWJjQ*V{B-N2m6cVvpjdJw(38-GO!5 ziYLMu)`fOkH7|Rx-lohxwBM?+8o&l^YSR!lY|}9q!A2YM#;|dlK3kZ;CT$w6DQw!N zHF^e{wP`(?!{%+8*9+L9O;`9OY}v**te~q+x`wVd=?1!K)ok6uwr%<@%MP|{(}?Y1 zKeB1WevIumZ zil$`7F0QL-Nx7co#x&QWe9gHUawWw(<)^kZHx{`b$Jg{}`MG1C?^(P9OiNOaYxBj9 zVc!t>cMn>yR-0x?8`f@9t2?kxn`TEB)@{?-*@N}kbjazbSTu-8xfO!aMBV_Es312kg-n&la>O&#qSTs0gLUbs){xF{{W|ofV#| zH&=d91S?rub6i_f&y^JKX4Cv!4{|NdwhUU&dVKdg^?Z+Wd*qHyuE*3+TPQZdc8KxyIM!;@Shiv9Hm~bgr%f&B z!g_70y$|cRY2N{C(57)7!iH_Ma0DH-s>CsD+@_Uu0-Ls}H8a?(&8sywZ&P^-*rH9X zS;CfWv}OfeZPGP#)2cGJux*>l+`$wX?H^!@FKU`8Kg1MY)O5^uF-2zD9=0E1dFOk8 z9)`#(nj`GkrWT%Hr#5PF`S_HXXq$?3Xt6?^oD$L*5N`YonGs^xmpD_JBRw z;++jz>}Zd7yQ%AllU0N=zt~{yP4|dvZ0bMB#ct)HZ4cTrS{e0h=n;8BJb3+V68Tl z+lDDp=6f+kuD$QW+P$xiK?l}pQ~SHHZd+(UF*-eHZkhVS({*7F+qY>3A7FhU~HJ+42g=knvan%iWXIuRKFWdOUl(yT~7Ve zyR;k~!;1Fg%8x5YT23xMSAK3p^COfymbo71OUl))d0#OWdc|7d@tU5FMO<}Lf9_Z) zzxK7F=FpcA;0*p$3=L;Gdd>E+C!~;)*f+H z_@CF_{FubM;k54f{kGJLj&a|ZJ`?Z9Qje?c|4-ZdHdS{V=iXcQO$;_9U_$~4*kD5f zHXMTkCy;;)GB{v^4GGu~Ljv+90S6RtAb|uNa`OM*7s_j?N~*H!k)9(}NmbH${6ele zs*< zu*THNh8ZT#co^W#rZnrVK+><)niK^nW*{i;kzHm_|1lAM4x)8&v=`}n#oY> zTf|z)5J8(*I~lxph;@=FM_r=bq?kuNV!dRjK7C^SWY|3h#2{nbpBIJHiR%kukWq6` z6f)8w(P1z37ZFCpM#<2hF|lzn^=CqKk`yy!N^F`8t!Kn$$+9Tpx(l$uM^g#g533|6{R}lHRG<85wHe zx!466#^h4$FUgSqD=|pD7rhp{q2BYp*4~P_UXX?rn{q@cEhnOWcmj~>hZ8e;8?R|h(69O58uPxq z#F+Va22G-nv9A1rD5PfSC&VCCYnsI%HQFs=tzJfpZKCa@=vjwYCmFxdBi2pkLv>O1 zi1t=!pJ+cR=E#89AQ^f-BsNS2-y>q9WT<{)V&i0(5ffsQWc)s%*mOy6Mr@W0`@)>q zJQ><9h%J)gec_VWG8tyjir6X{VqOzlCwswXWF34cvADeF$qk)z9am*sW6i$JvRq z>0Tci-3gyir@q6xu$1SsTI|FR)wk@s;I%uXmO}MTdEL;r<^}3WCP$XOWj{PoOXIP7 zV6}LxXXw|SbB??(FQ3%#R}`DXn#nNVTEtq(6kVHWH!1qqBi2g>FMVQzWH=iPi4Bv< z;)v)dDO!(-jgw&nC&VVn)Ot#EniR8aMr@W0zURcACBrQGs@Oakyex<9W}$s7j>HCh)J)Uh&()>NcAl{ zmcBEn6`oqM?_fSF5+`(3d=i&h3biHWR;=L@(o`Q~d(UrC;ZuDpPG`dCbEqMyCA)<+ zKA{4qmaJSn-t!AaAFPoMdr=yZ<=L{6ABFNRn0m0r0X5>@c-r&GnlDyP?NP&8z2`Zu z&3ku>-(N`kW{v;jvy_i1=C$@U7nSdkm-@a=lUOquVrda;^-^o2O{|@I7>^FIPBP4< zF0o%BgS~Ds$fvbg|C=H`V!hNu{`3u^Y>*80hQx-+P@6}@#>p@vC&VVn`2Iue zx5$v=X)#ER(~Q_W^^CYm&BIIe8ODsRzz1x(Rxkn+hl0HE(WQm92;Vr)WeM3 z65A$2W_HAO$>e!Ybe|Nh55ypKDt=z9PCcAX4#kehFq@9WAQj;c#2|ID`BO1S>79r{ z>YebZ*qN8oI~Thm!x&$S-H_q^>8;ouSy=m`&K`Mq0+VuNTv|><{qU?S)ep5I<)Nyj z+!<6oP49$tnetHKQ;rN|BDH#8>Dv)meG8R5jp(tS!~UDv!CHMp&+HypeGX5%QqNd3 z|0SNS(R^% zyGilfsYk4r41W5=`pGb_2E+!*uzrWchRKkV5wTG+#WN;4P6{s*Vvu?s{uQxF>S3Nt ziA|GXF3gC{l3`WPi7k@B$CB7G88Wsawn~N>u_m@oh8}N-ZIYe%`miOoO{U)Mi0+cY z;-1((8KOQAtCPXYq1X|bEFO!Vlr&Gp&d9JMo{L?S^e)A&$Yk+a^o}&tUs0z-9@c)! z!`e@I__VUhi!*tZ7f&)$9@b^b6}{qfB1VdgW_YMARZDh6mYwi?sA?y!&x~h>w1=c^ z@-gZ6nKG8b-jdqEoX+T5qZxLD)Q%l#sK9B9MWbg{L{|2!OoTIh>er6c8aKzLR$8P1avVv}CRPfeyor>O})Gh)9@hLQXoF-WbwSusd`K07Bi z&$fzjL3EK6UY5j`$MGrT`Hpx(Jw#2r{FmHCmcF8ci_r&(eXmXUQY&|%?x%L_ z9$0;T-WW}56doIq)iWz|mVVeL(jH^h)xPdJ?)&bge)p(JteH%iX%THD#W=NzwUeQT z9b%niYTYH;O^PbpBi38d>=W(xGCnUF5FMm0`Z^>wOm^bOV?=C}45K|JHcp0<`G` z<9lMeWO&c9C$>+9JRFGC$<*gV(IZmy3D<{JJ8vfOnd%XB&h&)O|Pg64b7=a8&+!^kW)_&^2zJt7E zY=zaCS_;pSQy!kKRC#gsuJYn<38&nS6m=mJ>D8y)`pWQ7nNttpoSSmXzLg<6Qq1&B zL^xe#c&N;2M3!f3Z1Vc{7=(9lsozk^Q*QaS;zup6{jTe=&y|<)JyeruGbti(5o;yG zEN>HQC-ZjPXm^NqR%n-KHz~%mN353&b*@jWpA4flAT~$_-$P=VX z!wMM}gVfWW39(7)q3x8|G@1H0BRWfpXy(M`E1C+9@jno&lcDXQ*b&(aeoT+WPRLM)PsLmqq>4wc zorrhfKf}YhEwzL=GWwwkr23(nq};M^#e;rj{95{!{jlcJctUkcd8iF3ccEy{Nbgt? zgNn|aTvC8SPHUlW65Th}U~h-Fcl zkor`4No?6mSzHlYB}3oV#5PNMTVmT}$mx#QE}8F?i+fLWpA;4k#Oh>-@KEfiq<1WK zLMDr+qGu(|bFm9D%$ZBED>Br#Yq2{r#O=(A>MG9IN8Jf$fz(#0S1Au`G38;+rChzg z7nA2Ig?@q9tM zMjDYbk-hWyaSJLKhiDbJ6y{@T;Mo;|I7Mc-zx+9^)URbD)?Pr23O;&1b$Evz0` z^9A#(w&EOlUtWfPYecM>3>jzM3E268U7_l|6bu#pELu`{wt+zzCD|AP6mlUJBC$>+<{Y9)! zCYy(%N2K`swZ~#770px8Gg8<*7rP)sHZR4l$WHt^zZSb8!wkL^yCVygU(|(19;#`| zE&WhsQ~mI{Wy(WEOL_QrUsE1xY08yP#qC7wLHOOEYKx+RRJq;-X6%G#DyhB|QK%EC zzLmM~o*>n?G8FdYRNt~=#pAlFy&$z@jTz=yCPTI*`;OH+D_X19;b}_hf;k- zTKk5(@Yi0(iq<6BT%j$Zt)!R_ZDQ>e%?{B{QuMt`teXt+_K5Y8DW*QrK~l`4A+cdH z_#P1(CBsS@6B{q-O^8jB!Sj^ZG#RoqBQ{H>Xy!!cNipjd#1_dA&5{^o%;eWaA+-np zt{7z0To#3t=8D*=m-?>dn%Fv-qTCSOBt;*$#J0&0<&M}c8G5rPwoit9ABfe-uo4c% z&dBf{?OY5p_T`77kg7m`E(RGjFGL}wc`0_|rJhIMirtZ^*G`D*s;G8V9{t^GQT)}H zv<32&(RWC7_L+`k@}B z`k|Vq-12M1Z|PeZS~tcr>|SX+;XP5xt$w)_7#^%KwleW}4`B~UW3@cPL+zU`WFNJc z;cqF3HIv~tZ(GD#$SeUJCi*REBJOXCK`QQbF-Ywg8)BPmixJoo+a|-D+Y#F((+KQ|?pNr6 zXq^WMDvSkc_oR zY?usdYea064D)MDY@7@|nGl;KQ-o8Z)1=tTX2fPInscJ_q=<1rY>^Cpmc*9HFdJ9I zR>{!kHL-Ov)SV5nO)q1G+7jKRCcNy4?UNyz1F<@pdUz;$L<-->Vkcy1eJXZFhS_s2 zc0q<1FU79Nu&S=bZpdKoR?LM#8rEgX!}EcZBT}_?BH9TxE!9VK8U3*9r}~zC%T8JU z%Q2d|o9E+t<$sged*P1Ze~&En>9rls+(FJVJgoYhC2uO_R));lX|yC!HzfI^WuF=)kE=|y2_u_!nY+-9`=uv+YwoPvvOhe*_s2EzMo~exdHv! z8mGlmFZJ7IO=8Vtc;3|_1{vSweNq%spP+n73{p?OTE!rh(>5_k&B$LAYxh#0?R1EB zk|F9Yv0gINl0LD1GK~L#*dUq4W=M3H6!{+!8zn>QF|jX~^v1;?HJc{HCQEu#V$)>Y zNyO&KP*WGg7Rj(*Er~6YDe4u`Z;&Dn-xOOVL+drMbu!GB4Y5r!%!n1p?}9>CuFF;r($Phh~`}Ef(#>iDRxB$AJ<|xCB0j*J2J%V zx+AJ9{X3o+Zs~`0nc4~KFXiY*#(vn*9;zRn3s?2y{-5y>-g8%5=x?@V^c_-7NL!!} zwQo5Euj8fOH8zPgd#QQfBGyVhv~3e>CqrL4#5zlQU1Hs2$aRlcFB!(APpqHJJ9pJ= zKy;84Gi^w0m<&%TN5n?S)Ot*Gyh0~LCrM#*N^H8KIU_ntirDAG=E>0S1+m4F-jdid z8BQ-NVvzbK#5X)^#s7JJXv1~4h+iK)xb7|K^x=9?#Lv?qT#t(Q6*PuxXIu;`?VH}) zQ~Y1w&cL;UtNxB+T2q|sUg}-KhS(+VFi0zU+??-V@Y@ZCdI1qcD%!lPP zzb{%R_5G+FiXBxnk3~;Pnx|rCWY~w##V*K@g-fw3GWot1y&=V{ycN5vXu1aCx+*^V zNqMLtDGw{T%8S!U%ENb#t32+{nTW7T@A2YXRJBxmj$Y-(zrUDrjP^bIjUuvg5$bR1 z!P3VVW;|Q^q3);lf8=LZ#*U>Q>UC-V-;lLbST>cYmAF`18EN|OLmKs ztY>@l?U=AiYu|Pu_$a&#-+mBlB}10m#M;SlHt!JYB*VPy66+>Y|9V7wNikpg#0JSQ zWnXkHp#Hcw#2r{P|bJ5cFE9_J+XZDiI3cEtu!ivbssO`bNWA(yrVc&VYEo;tLImeu-t-BC>6ka~5VP-dpHIpHu zEn=-?u-PWoPKIjHA=XKz{&k6Vlfq(;ST7l(=@aWO=?#btl3|Svi4B+ZM#M(R5aF2E zI2n9Qi2bIQs*jUmkg7FPV$)vgQ|=kDSu)J2Ik9;%^>{&akrbYn#FokGeg?0It(NrG z#J=sNB3u`PRD>I1n_lXiu_Xqn_r~85gOuKP#UStnGqGUV}G?1BvAcPVy7hPKyYH)QgCD|$zYe7jqsx++e$DTn2ZemJ+M z`j-7r&r|(Sl~Qi$hc%n(tGAg*^DT;VSZc}YffZ?}pQ)X&1Ek#25A`n6iK(IeJNhVQfXi9xEyeO3%o>-TeFkoqQfzZj&d^?=x*mwK)- zBsNWke$0r?mh|St=E;1HT(w>hT_nZ$Er~5xG*?7dNzvyuv2`-cmkqH^GWppO-6ln5 zcf@wd;CoMOpA0kkK&ol71+9L{0fQ7Cj-wD4dF&RW#2aWuMNDNY+Mf{Bz~~_2#czO!x{&=O=YY_(R+1JmXBJEkeaj zd3c|ca%+q%{jdwCcEWG`q}-ZMmK`fg#oskeJy@13&*)k0_nag5)9j_HX^U7Z8SJ)+ zwUa5j4$)3h%$zQJ#g)Xby-DlA>M=i4BwCz2b=2D48M}6CEeTs+bU) ztY}V&PM0)i#AeAbC+5WF$>e82bdePOSrS_&JHe@6Y=sON`i2;!PU+tiTcsX8aat2w zC&TW%A+}AXXm&(*z0?!mJ+b|Y=7DIvLJvhD^?R3pEC#74|3vJFt&!bhu@f@n>{RTG z3^VOq?1yB?#Gi{@kYT1>id~UmtgprH$im50)b*KM+0bhz;vK6+cnXqQ3Tr9lmWOif zO523>m-0pJNGT6{Sjt0%PkE@YH*q+t&D7bI-P9_1T&+`M%ksW`CdH+*lkkV@vYxh!m9b(;N@X;gIThi+j>nHP(y3_E0=wO8oi4Irj zi0CLOJdKHslc6q8h(YQZ_E*Fvy^QmGO7yq9jOW>DQAo|S8L?SvqF&93&6D9ovmmxe zrd}?IE?4M^=qf2z(wf*h8Af(PY?BPWx5T!|kc%C$T{76)6Wb?KJO`rn3Oy7(B1M0W z#m*|4=b{&+_*~>t?5d)9EqX(W8GkEwSJ8B#iR-HPMsUjEFQc#CW$uJ3m0H3XAfq2@ zd8%*O2`fL<$GF_HUsSJDKYSN1<#x}kT!bAVwN%%xmU7#J)o06+rH}b^FBdwwWcYJN zq?UcV2ciC^eYSEJKI=&JZ4Xwg;hRaRB`bH~T~4Zx9@I8n06qpURehVpn#mMli)bq; zGS(*6PKFuVA=XW%);*%Vq*x1mV*M4(0ntHH_!$x#u4s;kj*`OrnAkWO`aU5xNrpXm zN^F`8ZD+)0$&mj!v3WAqW3gp2v|SNfCBuniO>CD;nb;HEC&fAWK&(!N>>P^y2^qW` zi9zZcna5%$)I%jd6+0tC)aPOsWQyie^okU<>ssuF44!Yr?#R^I32|K&=Zutx(|F3m zi74e^MW#HgyDE>n?}H;M>SfhZagI&-x%n%#!KxtPsAX#5}t}dO0P+* znQhVY7O_?`^sY^;olLpw@UQ0af4(zWz_o*)rXFV3XVex_?}R$VAocCQF0o%Jwe1#z z)RTc8v0mz7)%J;fmJF5bb7GKBYoBR#=kb0qNPXXYKx~k0F*-wH!({63i0EiZb4+ZU z47FuKY?4f^r$nbo5#x;5EE)1YC-$tDI^Ta)3{t->I4=enPxlL=i(cy4_LA5#nc`Uy zT_wc|S`%9*L$%%z+ayDbTVlIps4jbA`(zmV1F?EZ?@;WBOwk;Ro>b_m=ou--=3MN8 z46E!??1~Jda4mL2hPZFV?#RNsbx{`zdDtOR9!^dv50xS1p(<5*d55UpiKD1UoQN^u z43Oc-$vs}|DG&D$_K37a-hm@^W`ospw@E&?dY?w@084;Z)MTJ=qTO>p4C9!2PwO$cjCB<&LCbmw7 zTCyRwNrt$$#CFNxc~5Mg3?q6VRxjxtiXD+*T#m&~$Pmk^*clmS?YY=d;<)wklY{8}Sp#bf2uniE#u9-C(? ze#>t@|90N;`o$BvG|$LS?YmqSPrZygcavx{DI#wXYbC=z)h5 zF-ZL;*@W1%m)gf?#31$5=eNaXsizp{MCT**-#1whT_nW{SQ1+%!>+X=wn~Ovtck6Y z$i0nJo46w3+SZmwPpttE|IE9Kelc6rQh_!kd-%+)R zwo}vJa;vRFw38I|vP-O+4EgI3>m@_{ePaD&82bS+$XNM5FFHs~jO~!vIN5>!+b|Pi zlVo)t;gr}knc|)ioh60EIWfrS`&m&)eN*wPVvri~c`-;mUtADd^ioxMNo<)6yfb+hmvlJ7W7}82tmWdP(n4?5L!7EOtVMbIhsO8QF=?>$%tk z8CK7w*cBPtUW?t3VdQVc?#RN^VNsVW@-UlI9#&+^!?S{vKc^~G<;6;^^5S!)lxyxN zJ||+N;gtOF7PhUhwo_YHufsFaR6m?RQ*LDyt0mJn%Z}ZHP_NgEa#z zeblQ=pTjiT0D?R5&0uSkW93g;aljT?|qy@HfOD z<9;(N3aO{9BVwao#y*aTj+0{cO^8iaG^a$TNwE@U#AeC36Nt@|VHPfkEs|lxm&BII zFw0iNR>@F%*2LDyP%AgYHp!ITEzxaK%)=eA-HPU(=sqc8JP>={OMQR$`(kzKVZ08- zAY&f?SoFwCjm@#xiIX4}OOCH{V zr##fll!uy}@~~D@9%@a>Eq$LPw;mLq6ERY&2YE}yK9qV6RVd|FkL`%^p5w@8`e3yP zwLOg~RM?b<-6rK$-$F%B^{t#*qh`gK*DwCIVCvV3AG0}=H>+QHzs0{{kowhF*8ad< z_-ilYcr}SOlVYq|#M;S_uMV-!l3tfsx0jlGJz~AoL#%yb{bb0)fY=}zay%q9Oop~2 zVqYZlj@(N5lISQYq8<|)Cqwoo#3sqqdP;Pf6g%;Z*en@*&xy^GA?^jSMKYWcmc$_S zJnHLW&LuU&tWJ4Y9Vwso&xY07iD)Ox##BGdqLhbKkaEj!czT=aTXr7XuW+tP?T6W( za!cRpZ}=QOwSy7ORp#;Hz`&}k614mP7Qrx{ba0tVuNI?ePY98=*fuKC>eZ=iH(!tbUh(9 zNrrKm5}PK&`}-NOSu(7YIk9KS)Vr^WLhAX>yclHMKNdt6*&cqD#FojB*%h%>GWl5( z{T33PZ zW3dx5`8gFmBgGh=i(QZ*KbK-xWXR98*bN!x#I4vJnY=h5t}BgChTAPdjY%zq>Xvf! zI^zLZ&+t%HQ#+ydq}-0wzGK-6r}c;X2$e5w5%#2%TUoNQYDH>g&+fDL;O@GghsKm2 ziK6DFcET=G<+i>xGps(_eGBhJ9_rb)q&u};cj2$S41arHteFf^wunKhr=Jvq)Xw!O zu~sjo*Cy8PrSv+)I?24Us~KIQ-K3a9Jz~9Nh^9}h-%EKJ5F0G%4T%ktp;nEEjgrB~ znAjv4d`yW=lhu8EGh*{(nEMN2i)8A_lISuiX7P&Hs+Wp-O>CWdh-O1hWa!Dc*aaEdUW#3jJ?HavE#_R7 zH1*1f$U{{~^~35(o*eIELI3_wyirF$DHc5t=H6=Dprq(l}vlTig zI!}rWEr>0WVXt2jTP^9WiLH}id^f~4$uL8=#J0(PFtRaq&}~CDh3%oe-vx>QhF_7tz;O{HnDaxWV=HQ@<|Od;?rV~ zI#GW{3{rkO#UNva?-K3y@@Z|%KSk{k>-AC=`^5UmP@xCJAoY~#^J0+NF}@%Msca33 zLFyZFLt?{TDl;QuqhzQCV`AfE7}*K2Nix*FDY0oX%n|?$xv|)#g51n^|9zlg`SF@kz!QN#V*JY2Ufo6Nb=?cSF0ObIDP9*>T$RP^ z;))focwJl-XZy6j)|gp&a5jyxEN7_fIqXcSXY43WG3AyWE26p)PdFc>_N`T5WgtA|1-4?V@_Lstvpz(-pXe<-=uj!-fDlup?d12{_hQsV`AfEsFxFBlVlk6DY0oXWO_zymJGFjPHdhG znO+csR0f|DgN*M{z9zcJ))@CCv1KyMsTHwRGI&`NTlX^NYeRICnpl}zV%ub>uRCJ9 zCA~ed{gU2+Se?wfawBjkdPIsjcPw^7h7mXwJ0nB?&c!asWbsn;iWDpRTI_}lao>vF zmGqnmQC;abjx#(|s#HI`lSw(oIAbSNs#G66%;-C$T9~%5BC;%n-7&Re>4zGb>RWam zt8Zn;ZeitU(dE>&azAPBEFV^{!@23_wPTHf-8U(QJ@qm?Qxt0^lgAd(R#N1pO{|>^5p;-snhgE>j990a+GD!Jx~V5GJ)*s& zu-GT|SufT4b7K7^y#cX7GW2gqY?ur)bwq5G40CHtY@7^!C&VVn(32^#X)@TG5t}7L zzURc|$<(_A(M2!SlO?fbYQpo1*eV(3)SB2j8KT(`+ayDex5T!|aE93t+b6^RbRbqI zL)$|!NPUm@kHwC>jQiNJ=!uuw<4?uT$PnSV*aaE9T#8+hVeh^cyCGA)Zbk1%!%P-+ zO60JrS58D8>Qbuj6jbfgJ5~#1EaSnpWZ$uDVWcuXkjD(iOv!NDvwbH#K}_>uWj36o zAF6MA4(~M{YANjOsebrYTFR{vt!HOI@r|g5+ObB*?y>IF4%~&m_EIaTNvxR+Bitg^ zN`}n0iM5kqlsd#Z$q-kUST`AR(IeJNhBehE)=#Dg2Sf)+@lB{9F-T?W*TsgZhq*K& z_C+#T{F3M>DPkNG8z*Ds6`L&SO^HpDArCWRvt-D_oY*26d@PAAli}~KuZXRZDZ(|; zbyCc>4Kc`A0e??)lbY!Dme@8K=GczdE*aj_?}_b`A;tr-IvK|5Q0#~dYvow%gbe%e zsn{8r`f@IML5livDRxB$FV|u>WXSBT*d3WHIw7vB;uFr4hw7B_@Ju7+p#r5moTpN5 z*$>tA=hYAAzSNEtC&n<7A4}hg)6R6*AJT|IBG%2e=zot`FWGZ`C+`#M zCqrHb#0JTbiy^ULGT%kldPMY#r10`3u~9PAn=!F*GPRx%ovhF)(di1E5uL5jInjAi zM86=mSkYV(U9Qj-(bWoF6J008>fR88)aUcRCkCmp{e3Y=JtNx`gH+osv28EobF&@M zKOjXuzbCfqrDph^*go}?&jZmqDOw+j9g(3g$6_aBYJDntMv57DE_PATycE5v&}-2f zQnbGnyQ^qAhvK>_o@=FCv1M9>^K9B8)Z!{HDnpgW%x65 zjGgL-`k8Voo_sDE_1W_LcuRKntX_wjoA%DOWaZV$M>zYW9xOZI=~=38+5Zb;-0U78 z-?i^M1+U{}v2%zvdl|>9MYNR^k++HcQbn^}6jI+Y?hxywCgxL@ST`9)x<{;+%!lRo z3ekR2tiS=WK{8kz5*sGNscA%Plnh?R#Ky@mFDAq$$&l$Ov1u}l;*8jANpDVUo(%iy zg4iM%{4R+tli}ULir6X{`nD#vPNpnuh;EZ&1b4)CE1G+v`=sd0fmodkxj7U&B18X< z#USJ8|3LIlOPVKQkop&@PQ}ishs>UfU683am!ems$j`Od4HuE!*W=>z`!vo_r&Dg(ccxVr(-!s}%T{>blv=`*iF!QtG#u?Wl+D=;c8S4=1tY~(Lc9X(WkJzu0A$z|j)=P$2 z)F;+o(i;#PB=ey<-$SCqr0D;M*eDrl{g~J|nOaYXLh9RdUlD_h{r*kSNw!CCro?8+ zFeYj@lfoDOs$VaPe@VEPQ@VgzTpKiNPX+?&&1By7N?eTu?sSIz7)G6L%y!X zZpg47-HP3jDMBa2b)|PV_xRJ=SM+-TRegOYKBK>``cTzZkMHU0U2lem)tlNu?=$*X zWf>l-Pin`~54%sQkJ+5DZ^aWTeQL+*mosf-&hlWl2)oileTT}I>RY+Pip}KWW9iop zohA1Jsqer)BL=Bm@QE0t^qz`AO0P+**~{=vVX;;+j6s`NCmC|qCDu*m4EQnW5$z?# z%;^*BC&L&Ghz*j#;*i)d8D_3dt&=!sDKAzbuvYBD0)PS>>P`oc&TsKor;}N4^f|s{m@H&*7N6L zkb3%mAqJ^gcPVz~W$`J2sAJ@zQlvb*15J5YWhuApgw^^`{qSjIs&D!AiE-nm{x}hP zX0^ZwJVGCHJfn{h%5aAs6;W}{epsJveJdhs3{W>RJ+LxojWK3_#*Uqd>YXQQ%XbP- z^{OdSKLWp?S58F!!lUwBoC4B3JA;O$k8>yN;i(rZd)BB~E5VM*8aH^T{jqE4+j<#K z%}t`sq?qe1Vy$F|qs?E>|Dyjt=idUZ??gOq@rw|zgQRA7-gPOXV;k|Dw^v28M(*muNs$#4?i6Wb?4 z%m-qSI)gtiR`*hs=1}a&OTEiK7CRxsetIf)Muz^Li(Qbx@1@uk8J?_Mi`|f+Z?|H1 zWZ|8&sEdU>thbcIm$aPFRZ%@tedPU~eq1S;J7GnqmXPs#`nG4Ms``^!vOFL^_dMv| zSXY7D0W1Kd>xCOkfH6V*cq9kJ{SF=mzp_$E_OkNXEm2%S6;^1bS-*AikWjOc307K zt;BT|ZDj6*YLT{p{fvHC<*B|?RlQE{SRRn6j0cQJhKIV7+P6FxYdLLUS+e?UdC(KW zOsrO)LuE@N3j27K+dZ&y6l#3cPVp&3%B^^;u?gqz)DE5#Wb$BV&hlVo4*IntXVBa9 zGW>R%STh;gw}`cpp>3O3JDDQu5bY#I{<_4vE1Er`y`*)VxW)Rs)N`ZHib2NDB|aw# zsqyF+gVb0Lhz)wF^XHJ*Fd4>dL~N8yy%`f7Cq=&}#J)m?nf9Avkb2fKDF&$sr^Ke& z7HfY-Y?cfen-g0k!}?khTP8!kR>W4lRFBuh)~N@38)BPe@Vh1ET9T^IdhJBK178{L zkZM$FD^!G(+bzP%Nn3=INXo;?O!?zu4Nsv`OO}U*`n6-%MfcP1rRLj!*fbex&5YPA znes9xI!}t6EQl?VAs>vFFKP@B3nqan;sEA$2l46gy&TWc^s|gbZFz#m>ku3g=>w+C6?Kc0oO~y%f75 z!~DM%yCFl=w_lw)Kve#7?|QvI+x zQ*OoSOlzH|EiBKLrLcBVJ61%t=dfd^mV896RVEu4;S9HYhwr4P9;}#()5Swu*fSth zy@y-M=R?1%o$0kTa^XE>>bY*rfbhPrsvlQ;#&bCHR9lqK)DOR7MWr#S{lHzgAIRw8 z8PO+RKB;}d|J{M7Vvyk^B=!mFA;ZmLkQ(t8u~zC~?ApXS$*>-}#Jb6lhaR!sl3t%! zKN;rdfY=}z=JJr(Fd2M|h>enAl*h!zy?k23d!h-kN$MewQ)1I(nEx|kvt;l)CpJ%p zsW3IdTV0qWIVBmZIYoMTVmT}7>^yXT{84zPi&tI)&4-NPKJIQ ziXD;p^MiN0ci`%L#UvsemGgBJk*kuBafLLTlyG_j6R;dWVqe4 z@RT);$ZiqpaN5G^vu)|I*|X+__{z3b_*-kaKcGrvig9TQTtQp$o({X zsdtSnVy#~4-B+7fI~itehgc^WPE1{5-DJ=ES>GepONMhypIAScbL2G#L>wQUVnGADpMQoJ} z^=M6OoecTk5Zfd}EL&pRCA}T7T{5iRJ+XZ<#C#xD_fmW8q1X}iu#%6(PRP*qRP2ll zxjGlSAk#Qqie8bT^|jbvk)bDlEp|hO^?fULM;7M4sB=IrPkQY{yo0=Dc&NRprLY&I zJXGG4JJYJw>7B5WQf{}fVtu?ND_YA#*rC!`F;8ICADMu4JXu8-_FrvBeL|v z4wZVg^ii8KnXtyj8UZVFmK{42mL)6K;qPgtJ+}12u9)iQBQ4&OrTVa6J8>QHeep8< z9Zs=kGU&C4wUVKaZDQ?YI4N|9b&{bjbcywn!Cs%(Aepi`Bsxxt9!-c%Ry3zXr%7RR zMr@W0t>?t%$>e82bdeORY)NdH46RqhR>|tVqO6InlgZ+S=q4#zZ;5S_Vdm|K?U(cp z#2~d(KQ9KUG5o$*oo&(QL$M<=_&pXoBf}V+i`|s;ZpB;|NYOvNaw77u#vZC4s#dBW z&O9j(yGP2ccpj@C&akQduu@ZQ#fj`@@`I7caLc|^)!vkPw(nSduwo5WBK2VP!S-zR z&a#vro#NSG8c{w=w!R%{sO_nT@I)u&Ru60sRxYfWYFk2!+No1;KiyvHd-6SEy=1b` zC;B;3^r&A9GCtcG5FMl@axx?~OeUKnqNAiZjgE zQ1pxxtM6RwiVR+^#cs&Zzgsa#{jISdi9zbS!+#?NslSkXCk9zO9Tj!K`K#hPmMITw zDdp;w+B=~uefK)Uk*^GQNVO~VVfn_mWh`0xwg=0S-NNccINzpy2(>HamK`f1OFvYc z)V^iM%2B9vsU15L;eA!wB77c^a?JSJ3(lbXY4=j!d+QME^zsw6JOAvsORSrE=zWh^ zFB$f!KCynX=lx6?5E~>zCWgd@$q@U9*d!S;GbJ`n<^u8-XGCX7;dxGMzM{Dxx=4yX zFNrOaq4kQ`Dw+JOiLR5P^@iAHMRQB^yQFwGwk-zvOzkWFw?THqcBu!8dt&=!==XtG zoeZ<;Q0$0IF&>MakfQae*cllzelB)Fh7r6JyCOr|Yq1+L{2u46*j-7_xfj({+@CUc z(9aBq#|%fr8Sap3Q|jAlfqrHzS^A+qr1rye*p!D=mvXCTVO^*CkMCJH7p9glVvp#t z6_J%WJJL}5(uk}`t(;o9%iGtJ#!Qbb`{DigL*ul@*v<(wGTImHIv~K z)FReOhP=0lwUc4Cc8GP7VWxJ8b(0~}Jz~9Nh^0@gpG=Vthz^p%%aGWxm-=jVL~OLA zHzqbthNvgRCdtsdDY0oXjO~orEE(F)iOrKK!UfUiNHJHxCbmq5JgkVVl3~Qw#MVoC z8)BPes7qU7+hp*uBeqKhdwXJ#I=TI!*dI|(QSXaF>izzKSe=^iawv901~12ACuFjC zDtcC-=b{&+SRa>SS7ewG*J5{M7-wf#R9D4GvC8#nYDQnN{TJN{C$_5h@~-mmJ5~=v zb$_@e%*{*>LoG@zh1!+!P(xB~MH;Gds&Cn`;=%isO#D{A9-kpAqQ_hMIP)nyO-}P< z+p>+siJhUcYX&1BMS5pA!~4$)3hjANHrFBu}}6YD3#_zj2+l3{KPi4Bv< z_lW2hNn!CzVxwfRI3_kuhG-_lCdn`pro?7TdUIm)WQb-#Y>`aSEQv0cG*`q{$q?b1 z*g6?%(}vh4nJjLJZj&O$9kJbt=AP)jm+?C}2cmWAVig>U9g)H2vDgWjyq}7mk)rjv z*aaER7MEgIWNLjadP9nFxD~r23$;$vH6#ynGv(oVYs%$O?VX60!r3Qn5zb;M534oh z;d7;w+n((^$habOLRZ=!@A2YujnsFjI4O4~^zIm1P!#Re3|H$XW|2s&bzWQtT(@ci;En<+G3!fBg zr5@%%n^-%Ux9r|$cZhb9qGw%V-4)Fq(cTK}6YVEO1sD(;u4s;kj*?=fj){$vA>R{X zlVpl>O7yo#(W7ZGNcDV1?6;|hGyU&~&3dU*+ML)t^^nO0u|+aOvm^$ozeV?Tv1RIE z1+0ic#v3GBQU%S_qCA)<+Mpmr0CHsyQRrtF}Y5$PF+7F#U zZ_`Wdz)fP!WYB97YbC?Z*e2HQWjvX7h;~vFJ?s+eCd1n95$i4K^@;V9p+^H^gJh^U zLt?{Z-o4usM?^!a%OL|*kyJU!FPi()WcOX_LLv=h9J0inb{8;RSOg%XjJtIXl=VBKX%}dd% zlIFG89U10{Gc2mB;#8M%#gJ)%-9N*_OinFXo-O^b;vZ_qjuhjPi8Sm|sRyfP;ryQJ zhx(9mOW%qIBb$lSvTx~I_ANW%1f9lj*|GAL?{D!ADzzW>l9XFBCDi9sKkwI`(^lRr z`YWwSAzd=3BieWKGoux;_MyUsTV`AfE7{Lj#NiuvRXi99F3@d6z zY?e$}ofDlWMKlXyi)0wzC9!2PwO$cjCB?|DiG9mU_4(UkkjmG(7^L30Y=~`osWILX z+a^OaJ7T+Jie^uApA@^`fmodk{W}ypBEzgX7CRxs8aowxfea(?XJTh$h~`}Ef=tm| zie8c8gmx_k8Bg|qB?_tc6@M)TsTpx22C4ORD|Y8)@f1bWG4fE&Q;t4K%ZaG(F7%Gz zzpn*m%RS#ky-GcYdYJN1H&SltTYV07EVX0j!oFkqwp)Z}vrPm)nzE4oXpn@nDMM0-gw?tNnY zWY|Ln#0JSQH;2TA$z*Xvbd(e`W=w3H4E1?JY?2I~r^Keour6oBX36AbPIR7>yO-D^ z87wY|Etm9G#8%0k^VwMwTPKs34be?fSlklZ_EIx;M+{Qq@&{s&s?XmO+by--6WjMP z?hFT_b<(4kn(*j1}Wb^5QEgWCjM0H#7pU&ik*=mv*%(LWEj6ov73_K ztr(=9EB;9AZ@g5#?!+LAzp5(g^h&yV<%F(^y{@Wn*@-#LSVCSi+#&6PsgHb%qH?AB zwk2dS<2&!c?uEXim$78~UNm}#wUDtC>U-L|ut%lbvLE(?pI6`RS=gac4|a?2P5QJ& zcsH7I+mhA0aK1<_<+EhZC97|FJ8{O;E?vm(r`gL$TSQw)@s6TR3{p?$e^Crl-%S1` zF-U#exm^rWb*MwE(@U+}F0o!Rcf-%cKGA+s%(nrtK{D)OLt?{Z==q4)C>iGDnAkX( zyiABrl47<`iOrH>4Cln=y~O#+@2U%;&ruVn&##F=s@IERkjmJS7^E`sbumbd`tOP@ zdntP>Vyk4BuWMrKWa!C;*d`hBuqC!lhV##k*e)5~A?%6mlPO;ZqIFV?%Awd%Me|tn zgcLSU#V*K@*-J4f$l)T%xZgN(J~ zc~Qtnzb^_IX!mISr|)E7azI1(CDXk9^V4-$+8m<@L{zGGbWA6jyAmGOIw6JD&^rFR?02U z;T=}0Z%1U`3A6R#wyd#uY_ymy8W$&Y73Xy3j+G}XB5NGNU$jd5Y|Vhj=g6{z9M%4k z-F@n%YCw}%Ga1fBEn=-?PT8-HHqrJ9?GWuGMXl))>n4Nm9E}L256b7lYJZz96>9wit^g zv9FUMKff!sOop7Vh^>-grLBprlc_HoqMM{R9c+nhS2TA-cS$i@_r&(e5YK^FolJfX zMUO}^ipOFQd~A4AESR-H<7oTTw`zBYq?X`J{%` z^*3UW+I{ZCAdBZmqRxT8DzE?Qo#M=15r9A8>DYyDy*|*{e@A6Xnp{}OfvJ*~?sebtVyOi6R z3wux6BAn?`ZbfR@$?MxQ*p4(j6-Xnp#!{AQSMI`Jd#Ux;B-TtO%@)yCQsll(tep&b z?-1)O>2-;9lcCo=V!dRjC4FN3WT;I8VuNJxJ0vzthW&d)Y}89-a7=8RddSg)*d!U| z?v&U(8RAJahF$1T?1&6=^jPeK4Dp=R_D5Y1wc(rXcGr5^mZiT#q7^4%`>%hZG4UlD`U$*fxp zQtvc+#CqA*8+8@1Pqe>62Sh*brF?%u3{r6qib1Nf4T%kV`J{#u)QH$98OCW$Y@7^Z zG$A%gh6*+%Hcf^;&xp;E)qPLq#OBG6!v(QLGR*xYv1KyM?iI0BGWb{%TPIV#Hbgf` z(UUE)Z8G#^M{Ji25$=iYlgZ+NXx+>BdGev?QAPJy^n?_iPQ}j1Uhug%7rP)sEw~iB zB10dq#cs$H(XHrRg}R&Kx++fcDVLp0i;r_B)RWXpSk)=FeT4I9+5&SW6RqVr)YjBa zIGd#$xz5=qcg+Fv;Zuj6Gr>okcrlOp;Su~ssS zN}E_a87y{)b&{cNmsmF$ey6cVthc1sC)Q7f=NkiJ!(>?NBVyBJI6=&a&626#bE5O4 zm>UaXixtf!(PdK1iWRZdisqW=Iw^X%A+}l3+!Ea;#i;IxeUA*Scf}x8>G#C;sfTXvy?BbhELXK+jb-r{M5_9FGI7s-ai&Q1)vwxLy9@UN zDeY&(o_eWBn#7vD)XZ!VYbEo_Zl1M?wv(b}bcjL9%csR4pVnsmr`Del>ttJuRhL*d z8OEtctd|UPqfe}#3>A7nY>-S54vGG{m+Iedh(YQ}=&%^1o^_6hje4o?#EprKlOdW3 zu}Lz#Z=DjGCQ~#sqO+vv^PHGdAr0>`Qyyk*%AeI7tny-3Re3Q>Qf}F|;!&Rzw-d1k zVV$NP!YWF6IQykMtlyN|p2Mz{wy-RPQ*Ekm^&nKHR6jiHPPyebJljb1?Veed!l~A< zRJ-B8JoQrZx=E~=43=BOTFKDQHnDaxtg;TVQ8L9lCOTfyoDiEN!z`K-gH&btpJI@z zdA}tFsi>#LAa#Jy{Z4CR0yVL{~|%w${Yf$SVBYD0V`IxqT{jMus!=x!466+FpuXkzt3t7P}$C zYP=P@BMWO?)Fp-dIn|hyhn+X&VWp=$thba~evxZM;Y5rleCCkavGl{!%2Yqp&XhYx zMvv_~mT$X-l_k4Hs6T1E;nSRyTlvO3bZ%08%*711{9>+U^x?O5>+ZOpr(TA?G$z(e zh77cbwUYT3{%j%IPKxYyh;@>o7hPigWUx3OHb{nOhQx+TdLv?^WS9+OV&i1!`GnXc z8T?L(O_M3=8PQo%;r;+ohxnJjLIZjxdpZi#J^p)%}PUH5%PCjX z^5;bKT-REDc#ANv(-x1n^!TX4T1$Of`Lkle*krO1YF=tT)YOz)_U)co9;}Eg50-x3 zesSVWdl0H%%B_rAe(fGx9x#@*AGwCUt(Q9WG>J8nA(9rcRx+Gi+Qiz)6hVh*Cn@sR zCDvWh>=ErH#ainV>nCHy6dNQ%MHvzsCPP+6#74;wiZCqo`K#5T$B&SXpMJ6_7i zcf}x|*6_4vTMY7P?HT_Uig(0zy^PO7_C)tdk=X-(eTV<^B;wD@_^FHjTl4vInQH#mmGhN-70M?^;}bWC)-LMKEgN%2Hs zN^F`8qcu$5GjOc?uE@IsXZ4J{CvgAw zr`)w(7gu@;{Hw8ru5=#!wa9f9_krGc=d--hcVa&md4J%TH3N|k29C8m6!~!APWo(& z#5<$m4(8=pN3N?l1B!o`TK}A$-rE)bfRz4lw4SgPe>hWr-awxt7QbSw4?m<|JRH=bkDg;l z<%?qPC{tb+|7Jz*o?|{U_is6(bzt0U+%nX-`;9-UC*cg7Yl)SA|Ar$UWi{-5_Z#bP zF5kZatC%0gJ%=0QF6_?t8*7ZqH(vZ(_e!JqlD~F8FOy-ezasWyGI!T|{)y=8q*%Xi zh`mXM)^CZuO@{UPj@Y|@`=5HA^RvJGPiOc4`q!BK@8R|P{+H&t`g_pJ~N= z3uh(yiIx-2mwG1az4IsTG47@JpV?(}rzN(D`wX&^*=5usv(M;GW~afdDE1TW2ip7k zqVKp1VD=3}9(MuE^~^2+`y)|5?g6lq*#j^dkJ5M6m>6FH+U|poBk=0 zIDV>j&R(p0?%I!0rt+cJMdi~kZA4qwF)DqHB;HYtboX_oCv%Ukmgr@4Q@$wvRmn2t zwZ3(A|Ar&Q^NRboi|2m1dyZw+5;cFGmLI=XqCVUY)se<)8MDx6=Wv5whUdEX8yC-- zbN3oWn(_GJ|8g+SrkDIH{zMi@;P6mXpm^2kn-5$q7UG?Fvcue2iaeg|)M6#xS>=_!0ksx+Jlm}@jGdq?c2WG;d)Ex9N^IIZs z4IH^`i@ZH>ywZt1 zv!h^ln2P#(N}%z{>?SYxh%&ngK8q;!5?yKBpNsZ&rT0Kzi(FTl0osY&-MIH)oL8cL z+<6v#JdfIWP=|}1Cz|}Ix@ga|{A{M-#%HE`b@9c&cg-|fFZpZt^D-HF`ij`AWSE(+ ziM>vS5q(4KO)|{Lx5VBi!!G}h*iXssz2ANJ@7>x(efZhmV=epF@cIE>f9PK$GR7MJ zuU7FjFB+Yp^%O0$UR_&1%J){R@}60-=tpM7BJ#|N#mdjDSd4jQ#iGZV6$|~$dc`;o z#bkWs`49H*tycB7SgpF!i2ToJUsoEL--=wTTdORyx-m~Os~Z)wSlx@XsCl{+?Z?#$ zJDJsrwO6dxZv{ITmv2Wqy3*&*I!(H}x>6oCqJBJ8I^t(avAVaZqYUlD7V%Vxk=cv< z4}(5_i{g(W*Olg|&YtdWJcVM!4x)ZN*ufrj7>V49(jC@ zh`M_j`Bl(|{p-l@0!MX-xO~z0Nm!#3)x9bf&3;r(b&7txqJH_J@q52UE%A-8PuO-F z#fzC+4kKPSKI1jY59UU+<1SwO2lv15yw6{|pO?u{L0%F2G11nDW^sCS2cf9!zap_YL32TYPqxQ`;e*T$aYc9V|B({K8O*;>WtZP z7e4^F!HKyw0CPe}1bN+32Nw@$*zWXXj()?p_97{6}xB z*6+Xh{gS_SKQDW!Gx#fFKPJP>`-#}AWLWvHi9zZ_`Tu&>jQ?|AXu-9EVpwngTP-1V zx_Dg-Qr6xOd(+D&wcqx?k^Pp~+hnl!j@VDh?)CWHe{{Q&GvPD%vwy@sRwD0#yzdFD zeSp^=`qz!d67$tt_2$Q))(#c2m5&1 zIS_f=f9gIPBaz4b2jiXDe-Qt@{YPh?sc0weKgeZf|3M`#_Mc}%oXFc(qn-J{vF|NJ z9(N_!$?Qt-tG&pz(jKF8L1vG^JDAKKwc2XT*)hs-Vm zOPO5;Gdr`(Afof=A-)H|Uu@0nGWaVw*HJ(2GME#O-eurD8Y^GKRab`by76v-ag4g< zi^g>neJHEPYpu2Tx_qHiY#GJt#?K}&KcjB>qOm`x*`T5~x~tk(e32cE z7yrqr#5*tfSMKL!QuOT=u~*5E-`B)mC&OBNL+nj5XT|sLEz!42n(v7Hl!%CLTCs;nNb8=q8AiG4r# z6L$xCFm+%>HCGV)yP8+s3-zx9yW zA29neyMruc_6Lk}W`97XJBYEy{Q*@vvpYcl5xWDjo!K2=C$l@?1d!Ps5PxQOc(y?u z!??w+l`k4s@kTb4;j*!K-Du@DUh|EsJVrZuDPJ`9*r@-F`iOa5b`!5v_u}jFMdMw} z?t|WGmrcd%#x@)6e%KYFo$|$#+P%+&U;JmMp!Z}i`D^#{GMT&bGwc=7ACsPW_7kyJ z$uM(Y6MLNunS4X+O)^CGme|{57>#$teoBUw!&vzLcmLV#JN(q+pRqIf*NX2wkoP@7 zra!>z5B=-hNay#8#;YRyK4v*2UhA_^9}9n)14myoyNLBkh->FFo7qQnC$p32&Lj2` zjMM;QbpMY#2{M=2NpK=Ac9QsR1(_}0t^5yKjAQcU=s{QUj`kvVKkiDXhmYEo@FXO& zD`DPbb|vh@3o)j+D`AY5BG;AX!q+3$mG;};ja*lnQOl9X_dZwynfE@(c4luwoSD51 z{mSfY7|qPihLv&<txuy-Vl3} z3~S~svA4;vF5VIQDVg(@X7=5GiMz_bU{~?4VedV>e&4^w8vX#UKlHEf^{m`4_A36r zagOjeRf?g0%4TZQ6ph3k#S!0wmUu^3YVpa)b)_@(ry_6VmGm?3WH4`w9Y|N&M?W3y z=;}!g|8DPRB9HHU9PyE6b}aNcvtOx2U$hmUqamh&$On1#q=r3tDDq)msbY;p9(OFv zonps|yAS5dMAV<;mDbu+~>RvumJ2Wp)j$tjw-~OdrH}Vy#D}i%NeI`h`rKM*XwEo%B7(RCHACOhs3VOif2j znVOD@5nY!r^3NTp(fAW%_$r%<*NvZ;HHrm0akNvuXl%1lESOJaQ}Md-ldnea8R~w- zqMhLna2Iow$#w2lsX|jc8^k!>0?G zoeXs-vy+|pIaKUq@slF-cqT>^cR0-Axya+QJ$m9No6_VNC5Km@*Q;+`(b~vn= z%npayvKJ%W=at6tAo94w;cQUsa7RJkNuRsp*dp$I7|qPyhdyU^KAd|pJ0I+1_C0yN zjh^p#)%e@1=yz;VzWAs$jJZ&55U(@edN18W{PA`9B410W(Wp{4-oIUYbEj%t;~Ta7 zsO)_Fykb6-)AHiKxmS7@@shuGKQEJEeZ3;~Dj7V#CiXfR*5?~yZ+fYoza{oI^{^wn zBldsD5YPW7_EWNZWB=~Ix&47p+x`vviGS_gxV7*e$orlk-VgBl!`Om7ivPFXFWt+_ zN3`H=%^M#Jf8u_EJ~Tyczh{a&iqrM|dDNbQoMiSCtb$@s(Uo%et1&8FDRaf&Gw7v; zelJBkk7IG~z(@{6J8|zouQNLbMkcd!ApXqGf%=!(Ip8<5bGS%+?q*^{aqrNb%IELJhOWs8ynHXHm_8_b|T*m+)3YyVxNfn0W4+q1H6C9>;}kF zW;Z|&GP?onXLbWcbRA>8Nn*|H2aQf&_s*`-aQ@kN@Ybe(`!1@-i^f$Ql_~0$FB<>O z5b{x0kJpXc;baqa%NLE?VJ?={ah{ZFTkm;AN+d712aultJF zkICF!Pk$o%Dk*aFn%L`Pct-Vx*qdaSYj26YO@=D_j@VDh@c9j6;s4+L_oBN0?B7xE zOXNL}_dUVv{{XK)^sgI@8Y)oqlKb_1BMcvnx)|7si zum;oaYasow#$n;4_-pIS@}~=fId{b`EFRTgvPmSksr$^A)c&Hkq9R zo-_LfDo`|2zG%FTfeM>afns{l8ciO`p#MTk{W1lps_AA51yMp-F%<#VB zyMY+bV2BedJF`Ey`#yh}9RllUEL!@=&qida*db!Y*PTqw$G$ihea!PJ&XR?AC+-Cp z(ac_eT|BcFARlYd&U)~G-evXzoE|fK0jfi0FM$2bUI6Hjdi5W^_fGjc3ED{<(A6`w4*$CfnLPzP$m}V| zM08ueXuPNRAncWm9jt6DUN_!xFi)ax`J(aJ6_=9(C+>dc@~8ab9%fFpJQDjjvwTzYiMXek8&TR1|3XqIM&kKjK-CP>`x1sf#xt8f#R@A0>xo8-a>Jhoj`HOEP>)M z3xVQLZ=g8pS=Ai>CKo*z`5u=PLCTa$%hLP=8pR0BMx!pIXz8VlTD3?TqMQ+E2z?7Q zM19L)hmO5$*WX9)y8l>PL#@cL*A|U;Sngfh8GmA1+QMjt_05!-rdQW~OM5kvC8lZ3 z$cSG5i^;P*B{Ms{Ze}i7Xp7j}jprS4cQZ#X?uomfIqowahPWa(EI>o>mqUWb_t^dd#JnFO!m)Kk)rFU!X7C*DKoT0>smS`sgO2Re%gvZ%c;!OAVE{tEG zBwXPK_b&7~P?A)S_24bEgqo|CNCC9^M-)Ik4itb93hq&+tUc#_BwQERg@G=xV*_1K z&)!-YRL&dF8vR{3vah}9Ou4gnr_jrfjG@=k8e07=<#zwBh4FXa)|jam@A^cK%-2?Q z{U;Oh+HM$1ubTtxEwQ%;*gInH4zTyc-XCBeh<%t@cE}@fj|V)Ti2d!%GD5#2j(2^F z^r<-BgSGPEPo_LhJ;+xhoxKl~qXI+owD1;6q0?dZ8Z zth>YaA;af$!TudKt@j#QL!avenn9VW8Si}WL2i?>q?+}8VU3`aCGoB?+)D%+!>$=o z7>!1tFU)tKFU(A!FI*eEmA()u&==N5pe|&Z5p~gu3)F=k1nQDT%U0KJpGW;AipFA( z^Rl#h1KlA@1-iqXb)Y-w+KB3?-lJZxEImQ`l=I)0E%_gF-al7i0q;e^q>mB}8?__C&e#mP+l`XY&W*z+V*g7`kC)%X7One{a)-P{K*eA0Q>26|AnK^ma=fd;5W!QGI~ zocB6pX}$l5^FNv`{bkAp=Vi%1&ii=DTleyf?_HYn)q*UPdTJ{w$V1HGNET9ttvSeZiXsJBWy)%pO;-7AnFUtGHJ=4ps@v(- z=s&?so}GQuyQ=J$?B#~um2+=}Gg@ue-0t_072&?E(a)Oi-uqq;Sv_qd+zzts^}n3X zYIbj!onANXU0L*&xZ9aC=d_~kh`rl*-V=A<-ale_!k%_N5c@EDGQy9vF1DP*Pi5|h0ZT3{*2FJ=a&?oyt~wSzal+jW4GLSS>F4P`x#lvyusfuBu|UA z(o3w$md6_RGv8Rw(7R7KFH2V>y4Fo+WohNDasRa?&Xm=>&iPqY3#oAa({DiLU!&P;e2S1)F}s+X%2bp$HKw^;&}V*Czz{6pDN9tl)REjsEY zX1rQv-AuawRH;FcMwCi(6zCLf9nmRenLwvl$$?6-gD!iEt_-#4s-JPApI6Z^_iYVd zxh?7TOlN!FKw|zqQfu_C#{0UOqS(r9gSp*TBxc5aTcbR=F6nCU+`Et5^m^Ry<6Ehf zH#WG&zy4R!S=DvJ?DV>6?>?)y#NN)H>6HD3{T;D)voG^_Pu%^?F)9zl@vgh|FNxz_ zpB4XxINp_8ABuZy?`r!Kaj*VLQZ8zJ{Z~xc-WVRdGSGQDIr0iL-JSYRw8%_#am~ra zbcYn^7NZd87Q1&uxAcTG(5+ODt?EFzSPRmtZX<{_vzD&>wm>qCU!Vf%>GDTaN?%VMUJU5C3b0m3RvUVqaGM(cMt*yF2}C*UPWH zrzC^j4CMUfHzcD=cEr9;-8MDgU8r=?bwmC<+x(HlB$X#!tAjBC_5TAwFXo$2z zE1_zI-?6X?#=Y^<3T2ly&inlbdydR}cM8h1DG>3#wLi#qTd@=W%b(iP9cc=A`peg{Pe-oj+B0 z^y97aJ1rf_@A|&oMX%vfsR94X&inlZ>omyjwA9^Oqkl!kh_vo*_cK)Q_eekJc7LWu^ZrkzlDd|@VRm}m%v`c;v~G#Lomtk- z9dUOvM>fAF?tbQI{{wLkGsg%&68AWBO?;rkD%IuVW{!=J{VeU#_f?xfV ze{%`^#?FsKp{MUUlkCP!e|3T(4+eDM5~z@4P=lL-hhBp|^pK z@WgPb$MI)qjM;MM{Z54T1nNS20(D`o)_5FO7jo)bsSE2ZP#0R|`fWP>Z4GT8DDqbsv1#N8(7~Y5!5@U0v7@fx0A5+l_&~5Gl|X#`>-FMRf!U zgT@C6qY{C}(2qc4$Q9o0*63fWu?|{yw`aA-+`BdUC8s)CF}>pT?*cyP#O!^x!DzNk zce~$*cRzEq;(@q_ znPZha68AWBs`-i7rdr5}Z%EL_G|2a#Ha^Jr?8ln#Kc;~BFJScvO5$YcE-BCf;siQ?o&-9;I0ibv zT#x5gq~nZt8E>xx)DY;v75lU;&;fQ#paaa^4sWU7Wv~h-ocFs7`~w{zexL)aqk7li zPnXWvOdj<3t`CW^Gl4?rOrQ~HO`s9X&ZO7jcOZ%sXav1`D~(|00)^mP^npS!9)Uhg zS+4_qpby@K*64rsp+2?+-1hzMOl$P-^?U6}QLGnjFt__rdnJS1+eBp_IBt#pb!bm_ znbS6u+x=d!2i&(c`h6HFcm1bRVX4Rsv(xKl=8|P&d`s+|%(8C3AntDF*unS2-On67 zdm!#%=BWLVxW|p(6LC*7H=>Ro{P0O(aUxNdEK!KFAzgf1mXL=dvXQ z4)O-$7vv3QF31}x-aBND-mW1Nd4pR+SMM$5c7JCiw@zmGbm!c={_m*0X9>N}Z@B{S zUbV*PS{*#w%No;<_nff<)Aru4F58OS?&XwsFF8{$N3y{6zn)s89d^U)^tze3WLe*C ziRE1x;B(@5*Pj2pxZ4Az?})vdSw`}nxcdX155ztkU>}KnJitB?`!us$hv&BE;6<<9#v5^4ypjnS%c_g`J&Fd}Q5_h%$z&~?uH6L_x4 zH#ons#Ni4hxH4vTwz&V+;!nQY=KS`;)BfPfm@9_~_up0gsdu;Y{)B`X+w1(k;!nNx z%Gj@fSyhMK|48v?9F98gPe`aYxcbF^(*37O95nQ#^R8g{2MWe~1qw!{3=|CiK*3Ut zwt}jLT`MhOB)mbb(ccS$`)#mXZ-0&ag{v1G-ot((8GVK8)z|wrJ*%v(#_iyLb!*Ng zb6VZ#_oAnM{itt!_WIvQMO;yC7)r03nWg8q#NEyuE8&i~`;FfNaSt=6mOK*sIJ1oN z6LC)mJaf(Y_~GA3xf&gN{x`_&hFQ%o!LJOHU0#FV7#_Uu(Y1LS)$RW1kLYJpj-BJU zHTp4=XJ;)i&VgdEVn-B1s#g`ml|i*E_I54FmJ}dR25JtJL6HJ&AO{87K+X-cfwdfH z1350x21Y;72DNBJ9i*RuIxtsN9X#99=OEjwhMMmWl+mM22Qx}X*8%z#=m0A<&;ivD zC;>AaD1k}@TEJh`1X@7G4YYvK2(*CxT(v-!GU<X| z?~20ib-FeBp9l7GV^3{T4V@j>E7{xgBUh!~k$(Q^x2Au#*PdSPVvTwGT4OkO4xa0c zO)qAzoxO5on6?RS_w{|G@7MokDycFz%ucVHnPXMn5_daul)oeHZsy1p_r!hpHc#{(T<^;RA6I}c`H zp+|Rp;jeT9b)n5m-QVv!5@TZ(=nL~7s0(8ks0(Tls0*r7)y3}^RCAyTTv=9C@TckI z(+Tf`-!ss+-Ojs;u(|^kVXUi$xK_~PKr4t-wcU5`7h7|R_d(vK&lz& zL8{T_tSW+Mct#?~@XSGw;pv%opf!B0wxrwrPoxH~^1M(o`d45*z3IhFfjhd<>*Gj1 z^2YXB+IwcyE7!jl>9vKG>1}I`z7qHHG`pY;<#zwMSJ1=je=C)hLftSsy>4cX6?sb> z@4m7=C-(E%ll*a89PjRVN9^6~$&B6;cRzEC-UD$DGnZOn>*A5v$C+gpJ`wjcb0g#Q z;onLsK|Rm^7Aj&Gub1FghFO!Z!EX$!zTE$Ge0R;JjUJ~p)GDhhzvkpOwJuN)Vg(A4 z%Gu}y8p2Ej8bV$RG=y;q6om0v=`CGdT8e+56#S2=RVn-#6&kp~9bQ6zfvqcxKk2+IWeh1+Ix9=pk_|7-9Y!-Hepzb1L#c5NPuq2uu1S+u9MM{7aXz3G0Jh)fyi9wQZ~9xHUQ*SREH zYEz(k>Adx1xtCZmP@?MIs=_mhWzm>7!`C?X}QBD!AD)BMhqZmwTXd|nl#vM3N0BDI#F&Er0}t|E-Y8t2z$OW&`k8sc|V zjLru4_q(bo+fSREcg^7w^+0nN%|LTlFM;OZKjHCRbEtQ>^ZJ`QjsG6!WoajjXp#J9 z)}rsp5fw*wONsOQCfXy#O1vz^50oqU*vM7wlI8pJQ@O@;l%?yW?{i+3_Lj6Soplvt zO#~{)nwa!BQ`yp$=Sk;J6`r|2?Y!SPO{b0c2inNh>1B^2ZB*_El(DzV8E+5O8vX0Z zUd$AwqYm#{W3ODl#*zPD)Vn$SD;0hs8Cs()b^Y(alT&V(onANX-LFe-iM^dY*^PI^ z-OU`C=bpIxncHRK^+4Ri%rX0q#68X&EAffArs zj$5Pm{losX1fvsZ6!S2mMrwOiqmSlRXs3U*w@H?M!(E>mrL(d$MuB=w_w0}M1nNcR zS?=|&$d-QFI#4e%MpZBWMJv{#v@FGNRU;z>s>U7+RE>59s>U~9168BHfvQpOHt*N= zY-#)hRZHh>=Tu#jrB4z^exXq_Q1#ArO_4^FO?3y#MxPIQTV26eTO$glD}q45h$GcX z(Oh-ZqCj`JADr}>U3Z8S=#C;)yq}S!ef1;G%hHwVk2)_)--5f~ zysY=eSQ~-5vEKuA;|eBFH`cI+Z;gHq=zYtYy4p}~>xqct*6^&^l5Q(wI&O{rQ@ozm zvfA2EZujqOd*xV19;Y>C>f!XcIvBU>e>a8ph&K$S*Uik5v2KaGn>pHbPu%^?kqIA& zdzd-;_DJ00%uQLIcp~m;=1`qyf7dkf!@pZK?>Wp1V~F$;{HpPI4fDpB!E1~D9QRgg zZ_F9hu{=EKI44`mWr14ZU)9Rh$I7Nr2=s@3F7_I}E?ZhbOPrUbngd;;hakqRP=uh&r9s~+R4*~^3Q8sxEo3rJsF3=$A4m3!0R~6b-Vo{=MiY#eR{q+)Q zjYcm}8r2YJjm{j*HKyaCY-zm(s-hBst}y0-s-Ve}UW2O&BYV<$znfvMtER}3UjAA4 zm!+2eIp<|*ZAg*Q*-vK=#nJy^kvJ)nMo(&#_zT59z1!Ld6onpCMac!yv7aFo&%Iki zt!pW_`#GSOA$vJs@L9iCmJDCZE$Q}G=3D3~yp6Tj(i;8#vsYSoxBD9SiQxa8%SHX( z%OkZ${KPDK1haVk@1;{JbHnWPx|umzeoNfvGRKU4Ufk`>r4lwacf{TuVDE{&pIP?e z191;C$KB;4agQ^nm`}t$%`8_b&;B0z_4gY6f_Y&K?RyDMM_(!b3+9zE?BdtpH--o2 zr~eF~_syZ+I!CkX;*p+t>*nTRPse%LQY+>=@AqGfUvU4GJZ%o7dE0XT|Lh2qPBjEtNACiy<7(qAw2s+b=Y3wEEgz*o>(r(|?T8g<9houEI>xms-Oi!9 zC%jdzf!vc+4fOje*1=x)m!&NJ|2Qv8^YdNK%aZ>-=Vi(NtrYWpTN#03(&ws|vZN7u zc9`myr54qvh<@M3o(uGq6*lQTaD64S2l~p$op%2-+0y3|XPx&uHvC6)@grj&Smq2= zk#=78I9E#ijrMu?Rp+l2KD~ExKBMP_T0zsxH*^1PK~|KwfZHwxA1ye!*^Fp zy4`Q>nNC|-a~`KPW~z}L+7@tIPoEsOhVHIg%I$tHSf%cpjO%|t9lVt{45io2%+jx0 z;%;Y-{C7v(-ORDp?uomfIm$i|_ptGMB<^wMQf)S}PsBcLJfHo2)4t#R`$@N0{r?mE z!te)H<|X*|4AZYy;B?d&yavB9Josr`f6exuR?^cvMngxnG0;8Q9;hCBYQBeAkS(ct zpkb`QK*Of{3=I8V?(tWY_8jrKK#9=JfIlsQ}tdQC0my}G`WBNW} ziXux_jDO5)@Vh&%Y687Wp0+Nwd5P`W($ngyc&=;od1hUc9%_5gcF?A^?=cJ7J0Z||Cq2jU)PKUT~magQ@+&X)hhK5aao{VexBKbt;%N?!I$ z_|IWp{A|kT#Ci#SWtee$4NlHq&J0Xhds2+iS6^FcK`l5Zm-qP&6o3pJC;%%fPynup z0tHAlS(}%7i&qWRJ?>{#XUp%ZgS?(RELxD+>0yxB$wA8IskG;5MG7)CD<;U(?9`g4 z|3q%Bv{m;hiSs)a;!I?(bo};gY4!a{=XYgG^B3fMcF11$SHAbT3o?H4wNVOkzRm<$ zpVkIhpK%RxKKp&rTQ!v}Wu=*O{+Z&h7M=A-t_HNIs(~zxU+^gq^E2`(ko+%rd|4Xr zi_W{+(BnXDSV?cGHR_#L(i%R4E$Oz_mE+bJ{{HRYxp&RPsCXO7?f$1(jEnoWhQ_|7 z-0s~&^vg|ka$v9T)3;O4qP%Ub(SM4UJcnCz{U0RK=k|u7^tzc@+HgzU?E%j_V((^_ z{CiK_{mik#ABcOHx%aL9N8)}nb86LZiG6JE8q+7@o@P(l^Xwm>W&fZk)pPI*!|cJA z;8%vJ?KSv~Vbzr0@@tgwQ_0Y`6I#mcnMx){>#5b4U;c!S{Te70Z4Z=6krsQTCD~GM zt5Pj1Ja-w(-T&i-r-rY0-tS@(V{KjOXJ*tqjqDmP;de5M6)2w0RL%S5Tw0m!TRfI5 zt$>ZrZyoRt6p!6h70;C|m9zd;ZF3D{eeCuc{8=0;H_$My8Uh7l!~^}}-eg3*)U!an z=s}=f)BSIg>e)%}!KrNd>OAddT)~JH=$B$u1#{&gg9XZ?5>6feWx zGwFUln0_bq%T2$J`sEn?Y5LIn9KM%hdaJ4TO|+gCpwH8^bELlO|1f##8vBOX>2))6 z?3-KSZfB12cf{S#9P{u%+{4V#=SSk6W-djxRr>57vNQi-+Ih^xbMOnp@^}gJd&Us^ z6*wKWGhc(vIsY2^{{g3?M|hJxj2Y~4Uk#>TQT@9twL86yzWU!r?$yZi_8^=mh1XsK0*Mvv%Yg+U$xTaO4{a)fgwzL+5t6E0&u=^h={>)r( zRm;i`u4+>`>%*i+@~1NN;jOM}8K<)z>0D`(>IklCDN*%7mVV2+{%YB!5{Wqtbc3Am z*1Ew;^X9gOuacH@d#1C!teb+^czdkY7|sfV=e{x}``R+SCe1Vky$sS*-FHnSuP`-<0c6!~+9R0l|?sn$VSz8Bp#NN#;d+wgN z`c|{KhaDDfgT5z3*G~X6xN|WpA}Ivf6g*Ka!i7_uB@cjn3NI-6WJe{d$?T zQWb7qi9&2$JtuCu>uCQTn8i$UAAA#x9!NQpmuo0Bk7%gx!9Yb-$I|qkU$XR9H-FIi zW!chdU+%m=nPRS1I`4X%80*EjpZUgY>1yZ`&P%CPLsjav#h-68taE=?@WfaRfrhh2 z0tII#ws@rfJ6o#xk2~+m&UgpPPW(XE*#i?EXIHj#-?H2JJ%vy2)`PcFe8xLaeAd8W zufr9eJ_m|VoIvsE^Q6ady~jV$d-m~Z_dk;@-M^2hy~aAwdfIu>S|sy1OXH zIBt!1&FcNT=)oK|SYI!@uwGhsw|n0m&{(-|YxJLhF_x{n+x=^Z>C5%o!rJgUTBAQl ztl8Gx?fz#Zy>H902R%+}1Y>snA14R3@rK#ybu)9+aZB9o%rQQ9#NEx@8C#wA#Cqxcm05`>6-w9%etvJ`(qvnd8dnx5Pcp9Q8gC_cU`BG}ZjA&`kp0q8ma@rL zIWNmgNNdx1SKVaW_{{e*u9jr1KrQLvY_w9E=(Sf>l%nwd53@7k9b z>%}@h99Fzgt9m$DMawdI~j)Rle(>dH6-+R6-!Xsg;&we|hnGOaCr z4=`~%3(vSsWR#AwbVd8^&dc)bQ@;}^OEv8B60-Dp)`)tmrF-3fU$%6uShf4RGcW%? z<^HbethuV`uHB4ipxr5gt+_zG8S6m3sbSJ1z-H}W4T6ed#vmCcZf5f%o+5&FB zduw{5#&x&X(Hi}h2IF@9pQPem>V~28x@qs~*DZ0kvnRXgj<~y-o3gcWPu%^?v6~-= zdzv}!tDpT7l>46~B_`H$@C(D=ZgF0MUm50m1h2tw3|pg;M{Z*}zWY<6;Yc2ms5)CK zlBI7EeZ;+Wr>t3?1~}VZKYmmV&bHNy6*{8 zkc=Cspn4YQAT6C)2c?M0qd)E~m8H?v_ZQPy*G)2A)y)rbN%>1f6X$wLk4N-W{$6cs zynAl%D@LkgARi6Z$*)qkl-s_-oN0}j&N3fu0k`{iyFIO){;x>qjQzh~-R4}cEE&VU zt2cNqq0Z>^zB@Rgeb@gfwXv6On4MlXGnb$9iu+vVDF1nJyz5H)wm9B3T6e_V&1G3# z_r%?|cde`k;vQx{^4}wIk26QvC*q!Fj3LHnA20ZK9T{O-ph>jqHd5spjQgv)@A|#(G#a$hAgi zs@muor(#ttkfl-iq}L%!_mSV`{Pt{V^aJf+Z&c-wrFv&`fA$s86t43EP0=_7s=^i3 zQSbM$(r;E-pel+q=_OoO7?D6%xO)q9MUet!q3#h~(HvD>@&CJ!KGgraP?oOsbQhLt z^ZPOUFMAKB(-pt(ntr$R@~75mq;2BZ^ZgmS>!`;$R^m_h^pbif-G8e1)6PIg(|POhTPUeA#)y(ieX5dPDRnb; zSG`THfV9c!)(D;u`RTrr^)h`5(aGlQaId8``u7)%c?q)8PuwL8~dq1;hjC&yNVdnBZ zj=0B}LpPp?dzv|Fe)i8zOaA*mFMsRwKfvjz=Xf82)A7AA{+GY!;1`B>S=}$euMAVi zYw#PxgI7ZG&wU>{dQKYRGweSvWUKq zmY%%6@9o){E%hMK4Q40M4aPLk4cZy#208Sg*L$eci&h?X{z&1|yUk{x9Q63OmpD;M zFmi!%C{opqKbuQv4*r}+I#VK{O=q1yS9tmm=msmY>W1G@@l55i$8kNu|Elw@C(~b# z_wS5SBpWLa*c!c({hZ1EYeTv1JHeUO=;sys-nzT}?te?jym*|}n5m^btzkX2!QAfa zVsh)u#>lUt#ZapqXtPsBaV zoa%Y@FSv{O7fC4?(dXbdhUJmo@@tgwQ_1LmgEBcxJ3i`NUCMKY>I?LPT{GY7Urfv`7l#rIBa?%LteV`GvG|&j*1R9ZI z+K5+`&>e-(V(^5IUQ0DndDjWn)P(nLSGGJ-RSH>BobT`wvUI=oozBbB^DNz;q_eW* zA1Dr^5hzY7YrPIMM`r@nVa-&{k){3qDQ~MRWxDTkUY7RHG3R9|!&U8)<)iogUP6|i z`2j!UdY2gM-=v?J%9fX@igzlX(OjJN60Ue;zQwuf zyldXzHL0IZMo+oCk8J_B`*&ZxyiTt?PHX7NPD{Dndv@2?SVqg^v_|iDDEcvb_hr5M zxEgMo;CBD-r}_4;`?f|nOV@uPx%inIhSKYHX342{#C;)iKWHoG*Tmh;99O0H#PO~< z|Dw42*>9JXeIV{(=E!W1#68X&@t%l#nmN|VvtK|He<5igPqLnaU;IM)e&lEEFSB2Q zU)g!;dJTSKIQ7bE&;3isQN~Zr;_Tr6NitZHPe^M;u9>Was+g{f&mTxSx@w9j#}2>FkQ^;U!jj30G6DLdTt-g_kV@>qBi>9u>!TB-l{eiO8e8h&0L@=|J|bf9z3$x_{Soc0Ls}SQd({@?dz}d~zRoQ6migy4 zti77^^_S2ZpFiaOva}wTIWJ3B&QgYSb`}{wdD$%2oWC|l)$_|Bue1Jwtj^qR@;3SB zFs#8X&MVtXo!%BYy!V{~*)j zUo-u&T$5J6?m`mhnVx(WWcn$anIO~SA7uIu%sP zge|zM=;dR^A_pEis-7V>!Lugt-mTH^Nw3D< z6T#l7vb)Yg~>^{Lwz z#qq8>eq9{z8oB%8c=uL55c|;HRr-;*rt$n#BwP(NA>uN^5(y(;)Q1NH{54-=7 z!jl0;)Jgpc)QS0>^f-PWLYzRI@DJ1}MHtklbEQSh>ghpG^?K!c_h*Cu6OcDD8U5>UR&wj^ zc5vl?{a+K0Ilp0cdfmz#>*;giZfA~Nct_m*%rW;5#68R$Wgm%qoH@qmiMXekOSRc* ze)g|Xf`45z`E!^T#*oQhf?pY?4X?p(3=e8?|F5o8U+(A7vAEQUj}Pjo0k=DD+{S^R5l#&_Ek_ z@+d_}rIgcMV@I+&-)yu06(z{)%wCY!QP2r*)2?hOYwdR4^F8-RLB6MNLB3BBY~=+R zUuS}xPppxguN66x^S#$W)+Z;|tpCHMcg*!E@0~1Np9E?^ZaM4zt_A8tpax`zKn>2= zXas6Nivl%ZEWF~@@O99VZV&HQKaq@?O7=2ouRXntxXb$8Hp1=UYe+vqOMCV8Vy42K z8hcTDz3AO@^jh;)BYOSc&~w^x!|e3>mCVuZUlqr@^4v{vyz6PjEpeZ-_c>#yZ9G0N z?zX+_Ug(avyV-A*eRgqA-2Lpw>U<#XVdgAo@_Z!r@c{co?9&1E*}p-5{!LO7dh#6n z$}l7J8vMpE`y^G7Uti9O?ahn&;Pte|yMJ=WXw}8;cPr?^T(4tZwsf@+XdA1oDw{0* ziul)f99dckA9G$xsBh$rD53lVCFCk4P(nsBP(l=P-0O86WE=t=obJ~OSrZ#P&c)>^Wuqxg+jw<`}tq;_hdT>)Qw7 z9%hb_dL-^~=2)#y#68U%PavNCJ2L&h^GpwZVc43NTJaL*l`%wq4Sr*I@ZRy=@0L|l zdK-Ny7uTgW!@Y^FJZdiXoXeO78CSJ0_qzSlenxzy^ZxBFc2v!|YqN*uH^{7Hotjsb zN#$Sf5@e~zx@SnSXSjP%kAo~sJA)j|JdWgG#hLK_%F=h6gWo~min#u=jx5F5<#A+b z{p@yrPqx(GAdB<#G05VnoUP0tkF(c`RKuj7@w`u;gS@X2 zLFQ+)gUru*4D!Ar1(}~aiXiiUV51Ra{=xm}eX$D04p^C%a=X8exmR@G)_8BM_iazw z-nzT3`FGqJo`qV{?cogMCzA2yL}g~$U~c!dt=GrtzZKW(h4zxy-x|T4+x35+9JJ4F zn4MlXGe_HQiMyRSR{tGwcQc17+!J>{bCi7`?qTLqWLrUx#6BKipNM@rz&`u;XwAP* z%E2yr4t`;nmb?VNGR!`H4Sr)7oy+}6$NmZ>w)?imOsk1JT{p#?Tvl^F*CV+CF)s6+ z_qzeE9I68O-2m%qvHQC+u}=eKVpIZMVsxr5tuE~()2#9Mu1kzapi9hk)uoLkPI|Yw zl};t(SN!xKP#RhkC=GeHDvc`vBONFKBN`|HBN`|H?Fn>1J*Y|`OZ(|h=bomcEUmad zDTD3YjXt2KJV?DV>s zIri`^akn!^Cc7iG<9l{}-a;*68;=d3II>Ee)&v@Z|9r3ApHMMEBTuN*GAU6i<(hocCt|a z>`aQ#wxYFry4KH`to$~V+x<~ZZk=BC`oVhfT3VwwuEDcCFWN8HTW{|V_u=|~Oi|VI z8)m21&CDgsyl;uUoms~3j<~y-V`tqHcRzDv=m+8+W{$Ft#68ZOYI!2|x9wejhy6R^ zcvqjFisN0+i=O>Q?)Ls;xtn_qPDfXe--UT$3~hZ0er1>)_!|7iFuORlA;0>cgsJWB z-5SG@2G4Pq5oj~5nd`o;smxo|R9PCQ`Yi~*|D%_0rM1+&+-vqHlg!zO(rS+dI?HNb z<8l1XkR4K0_M5VY=0lpBI9Wb(8$6QVGm@t^Iq!Fj^f^#pYToAl+q0#a57d{H8)z?a zq_`=DYbhfaXle4X{j=X|K2U0AjU9CUP_{Itftuof)crqI;-q)0q5dVRo;Lck{y=Bx zMWC}o-x744o$ga6dVSX0bgs0CwpNvOHDy!-HDzUA_BdBc9O73s{UGxiqxx&z*NXq( zzV&#?=x5U8Fq{*;aQ_aeSL4WCNfWbIjy3GQtug#@t)T*r|`^bRT5d+KYzge=M{fe<$UL5$zS(^>8$PprEb!v#LJSu^eOSKNM!9m zk+@n}>h=1)AN`uO9_ea1&?D|E0zD#r)g#xPGd9kF>ZBIhnLu}RrYg@L&%M!D=q@mE zem}_i4-{$W8K&+B6{jkaEUm+lPs`*#@@bi`YTZqy7WsW8vma<1vleLE`!*I;*<@)S zeRuAEI?B>&slUh|OV7Ndi^<;=5;Yo8Nbfx5VAf9OdtbyPLUG!sg!_c(Km z`V(;<{->ly%KWL*LCiIqNJtFonW9(R6i;nTa7sA{pX zoSE)kL?x;wcfGyZ?ndOysZ+G={>(ZbJOCQx&01?b#U7K&tyy2fM=aQ zS9tu-JMVWewCJMqpDF&#+$HB_=^I~{o%cH%t~IYZ?+Qb`PPc~dik5V{pMR5^&6j(( zhJGQrrQDvW&R#Y^y**NEd^v4>f7*WZ^A>xwZG_u1^)We4TjzUY-}H`u72JQaOE&Ws zwubg_OI`oZ33)GW7)r03nPt7+68AZK_q_XgvAj!fZj0kxBYH>NU3>R>?uoshS?1+| zINp_oz9jBp_G5iN68AWBlzk%ZY37)(XaAXdx&NHhj(z0wUpbMC&#TZoTmoQ z_3C3+w(f2ZKk4!l$>`@g#;SF9yI+p0Blm5MemT}f>+be&e)ki}a5ZSj>;Hu_M7&{k zdfm(%dEu70yP0G5?}>YuIY#u6xW}1GQEVkX5&JZ=^!M3+LB0M<(jqeUbMOnpD)kcP zl`)if4Sv&jHKGMgT!HTw5ltfto8ZJ$49S|jM;b<48q!3|~H zo0&@|Y^-jHy`5RI(j9SkGsnufC+>0PRQie7ram7(p%kNwmi$I+i*G(R0 zbE%n}9HNs*0-zeI8K{t(-tTXiuOWwCA9=Q{i?@)NAUR6kz*7m17zARnee4q2O-W%gtwKOc9m8Cd=mNC+k9>=vT zF}7L)HDg@|YR25ptY#N-UFt#ApeuzZPM|cj)En9w{mh>{ttV{(x8MDnQJQ&=)EZyT zx8PHpPHTH(z?D_o47dAQ)UT1*_DHSq)Y|eq(rW9{RdW zu5A12cK;rbk*~{kPA;al%=I9yLp+Ol3mu|QQlAuUNr|7{Z3PAjLW=_ZP>Huv5LQ4{ zkhP`u_pR=A8Kt8?`=ahZLGTY0L~R<;5Utv(A@6u+qASWkTU2wPE;>{7#nnP*s$RG* zu==Ymcs^%5f_%<+1o@oZ5oB{#L6FVy53)Hc|9on1et9-m4{AR5=Tq##%U;6sJdtXi z|7`Zq`quqL;$-!%>Rg|_lGf-yol2gae9J0rgSq{cxufX+!UAi-ThJOaUDqsIp*M&xZ9aymERF}H*=|kwe_CZ`4ZLO`lLsaMV~*K+B)(COlxAh zm)KeAW|d7i@AoS7VYl;o(xq$IKu?(IKuw5q(Brt4u;K$HNuD;JftC;{&=MkzXo)gL zpe5Y#2U^1H2U@}io%bHhLQ5EnKuge=swJ}Ys|_D`4YGV+N^{crYuTs2A6b65_xj#z=ezbjHLIiLy{OzBd9PZdf9Ku%22H;;{jd%O(>JBGR)zlJ;6zD3wue!P>w^_6M ze|ZmNspdc8yg&bAO>c1in+M{2i}TWL#i_czwfK|IrOAnty82k}@JOzc(OdZkdQ0{X^p-vcddn4Xpth{gm&1FUNAQ)~2}j`hl=D4lhY z&UU`L*z03IZg1qKUvK?ce0L@6&Hwa$?63Y_4}0^$+8Fz9b~ildzomOw>YodqXPEQz z!3zv)oEO3@@e)hH%M7!kmV;LrrnlqZ)rM)!8t_`fjQ=|Ddc*9-4d9K2$%vc4n++3h z3wY~)EBEKyz}xNoq-C-l;GOP20p4Yp`gVi&7$*K+@IJ%p;eMC{4Ra9YkTGQ4!{9${ zm}|Q~13uzyIto5!=jqdN@Cm~_W0(X_`T3LJQ-D2#`vS*IoH#QC!fy+&oit@^I;Y=%tDxt8N%i-;m*?qGfx|lRXWseR`L)R)m-kAW{Nl4*323E*17rq zsf`%TN;J0gBwL{J`28P=j(cgOVC)_jhznS%C4EoFS#r4wVp9sc3taPt{z*i zT=leE*-I@~_EO75@%Tm-{YnSkHF5)7%`$DgsE(4iTEA$#N(OHI%5OAQF0PlEA823w zG_sbh&$nAH8mnkrBEOQ0+IaML>{qz!{FSl_=Yr=MPR+D6Fdt@tG0fmX@FK(1v>5!g zzf!W**MXPVc~oR6cv%y1Im`-Un1_|%Z!paG{9$l9Y7AF_(@}eK9K6~vEm#9yYnbbV zb>Q`e*#jHE8x1pFo4}h5GX`70I}J166X0Ebem8iJVU5XNnC~)%7VHD3qprI4gAX(% z4#FHVhCUw#A2H0_90eaUOq-5_PZ-YEW#B2p+_#ZL~~MdR9kagI%cEso_)-c>D$_)h|yR?<2YJ#&6;f;%<0&#lBs?* ztyc2NT<`+Jv}+-Fkzsc6V(=38UkYAkn0U*t6^q)8#odKjGR&AB1|RYAN5Sc+dHNJM9hF(X4}8opBXS&k z!m!3{5@yO6T6_|G$}lZH4L)OdzFk$F1)uZt=fM{YGsYLeR}2&HD)^e=vVUMw^~RO# z&~ioNTdwY&mMvFQEf;&1)!us2UfPikysOPaT!P9aZRwK3S}yjC*|OK#@=?#r9&i1k zk&Jp6jZeuBZM>*2QM|Y((HzQijGvmDb2H5}@#caT7-sYrg40p!^J~EADF2Uv(^21w zTm()>t;WURC59QhrQl^AZ#j5{VfwuiyvndzI1aPg82YgWyteUJ2eaNiHh{MpW)8Q3 zw;QGnJHR^))8`5BF2kyGH_V=!W!LTn?=uftxgUJMBOC-DGR*bTVek>d-)<}ODEOFR zR>pDg_j~*w0H>oy`2;u}l{F^8Q+8f0JPC8kJx+tqmP!OIM@ zCzpd)xc^G}w7d+1}Et?PisA2ZdSA!RPu4K1`;6-+xUAP#Wj=DaBKKbmUSgQFwG_O}aLy~>6^6;A zE5WM_v!2GmYu$exc;n|wp4$Z8Z0A`+TfkdA-Zt=d!y2(2Fgx920=&yGBd{C1$1pA4 z3*Kj#`QHydU@cI@gD{88gK<3!K4O@$KMFo(m@z#LK4Dl9CSj(GVN_0n(@|^WhrsEm zzeDKzm{Gk9zG9daa}|8ea9Mvasd?^$oetv43TpjI z=4rXeFNM(FZarhR=xgg)GEK`xb(eiz{py~poW_KHr33G=U&#q=*|^nZAGV&eZFNzE zw(Mw6qE>4K5A;O)c8H5+d9>bm6r#42JL0y@@yL`MIO@zHL`;1{l><1q(%qSfMA2Q6II}AQzm^K~-A2U2ceT6GsaNkS@5~W<2=j-V;HB4;7g6iWtbl~hFX6DoR05}eZuZJuYl80=dXgV87^xK zCN;^pvR_)RWVV(otGne&25UJ+hS=%Ad);fTU)gIdm)w;-Tee&yv|Q|2@=)tp_FBtD z;}G>Fu4VQuXMPxibl^Q6i%~ya^$(P-d9m$FQHRRKbwp$H>0q>@wv=aIwGQooq4v#w zWXhFW8*#LB+>@v*t9Xq693~yrx{rXRFf%qnB(-8gu)VeXLEfYQ`eS&tjQ8x7OKP2kOj zRl^pTtsY?;czffq17?>otbyI&J&ng+n0>~uTlRww7^c>P;A2gR<1i2DRCO+j4|}=Ecl$^DI2Nt;0uOXZ5P3pnh2L+t{6idSHagjLK+Yl-sLmIm3`m( zmHWb$E4iTM$`w+}m6h0XjMz}U^l*ra>PRlyk!{47jmnoj-jc@XT=Gp@mVS(VfoDfwNNeDXjnrK5Jj2A94_;uHwl4&K%@@iJ{up?X zou@5}!AlI&ho#_UhBfNTVOBKEN|;r~FplHk)rM)~8t_^_zYe_KFm2iZ-e_2LY=YTr z46AGlc&lMXaT|EMVS2d(yt9cg0kg{(*4l3H9*?jWyss&-ALf9290VUSoUeVrM+`IL zN5RLM2*+Vg7{jOUli(@CJh3_nK4qA(JqU{MKzaQ)%ukk)N*mnQR$LjYU!$omDBhS^)Kp4 z$#renk{?>G?A?}&dK~p6YGM5beH(GK$5C1BfuY_-HP@Wq))IS`Y~FfCqf_qwTED4a z-HeV{+?TjD%+=Vhk=uT)?1#DFd4^SLKFk7Ra&`kR`n8nZc_$9=n=jiCLNW{R)Et{xo0JKmDey1UTs)ySOc@RVb;N{_c9y68x6CnHi0)c zCAPq9HHJN~4ZPh;>;V4>!;IZda5}1A6X0Ej8He5AJ%-iFy)gS4WK>eQRg>-HydVFwt%-9)<|rF*=`Iq?f~yJOfM(EyA0E--QYcjiMSWM&#)ryhdE#j z^L7w?$S`d_3_fC*eRLFj%rG?^2dAU_zaN~AdS>+l;3*%oli)LUo)(`4pEFDg&x0@c z`HSF7hH2kr@HO{O-GJfUdo{q;9Ws+=-CwO|S-UM)t{f{@e?hTw>f=Cb>NVX=eq|T7 ze&rgtu7Q<;u90jpwCa|5eX9V;`|6odY$; zvl7+JiW(|gvQe!go|PzG$@4RnO;zg3vGt51jKCHh?#J z`Ay)>hSjSrFk6k`T4)=1yJ5y`2Y9DpB2IvJ8K#B1!F#;?UhqD{jL?4Y0mG{CAj~0S zP{zaHBZjHrDEOFRve0qxi6+7%%v8giggIplx%f2rjA6$0Ecl$CKM%gpM7RiZ$r$=| z8GNPjxC(R4n6jE+Qn!rbTQu0|z`H(69pLH;Ys;3W%Pm)SZp$$~1M$?_Aud7ffwpwi z>aruNU);j7SE^tAOrvsfS!Qvdg*89dvNaR5T-=lLw|z5vmVDfLMkC8w9cZJk*CBS) zGwyXX+T}{HZB5j|xYsco^(LCF(OJ;m80ufN##Hmz7rA%-Vp{ED=E5v6hJGvrFEY$H zEe0 z+Z&G^FguN*jtTHC!;Iu^@E*flYwQIdaQ}ng@A+a;f$s(XX*6${1RB8hpkho&}$4N}PweU<_@z2)<-EU%P>?7$)LX@HNBqIaLh9 zdtKp`i~PL31En?YL)>UBHLtd{ly%#3QCWI9R7cr^ZQ10a+}N^Z)wf*9jV)I)b>-r* ziQ>gIGx|gAj`|n1raWJ(t(k5HM%x|FN>ocU15sb%k%&CwR=!R7XoTXLBF}Qi(2g5^ zW4}&@`}ML*=7Q%LR`mHW3yh(}LhvHP`HBv_%rG;%9K6CXt8pcG)vuRaF%DjB=NbDo z;I)Qnudk}oc&J+JI_=sVR&{3FU9^p9ngki4DCc#sNsqrNElwl&C2A?s^$~y}_XP8}e z9(=(tJ-!IO-*K%dw zS8ld-)aU#&l`VIuGx?PrUj6E|LCZzslDe;a+Io)mPP02ST9IGWnz)vdW!surLqoMh ze&ti2wru$vqU9pLXg*6WZp%h~v+Z%@H#+|D8jQ-8>%_Kw?8mYDi?ufAV$=o;`^JFgb6gGon4_@m%-R1dxhoQ_^%Jxn^Pjt$_A9$^zW9d+;Wt>Dex zhArT&O~h?5+Z$#F%uZt%rwQ<`#$z|k9%C5kz2JR~$9|YY#xVAW!N(ep<1i69jC!(8jrIu=ZqnToCjYp%o@1}PDi!#$H3{R=N_K{r=w>45;z@o{xbNA zpT7#eW|$VGX@ueZy|Hq?*K(tNHGft=ecyQ~-e_4p{TT8qd85XQ+n0(d2UgFhHCkIk zwJ@SXT-mKPo<@GaFRr8H&$evI2rXBxj$5uMM$1KIqaN4Kx!TetXSG~Zb5u*opKaM_ z?xGQlTUfs9`z{fqR`Zl^>;W0{L0Y}EWG?ut9+dnv51fvg|M}nrhSkc2FpG>~1{Q;t z7-l6b1urwqnp_TEVHn+630`HG7L0?_Q8j)ec(u1^4S21cXFS(|*Bd4SZvb!f^P9k% z4XedlV79u)Ht=?@VF!4pVV)vSfOmNfyTN8OnUJ>Yay z555(JEg(`lC}O!1ZA+Kj&~l8&P}wueXRY6C z%a+_VQ`wSTTfeBsQN1Orv}IAdp?-{xYR#E#*-<~OgQ0kQ=W2*6pG>sz%3o%-Tq+if zD*JCJV$_;w-lI{7Ml~A2xHVDfsDDul|S+(oH>kX?18(=ni4V%E5&4bz80^Zt`*aow`VRpdm{8G8@oB;1K4@PA- zc#qYgTKB^2GY@8SKlp%Q+ISN5FBoPmTm)Y+OuVb$Ylh1e0ZeLyar6p19mJJ2+xjt! z1Aa9Zw0_A&`?O`t9;#eax_;(U{pz)4%SEjoZDGwqZP~bm+|3R2Pitg|i)t?We&$-r z6;$gPMU2}xI*PtqhFYoeW4}S(_>HnQ=7Q%LX8q3xr=v#dqu_MZoyJ##(^38l!0D(@ z>=uF-8D=dm1}`zJ7A%EX;SpAXS2Z5vFsqH>Z%EgG*ESyOV7|#1o+qpar=!=h0cN8y z?14?-&4wAXE#R$&nX7H!orYO86X0EjnT_4xbkr*S4sbdu-gko2QRnx7(^1!Jd%^q6 zpK;y~KH&8o1RpV+vjq5<`yU6NFsyN$gqiXhPlC^Rg!AAF9^oSRl3}iiFN3cbriWL- z9~kCJ=d<8z9zRtJ!+YHcm8<)=a_Y@c*|KV@-|WjWdPDKbl}e3Qe_yoanAxGS2`W3a zp5=P2nSI30Dh z^M}FdsQOod({aw&XC zR%1ReybZkFFn!tq-f5UIn*i@J%oywj?=g(3>;>;L%oWvs@FBy*I}AQzm@z*JK4yK? zdOZ$v!aSITN$`|m`g9U}$|IfzpYe!i!RHKf1#uqyBZgJOkHTCqhEcl+zGQ9SyWf|= zSL{5y{3`fb6CnkH<6Th(IPc8>8+q1j)kZ9PpykT`sa###mGfQ>)y(J*aS199)$(!7 z*|kS&WT2KfUR1MI$Utc+=@3_*)7MtltIC!e?Q`6klK=W;xK2Ji9F+zb9L zJFj-_gGon?_kQpJ^Pt9q;6q-+VepYA!cmxG#!%;R@DCVfEKY#aQ8PRVp7Qf2!KVz< zhtuFQ-lDVMb9SB#>T`O7#X4!SjAI?e4F$=jQXl3+#LfY1wii%pzmx;bQQT#$zeWGGn;vSq@%dn3-D% zUS*is9S5&9%sN{KUT>InyaBw?Fk`R@yxGrh0dMv5+ra6l@}C56_wzfzJFSmgV@-f} z*?I02c7xMV?fnjLI?De$!Re^{vd#*AKEoQb{V>NG<~Ym=W9aiFc&hO@33IAp zPQ#orhH*IyK4+MfdLDeiFf(%zoQ`VukAc%sYN+;-nQMQl z##+<%f?|=8$+wsfY%ykY}bL;8%6~; zfHxXuTsDC>8|H3o3wWntdNcvvWmq-thS_5beb@`$XP6rIgAW)+5f6e78Kwn?!AERN z$W=$d$Lu^aa2$NXFtaoXK4q9OISoEzm>!%3pEFE*&Vw%)CRbksUouP&FN3cbW-nd^ zf7aV`4V;eNF-$9uf{z(y-5v*@Fif43;3>m=Z}B8J9sT*y55b)C66e7e z46BtFVJ;a%otME^4Abwc;18M-pM^AL7b-YyGHk$S*MJ=&s=;%?^9&Pv zK6rs)`nV9h$T00$3|?ZGX9Y{a%bs|S1Fx|2n#GkctBhftjDy!3p0Yi#0ld*LHEsfL zHO#1N1E-@_=_kSIsQvP7;O%yv^|b@M(=aWb0Pix)D%cH9N8L4j2RI!S?>oWis1e!& zPDiz8FL<9}Mr=R$fMN9YAo!5SI}AQz=jq>3@G--*?>P8`VU5@%%nuvG9GwEEqgr?x ze9q3Z{?CIiG!ZVse5PS8!K9Q`eY5NB7M#GHjCh%s%jMWzKR>O+84Q6}8?10(XFcUDle!Jw1 z-QaZ8J?(dZ(@|OQJHhFw>w`VubW|($g7+C_9QK0`7|!>L;6sMVvWLM(y!=t{F~eld zxLpme&w2=EgRR&hz><8fAiCp9__P_-caeN?vgRu zh+j^hN6W@DFzQ#ok>9o@8imoaQ62TUbQ>=o>(PkX5kn&w`IWodww7pA`Ihb2?~tp0 zC#_X>*j(^D!|Z_h;01=chhGR@WSG3N7`((VZCMIlW|%scgIDLL7-eZ{c zxfi_8uxi*3bHJFb_N$Et!G{bp28Y2%ni5B0ju}HQj)PA$9+NOr4RaFal$SXTK4X}E zoduus^XI`A4AY8>;B?f;{uuZ(hUw=ea60PzW$+cl>gQFMYsQp44UR)++ zHgm*st z>yDTUGp}Lh!z?g{8W(~W872=e1}|w!EQMKS3_EB!c!if(30`HGevO0I8fM(qf!7;m z#hbvJ-G2*st6|OVHkj=mVF!4pVMb^Iyvr~x*bUxem_F_W?=#HG*bhGB z0h4N)WT$^;|VW437#@c>rR4C8CHKz!<;jQ z_MQh{Xgn^$Try_L#^^HmieX}21z$7#fieM1s-U#YDyy7w<`7rbSL;{Sddtzup|WL< zwSG~&$d5h^#H-gDHD292mGdziD6M%O;%3{Lvh)6b_TKHuuIfnlom2smxk(^_1QJw% z1d`1~g(Z*-h_$c)34>i_gONajDi9#q0#sN62_#q%{j}fCOF!-Be(ab1c4F^tcLewQ z{eE>s_c`r8dq?!Ya5BIAGRK&6jXA4I#(n606ftXM&fm_z zWCMu2AVwM62!?c$w&_b|% zz8$&Mq7rJrsB{|2iM&s@;;Z0Fq9IET6&#(Naf@TM7Pm0cYjF#?uQbmVw~%`+Zpl@h z@wLc>+A(rnff8Y#xz0SPU>R$%jGnGCD~o1m{|O@&xe%vnk&Ed%V;5&dEp{zCb z=W@q9%8MmB--RBceg~9aXp4Vhqivd-iryBJ+N`%Oz{e8{u*Jw3DqCAA%IjJ=hPC-9 zkAQM?#Mqm6>B>G(LpFa;eDMid-`wgRh3{t8<~eH0S+0T+^A1a;g5&cSMpSUt>6S(g z6{XmKQr2Pv@|rU;V7F6?3>byA$bgZ}$gmG3(n84S+b>cM+a+OE%&|*ix;di*`kv9D zd*+vC9rLl`#VcDf&P{3C>9j=(NmZN)<)~0zwaYWTG=|$sQO<2)Wh>9HvgdM%%lWmH zx!e}z{BWOQ9TczeX`LXZr2F&yLR;i4*Sb88%5e-)lXHJmvgC?>s^xC`9?^A_EH-u~ ztWeXlj4S~`S(X}E1_Iy9jjRB{N?qIeVBfLYY{p=Nkuz>Y1*6fWMpUp*E;F(QHu$u~ zS|hd-LMyB{awTjKMQZyXM9&Gc*$5kX(YkIjW_u<hP5oJ#I1^ieIphz>4`B@ z1wR3Cn^~z~O>Q@$g1=m~-G~Z*c4b6kCg*-_KZSN=%=}HV(XEvnDwtO-ilU9?*j=Hg zXUxxD5fNh^F*Y1AHE?pr@`Tx_U_G8RqJs6%4VoN>K+x86##D@vdBxPyjBK0JQh;JK zEX9k3`Y4s7JlEUqKhZMQRPo9-jdN4Vexu)ptjlG?xANv`TaGQ|7+J1IxeTSq*%k}S zw&mQ)B}2R#s&RSGBxZ%N(l#o}K1yq3dha$b2>n*ZEGnbLYB3pgt;J-Pl2Q3wIpw@O z&pa(t1G`(P#c8xeEl$%@Em9-qXo!}>A}sDPvItAxwFtX6i?0?bQ4_{Vi+HHX4)bgg z4>q-k#}YB-sbD<$wWU+R{52rTp;3@FwJ3<%)}kQFxW`gWBh~e%%BoO{f=E@1fnun2 z)9@$9@O`I6IQV9Sv;AOs?3eG?n1^K%ujTtguAFA2i?keO$pMk2FXvV+8EPJB-EZ0U zmIcg`(hOz~&NDZRn<3lMY;TLQ<(Voj3-#bw8p^NDx_oa~jsm5KI$B+;qi`s{bNT;T z@(XRxD>3?VLoKXDfCgmkq$PSjM(lGzPA|pnFzM_ z4MtRO9O)Yda;Tt9ZHI|x)qS(ExQSM(#ZBx>YjIPZNo{M96J^wZDMwpOWV%{Z#O$g? zMZ707W1jYkV2dy+?gPQd*l#wvS7hC4QBtv#a@MTuX&invp!PJ5R*aob%PGg`GnVcM z2x@oK$g?2wqTZh~b_@({cif0Y;nIvtzt3Zq_KJHq{@2r-$LP+X=d3bi)v-p_qWXNE8DQ>? zOP+FAM91E=7SYkxwRp}lW)YpO#)xk58+Bv+*4P}gIg8Fr*S8W_bVj;bbVhCGjLvAK zT69ML-ebOZq6F|%i_L;{^w**@(#=>pi_Y*}i_RFujLyG<@4f2h_m)cIHUIBGEncI& z8Le$si@QZeW{bnJ5cxBQ1rIQTb}>rRis>E^u|zbWe?@3d7v2aN>ODY``xzIL5~iVx722B9!j>g zyOi*re*Ha=DDAyms&m_OkZjfExU%Occ}}L=*dOL6X3vlr?%G;uAtP%c_Y~!ItlTH1 zGPIRfDx~9()w2}=W2LqtU=GZ&9$@TqJs20a+!yfKuSWLRd(~n)BHbLZJ;n~ByY1Ie z`%Ts*7VlB=TD*r%7VWv~>{}{}_K1JAXpa$Di}q-NyDZhD2tK{5#d@?rE!JZttHpZE z`dXw%&(4@v9Z2J2cA1Zy7acv~`2G&Aak^F0UWu zvXwoQZOiReZl7}Bm10WUQ-*RG@D!lYI&H1CuzQMfiOZ{Qxh2Yx7=9TU?UP0z`Vk{J z^!W#Sw-y=EFK3y}*~#V{BPv)sKGjn}KTFMK8EjC})YHPwatyyhNfKA7mVDTTdJ!~a9 zlFC?%|AN(fZ3QUB!e|$B7q4xx9wiJbQ}~^QA&UA9(em>ZF)OYBZM+N8+TLv}_iDMk<(4SdqTG9>^0qyzDBG6TEdOoCywaR$ zjNhYji8-BWR&CF((ISlB8k=K`*P=7tQ(A7GR=^7DO)bu1HLt~4v{fz6qLz%a7FETW zj^$chMVU5PZkv%C+INc)d$NI5BWBfNFX~Z?y=>=V7b zr>=dX7qz`p%;iu)&y4=I^F_JuF&m5i!%sC3PioO$ok>k<@gFnc5%Xm4FCzb1{6}t# z|HGd=J1B{{vT#MvHyK%b-QLP!(H^7bxDk7TQTo16`4cPKh0%O2~Tb9RPxNx z6KPFZ*d0vSZ@K+Tw(0*v=f!AmWsL6JRCM}aQ`mkNFOWi~UKu1V?ES~`oJ=*?Q}#K>msyc((Sto0g8WziHX$b^xNutA*GFe-<| zPOKcY*onLtJGUYg+T>KyZkXGYQU7^mmskDm61si^fP5d1xL)U zjaZaKOEXHUU|i^YI>7sU4XSde;4c)_cGjqAEw-YBwaALxYmpVRwl%U^9K~*9)^gY2 z8RPA+u_IuJ_D79qY~}c<#n#f8Zkt!?LdKFgjMvCJh$$SO4caze&@%J1E$^<&aY|ek z%G?%Z%GPb|Q7UuW-A1`|ie#&1M-=A+O~| zRB%q5Z$w4(>jlPEfFa#VBNoTe=8WQPPkzN-`=A!t$<~{%D@Cv_jO`l9Iff?8W;1M1 zf?C{0OEPY2lx8YMX^Y9|s~zU&PWZuGy~~KkWVWpaV>wjN4`Z?l&Y{}phcUV|Jj-vz7avUy2hlP9&qP=Y8mMfP+3R{dv zrTg@@_AJNja()Yote7W5?THySM9a2q^(*;kt6%xP3NwGG6lL3mm8~4#OXGzxxfaPW zj%$$|<3U5X92S$=Dsx0-JUe7mws?z@)#5Gsz7}s`Gj6%rJ{l#OGuom@vS`cq{upgH zibKZ4P3BwQS>yj3&`>Og3eKQfL`I2PBeFd=Mj3B4KNh30Yp=y|^kAm#gGCgKC`;tu-r8%w{rH{Y{ z{Z@;>@LY?)rMZevxD+D>%4)@k*S34i@(B0;4Ijx-((*hjKZPxqp`2S50d%7fd2#4Q zA&u5+n&ZO@$~qrymQ zYm4$KRQAFD>NixAa_Pz~*XFs6m%OkpwfK$Jti^AP)LQ(8O)Yw(_Diiowx`B?u0?N_ ztQNn~OSSlo(Nl}xSjlVg8zowAx!GPBscO-ixz*w~+L!TLqctOXEm~u5$Y^b`8S}Rm zo9Vk2oncjr&1msjY({Nsu^A<*MP}sR5t%IxqfHox%TbqmL`GfP8>8Q5t=%jRqnB!N z81<;d;qs^~&$@D~D~-LjST+A=dTqb=gch_)#%o({IT1-RV)M6USREudS!JIJ-bE_89m|rcb!8@axJ{4f( z>x(K!+a46NBa3pe`>Mq`%$CkL$1zijb13(maSqX-7UythxZlcc&j3W%5t2o^(P~7$ z3(81mPXW;4hb>*(J6QB&M)BG<7Z(y|+B}!%=vl>YvX)~?dES-%mZM$Swynf%yzHf1 zW~|@QzNWNA=#t;I*?&tRQlwvP&NFO_V&!{)avPUoTU!(>*|vRSxztN-H7?n*B^d=5 zNwrz3TEs(%Y7q}}ZO({?wwNR0p;TGCW9e)0Zg>wT1=aqmMLgs-VLfN};Fxu_c!wBV zi+1!>i+9*D)#4qkZZ+?A*NryFA|6|=7VqGx7Vl8Xd(6*H5qvUQi+8Z8#XCg68B1lm zI`l~`+QDXyXvf@Y(GESpXlFY;w9-+_&Eg+Qblk`QrC!Lqlmx}uRvPJTp8~-909Jr_ zZNJZJ%dw4@Ytu1fq70^RjU1x5*BPSa+{CQdN~Jwt+Z-=N!1h+cyNN@kLti&&TYlvz zI{($K%`ZmaJj+mij)^ibu8oQ(J{vjJoLZz4U0a;7PTwbDdH6n&J%L1<)}kMJq!#@U z3znPj70FK)`=S?Co0UGuVf4+SA7e-@`XT@ImP!TRm;SMlpTG}Bs@~qpp@M5x79V3j zR*R7EU5k+L#0Y77J=Ben&wgu5GSGJ8C!8!AV$|%g65J_*PZt>t?Rg`7*J2;$M=kcD z-)gZB`PX6}=1(p5;huiK<$eIUBepzlL_fR4o_*4Y-Qyx+)?y(%*J2@ZZ;ge|Bd;g4 zHTYdyi;nPYS;cGHuBChji5f*(Q`(;Ip^QVeWe=s9)%Ff|DL%B#*m4<49@_TEX#1gB zlw)wYeaq`fxn!l>+Uiy=Lpio%Mh(@X94E`RlDN1IlxtUt)@`4eE8CV!QLZz}P>ZT8 zE#s;R#wY!fmK-YBuKcc+3YJjAupAbRQI5q%&V&v6s1|wAm$k@?k-*5SBI4|v@5m!% zEkdJxYVjHSw_1Eg3#_$LuFLb&&@6{WUp{ThqAzDyE%qX}O_pjiQlZTmdv64h7aa>X znU&p*W8C$PScFEpTa8#W#(yQMMPrOWMq_)|9+6ogvQ)iGtuB3k zh4OBoJUYu|C`b9>$c>g^+}0?4dNt7BKg*&tBe{lWIaILJjM7VlaK~DU$(Uh`$@(EE z+UUku4i$XTGDq}9nQPG(HLgWpjBLhU-4e6Rx-FK&cE@;9qk<6~nt@marC|#ZYH| zEkdJ2S%l{3sKsZrYb`!wj@05a#(XV4qaL;R{DkISi_h?UkJV$R2=1h6@fj^ti_RDi zjL!D#fHix>JXyrXT~sY%Bez<_#wcXOw(oi&x7u%up=ONXM^Hx8{;1_;Q61ysxDneg zm-a_(GjDG(CYPf~c`iuKMITu0tyuBe_Rdk+GinxTO=X>?3tyj zjbAa1HNrj8^BLDUpZ~UcfTryc=bl z7smL`d>Pw?Q;Si2p{18sYH{VFxI&G-Rt2ZVc)dC}H9m*CI5;)>xgn$_@OphU3HrD z&QF6=qrE-|w}Tq*ytt~#rOkFZT4GD2(Ay0;*w$Rp1n5l%I99`3?Mz;`I~S?5oa>vM z-RV~_-nq&Nn{N6x$KOkQ_8N8IA-7gt4z+NIgU(H&O` z;~Oy|jc;lk_q@Lp=hWEZ{M5H_YODokhw!#}5@Q>!l*V?9NW`JSh{Q^gMr4dIv}zh* zy7iHxzWWgnBM+^bMqZ2)io#OqJD+A-(&!Wy!m@r5W` z7++ZB3gau^QAwfhv4ZheFn${)rN&Rv-5Z?akv(4+k0?(XkJIiSJv<>9dc@76Z;vDU8H25*+Xt(3RLn+_sc&gIQ#;>8~;U`zh z_qm=9V>veuo%1WsbA@9rN1=D8EA475X?aKJ*U*EJN3KMq$zkZ-wMYMiZLXBxFEfks z&eN}T^+aiR)Op{=y1^alv&%Qr&1N*$y{_pI8xuXy5hYO6)mMgTk7CKHCxYcbYa* z9XUh%6jlW0P*@Xqg=>MF?R8(M-6M7;uZ+j6#s1(Coe@I{(HSGU5S>wnLUcx*3(*Y@1?Qw+~Q)~}TjXhLYpHQO0`h*e{RwvB+v^Mb$ge&!~$alACQPMqeCGJ6l zXiv|?m00I^rLfXrcBPdr?kmvOY2~8EecjWM12yi-p9xNl5rKCla+MnW6jnf%w6F%Y z#}BquWS%SK|5ITW<==ktYhCfUYc1Q>5s|vmNxmH^OV3Tcq+Ko3wFBtNvHaB2a_o+s z?R6~wuEczNcC~3&KXt8*C)zUIcZ*#+r>^$yT2;FGqWdnh^jzKAyL+uJeFNLmAu`xW z(_?Bk9K@6k^Lk2Mix-4uMY`$r!Z)LVMW9mT38X$2V4im zcdTQmabX?99b{o0LpclU7|MB1l%E>kgD5Kt+{aA6HEIxXA2le% zeaxB##C`Zlaet?`99nc&KeePeRwp}5T^GYF>qfCWZ zjwo_C@`zZDwkt$()cJVW$8);&h|{&d>wZrIBPX)TmADtoVd&jE!_v2JEGc(W;U`zR zbL@_eT`SJsjwp_{&I=KGSETN~C+xZ}Xpesu zopfF8+5XJ4yRExc@2>IEl@8;&uwH_5m6XxIb#A2Ep#M9wu+E`<(<&GDLy}f!&e9lB zvHm@+ys-W;#oQ}kJPl-u@yH|AMwF_sHZnz89r=C}BMU#tDOT~EkSWr-8Fxi!slxh* zb#~sXBXcgSj+pI*)e%v*usUL;SitJYnx*wI*1>JsLxpt^Yt+y>$n~SJ4x&VbRS@H{ zum&RE!WxJg53PZ`e=Dqk@Kaa=Sz{5yNB7!-z0hzXA>Auvd&KU}PaJowJ6&E+bpMPt zYpEgnvE>^2rsW#OOUt$PxZM5hv&&~!-A^=K*Yl?KHtSwn+S{x#8{ z_HuUjk#u=SY1&&Y_HaY%63bawm*6d}OFy#V#yu84g({5iYVkfXtyl4`7TRy{rKRh&2qcu&{zXq%Bxj!7#?t`W5RG?9(cBwdKTp(>0MVpY^dl zCxXYShDcXf)zHohSk(}t3ac8*SyAH5xU3C!m9g(ifYgbD4bd)_; zy6-Hz>fe=P_x(qA%C5VbuBQ%N~ZI>ucX z?3c#)S!NpFCtMzUg>#WQo(t<2uM}1=UMZ|$Xw||RhEXy18pgGXV{^jFD6bn$;~Kvy z_-5ybEQPfSt#MP>_uL+%t*}<12McQz>NT`h@e|vHwF>ceD)PPC^M(I=g2zgQ^6Uy8 z_hs0}6;>*-)Lxs36!GZ_%+11D#T13rs_ov4DY!<-S*$)-(YfXbk5vXciL}Z*E7#=U zSbfgU3ZhZ?Xx|K#BMpy zDD>`iqHASpZ_)0OcC7>LKIf`MSN*%%yDObEQpc*@m9l+gbhr13-kG-N*WDLeJL=bU z7ui+LuClO23o8>^Gp$VVJQ3a&$8c@CKZ})Yo7SkXl3^_=tYq+CSjXU}u!^DPg*6O* z3TqfzxUhz?C5GKs2r`lWk`h?zk}te^Yq-Y$$joOIc5O8ilCN0F*iT^ zw2Ig5N2}}fJEcSZM=S5aroEW52bxz_>UW0=o-o!bek4GX>tA)b=36l|^;E_JFa7v}w6KnZilJACYEDxKRxQd| z@j;p})e=vS)Kp8H0bH1BiJv8BcBsa9Q1P*w5Y?Qf$8V~QR+tABmjEHECC_OwP>tiI zI#+Z%RC9V>P}Mv?-VO;-&1qUpR7?4tFK2eBmiPt1RdX-Ar4pi=)3hL|<~6K;N!=;G zmfllI)+ak?4C8v1Y+y`{Z5EIVuq)P@tK?jcfyxv+NQD{Ki#le~LaAD+^Tl#zhiZw} zzx19sA9sqaYKf1Vlb*_;ebRx^os46oVrkstTa&9RYk}sKwiL*rx|C&6$^Pn-4UGAk zKq_{|5eIl?PK?`Zyv&fisus1Z_-3Ur)e>JTXLhKT_~pS>OZ$DY8P4=ybyL><`L^Y>rd!(9s;DZ1msyR(t zCe@-G6@RQim}-gh#|nh0miR_FvqQDS)7DG1#IFl`)e^rxxN3=S4z60_X$z;C_fY!E zx@t~u2p_6By)me2PHzgTn$xX8RdafCP}Q9B!H5vmoc7JOr!s2MC*5ZhBYr>GL1Xvp z{GBB`W=vfOJx)3>ieHzIOQh5yuj&>da`aSk6!giq8$@cvE(&Hx-+xfMYh}6 zq?U9K*)*A^ogv$2%xXz?AhUa%>|ka$OExezroVe7MIxn^>iBaZcBtlKeOpk~lJ%{@ zRdegxf~w~9_Moac-5yjmr#phGmh!tJxN3?2BDiXa-x*xB#P15O8h7B;FN3P)^jASu zOFkxptCsjwaMcq3b#T=Z|4ne!62CjRYKh+yT(!i18(g)-?+vb6;yZ(@miVsVs`+l< zzM!f(y+5dGPIm`Y&FP+?syTfisA^6h462&b>7c4PoiW-|8MWw>-enYfk6)5OhUKqF zCo{__vT0-LSZ5*Wpho2)IkoUyxPqBm;8>Fiyv-gviRvLqVTWpwZ}o6+)e_$uT(!g> z39g#Q+ed?{<}>rLpsFPw`-~4%1{Iy0T3pFKoVq_xQT`*P)|30{Ci602ATH=of zSIz76L{Qb7J{eRsrw4QBrpdwKomzy0s5$-n&Vf0y%r)pI-@_%qJKuxpOl zQ=%{p#bZ=}P(~~4?TdYmn$PFTzy4P#tGLuQ`SX9((#tD3 z9qUm#He6l9w2`v(X##<$p2J=HS>Sr{NJ-QmRr2iF3xkM z(4ujpTaa0uF%zsY_}JslxF)9$xA_ACV4r?DkS|HT4DuDpS3$le`8voqB;N%2mgL(Y-;sP5 zBnFEpJ~~dadJy{ms$HxfO1YoB;#&-FowRDG=Jb>p%BndX396dY(V(h1JvFFmPEQM} zn$y#Rs^)Z2P}Q6+4yu~d9|cv-=@~&)b9!b_)tsIcR5hn(2UX4KIYCu(x+JJ-PL~E% z&FQ&8Rdae?P}Q6+3#yva8hZr zIb9u8HK!K`Rn6%oK~-})7F0E-<3Uw(dTCJAoL&}GHK%KWs^)ZUP}Q7X9#l1_R|Hkf z>AIk*Ib9!AHK#ugs+!ZE1Xa!Hl|fZ=dR0)>oL(JNHK*4ERn6&!psG2Y2&$UXYlEuh z^rt~pbGk98YECx=Rn6&jK~-~leNfe$ZVsxN(=9<&bNaKOsyV$OsA^7c462&bn}Vw5 zbZb!6oZcK%HK*L<3sKE!KWtTVdP`8%oc=thYEHKWRn6(GK~-~lTTs=U-X2snr`v<7 z=5$9;)tufDR5ho+2&$UXJA`xJ`q$kr%wh|&FR6QsyUqvs+!ZMf~w~94?$IPdMK!B zP7eoF&FRxYRdf1GP}Q6s396dYqd`@3`fO0uoIV#+HK)gds^;`~P}Q71A5=A`F9cQ1 z=^&_TP6LM0{WL+7%JYjV%tJYu?qs|CV~hq+i~qw~^Tq#>`tl{RmooM;*~=Mwh3u7#y-N0K#$F?PEn}~fy`Hf*$ll1< zn`Cch>@BjlGWIsv+ZlU@?469gOZINY-XnW2WABr_pRo_fKFHXIWFKbiBeIV&_A%MV z8T*9nlZ<^z_G!jGBl|34pObx_u`kHJ$k>-;UuNtpvad4sHQCo0`-beBjD1V?ZN|PM z`z~Yo98DwZBpr@8Kit-_-YS>xL9HG7_mh%5dr!}+I>q*y0UF*ow68o!6_-;q=TDlf1e6~zwK_&Zkq zEkGfsg5rM~RHvDtys9=*;kUpV->%DRdwSTbHjgWf@8t1U0J&VRS^7tDb z)ftheYEI7#s+!ZYf~w~9?4YVSJtwGYPL~8#&FRvhs&Pa$zKQ4bys%Zx>9U}zIb9x9 zHU7Rvb$(FQoL&%AHK!|rs^)ZMP}TVRh1G>YRdae#P}S0JJF7}WIR-`cKo*0oU1wtU;l zUoH>Zx8T2A9{zs%LhY+7C50WT`FOj^(3r{?ZR4apqo_}xY}y#&_YBz}vlBn0)WU0Z zwdEzRs(A#tCa7vYE;j^K&1cv|P}P#>YlEwn_)mkYmiWftswKWDxN3=C7hJW(uMe(T z;+uo3miU(7s`+gDSy0uS-VjtZr#A*w&FM`+Rpb9*sI~@G&FRfSRdd=4s+!Zj(M2lx zJ3oubmKc)@x))eVy22sn&mj@I-{7=>&dP*hSb-PZ7_zpFhRE27{=fhGJKbk zqo+@{-RzLZ4zfvONIONg(-?MYyU3=EVZSg#hHqx_H?(Ts%#0rP?`9sc)R;L(nR<|U zlx8EP#`##_{u}P|wfFy|H(z`9U?FFZw@pvzpMrh6C;#obrYE#d!P8b9Q$svO;-;Un zJ$IQye$p>UHT|Gw{@vI`w@6Cv%NDCH#}Z>G_foQD#;`kCPPW1rb}}o;#*B#k^g$K4aQLC39_Csw11y$V9eW+R5CEmoT_c2*r6KNrRr8gqbhk< za4OlDF_dYXtY-{m>XS{XJ*_4z(BNXC}?$sidEc9TIy?e>sDvL+9ZK{7f#NCwGBH%$h~oM*@&dAITq86@o< zCWEBiUNT79JwgV_HS19_$f(Iv*O{-@hMGDzmKpA3?1_&c)StF)X&!I?{@K0r%I zw%6liklbBAK?cdXJV^!_$V>{ecXU{}uWW86@ovlR<{Zr%54M z!)M4KN2)XQH@}XML9&cT$&RVyh&WCLNxSFCAS34&NC%c$TyU2{E?}-J9?* zJH&$=J(cXIKH0z+W|>?irIuF1CbwsAzYse)dMa7NKH0#S$1qZ{Gj2~@?qqtE%&Si} zFeVq+7UTl#ivO-;lOwKV|KR;D_{Pqo@!J&~4b`v2!VcA(P6k!Y=~PhF{AtOrgR18A zH$hc%dUsIOoZb^uHP7w0K~-~lZ&1~o?hLA$(_KMT8Yf$44C8S<*#=|qI6=1A7=9;n3t7(?=0cxr zyRogB?+&s_V=T=S>CPJ6MLKO1<9LQ_pD~nYKiNTJ7=5#3hmD~wPm@8i#hxL97}DNKw%r(dZwJ|=G5DJz+i47Y`CVkYjY&y$Oza_j zz$iRENH$%woFUz36h8Np9W;hA&XOI;?2eKRj4^K!+(Z8^00!PA%OLCHamMJhQu7n3b9hLN+B zY=tq@e*gWN`~w&+Jg2KG}9-2enOhkWCsx z`KHKr8biLj$aWh;yX_%^cM}n&6^wFTIIejdsYEJhBRn6)C zpsG3jT~O7W{ywN`P7efC&FSMoRdf18P}Q718B{f=2ZO5Sbk=B3C7;6d$p*&c0!KNy zfVr+L1MJ43ctB|pFW2-!Zf zLnPc!2FZ2mcVv)!7WI3wgO(O^V3zENG0dc+WCLTqj*&`PjQjg!P42U_$?fjo5bLgz z@7(vvCRL7BBicq&WYfmabjqW06XZxy58>8bhy~MYhBkqTN!mb5*jZ&Le~5xL!sENxS7_t5h=I)nsGFp3w4* zlUH zSqdo@>gjv6ubz<-$T$N`9WAPqxh%`t4S- z?Z)792icv*5RvX8n>2>BQ)G7=lZ>>a_mJ*13Xi+Ub{oU<*F9v@#xN6S$o3k;h!Z3HJ!4qM`()dUp)GDDyUo}(&F6NqX=BJ^hHPL=JhMdP z0_=+SNRuNsT8RjI@2R4Fb<9l1R5F5(li@dGeYZq5ZFXp_8M1*faljIj3z+K)?loyA zB2xG>ucjv(UB}IIOeN#rIN4@nu-ih`Glq8PlT8~F2U_MC(t%NLNm4PYS@T>(T=DYO zQ^cq73n>V|n;{#h%x4a{ zP_w2Fo{NYpUY}+PJee)nqy4m^$%$y`iGExOg|#ZA5fipe7>5%5S4g+DBNfUQUUDTo z<}mc`8i?5m=81dh$R$_0bM*0-r!c)co!FdUN&i|YyZ!n~Yjw+C)BC7FU-}zSS^t++ zm*YKS7{~9EeVf^RM+V9N9T*Np`RBj+htcX3yJh)RI@JbY70Gbodrtu_ThZb&M}yTt#_@R<7)dJKSyIP?u8lPyou9o$8RHF1R|GlWZSA9iwIUspo`YIVD$KPvY zkUqZ2URN1+GjEVW@>Bb7l0ouwwQrF@^0Rtxlf9>sC48R@^7Lw;JHHReAh{d-kPMRV zD11Z)$+CP*_KC_U^{1qt8O5)%e@+I;cgnsXgB-2)>&X0)43aVED>6v#ProLEWbM8o zgN)LAOA5)<-;qJaYX7Id*EsRdfA4YOUvMt3;p_hbkyn0d?*GR5zv?+=|DSO#udLy} z;apxBY5pIa%PXHC|4*FDD@V)!!g=a1(S{HD9=?EdC`ZdRe@A5aGRrf30Y1CZi9tt9 zZ=Zu*Ir9Ix6id^UE=eR5-W)`y5=(zjn9u_@b2`H;QS~>%=Gjj3Vs-ZapCbu5vvmFm{uje z6;1o}HYeZ6;d+?fNVFV}O##4B*VF0QY~`35~l z{u4Og_`dHqHsO4;UPpPh;Cx!orQF(!Ga!32@(75$(&wW%msk3D4CnG1KK6ke$jIX$ z^2#(%;9OoA7oWtryz=@%oXacooW=Q}%;RAYd8LP^aegE`9L4z{OCc2mgJeE6mUb4o zoyX_I%69%VDcMDPR3C7he305ma-N%_j~bSkYYkSi6B9EQXcs0<9w%{ zGupkh-_r(%U&_B|HBelez4?rEVIlUk|b&QcU1{W2D%G^UYa`Eg(H5Th&7!=aZSm6v*95P^x=y{#!jq zOWlj}X+6g%o5A@Y^B{!-gG})`XWm9RLwOo$SF)j}ocHuP zOWX&URI*l|c}?M5Ug_c2IG0zp!EbPWw_ZmZ+=KI-na5oqdz7Hg58zy0xuQOZb9tr5 zX`IU|?PqYlH}m)i$UY?))BAD$yGZeSoXabp?;XIoywc<2IG5L`^%EfSN{c6PF0ZWh zL7dAgug~KAh@PX}kK+7UJ!d;U2XZ`8JdbmEWtm>UxxCWj0O#^LQu$|PLByRhdc~Q% zbW$JLbEp4nSo*BYbDw`c<$AXItUl8jD6eeAQ*bV?T-`@-z9_CQ#`&3g4xeY?e2LoQ z+3QlApR3m~U(dt&GCfCZSdQ}*dXCY)66dS*oF!ika&dUL1n2S^7Gogt$}*4RTwX^i ztcsW7d`*^OEy!e~n8Nu^Jx48e;e2SYB?);^zoS6`R_62 zjCF04u}n)oeI3nx`ui|BE2U*F)#p0G<@ntDs``TDiy&W;d>P~`lCOe%P4cx6jP2?h zl5c{1OY&`y??}E2Vx<{~VDvQ*uhFwQQsgkp(o>(XjI^c%pN9vG0@`hs;&@; zXKtVKvz%=u{;frWqLqcq|?%VqYHCL+4}bYw&z*%Tc=A-yJ=bXC->uoGAHaOAdK}Ek}S|oLAIa zQnOteZgn`w5wnM5LXZvuT)~RXaUeju8NBVCF03I_W+kuFZjZ4t6Py}XmxqE=V^n-N zINztl2+=#%!aJ3CF1vvDDG^g=BZq-$V$n=A9EZ*CrXjG5FLQDZUEwkXsYs*{N(1LpLjZPQCO!u$Kko@SC}rflwFY5LMvw1@D52aRpUyG4}bC>PC_Z< z6sg3hqh7q4$`R?hM%7=IDrKe`KfhC*BDx)_IUNbAn$yvssyRJ1sA^763#yva(}Sw! zbWu>%oGuQkn$sTzRn6%cK~-~lW>D3fo)uIzr)LLM&FMKoRddSFFGMw`X$erx>A9lY zp_=JbM~syWqtjUB2vV~1)^x%m;Inp52i z*`bRRC78WwyHV3G^lD$FAJ)g(=|a=bGkODYECZ? zs+v>X+1a6*Q*QEvsOEIN8Op0_PJbL!HK#ubs+!X)gR18As-UVly*j9BPOk~7np18> zgsA3pB5YN2dTmhEoc=VZYEJo49wDkZO&{q|&FOWb+o77%>w~K1baPPEoNfuKn$w>J zRn6%QK~;0AdvH5cbIR?w5Y?P+HA8t-%_%qPLR53w6WtEgoc4pN=Jb}JsyY36P}Q7n z3#yvaTZ5|R^tPa?IlVooYEHKYRn6&+psG2&BdBUle-TtQr*{Tb&FNi1Rdf2wpsG3j zRZ!KOP6k!Y=~PhFoc=nfYEFL>R5hn}2UX4KJwa7-`rDwYIlVWiYEE|sRn6(HpsG2& zFQ{rx?+>b))7?Q;bGj#}YEB;rs+!XWgR16qI;d(+XM(Ec^r4`tIej>&YEJhCRn6%m zK~;15Xi(LhJ{D9pr~87c=5&8h)tvq=sA^7sA5=A`2ZE~R^zopoIej9iYEGXFs+!Y- zK~-})8&ox?PX$%Y=^uis=JZfd)tnvXT=JeU1syTfw zsA^7+1y#-I@t~?XeLkpaPG1PBn$tm0)tm+lCGHBVK%tzx)_nGAO>?qcPPWTG#wc|tM{U;q%z;}MD``JmooM;*~=Mwh3u7#y-N0K#$F?PEn}~fy`Hf* z$ll1@BjlGWIsv+ZlU@?469gOZINY-XnW2WABr_pRo_fKFHXIWFKbiBeIV& z_A%MV8T*9nlZ<^z_G!jGBl|34pObx_u`kHJ$k>-;UuNtpvad4sHQCo0`-beBjD1V? zZN|PM`z~YoB9cbdNoq6fKSw)QDa*Zg^4k2`g*PAg@8pr9Pdbf|TV1E`H_wpaKbDVH zNBI5%sWi9QiqdkWEyex(wEkc2sXgzzG!K8bp?8WJS`GTD%Q0-E|F5>r%HzSXmy?bYEOX+V&Bv~ zjaK)t51PC^#fe!y1y4-j|I5C2s)FhcZHvC@ za!jgZOHYyQG&?mG%Uz_?H9A9jutsM|2S$BHkcva&-hWNb9IMkrkz-6H+i#q#XN;D8 z(t%ObOfHd98?AP-_nX|y*W~nG@Z^0q{}glNQJpTi$k9_dTCLRI1?-be8#_nY4A~K5 z@OqSNU`!o|r3i9rGGAE#CT~ySE!j-rwQ2G(&d4T*eYHq3lB1{6;|G}#qk73o-@Jm) zH`7i;r0~9I+P8bM(kwP7OH{HnOUcHJ!SguT24iT$39_Cs`0JAmjHTSk1=y9V*hWq6 z^=NX81*R4ee%kE4otl0wZ^_sDvS}|FX-`x?vP{QR`Ya^dU<^4ZdC#N=A!B2IjoXat$l5Cu;XUuw-Y}y#2?F^Zu z%q)2(BDnWf)81!TlUvEoG8a9SELopy+89RD4B5b#_b92PHST3-a@bdAGcT3VW_{Ah z8l58DS);p1r;Wnv4B5e&1u%2{7W;sFDt6BC*2S$BWCKY$aeLvXb-g`~XaxlG!@U-w0^i?e}H)ATJ z&&Nr7MlovoWZR5YXG)9QO19nDjT&EekWFTGQ)JV|Y+R5HjQPkUmC_jZdEVq$3u$Fl z=(hJ5+Vo>%V5zx~SJgNQs&j*?=JdRvsySU2R5ho|gQ^zoTb&zBagOTt}+QgR18AilC}FT^Cd}r|W~N#@{ZgejHRar#}g*n$s(Ts^;{n zpsJ;MTpe7s#IFgiTH+gmtCsjgaMipQt_`Z1)1L-a&FRLVsyW?cbWCOBHcq<1DCXD% z*=A#iiCf5enO&c3(irCd6xnoUH$!&N80PmZ*&$Au(DM@GdfV2?!8Eb8TXcGa*ND2m=AeX zO+H($YfN=xP}Q8?WOPhrlz5!9XVmVi$i%K@TWvKDr>G1MBc!JqMNgkb2FX@9ootcW zsS7FVV$vTOMd~xi&Z${0AzhkTo=XPFe9j}gB(obMn>NP0XGr%MMX&59J6N-vB|T&m zW8*N{F=H4P$H@l9n2!i@YSDIuD?Y;KpQ1e%pLO&1weZ{*o=1Cm+po0c(p_HhCr7jP zZE284b+aXsSJgN#t6osm{Jy9kRJG{U>XzWDCI0i^swKWHxN3>t8eFx+Zwszk;PJa$B%ByO=kN8bc)ly5`ZM>(FpVaA-Z8L^Zb1T{Q%x(wSotfQTWRu3! zsl>V|(z|Q)9@2wGvD2R=J7f&2n9=?OL*R z#?brg$*we}8AT+B`JN-o%{HJ+e;n>T1iv;mRF`Ag7%gW=4;saY znI$`-lJD3ZB^#KX=T9nj#_5&kBL1Q)SfLl>%lhD9%Xpx2wA!Li5=A4W7Oh>l;_sg{ zQ}|eKa&L_$Z?nfeH1i!qdDL1?3gr>RIiNYD6vpLMj;_4tm!ho}ZLN{pdk*#sA*B-W zH=PP4&HeOv-FA@uIjmDYTw@ntpZATI-p54pn>0q^LJnn5TC0@$`^zEu^wO5bc3YoG zYQ%@V=4ORTu9qvxdd6^v-Y45`3_Z1jY|lsrQ5{>$#(?*Z$GqoAABgW8%N67}pm|6rmwKV#hygdc4RQp7cW0gvd z@zrEKWA;RgY|*u0#IQZ$vch+e(!7 z0nHS?o2c{jnV~vo4XXW;ksM801!hX_&M)98HEZM-Azqdy! z361-{tI3gD^*gbXW1up%HK{P;zV0@;w{?@NGh1VuSNsV>lY5&sd7J&hbHPt1wi30cKyDX^G-z_nv+963 zU!rof!d>1{vN2=yJWkp(iqw6woyM@f?IN2tX01RrFy_5TDj68}xzyxdgC=kD!xGc4 zh{(a$`uTcl%h`9O^YznSB7c4{KTn)v)#FyFF_meZCG8nS>-5RC8$)h8$nG@8vfV{G zS))^=(?-#LGh_o}-bSS2&N%(@Ttr;)eru-ih}Pt7_H*P=Jz<%SsZ6az+B0gcM7G-) zYP5%J+8FbiAw7~=9wj?w3~hXzY+%f5Kq}6R(<{$K#1)?l%@j6kpET2TD!Cf3C+itQ zDf(o08dGCgd+s8gG>Sf*BAc#R&X69g(OJ?XMp3t;WRgYAmggekinm2Gh0la0hkbR> zTwJV@&u1?o8#886o$N+qSUYbbgXBuSm8_T9^~t7 zHM)g#VAShKDoKrd8Jhh2viG{r*MFORTRDAaIbZ*5GuB^3v;_8A)l-JXRHjHq+B1sr z-zS?ihP}lU*-m5XLi%SH>29OgSL`91HilZvkPVD6wFq)*X@}h8zUDT$_hplNn>KlS z&b(6nK@>U0RPwH7oUCVzmVHt=HST3;a_`3`Z?ng|r&kf--`k++M+~$tszYYHL?xr! zQZh*1wVq1`$-TgNWS6MqulS9TLDFuVtf!K_)hC-ahL)cpJ7`RerG&Gj1EXGlQZX{_ zcM?tRecI&oUL6+24%JxO>gk}WIejLmYEF*?Rn6&9qhl)hKH)go24g7M1X<4*YS$;5 zHfE~<*&wqM&!p61eip8HyZz-Uyrr9-yrr958$kMT0cEo1!_P_zIR+~8nvn~g>x$2z zW(seMCigp>CilC}I!{kWn%sX;v&sEeIqRJ77qdPhqGmp)i}uxXW;(5svucKHV9eje zAr-sKmS^U~xH__)YNqf{i8Z;mWRrVKHhFsvZJxXhnx0@^9kb$}qLS~{jF62Q!>Bx! zY>_dRVlnBG%yKE&GL?*9%gI)l9Y(`SvN2=WGmn$4GlqG)p6p6v%=s$P4K+GJ+B1su zeX?7Op*BA!n>0qBQ>4d?qJ55&4QiH>fSg)ByP8+LUz*(erO7=CG`a6%nw+ICl*xMd zxLlEAiAs+0rDQ9Nq3u_atum&@GLl!5ju}On$H~?i!`@{**#=`M>jc?GWAwO*bhA;^ zb_-e07|Puzn>L1-I72otMvo%Msipl)llz@nlY1XEx%Wkrx7oLs$nTHm>!~g0_8gF+ zdR`3dP%Xw~^+Isf64!TZ>`*Q78qTl8g6IBX>Irn<@=7)ClcGghcwYf{_HU-7)pA+87P$Q*yFpGFc0O#(}|0EOo&m58l*89 zHA5>!&bh*sDMz96b0TS$g+DRr7)|r;lkn&7L`Bx2#7qk!%1i&Jys-UVR$Y$QjOhiL zF|U)pSEKKfer6Qq{G9A7W9YB1$;`95v|lDkEwR}y@qT+t7*0FaL{g446Zzp3-UsRj zQS9J{37A8A6Q2*Xxss+wu+e6|gAY%k43##!(mt2{>0TIz5`B>BpIw`GZ~v9ky!c1U z;6>SqS(#oUc`3-tBrgjQYmVWZ`V*;~l`WBnT*@tdw&%>s@`~m>ct!H{|F8=pP?_1h z%F?|m#8#x&NL~x_I?3xn-XM7+$eSc@26>C*tsrlcydC5nl6Qi_f5-g;{MsQqub<+4MnnD}luxoDVV!NdN{(s|NE~k=uz0dpf7cqmjC7 z>Ce9AO6}`MZs*Spb2i_cN2)uu+||cyyN{)15GkuqNInr_-(UQcG;xoNv!8c7RNW#SG4mWEMw3o(qd(IG5MR_c(~W26-Ojg^Ub9 zOnrQvgwZ zSj=isFW(P|X@lu(te5aFrRJ^F6Mvm6rSf`C|Jkmku0WWmu=@Hh)k$Se(F&1{SS96E zHK(INRdaf3P}Q8C7F0E-rw3Kd>7t;jIb9r7HK#ucs+!X?f~w~9%%G|{Ju9ecPR|ai zn$vTFs^)Y_P}Q6+4XT>cbAzhp^t_;|Ib9Z1HK)sis^;|kpsG2&AgF3iR|Hkf>B^w0 zIlVBbYECZ-s+!YPK~;0QI;d(+FAl1j(@TP?=5#EmYEH+4s^;|4psG2&EU0Qu*929~ z>Dr*GIlVlnYEG{Rs+!YvK~;0QKB#I=e;iabr#}g*n$s(Ts^;{npsG2&I;d(+uL-J} z(+xpYb2<@JHK*4GRn6&7gR16qV^GzcZVIZJ)9Zq&=JfiYsyXHDqY%}crrSu>obq9- z5Y?R4AGtbB4_sAqdXwmOsOEHQP}Q8?98@)@y`ZW&?FUsY?Q?Dku3F+h53X9`+k&f> z_^rWJOZ>LrswIAVaMcpu9$dA=cLY~0@jHU6miRA%tCskk!BtEAuHdRA{>$L1CH|}6 zswF-dT(!iff~)3xh+hX)&FOD~s^;|WpsG2&C#Y&pe;ZUar}qX`%}2)0psG3D6;!oU zkNbkFmiYa_RZDz#aMcpu6I`{#9|*2m;tvK_E%E8#swF;Syiz$*;XhfPLUyJ~*7Gbf zNIt(gn+%e6=a50tZVA~%DrvWh43c)M$slQWF&QMwcL~|JN~XP(43cRtBZK6pQPz+_ zGVNNj%TE7@%-PpOt_J#HtvLnZV01sUW>^^o2H+(~wq+2I}jUy?zxU4BJ2 zsgik2k?mH=GVdXKAhUar43c*E&afndWcg-j_pnOZ?InYx-6Ld>r&L#HeIF%*WZK8b zAlZKV$PTEa-Q#3WsO0DMo+RV9n9(l&E#^a(7CZFAw0p)F?2eE@vi**dJ*$%a_8gfI z)mS^8i3kp_1@2Gi>VDGauj>5!^3PVAcX>|QpIHAgf(*6uNVQf+{19*NUoq9WUPw_M zS#3GD^<>+KOaH64J`&sP+x`3hqiyUoTNx4eXoc!#%)AP$&;p zOCFMxqgqWJZ%g$|j%7yiG;}%Hikjt0QZY7e zPYNHl^!z0RIpHWK7ob{tzT4#fY0D;W_tbvHpPM&*p`&1n(Pl}86@^CZ_=ub6Yzsw44jK_w{+c^+H@*K)Azhd?DsW( zz>MWpwPgQzaMcojBDiXaKN(!L#195nE%DjlswMtZaMcq3LvYm+KNMWG#198oE%B#= ztCsjP!BtEANO08>KN?&$&aLX%psG22E~siwj|ElD>G7bdIek8;YEEAWs+!Y5P}Q6U z4CUmNAA0L(_vu`ZE(;}%!$6^&y!JzBGpx_W-aC2aWc2x=N1q@57=7`dEa<)XPd=Jn zB6%su%Oo!cd4=SaAg_|V8ss&S*MhuG@_LXrNZttYCdr#Y-XeJ`$lD}u2YH9&ognX$ zyc^^_lJ|nVPx5|{4@f=;@*&BGK|Uh+D9Fbo9|!q_KQ~t`OYUI{dTmLnK+&n!$%4yjH`#U!jz0KC2hvnvF+xd)JogMYjb&C-G z`t8px4;yc%=(y#0yG<^zhPRuIeYOMRO+U^d$8@rpF`}buAwAYvesdYG^)WMCD=p1v zg*vb_dPmJVq}yp&VP=JAQ`-6y9?e82vm90uPG>`)C9eyKLTxSQPhldflv`s4<$Drq z50I>PI$ONMo8`?>ShG8M#RJ>it;2@HEi0e*o@CE04SOH}eH_88fk%x*0iA88XOt z>hTaMB;Tukm<*C}a4(tUs~Yp>nFwku=MZnRk8%v9NbmQ|H|IOFC5QYhJmq`%v||M^%UE2 ze)e2rhx~Zy7MW{#Rn6&Qqx>(^sJH)@={0(dpMY6QJ4ohqIT@tCBTcqWB|@jxcs=P) zR5E^DNd`%eSCRe9?9gjBkU_H4HnJdry}7 z0op+#6ePL6i45TALi7;T$SYT0NTf{w`gex7CYtYRG?z5p_Rp_6zmT?^q7y`+fPJ zqdfkf&?WyL$seu#e~k+{Bco@EF2{W;X?Z^xBxmGqGO@}mc_xAyt%rCjaotbq={j$- zKfSt8V@8|*>MSb?WX$PPNFh0PN5~+V+b9{NKM^3iR3+^$BU`7E{??O0vQ|GPgN)Mr zg!CGf^tgcxl5>B8?7GbEdNN4nvYBjaW_L3gWaNzh&Muj5&n$P)@(z`(%P+|8%ZmL&pCOkF~}BJ3J)!C=byNlCAYH8D!LMFDWEz@(9`E zDw+BTGDyzIC&?h;@kcVs4w6DfKC`5UR5G3)CWDOhPm@9-Dy!FLNFl@P5mND~8q3Nv z5yADM&49mF3if0nZ{PVeb6#kfQhaQBD(Ar794gUBb^n6ef-C5dpSISXqny>*;>ixx z=%qR*sA^967($3@u|`*XA_2+KbP5?HKS?n{HmZ_7PbE7|CD*jm$(CexOUWQ(#GOle zer9n+dsUR9%gb)M0I$`m_Dg{hW&H@RMvcCVI+ zVuxzUzRuH*r_S5#Q=84tK9zrd_Nndb_G#}~=WXR|tJg?%3uA8GPx{1ZllznLI&b&y z->PWZ`&e%BW84we`9kZ}X3yv$BVfM%aUVZqpFSyC_mkdbsPne+%+Zh4avQSpsv5mi z=Lc2I=>wnPqj6oXc^6O4fM=*-B%0PJ1EQ zs?2UR*;OjJm%o|}lKpiJ*@nz+g6w{k%y%~#B-imhWRSFbfb2n)w3{Y_q}>b|B<&s| z+pm&#zatZ(8vBW7BB;@Nh%emU-#M@6+wQ+?pPmNJ&rgiXp&GR1oc22P9MXMZowwPy z`A_q?=|_sl*jB&Nmh(vE?|aP8o+YYQNk(?4=5)28BPz*`k{vUKIdPm!tW-<2sdM*w zv3XshGWudE>6l9H@y5wE7{mTOzJY zcU)GJL9%Walda3rt|zCxeXKpC^?pGFzUB2rdev#sAhRsxhndX(~B3PA7wmmRm%6c4m1F8Kln; zvhy>$3&}6mGDxlxXOf+h*)1W1WbRAJAUU$nCA&CFdkGmNNA?)m zn#^u386?~4agw8eRh7E+Rp$6Pk01Al z43C?c65ancYqM+lJNd-%<4gD!k&$_48KY%qL+59n3t$T?o{ONbWS*;Gs^q-}rb-#t z!q!<@@?H;p%c!2Aw_&P2yS)S5m3i)l?J-8oz0jkX=P}sHisvclXPM_Em@518%dqR2 z-wl{5v&2_0DM;qYI}zt%(5D|&igaE7sB-W#(@?)S(yDoA^9FQdmUg2PNV@*g<0( z!n06^V5-#mFie$pJOVpzX?5*60aNw5oP?^9^C{SQOHG?yfXZ9raYd_h{P7d{cbOvX z7V7o;SF3ktu{GYgpq!iYFd@N8`-eJ@JMto*R7radrpld#^RP=n zsoiDRwV6R*sZcOqEn+k%hEKR!>~7{9aJiXyMUqCTA!PJ@+3 zP?e`~Uga^$N{cc-D5GrwOjY|=xYl?HDt?(S?<`2*sT@`RH2$i*I4EOmENnvNHxV}3n9c!HV2@{hQ(>yan+8**EvLht2#Vj6u&0CK_Y7=qP|7?H zrpkF7fqjEsSbDanSw82Qo78OcOuTkU|#Mm zMe3iu`p4aGZ~l2d>Mce8C5pR>-s1OPB6e5}t*z&)^NO7Sc?}jx_$KdSy|U9IxedUYOmBy}ElBvsyjIi-T* zZBJE=R4$REV6^v^qEzSf31efN&a2k^GlEi@nXq|5SzSh8=Q6+ZFje}_1(+&nFTx~R zmb&wrjn}mC{^E8MB!l_C-+AehE`0kL$2o=BM{&Z^Kl54BdgM(z179_kt4f zK1@ik$eVW}Sa>(^SGZ?VjZ^YZyN}-d(;oKG`1f1iG(M{3@fp0Ug~}=7Zwb^R#aXJ# z%PkuBtiAbr59umtIfuB?_m)FiU3&BH_Z*LM&N}O)X7V>aD0P|uQ{~q_Cc;#iqaTB* z@}HI_!6pYC-`O@!=8h?_$Agl`RM-uDo=ZX zDyOX*a*p#sul{jH>&-vS2fg{1%in)Xlu8gV(hRQxhu-ibJmeW~i7zUf=#sRz_~>|=GlIo!``$aiyCV;gvLoHP^G ztb{ecm zw>S+}q+5*+2ZfD=O*R$|NFSI2eLVA=3RC6TyJ@iJGQa0xs*IaiFja5G*-%xUt(gN; zrHpf7^MZQn5$JrQ+UFL)mR3BMLDyxT>tS0eo?D@(GtVZQ>6zlgQ?Q)%VDdtv}<5*2PN-!U>|0FAHj|q)0zAj>_kwm#81LhDc>oW zDtUYYla#^2lXoJ{^c2GtY%ERqC<`wj}dg3RA^z8BCQrFNdjmomW6r z@mvX0CE_aBD?#yF4O7K$4NMikwJ=ruUWL6D6u)&aRpyrUu-7xcH(;vVb=d&hn)z*m zsd|mygzm~bcf(Zqw*C9C4>G?!Fjbz$-V6IU^V;I??kZh?&6fRi>DR1*ZA=Yv+f`7S=V{or&M`bbE-Ve zsCC|7oV0_e#wq1nYPXVqsXhDmkI$l3%UO;e*WTXzOYJ$-*~iLQk0V{Aa752Q{C5(= zJH(ONjt#c_sj}A}2YV{>dm8p^P--{>rpj5E341Q{dmg6Bo#0t8RcbmLHaAN<54Jie zJ!1__mAjK`VXBnxRoHt$efHS}RmF2R>{3ww?BX(1Sg_K0t@CiucKY=raral}aYWR4 zDUz0ny94z!{pFEHOFd4%Wh%8t8b{R}$~iyU8l=5;wLInW$8p`8zxOQqi3nEtNcugQ z@1IBWdFwZa@>z@D80xL0{pZ_X{I)jj@4TgZK-HS1^{2|q{UxrejsBgttV5_0V+>5y zYcvF%9Td+wFjan|aV~6O=C=s8)K~~0Gtx5XmdtZ2OqDw%+hE%>za6l5j1lo&=+4aZ zJ(#N3W*2mS=6L{i&=@ffLC<8KXJM)y^BnYx%=1f_s(W6Cs?wG>V5+P+U%|c(ir-C` zszH-qvy{4JP}V9^4+6TwRV zZ@umx=k6*`b8eNFn(@0`|8y{G@tDPdP|Y!pWggaKdJhs-(9ToVf+3= z*SXZTU@uWm5&KV_H=pIw*(|qRzirh2d1HUsQ0r3N^goI8?4Ncq^)}M@op&UX{RJz1 z524QGAibr2Bz{&>=kZgTI*;D~uJe+A{0}pY{_!6g4!s)+*wH!-2iyLFm99Ih9PiFf zb5-^8HwHR3D4yeBs_r=+Iyv*40#l`TJq~*^^Lq;RbWqOJGceWRj$Z3N3sWWD445h< zoC$j_DBp*B9`-^|{9c5qGEV2imIdXm;&Rxwprm~hrb=11!^A7|#=s^8^)o#gs*2|n*pn5{r=Y5MJ`LMc@!Skm z#d8a6TgCHDs4AY@VHYc&pFvgeyabc_RD5}FO<+gjyi-k)Mp2b}>+~Gy-!?^>5C1c) zM`yR4h;czVbK_z2gHrkhu-lp69hfTP@-9qL1}m+|RZdQLiHzc(+OQfYU5V6r+%464 zyaKB8e*NP-QI8XU&7#gr@k?=<{rhdVe*M$6X}$b$4XyLma(3RgQ#&arWtj|9W!9ep zTb}u?fbB9C0?6KRH}s3l^Gn$Ep!B#Ku$!6RE!bW2(_ePD2a}YUC+|eCQvd7K{~h)& zz52&~Q1#~;r1OClMP7rI&T5sX(N^X7clLOcU`4t&*wgh@cQa$vo}jO`1D~k&WPP=k zn4CY@gssl}*1%Lb zS8HK=GQYhrRWIR(P$^61%R3S0@wb8-{W~9;>*S#HfGMzf#=-#^X(P}znde&A>lM#8 zpsK{&08?cbwh^X^-zM1RptRi<*tVefy$MtGHrWn+EAxCC_Kq=X^DcB}g}w*<*r@J9 z_QCd7JP$w*WuAv&s$Qle(94BmGfvM6ScVVhL&vy?dRSp)O zyc5B~yNj3ny=IRvMZaaDr~CjVO4pygwO;?Nk@hI{9HjWH67?f-M_lD;ey{S)Y z7htO1$`_$GGS9DIs_ywU^j7A18>UKY+=1QA{O-Y2=@Iu~4>G@pFx9kIf=ZpuH&k9) zgZCnSB%arLig>+P=OzDmN2c!IZ=8NhntD_{=jM{~dFdl-iSjupl_%ais+YgNmP;eC z9!K--d~7HEOi<>wvoKZfwdbI!wC;J>S3wy?U&C%1)6(98sWQvlhN*fkcc7|VSKo!H za`ko(c0VXNKY*!nNA@91HQi5yN?J=Fg4j5yABktD%F{RBs+^J#R|Jbsw!8TF&O`n) zRy9t#qfq6K#y>p29P+W~;aSgWuBFnHYRft5ic|7WW3`&^59QDQMQA8boSo|ViYs^3 zt4B&DP5(Kp>YqLrsPb~n;xCic{o|;w^HTqeSG&FW_j|_r_m>uJ8)2P&;vj!xgVH+V zV5+qIc-Z93ZwgG+XOhREs?5GqVXEXZ4W^3UblCGj@tXxxWwn?Mo0Iv?g{d;v&4Z~D zZv^&2P~U042;CGE&&@DZO1K5~Ugoz8wl65{wI6mM^E(Jr< zul`aL=9PMiIAhj%oH6VChl|v2&T$p0mMHDqs=U&RhH=X@*#QuUsl+FP|s<1II zRi96Xpp$~)IT@zPXV+6;k7s^UVXEwfroo=b{GNoV(l?)i&CL9sgQ@!XdmgGv31`7n zi8vd!ASiw>!BlDamtm@`4&h7GQW>usn3GCCLwCQP>Dpv|;V3&fD z_A*SBv{ztXWqx17R4MaKm?~wy1-p}_y$e&N?eD=JW`0sCC{`NPRZiLe4gBM1ua<{< zeqH4$moxt7+G?D%ldALhzp|@5-4Uqra=!6b4tn!XvsJJD@tYvM`KO&}um15jetPwf zvtiYre%{CVinC-jPPv`qD$?lRIV?HbU$7Y2og;>}1SRrT*vX)r?NcxznP=yyrQQ&f z)Ei-{)Oiz3)z|LL(5*r7+y;9$C=qwUR6X^3P*vu_T`)O2(8?u6Hm z#OIOfJkGCm{zLi4=XrXIpL$>2zZ9pr{P~!!M~dIstMXFL{JL$|IVkz(^Hpy-Fwb|6 zOCI(Yth6Jk@|16tr+J~y^}45X!a~moN{pE>Rn~*&V6!s6*)Uc5?i`pZ@#ezj1!Y{0 zz*M>Bd;z9P?O%kc^2-zRVXAy~vH+$^zAwR4hdTGe2zVK`C@6l5VXCZ8OJJ)qzgJ+Y z-jh~CU(GyUgQ>dbI_Ub$^L3aiZTJREmGid&wlPb)38p%1-zC@#+iHF~$8UqZX-w~w zZHMg$%J)^@g6+!ucEeQJx4aKir42uTsZ!=Wu+M|ycNKO$D1J9!s`z~cQ^oIV*zKVB z-GQmfTscY3@m<*c%Bc_)HJ{#~3hba8&;p@GMz@_NfR-TUj!zu$7E ztD$QAG{;nVslI7XSND(iKz52(i zq~83Q`x^RBsr;pO?yp|VAzk^F+TX`fDMja`9Fe~*LEU>RbemCa<2Pa3E1o-`4>M1R z1jX{Wol`>OPu1xd==7k}@Cn$H#;@q8bq%5PSG08=HGJup?$?uDt+3LnA_1jX+lOx4fb zA?V4>^AzmUpzLr@!&E8F8JH@$oQ0`+F6W@~<;_Zj2ay|~g4hALOA($$6I1a;9@jC)j)& z4*M$e`x>Uo9i5vnNtt=_PQ-bjpr9VCfQ)P!X38qTK$uL!)m#09d2gUOVm?~v_682$GR{4)$ zs-*oGrpox<2U8vHEDNJzKkQIY(jJDXGPfRq9nJiX!Bm;6kHb!6ekWn7^yO19$u;xj zod_1WcX3ME#kqgm#Y_I_{#3O*r8wg|5<2`JlAd!&vsE>RQi;-?v8sRiCP0;!Fat+GQzBm7T;g z*qY35Eld@^S7G}yzx}WqLE~qMu&*+|uVFWhg#yW$y9K=)lv3Y=2{GTea@KiV`|G^f zKaHkd{o|)}jsBerQa<^c8kDx322TAV9s4Asi1XJZqFNUcy?=FF<#@+;59+dIE0=Ckao{d#7RrYwVz}9Ad zufkNR@oO+u@?8g8AC$f2>##SBg#t+r+W>thD5>9tsZzV0u-%#8`!H2{=LfJ4Grx~u zs+9U;nBb=9{NzhD3K z6>Tu_H z_+0oR>`LbMIZTyj6RyHkdCub+OqD#ofT_|ezJ#gz70Gqz?VzN-15;(bz6(>0Yc=eC zP_8o`z=Rl$yU8jiC%iS*qqkb5d8Idh&QL?$;%=rIr{DPL zSHHh+ocIJ@HBPDB(tJ?$r?2!;-*_LO8i#y4mnD+?JsT7@1NKT#`p#;YDt>EV$1=a; zuup^HcN(V3=sp8G8`MYCIp~F;q`nAK^&a~fR29!lu**UDy@e~VFM{ItB}|p`dmVN& zC~MU%m@56|HcXXsaR+uUD0$q6se1h$Kvnrw;fF9)QcD~t7QPKUWGS;?*O79h*bl2Y zl>PO;h4v9YuEV{?k54~T{nL}fRZclOSENMpw=5`qbU92FzZI}IGr#Syw}RsLHtfC3 zZx>7zzumASncq>ED%bkQV8?@!_5|!yP|ExX>{DZ>!?`>SQzh*gm@0Xkg`KmsI?m6- zE(9g*Mc9qZ?<<%pyNR!1s+8|0OqF=IV5&YMZ$s|{CG}mHD!JT)sp5AZri$MKm_!Q} zp1c!r9>3ertG^^<#MD!4YUJsDRd4>ZQbS4Ow^yoh_;jGbzqvf6mMG^NSAc51>8@0j z_aCR+qHzaP&7o9-Qi;;N>1v$*ORD3mp`}YLG>QKzUd^}v^8Z`KkI!}YR{nG?)|-F2 zKU(!4_FurR^78rZcMP|l$Ij<+hUITxQ2NMzn5xfN2cU;D&m%BZ_dE(ck$Ikksk-MW z=*7(QGnlG-UV=&~Ghg0`I2VJNsWC<8syWXKN_|IQs_eO5fT{YP;Ez>Zp4+Uyuq70=@^ zRX-aipr`4Fa><|?S9wg_=S}2{rn6u36z{ z2PMxrFjcS7T8YWVQ*!AZ^QNk zjsJTM_DSaVDNL1oPs3EXr*;OW8hbTNatKyBM^&D#N~^r=AFnog^^Ys%_w#4GQ5zAj zSG*h1Yy9|>L9hPt>Zj4a^Mw^fUW3Iw>CTr9+WHn6|j}Y^uFRMn0RHLyt5F-<36c3|J2)i^H068?jL_Qu+HPCsq=pQrHX9^u&K+w6RcbW`rpld=A((gvE6wb69=|7F=W(s6^3;x1UW%XY^;P{#aac_$wN*8w zEc?gr;rALp1hcy@y`?DEEUux|IPAT;YS4e2_?c`qeyJr=k8Skt+_lD(*I*H)bI<5w zL1B|%Q;q5DI}J7?^P35q9h7-z4osDJb787J>&%0y;yD6Sr9LmfUJi=iLYOL7nu}n| zGrtuuRoZ_g>}uwB4W>#>zJPt1`CW&p;&%h4%GK3ZFjac=*D$F?u&4>|M4ZRft~dYu zNtHw$0A>m_@#Oonz6H(oaqE14{TGbbl=V1KJ_yd@Th3>X$skiSnnfd3eIEmhdCA zG%X`|iX9@wly1^^A&BMgb0a+&kyEqV z(hYYuPPV;Af9cYk+LTThJDR4Wakgwa7T22EvF0jxv)8=kZF2(iYe_b0%0l^4x-|Z= zJhwDUPK@QymUztG$txCZJIOf~pJ_~Xj^)>4%s6tKS%p@Z<|(k^({aw9Gz))bB4Iu! zi5<>pnw5Ok&^mO@8r%gQ@f=>LGSq%JB61 z4tcUs1`}Oky8AOo$RRD*Sd{8n_h%`_f3|ZhhQ=J{qYOPRaMRGk@^iyblz2YK^vtJ0 zhUF<<^1S;Ue#oZutoETaU`qq@^-9ifczi5I0>f91ZmIZhb$={x zi*0`7%}R>x&arstafk6OY=W#Mw(@R=({S7RE#66rQMV6zDc-exU}Ky%4_7UBHZIq^ zjJM3%x=YOF6qebre=?Y79*;FmV)2-0Sj9Ts>DWJ| zBjaNljW@wlV6hu#C6}WN5eDna?(e&0jl=Mfqf5=h2LJ;_s1FTIkp>2qcf^&R2NrF% z$~l(j@roZ=Z5AokILD%P3`IHWtEJw9OM`E7B@RPK7#5Rr8cYlx@?`*tKNdZrYbfE* zP!fME{NJ)t$m?#i@PFSqmbb(QeuQgCQhekbi@WO|JIC@!`~1iOvxvl%r!Xu}!BvkO z8RhziJygT>&uig{0`?IS2Mhm(9fkI!w4=bn|D=^$Ua`ESr~Jrevq;f3?NH~gX(v7* z>v5P+@W1OE%X7ZxN8BKdzt0Vp;2gQ#o-RH&=I(B^rxUkjBQ2hP{rb-Y04rV1vzW&~fbZ0$3(A?(Uw{usqi>qLBn3%C>@#LjPYHE3f zMD}mN`&j7Kg`X!)3mq158ZKV-E5_;K^$9Bj{#r$7gBwgzIHbB49(69~AWgu+=uqfwhFAo;wT;m*zmQI@kEaI?LkW^US(rMd( zMa!-89DL6%B=ovB{0J5)HaN!`?raNRSg>o1MRH7XI%z$6_!4uJfH{ zv9Es5ITq8>F6ZYe{^y;4VHWv*>HK=+qG6oh@FQ-J#^2{gaZ(Ydwk2rLn50Xy3ZoL9 zMkSW_iRZl3j3!cajV2zTO{0l3iGMniSoG2@9v=(;tS>UCwqnbe0j(wW4fh1qaQ zG%Q*-Z9Vr}PJ9WPO`90wh3>49<2#*Maew%3sP(<9{ub5@SrZp(4d8n)**>Wy|UTW&Oz<@f)k zI8gpS1Y7?85)|KWV0J`a@$ERkf{$^|PKdMrm~%!v{#_%Ubux|kQN|1XJdKwNmJ{(W zdcItw`Am>5({7p%Eq=>WFv3{f(g(X4s=(5oxS*EI&`<{0J5)#yg*CmZzBJN3irr*k4ZfBYu@4B$SJ*6M2V4 zE?k`m$MRg#l?oOqp7A_3ndK=q`w=WsY;j(`ZN&{N=JP$C;;UL7U;7a(@?b`gqdwNf zE?!ZR%7f*G*C&T=|3}I&BS>?!v~9!DU;ftt#&o|5@8nOF7X3BMj^y4>a)VT(k5JY( zZt^f*LwJie)X_(H()gTUocOGX!tO?{59Hsock;@b<8@1`4%To-e;$#3DJi^%#z*@- zmK)hE)7sH3-8bL4jVnJGtZwB^^ZtNYD=BPl8WZ-Xs= ze=#OjsMR;nzX$byeE%)RFQ|i01K9_#w0@_D){sN3L-eIA0jK`Y&?6G;;kxwPnuzK8lbqYSWz*?tpmT z<<5ur9gVRx?_(b8WaQeXPdRskah6&mJEA`+-OCXln|iI9S`f>3Txso`XW4KcWW+Ol z!7N7ei_U3Vwjrr)U#i4;+5KsA&$+AB$+@f5`2tv1o8zBad|joa>pf@g2oWdU5!w<< zDjLq}R!_0hEY3v39e_>2f0z4XvH9BVoYk5&Ieo;$>dbty*Zt`;LmeFtU44e3d&>Q< znngLUIrn=-+K+EI?|t4(eaw53J{p^P60l%w(yQi_p?ufI-jz~&2!%D|IIMd5I z%Pj8N%yv#cr9Y;A>itpAP3n(6)|)?W<=#W;bthxK`T%Nb>(h~IJDl=Ii&Oz6D%9y1$h(A`_$4$en zAF)de{$-h$%?+I!2R^!zAAI$2ZVY$MhSu=+x#9D14*&k&$~(r&x51Xb?~H{5jj`C= zn6tl@)=+V1u4va@i%|tnqY8@;ozm=##Xm4gS2kGQn;4Z+5Jn_Rc)Axc$!bB)lf6z{ zmGCLcv(A}4@aJkmj$&~aZ1k%N@7+2+Q}4c0DGz;JnD=_UrcQmH-b|lQeb@_3N&S6p zG+#=aN88n`w{ITI?dD5yJKWrX;xU~|JWg)3)uOGWZRz-IBG1O{wsei7DN9-2g||g* zZ`1aa@#~Xb2shg1u(o@hZTT@8J&)XAj?IzVZ87P;?wcF!>BKY4RX_UgEXmJ;lHwm> zs_eLb4*Nys_e+>6`=VdL{+jvy4fc0q`sJH%VU~MyQA?+`d7v;QTR?v;b-LyYiRM$= zT)I-^QmLDx6gyh8du*;z?_#F~jX9Wj?2{x87LA#9Or@PVdv>oLJ0*#PMGk4tghdYQ z=*53=tcC8Sme@Oa#o{T0rOsci_`l{Hi*dEiITm}t_0HK}Q_i%%_IqCX7zw*-N#*-% zU2D?*depT{zh<4*vYS={@=a?N7IXV;FQ*%%@b|gV!?PHB`t zr7b_(vAe4ozx(e+N%i|+%bzNP{|_)#{Qd}2rS^Y$I{ti>c?^~Fay}1FJPf@e)aA$MF*0$tZm^PZ-V-X99v^@s3Y{Bd#?3i&rdphnh&Q<)mt`g=~SlS=c71rk!f3B;9U5{Ketd!~c*A4{SX=|JE zu58d%+k2{)AUE31Vsn?W)a~iY->hKi`qBSjVN}WI$FP40O8lR~eijtJe}t)WjsA1k zU(8SUXy3q8N&8ors<+JFpnnfa&fmgRDfK_YRGHiU1*S^c?_gHP;t9t)^;-WtN_#EW zX`x6Kh}paAij6p3S8U8Y>56S?ERe>ZX7A(`i#D3>{K<;{Q_ivIkxx6vqQYF&$ja^Cg$SYESxe&oJcq-eN@sdq`!{hy!zkCFiIe+stzsSbCZ37;SV7CUZ7l47Dq!Xk&qoU;hxKixSNH#47b&LW6EOP?IYViJ7D{h3Vh zPm}4p=E0V9r~AKW7XDm@3S&ycziUdv{{xT1^n`!c^u(qjO-@+&@Ao)|D&;xs9E(nQ z#QD+aFB&H6V}1mS6vv%oQG*lCvFOStoilmi&qO6hv8Y*^u(0s|%;R8Do=eVsg3tvv zO%GT;i85VCIxKSNnmC3#N5Y54Y2xs#Na62ugJm#BZZ}T_cDOxe{52a7i-EJW?6jR)qn;}LG4l?fZaBh<_ z9lUIZ;B2yl`F2a}5G`%E>aqNNZuknBL$}+?KiZ=1LComWy^<)k0xLY_N~=1SpAA-d ziSoEbBE?jDC$CtXcUF1ftn2uvbsYXl2QA5x?sej{L4N5ic0*I&arqXc$IT3;=JN~jajV5Yn{Jp7WIA2 zITkZty6D_k@!#bBo6RC$E(L{Q5ofFWbFoLhJDg*26XY%DSZul9cK(4`#M$E<%g4`N zKk{KE1^X;vzT?u%gtX&gFGUUqJkG%wM{f+W&l1L73V-%f!pl3WQ!$eEiBIgEykdDB z8ZJ5YE z|2xjHh|g|Lj$%=_hJBs>zp}Ke^MIuA_qj3n&PaPn9?I?Z{07@m`I+-va-%IrzCWM4 zyWJkOt!kE!r$+Fb!O6) zqg>{ace=R6`q%%=S)Xq9V&?{B%#quV;)24b0M8{i2LGvy^5<)9HSA%G=EZZny%y~` z#-IK6U~aU{CdB;F|6<;%-iLn-RmJlsuzv{3nfxj2kH&Na{|Tl_3H}WGCiD9%Ox5fE zH|XCp&u?L>?)lHq?}GZbB)smq(bj%FJU@|URi6#Drd_k4mo3eQ)2tknV7iy;IkWgC z=JU>HRs7SX&b-J)!<;eVDcoqUCF$H-j35860ow0_{3O`&_YcOx0m8wSCpYuGhn1R!0 zJ#5MG@7j=iebScPLz2ed=fyoM8nYZ zEZg!MypHW9)yotwL2k6wV(`)op0cgw+RECNuDvvEQQOW{dyYD8^M-c2?Jmiq$*+9& zhg-gK)wU#4&NN?@F5P|WDb)}2Rhnmf7SNVTvjCe+rsENBwinDI=X5_Ei?cD`{jqqQ zbb<4i%wp5~vh&h?`K1;AW$uqfd6qlJ;^Jh5^HJ}c>yon0{jn(jdgq(WB46&J3)>R; z^6)6iR`=f?xwbP~Tw!c)S$NZy_D}!293=XmgDro5F%}L;>~ElU3|D*OugzE4G`f44 zQJS8cBU_rb&e`_M-CRG^N?>o>@*8x}whb`yOM}P)Z|M;O}$8&s`4P9_^@>(7kiRQ>GF7 zm>s7yliVANbI;-^N2gZ&8Slcd{9LB7kHvh-=3G*Yx*gZeb=r($QPO9u9P*0AKP!6H zITjZ!Y~|%BmX|bb>z}u@2>h=N!y}fe$t%N{KR}iNz;6T#r$;7Xxxy_;5?NN1W z?!LJ(=y~d)&;02Bu#A2jlze^y`(;qd{41C$>&>rW-(`Mzu{Gl9uxIF^A#gWuZlC6> zg=XL8Pq%oGvQ~;v2K!*3`+$)4XA3&T|54VK?)!9)P+V!U)RyC{*wkUXS7L%$p4UV_ zvZaz@t8-tJ^qH5mD6veC!zuUo=}Jh$X^gpy`gC!s%dn;4M2+>Fu=tS=YAi>~b!0n5 zq$wWBH&Obvz^*M6U!_i4C@jt<8!Cy0#Zck?rf@88^|ZP2O_2_Tv?ZEnWn<|b@siGu zTr{*UTN`<|G#=4NY+;14?OLI=jQUA0J zVdKFPn6?|cVtmn%^KQ@Kk;$?y*ewtpfh?A~enO^Z9sWp?l z<^DnU0U@MHt>IqmFdC0Eop4Lou!H;E|0Rd`g4OSXEq{M7rq>^TgsD=VKfzRq`DfT) zEUmWMH?Y4N)2{tD*x!Q^?_1b+=BN2uN&J-(`g=3_*^^0%<{%cT?b%P#rN;KvUFVgC z)m=Mr>SVq~sQ)Rig|89%5LLq(A)aAGr&WRrPR8jqkK`Abq)3;U*Ug8fzTqi+RnfAh zHN|gt=^Wm0yG!T2hRaWllP*7fZK6b;ac-1m7V~N7uAaF4d}&$SH#eGRxR_tt4{GVT z%R{-{@N45g|G(uZdHqwcsY+{k5zIoMSO% zvdfjD>~Q(m>#+M{5&wvDpUX7cy)0?~_&i%{^3G>2MKf<*Gk-Am|{@GL4 zs(^pPnm`U+s{$#~s^DjLef`&(e)j)J5PIi720Q;FPC7Ss5S)98-Fy$N`L0_(5&H3M zE1w-}F6HRyzE9`>Ds%(OqW0QT)RYv97D+?HrzM@3QB1e0!TP@YV^Pu%oMU-A?eQbr0wBdc=RSezrYudM zJ_O32zO^lucx^y+V`ngg%mb+dL~Fd5m~@7nsEr)Jx8>=u{*zkJ!**R}_z`kyNb{fJkFp9{ua$r~_(Lxb7XBYOXN98=rxgwhf7Uxm#k@xRG_PUd&xL{bb5Vf* zQO_3(|6|Uv@Mm?BqbJP+|5NUdMSFhY{7l9FtaB_ban3ovQ1QR$9LsM)eC9{6DA6V7 zSmbcoIa_P|x#c29{pO2)R-3ljSX_>O<#Dj6ae5};mU$5Ww)N;nM5i6PpamBDPj4xwOsSJXkxmyCnZjgwo}V1?RN8x zw3wgn@P73F+S`8!%3AbOSjExa_-pegQq7ewR@>(^51Sj!*VN`gMjiLZg0l;dqgagP zv>))DzqZ0ek2BdU{L|`Qx*p)O8+LQ-d?dy*7KidY>+!L?x6kk+SmZp@ITq^?dnh^j zf_ad`i|&s_qtADag+Es%a+K>0FVP}TfkleN&ao&d`yM&E+C1=I@BP@1I+uh%HOhUqV>v_-Q{Wx6}yj#h8r{{si?Y;M$ zV^P*!&asB=>m|FLW6|%@9R{wSiNl^nQu*#hpPWj&m#-}%{x>~77H!JP?nlKSMULDa zbY;;#*s?;D?`aI0BkkuU&yBVk_Aoc)q1>iD{e5n<<=0lfL1Q+g`}u#80#S~C3by?H zBD~=HOPH$97{7x4CMc+3V)v)EOO7GApEl>G#37Q&>-p37? z)cdYkQ}PcmdFo3T7XI9h^kx@>6ghIc?KaPUq)R8o8!WYFI>`LW3Od$(PngBo@49T{ z%%5`qPt4-M)=!;dad}JskfS~y>CDzO8?n<)v(ZJ1NO?Z<`0R_wH|>i?xwXw&#SLwV zhDE;I&=y|0?0rxv&qFVd8*RO_ZA`V@*d$##d!8E~CZ{7YL!AW!jikXJau_VX z!TUrHB~2q9%X3RR+ws<%v?b?47#92LiQec~%+QZHX9r50wD0t@D4t^VCMf8KquxRRUY9E)99x)(()S+!Cv zy*4^SrMm2i`RdBK*WVzCS2nn5zg;+yOZR}Z>dPgf6E zoZAInbSzr+CFfXr?!tdCdpl`KQ#)aC9rd9{VmD3erQJ09XYU>9TA2Mb*NAC9 z?IDTf?{lO5C*QQpxx3qg?g_p89w|54O4`1YmMCGY<-y!;i`wulxt`K}pLz^h)C;;*R=*YQUwYKW?`BY@bU$Oar6q^=JrXk(Ieg@Nf5rcR zb1d(R+~1Jn$0{kH|M`KHK4!};0lN4CTxn!{G- zSj=+UobQPK`lW)mobQTU<1mJW`Dhk91``qw8oI|(UQnuacY5#rt!R{;# zUQ$}pYn2;qHT?IJPX9-6UM;sDP5t!R!1KtB_B))~Lvwex+sj$bZ?s;~mQrT|FF|hf zuy@Mc-DZCD_qowt!%+KEgUdiZkwb-Yjp=3x4EkJfgK^brI&D{^)N4q)&fXL54elbqClv6vlFww_5_ zjRyT(Xz+A}2NI>UZRO-{WojiX(xlabYi#eI>3;B8YYiD7V|rL)-4SE#2UIPAOKH9lUh8(UxNmB~3xO zmqR@6=Y*UsH$Thi-i}`@Yu{+NQVyx5-051G^_e_aqs6PdT9@wOyjCmKI(sj#8{-iz z)h6dyT(@p^&Q&30`oKAs*L#m2*=rUlxHly1SmdIi-pB2|yke2!gmWy<kv8 zCP!|2Iw!gDA1OoYNsA0L2hiX126elwWd~i|zE4R9uj9Y3l!a%dLnT_CQ2x)hWz!mh z#zPUlVRJwU~6h7jJI-radfMQLTDv^yDX^$v`qrPf zuy}@+9Pt#ao}^#}m7~6v>fM~QmSTBn(`PPNJO%c#=YZuY_W2PkK7Hmh8##(K)VUJM z+RLXm2Q4Od!VY;3Sf2M`KZ4~)xbrN>v1pO5d(i9_*;9x=mVc(io(zQLe*tUBf{MzBg0iS>xG~Hm=np{bH8|Fq^d-nCjKeHb3(wyggK|f7MbI1ZK z1^(%iEi9hyNKd0ItN3%LP?+B{yb#7c*CfKfYmiaqQ~Z0GPnkDK(KTywb=@^BOn;M+5ck+rwoV4S>Vm(OnC|6&^=b0sm zgT*HbT$u^?Yc%a&=?V>t@?7@vTrrFIpF6*47UjI<9E&^nT;Ivj(w*({^&Ho2eB+39 zK_X%GFw3PC!uJ=tLZsaVmiG&G8|BR)US1j(XKI{Ai zv+#e>ITkDIeCJsBGuy~fpLfI#GY0dGyjy8$NwLb_$t#xE`4vC%MkU1t=U9|!qw{SQ z|2Lguc@EqC2o^s`v%|UXsPz0a?5Fexx|j_l72}k;rO{d5(J*dF!Dy98j4Q50KlKuo z`aL7S>vq*sd|?(jeChmp3Va%~FNMnvs#vI0-6G`QF zKD1T4M$q8*{6_uM(2JZKUZWhkJ$Pv(MCkb*DK|J9IdZ!##~$_y9w#?OtK(pw3y&66 z&u?A~x7+GCXxluRbPoqShf>u6Q|b!nEtMP8FmloT_ZV|j|1e#DLTa*Nx5z3Jaq%0XxFQPZXKI?tM%_8##Qz`lg*kF+oG zF{YpYZ*~8k`WvmEa-Uquolk>=`TmU*)6Fk`?dpeK6Vjx*a0Nt)Jst&%@yV$4qalpl zOHJj)f~TH7$x`ujJhc*5uE+D1f=ILMoxEak^*r0T8(n28AMxCE-?MtpJNvFo$DNnYXZif9GzeB=PFSc7Ej%$tHsq7|26hb zUa`DHYyHUUl@we%3gc>#(VVUpu{_cyk5sycaV_SceUs}eVe~E9f~z0lejTLGW2EaK zk(h}-x4q;(H_m2=;3>dY2NcDr7YtIpS%<+WJvM|`!{btkD7V{7qkEUse@B^@ zDPNkG4_P+!+QXhH7XC+^W8r_)ITrrMoMYjC-1!N!@Mp&*thD#?eX2fvmUgKgkQ`D= zly<@&TN0n6_jw2`BGHm^6pQna);d~|*@u?&Xkx@NQK)%A@g9M#Gp7H*ay@LLu|r`z zY=WtJ-`fmT` z?|{N(Gtc2=UvC&vN|es981@$|KFP~|jC-t7c?sjUGtOM)HCX8v%<4Rj-a3!{sLs{D zlO9G4mahw)37%`P($!I&$Maj~@vPK&>{)dl&u*PJ$7h!!C9C_F@@gmvVndb;>zA+sq3t$V4>D;ggw#=C3vK*#LxmUnenjbl@g1%~0Q@;jVXH5Ig zdYCHpdmW}qE^oj#T3U^_38sqQX4n?G^vXw$m7?--GTls(oWO z?0sVz@dMZ%W2D{-{WvIB9Q$DVE1n0S2aW2gbO?6TnC5c~cH9{GoPes*k|$wT%~Mlf zgIzbK>&6Y(O=CJLZo%$me)nMagYqo*1DGnmw*C+%UcsU?yc2OQ1|zVZLd)8aB97Qz z{o^cE^-r@-m8Utm&b5Cul&86z{l_o2L@8(Ohdq}l&HMG5m0GkEzf_*)mMEY5xMS(H zJf--h^2c?e9zU+GbzX|!+=I&XD#a<4r_>ImIOU#Fid0Tf%0nY{9+QOfHz6o@vnIkO z8~Y-R-YGCuUn3ufPBTxf{dAbBdp-eGWz~EVrb^#^3a09*pN6VZ%4cAz?)fZKm3(Hv zR5_#=#<{S0mRft+2yA6g(yoH7F+UxZYhmk* z1!p-A>!BNr>MFhww#AsH-U_>FOm_g+V5-~={Q{;+slSA&@>JXPz#i&rYy|=OKB}dT z@1jz}8^pXBlyiLxrW&JmZbMZ$3wL0uoUOYsRs8P39tQP@V#Bf0ZvxhN9KUrQuU_js z&YyK2ue|EKE)6u*hENkQr9lVPgdIh_KV7IdidNoaxTuzAL|2Q~tmZ%oh40@%XLZxL*O|P&%x?-zm09+2m@2dWRG2Dr`83#*LCNw+1%rC(f2K76ki=e8s;bNF7HCX~v^>$qfRpn}F8BEnZ zmqS(g?f4ZiRrg#8Ri$lL!PW$&9oNEC$@^89>QLuu7^|V4Rm!&&rb-^$V5*##H({#mv9`lh+4<~%sj^pm3#RHV_%>A4={rzW z+TmT8D*5b$snS2+gQMo`+b-y?ehUl)l=_*syf{Z{WvJSXCF+J`s|0P zlJ^1FK})MUnM1IX#&pb_f?W+t`(A@xH$T0TaRYYKnD&WVu)9IWhmVtnr03m(J~U7L z9wy;Khl4SxDTvHDwV06cU)EKkxFGM#@&8BPAPu5MN2gy*fwKwAk3R@Lf z2EA@nYjXp3)0md$7VNe$?O}Id_l;>8AHW_O)3lNw6f2FhIxqQOVg;`I$8lWeq1rYZ z)sMtEr_ReM;!4|lia4I?DYSJPTBB5pQfrjU8fS!Fb1p|Jd3N+thN&gr}4^&I-G!%$}l-%YGXDxK+4nS4BoLp@fh-o)ypFWLnw&d<+?ZGXXv zlpks71ci-(sj{LC!Nz8O<6x@%Kh5zlRjwf?z*M>ZnFyO4lzgYa9ycZj!ib#;on};f z;dIzj#E6IV5-#SGE9|g`zx@ogK|!9!c@8ca0~V@^OF=%Eb?yP@m^@%KR)GN=MsX|u6`u0 zc6A=Fbm~0LrB$Bh>MExnb=9EkuXhQ%{AtN9&XZhSyc|EyyY+I$HN4JC{-t({b8$UR z$-mUjQl-Kfi|cDWhf+yPB`WzhpW)J(ES;Hh-z}BrbfLa+&8^qBU;k3R<(3}gNU2pz zxvPI?hGZpwV}deY4Z&1tV5-#mYnUoExd~IHEVp2)#JdessGDl(L8g z#Y(e!m6!a9-4&#a)~otJ&(8xsPmG)&I1jt5!c*$oO12r z8qs@-Qr@LVr87~A6W7;ziAr(ed|dZ0*SVB)ImHiqq?CWD*OYTFMJk<(Qrq^QL+Nak zN>u9MrII$s>3`lR<=Y%Te&cASG>H6-3F@oB5LA_!XBal#JoOAtfT`j)5jNTUPKUW> z3QQHh$6>0>vQuHItUl9VGlG(KCQKE-=U}Q{ljotTrGTULQq}>5irM_>$-U*7|yD%X}V_&TEctug?+IvVX;&I|kSod#^pT<&e z{(fE?a&FEcU1`*FkPxi4^&_Q7UJ`JIA&lKFiKJ8ewwd7OcrHKuu-gPk{~{ptejVo>_RXRs^g zr>*fh>CWZ>?4hx^ znn9%=#pAEd zq0L0F(tlB^`X=p-Cv(nX{c|hJmOmDE#)I|w^Yx&bPh`A zvUF~m{nHFz&$nFCQV#u|<>nGGH#W3(b4!$KP>Qc-t;0{Tsj{OO15@RW%MeTzzhRiF zuX$sks@&HZ2UBH_G9ISN75fC3DtEvq!c@7x{}@b_5>A4tl6Epom8uI84=R zG8L*y>S-`lYBC+B%1ZtOOqJR_341Cieow(-|;T_DnNjs+8tAm@2*K zd6=r_G7GBebT(9#ww(i0r6uOVRH@-Sn5st{fnE(tDX+n<2c_@cfZa4dorP|}R7raq zrb=n=r4(`0*CWOGwa()jQRk&NrF_dJjjKvMhf<_c&gC3RkxH%Ie-3dURj)&-Zkj`9 zmYpzFM${OXDx-M_HXM}e>#;CZ`uaH7c=OXfHUXyUBX1&9l@ah5OqIRLB$z5CoD5Ut zGt?=t$AdCzr@~apV_IMn^wsJ%QSE8^YU!q{EpC}tXF9Q-2ueAggsBq$DcFq6ZzgP( zu~0x6F|(objOw@^fz3Cj=WYRPp)u`Ai(sm(Jd0tf%pXf&s+`NEFjZE;WiVCF?{b)` zpSKlIRqDJFrbXpn9;ejSrTC>dCI51bODW>2S1)N?CF?w{Bz0b@nV#d$Y$=%hsj?#*6W9cO zjeTdLz7wo!zi|@ZMP*JLBI0n+q0YMSjPY2QD!-624yMZdFdnAL3^oC#8q3p}2vv3Z z7<5ulr<0+o%z;y2s?48{!&Ku60-GAtBTj?PH>xeX0JhMW_SZ$Q#hKp{m@2dHQkbge zvJ9$9Yb=MUQkNAlRs2@MRQYUj6>N1-T6_&m)pK48eKqrZ4W{az>!9m1&(~q9wBsAF z4d$o4Vk1nI-xS*fQ>BcXVOuP%w(M5e$Hw#w?1QP&m-oX|iFW{|>NPnCRdsp@s!IC9 zFjejbAAzZIUXH?4>0`%Ws-DYns46XS0;cMoC!wm$$ERR&R)a+;c_-pL&M3Y5OG0MR zdWtyL)Ojg~l7F0=>T%+=Or6L33w2(K6IYG8f4OF-3pFm)EUs789Qe<@w7dvb`P}qh z(gS^#wA4nWwn+PlYTel1HPo#XiCM0%6wU2gj#Tn*KA+{f_1j8}^{%?5C*kU?7k4Ig zUg}}GgYAmXYTLj|H7Jdp(%6hoA=JxRYUxs(Qh7@CEyb6r7J7VX?37xrxli=pugmAS zROeDjOaA3Lmr|6@ayb%5I&;L3KUL8_ zs;7Pos!Hlfu*sHMci~fD(~RlbF&(Dr5uboQX`Y(*Q!rI_Pfx?1F+a`aS=bC?+Ws?P zs*K3zV5*e*d6+7GvtX+D&4$ej%FHqXn{VuN7y}DnFB#L_)XOkc;w^-!dMhk~F3wUf zfvK{uSPD}m;xgDuOKYFX!&Vv7@%su))pK4ARdu=ss>;4?Elib>`6^7+Q@;jPrIhPn zs_wZSx*;f@8)2%n_$HVtew$%ig0gySg`EtF-znH>V>$z!ft}C%F2F7s(>{9{b~Pw@ zT!TF{zc}il;%7Y0D|KG-kF!Lt{&CH!`^S6HbzUlu_FhUY;^h~ExxF5#RD-xf?9D%Y zgQ)J`f6nC;aRsdB5wFTZmdt@o! zQhaTp4*$|g)#rsV(4nBrKf|!G#x&|Um@0nbVH3>HRx{W%V|wDatTb8 z)om&4U{KN?f~j)dd>E#R-x1hRORMd245muj<1kgyo`9XSw0ezn3U=BUeg6#ftWiBn z=V0fJX{%m z(_x0V1-olZ%X|-Z-yX}4lv^Xtp7mIzT9jI;oI{-V>N)6nZ>U{4Qu#_ZmcdpA#cvgCjWNx4Eo@!p zw;r~^SSYy64;!JX{D-$qFjaEd3{$1XTVSgAZG~+QN~w3i-Z7>nd>6LUnD+knV7rWI z-`fq_V@${TUf4-vdPYvcP8-ua&cMza)82IfcF7p6a2a~FLa#xu2c^z8U^mTE?~L4n z-Oc>&!5*4l+@nGzo^dTZ??jwySsS<@X5VTg|3!(0G$nfo#ItTHB!1aSm#oh(0-i}G30MtP#@{zp%aX1|CBkj zf=#xxdcLQ?rWqse=}=YnNKe3?G*8X>DVQpLPs3E1SD%5YdR?A{s#3-oFjXSXgv|tU+=lHdQ&+}nLySzY;`n->LN z!FLpuqoSaqpkP1&&(VW|f`WpAf^rlT5;R~$F%dm?zl*-;zUtAp-DC7c_g#;^?Cz^d zs*?I8RY_G+l~g5F`B!?a@BFN}p8cF>F3u+A*FDA_XU_e3=9=q$u9v;fInTl*v3m|C z$u55uhtljPeQFT!Rmt@?8hY_BoK=04~_ql%)3U~i0Bz6m{S zRQ+-U_STr?+t8y~vT`4T9XCs*J^_2rm?Gf&u#;Jmb`EyR*y<%|KA(n3(uyC!B)K>G z7$)icdS@0 z$r{O^DHls$B4VHCVx$samxQNKjsv``O?^+p_VxaxZ(r7|K3DB0$Tyh=HHdO3>&bY| z_5bgUb7s##iH7|UHx}3v$rkX~e>tfvt~{~-sGLztN9{H|hT?V`w)c57&=Ls+eK}m# zxX$H9t>1R#e~|ZiIbHU7)ON$8o$`zxNEJ!1C0Q~amco`9Q+<}huIboa3tQ2#TM4_a zV|P9524m{88(}vY+nw9;X4ooYx(8ehyTur-ek=4gquMLo4!gscdh|}%UB={b4eV}X ziV^p~)*4d@?}bUSn%)PKWSzSow$9ROPdWvAz?kxQ5cZHU&6xGDhmENf9)WEzMvXT@ zA2q5zc?|ZrF?rksd%_s0pM-8Us(iMR`)V6S!TUWXktrrI5Xy=6>k--bzgR5=QLr(^jp?6@(FoD;D3j8W(Jp(nG{ z`kd#`9P|UToz3h+*ePS0EvI208B-}ghMh6?X-<0<_I+dI{R8MZqw@F(>{DZE#~;GZ z8`B8A0Q=0C(*6kcxiQ^VU4(sMO#Z%vT{5P*_7&{1G1cT7m?XQVZ(;LhS3YHcrivLa zXUaaO=GZ0SDU{;?FY$Qso=Rlzr>lZy)75n@89{ zd7|=1?eM{bel$-f$oJF0f7$gcw!YDbC^xEoKT$hG?HTn;)W4Dc)HFejqnx9jk3B_w z7N>|xI~$ZW8ohB2QU64qqV|sbMB^?lQB>!0|FqZD>pQyo{sZZoF7yB&6yvFtfTur<(iMl~L%U=JBn zYp#bqoF%)IM_?PW^%WHHD-Aldd8^w^(^dMmdi#TUZ48^6WDpP(@4Dl``nn?_af|T zWAb+ymb@9&*yCLi&P(j*+m|@n=P4m^vHzsZ>^?86S)a$A;wP#bWlsW){u|&WV)pYc zQKHY2i=cKTPV`emwTs$&Qv0X|aY;+0>z6c65!J2ypQXO1;W{w026`d#AGJ|bgJ^_x z{mhfU#jW&apgi5)ulBiC!}f^=qhkC?^_6Q-eN`Uk(Vd6YKL1ae>ZfY;hAsC^wa=ra zT2;-@h6#R_+Mp&v1SVN-@L ztuvq}>RU^wK;EmBiy?u*W;8H^H7Trcyr%lXQ=p zp^|vq0^4e-RhMnB?Z#-w9nhUd)e^g4yNzi~KM#}iyr-d(lm+w#X^NsvO^_tXP<7J?n@;_Q{O(w}2vjir|31}%yl0I4nlf-U0Y+aVv zO~EAjgz^E{gB`nvV3Lfj^)N}&J`9s&Ts{JmB<%*6Bz4;elk{=k?hP)&B>9HK7cfai<(Du?+TapQ zlHct73ifrDwDV=ye3tbSb7*2_TOz_Zr+u(W;ybplfB9`ZU!OhSLCz&s_j6G1E$|=L zc-Wp8vA|EO22qKU6ZX~pvTCg!$fKP9`u1hL>GQIF^m*hzDrsaNwNW`o^z$w2R-eZ$ zF+T+h9!5aU*PVmXvV|Y^&L+CAY!08&mJ?fIVwW^>_}p)0kR&7i`v;BJduV zq|dRJpf8)Ha^4G*WaqdKcG&Ec^AXrlW6I?i?7b|h-TSb4vn%}$O?Jj}0y`V`pOpR` z=e2*wIemoRBs_;QhsW(F_fuxlxF1?-Am4<7noZsoWmfj{E^({Rqa4b;Ro{NNt=TON z)Ge|v@u}~BxDVn!i`!0Pb%GK_HI7;+$~hh{Q3^hr7%1zcdDk^_yj|<=WSqzC8s%J~ zd*4rq;^Vyj#{4+1-+1ivDBrm4;wO=>;gJ#do95K$k(5z-NwT|I0+U=i`ZUktrLbjL z68o3KB9%qT_K-2n_w}$1#?&4gVUHWr{M-cF zoF(nB1tv-CdI}~<-JXVR&64r74JL`*GcZYCU%m(3ZmBhjcEIM1m0pCVT#T29*5~C@ z&_0j+lzHE`FC%)K*O@fV>m2U$C||9I)Fuh9S7cxAZTtR9gzfXlPnp4e`?6~Fd6_MJ z9@$UYZo}oQkz+jHI!nhnw_l?T)|AV#WL7PQU1Lo7T?<=bOl4jPlVsFh2fNam%FiE1(7cfa$=S!HRd%Ogd^v~kIf~FSF8gZF-NjO)X26)-i^!=3YBK7&OpZbmM z#o5=jy>DM4=Qyu3Yn;=v1NDl^xi0^<#(;f^41ND4BK3KRJbj*AvtRB%DY0;z$1OK( z&)grVLDZ9xpAxgj%Tw=W`aG)fa7!~g2Fe+=bX1y?n~Z6W-3(i0O#7wPu)B=uvz;}t zbsf7Ym?SlS04C}6dk`w=^dac_ES)|Km1KrJ0^5)!V|F7<(o;VQmE`;QkHIAQeX_@4 zl8m}dFiBRGCt#AE%ac$^qTXhhq+4!*Zq3r^Ht2Sv+Gp*6NiqhWg-LRs{v1q_``eu` zNzY{$bUI6?Gtk*Fx(E7Fmh|PzFiB6p7rH-7=Gg(*L1UU5hhUPP`VFY0(>I}#P7gyR z83{*VZ)Hh~ybU{=C1pPblXQ>oKqZ~N3zg*jbsTmgOUA-`FiF;s_hFKZx05hQT4)Y- zCQEwvEbP27je-lX&x|Q5{RsAXmelVe>Sq;0*?3Bmtu)B<@PuIZi z$&$2dVUp||?uD((lHKbRY(ti`{6^U0S@L=PCfMdI@wWvgNeey&+iG^%X<9e8LAQ_5 z9nhUdHSc!8rj4n+W?(0csm^n-Q(02()37sUCx2&Q=ZsOFPoU?G>U4JjHgD_{(H@!- z8ZU8doY&j6an5KVbrNWieI5IY^W$T5K@RmS+xJxBWS>VhE^BMwzQn6OPemDQyQt2S zmo&;*qh*4YC=sz=gQ&)3#pv5deoDOR+ehUuw+wyz5{dgf$~P)!S=korCn{&;KkE4! zq5C<uX=cAMF$J#L5HWlSS=4NQ`J?}kY-Q}2OE zdIVYvmE=5pFHDls+y|3nWZVyXAWJ@Zco4S1m`c47_IQ@`)F#+;$8H8TYfLNW9@xuS zl6EgllCtcBNqX&GflAUgufq0c$$EMKCW+l^FiHCOb=W~mtNuI$J8DcdJ_eKI7U~_C zB)9zU!X(M#I82h8hZ8VK(!K|ir03p;Ns{&?OwwCs4*Efs)c8Z#DPwB?(=bU&_z_H! zv>(IHSlYEWr2WHL*kxmCnQvf{d<*qkm?U}3!zAk+J~Wj%YfDGUhj&RhS6&0WM1yfZ zHF}J5$}-?5@?WA{-%mLW^m&P9eV(#pHSRyrm>Ve3>*={kn3R^j4AC#*b~MyTAqYSdh2Y4N)m6jz_xc%?|?mPOl|%gY-h)A7fh0t z*$tEA6!<)B+S01jGcZXn;R{enJiZ8%bjw+&B)zu>CQ1EXf=TkJ#>+5CKAqkRlk{Bn zK_#ipD=+b~JDJPMVhzQpf7k6R+DL7bwj)BQXmPl^o# zZ4uQu&N+S(wQH1j>?!KG;hylZJ5axM)#hJj&vnhdmLm2HGg9 zTjVDiW04=7NJpDf&gmsd{8|EAn`Jp?!q#O;?WbT5n%$`!Pac9v5@XlHHkh5_$VS*^ zV@kUPwlz!g*aq8fc1pVgwzFfm3pSl4_h2)y*(^Ex?18;xOl|NoOp-R(3zKBs+Xs^* z-o65pWTki&Ch4Feu^^J`aH@zvM*ghN|R4UbPv?V39SJsGxqo2)DX*k`cMv-IyBUxa?qvHTJyNnI|%QreCs z?~*{1-)pQcgDFPa%sBnbS}E@{Mn_q4d$I&3$qKp@Ch2up29@MKcsWdxXmt&2MV6j= zCG@&1Nqs%+24k9OH^L-Yfp3D{VRriV!JRP4r6bMuyI_)}T?4z<(ki;#2b1KtK<NvH2Zk7voKI{|yo zm{!F1VJD4gm6?NmU`(UtLzpDxIR!gyc1rsZ>|&iYSu1ph(MwsvzJh&iEIr7jxD5TKWBDyik~uvOOUXKxyi3A) zsl#IJ%PwZI_GNe3w@(G2Rr^n(5|#ex+wTtid{_2S4Zf><%lKVvy~?g*vG!3roD15m z+|~8{50}$duYs{ucG`VUlhz@oCsrV;U>lVB3w6dIwaJGCm8Fq<+uArY*HR&cGx|`vOdoyQUXmdo8U> zxDR%~m}bRmu!9}DL$Jff)LutmsR|uS-X-C@%<{f{G9X^`pQvmDp5hc`4Oy(G5`p{n zllqD5BmYs&B0uWk(Q~QdoAq<)D1WnPi}daKX(x&u(x-e#nygs_}$v?O~>EOp@sQ3G959%+(99&yA^k7h#u-slH#qzRnVVmtpf}r!uFfP&C?bfR{btV(oLr zsfPwUm9f$HRBkZ(yzEl@ysVvlUgl??M}DI6l(F6S6ZtP|WZyn&iMk3eHU*<)L7T>& zhI=`-FFVVAiK4z4?t}WBioPGM+7pyN>Vv2+qdtiIl;36Omvgw?IM*#Gf7CCWhX?G- zeyyKxG!~PKU^YcPQ|{6FIYc#!bBNk5P7%$JI7L*dE40UGXL4z;tg%}h?Q)tmdS|rT zY1RsT-f7kfopzeFLT8+2jlaDzdckSd3VqRO)(V|9`fZlP^m&*h-vdlfp=j7H;B_Vs z+K=|66zR1tOW%D?L8r&)4D{p}or9+IV|?_Ic}_pG=DtTS8~-{>c5jzq^Tx^?g(f@W zniHeFmOlN=TJ^indDi%BYxIiKtQGpI)2y+kjrJRz&(i%S9gbG4514iOnKkyDqt~2f z&Ap6Xcb+wRYjn_Q)(So3G;7?rjoxsYwL;%?nl;8@(#AQbr_o`z&RX$t#ONqXJS>4- zYfL?|0w&3Km{-Ci`Hb;8m?U+&9=0k=(yoR{GBa<1NqXzu3YBEc+y;~6v(ejOlAQML zfJrVLDW2a6yDLl2Werr4UcMV9$>_NUCdqtU3zOtV^In)FZG9h1k~-fHlcXl=V3M@! z6l`;rwBZ)mQ^vISd>SU{wc84nbh-^HNg1DkNs`a^V3M@#cGz^5*v-Hs`F!sMm?U|; z2$RI$EKHJdvj-+g9xuTp$>U|1ByG4CCP`cGgGqWTyaJVEe7y>j#N&RLBy0Bpm?S;* z8cfo2c^xW=UqQb%s=d}_*u1f_nn6x*(J|*)V|^aI<1}l9zUwq=)yHw;qb!MUOJI^j@1?M1W|xffxLXcgVN^Y^5_Vmd z{u#jaP)YK+0Ve4sx)FL)mgIgjY?U!`UkzQ?v7CZ!Hugm>uDlXh@=Pj0OAU0ei*h0iIB<-{}3M*eh%0p6jHc`7AX%uS>Q`hojZou0Br&@;;Xodu5GP zWb}d4tQGp9)2tPG%4yaLJ?%7Wg?{8TYlVL7G;4*PahkP4&l(+NS#}YyCB}4Pz7!_O z+P(}XiNEDANyhRuFiFnG*TN(@Td#mgvV&R)ljNLv9ZZsZuZKx`biDy8$%wfTCP^+g z!6dmezZoV;+Ep+~a$XIS^qg;j-kK$rx4|Si&E5`^^wf7iC26rcVUlin7gW;e8mJ^? zzZ)h=&)fr(q?Bu6_hm`i`(culXB|wE+DySD@%I2s(o6UtRFd=XLoi87xE>}+E)T;b z8557dB$?A2V3MTW2$S^EJPMU$OgsjYZ*qwz*vT}YOCh4XA z0aTJvcMc{=oj-v|lFO$sNmj%k!X&B5d6*=nxd4;I?lYJqdHe__$>{nVCh0Y~2$dv0 zd;ybm%P*ml)bA2Z(k;J&N;2Mm43nhAegc!EHebUevAYbDq{Y60Ns`C6Fi9`XJT#5s ztkM6xOTu|MS@rG9uD8$2KD^J%DWK0&Mw|i`|D>Eu`YFmcC;Pm7m!Qu-2y!kbgT8%K zx2P?mwwu&{WM57y{c^@_8udbyL%9R!=TN@Y(&teNMJ=&A=z*waK*+=aY_gLg9>d7dFXl_I;7tOJ9huv?vXrx3v8I>~{DN#A&mWy(TN;-KC zllDziw{yWPi0c-4is}&AN4*pIiAp-`r+&+=KU$)B6O}WH)X^x7${)9ARH8V=e~Ucg z+@nYp&GX?N;^dmL>Gx3iK69T(Jrwzm=14R4P zr7%g~oiBq*a>`i_ljIY`YhaR`Q?7+cy2lkzNvA8Jl1{IKO5*i;m?USX8(@;0AZ~<7 zQu3Q%lAOhEhDnlk6-<(wjMXqnPPn(gBx&1QVUnc14JL`*?J!CF-2s#2M(s|Rq_@mn zP)Vn2ppy8!8zxCR+yj%OjB8<%w8OnHN$!a5gGrLd{jhae(kD|eN$ehgNm7;vVUpbD zJp_{^?RuCbcb^Z#Bq{SFFiF~a18ifK*gXo9^cH*!D#_S>941L?ZGuTs<0oK}l=?~7 z<}4}A7MLWX@F|$2m*#1xB<-~oCQ0gTFiCQG1|~_JzXy{f?RJ-n538RGpHmti9do# zQku_UlAih^RFYWx1x%6_`w}LJ$4f9t_xKf5l3M>5CW*(Nz$B^l*Dy)!F2f`}mv5kw zr2ZBrNg3y1lAbz^OE?;1e1MnzU*Eo*%=*0Sh5NkRMfG{)Cl!S~Y(GUg8T5JC^Y(d^ zLu6le=Y2nAH{a)RNu#zar^~*la;oj~IESbXaf+xG<)qrrJF<^+C}+vP+*34`$|A#Fx*C0vjPnFf6G(U8gVTq zulI2M;;|R!9kpPbqTJK=$7|#%YQf<;#G^GXQT!w-Q=DSbu^H7a8U^}`4JrG6>qT=b zTEC+)Q|`q2{v-RSoKed~<&0MKXtYG_7WYh)a}=$joTHLPEi~*Wo@-HyM*ia($4??( zQ5#LZw^IL%evpcgUMsR>PrVX$gE8$oZiKBerm?dccAGJ^%I&bV#;D)D&~;;U3i^;y zrC$%*U`(~$2z%U^%DoA;*_cMi7T8u}2LeT?pa&W_PN(EUc0(*f8)W9pYfu*1g4 z=?L^_$MP8Lq%nD%gGsVRe*inxu{#YrXG}SN0{g6E_aoTn#?&_#VV8`l9lwHoZA@|S zGHl*hnQ72eG2>-4_POeVRT6HW6xQ>8irIk2DWW_kEmMj6{Srm~%dV|&U*d0{M}A6l z>Dx!;kMfOMD1H*<*Vx^9e4 zK_4=zyw}4vj9G4kK5kSc+63EdOwniyYF*j{6ld>?fG7(DF2m-HsohcmplIFGOaF;#Fpxst2Y6&(cK3b%FEGFRyv&(CPgw>jqMRo! z>Et=9^%t~7y+i2NVc5Q&zx(#XC8|5lzJ1xz_W9&(H|cok-a7PiAFc(Td5k_ug-fp$ zS#oc^61Liy`tcT+B)9Fi!X&w4z6~Zx%ia!?B;Pw=lHB{=36ta#l)GS(%SP|#F}MaM z>2v6As3f`E1C!*_^|dfbPPzBOB+2DIn55@&KUC7`I;bSInSwo#rCUA-eaNW#WP8`WNF1|~_n zy#SMB1iT27q%CG)l8lNyu$QvL?q%5CEcr&;KG;#SQ|laqNirYbfk`rY-i1k$$8ne> zd7OYr(lYPCBpFZd!z8K4Nth)5=3pOWN%=m6oywB-I}Q8DnELZ$*!PVknL|blzx*9MEJmX3hH~{7G307N4SgcdVbH z+?MxwSylSHM9e-G~Ac`eb@>7L_HAKxSVhMHIDiqYU|+|uuB=JK~&Nx->7HG9YDYQQ90w5 zC_Bf+dMdm6zJ0mH80X7IKM6+Zq%ASo7~&fN13eJ+SmZw%Ddo0kyuQBM8pt`SanzU5 z?2CGA@;;907JG`HMC}@-U}TIwO$ON}OZG|2VJnQOXI8>)FoxF~p{tCl469-5#w@3x zn~iE-ZGk;yOzr(NY^yPO+y;B5WA{DSc4L%h2lQE^8Y9oab{f+t*aeg1o@X~q(#O&B zP)Xv-G)$5Hmq3l6{z z8dKUsFiEe=8=0=tPus0dNuSqGD|0f?yCmPt*6d6U<4=;^{t=iYZTJ>Ul2&*dCdoPT zC`^(TJO-0w7yk}Sl04ppN%DKZ$6+V3B=)=qljOJN--k(JcM>MaerOJMDob|zr(tJ| zX&jw}oinCU{R!;6vD}EM*DpXNDfMSCNpkrSOp+RZ4wIzR7h#h0$QLllC8J03F5yeq zr7UUbuV9ko@ne`Ic0Ykh(wkqyBq_^fn52)kZ=jNR{1zt3Y?_Bj;xUyKisoJio|Iir zKSfzl#yRJ-0Y7C09k-|61NOuI8My=YWslMKpG;Y!`%lVR-{*0PvX=Ezl)Z4DmplDF zFRMwPm;F$mM}1IMxW0W{gZN2Vzx%!v@lvurkNPLhA%0TU{C*yBis2TlC%wL>sI<`- zh*~4Ek4qYjfoLp6IZRrEXe>qLiE9w$9JNto|J~(qDwxr64wFX*jj+)VlgsQiOJezQ zm?ZJ*8rTZ6QwywwU1yB4T@Ss%sCxTG*iFVXt8a#_GDhmv(7VRy8t7W1%Kcv0I%CRb z3bw)6x!j5yVVjL9?H1Tm#xy&hhDov_ZiQ{@*gXT=ZcMGX12%1py39aljjA+zV0(?J zH2Yu&jgk5gRFZY=4VWbB-g-Me37)+A( zdIu)yYwo*HNpd+3lVseTfJsuj_h6FPy$_S5#wTHtWfulJl_f2B8upPf+WKSY8Kdfz zv#{@H>7SDP0D8_WN&gA-yixV^1=#0fmKULyj4G$EU|$$!iv+h{r{g!sEw4z02**;>%lh=ZjAf^+nWo z(TuyA`o(FY`5TpXxTWeR(f#&_{7l|{ih=`u7tQx*uAB-YQ`8S?q0#x2b9ybw(nr!# z=rW`7yc~8-mW zme}16yTk0X^Su*xmoc^K8ra>&)I#^b)^_afh27V&yC1eLOUB0(Op=}8129R}{Rd%^ zMCgZLlGv?>ZOD=pc_U1cw2#6hv3m?A$$iY@uuWN#_6e9IJBBA=l0?(ZFiCb1TVPwW z^ii`7y4|Q^=nmLUW12O)V3MACH+0%8HOgmTFBsDteGxWmOu6iVy<|+|<7L=hV;T$l zV3M@MD={I7pr?T{% zPeacb)hIa&J7-L1p-*6+b?klw``lP^n`6*L=odycn!bcxGN!ou73{~xG;)3d``VaB z*k#x^SrTo&h0U8?iNDZfXT01A^|@+^RT6Gr;(p)0-0}2zSr7U=Ib=oXKZ#0OKD+MQ zm$k9aqZ-6HM|Ftm9OY2dz431i>S9J^%ITz$y+HJ$7RpE*cwmXs>Gy}u%E}N90f)f(i3}S?b^}x z`BRJ0XHK(5%pd*8=*cYkmckq?k*wAK-#yOpfK?J`co}_eXgW*S3~WBj>KB?=)=J4P zCOy5@WeJ;tO=nqr!V<|^`G0v|Bt5;>Wr^h!Y&uIk&cNn7cIhb;t(54?^gg}TWm$Z} z9>@~A2VoBxQ=hDdZ8oM+y9Ku0m`3;x*t5ny&HectY?m?3klipzR{G~*(`KhAH3K`D zC1sw2C1RFk4vq6V%Eoy;Cyn#S-tURXFA20|ql2tki}OT12mGw#+dJca_`Gg`eN+Sb zZ-M=!`NsB>*0-D&$Lm#R&NyE>D&KAE^Wh%m6fscW5{3JIhRajt$ED;cz1C%U?Pxyt z$rNlp%UW(|Vp(Hcj=oB|y|TvMdGuqaSz~WG`iar$ENSl<*imEYK^|SlpeM6rjLyO4 zv#g^8npnqn^mTflUhA?X{S<6EOLo9Bu#?6#bLU{mDrtQz;OUAifZ-z?J1FK-SnWZA%?XWwtq~v$P z?&{dBfk|R_H%yXJ-vhhP(o&lHp_0^P9c;=hwV!$bw%(XZ_%KY8TpodKFgtSD2z|_` zQa=upB=siP(;d65FiGsT!JaWYa`_%~mr>=i8zxEW=V8-kN9q~qtWl-j1AA%A@@42= zqiUahu>E6}2cQRy&gT9<1e2u2-+)O{$~R$$EiI)y0+nR+yakga_1mzcW2uipPa0Jn z=V0f@EH6MWbu7PvNs`ZxVUpD5C$O(AEhWDU{l=*B{uVYrW|($71}qsF&>iplF2sd zZPLbht<^Y>>}v@ZYhPMt&^~{;*1na!q-n+h4|bVm_*q zo?~Dg*J$qRI`@UXuWqQ#$8ad25NAn!^_!BfzyyP5>+P&-?jrDG?b2PrOy3aWpC4I#?8vb8(j)tH8 z&e8C5z&RS<(s<1|8nf+n=V<(%+Ck@N)a#J*H%y~_-gJ(J{bA>5)a!_IH0=>*jL&>ahB+s}$FL zl%F*#8T#s_&kE|=g~pmPeuXCgD(Co>LM;y~Ujk_4Th~A?0{En@#XKk z3T@s+uGeqeIC7<(Zg-3&rb*SGs_aeA*rItyCjXVdQ{`|j7klFo?BQV81n{e*7Km_r|ne{R8Ze#x!I91hbq7z4pd`4iBnE)mb~-fh&zP$!0ir zOU&{$a#yaf6&ZY@57T+F1ZlabB<2H7C|}}^efy_SvfTM?rcv74ov$fe_IEqKr*L)F zTIXmC=X;&I(ryps;eIDCK>1Lto0IA72^pjd6H)rwpWbgNw>+6@58YDo*VMSx zONNFg`YS#4p8F>IsXcc`@uMJcr~5&}&t1;FN0skDkE$JOkKR}OD>&Wne%2MPe5ag0 zRJg7O);r%|8Y6Y1^T&(5#>6J)n+wm-8SV1(r~^)9?yV3J<*e}+mj&wmS(YmQ-fOs{-N^#$@-3bP4~AybaIV86 zoxWM%S7WM2?QQq#4GRs1b1}Q&N|$Fr71QIk&sMsj)+zZVdF5l#zz$GRsP6yJ7<)_2 zd-h%O(X6dIcfYn(*{*f_6=U`*o%?=K_P0A{CrG~R`_t10#{4|!_Uydq19o5Osqe#7 z&bklt{gd*o`zPNg$-eHB*ty_;#`B#mOJQt$L!gCCC1JR`?}vkBi~c*hrJ2y!2TpX^__~^q3%@Bn6q5@ zBzrXK`xEz%#=ebxPI~G)9?jgkDfvKylU7fl&Sh4s9&y8Nln+i`dhoGDN2^y`r z$~hW?aJ6$ZzE5+Db2J9$t|Hs?JZv6m?MK`{heK}8Hahpip)Nz} z;Sh~_J>m9fw8N9m(R`iU>`%~0L9k0tx0(et-sbiMG;-eIeCL?`F6SQJG+qb7Te8f3 zSp%F0GA&RwknJDK;eh9G&@`{xA%AkXJkj_%;{0gg>a}CeJ@h4#%d{Z)(Hb@Qyj z6c7p%^Ps5j+0~%vSuq0qeOC!%LMstP>-urMl`hOIrRHqye!9xlrfZe6eOYT?x9~Ff z{y}`f{sCWg|KR%s+1Fs>AwpePLxfLl4cseF?X^}iABOjON!OW1&8M9E)KJcKYA~R& zufy4gtxjci*!p18zd5LbZN8L9!{4**Dx4;|=nwy6ddKeQ-?E-we>A2qtp5q-X$aH) z-jw0-F+8Fo5BrDrndO_Eo}&*1b=88Qz*e9R1z(TU@B`~n@|?4-gTz-PZ4&B=Ck$&_q9zIr~_-8N?O-8G%wMk?rF1Ww8j?aXbhr(t$4D`{Z=>QtYUcD z=AN#wig}p^)-mnL>SRUZv%?oW2Q+&6MdxU=Dx3WD6wPz4>meGRUUE-p)a_;GzJ97d z_c>?%^c)6OQ1x65IKF<$(-HUNfk;=QH4wdH7M{bqp2AmF&4;?KdgxLPHFSN@^Yo#6 zI#Zq~#aZWQToc#N(9e(AUvPUgc3hu1NAo)T$e&yq^YoQ-GI&qW5!HF6+xt4Bb{be`l4WkC)t1d;WRR8g!4G2k`ld= zk8{NjIe%jB)6XB4C#Q1G#I?jc!YSt(;XW_+%Hg8DOFuo1B|Uqpk<6n;YlM@^-F20} zB%-KRU1zShjtomjpXNHaZC7bWh6PdT&;L_O%uMaNaoxwE6H~%8QG$|89oBPJo+X(p zHc&H8a}z$%L>Ww@QVc$6m7(=4_Skzuu5{EAt9$zC;gMWwfJEbba-F9@^A^9}pF|_P%1DWcGBwy-z>al_$EqnR5PsX$)(&*@>}b_Bs$? z(-Sn#R2$vXv}vAV#-FhLB#*lN^lhewf8AvIW>T#&u$fdy*ysLVDLHGgc-1+9mV5^S ztu90kxjh>F`G#{e|IFk~e}cAjv_AjZAY0V*)HkcT{~id~+IrT2jYiIFU6UW*#Hyd` z7Iw}`fIS=3#L&DC>Q?nsNujxS+TNv~ADKoQeeB$q1T8IRoqu7P=dj>Yd^`;V@|3a> z9v6f_&$1mlHAdXFt9Ti^&~@6*-*=UEj>)o75A{^nnd{-bd$RaT%GxeZt9@E!ZF^m? zDF5<*?$+X0`CWSbgHe^?A7Q^XrY*>CV889y{SGF{X!;kJB)|Ofudv@+TE(?L!2W1V z`Thy^=PdDOrSqRr>kluc9IiaIDbXF%(DwvdUrHS=Vaa32TX~k`RgTNn+*2ElERXaP zZNbMXOG+u^YpL7&p+jS>9y)v_)JVF~?R~{dB-f^{c^*@FG7wdDsZ*n>Z$?RR!E^EL zC{G49q`F#}FpBvK;Td(6Xq1@^YkW6>>sLytRmQEm%9T>KdR{%&b>{k&y#9rw^l$zb z%ju_CdR{++{@kca_Y2rBjcNP+E7(6|$!z*Zm?Sgx*RbDa>ACz4`g@}q{eOV{am?~h z&_5g1if-lZ{&dG(==yNbu*bt6-rBQvkVrO-K(ISMs}s6Y7Tuu5Pu#Mr3fNlv({aR&d^+WlKT|++Ova~t8_s-coCc`LD2F8k5Ig!TzCR_m8k&8`J3f4eXzcsg?d2_FH4A z=y`nq4*D-f)h_=E`@J!h<`1xcGp2U~CE$@BY@6;m8$zT&$SvX-ygSP@c8s zemquv{PglFUR#k!V`8uc)Q^Ktw5eRo6Kq)h>T1mTyL6=a&OsoR){g`lYs9SW#7U)=Jk}4KI6fe>A39|0md=v#fug&I)5ceN1*?(ua2j%;g2Ptrb|2q?f|p4tp!ldLIV(9$qay zu!mPGEQlJ^V<2j1q_6aXv77g!dfmnQZe49(uO$3(KKaPKGH^YwUa0%>TT0zXajWO< zJ9f2X-La!_F*NX99Mz(J7w7JhgIehx_wS#lYMj;my?-zu`}(l}nzzO}_k`x-X3C%V z2LST5(K#C9{!!;>?1>(8{?kzF~|$iBIx(2UvQ_8##Q$vrd>^L1hyi1})# zfrzi1YsB}+KAZhtIj;Ms#TpsAyrk2m2J%1Se711aY>#vQC`9EP_$VY<<`V7m6t5Id zD(S1v_ZO~H{sHH&6)yYNogXY*BlVDTJ`C|*d()pBE-5rak2rs;aP27Gc7C+*By%0= z#hrib!IS#Iho48)uJt_nUh$=Ndf(oqpC=1f?dF_+P`LWxL+7UoR~=3}=VKD?WClJa zk)N|}|NY`8$y~P|_>)h|6P5Ib&d(PvPZyl~2QKP|FP&c+v#%GGKQ3G?^b@!Lx^Vfw z?0mlPBy&mqL01`GB^H;m?N_bP&B}EjVNSZr@UKUiMf>EfcImouz3nrZHQJ}OGPd?N z8fRXDt}=W{W)|&|w)T>(Rk~HqtH076Iv$TNxvyJ>( z{o5{S`>96p-~8{^CO^%RIr=l$-x^cd{totYV|e}r^zXA|)&8%rUz(*_>sPRUFeZ=x z2>W%GzI*r$^qfxyhd;Q9JPbvj;ggfM%Yyt`^RzXilB32*9cmrRdboV$ znIhl7vcWCSgilod!8Gv`jmW_?y(if4cl+v1g`YWOU(XzVgF(yHI}FYrj2><-l9li8 zRoc40zsp*Sak<9crJufEPkQc~x?@MWs z^;zA|`Y!ZTZqI>Ts7_J?yHNS5dr;qL?#_NrczI5i^2q<3bKk$I-Rl1B^I|Xm7u}xy z8|_*5Z@y2H{bjeGFMg5?XEEM9QCDg2id37fx$EuKb|{`%(yPxer4MV^_Nq4Xl6RGM zx&^iW&Hs@SljfhYo?eoS!+(ZJ`ug`{4M2Hs3=-&I=Qi5dRDz*4vKYVP-`v;w)c^x0}CusbN$$IC$3}`CUW#Cb>;Lk=5T*CC02fu33Xxrlc zw-!H1=1IEEpP*3(mXY+-7ZkP8f(3=Ps0+$Y^T_mJc}Z;AI5nQJcj+e~m6~x}P8^Nx zSv@$TF}n!E$=(mtNzXMK2+0Z)H6$lPd$mVd>*%x~@N|5(j+DAeaoeskyh$zPY~`o1 z-F4-9yMBL-bghpkh9Xj_U#rcMO=DSU9aGyW+fQ4q(>ffsda6~{t8anXM(eb^w)(2w zHZ8C1l#0*EWZ|p5RwNF_!`mz1=YW)uEGk*Gi zcI*GM{4TwIZdCdF0`|)>%U?l%ZB%ppH!w;1_n%;rd@T9Tu-{r*&Ai{iBw3sO1@^CI zr&0KOm?Ue%A7GNiz<+~DvUdGDOp-kQ2$SR^@IS%+BTF9}{|S|J`e&#l`B)qJ&*7*% zyj^#{p4ybj`B3zYy$sE%;R};eo+1C`S(1&ht(5H4lBMrpbahvEFxz|H>dwO+q@Voi zSoPI;qSgFrp16;$61AM!u-EA(aJ_v!+}d*lvwS$S;h{HHya^jaTbIE!y(ic(;p?Uw zjfu9H+Zyg|m>S&OtU{J!$!gxOL)tNEig%mcI{(+UExem{+g$b;-W?pXJ;b|{ZkvDY zXpVR1k@la*F7R&NZS(iqQfu?RY8GL@Ku6I&=CQdu9NS5|Oqg7TqM`I&-opUrF zve)|)G(MHM!8sZ|b)$1Ma=ytq8e^`0&W^^xb(Pzrd5Kp06F-1yiJfwe<|zh_VA{?M z9Ko~&7&w4w`CsojJZu_eeZ)DM=gdJZJ@+G<7NUA&^Q7%9O>3i&Tr>jag6+po|F4vQ ze*an4)9Y`IozH&$4)$|n%J~Z4PNiF{wCdml-EliS@ z{T<9osd6uI`EtK`f^kDIyWX}1Jr-<%SkCqe~0mt0l z?@YD)EVwgen>gq8r^fu8c7CSt>(lo(M`xX%D_nE&6X)km!~X^6e)p-H(*86z-Vn9R(#kJBvRu7S&46yTTyOgvy3Vwu z1O4#R|2sWmWdAJd-B&wKsyzlGfXY1(0cP`Ds1blYMAWa)t%RFSYP37`+_tWfY zg_jgfvEjP(WTijx^->oDb-na;Fg#R-*RPZ^8K!!SRiu-)<+pW|X{8&;@o)a01ihp`&F|7nk~aGp z>~GCd{{Ig4b7P7Zzko>+kNzI^OS4nCe+B!sF|GN(f&JN7uxlCqbptE$@KLQi%fsnv z8v0ZtT^!u0yk*||$yTx!<^?lYHrjkmD&vc8K5H6Bmp#s3DqLlI*|~3tv{|oPBH#L` zyaQVwbwJ(vyjJ|n{&n~7TOtjBL(cunkMi@T^S6p0*}v`FH%f`*)~#D5|B9n(_O7RR zuXxfD{l0S#lFDJu`3J>5$(+N7{=_#|YNNWj`lzJP0R7nQ(U=Hq!O~MSwx4w~_Wj~V zp_Af-LrGMi7zb^SE znOp9%Kl!FSQO&+}zNiI>vF(YvN;@zI_cF;r``0dl0HSp1M`Kp2MY;uaePHX=d8X0t z@4HGnoxX(KHFv%JsZ}z&%38GAM!oAL=qgJ`+KP0M>+Kq9th#Mi@nxqAU2jKwwfEn! zx%g?8<&X~hxiRJb3)tTq%UhO|K<|?LWv0x{Ut#%cvs8Qh2KHNH^7uR0AB|~q`X|_* zjRhlu$zB(Ll)1eY{N2>}38~|=x`y$BojQ}P?$dpDt=}4FcRi1^r6(1F_f@lf)@XuT zDmB_FuMipwRT^cSGoFjPhJ|!L;GobyF$F_7SZ)~S+71v&0o)@tF(JD?x}Vy+9l;_ z9nomqSJgWczX3@p@{Pu|Uh);DQHpxgaed*snIkeMhQ_yEYb^E{s_|1}DEAk96ncl} zi$+QBbnbIfEjH!c=VT(e1~dNTq-k2duT4+p{E2U*6-(+ynk_Q7QEZb_D&H{6zHXR( zqnm8};J=JKrc4=DmX#Ew9me=<9&<=pu zVZCHO*`WI+xq4J|T9ojjnq~H0CaMzS(anvDS;ar$oaKaWL6>MAS&F z@emFFM8{of1Q;g{Y3NeOgv3bJhEzpEQqXJ9o5L{cgwP`H_IMzlh53C zHRj%GrC>$kJ~=ToVlI(6agWi8JT*oWmGN_zc}+jjI3cWYjz(MD?HrBKbdPhtxmKUu z>m1G7?mmBlM$UY>H$6pTMzV$^jz*hKxt|A2^Bf-ZC%(5=YuCNK@8FYVZtabp;?bV3 z$Nb6T<%wd*Cg)ESt}CP`o%^m|{V=fWS35oJ_P*zr{Wj;%6#tr213P}zZD7YQ`+@zw z%0IB**Xd-&^L?S@tJUyD=d*>YoO_(VRCtoPO<(pWd&?7f+UIv zQK)%-$WufYg@;QHD(exqf2;5$a}IC&lcVK{qUbT_?-Z`GzU%yW;p+Vp&fhCM$(+Oc z{=|1U@-*lC1JfAwA3FDakM>Y?-*d(+eAJ)y6u$FOnd;8xTuCvTOZ17`e_FU&>4(nG z7rr~&UvTbMh+5kQt`Jqyi*EnLn4d45M|-4iihYtf=WjiQ@18VP9e0)X4qR>CHFup) zr~Q3b@iy*4*V|WAYE!rED(xI6*&Eb_w%iP`;HK=VW)YhuH$ADE{V%k-{B}#(ZcmMj zuDR>&R%!KLYsZw_=Mmw#bd^P1>UGUsZ=Wt(r|aY*EKR$2H3Pi_U8OzN+Fn~_ZRMz6 z73mhj^>*(o3cGDrVRz6)uD5+Av#?FuDO;!VR?D=;V#{Y7OWL(>-IKNEQ>zEtt=6i2 zJ7uf>SMRme0<9cdt<&m_R=QT4ZH@0Zu3!E4lG=UI>i<@&wbHd}7^iDTp;pVZ#!RaR zTXVGCYTCyolZCH#q-}rUyPap;a#zap>Py?ov(>WgnzZg~TVt*@2HH8c>d{Ww8q58Z z9Jdo*I(jgDKfE5d>v7X|;#0}SUL5GMtGoe8t5iMIO}mw)n(_AsU9-OwR}U>51k!W+ zdvIcb7?N&-2zezWRM?YmB$ns#a-IRT}%It8bmQ-&SO4)v^`O zTi;N9p;5b&^$A|Rv-G=3 zwc)_sq{?6KChsfd(K^SyV`3}<+?7t5Rr-lm;^*iAe}cvt^g-unoH4nNOi$71n|d>e zhW*3t=MmGe=l(J=G@@9&$3)|kI&L+Sz29#tdez%av}L1h`SUpLI+J~L>&g8mJ;NPn zviIB2r02O>??cfjQC&>YI5X8H)$c>KXRP<3+mq+?Vr&jLQoQJVw(ul#-3IPHb($Es`BdKf+|w&PPp|qDzY`^ofm>0H;ek6*#gw|e z@Vieu)!R?MPM~Q<1CQWwKGBhvvMjADG5${?Pg9!jsJH#0_S8=XaSrskfPE zeA>X>X0k$K+@DRvUTEAhapRdDp?R;?+fOud;4Us8sJu(XjtK*Nm;W04$g}7w{dW}WTuFhz5)J>OXjz8!r zL^7w-u9?Rfe}B?7tM{D0UwmFENwX}&e?i|e>bF|Aq&ZzJX}3Ii?0G?Zih1lof7|cf zZhpB%hx5xTxx45oWp?(kzvVlC{yxspO_CD*-vP5JdDcR8y~gd9Ql~G^ck}7$HY2*E ztM~6KyZw=4Y}dA{FD&c$)A3t^uGc)zyS81uKf=4|l3g>UJ+H1ONgJ1Tl2N|cnzUns zR<^Dy*ZZ@|A0(yUa^ufhcUp?OU31slpE@M7)E~9IJy}x5{&Pq7fu6O_h+2PoDeUd= zAGaval5CXbuX7G=wOqSAf1Q-AUd~Z4>Z?|1T0UES)vkZ*&hF~_s-0*1X=~QCPPA9w z2002uJ)-ZUrvfj0*SvsI>%M?Ej2v5s(hPPTrI z)_J3zqtW;T;x_k>#woF$uhH<&X*;Fzb9d5nOWx_8(1?hf!_!kV_6lp z&Ph5O)N>LVJ;|vl<$~sWmVpzLYA|qq()Uva&QEH&dVWHq#+;^7&VH^^4F=9t`doX# zxynmgPgZEujqj_Z9MD*+>v;>!J#qd@Df}d+*i}zrXv|E`Wy#)8XsUBPp`mdq<-C^c z{p6-dUQcdl)PQqbviFml{Ld%Sdy%3??QJ{e>AU2E=~_P9`>fvCAWrdYHJB%I}d#<*$**BhGAY{~B?KG0YF*O!DIqN71)N95f$u z){MQM%-bHdw^tuk{#v`<)+bf!rJx?IJ#Xv$rk)IZ#${=LTjT26M)M^oO{*5IbghdNyzpQi%B^D+4p|7O4B}lwbrz&EoUlRBUZMbUhVHvx4wVds^fT@PJ6rBjG6KG zUFAxj5NYSzP2hU}Q$>PjdS2#k4WQk!@CqHLu_SbVJ8YLaLol`H=^Cuei=aXl9q4~Pa%90+UF-Phe z!&*ZB53D7c-*qiP;|_V?7EY&wy2hYUQqHxhJbuEJ{lLnjd;9Bk?hlgU&$`g{{-^!^ASvw?DI26Q+)d#6 zqEgnR9%?2Izv;y}T)0Na5$A6eu6*Bij>bqk>inHz zuaWbvb2R=>`ElnbioHhEd(P1)XWeOf5 z3;x#GW=qDIX^T5~s_;{}MV@w!#$4Iz9L?kBHh;3ccuF$++Tl;oDDSh*(det^oTJgA zJDsCZhh5Hhn?_lmcaDaiY3FFdk@u%#Hcpg23pzW1^>QCA`Ic9H8>N~!PZx^-7+ zod(-6=3HY=tDU;pxZch$p119?sJ}dquEHqoBG<3fYOR~PxQ4!4^?bStv#E<*Z})KP z4qM~T{dARfeywyGqg_|7bE5F~U4{H=ctxY%>zU7^g8HsTg<11PwAkamUn*Q>e%bln z!d2dV&i5CdWFDyp{0SO&Z?8E=BW}L#{Ge%!q(jc5_~j=-jpm7N-n4HRhHcdV-pPI--pPNBcOKVN;~LkzsTPci&Xc6(+SL)$dgh}> zHLs(_`v`Bfmpa~*#@}}pj|8<8p3`Ib4_Vioyw_FNIrrkdo=C3GK)_b4-L|W=*ZBBTygZ^y0oo*l}4GDp{um_4y|a~YV&qIuCABc zC)d`uZ{z&<3#Hu#alM^itB3!JEmH?F8sA{6doDEQ^-`}6nveNq{sfH~z1;bArjf(- z&e4{R*5{aZgL5=%w?r2_p-eY=idCkuCaiYuYmQ=kU2}Y`P>AKGnCtam|FO@7Ct<$PwJ7p_|w|cqNldW{EHN54sRl`;*3%l2RSFl-QqeKWJWq_xy?PlGXPM zcFC;V3wFtr)ZKKI_ME=D@z>fx(3;&MxZW;HGHb+_)@)cr$~vxYw&GA0R_esis9RmL zuXr=85zS~#eqI^#|Ej%9KhYQ^`<=VeZk;RMpw$}QWG?wUfchrpHBWkO>00+r8MLlc zU%SVA(H4n$tEl$V?!Xmtubw(jw5J_>qBvTg_zq4nyYAptn6srLMYNUfnw=Rju*NU(cyCiOw zlGVAALOFb5@6ylng{w{LKK=8;^_`)MZhxt8*?;By>%!Fsmz~cSu6!MLm3EY9ot0aA zhSr{FcW$$85nT7abkbGYd;3;AYwf05yG6Bfw+ODcZ*_EY?Y3RzN;Pbirqze7bSeL< zZt-^7R*70|-rB*o`mwdEY^75<>yYzRK)aQJRY1N5Rsq%NM(WNT#f0Ah~0`3HFh5!E9nu>0gaZZdu23E0SmrK#15AgA$db%w^r8% zUjsBI<~(0t1A3oQ`3j(xm|z7+p7SgnSOYZbE_%+s2B<^>Yk*pAU=2`-+)Y=xQdGLy zd3UN2cUnGMC2ggn4ZBryy%n)r=a2Sh?X4VJr>G^PNAj7{OV?G}y+vRCLZH>6rY8B77D@B!7tGCPA8Xu&r(G`uJteNJni$9T8XX|~

    `B`F70zyuC|5(c0fY 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 z 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 + + + win-framework + com.win + ${revision} + + 4.0.0 + win-spring-boot-starter-biz-tenant + jar + + ${project.artifactId} + 多租户 + https://github.com/YunaiV/ruoyi-vue-pro + + + + com.win + win-common + + + + + com.win + win-spring-boot-starter-security + + + + + com.win + win-spring-boot-starter-mybatis + + + + com.win + win-spring-boot-starter-redis + + + + + com.win + win-spring-boot-starter-rpc + true + + + + + com.win + win-spring-boot-starter-job + true + + + + + com.win + win-spring-boot-starter-mq + true + + + org.springframework.kafka + spring-kafka + true + + + org.springframework.amqp + spring-rabbit + true + + + org.apache.rocketmq + rocketmq-spring-boot-starter + true + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + com.google.guava + guava + + + + + diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/config/TenantProperties.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/config/TenantProperties.java new file mode 100644 index 0000000..7817cd4 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/config/TenantProperties.java @@ -0,0 +1,42 @@ +package com.win.framework.tenant.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.Collections; +import java.util.Set; + +/** + * 多租户配置 + * + * @author 芋道源码 + */ +@ConfigurationProperties(prefix = "win.tenant") +@Data +public class TenantProperties { + + /** + * 租户是否开启 + */ + private static final Boolean ENABLE_DEFAULT = true; + + /** + * 是否开启 + */ + private Boolean enable = ENABLE_DEFAULT; + + /** + * 需要忽略多租户的请求 + * + * 默认情况下,每个请求需要带上 tenant-id 的请求头。但是,部分请求是无需带上的,例如说短信回调、支付回调等 Open API! + */ + private Set ignoreUrls = Collections.emptySet(); + + /** + * 需要忽略多租户的表 + * + * 即默认所有表都开启多租户的功能,所以记得添加对应的 tenant_id 字段哟 + */ + private Set ignoreTables = Collections.emptySet(); + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/config/WinTenantAutoConfiguration.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/config/WinTenantAutoConfiguration.java new file mode 100644 index 0000000..55725f3 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/config/WinTenantAutoConfiguration.java @@ -0,0 +1,144 @@ +package com.win.framework.tenant.config; + +import com.win.framework.common.enums.WebFilterOrderEnum; +import com.win.framework.mybatis.core.util.MyBatisUtils; +import com.win.framework.redis.config.WinCacheProperties; +import com.win.framework.tenant.core.aop.TenantIgnoreAspect; +import com.win.framework.tenant.core.db.TenantDatabaseInterceptor; +import com.win.framework.tenant.core.job.TenantJobAspect; +import com.win.framework.tenant.core.mq.rabbitmq.TenantRabbitMQInitializer; +import com.win.framework.tenant.core.mq.redis.TenantRedisMessageInterceptor; +import com.win.framework.tenant.core.mq.rocketmq.TenantRocketMQInitializer; +import com.win.framework.tenant.core.redis.TenantRedisCacheManager; +import com.win.framework.tenant.core.security.TenantSecurityWebFilter; +import com.win.framework.tenant.core.service.TenantFrameworkService; +import com.win.framework.tenant.core.service.TenantFrameworkServiceImpl; +import com.win.framework.tenant.core.web.TenantContextWebFilter; +import com.win.framework.web.config.WebProperties; +import com.win.framework.web.core.handler.GlobalExceptionHandler; +import com.win.module.system.api.tenant.TenantApi; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.data.redis.cache.BatchStrategies; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.cache.RedisCacheWriter; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; + +import java.util.Objects; + +@AutoConfiguration +@ConditionalOnProperty(prefix = "win.tenant", value = "enable", matchIfMissing = true) // 允许使用 win.tenant.enable=false 禁用多租户 +@EnableConfigurationProperties(TenantProperties.class) +public class WinTenantAutoConfiguration { + + @Bean + public TenantFrameworkService tenantFrameworkService(TenantApi tenantApi) { + return new TenantFrameworkServiceImpl(tenantApi); + } + + // ========== AOP ========== + + @Bean + public TenantIgnoreAspect tenantIgnoreAspect() { + return new TenantIgnoreAspect(); + } + + // ========== DB ========== + + @Bean + public TenantLineInnerInterceptor tenantLineInnerInterceptor(TenantProperties properties, + MybatisPlusInterceptor interceptor) { + TenantLineInnerInterceptor inner = new TenantLineInnerInterceptor(new TenantDatabaseInterceptor(properties)); + // 添加到 interceptor 中 + // 需要加在首个,主要是为了在分页插件前面。这个是 MyBatis Plus 的规定 + MyBatisUtils.addInterceptor(interceptor, inner, 0); + return inner; + } + + // ========== WEB ========== + + @Bean + public FilterRegistrationBean tenantContextWebFilter() { + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(new TenantContextWebFilter()); + registrationBean.setOrder(WebFilterOrderEnum.TENANT_CONTEXT_FILTER); + return registrationBean; + } + + // ========== Security ========== + + @Bean + public FilterRegistrationBean tenantSecurityWebFilter(TenantProperties tenantProperties, + WebProperties webProperties, + GlobalExceptionHandler globalExceptionHandler, + TenantFrameworkService tenantFrameworkService) { + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(new TenantSecurityWebFilter(tenantProperties, webProperties, + globalExceptionHandler, tenantFrameworkService)); + registrationBean.setOrder(WebFilterOrderEnum.TENANT_SECURITY_FILTER); + return registrationBean; + } + + // ========== Job ========== + + @Bean + @ConditionalOnClass(name = "com.xxl.job.core.handler.annotation.XxlJob") + public TenantJobAspect tenantJobAspect(TenantFrameworkService tenantFrameworkService) { + return new TenantJobAspect(tenantFrameworkService); + } + + // ========== MQ ========== + + /** + * 多租户 Redis 消息队列的配置类 + * + * 为什么要单独一个配置类呢?如果直接把 TenantRedisMessageInterceptor Bean 的初始化放外面,会报 RedisMessageInterceptor 类不存在的错误 + */ + @Configuration + @ConditionalOnClass(name = "com.win.framework.mq.redis.core.RedisMQTemplate") + public static class TenantRedisMQAutoConfiguration { + + @Bean + public TenantRedisMessageInterceptor tenantRedisMessageInterceptor() { + return new TenantRedisMessageInterceptor(); + } + + } + + @Bean + @ConditionalOnClass(name = "org.springframework.amqp.rabbit.core.RabbitTemplate") + public TenantRabbitMQInitializer tenantRabbitMQInitializer() { + return new TenantRabbitMQInitializer(); + } + + @Bean + @ConditionalOnClass(name = "org.apache.rocketmq.spring.core.RocketMQTemplate") + public TenantRocketMQInitializer tenantRocketMQInitializer() { + return new TenantRocketMQInitializer(); + } + + // ========== Redis ========== + + @Bean + @Primary // 引入租户时,tenantRedisCacheManager 为主 Bean + public RedisCacheManager tenantRedisCacheManager(RedisTemplate redisTemplate, + RedisCacheConfiguration redisCacheConfiguration, + WinCacheProperties winCacheProperties) { + // 创建 RedisCacheWriter 对象 + RedisConnectionFactory connectionFactory = Objects.requireNonNull(redisTemplate.getConnectionFactory()); + RedisCacheWriter cacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory, + BatchStrategies.scan(winCacheProperties.getRedisScanBatchSize())); + // 创建 TenantRedisCacheManager 对象 + return new TenantRedisCacheManager(cacheWriter, redisCacheConfiguration); + } +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/config/WinTenantRpcAutoConfiguration.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/config/WinTenantRpcAutoConfiguration.java new file mode 100644 index 0000000..7e95808 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/config/WinTenantRpcAutoConfiguration.java @@ -0,0 +1,21 @@ +package com.win.framework.tenant.config; + +import com.win.framework.tenant.core.rpc.TenantRequestInterceptor; +import com.win.module.system.api.tenant.TenantApi; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@AutoConfiguration +@ConditionalOnProperty(prefix = "win.tenant", value = "enable", matchIfMissing = true) // 允许使用 win.tenant.enable=false 禁用多租户 +@EnableFeignClients(clients = TenantApi.class) // 主要是引入相关的 API 服务 +public class WinTenantRpcAutoConfiguration { + + @Bean + public TenantRequestInterceptor tenantRequestInterceptor() { + return new TenantRequestInterceptor(); + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/aop/TenantIgnore.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/aop/TenantIgnore.java new file mode 100644 index 0000000..1eb125a --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/aop/TenantIgnore.java @@ -0,0 +1,18 @@ +package com.win.framework.tenant.core.aop; + +import java.lang.annotation.*; + +/** + * 忽略租户,标记指定方法不进行租户的自动过滤 + * + * 注意,只有 DB 的场景会过滤,其它场景暂时不过滤: + * 1、Redis 场景:因为是基于 Key 实现多租户的能力,所以忽略没有意义,不像 DB 是一个 column 实现的 + * 2、MQ 场景:有点难以抉择,目前可以通过 Consumer 手动在消费的方法上,添加 @TenantIgnore 进行忽略 + * + * @author 芋道源码 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface TenantIgnore { +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/aop/TenantIgnoreAspect.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/aop/TenantIgnoreAspect.java new file mode 100644 index 0000000..702ddfa --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/aop/TenantIgnoreAspect.java @@ -0,0 +1,35 @@ +package com.win.framework.tenant.core.aop; + +import com.win.framework.tenant.core.context.TenantContextHolder; +import com.win.framework.tenant.core.util.TenantUtils; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; + +/** + * 忽略多租户的 Aspect,基于 {@link TenantIgnore} 注解实现,用于一些全局的逻辑。 + * 例如说,一个定时任务,读取所有数据,进行处理。 + * 又例如说,读取所有数据,进行缓存。 + * + * 整体逻辑的实现,和 {@link TenantUtils#executeIgnore(Runnable)} 需要保持一致 + * + * @author 芋道源码 + */ +@Aspect +@Slf4j +public class TenantIgnoreAspect { + + @Around("@annotation(tenantIgnore)") + public Object around(ProceedingJoinPoint joinPoint, TenantIgnore tenantIgnore) throws Throwable { + Boolean oldIgnore = TenantContextHolder.isIgnore(); + try { + TenantContextHolder.setIgnore(true); + // 执行逻辑 + return joinPoint.proceed(); + } finally { + TenantContextHolder.setIgnore(oldIgnore); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/context/TenantContextHolder.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/context/TenantContextHolder.java new file mode 100644 index 0000000..6acf319 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/context/TenantContextHolder.java @@ -0,0 +1,69 @@ +package com.win.framework.tenant.core.context; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.enums.DocumentEnum; +import com.alibaba.ttl.TransmittableThreadLocal; + +/** + * 多租户上下文 Holder + * + * @author 芋道源码 + */ +public class TenantContextHolder { + + /** + * 当前租户编号 + */ + private static final ThreadLocal TENANT_ID = new TransmittableThreadLocal<>(); + + /** + * 是否忽略租户 + */ + private static final ThreadLocal IGNORE = new TransmittableThreadLocal<>(); + + /** + * 获得租户编号 + * + * @return 租户编号 + */ + public static Long getTenantId() { + return TENANT_ID.get(); + } + + /** + * 获得租户编号。如果不存在,则抛出 NullPointerException 异常 + * + * @return 租户编号 + */ + public static Long getRequiredTenantId() { + Long tenantId = getTenantId(); + if (tenantId == null) { + throw new NullPointerException("TenantContextHolder 不存在租户编号!可参考文档:" + + DocumentEnum.TENANT.getUrl()); + } + return tenantId; + } + + public static void setTenantId(Long tenantId) { + TENANT_ID.set(tenantId); + } + + public static void setIgnore(Boolean ignore) { + IGNORE.set(ignore); + } + + /** + * 当前是否忽略租户 + * + * @return 是否忽略 + */ + public static boolean isIgnore() { + return Boolean.TRUE.equals(IGNORE.get()); + } + + public static void clear() { + TENANT_ID.remove(); + IGNORE.remove(); + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/db/TenantBaseDO.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/db/TenantBaseDO.java new file mode 100644 index 0000000..cd4119d --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/db/TenantBaseDO.java @@ -0,0 +1,21 @@ +package com.win.framework.tenant.core.db; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 拓展多租户的 BaseDO 基类 + * + * @author 芋道源码 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public abstract class TenantBaseDO extends BaseDO { + + /** + * 多租户编号 + */ + private Long tenantId; + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/db/TenantDatabaseInterceptor.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/db/TenantDatabaseInterceptor.java new file mode 100644 index 0000000..d19ac37 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/db/TenantDatabaseInterceptor.java @@ -0,0 +1,43 @@ +package com.win.framework.tenant.core.db; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.tenant.config.TenantProperties; +import com.win.framework.tenant.core.context.TenantContextHolder; +import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.LongValue; + +import java.util.HashSet; +import java.util.Set; + +/** + * 基于 MyBatis Plus 多租户的功能,实现 DB 层面的多租户的功能 + * + * @author 芋道源码 + */ +public class TenantDatabaseInterceptor implements TenantLineHandler { + + private final Set ignoreTables = new HashSet<>(); + + public TenantDatabaseInterceptor(TenantProperties properties) { + // 不同 DB 下,大小写的习惯不同,所以需要都添加进去 + properties.getIgnoreTables().forEach(table -> { + ignoreTables.add(table.toLowerCase()); + ignoreTables.add(table.toUpperCase()); + }); + // 在 OracleKeyGenerator 中,生成主键时,会查询这个表,查询这个表后,会自动拼接 TENANT_ID 导致报错 + ignoreTables.add("DUAL"); + } + + @Override + public Expression getTenantId() { + return new LongValue(TenantContextHolder.getRequiredTenantId()); + } + + @Override + public boolean ignoreTable(String tableName) { + return TenantContextHolder.isIgnore() // 情况一,全局忽略多租户 + || CollUtil.contains(ignoreTables, tableName); // 情况二,忽略多租户的表 + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/job/TenantJob.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/job/TenantJob.java new file mode 100644 index 0000000..15c129a --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/job/TenantJob.java @@ -0,0 +1,14 @@ +package com.win.framework.tenant.core.job; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 多租户 Job 注解 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface TenantJob { +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/job/TenantJobAspect.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/job/TenantJobAspect.java new file mode 100644 index 0000000..bc7dd10 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/job/TenantJobAspect.java @@ -0,0 +1,65 @@ +package com.win.framework.tenant.core.job; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.exceptions.ExceptionUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.tenant.core.service.TenantFrameworkService; +import com.win.framework.tenant.core.util.TenantUtils; +import com.xxl.job.core.context.XxlJobHelper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 多租户 JobHandler AOP + * 任务执行时,会按照租户逐个执行 Job 的逻辑 + * + * 注意,需要保证 JobHandler 的幂等性。因为 Job 因为某个租户执行失败重试时,之前执行成功的租户也会再次执行。 + * + * @author 芋道源码 + */ +@Aspect +@RequiredArgsConstructor +@Slf4j +public class TenantJobAspect { + + private final TenantFrameworkService tenantFrameworkService; + + @Around("@annotation(tenantJob)") + public void around(ProceedingJoinPoint joinPoint, TenantJob tenantJob) { + // 获得租户列表 + List tenantIds = tenantFrameworkService.getTenantIds(); + if (CollUtil.isEmpty(tenantIds)) { + return; + } + + // 逐个租户,执行 Job + Map results = new ConcurrentHashMap<>(); + tenantIds.parallelStream().forEach(tenantId -> { + // TODO 芋艿:先通过 parallel 实现并行;1)多个租户,是一条执行日志;2)异常的情况 + TenantUtils.execute(tenantId, () -> { + try { + joinPoint.proceed(); + } catch (Throwable e) { + results.put(tenantId, ExceptionUtil.getRootCauseMessage(e)); + // 打印异常 + XxlJobHelper.log(StrUtil.format("[多租户({}) 执行任务({}),发生异常:{}]", + tenantId, joinPoint.getSignature(), ExceptionUtils.getStackTrace(e))); + } + }); + }); + // 如果 results 非空,说明发生了异常,标记 XXL-Job 执行失败 + if (CollUtil.isNotEmpty(results)) { + XxlJobHelper.handleFail(JsonUtils.toJsonString(results)); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/kafka/TenantKafkaEnvironmentPostProcessor.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/kafka/TenantKafkaEnvironmentPostProcessor.java new file mode 100644 index 0000000..0ed6895 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/kafka/TenantKafkaEnvironmentPostProcessor.java @@ -0,0 +1,37 @@ +package com.win.framework.tenant.core.mq.kafka; + +import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.env.EnvironmentPostProcessor; +import org.springframework.core.env.ConfigurableEnvironment; + +/** + * 多租户的 Kafka 的 {@link EnvironmentPostProcessor} 实现类 + * + * Kafka Producer 发送消息时,增加 {@link TenantKafkaProducerInterceptor} 拦截器 + * + * @author 芋道源码 + */ +@Slf4j +public class TenantKafkaEnvironmentPostProcessor implements EnvironmentPostProcessor { + + private static final String PROPERTY_KEY_INTERCEPTOR_CLASSES = "spring.kafka.producer.properties.interceptor.classes"; + + @Override + public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { + // 添加 TenantKafkaProducerInterceptor 拦截器 + try { + String value = environment.getProperty(PROPERTY_KEY_INTERCEPTOR_CLASSES); + if (StrUtil.isEmpty(value)) { + value = TenantKafkaProducerInterceptor.class.getName(); + } else { + value += "," + TenantKafkaProducerInterceptor.class.getName(); + } + environment.getSystemProperties().put(PROPERTY_KEY_INTERCEPTOR_CLASSES, value); + } catch (NoClassDefFoundError ignore) { + // 如果触发 NoClassDefFoundError 异常,说明 TenantKafkaProducerInterceptor 类不存在,即没引入 kafka-spring 依赖 + } + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/kafka/TenantKafkaProducerInterceptor.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/kafka/TenantKafkaProducerInterceptor.java new file mode 100644 index 0000000..a5278bc --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/kafka/TenantKafkaProducerInterceptor.java @@ -0,0 +1,47 @@ +package com.win.framework.tenant.core.mq.kafka; + +import cn.hutool.core.util.ReflectUtil; +import com.win.framework.tenant.core.context.TenantContextHolder; +import org.apache.kafka.clients.producer.ProducerInterceptor; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.RecordMetadata; +import org.apache.kafka.common.header.Headers; +import org.springframework.messaging.handler.invocation.InvocableHandlerMethod; + +import java.util.Map; + +import static com.win.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID; + +/** + * Kafka 消息队列的多租户 {@link ProducerInterceptor} 实现类 + * + * 1. Producer 发送消息时,将 {@link TenantContextHolder} 租户编号,添加到消息的 Header 中 + * 2. Consumer 消费消息时,将消息的 Header 的租户编号,添加到 {@link TenantContextHolder} 中,通过 {@link InvocableHandlerMethod} 实现 + * + * @author 芋道源码 + */ +public class TenantKafkaProducerInterceptor implements ProducerInterceptor { + + @Override + public ProducerRecord onSend(ProducerRecord record) { + Long tenantId = TenantContextHolder.getTenantId(); + if (tenantId != null) { + Headers headers = (Headers) ReflectUtil.getFieldValue(record, "headers"); // private 属性,没有 get 方法,智能反射 + headers.add(HEADER_TENANT_ID, tenantId.toString().getBytes()); + } + return record; + } + + @Override + public void onAcknowledgement(RecordMetadata metadata, Exception exception) { + } + + @Override + public void close() { + } + + @Override + public void configure(Map configs) { + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rabbitmq/TenantRabbitMQInitializer.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rabbitmq/TenantRabbitMQInitializer.java new file mode 100644 index 0000000..3f55eb2 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rabbitmq/TenantRabbitMQInitializer.java @@ -0,0 +1,23 @@ +package com.win.framework.tenant.core.mq.rabbitmq; + +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; + +/** + * 多租户的 RabbitMQ 初始化器 + * + * @author 芋道源码 + */ +public class TenantRabbitMQInitializer implements BeanPostProcessor { + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof RabbitTemplate) { + RabbitTemplate rabbitTemplate = (RabbitTemplate) bean; + rabbitTemplate.addBeforePublishPostProcessors(new TenantRabbitMQMessagePostProcessor()); + } + return bean; + } + +} \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rabbitmq/TenantRabbitMQMessagePostProcessor.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rabbitmq/TenantRabbitMQMessagePostProcessor.java new file mode 100644 index 0000000..246d467 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rabbitmq/TenantRabbitMQMessagePostProcessor.java @@ -0,0 +1,31 @@ +package com.win.framework.tenant.core.mq.rabbitmq; + +import com.win.framework.tenant.core.context.TenantContextHolder; +import org.apache.kafka.clients.producer.ProducerInterceptor; +import org.springframework.amqp.AmqpException; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.core.MessagePostProcessor; +import org.springframework.messaging.handler.invocation.InvocableHandlerMethod; + +import static com.win.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID; + +/** + * RabbitMQ 消息队列的多租户 {@link ProducerInterceptor} 实现类 + * + * 1. Producer 发送消息时,将 {@link TenantContextHolder} 租户编号,添加到消息的 Header 中 + * 2. Consumer 消费消息时,将消息的 Header 的租户编号,添加到 {@link TenantContextHolder} 中,通过 {@link InvocableHandlerMethod} 实现 + * + * @author 芋道源码 + */ +public class TenantRabbitMQMessagePostProcessor implements MessagePostProcessor { + + @Override + public Message postProcessMessage(Message message) throws AmqpException { + Long tenantId = TenantContextHolder.getTenantId(); + if (tenantId != null) { + message.getMessageProperties().getHeaders().put(HEADER_TENANT_ID, tenantId); + } + return message; + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/redis/TenantRedisMessageInterceptor.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/redis/TenantRedisMessageInterceptor.java new file mode 100644 index 0000000..ff102a3 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/redis/TenantRedisMessageInterceptor.java @@ -0,0 +1,42 @@ +package com.win.framework.tenant.core.mq.redis; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.mq.redis.core.interceptor.RedisMessageInterceptor; +import com.win.framework.mq.redis.core.message.AbstractRedisMessage; +import com.win.framework.tenant.core.context.TenantContextHolder; + +import static com.win.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID; + +/** + * 多租户 {@link AbstractRedisMessage} 拦截器 + * + * 1. Producer 发送消息时,将 {@link TenantContextHolder} 租户编号,添加到消息的 Header 中 + * 2. Consumer 消费消息时,将消息的 Header 的租户编号,添加到 {@link TenantContextHolder} 中 + * + * @author 芋道源码 + */ +public class TenantRedisMessageInterceptor implements RedisMessageInterceptor { + + @Override + public void sendMessageBefore(AbstractRedisMessage message) { + Long tenantId = TenantContextHolder.getTenantId(); + if (tenantId != null) { + message.addHeader(HEADER_TENANT_ID, tenantId.toString()); + } + } + + @Override + public void consumeMessageBefore(AbstractRedisMessage message) { + String tenantIdStr = message.getHeader(HEADER_TENANT_ID); + if (StrUtil.isNotEmpty(tenantIdStr)) { + TenantContextHolder.setTenantId(Long.valueOf(tenantIdStr)); + } + } + + @Override + public void consumeMessageAfter(AbstractRedisMessage message) { + // 注意,Consumer 是一个逻辑的入口,所以不考虑原本上下文就存在租户编号的情况 + TenantContextHolder.clear(); + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rocketmq/TenantRocketMQConsumeMessageHook.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rocketmq/TenantRocketMQConsumeMessageHook.java new file mode 100644 index 0000000..b9aebc1 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rocketmq/TenantRocketMQConsumeMessageHook.java @@ -0,0 +1,46 @@ +package com.win.framework.tenant.core.mq.rocketmq; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.win.framework.tenant.core.context.TenantContextHolder; +import org.apache.rocketmq.client.hook.ConsumeMessageContext; +import org.apache.rocketmq.client.hook.ConsumeMessageHook; +import org.apache.rocketmq.common.message.MessageExt; +import org.springframework.messaging.handler.invocation.InvocableHandlerMethod; + +import java.util.List; + +import static com.win.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID; + +/** + * RocketMQ 消息队列的多租户 {@link ConsumeMessageHook} 实现类 + * + * Consumer 消费消息时,将消息的 Header 的租户编号,添加到 {@link TenantContextHolder} 中,通过 {@link InvocableHandlerMethod} 实现 + * + * @author 芋道源码 + */ +public class TenantRocketMQConsumeMessageHook implements ConsumeMessageHook { + + @Override + public String hookName() { + return getClass().getSimpleName(); + } + + @Override + public void consumeMessageBefore(ConsumeMessageContext context) { + // 校验,消息必须是单条,不然设置租户可能不正确 + List messages = context.getMsgList(); + Assert.isTrue(messages.size() == 1, "消息条数({})不正确", messages.size()); + // 设置租户编号 + String tenantId = messages.get(0).getUserProperty(HEADER_TENANT_ID); + if (StrUtil.isNotEmpty(tenantId)) { + TenantContextHolder.setTenantId(Long.parseLong(tenantId)); + } + } + + @Override + public void consumeMessageAfter(ConsumeMessageContext context) { + TenantContextHolder.clear(); + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rocketmq/TenantRocketMQInitializer.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rocketmq/TenantRocketMQInitializer.java new file mode 100644 index 0000000..e7a817b --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rocketmq/TenantRocketMQInitializer.java @@ -0,0 +1,53 @@ +package com.win.framework.tenant.core.mq.rocketmq; + +import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; +import org.apache.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl; +import org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl; +import org.apache.rocketmq.client.producer.DefaultMQProducer; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.apache.rocketmq.spring.support.DefaultRocketMQListenerContainer; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; + +/** + * 多租户的 RocketMQ 初始化器 + * + * @author 芋道源码 + */ +public class TenantRocketMQInitializer implements BeanPostProcessor { + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof DefaultRocketMQListenerContainer) { + DefaultRocketMQListenerContainer container = (DefaultRocketMQListenerContainer) bean; + initTenantConsumer(container.getConsumer()); + } else if (bean instanceof RocketMQTemplate) { + RocketMQTemplate template = (RocketMQTemplate) bean; + initTenantProducer(template.getProducer()); + } + return bean; + } + + private void initTenantProducer(DefaultMQProducer producer) { + if (producer == null) { + return; + } + DefaultMQProducerImpl producerImpl = producer.getDefaultMQProducerImpl(); + if (producerImpl == null) { + return; + } + producerImpl.registerSendMessageHook(new TenantRocketMQSendMessageHook()); + } + + private void initTenantConsumer(DefaultMQPushConsumer consumer) { + if (consumer == null) { + return; + } + DefaultMQPushConsumerImpl consumerImpl = consumer.getDefaultMQPushConsumerImpl(); + if (consumerImpl == null) { + return; + } + consumerImpl.registerConsumeMessageHook(new TenantRocketMQConsumeMessageHook()); + } + +} \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rocketmq/TenantRocketMQSendMessageHook.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rocketmq/TenantRocketMQSendMessageHook.java new file mode 100644 index 0000000..855fbae --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/mq/rocketmq/TenantRocketMQSendMessageHook.java @@ -0,0 +1,36 @@ +package com.win.framework.tenant.core.mq.rocketmq; + +import com.win.framework.tenant.core.context.TenantContextHolder; +import org.apache.rocketmq.client.hook.SendMessageContext; +import org.apache.rocketmq.client.hook.SendMessageHook; + +import static com.win.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID; + +/** + * RocketMQ 消息队列的多租户 {@link SendMessageHook} 实现类 + * + * Producer 发送消息时,将 {@link TenantContextHolder} 租户编号,添加到消息的 Header 中 + * + * @author 芋道源码 + */ +public class TenantRocketMQSendMessageHook implements SendMessageHook { + + @Override + public String hookName() { + return getClass().getSimpleName(); + } + + @Override + public void sendMessageBefore(SendMessageContext sendMessageContext) { + Long tenantId = TenantContextHolder.getTenantId(); + if (tenantId == null) { + return; + } + sendMessageContext.getMessage().putUserProperty(HEADER_TENANT_ID, tenantId.toString()); + } + + @Override + public void sendMessageAfter(SendMessageContext sendMessageContext) { + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/redis/TenantRedisCacheManager.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/redis/TenantRedisCacheManager.java new file mode 100644 index 0000000..5aa2645 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/redis/TenantRedisCacheManager.java @@ -0,0 +1,38 @@ +package com.win.framework.tenant.core.redis; + +import com.win.framework.redis.core.TimeoutRedisCacheManager; +import com.win.framework.tenant.core.context.TenantContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.Cache; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.cache.RedisCacheWriter; + +/** + * 多租户的 {@link RedisCacheManager} 实现类 + * + * 操作指定 name 的 {@link Cache} 时,自动拼接租户后缀,格式为 name + ":" + tenantId + 后缀 + * + * @author airhead + */ +@Slf4j +public class TenantRedisCacheManager extends TimeoutRedisCacheManager { + + public TenantRedisCacheManager(RedisCacheWriter cacheWriter, + RedisCacheConfiguration defaultCacheConfiguration) { + super(cacheWriter, defaultCacheConfiguration); + } + + @Override + public Cache getCache(String name) { + // 如果开启多租户,则 name 拼接租户后缀 + if (!TenantContextHolder.isIgnore() + && TenantContextHolder.getTenantId() != null) { + name = name + ":" + TenantContextHolder.getTenantId(); + } + + // 继续基于父方法 + return super.getCache(name); + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/rpc/TenantRequestInterceptor.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/rpc/TenantRequestInterceptor.java new file mode 100644 index 0000000..1f33b57 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/rpc/TenantRequestInterceptor.java @@ -0,0 +1,25 @@ +package com.win.framework.tenant.core.rpc; + +import com.win.framework.tenant.core.context.TenantContextHolder; +import com.win.framework.web.core.util.WebFrameworkUtils; +import feign.RequestInterceptor; +import feign.RequestTemplate; + +import static com.win.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID; + +/** + * Tenant 的 RequestInterceptor 实现类:Feign 请求时,将 {@link TenantContextHolder} 设置到 header 中,继续透传给被调用的服务 + * + * @author 芋道源码 + */ +public class TenantRequestInterceptor implements RequestInterceptor { + + @Override + public void apply(RequestTemplate requestTemplate) { + Long tenantId = TenantContextHolder.getTenantId(); + if (tenantId != null) { + requestTemplate.header(HEADER_TENANT_ID, String.valueOf(tenantId)); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/security/TenantSecurityWebFilter.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/security/TenantSecurityWebFilter.java new file mode 100644 index 0000000..1c7dcd6 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/security/TenantSecurityWebFilter.java @@ -0,0 +1,117 @@ +package com.win.framework.tenant.core.security; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.exception.enums.GlobalErrorCodeConstants; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.servlet.ServletUtils; +import com.win.framework.security.core.LoginUser; +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import com.win.framework.tenant.config.TenantProperties; +import com.win.framework.tenant.core.context.TenantContextHolder; +import com.win.framework.tenant.core.service.TenantFrameworkService; +import com.win.framework.web.config.WebProperties; +import com.win.framework.web.core.filter.ApiRequestFilter; +import com.win.framework.web.core.handler.GlobalExceptionHandler; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.AntPathMatcher; + +import java.io.IOException; +import java.util.Objects; + +/** + * 多租户 Security Web 过滤器 + * 1. 如果是登陆的用户,校验是否有权限访问该租户,避免越权问题。 + * 2. 如果请求未带租户的编号,检查是否是忽略的 URL,否则也不允许访问。 + * 3. 校验租户是合法,例如说被禁用、到期 + * + * @author 芋道源码 + */ +@Slf4j +public class TenantSecurityWebFilter extends ApiRequestFilter { + + private final TenantProperties tenantProperties; + + private final AntPathMatcher pathMatcher; + + private final GlobalExceptionHandler globalExceptionHandler; + private final TenantFrameworkService tenantFrameworkService; + + public TenantSecurityWebFilter(TenantProperties tenantProperties, + WebProperties webProperties, + GlobalExceptionHandler globalExceptionHandler, + TenantFrameworkService tenantFrameworkService) { + super(webProperties); + this.tenantProperties = tenantProperties; + this.pathMatcher = new AntPathMatcher(); + this.globalExceptionHandler = globalExceptionHandler; + this.tenantFrameworkService = tenantFrameworkService; + } + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException { + Long tenantId = TenantContextHolder.getTenantId(); + // 1. 登陆的用户,校验是否有权限访问该租户,避免越权问题。 + LoginUser user = SecurityFrameworkUtils.getLoginUser(); + if (user != null) { + // 如果获取不到租户编号,则尝试使用登陆用户的租户编号 + if (tenantId == null) { + tenantId = user.getTenantId(); + TenantContextHolder.setTenantId(tenantId); + // 如果传递了租户编号,则进行比对租户编号,避免越权问题 + } else if (!Objects.equals(user.getTenantId(), TenantContextHolder.getTenantId())) { + log.error("[doFilterInternal][租户({}) User({}/{}) 越权访问租户({}) URL({}/{})]", + user.getTenantId(), user.getId(), user.getUserType(), + TenantContextHolder.getTenantId(), request.getRequestURI(), request.getMethod()); + ServletUtils.writeJSON(response, CommonResult.error(GlobalErrorCodeConstants.FORBIDDEN.getCode(), + "您无权访问该租户的数据")); + return; + } + } + + // 如果非允许忽略租户的 URL,则校验租户是否合法 + if (!isIgnoreUrl(request)) { + // 2. 如果请求未带租户的编号,不允许访问。 + if (tenantId == null) { + log.error("[doFilterInternal][URL({}/{}) 未传递租户编号]", request.getRequestURI(), request.getMethod()); + ServletUtils.writeJSON(response, CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST.getCode(), + "请求的租户标识未传递,请进行排查")); + return; + } + // 3. 校验租户是合法,例如说被禁用、到期 + try { + tenantFrameworkService.validTenant(tenantId); + } catch (Throwable ex) { + CommonResult result = globalExceptionHandler.allExceptionHandler(request, ex); + ServletUtils.writeJSON(response, result); + return; + } + } else { // 如果是允许忽略租户的 URL,若未传递租户编号,则默认忽略租户编号,避免报错 + if (tenantId == null) { + TenantContextHolder.setIgnore(true); + } + } + + // 继续过滤 + chain.doFilter(request, response); + } + + private boolean isIgnoreUrl(HttpServletRequest request) { + // 快速匹配,保证性能 + if (CollUtil.contains(tenantProperties.getIgnoreUrls(), request.getRequestURI())) { + return true; + } + // 逐个 Ant 路径匹配 + for (String url : tenantProperties.getIgnoreUrls()) { + if (pathMatcher.match(url, request.getRequestURI())) { + return true; + } + } + return false; + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/service/TenantFrameworkService.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/service/TenantFrameworkService.java new file mode 100644 index 0000000..5a5751d --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/service/TenantFrameworkService.java @@ -0,0 +1,26 @@ +package com.win.framework.tenant.core.service; + +import java.util.List; + +/** + * Tenant 框架 Service 接口,定义获取租户信息 + * + * @author 芋道源码 + */ +public interface TenantFrameworkService { + + /** + * 获得所有租户 + * + * @return 租户编号数组 + */ + List getTenantIds(); + + /** + * 校验租户是否合法 + * + * @param id 租户编号 + */ + void validTenant(Long id); + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/service/TenantFrameworkServiceImpl.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/service/TenantFrameworkServiceImpl.java new file mode 100644 index 0000000..6b8a88a --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/service/TenantFrameworkServiceImpl.java @@ -0,0 +1,66 @@ +package com.win.framework.tenant.core.service; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.cache.CacheUtils; +import com.win.module.system.api.tenant.TenantApi; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; + +import java.time.Duration; +import java.util.List; + +import static com.win.framework.common.util.cache.CacheUtils.buildAsyncReloadingCache; + +/** + * Tenant 框架 Service 实现类 + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +public class TenantFrameworkServiceImpl implements TenantFrameworkService { + + private final TenantApi tenantApi; + + /** + * 针对 {@link #getTenantIds()} 的缓存 + */ + private final LoadingCache> getTenantIdsCache = buildAsyncReloadingCache( + Duration.ofMinutes(1L), // 过期时间 1 分钟 + new CacheLoader>() { + + @Override + public List load(Object key) { + return tenantApi.getTenantIdList().getCheckedData(); + } + + }); + + /** + * 针对 {@link #validTenant(Long)} 的缓存 + */ + private final LoadingCache> validTenantCache = buildAsyncReloadingCache( + Duration.ofMinutes(1L), // 过期时间 1 分钟 + new CacheLoader>() { + + @Override + public CommonResult load(Long id) { + return tenantApi.validTenant(id); + } + + }); + + @Override + @SneakyThrows + public List getTenantIds() { + return getTenantIdsCache.get(Boolean.TRUE); + } + + @Override + @SneakyThrows + public void validTenant(Long id) { + validTenantCache.get(id).checkError(); + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/util/TenantUtils.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/util/TenantUtils.java new file mode 100644 index 0000000..4516e27 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/util/TenantUtils.java @@ -0,0 +1,93 @@ +package com.win.framework.tenant.core.util; + +import com.win.framework.tenant.core.context.TenantContextHolder; + +import java.util.Map; +import java.util.concurrent.Callable; + +import static com.win.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID; + +/** + * 多租户 Util + * + * @author 芋道源码 + */ +public class TenantUtils { + + /** + * 使用指定租户,执行对应的逻辑 + * + * 注意,如果当前是忽略租户的情况下,会被强制设置成不忽略租户 + * 当然,执行完成后,还是会恢复回去 + * + * @param tenantId 租户编号 + * @param runnable 逻辑 + */ + public static void execute(Long tenantId, Runnable runnable) { + Long oldTenantId = TenantContextHolder.getTenantId(); + Boolean oldIgnore = TenantContextHolder.isIgnore(); + try { + TenantContextHolder.setTenantId(tenantId); + TenantContextHolder.setIgnore(false); + // 执行逻辑 + runnable.run(); + } finally { + TenantContextHolder.setTenantId(oldTenantId); + TenantContextHolder.setIgnore(oldIgnore); + } + } + + /** + * 使用指定租户,执行对应的逻辑 + * + * 注意,如果当前是忽略租户的情况下,会被强制设置成不忽略租户 + * 当然,执行完成后,还是会恢复回去 + * + * @param tenantId 租户编号 + * @param callable 逻辑 + */ + public static V execute(Long tenantId, Callable callable) { + Long oldTenantId = TenantContextHolder.getTenantId(); + Boolean oldIgnore = TenantContextHolder.isIgnore(); + try { + TenantContextHolder.setTenantId(tenantId); + TenantContextHolder.setIgnore(false); + // 执行逻辑 + return callable.call(); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + TenantContextHolder.setTenantId(oldTenantId); + TenantContextHolder.setIgnore(oldIgnore); + } + } + + /** + * 忽略租户,执行对应的逻辑 + * + * @param runnable 逻辑 + */ + public static void executeIgnore(Runnable runnable) { + Boolean oldIgnore = TenantContextHolder.isIgnore(); + try { + TenantContextHolder.setIgnore(true); + // 执行逻辑 + runnable.run(); + } finally { + TenantContextHolder.setIgnore(oldIgnore); + } + } + + /** + * 将多租户编号,添加到 header 中 + * + * @param headers HTTP 请求 headers + * @param tenantId 租户编号 + */ + public static void addTenantHeader(Map headers, Long tenantId) { + if (tenantId != null) { + headers.put(HEADER_TENANT_ID, tenantId.toString()); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/web/TenantContextWebFilter.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/web/TenantContextWebFilter.java new file mode 100644 index 0000000..2ee116c --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/core/web/TenantContextWebFilter.java @@ -0,0 +1,37 @@ +package com.win.framework.tenant.core.web; + +import com.win.framework.tenant.core.context.TenantContextHolder; +import com.win.framework.web.core.util.WebFrameworkUtils; +import org.springframework.web.filter.OncePerRequestFilter; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * 多租户 Context Web 过滤器 + * 将请求 Header 中的 tenant-id 解析出来,添加到 {@link TenantContextHolder} 中,这样后续的 DB 等操作,可以获得到租户编号。 + * + * @author 芋道源码 + */ +public class TenantContextWebFilter extends OncePerRequestFilter { + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException { + // 设置 + Long tenantId = WebFrameworkUtils.getTenantId(request); + if (tenantId != null) { + TenantContextHolder.setTenantId(tenantId); + } + try { + chain.doFilter(request, response); + } finally { + // 清理 + TenantContextHolder.clear(); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/package-info.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/package-info.java new file mode 100644 index 0000000..366df6c --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/com/win/framework/tenant/package-info.java @@ -0,0 +1,17 @@ +/** + * 多租户,支持如下层面: + * 1. DB:基于 MyBatis Plus 多租户的功能实现。 + * 2. Redis:通过在 Redis Key 上拼接租户编号的方式,进行隔离。 + * 3. Web:请求 HTTP API 时,解析 Header 的 tenant-id 租户编号,添加到租户上下文。 + * 4. Security:校验当前登陆的用户,是否越权访问其它租户的数据。 + * 5. Job:在 JobHandler 执行任务时,会按照每个租户,都独立并行执行一次。 + * 6. MQ:在 Producer 发送消息时,Header 带上 tenant-id 租户编号;在 Consumer 消费消息时,将 Header 的 tenant-id 租户编号,添加到租户上下文。 + * 7. Async:异步需要保证 ThreadLocal 的传递性,通过使用阿里开源的 TransmittableThreadLocal 实现。相关的改造点,可见: + * 1)Spring Async: + * {@link com.win.framework.quartz.config.WinAsyncAutoConfiguration#threadPoolTaskExecutorBeanPostProcessor()} + * 2)Spring Security: + * TransmittableThreadLocalSecurityContextHolderStrategy + * 和 WinSecurityAutoConfiguration#securityContextHolderMethodInvokingFactoryBean() 方法 + * + */ +package com.win.framework.tenant; diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java new file mode 100644 index 0000000..8efaeb5 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java @@ -0,0 +1,275 @@ +/* + * Copyright 2002-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.messaging.handler.invocation; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Type; +import java.util.Arrays; + +import com.win.framework.tenant.core.context.TenantContextHolder; +import com.win.framework.tenant.core.util.TenantUtils; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.core.MethodParameter; +import org.springframework.core.ParameterNameDiscoverer; +import org.springframework.core.ResolvableType; +import org.springframework.lang.Nullable; +import org.springframework.messaging.Message; +import org.springframework.messaging.handler.HandlerMethod; +import org.springframework.util.ObjectUtils; + +import static com.win.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID; + +/** + * Extension of {@link HandlerMethod} that invokes the underlying method with + * argument values resolved from the current HTTP request through a list of + * {@link HandlerMethodArgumentResolver}. + * + * 针对 rabbitmq-spring 和 kafka-spring,不存在合适的拓展点,可以实现 Consumer 消费前,读取 Header 中的 tenant-id 设置到 {@link TenantContextHolder} 中 + * TODO 芋艿:持续跟进,看看有没新的拓展点 + * + * @author Rossen Stoyanchev + * @author Juergen Hoeller + * @since 4.0 + */ +public class InvocableHandlerMethod extends HandlerMethod { + + private static final Object[] EMPTY_ARGS = new Object[0]; + + + private HandlerMethodArgumentResolverComposite resolvers = new HandlerMethodArgumentResolverComposite(); + + private ParameterNameDiscoverer parameterNameDiscoverer = new DefaultParameterNameDiscoverer(); + + + /** + * Create an instance from a {@code HandlerMethod}. + */ + public InvocableHandlerMethod(HandlerMethod handlerMethod) { + super(handlerMethod); + } + + /** + * Create an instance from a bean instance and a method. + */ + public InvocableHandlerMethod(Object bean, Method method) { + super(bean, method); + } + + /** + * Construct a new handler method with the given bean instance, method name and parameters. + * @param bean the object bean + * @param methodName the method name + * @param parameterTypes the method parameter types + * @throws NoSuchMethodException when the method cannot be found + */ + public InvocableHandlerMethod(Object bean, String methodName, Class... parameterTypes) + throws NoSuchMethodException { + + super(bean, methodName, parameterTypes); + } + + + /** + * Set {@link HandlerMethodArgumentResolver HandlerMethodArgumentResolvers} to use for resolving method argument values. + */ + public void setMessageMethodArgumentResolvers(HandlerMethodArgumentResolverComposite argumentResolvers) { + this.resolvers = argumentResolvers; + } + + /** + * Set the ParameterNameDiscoverer for resolving parameter names when needed + * (e.g. default request attribute name). + *

    Default is a {@link org.springframework.core.DefaultParameterNameDiscoverer}. + */ + public void setParameterNameDiscoverer(ParameterNameDiscoverer parameterNameDiscoverer) { + this.parameterNameDiscoverer = parameterNameDiscoverer; + } + + + /** + * Invoke the method after resolving its argument values in the context of the given message. + *

    Argument values are commonly resolved through + * {@link HandlerMethodArgumentResolver HandlerMethodArgumentResolvers}. + * The {@code providedArgs} parameter however may supply argument values to be used directly, + * i.e. without argument resolution. + *

    Delegates to {@link #getMethodArgumentValues} and calls {@link #doInvoke} with the + * resolved arguments. + * @param message the current message being processed + * @param providedArgs "given" arguments matched by type, not resolved + * @return the raw value returned by the invoked method + * @throws Exception raised if no suitable argument resolver can be found, + * or if the method raised an exception + * @see #getMethodArgumentValues + * @see #doInvoke + */ + @Nullable + public Object invoke(Message message, Object... providedArgs) throws Exception { + Object[] args = getMethodArgumentValues(message, providedArgs); + if (logger.isTraceEnabled()) { + logger.trace("Arguments: " + Arrays.toString(args)); + } + // 注意:如下是本类的改动点!!! + // 情况一:无租户编号的情况 + Long tenantId= parseTenantId(message); + if (tenantId == null) { + return doInvoke(args); + } + // 情况二:有租户的情况下 + return TenantUtils.execute(tenantId, () -> doInvoke(args)); + } + + private Long parseTenantId(Message message) { + Object tenantId = message.getHeaders().get(HEADER_TENANT_ID); + if (tenantId == null) { + return null; + } + if (tenantId instanceof Long) { + return (Long) tenantId; + } + if (tenantId instanceof Number) { + return ((Number) tenantId).longValue(); + } + if (tenantId instanceof String) { + return Long.parseLong((String) tenantId); + } + if (tenantId instanceof byte[]) { + return Long.parseLong(new String((byte[]) tenantId)); + } + throw new IllegalArgumentException("未知的数据类型:" + tenantId); + } + + /** + * Get the method argument values for the current message, checking the provided + * argument values and falling back to the configured argument resolvers. + *

    The resulting array will be passed into {@link #doInvoke}. + * @since 5.1.2 + */ + protected Object[] getMethodArgumentValues(Message message, Object... providedArgs) throws Exception { + MethodParameter[] parameters = getMethodParameters(); + if (ObjectUtils.isEmpty(parameters)) { + return EMPTY_ARGS; + } + + Object[] args = new Object[parameters.length]; + for (int i = 0; i < parameters.length; i++) { + MethodParameter parameter = parameters[i]; + parameter.initParameterNameDiscovery(this.parameterNameDiscoverer); + args[i] = findProvidedArgument(parameter, providedArgs); + if (args[i] != null) { + continue; + } + if (!this.resolvers.supportsParameter(parameter)) { + throw new MethodArgumentResolutionException( + message, parameter, formatArgumentError(parameter, "No suitable resolver")); + } + try { + args[i] = this.resolvers.resolveArgument(parameter, message); + } + catch (Exception ex) { + // Leave stack trace for later, exception may actually be resolved and handled... + if (logger.isDebugEnabled()) { + String exMsg = ex.getMessage(); + if (exMsg != null && !exMsg.contains(parameter.getExecutable().toGenericString())) { + logger.debug(formatArgumentError(parameter, exMsg)); + } + } + throw ex; + } + } + return args; + } + + /** + * Invoke the handler method with the given argument values. + */ + @Nullable + protected Object doInvoke(Object... args) throws Exception { + try { + return getBridgedMethod().invoke(getBean(), args); + } + catch (IllegalArgumentException ex) { + assertTargetBean(getBridgedMethod(), getBean(), args); + String text = (ex.getMessage() == null || ex.getCause() instanceof NullPointerException) ? + "Illegal argument": ex.getMessage(); + throw new IllegalStateException(formatInvokeError(text, args), ex); + } + catch (InvocationTargetException ex) { + // Unwrap for HandlerExceptionResolvers ... + Throwable targetException = ex.getTargetException(); + if (targetException instanceof RuntimeException runtimeException) { + throw runtimeException; + } + else if (targetException instanceof Error error) { + throw error; + } + else if (targetException instanceof Exception exception) { + throw exception; + } + else { + throw new IllegalStateException(formatInvokeError("Invocation failure", args), targetException); + } + } + } + + MethodParameter getAsyncReturnValueType(@Nullable Object returnValue) { + return new AsyncResultMethodParameter(returnValue); + } + + + private class AsyncResultMethodParameter extends AnnotatedMethodParameter { + + @Nullable + private final Object returnValue; + + private final ResolvableType returnType; + + public AsyncResultMethodParameter(@Nullable Object returnValue) { + super(-1); + this.returnValue = returnValue; + this.returnType = ResolvableType.forType(super.getGenericParameterType()).getGeneric(); + } + + protected AsyncResultMethodParameter(AsyncResultMethodParameter original) { + super(original); + this.returnValue = original.returnValue; + this.returnType = original.returnType; + } + + @Override + public Class getParameterType() { + if (this.returnValue != null) { + return this.returnValue.getClass(); + } + if (!ResolvableType.NONE.equals(this.returnType)) { + return this.returnType.toClass(); + } + return super.getParameterType(); + } + + @Override + public Type getGenericParameterType() { + return this.returnType.getType(); + } + + @Override + public AsyncResultMethodParameter clone() { + return new AsyncResultMethodParameter(this); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/resources/META-INF/spring.factories b/win-framework/win-spring-boot-starter-biz-tenant/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..7e8386a --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.env.EnvironmentPostProcessor=\ + com.win.framework.tenant.core.mq.kafka.TenantKafkaEnvironmentPostProcessor diff --git a/win-framework/win-spring-boot-starter-biz-tenant/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/win-framework/win-spring-boot-starter-biz-tenant/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..e3433c8 --- /dev/null +++ b/win-framework/win-spring-boot-starter-biz-tenant/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +com.win.framework.tenant.config.WinTenantRpcAutoConfiguration +com.win.framework.tenant.config.WinTenantAutoConfiguration diff --git a/win-framework/win-spring-boot-starter-env/pom.xml b/win-framework/win-spring-boot-starter-env/pom.xml new file mode 100644 index 0000000..2559dec --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/pom.xml @@ -0,0 +1,66 @@ + + + + com.win + win-framework + ${revision} + + 4.0.0 + win-spring-boot-starter-env + jar + + ${project.artifactId} + + 开发环境拓展,实现类似阿里的特性环境的能力 + 1. https://segmentfault.com/a/1190000018022987 + + https://github.com/YunaiV/ruoyi-vue-pro + + + 8 + 8 + + + + + com.win + win-common + + + + + org.springframework.boot + spring-boot-starter + + + + + org.springframework + spring-web + + + + jakarta.servlet + jakarta.servlet-api + + + + + org.springframework.cloud + spring-cloud-loadbalancer + + + io.github.openfeign + feign-core + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + diff --git a/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/EnvEnvironmentPostProcessor.java b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/EnvEnvironmentPostProcessor.java new file mode 100644 index 0000000..f6374cf --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/EnvEnvironmentPostProcessor.java @@ -0,0 +1,50 @@ +package com.win.framework.env.config; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.util.collection.SetUtils; +import com.win.framework.env.core.util.EnvUtils; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.env.EnvironmentPostProcessor; +import org.springframework.core.env.ConfigurableEnvironment; + +import java.util.Set; + +import static com.win.framework.env.core.util.EnvUtils.HOST_NAME_VALUE; + +/** + * 多环境的 {@link EnvEnvironmentPostProcessor} 实现类 + * 将 win.env.tag 设置到 nacos 等组件对应的 tag 配置项,当且仅当它们不存在时 + * + * @author 芋道源码 + */ +public class EnvEnvironmentPostProcessor implements EnvironmentPostProcessor { + + private static final Set TARGET_TAG_KEYS = SetUtils.asSet( + "spring.cloud.nacos.discovery.metadata.tag" // Nacos 注册中心 + // MQ TODO + ); + + @Override + public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { + // 0. 设置 ${HOST_NAME} 兜底的环境变量 + String hostNameKey = StrUtil.subBetween(HOST_NAME_VALUE, "{", "}"); + if (!environment.containsProperty(hostNameKey)) { + environment.getSystemProperties().put(hostNameKey, EnvUtils.getHostName()); + } + + // 1.1 如果没有 win.env.tag 配置项,则不进行配置项的修改 + String tag = EnvUtils.getTag(environment); + if (StrUtil.isEmpty(tag)) { + return; + } + // 1.2 需要修改的配置项 + for (String targetTagKey : TARGET_TAG_KEYS) { + String targetTagValue = environment.getProperty(targetTagKey); + if (StrUtil.isNotEmpty(targetTagValue)) { + continue; + } + environment.getSystemProperties().put(targetTagKey, tag); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/EnvProperties.java b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/EnvProperties.java new file mode 100644 index 0000000..029bf61 --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/EnvProperties.java @@ -0,0 +1,22 @@ +package com.win.framework.env.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 环境配置 + * + * @author 芋道源码 + */ +@ConfigurationProperties(prefix = "win.env") +@Data +public class EnvProperties { + + public static final String TAG_KEY = "win.env.tag"; + + /** + * 环境标签 + */ + private String tag; + +} diff --git a/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/WinEnvRpcAutoConfiguration.java b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/WinEnvRpcAutoConfiguration.java new file mode 100644 index 0000000..5cf53af --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/WinEnvRpcAutoConfiguration.java @@ -0,0 +1,46 @@ +package com.win.framework.env.config; + +import com.win.framework.env.core.fegin.EnvLoadBalancerClientFactory; +import com.win.framework.env.core.fegin.EnvRequestInterceptor; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.client.loadbalancer.LoadBalancerClientsProperties; +import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClientSpecification; +import org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration; +import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; +import org.springframework.context.annotation.Bean; + +import java.util.Collections; +import java.util.List; + +/** + * 多环境的 RPC 组件的自动配置 + * + * @author 芋道源码 + */ +@AutoConfiguration +@EnableConfigurationProperties(EnvProperties.class) +public class WinEnvRpcAutoConfiguration { + + // ========== Feign 相关 ========== + + /** + * 创建 {@link EnvLoadBalancerClientFactory} Bean + * + * 参考 {@link LoadBalancerAutoConfiguration#loadBalancerClientFactory(LoadBalancerClientsProperties)} 方法 + */ + @Bean + public LoadBalancerClientFactory loadBalancerClientFactory(LoadBalancerClientsProperties properties, + ObjectProvider> configurations) { + EnvLoadBalancerClientFactory clientFactory = new EnvLoadBalancerClientFactory(properties); + clientFactory.setConfigurations(configurations.getIfAvailable(Collections::emptyList)); + return clientFactory; + } + + @Bean + public EnvRequestInterceptor envRequestInterceptor() { + return new EnvRequestInterceptor(); + } + +} diff --git a/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/WinEnvWebAutoConfiguration.java b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/WinEnvWebAutoConfiguration.java new file mode 100644 index 0000000..e66d57b --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/config/WinEnvWebAutoConfiguration.java @@ -0,0 +1,32 @@ +package com.win.framework.env.config; + +import com.win.framework.common.enums.WebFilterOrderEnum; +import com.win.framework.env.core.web.EnvWebFilter; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; + +/** + * 多环境的 Web 组件的自动配置 + * + * @author 芋道源码 + */ +@AutoConfiguration +@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) +@EnableConfigurationProperties(EnvProperties.class) +public class WinEnvWebAutoConfiguration { + + /** + * 创建 {@link EnvWebFilter} Bean + */ + @Bean + public FilterRegistrationBean envWebFilterFilter() { + EnvWebFilter filter = new EnvWebFilter(); + FilterRegistrationBean bean = new FilterRegistrationBean<>(filter); + bean.setOrder(WebFilterOrderEnum.ENV_TAG_FILTER); + return bean; + } + +} diff --git a/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/context/EnvContextHolder.java b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/context/EnvContextHolder.java new file mode 100644 index 0000000..288e09f --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/context/EnvContextHolder.java @@ -0,0 +1,39 @@ +package com.win.framework.env.core.context; + +import cn.hutool.core.collection.CollUtil; +import com.alibaba.ttl.TransmittableThreadLocal; + +import java.util.ArrayList; +import java.util.List; + +/** + * 开发环境上下文 + * + * @author 芋道源码 + */ +public class EnvContextHolder { + + /** + * 标签的上下文 + * + * 使用 {@link List} 的原因,可能存在多层设置或者清理 + */ + private static final ThreadLocal> TAG_CONTEXT = TransmittableThreadLocal.withInitial(ArrayList::new); + + public static void setTag(String tag) { + TAG_CONTEXT.get().add(tag); + } + + public static String getTag() { + return CollUtil.getLast(TAG_CONTEXT.get()); + } + + public static void removeTag() { + List tags = TAG_CONTEXT.get(); + if (CollUtil.isEmpty(tags)) { + return; + } + tags.remove(tags.size() - 1); + } + +} diff --git a/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/fegin/EnvLoadBalancerClient.java b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/fegin/EnvLoadBalancerClient.java new file mode 100644 index 0000000..47fbf6b --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/fegin/EnvLoadBalancerClient.java @@ -0,0 +1,83 @@ +package com.win.framework.env.core.fegin; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.env.core.context.EnvContextHolder; +import com.win.framework.env.core.util.EnvUtils; +import com.alibaba.cloud.nacos.balancer.NacosBalancer; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.DefaultResponse; +import org.springframework.cloud.client.loadbalancer.EmptyResponse; +import org.springframework.cloud.client.loadbalancer.Request; +import org.springframework.cloud.client.loadbalancer.Response; +import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer; +import org.springframework.cloud.loadbalancer.core.NoopServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.core.ReactorServiceInstanceLoadBalancer; +import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; +import reactor.core.publisher.Mono; + +import java.util.List; + +/** + * 多环境的 {@link org.springframework.cloud.client.loadbalancer.LoadBalancerClient} 实现类 + * 在从服务实例列表选择时,优先选择 tag 匹配的服务实例 + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +@Slf4j +public class EnvLoadBalancerClient implements ReactorServiceInstanceLoadBalancer { + + /** + * 用于获取 serviceId 对应的服务实例的列表 + */ + private final ObjectProvider serviceInstanceListSupplierProvider; + /** + * 需要获取的服务实例名 + * + * 暂时用于打印 logger 日志 + */ + private final String serviceId; + /** + * 被代理的 ReactiveLoadBalancer 对象 + */ + private final ReactiveLoadBalancer reactiveLoadBalancer; + + @Override + public Mono> choose(Request request) { + // 情况一,没有 tag 时,使用默认的 reactiveLoadBalancer 实现负载均衡 + String tag = EnvContextHolder.getTag(); + if (StrUtil.isEmpty(tag)) { + return Mono.from(reactiveLoadBalancer.choose(request)); + } + + // 情况二,有 tag 时,使用 tag 匹配服务实例 + ServiceInstanceListSupplier supplier = serviceInstanceListSupplierProvider.getIfAvailable(NoopServiceInstanceListSupplier::new); + return supplier.get(request).next().map(list -> getInstanceResponse(list, tag)); + } + + private Response getInstanceResponse(List instances, String tag) { + // 如果服务实例为空,则直接返回 + if (CollUtil.isEmpty(instances)) { + log.warn("[getInstanceResponse][serviceId({}) 服务实例列表为空]", serviceId); + return new EmptyResponse(); + } + + // 筛选满足条件的实例列表 + List chooseInstances = CollectionUtils.filterList(instances, instance -> tag.equals(EnvUtils.getTag(instance))); + if (CollUtil.isEmpty(chooseInstances)) { + log.warn("[getInstanceResponse][serviceId({}) 没有满足 tag({}) 的服务实例列表,直接使用所有服务实例列表]", serviceId, tag); + chooseInstances = instances; + } + + // TODO 芋艿:https://juejin.cn/post/7056770721858469896 想通网段 + + // 随机 + 权重获取实例列表 TODO 芋艿:目前直接使用 Nacos 提供的方法,如果替换注册中心,需要重新失败该方法 + return new DefaultResponse(NacosBalancer.getHostByRandomWeight3(chooseInstances)); + } + +} diff --git a/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/fegin/EnvLoadBalancerClientFactory.java b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/fegin/EnvLoadBalancerClientFactory.java new file mode 100644 index 0000000..5836b2a --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/fegin/EnvLoadBalancerClientFactory.java @@ -0,0 +1,30 @@ +package com.win.framework.env.core.fegin; + + +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.LoadBalancerClientsProperties; +import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer; +import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; + +/** + * 多环境的 {@link LoadBalancerClientFactory} 实现类 + * 目的:在创建 {@link ReactiveLoadBalancer} 时,会额外增加 {@link EnvLoadBalancerClient} 代理,用于 tag 过滤服务实例 + * + * @author 芋道源码 + */ +public class EnvLoadBalancerClientFactory extends LoadBalancerClientFactory { + + public EnvLoadBalancerClientFactory(LoadBalancerClientsProperties properties) { + super(properties); + } + + @Override + public ReactiveLoadBalancer getInstance(String serviceId) { + ReactiveLoadBalancer reactiveLoadBalancer = super.getInstance(serviceId); + // 参考 {@link com.alibaba.cloud.nacos.loadbalancer.NacosLoadBalancerClientConfiguration#nacosLoadBalancer(Environment, LoadBalancerClientFactory, NacosDiscoveryProperties)} 方法 + return new EnvLoadBalancerClient(super.getLazyProvider(serviceId, ServiceInstanceListSupplier.class), + serviceId, reactiveLoadBalancer); + } + +} diff --git a/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/fegin/EnvRequestInterceptor.java b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/fegin/EnvRequestInterceptor.java new file mode 100644 index 0000000..cd4abde --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/fegin/EnvRequestInterceptor.java @@ -0,0 +1,24 @@ +package com.win.framework.env.core.fegin; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.env.core.context.EnvContextHolder; +import com.win.framework.env.core.util.EnvUtils; +import feign.RequestInterceptor; +import feign.RequestTemplate; + +/** + * 多环境的 {@link RequestInterceptor} 实现类:Feign 请求时,将 tag 设置到 header 中,继续透传给被调用的服务 + * + * @author 芋道源码 + */ +public class EnvRequestInterceptor implements RequestInterceptor { + + @Override + public void apply(RequestTemplate requestTemplate) { + String tag = EnvContextHolder.getTag(); + if (StrUtil.isNotEmpty(tag)) { + EnvUtils.setTag(requestTemplate, tag); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/package-info.java b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/package-info.java new file mode 100644 index 0000000..6c9395d --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/package-info.java @@ -0,0 +1 @@ +package com.win.framework.env.core; diff --git a/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/util/EnvUtils.java b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/util/EnvUtils.java new file mode 100644 index 0000000..7874de0 --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/util/EnvUtils.java @@ -0,0 +1,56 @@ +package com.win.framework.env.core.util; + +import com.win.framework.env.config.EnvProperties; +import feign.RequestTemplate; +import lombok.SneakyThrows; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.core.env.Environment; + +import jakarta.servlet.http.HttpServletRequest; +import java.net.InetAddress; +import java.util.Objects; + +/** + * 环境 Utils + * + * @author 芋道源码 + */ +public class EnvUtils { + + private static final String HEADER_TAG = "tag"; + + public static final String HOST_NAME_VALUE = "${HOSTNAME}"; + + public static String getTag(HttpServletRequest request) { + String tag = request.getHeader(HEADER_TAG); + // 如果请求的是 "${HOSTNAME}",则解析成对应的本地主机名 + // 目的:特殊逻辑,解决 IDEA Rest Client 不支持环境变量的读取,所以就服务器来做 + return Objects.equals(tag, HOST_NAME_VALUE) ? getHostName() : tag; + } + + public static String getTag(ServiceInstance instance) { + return instance.getMetadata().get(HEADER_TAG); + } + + public static String getTag(Environment environment) { + String tag = environment.getProperty(EnvProperties.TAG_KEY); + // 如果请求的是 "${HOSTNAME}",则解析成对应的本地主机名 + // 目的:特殊逻辑,解决 IDEA Rest Client 不支持环境变量的读取,所以就服务器来做 + return Objects.equals(tag, HOST_NAME_VALUE) ? getHostName() : tag; + } + + public static void setTag(RequestTemplate requestTemplate, String tag) { + requestTemplate.header(HEADER_TAG, tag); + } + + /** + * 获得 hostname 主机名 + * + * @return 主机名 + */ + @SneakyThrows + public static String getHostName() { + return InetAddress.getLocalHost().getHostName(); + } + +} diff --git a/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/web/EnvWebFilter.java b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/web/EnvWebFilter.java new file mode 100644 index 0000000..d0ed16e --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/core/web/EnvWebFilter.java @@ -0,0 +1,41 @@ +package com.win.framework.env.core.web; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.env.core.context.EnvContextHolder; +import com.win.framework.env.core.util.EnvUtils; +import org.springframework.web.filter.OncePerRequestFilter; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * 环境的 {@link jakarta.servlet.Filter} 实现类 + * 当有 tag 请求头时,设置到 {@link EnvContextHolder} 的标签上下文 + * + * @author 芋道源码 + */ +public class EnvWebFilter extends OncePerRequestFilter { + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException { + // 如果没有 tag,则走默认的流程 + String tag = EnvUtils.getTag(request); + if (StrUtil.isEmpty(tag)) { + chain.doFilter(request, response); + return; + } + + // 如果有 tag,则设置到上下文 + EnvContextHolder.setTag(tag); + try { + chain.doFilter(request, response); + } finally { + EnvContextHolder.removeTag(); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/package-info.java b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/package-info.java new file mode 100644 index 0000000..20200f2 --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/src/main/java/com/win/framework/env/package-info.java @@ -0,0 +1,7 @@ +/** + * 开发环境拓展,实现类似阿里的特性环境的能力 + * 1. https://segmentfault.com/a/1190000018022987 + * + * @author 芋道源码 + */ +package com.win.framework.env; diff --git a/win-framework/win-spring-boot-starter-env/src/main/resources/META-INF/spring.factories b/win-framework/win-spring-boot-starter-env/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..a2a12b1 --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.env.EnvironmentPostProcessor=\ + com.win.framework.env.config.EnvEnvironmentPostProcessor diff --git a/win-framework/win-spring-boot-starter-env/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/win-framework/win-spring-boot-starter-env/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..9d27efc --- /dev/null +++ b/win-framework/win-spring-boot-starter-env/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +com.win.framework.env.config.WinEnvWebAutoConfiguration +com.win.framework.env.config.WinEnvRpcAutoConfiguration diff --git a/win-framework/win-spring-boot-starter-excel/pom.xml b/win-framework/win-spring-boot-starter-excel/pom.xml new file mode 100644 index 0000000..4f126dc --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/pom.xml @@ -0,0 +1,75 @@ + + + + com.win + win-framework + ${revision} + + 4.0.0 + win-spring-boot-starter-excel + jar + + ${project.artifactId} + Excel 拓展 + https://github.com/YunaiV/ruoyi-vue-pro + + + + com.win + win-common + + + + + org.springframework.boot + spring-boot-starter + + + + + com.win + win-spring-boot-starter-rpc + true + + + + + com.win + win-module-system-api + ${revision} + + + + + org.springframework + spring-web + provided + + + + jakarta.servlet + jakarta.servlet-api + provided + + + + + com.alibaba + easyexcel + + + + com.google.guava + guava + + + + com.win + win-spring-boot-starter-biz-ip + true + + + + diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/config/WinDictAutoConfiguration.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/config/WinDictAutoConfiguration.java new file mode 100644 index 0000000..2f1d519 --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/config/WinDictAutoConfiguration.java @@ -0,0 +1,18 @@ +package com.win.framework.dict.config; + +import com.win.framework.dict.core.DictFrameworkUtils; +import com.win.module.system.api.dict.DictDataApi; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Bean; + +@AutoConfiguration +public class WinDictAutoConfiguration { + + @Bean + @SuppressWarnings("InstantiationOfUtilityClass") + public DictFrameworkUtils dictUtils(DictDataApi dictDataApi) { + DictFrameworkUtils.init(dictDataApi); + return new DictFrameworkUtils(); + } + +} diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/config/WinDictRpcAutoConfiguration.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/config/WinDictRpcAutoConfiguration.java new file mode 100644 index 0000000..960f679 --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/config/WinDictRpcAutoConfiguration.java @@ -0,0 +1,15 @@ +package com.win.framework.dict.config; + +import com.win.module.system.api.dict.DictDataApi; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * 字典用到 Feign 的配置项 + * + * @author 芋道源码 + */ +@AutoConfiguration +@EnableFeignClients(clients = DictDataApi.class) // 主要是引入相关的 API 服务 +public class WinDictRpcAutoConfiguration { +} diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/core/DictFrameworkUtils.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/core/DictFrameworkUtils.java new file mode 100644 index 0000000..33781e3 --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/core/DictFrameworkUtils.java @@ -0,0 +1,96 @@ +package com.win.framework.dict.core; + +import cn.hutool.core.util.ObjectUtil; +import com.win.framework.common.core.KeyValue; +import com.win.framework.common.util.cache.CacheUtils; +import com.win.module.system.api.dict.DictDataApi; +import com.win.module.system.api.dict.dto.DictDataRespDTO; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; + +import java.time.Duration; +import java.util.List; + +/** + * 字典工具类 + * + * @author 芋道源码 + */ +@Slf4j +public class DictFrameworkUtils { + + private static DictDataApi dictDataApi; + + private static final DictDataRespDTO DICT_DATA_NULL = new DictDataRespDTO(); + + // TODO @puhui999:GET_DICT_DATA_CACHE、GET_DICT_DATA_LIST_CACHE、PARSE_DICT_DATA_CACHE 这 3 个缓存是有点重叠,可以思考下,有没可能减少 1 个。微信讨论好私聊,再具体改哈 + /** + * 针对 {@link #getDictDataLabel(String, String)} 的缓存 + */ + private static final LoadingCache, DictDataRespDTO> GET_DICT_DATA_CACHE = CacheUtils.buildAsyncReloadingCache( + Duration.ofMinutes(1L), // 过期时间 1 分钟 + new CacheLoader, DictDataRespDTO>() { + + @Override + public DictDataRespDTO load(KeyValue key) { + return ObjectUtil.defaultIfNull(dictDataApi.getDictData(key.getKey(), key.getValue()).getCheckedData(), DICT_DATA_NULL); + } + + }); + + /** + * 针对 {@link #getDictDataLabelList(String)} 的缓存 + */ + private static final LoadingCache> GET_DICT_DATA_LIST_CACHE = CacheUtils.buildAsyncReloadingCache( + Duration.ofMinutes(1L), // 过期时间 1 分钟 + new CacheLoader>() { + + @Override + public List load(String dictType) { + return dictDataApi.getDictDataLabelList(dictType); + } + + }); + + /** + * 针对 {@link #parseDictDataValue(String, String)} 的缓存 + */ + private static final LoadingCache, DictDataRespDTO> PARSE_DICT_DATA_CACHE = CacheUtils.buildAsyncReloadingCache( + Duration.ofMinutes(1L), // 过期时间 1 分钟 + new CacheLoader, DictDataRespDTO>() { + + @Override + public DictDataRespDTO load(KeyValue key) { + return ObjectUtil.defaultIfNull(dictDataApi.parseDictData(key.getKey(), key.getValue()).getCheckedData(), DICT_DATA_NULL); + } + + }); + + public static void init(DictDataApi dictDataApi) { + DictFrameworkUtils.dictDataApi = dictDataApi; + log.info("[init][初始化 DictFrameworkUtils 成功]"); + } + + @SneakyThrows + public static String getDictDataLabel(String dictType, Integer value) { + return GET_DICT_DATA_CACHE.get(new KeyValue<>(dictType, String.valueOf(value))).getLabel(); + } + + @SneakyThrows + public static String getDictDataLabel(String dictType, String value) { + return GET_DICT_DATA_CACHE.get(new KeyValue<>(dictType, value)).getLabel(); + } + + @SneakyThrows + public static List getDictDataLabelList(String dictType) { + return GET_DICT_DATA_LIST_CACHE.get(dictType); + } + + @SneakyThrows + public static String parseDictDataValue(String dictType, String label) { + return PARSE_DICT_DATA_CACHE.get(new KeyValue<>(dictType, label)).getValue(); + } + +} diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/package-info.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/package-info.java new file mode 100644 index 0000000..d1e8e1e --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/dict/package-info.java @@ -0,0 +1,6 @@ +/** + * 字典数据模块,提供 {@link com.win.framework.dict.core.DictFrameworkUtils} 工具类 + * + * 通过将字典缓存在内存中,保证性能 + */ +package com.win.framework.dict; diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/annotations/DictFormat.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/annotations/DictFormat.java new file mode 100644 index 0000000..2df7177 --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/annotations/DictFormat.java @@ -0,0 +1,22 @@ +package com.win.framework.excel.core.annotations; + +import java.lang.annotation.*; + +/** + * 字典格式化 + * + * 实现将字典数据的值,格式化成字典数据的标签 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface DictFormat { + + /** + * 例如说,SysDictTypeConstants、InfDictTypeConstants + * + * @return 字典类型 + */ + String value(); + +} diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/annotations/ExcelColumnSelect.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/annotations/ExcelColumnSelect.java new file mode 100644 index 0000000..d89ab9a --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/annotations/ExcelColumnSelect.java @@ -0,0 +1,27 @@ +package com.win.framework.excel.core.annotations; + +import java.lang.annotation.*; + +/** + * 给 Excel 列添加下拉选择数据 + * + * 其中 {@link #dictType()} 和 {@link #functionName()} 二选一 + * + * @author HUIHUI + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface ExcelColumnSelect { + + /** + * @return 字典类型 + */ + String dictType() default ""; + + /** + * @return 获取下拉数据源的方法名称 + */ + String functionName() default ""; + +} diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/AreaConvert.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/AreaConvert.java new file mode 100644 index 0000000..49f1190 --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/AreaConvert.java @@ -0,0 +1,46 @@ +package com.win.framework.excel.core.convert; + +import cn.hutool.core.convert.Convert; +import com.win.framework.ip.core.Area; +import com.win.framework.ip.core.utils.AreaUtils; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import lombok.extern.slf4j.Slf4j; + +/** + * Excel 数据地区转换器 + * + * @author HUIHUI + */ +@Slf4j +public class AreaConvert implements Converter { + + @Override + public Class supportJavaTypeKey() { + throw new UnsupportedOperationException("暂不支持,也不需要"); + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + throw new UnsupportedOperationException("暂不支持,也不需要"); + } + + @Override + public Object convertToJavaData(ReadCellData readCellData, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + // 解析地区编号 + String label = readCellData.getStringValue(); + Area area = AreaUtils.parseArea(label); + if (area == null) { + log.error("[convertToJavaData][label({}) 解析不掉]", label); + return null; + } + // 将 value 转换成对应的属性 + Class fieldClazz = contentProperty.getField().getType(); + return Convert.convert(fieldClazz, area.getId()); + } + +} diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/DictConvert.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/DictConvert.java new file mode 100644 index 0000000..5f2011c --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/DictConvert.java @@ -0,0 +1,72 @@ +package com.win.framework.excel.core.convert; + +import cn.hutool.core.convert.Convert; +import com.win.framework.dict.core.DictFrameworkUtils; +import com.win.framework.excel.core.annotations.DictFormat; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import lombok.extern.slf4j.Slf4j; + +/** + * Excel 数据字典转换器 + * + * @author 芋道源码 + */ +@Slf4j +public class DictConvert implements Converter { + + @Override + public Class supportJavaTypeKey() { + throw new UnsupportedOperationException("暂不支持,也不需要"); + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + throw new UnsupportedOperationException("暂不支持,也不需要"); + } + + @Override + public Object convertToJavaData(ReadCellData readCellData, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + // 使用字典解析 + String type = getType(contentProperty); + String label = readCellData.getStringValue(); + String value = DictFrameworkUtils.parseDictDataValue(type, label); + if (value == null) { + log.error("[convertToJavaData][type({}) 解析不掉 label({})]", type, label); + return null; + } + // 将 String 的 value 转换成对应的属性 + Class fieldClazz = contentProperty.getField().getType(); + return Convert.convert(fieldClazz, value); + } + + @Override + public WriteCellData convertToExcelData(Object object, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + // 空时,返回空 + if (object == null) { + return new WriteCellData<>(""); + } + + // 使用字典格式化 + String type = getType(contentProperty); + String value = String.valueOf(object); + String label = DictFrameworkUtils.getDictDataLabel(type, value); + if (label == null) { + log.error("[convertToExcelData][type({}) 转换不了 label({})]", type, value); + return new WriteCellData<>(""); + } + // 生成 Excel 小表格 + return new WriteCellData<>(label); + } + + private static String getType(ExcelContentProperty contentProperty) { + return contentProperty.getField().getAnnotation(DictFormat.class).value(); + } + +} diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/JsonConvert.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/JsonConvert.java new file mode 100644 index 0000000..a9487aa --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/JsonConvert.java @@ -0,0 +1,34 @@ +package com.win.framework.excel.core.convert; + +import com.win.framework.common.util.json.JsonUtils; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * Excel Json 转换器 + * + * @author 芋道源码 + */ +public class JsonConvert implements Converter { + + @Override + public Class supportJavaTypeKey() { + throw new UnsupportedOperationException("暂不支持,也不需要"); + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + throw new UnsupportedOperationException("暂不支持,也不需要"); + } + + @Override + public WriteCellData convertToExcelData(Object value, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + // 生成 Excel 小表格 + return new WriteCellData<>(JsonUtils.toJsonString(value)); + } + +} diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/MoneyConvert.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/MoneyConvert.java new file mode 100644 index 0000000..a22696b --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/convert/MoneyConvert.java @@ -0,0 +1,39 @@ +package com.win.framework.excel.core.convert; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +/** + * 金额转换器 + * + * 金额单位:分 + * + * @author 芋道源码 + */ +public class MoneyConvert implements Converter { + + @Override + public Class supportJavaTypeKey() { + throw new UnsupportedOperationException("暂不支持,也不需要"); + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + throw new UnsupportedOperationException("暂不支持,也不需要"); + } + + @Override + public WriteCellData convertToExcelData(Integer value, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + BigDecimal result = BigDecimal.valueOf(value) + .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); + return new WriteCellData<>(result.toString()); + } + +} diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/function/ExcelColumnSelectFunction.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/function/ExcelColumnSelectFunction.java new file mode 100644 index 0000000..d564e78 --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/function/ExcelColumnSelectFunction.java @@ -0,0 +1,28 @@ +package com.win.framework.excel.core.function; + +import java.util.List; + +/** + * Excel 列下拉数据源获取接口 + * + * 为什么不直接解析字典还搞个接口?考虑到有的下拉数据不是从字典中获取的所有需要做一个兼容 + + * @author HUIHUI + */ +public interface ExcelColumnSelectFunction { + + /** + * 获得方法名称 + * + * @return 方法名称 + */ + String getName(); + + /** + * 获得列下拉数据源 + * + * @return 下拉数据源 + */ + List getOptions(); + +} diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/handler/SelectSheetWriteHandler.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/handler/SelectSheetWriteHandler.java new file mode 100644 index 0000000..7ff5f7b --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/handler/SelectSheetWriteHandler.java @@ -0,0 +1,165 @@ +package com.win.framework.excel.core.handler; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.spring.SpringUtil; +import cn.hutool.poi.excel.ExcelUtil; +import com.win.framework.common.core.KeyValue; +import com.win.framework.dict.core.DictFrameworkUtils; +import com.win.framework.excel.core.annotations.ExcelColumnSelect; +import com.win.framework.excel.core.function.ExcelColumnSelectFunction; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.write.handler.SheetWriteHandler; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.hssf.usermodel.HSSFDataValidation; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddressList; + +import java.lang.reflect.Field; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.win.framework.common.util.collection.CollectionUtils.convertList; + +/** + * 基于固定 sheet 实现下拉框 + * + * @author HUIHUI + */ +@Slf4j +public class SelectSheetWriteHandler implements SheetWriteHandler { + + /** + * 数据起始行从 0 开始 + * + * 约定:本项目第一行有标题所以从 1 开始如果您的 Excel 有多行标题请自行更改 + */ + public static final int FIRST_ROW = 1; + /** + * 下拉列需要创建下拉框的行数,默认两千行如需更多请自行调整 + */ + public static final int LAST_ROW = 2000; + + private static final String DICT_SHEET_NAME = "字典sheet"; + + /** + * key: 列 value: 下拉数据源 + */ + private final Map> selectMap = new HashMap<>(); + + public SelectSheetWriteHandler(Class head) { + // 加载下拉数据获取接口 + Map beansMap = SpringUtil.getBeanFactory().getBeansOfType(ExcelColumnSelectFunction.class); + if (MapUtil.isEmpty(beansMap)) { + return; + } + + // 解析下拉数据 + int colIndex = 0; + for (Field field : head.getDeclaredFields()) { + if (field.isAnnotationPresent(ExcelColumnSelect.class)) { + ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class); + if (excelProperty != null && excelProperty.index() != -1) { + colIndex = excelProperty.index(); + } + getSelectDataList(colIndex, field); + } + colIndex++; + } + } + + /** + * 获得下拉数据,并添加到 {@link #selectMap} 中 + * + * @param colIndex 列索引 + * @param field 字段 + */ + private void getSelectDataList(int colIndex, Field field) { + ExcelColumnSelect columnSelect = field.getAnnotation(ExcelColumnSelect.class); + String dictType = columnSelect.dictType(); + String functionName = columnSelect.functionName(); + Assert.isTrue(ObjectUtil.isNotEmpty(dictType) || ObjectUtil.isNotEmpty(functionName), + "Field({}) 的 @ExcelColumnSelect 注解,dictType 和 functionName 不能同时为空", field.getName()); + + // 情况一:使用 dictType 获得下拉数据 + if (StrUtil.isNotEmpty(dictType)) { // 情况一: 字典数据 (默认) + selectMap.put(colIndex, DictFrameworkUtils.getDictDataLabelList(dictType)); + return; + } + + // 情况二:使用 functionName 获得下拉数据 + Map functionMap = SpringUtil.getApplicationContext().getBeansOfType(ExcelColumnSelectFunction.class); + ExcelColumnSelectFunction function = CollUtil.findOne(functionMap.values(), item -> item.getName().equals(functionName)); + Assert.notNull(function, "未找到对应的 function({})", functionName); + selectMap.put(colIndex, function.getOptions()); + } + + @Override + public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { + if (CollUtil.isEmpty(selectMap)) { + return; + } + + // 1. 获取相应操作对象 + DataValidationHelper helper = writeSheetHolder.getSheet().getDataValidationHelper(); // 需要设置下拉框的 sheet 页的数据验证助手 + Workbook workbook = writeWorkbookHolder.getWorkbook(); // 获得工作簿 + List>> keyValues = convertList(selectMap.entrySet(), entry -> new KeyValue<>(entry.getKey(), entry.getValue())); + keyValues.sort(Comparator.comparing(item -> item.getValue().size())); // 升序不然创建下拉会报错 + + // 2. 创建数据字典的 sheet 页 + Sheet dictSheet = workbook.createSheet(DICT_SHEET_NAME); + for (KeyValue> keyValue : keyValues) { + int rowLength = keyValue.getValue().size(); + // 2.1 设置字典 sheet 页的值,每一列一个字典项 + for (int i = 0; i < rowLength; i++) { + Row row = dictSheet.getRow(i); + if (row == null) { + row = dictSheet.createRow(i); + } + row.createCell(keyValue.getKey()).setCellValue(keyValue.getValue().get(i)); + } + // 2.2 设置单元格下拉选择 + setColumnSelect(writeSheetHolder, workbook, helper, keyValue); + } + } + + /** + * 设置单元格下拉选择 + */ + private static void setColumnSelect(WriteSheetHolder writeSheetHolder, Workbook workbook, DataValidationHelper helper, + KeyValue> keyValue) { + // 1.1 创建可被其他单元格引用的名称 + Name name = workbook.createName(); + String excelColumn = ExcelUtil.indexToColName(keyValue.getKey()); + // 1.2 下拉框数据来源 eg:字典sheet!$B1:$B2 + String refers = DICT_SHEET_NAME + "!$" + excelColumn + "$1:$" + excelColumn + "$" + keyValue.getValue().size(); + name.setNameName("dict" + keyValue.getKey()); // 设置名称的名字 + name.setRefersToFormula(refers); // 设置公式 + + // 2.1 设置约束 + DataValidationConstraint constraint = helper.createFormulaListConstraint("dict" + keyValue.getKey()); // 设置引用约束 + // 设置下拉单元格的首行、末行、首列、末列 + CellRangeAddressList rangeAddressList = new CellRangeAddressList(FIRST_ROW, LAST_ROW, + keyValue.getKey(), keyValue.getKey()); + DataValidation validation = helper.createValidation(constraint, rangeAddressList); + if (validation instanceof HSSFDataValidation) { + validation.setSuppressDropDownArrow(false); + } else { + validation.setSuppressDropDownArrow(true); + validation.setShowErrorBox(true); + } + // 2.2 阻止输入非下拉框的值 + validation.setErrorStyle(DataValidation.ErrorStyle.STOP); + validation.createErrorBox("提示", "此值不存在于下拉选择中!"); + // 2.3 添加下拉框约束 + writeSheetHolder.getSheet().addValidationData(validation); + } + +} \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/util/ExcelUtils.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/util/ExcelUtils.java new file mode 100644 index 0000000..fc1c960 --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/core/util/ExcelUtils.java @@ -0,0 +1,53 @@ +package com.win.framework.excel.core.util; + +import com.win.framework.excel.core.handler.SelectSheetWriteHandler; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.converters.longconverter.LongStringConverter; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.List; + +/** + * Excel 工具类 + * + * @author 芋道源码 + */ +public class ExcelUtils { + + /** + * 将列表以 Excel 响应给前端 + * + * @param response 响应 + * @param filename 文件名 + * @param sheetName Excel sheet 名 + * @param head Excel head 头 + * @param data 数据列表哦 + * @param 泛型,保证 head 和 data 类型的一致性 + * @throws IOException 写入失败的情况 + */ + public static void write(HttpServletResponse response, String filename, String sheetName, + Class head, List data) throws IOException { + // 输出 Excel + EasyExcel.write(response.getOutputStream(), head) + .autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理 + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 基于 column 长度,自动适配。最大 255 宽度 + .registerWriteHandler(new SelectSheetWriteHandler(head)) // 基于固定 sheet 实现下拉框 + .registerConverter(new LongStringConverter()) // 避免 Long 类型丢失精度 + .sheet(sheetName).doWrite(data); + // 设置 header 和 contentType。写在最后的原因是,避免报错时,响应 contentType 已经被修改了 + response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, StandardCharsets.UTF_8.name())); + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + } + + public static List read(MultipartFile file, Class head) throws IOException { + return EasyExcel.read(file.getInputStream(), head, null) + .autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理 + .doReadAllSync(); + } + +} diff --git a/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/package-info.java b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/package-info.java new file mode 100644 index 0000000..bdd8936 --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/java/com/win/framework/excel/package-info.java @@ -0,0 +1,4 @@ +/** + * 基于 EasyExcel 实现 Excel 相关的操作 + */ +package com.win.framework.excel; diff --git a/win-framework/win-spring-boot-starter-excel/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/win-framework/win-spring-boot-starter-excel/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..b2eb065 --- /dev/null +++ b/win-framework/win-spring-boot-starter-excel/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +com.win.framework.dict.config.WinDictRpcAutoConfiguration +com.win.framework.dict.config.WinDictAutoConfiguration diff --git a/win-framework/win-spring-boot-starter-job/pom.xml b/win-framework/win-spring-boot-starter-job/pom.xml new file mode 100644 index 0000000..e4dff37 --- /dev/null +++ b/win-framework/win-spring-boot-starter-job/pom.xml @@ -0,0 +1,50 @@ + + + + com.win + win-framework + ${revision} + + 4.0.0 + win-spring-boot-starter-job + jar + + ${project.artifactId} + 任务拓展,基于 XXL-Job 实现 + https://github.com/YunaiV/ruoyi-vue-pro + + + + com.win + win-common + + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.springframework.boot + spring-boot-starter + true + + + + + com.xuxueli + xxl-job-core + + + + + jakarta.validation + jakarta.validation-api + + + + + diff --git a/win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/config/WinAsyncAutoConfiguration.java b/win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/config/WinAsyncAutoConfiguration.java new file mode 100644 index 0000000..0144f05 --- /dev/null +++ b/win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/config/WinAsyncAutoConfiguration.java @@ -0,0 +1,37 @@ +package com.win.framework.quartz.config; + +import com.alibaba.ttl.TtlRunnable; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +/** + * 异步任务 Configuration + */ +@AutoConfiguration +@EnableAsync +public class WinAsyncAutoConfiguration { + + @Bean + public BeanPostProcessor threadPoolTaskExecutorBeanPostProcessor() { + return new BeanPostProcessor() { + + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { + if (!(bean instanceof ThreadPoolTaskExecutor)) { + return bean; + } + // 修改提交的任务,接入 TransmittableThreadLocal + ThreadPoolTaskExecutor executor = (ThreadPoolTaskExecutor) bean; + executor.setTaskDecorator(TtlRunnable::get); + return executor; + } + + }; + } + +} diff --git a/win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/config/WinXxlJobAutoConfiguration.java b/win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/config/WinXxlJobAutoConfiguration.java new file mode 100644 index 0000000..a5235e2 --- /dev/null +++ b/win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/config/WinXxlJobAutoConfiguration.java @@ -0,0 +1,47 @@ +package com.win.framework.quartz.config; + +import com.xxl.job.core.executor.XxlJobExecutor; +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; + +/** + * XXL-Job 自动配置类 + * + * @author 芋道源码 + */ +@AutoConfiguration +@ConditionalOnClass(XxlJobSpringExecutor.class) +@ConditionalOnProperty(prefix = "xxl.job", name = "enabled", havingValue = "true", matchIfMissing = true) +@EnableConfigurationProperties({XxlJobProperties.class}) +@EnableScheduling // 开启 Spring 自带的定时任务 +@Slf4j +public class WinXxlJobAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public XxlJobExecutor xxlJobExecutor(XxlJobProperties properties) { + log.info("[xxlJobExecutor][初始化 XXL-Job 执行器的配置]"); + XxlJobProperties.AdminProperties admin = properties.getAdmin(); + XxlJobProperties.ExecutorProperties executor = properties.getExecutor(); + + // 初始化执行器 + XxlJobExecutor xxlJobExecutor = new XxlJobSpringExecutor(); + xxlJobExecutor.setIp(executor.getIp()); + xxlJobExecutor.setPort(executor.getPort()); + xxlJobExecutor.setAppname(executor.getAppName()); + xxlJobExecutor.setLogPath(executor.getLogPath()); + xxlJobExecutor.setLogRetentionDays(executor.getLogRetentionDays()); + xxlJobExecutor.setAdminAddresses(admin.getAddresses()); + xxlJobExecutor.setAccessToken(properties.getAccessToken()); + return xxlJobExecutor; + } + +} diff --git a/win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/config/XxlJobProperties.java b/win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/config/XxlJobProperties.java new file mode 100644 index 0000000..6124f0e --- /dev/null +++ b/win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/config/XxlJobProperties.java @@ -0,0 +1,99 @@ +package com.win.framework.quartz.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +/** + * XXL-Job 配置类 + */ +@ConfigurationProperties("xxl.job") +@Validated +@Data +public class XxlJobProperties { + + /** + * 是否开启,默认为 true 关闭 + */ + private Boolean enabled = true; + /** + * 访问令牌 + */ + private String accessToken; + /** + * 控制器配置 + */ + @NotNull(message = "控制器配置不能为空") + private AdminProperties admin; + /** + * 执行器配置 + */ + @NotNull(message = "执行器配置不能为空") + private ExecutorProperties executor; + + /** + * XXL-Job 调度器配置类 + */ + @Data + @Valid + public static class AdminProperties { + + /** + * 调度器地址 + */ + @NotEmpty(message = "调度器地址不能为空") + private String addresses; + + } + + /** + * XXL-Job 执行器配置类 + */ + @Data + @Valid + public static class ExecutorProperties { + + /** + * 默认端口 + * + * 这里使用 -1 表示随机 + */ + private static final Integer PORT_DEFAULT = -1; + + /** + * 默认日志保留天数 + * + * 如果想永久保留,则设置为 -1 + */ + private static final Integer LOG_RETENTION_DAYS_DEFAULT = 30; + + /** + * 应用名 + */ + @NotEmpty(message = "应用名不能为空") + private String appName; + /** + * 执行器的 IP + */ + private String ip; + /** + * 执行器的 Port + */ + private Integer port = PORT_DEFAULT; + /** + * 日志地址 + */ + @NotEmpty(message = "日志地址不能为空") + private String logPath; + /** + * 日志保留天数 + */ + private Integer logRetentionDays = LOG_RETENTION_DAYS_DEFAULT; + + } + +} diff --git a/win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/package-info.java b/win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/package-info.java new file mode 100644 index 0000000..69bb323 --- /dev/null +++ b/win-framework/win-spring-boot-starter-job/src/main/java/com/win/framework/quartz/package-info.java @@ -0,0 +1,5 @@ +/** + * 1. 定时任务,基于 XXL-Job 实现。 + * 2. 异步任务,采用 Spring Async 异步执行。 + */ +package com.win.framework.quartz; diff --git a/win-framework/win-spring-boot-starter-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/win-framework/win-spring-boot-starter-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..dbd7e67 --- /dev/null +++ b/win-framework/win-spring-boot-starter-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +com.win.framework.quartz.config.WinXxlJobAutoConfiguration +com.win.framework.quartz.config.WinAsyncAutoConfiguration diff --git a/win-framework/win-spring-boot-starter-job/《芋道 Spring Boot 定时任务入门》.md b/win-framework/win-spring-boot-starter-job/《芋道 Spring Boot 定时任务入门》.md new file mode 100644 index 0000000..9a8a16c --- /dev/null +++ b/win-framework/win-spring-boot-starter-job/《芋道 Spring Boot 定时任务入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-job/《芋道 Spring Boot 异步任务入门》.md b/win-framework/win-spring-boot-starter-job/《芋道 Spring Boot 异步任务入门》.md new file mode 100644 index 0000000..3161ffb --- /dev/null +++ b/win-framework/win-spring-boot-starter-job/《芋道 Spring Boot 异步任务入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-monitor/pom.xml b/win-framework/win-spring-boot-starter-monitor/pom.xml new file mode 100644 index 0000000..f3a4600 --- /dev/null +++ b/win-framework/win-spring-boot-starter-monitor/pom.xml @@ -0,0 +1,73 @@ + + + + com.win + win-framework + ${revision} + + 4.0.0 + win-spring-boot-starter-monitor + jar + + ${project.artifactId} + 服务监控,提供链路追踪、日志服务、指标收集等等功能 + https://github.com/YunaiV/ruoyi-vue-pro + + + + com.win + win-common + + + + + org.springframework.boot + spring-boot-starter-aop + + + + + org.springframework + spring-web + provided + + + + jakarta.servlet + jakarta.servlet-api + provided + + + + + io.opentracing + opentracing-util + + + org.apache.skywalking + apm-toolkit-trace + + + org.apache.skywalking + apm-toolkit-logback-1.x + + + org.apache.skywalking + apm-toolkit-opentracing + + + + + io.micrometer + micrometer-registry-prometheus + + + + de.codecentric + spring-boot-admin-starter-client + + + + diff --git a/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/config/TracerProperties.java b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/config/TracerProperties.java new file mode 100644 index 0000000..785bc88 --- /dev/null +++ b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/config/TracerProperties.java @@ -0,0 +1,14 @@ +package com.win.framework.tracer.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * BizTracer配置类 + * + * @author 麻薯 + */ +@ConfigurationProperties("win.tracer") +@Data +public class TracerProperties { +} diff --git a/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/config/WinMetricsAutoConfiguration.java b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/config/WinMetricsAutoConfiguration.java new file mode 100644 index 0000000..5d31a53 --- /dev/null +++ b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/config/WinMetricsAutoConfiguration.java @@ -0,0 +1,28 @@ +package com.win.framework.tracer.config; + +import io.micrometer.core.instrument.MeterRegistry; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Metrics 配置类 + * + * @author 芋道源码 + */ +@AutoConfiguration +@ConditionalOnClass({MeterRegistryCustomizer.class}) +@ConditionalOnProperty(prefix = "win.metrics", value = "enable", matchIfMissing = true) // 允许使用 win.metrics.enable=false 禁用 Metrics +public class WinMetricsAutoConfiguration { + + @Bean + public MeterRegistryCustomizer metricsCommonTags( + @Value("${spring.application.name}") String applicationName) { + return registry -> registry.config().commonTags("application", applicationName); + } + +} diff --git a/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/config/WinTracerAutoConfiguration.java b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/config/WinTracerAutoConfiguration.java new file mode 100644 index 0000000..4b422e3 --- /dev/null +++ b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/config/WinTracerAutoConfiguration.java @@ -0,0 +1,55 @@ +package com.win.framework.tracer.config; + +import com.win.framework.common.enums.WebFilterOrderEnum; +import com.win.framework.tracer.core.aop.BizTraceAspect; +import com.win.framework.tracer.core.filter.TraceFilter; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; + +/** + * Tracer 配置类 + * + * @author mashu + */ +@AutoConfiguration +@ConditionalOnClass(value = {BizTraceAspect.class}, name = "jakarta.servlet.Filter") +@EnableConfigurationProperties(TracerProperties.class) +@ConditionalOnProperty(prefix = "win.tracer", value = "enable", matchIfMissing = true) +public class WinTracerAutoConfiguration { + + // TODO @芋艿:重要。目前 opentracing 版本存在冲突,要么保证 skywalking,要么保证阿里云短信 sdk +// @Bean +// public TracerProperties bizTracerProperties() { +// return new TracerProperties(); +// } +// +// @Bean +// public BizTraceAspect bizTracingAop() { +// return new BizTraceAspect(tracer()); +// } +// +// @Bean +// public Tracer tracer() { +// // 创建 SkywalkingTracer 对象 +// SkywalkingTracer tracer = new SkywalkingTracer(); +// // 设置为 GlobalTracer 的追踪器 +// GlobalTracer.register(tracer); +// return tracer; +// } + + /** + * 创建 TraceFilter 过滤器,响应 header 设置 traceId + */ + @Bean + public FilterRegistrationBean traceFilter() { + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(new TraceFilter()); + registrationBean.setOrder(WebFilterOrderEnum.TRACE_FILTER); + return registrationBean; + } + +} diff --git a/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/annotation/BizTrace.java b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/annotation/BizTrace.java new file mode 100644 index 0000000..0d72635 --- /dev/null +++ b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/annotation/BizTrace.java @@ -0,0 +1,42 @@ +package com.win.framework.tracer.core.annotation; + +import java.lang.annotation.*; + +/** + * 打印业务编号 / 业务类型注解 + * + * 使用时,需要设置 SkyWalking OAP Server 的 application.yaml 配置文件,修改 SW_SEARCHABLE_TAG_KEYS 配置项, + * 增加 biz.type 和 biz.id 两值,然后重启 SkyWalking OAP Server 服务器。 + * + * @author 麻薯 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface BizTrace { + + /** + * 业务编号 tag 名 + */ + String ID_TAG = "biz.id"; + /** + * 业务类型 tag 名 + */ + String TYPE_TAG = "biz.type"; + + /** + * @return 操作名 + */ + String operationName() default ""; + + /** + * @return 业务编号 + */ + String id(); + + /** + * @return 业务类型 + */ + String type(); + +} diff --git a/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/aop/BizTraceAspect.java b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/aop/BizTraceAspect.java new file mode 100644 index 0000000..de6f1fa --- /dev/null +++ b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/aop/BizTraceAspect.java @@ -0,0 +1,77 @@ +package com.win.framework.tracer.core.aop; + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.tracer.core.annotation.BizTrace; +import com.win.framework.common.util.spring.SpringExpressionUtils; +import com.win.framework.tracer.core.util.TracerFrameworkUtils; +import io.opentracing.Span; +import io.opentracing.Tracer; +import io.opentracing.tag.Tags; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; + +import java.util.Map; + +import static java.util.Arrays.asList; + +/** + * {@link BizTrace} 切面,记录业务链路 + * + * @author mashu + */ +@Aspect +@AllArgsConstructor +@Slf4j +public class BizTraceAspect { + + private static final String BIZ_OPERATION_NAME_PREFIX = "Biz/"; + + private final Tracer tracer; + + @Around(value = "@annotation(trace)") + public Object around(ProceedingJoinPoint joinPoint, BizTrace trace) throws Throwable { + // 创建 span + String operationName = getOperationName(joinPoint, trace); + Span span = tracer.buildSpan(operationName) + .withTag(Tags.COMPONENT.getKey(), "biz") + .start(); + try { + // 执行原有方法 + return joinPoint.proceed(); + } catch (Throwable throwable) { + TracerFrameworkUtils.onError(throwable, span); + throw throwable; + } finally { + // 设置 Span 的 biz 属性 + setBizTag(span, joinPoint, trace); + // 完成 Span + span.finish(); + } + } + + private String getOperationName(ProceedingJoinPoint joinPoint, BizTrace trace) { + // 自定义操作名 + if (StrUtil.isNotEmpty(trace.operationName())) { + return BIZ_OPERATION_NAME_PREFIX + trace.operationName(); + } + // 默认操作名,使用方法名 + return BIZ_OPERATION_NAME_PREFIX + + joinPoint.getSignature().getDeclaringType().getSimpleName() + + "/" + joinPoint.getSignature().getName(); + } + + private void setBizTag(Span span, ProceedingJoinPoint joinPoint, BizTrace trace) { + try { + Map result = SpringExpressionUtils.parseExpressions(joinPoint, asList(trace.type(), trace.id())); + span.setTag(BizTrace.TYPE_TAG, MapUtil.getStr(result, trace.type())); + span.setTag(BizTrace.ID_TAG, MapUtil.getStr(result, trace.id())); + } catch (Exception ex) { + log.error("[setBizTag][解析 bizType 与 bizId 发生异常]", ex); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/filter/TraceFilter.java b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/filter/TraceFilter.java new file mode 100644 index 0000000..e18dcb1 --- /dev/null +++ b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/filter/TraceFilter.java @@ -0,0 +1,33 @@ +package com.win.framework.tracer.core.filter; + +import com.win.framework.common.util.monitor.TracerUtils; +import org.springframework.web.filter.OncePerRequestFilter; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * Trace 过滤器,打印 traceId 到 header 中返回 + * + * @author 芋道源码 + */ +public class TraceFilter extends OncePerRequestFilter { + + /** + * Header 名 - 链路追踪编号 + */ + private static final String HEADER_NAME_TRACE_ID = "trace-id"; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws IOException, ServletException { + // 设置响应 traceId + response.addHeader(HEADER_NAME_TRACE_ID, TracerUtils.getTraceId()); + // 继续过滤 + chain.doFilter(request, response); + } + +} diff --git a/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/util/TracerFrameworkUtils.java b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/util/TracerFrameworkUtils.java new file mode 100644 index 0000000..0a9d6bb --- /dev/null +++ b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/core/util/TracerFrameworkUtils.java @@ -0,0 +1,46 @@ +package com.win.framework.tracer.core.util; + +import io.opentracing.Span; +import io.opentracing.tag.Tags; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.HashMap; +import java.util.Map; + +/** + * 链路追踪 Util + * + * @author 芋道源码 + */ +public class TracerFrameworkUtils { + + /** + * 将异常记录到 Span 中,参考自 com.aliyuncs.utils.TraceUtils + * + * @param throwable 异常 + * @param span Span + */ + public static void onError(Throwable throwable, Span span) { + Tags.ERROR.set(span, Boolean.TRUE); + if (throwable != null) { + span.log(errorLogs(throwable)); + } + } + + private static Map errorLogs(Throwable throwable) { + Map errorLogs = new HashMap(10); + errorLogs.put("event", Tags.ERROR.getKey()); + errorLogs.put("error.object", throwable); + errorLogs.put("error.kind", throwable.getClass().getName()); + String message = throwable.getCause() != null ? throwable.getCause().getMessage() : throwable.getMessage(); + if (message != null) { + errorLogs.put("message", message); + } + StringWriter sw = new StringWriter(); + throwable.printStackTrace(new PrintWriter(sw)); + errorLogs.put("stack", sw.toString()); + return errorLogs; + } + +} diff --git a/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/package-info.java b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/package-info.java new file mode 100644 index 0000000..f068d71 --- /dev/null +++ b/win-framework/win-spring-boot-starter-monitor/src/main/java/com/win/framework/tracer/package-info.java @@ -0,0 +1,6 @@ +/** + * 使用 SkyWalking 组件,作为链路追踪、日志中心。 + * + * @author 芋道源码 + */ +package com.win.framework.tracer; diff --git a/win-framework/win-spring-boot-starter-monitor/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/win-framework/win-spring-boot-starter-monitor/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..ed9a6a5 --- /dev/null +++ b/win-framework/win-spring-boot-starter-monitor/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +com.win.framework.tracer.config.WinTracerAutoConfiguration +com.win.framework.tracer.config.WinMetricsAutoConfiguration diff --git a/win-framework/win-spring-boot-starter-monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md b/win-framework/win-spring-boot-starter-monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md new file mode 100644 index 0000000..47f328b --- /dev/null +++ b/win-framework/win-spring-boot-starter-monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-monitor/《芋道 Spring Boot 监控端点 Actuator 入门》.md b/win-framework/win-spring-boot-starter-monitor/《芋道 Spring Boot 监控端点 Actuator 入门》.md new file mode 100644 index 0000000..b36e7a0 --- /dev/null +++ b/win-framework/win-spring-boot-starter-monitor/《芋道 Spring Boot 监控端点 Actuator 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-monitor/《芋道 Spring Boot 链路追踪 SkyWalking 入门》.md b/win-framework/win-spring-boot-starter-monitor/《芋道 Spring Boot 链路追踪 SkyWalking 入门》.md new file mode 100644 index 0000000..83ce738 --- /dev/null +++ b/win-framework/win-spring-boot-starter-monitor/《芋道 Spring Boot 链路追踪 SkyWalking 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-mq/pom.xml b/win-framework/win-spring-boot-starter-mq/pom.xml new file mode 100644 index 0000000..3a716a2 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/pom.xml @@ -0,0 +1,43 @@ + + + + com.win + win-framework + ${revision} + + 4.0.0 + win-spring-boot-starter-mq + jar + + ${project.artifactId} + 消息队列,支持 Redis、RocketMQ、RabbitMQ、Kafka 四种 + https://github.com/YunaiV/ruoyi-vue-pro + + + + + com.win + win-spring-boot-starter-redis + + + + + org.springframework.kafka + spring-kafka + true + + + org.springframework.amqp + spring-rabbit + true + + + org.apache.rocketmq + rocketmq-spring-boot-starter + true + + + + diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/package-info.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/package-info.java new file mode 100644 index 0000000..a2f747a --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/package-info.java @@ -0,0 +1,4 @@ +/** + * 消息队列,支持 Redis、RocketMQ、RabbitMQ、Kafka 四种 + */ +package com.win.framework.mq; diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/rabbitmq/config/WinRabbitMQAutoConfiguration.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/rabbitmq/config/WinRabbitMQAutoConfiguration.java new file mode 100644 index 0000000..82dbd04 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/rabbitmq/config/WinRabbitMQAutoConfiguration.java @@ -0,0 +1,28 @@ +package com.win.framework.mq.rabbitmq.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; +import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Bean; + +/** + * RabbitMQ 消息队列配置类 + * + * @author 芋道源码 + */ +@AutoConfiguration +@Slf4j +@ConditionalOnClass(name = "org.springframework.amqp.rabbit.core.RabbitTemplate") +public class WinRabbitMQAutoConfiguration { + + /** + * Jackson2JsonMessageConverter Bean:使用 jackson 序列化消息 + */ + @Bean + public MessageConverter createMessageConverter() { + return new Jackson2JsonMessageConverter(); + } + +} diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/rabbitmq/core/package-info.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/rabbitmq/core/package-info.java new file mode 100644 index 0000000..8afad41 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/rabbitmq/core/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位符,无特殊逻辑 + */ +package com.win.framework.mq.rabbitmq.core; \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/rabbitmq/package-info.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/rabbitmq/package-info.java new file mode 100644 index 0000000..71b9105 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/rabbitmq/package-info.java @@ -0,0 +1,4 @@ +/** + * 消息队列,基于 RabbitMQ 提供 + */ +package com.win.framework.mq.rabbitmq; diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/config/WinRedisMQConsumerAutoConfiguration.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/config/WinRedisMQConsumerAutoConfiguration.java new file mode 100644 index 0000000..5aae1e3 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/config/WinRedisMQConsumerAutoConfiguration.java @@ -0,0 +1,151 @@ +package com.win.framework.mq.redis.config; + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.system.SystemUtil; +import com.win.framework.common.enums.DocumentEnum; +import com.win.framework.mq.redis.core.RedisMQTemplate; +import com.win.framework.mq.redis.core.job.RedisPendingMessageResendJob; +import com.win.framework.mq.redis.core.pubsub.AbstractRedisChannelMessageListener; +import com.win.framework.mq.redis.core.stream.AbstractRedisStreamMessageListener; +import com.win.framework.redis.config.WinRedisAutoConfiguration; +import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.context.annotation.Bean; +import org.springframework.data.redis.connection.RedisServerCommands; +import org.springframework.data.redis.connection.stream.Consumer; +import org.springframework.data.redis.connection.stream.ObjectRecord; +import org.springframework.data.redis.connection.stream.ReadOffset; +import org.springframework.data.redis.connection.stream.StreamOffset; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.listener.ChannelTopic; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; +import org.springframework.data.redis.stream.StreamMessageListenerContainer; +import org.springframework.scheduling.annotation.EnableScheduling; + +import java.util.List; +import java.util.Properties; + +/** + * Redis 消息队列 Consumer 配置类 + * + * @author 芋道源码 + */ +@Slf4j +@EnableScheduling // 启用定时任务,用于 RedisPendingMessageResendJob 重发消息 +@AutoConfiguration(after = WinRedisAutoConfiguration.class) +public class WinRedisMQConsumerAutoConfiguration { + + /** + * 创建 Redis Pub/Sub 广播消费的容器 + */ + @Bean + @ConditionalOnBean(AbstractRedisChannelMessageListener.class) // 只有 AbstractChannelMessageListener 存在的时候,才需要注册 Redis pubsub 监听 + public RedisMessageListenerContainer redisMessageListenerContainer( + RedisMQTemplate redisMQTemplate, List> listeners) { + // 创建 RedisMessageListenerContainer 对象 + RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + // 设置 RedisConnection 工厂。 + container.setConnectionFactory(redisMQTemplate.getRedisTemplate().getRequiredConnectionFactory()); + // 添加监听器 + listeners.forEach(listener -> { + listener.setRedisMQTemplate(redisMQTemplate); + container.addMessageListener(listener, new ChannelTopic(listener.getChannel())); + log.info("[redisMessageListenerContainer][注册 Channel({}) 对应的监听器({})]", + listener.getChannel(), listener.getClass().getName()); + }); + return container; + } + + /** + * 创建 Redis Stream 重新消费的任务 + */ + @Bean + @ConditionalOnBean(AbstractRedisStreamMessageListener.class) // 只有 AbstractStreamMessageListener 存在的时候,才需要注册 Redis pubsub 监听 + public RedisPendingMessageResendJob redisPendingMessageResendJob(List> listeners, + RedisMQTemplate redisTemplate, + @Value("${spring.application.name}") String groupName, + RedissonClient redissonClient) { + return new RedisPendingMessageResendJob(listeners, redisTemplate, groupName, redissonClient); + } + + /** + * 创建 Redis Stream 集群消费的容器 + * + * 基础知识:Redis Stream 的 xreadgroup 命令 + */ + @Bean(initMethod = "start", destroyMethod = "stop") + @ConditionalOnBean(AbstractRedisStreamMessageListener.class) // 只有 AbstractStreamMessageListener 存在的时候,才需要注册 Redis pubsub 监听 + public StreamMessageListenerContainer> redisStreamMessageListenerContainer( + RedisMQTemplate redisMQTemplate, List> listeners) { + RedisTemplate redisTemplate = redisMQTemplate.getRedisTemplate(); + checkRedisVersion(redisTemplate); + // 第一步,创建 StreamMessageListenerContainer 容器 + // 创建 options 配置 + StreamMessageListenerContainer.StreamMessageListenerContainerOptions> containerOptions = + StreamMessageListenerContainer.StreamMessageListenerContainerOptions.builder() + .batchSize(10) // 一次性最多拉取多少条消息 + .targetType(String.class) // 目标类型。统一使用 String,通过自己封装的 AbstractStreamMessageListener 去反序列化 + .build(); + // 创建 container 对象 + StreamMessageListenerContainer> container = + StreamMessageListenerContainer.create(redisMQTemplate.getRedisTemplate().getRequiredConnectionFactory(), containerOptions); + + // 第二步,注册监听器,消费对应的 Stream 主题 + String consumerName = buildConsumerName(); + listeners.parallelStream().forEach(listener -> { + log.info("[redisStreamMessageListenerContainer][开始注册 StreamKey({}) 对应的监听器({})]", + listener.getStreamKey(), listener.getClass().getName()); + // 创建 listener 对应的消费者分组 + try { + redisTemplate.opsForStream().createGroup(listener.getStreamKey(), listener.getGroup()); + } catch (Exception ignore) { + } + // 设置 listener 对应的 redisTemplate + listener.setRedisMQTemplate(redisMQTemplate); + // 创建 Consumer 对象 + Consumer consumer = Consumer.from(listener.getGroup(), consumerName); + // 设置 Consumer 消费进度,以最小消费进度为准 + StreamOffset streamOffset = StreamOffset.create(listener.getStreamKey(), ReadOffset.lastConsumed()); + // 设置 Consumer 监听 + StreamMessageListenerContainer.StreamReadRequestBuilder builder = StreamMessageListenerContainer.StreamReadRequest + .builder(streamOffset).consumer(consumer) + .autoAcknowledge(false) // 不自动 ack + .cancelOnError(throwable -> false); // 默认配置,发生异常就取消消费,显然不符合预期;因此,我们设置为 false + container.register(builder.build(), listener); + log.info("[redisStreamMessageListenerContainer][完成注册 StreamKey({}) 对应的监听器({})]", + listener.getStreamKey(), listener.getClass().getName()); + }); + return container; + } + + /** + * 构建消费者名字,使用本地 IP + 进程编号的方式。 + * 参考自 RocketMQ clientId 的实现 + * + * @return 消费者名字 + */ + private static String buildConsumerName() { + return String.format("%s@%d", SystemUtil.getHostInfo().getAddress(), SystemUtil.getCurrentPID()); + } + + /** + * 校验 Redis 版本号,是否满足最低的版本号要求! + */ + private static void checkRedisVersion(RedisTemplate redisTemplate) { + // 获得 Redis 版本 + Properties info = redisTemplate.execute((RedisCallback) RedisServerCommands::info); + String version = MapUtil.getStr(info, "redis_version"); + // 校验最低版本必须大于等于 5.0.0 + int majorVersion = Integer.parseInt(StrUtil.subBefore(version, '.', false)); + if (majorVersion < 5) { + throw new IllegalStateException(StrUtil.format("您当前的 Redis 版本为 {},小于最低要求的 5.0.0 版本!" + + "请参考 {} 文档进行安装。", version, DocumentEnum.REDIS_INSTALL.getUrl())); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/config/WinRedisMQProducerAutoConfiguration.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/config/WinRedisMQProducerAutoConfiguration.java new file mode 100644 index 0000000..9b29cc5 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/config/WinRedisMQProducerAutoConfiguration.java @@ -0,0 +1,31 @@ +package com.win.framework.mq.redis.config; + +import com.win.framework.mq.redis.core.RedisMQTemplate; +import com.win.framework.mq.redis.core.interceptor.RedisMessageInterceptor; +import com.win.framework.redis.config.WinRedisAutoConfiguration; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.data.redis.core.StringRedisTemplate; + +import java.util.List; + +/** + * Redis 消息队列 Producer 配置类 + * + * @author 芋道源码 + */ +@Slf4j +@AutoConfiguration(after = WinRedisAutoConfiguration.class) +public class WinRedisMQProducerAutoConfiguration { + + @Bean + public RedisMQTemplate redisMQTemplate(StringRedisTemplate redisTemplate, + List interceptors) { + RedisMQTemplate redisMQTemplate = new RedisMQTemplate(redisTemplate); + // 添加拦截器 + interceptors.forEach(redisMQTemplate::addInterceptor); + return redisMQTemplate; + } + +} diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/RedisMQTemplate.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/RedisMQTemplate.java new file mode 100644 index 0000000..dd4aa3a --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/RedisMQTemplate.java @@ -0,0 +1,87 @@ +package com.win.framework.mq.redis.core; + +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.mq.redis.core.interceptor.RedisMessageInterceptor; +import com.win.framework.mq.redis.core.message.AbstractRedisMessage; +import com.win.framework.mq.redis.core.pubsub.AbstractRedisChannelMessage; +import com.win.framework.mq.redis.core.stream.AbstractRedisStreamMessage; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.data.redis.connection.stream.RecordId; +import org.springframework.data.redis.connection.stream.StreamRecords; +import org.springframework.data.redis.core.RedisTemplate; + +import java.util.ArrayList; +import java.util.List; + +/** + * Redis MQ 操作模板类 + * + * @author 芋道源码 + */ +@AllArgsConstructor +public class RedisMQTemplate { + + @Getter + private final RedisTemplate redisTemplate; + /** + * 拦截器数组 + */ + @Getter + private final List interceptors = new ArrayList<>(); + + /** + * 发送 Redis 消息,基于 Redis pub/sub 实现 + * + * @param message 消息 + */ + public void send(T message) { + try { + sendMessageBefore(message); + // 发送消息 + redisTemplate.convertAndSend(message.getChannel(), JsonUtils.toJsonString(message)); + } finally { + sendMessageAfter(message); + } + } + + /** + * 发送 Redis 消息,基于 Redis Stream 实现 + * + * @param message 消息 + * @return 消息记录的编号对象 + */ + public RecordId send(T message) { + try { + sendMessageBefore(message); + // 发送消息 + return redisTemplate.opsForStream().add(StreamRecords.newRecord() + .ofObject(JsonUtils.toJsonString(message)) // 设置内容 + .withStreamKey(message.getStreamKey())); // 设置 stream key + } finally { + sendMessageAfter(message); + } + } + + /** + * 添加拦截器 + * + * @param interceptor 拦截器 + */ + public void addInterceptor(RedisMessageInterceptor interceptor) { + interceptors.add(interceptor); + } + + private void sendMessageBefore(AbstractRedisMessage message) { + // 正序 + interceptors.forEach(interceptor -> interceptor.sendMessageBefore(message)); + } + + private void sendMessageAfter(AbstractRedisMessage message) { + // 倒序 + for (int i = interceptors.size() - 1; i >= 0; i--) { + interceptors.get(i).sendMessageAfter(message); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/interceptor/RedisMessageInterceptor.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/interceptor/RedisMessageInterceptor.java new file mode 100644 index 0000000..8efb9f2 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/interceptor/RedisMessageInterceptor.java @@ -0,0 +1,26 @@ +package com.win.framework.mq.redis.core.interceptor; + +import com.win.framework.mq.redis.core.message.AbstractRedisMessage; + +/** + * {@link AbstractRedisMessage} 消息拦截器 + * 通过拦截器,作为插件机制,实现拓展。 + * 例如说,多租户场景下的 MQ 消息处理 + * + * @author 芋道源码 + */ +public interface RedisMessageInterceptor { + + default void sendMessageBefore(AbstractRedisMessage message) { + } + + default void sendMessageAfter(AbstractRedisMessage message) { + } + + default void consumeMessageBefore(AbstractRedisMessage message) { + } + + default void consumeMessageAfter(AbstractRedisMessage message) { + } + +} diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/job/RedisPendingMessageResendJob.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/job/RedisPendingMessageResendJob.java new file mode 100644 index 0000000..1c48c60 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/job/RedisPendingMessageResendJob.java @@ -0,0 +1,100 @@ +package com.win.framework.mq.redis.core.job; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.mq.redis.core.RedisMQTemplate; +import com.win.framework.mq.redis.core.stream.AbstractRedisStreamMessageListener; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.data.domain.Range; +import org.springframework.data.redis.connection.stream.*; +import org.springframework.data.redis.core.StreamOperations; +import org.springframework.scheduling.annotation.Scheduled; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * 这个任务用于处理,crash 之后的消费者未消费完的消息 + */ +@Slf4j +@AllArgsConstructor +public class RedisPendingMessageResendJob { + + private static final String LOCK_KEY = "redis:pending:msg:lock"; + + /** + * 消息超时时间,默认 5 分钟 + * + * 1. 超时的消息才会被重新投递 + * 2. 由于定时任务 1 分钟一次,消息超时后不会被立即重投,极端情况下消息5分钟过期后,再等 1 分钟才会被扫瞄到 + */ + private static final int EXPIRE_TIME = 5 * 60; + + private final List> listeners; + private final RedisMQTemplate redisTemplate; + private final String groupName; + private final RedissonClient redissonClient; + + /** + * 一分钟执行一次,这里选择每分钟的35秒执行,是为了避免整点任务过多的问题 + */ + @Scheduled(cron = "35 * * * * ?") + public void messageResend() { + RLock lock = redissonClient.getLock(LOCK_KEY); + // 尝试加锁 + if (lock.tryLock()) { + try { + execute(); + } catch (Exception ex) { + log.error("[messageResend][执行异常]", ex); + } finally { + lock.unlock(); + } + } + } + + /** + * 执行清理逻辑 + * + * @see 讨论 + */ + private void execute() { + StreamOperations ops = redisTemplate.getRedisTemplate().opsForStream(); + listeners.forEach(listener -> { + PendingMessagesSummary pendingMessagesSummary = Objects.requireNonNull(ops.pending(listener.getStreamKey(), groupName)); + // 每个消费者的 pending 队列消息数量 + Map pendingMessagesPerConsumer = pendingMessagesSummary.getPendingMessagesPerConsumer(); + pendingMessagesPerConsumer.forEach((consumerName, pendingMessageCount) -> { + log.info("[processPendingMessage][消费者({}) 消息数量({})]", consumerName, pendingMessageCount); + // 每个消费者的 pending消息的详情信息 + PendingMessages pendingMessages = ops.pending(listener.getStreamKey(), Consumer.from(groupName, consumerName), Range.unbounded(), pendingMessageCount); + if (pendingMessages.isEmpty()) { + return; + } + pendingMessages.forEach(pendingMessage -> { + // 获取消息上一次传递到 consumer 的时间, + long lastDelivery = pendingMessage.getElapsedTimeSinceLastDelivery().getSeconds(); + if (lastDelivery < EXPIRE_TIME){ + return; + } + // 获取指定 id 的消息体 + List> records = ops.range(listener.getStreamKey(), + Range.of(Range.Bound.inclusive(pendingMessage.getIdAsString()), Range.Bound.inclusive(pendingMessage.getIdAsString()))); + if (CollUtil.isEmpty(records)) { + return; + } + // 重新投递消息 + redisTemplate.getRedisTemplate().opsForStream().add(StreamRecords.newRecord() + .ofObject(records.get(0).getValue()) // 设置内容 + .withStreamKey(listener.getStreamKey())); + // ack 消息消费完成 + redisTemplate.getRedisTemplate().opsForStream().acknowledge(groupName, records.get(0)); + log.info("[processPendingMessage][消息({})重新投递成功]", records.get(0).getId()); + }); + }); + }); + } +} diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/message/AbstractRedisMessage.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/message/AbstractRedisMessage.java new file mode 100644 index 0000000..3ad12ef --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/message/AbstractRedisMessage.java @@ -0,0 +1,29 @@ +package com.win.framework.mq.redis.core.message; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + +/** + * Redis 消息抽象基类 + * + * @author 芋道源码 + */ +@Data +public abstract class AbstractRedisMessage { + + /** + * 头 + */ + private Map headers = new HashMap<>(); + + public String getHeader(String key) { + return headers.get(key); + } + + public void addHeader(String key, String value) { + headers.put(key, value); + } + +} diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/pubsub/AbstractRedisChannelMessage.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/pubsub/AbstractRedisChannelMessage.java new file mode 100644 index 0000000..742ac7e --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/pubsub/AbstractRedisChannelMessage.java @@ -0,0 +1,23 @@ +package com.win.framework.mq.redis.core.pubsub; + +import com.win.framework.mq.redis.core.message.AbstractRedisMessage; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * Redis Channel Message 抽象类 + * + * @author 芋道源码 + */ +public abstract class AbstractRedisChannelMessage extends AbstractRedisMessage { + + /** + * 获得 Redis Channel,默认使用类名 + * + * @return Channel + */ + @JsonIgnore // 避免序列化。原因是,Redis 发布 Channel 消息的时候,已经会指定。 + public String getChannel() { + return getClass().getSimpleName(); + } + +} diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/pubsub/AbstractRedisChannelMessageListener.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/pubsub/AbstractRedisChannelMessageListener.java new file mode 100644 index 0000000..17ccd5c --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/pubsub/AbstractRedisChannelMessageListener.java @@ -0,0 +1,103 @@ +package com.win.framework.mq.redis.core.pubsub; + +import cn.hutool.core.util.TypeUtil; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.mq.redis.core.RedisMQTemplate; +import com.win.framework.mq.redis.core.interceptor.RedisMessageInterceptor; +import com.win.framework.mq.redis.core.message.AbstractRedisMessage; +import lombok.Setter; +import lombok.SneakyThrows; +import org.springframework.data.redis.connection.Message; +import org.springframework.data.redis.connection.MessageListener; + +import java.lang.reflect.Type; +import java.util.List; + +/** + * Redis Pub/Sub 监听器抽象类,用于实现广播消费 + * + * @param 消息类型。一定要填写噢,不然会报错 + * + * @author 芋道源码 + */ +public abstract class AbstractRedisChannelMessageListener implements MessageListener { + + /** + * 消息类型 + */ + private final Class messageType; + /** + * Redis Channel + */ + private final String channel; + /** + * RedisMQTemplate + */ + @Setter + private RedisMQTemplate redisMQTemplate; + + @SneakyThrows + protected AbstractRedisChannelMessageListener() { + this.messageType = getMessageClass(); + this.channel = messageType.getDeclaredConstructor().newInstance().getChannel(); + } + + /** + * 获得 Sub 订阅的 Redis Channel 通道 + * + * @return channel + */ + public final String getChannel() { + return channel; + } + + @Override + public final void onMessage(Message message, byte[] bytes) { + T messageObj = JsonUtils.parseObject(message.getBody(), messageType); + try { + consumeMessageBefore(messageObj); + // 消费消息 + this.onMessage(messageObj); + } finally { + consumeMessageAfter(messageObj); + } + } + + /** + * 处理消息 + * + * @param message 消息 + */ + public abstract void onMessage(T message); + + /** + * 通过解析类上的泛型,获得消息类型 + * + * @return 消息类型 + */ + @SuppressWarnings("unchecked") + private Class getMessageClass() { + Type type = TypeUtil.getTypeArgument(getClass(), 0); + if (type == null) { + throw new IllegalStateException(String.format("类型(%s) 需要设置消息类型", getClass().getName())); + } + return (Class) type; + } + + private void consumeMessageBefore(AbstractRedisMessage message) { + assert redisMQTemplate != null; + List interceptors = redisMQTemplate.getInterceptors(); + // 正序 + interceptors.forEach(interceptor -> interceptor.consumeMessageBefore(message)); + } + + private void consumeMessageAfter(AbstractRedisMessage message) { + assert redisMQTemplate != null; + List interceptors = redisMQTemplate.getInterceptors(); + // 倒序 + for (int i = interceptors.size() - 1; i >= 0; i--) { + interceptors.get(i).consumeMessageAfter(message); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/stream/AbstractRedisStreamMessage.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/stream/AbstractRedisStreamMessage.java new file mode 100644 index 0000000..c4e7773 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/stream/AbstractRedisStreamMessage.java @@ -0,0 +1,23 @@ +package com.win.framework.mq.redis.core.stream; + +import com.win.framework.mq.redis.core.message.AbstractRedisMessage; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * Redis Stream Message 抽象类 + * + * @author 芋道源码 + */ +public abstract class AbstractRedisStreamMessage extends AbstractRedisMessage { + + /** + * 获得 Redis Stream Key,默认使用类名 + * + * @return Channel + */ + @JsonIgnore // 避免序列化 + public String getStreamKey() { + return getClass().getSimpleName(); + } + +} diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/stream/AbstractRedisStreamMessageListener.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/stream/AbstractRedisStreamMessageListener.java new file mode 100644 index 0000000..8330fc3 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/core/stream/AbstractRedisStreamMessageListener.java @@ -0,0 +1,113 @@ +package com.win.framework.mq.redis.core.stream; + +import cn.hutool.core.util.TypeUtil; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.mq.redis.core.RedisMQTemplate; +import com.win.framework.mq.redis.core.interceptor.RedisMessageInterceptor; +import com.win.framework.mq.redis.core.message.AbstractRedisMessage; +import lombok.Getter; +import lombok.Setter; +import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.connection.stream.ObjectRecord; +import org.springframework.data.redis.stream.StreamListener; + +import java.lang.reflect.Type; +import java.util.List; + +/** + * Redis Stream 监听器抽象类,用于实现集群消费 + * + * @param 消息类型。一定要填写噢,不然会报错 + * + * @author 芋道源码 + */ +public abstract class AbstractRedisStreamMessageListener + implements StreamListener> { + + /** + * 消息类型 + */ + private final Class messageType; + /** + * Redis Channel + */ + @Getter + private final String streamKey; + + /** + * Redis 消费者分组,默认使用 spring.application.name 名字 + */ + @Value("${spring.application.name}") + @Getter + private String group; + /** + * RedisMQTemplate + */ + @Setter + private RedisMQTemplate redisMQTemplate; + + @SneakyThrows + protected AbstractRedisStreamMessageListener() { + this.messageType = getMessageClass(); + this.streamKey = messageType.getDeclaredConstructor().newInstance().getStreamKey(); + } + + @Override + public void onMessage(ObjectRecord message) { + // 消费消息 + T messageObj = JsonUtils.parseObject(message.getValue(), messageType); + try { + consumeMessageBefore(messageObj); + // 消费消息 + this.onMessage(messageObj); + // ack 消息消费完成 + redisMQTemplate.getRedisTemplate().opsForStream().acknowledge(group, message); + // TODO 芋艿:需要额外考虑以下几个点: + // 1. 处理异常的情况 + // 2. 发送日志;以及事务的结合 + // 3. 消费日志;以及通用的幂等性 + // 4. 消费失败的重试,https://zhuanlan.zhihu.com/p/60501638 + } finally { + consumeMessageAfter(messageObj); + } + } + + /** + * 处理消息 + * + * @param message 消息 + */ + public abstract void onMessage(T message); + + /** + * 通过解析类上的泛型,获得消息类型 + * + * @return 消息类型 + */ + @SuppressWarnings("unchecked") + private Class getMessageClass() { + Type type = TypeUtil.getTypeArgument(getClass(), 0); + if (type == null) { + throw new IllegalStateException(String.format("类型(%s) 需要设置消息类型", getClass().getName())); + } + return (Class) type; + } + + private void consumeMessageBefore(AbstractRedisMessage message) { + assert redisMQTemplate != null; + List interceptors = redisMQTemplate.getInterceptors(); + // 正序 + interceptors.forEach(interceptor -> interceptor.consumeMessageBefore(message)); + } + + private void consumeMessageAfter(AbstractRedisMessage message) { + assert redisMQTemplate != null; + List interceptors = redisMQTemplate.getInterceptors(); + // 倒序 + for (int i = interceptors.size() - 1; i >= 0; i--) { + interceptors.get(i).consumeMessageAfter(message); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/package-info.java b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/package-info.java new file mode 100644 index 0000000..3fef649 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/java/com/win/framework/mq/redis/package-info.java @@ -0,0 +1,6 @@ +/** + * 消息队列,基于 Redis 提供: + * 1. 基于 Pub/Sub 实现广播消费 + * 2. 基于 Stream 实现集群消费 + */ +package com.win.framework.mq.redis; diff --git a/win-framework/win-spring-boot-starter-mq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/win-framework/win-spring-boot-starter-mq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..e1952c7 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,3 @@ +com.win.framework.mq.redis.config.WinRedisMQProducerAutoConfiguration +com.win.framework.mq.redis.config.WinRedisMQConsumerAutoConfiguration +com.win.framework.mq.rabbitmq.config.WinRabbitMQAutoConfiguration diff --git a/win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 事件机制 Event 入门》.md b/win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 事件机制 Event 入门》.md new file mode 100644 index 0000000..cd15a56 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 事件机制 Event 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 Kafka 入门》.md b/win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 Kafka 入门》.md new file mode 100644 index 0000000..df3ba15 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 Kafka 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 RabbitMQ 入门》.md b/win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 RabbitMQ 入门》.md new file mode 100644 index 0000000..09c7e76 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 RabbitMQ 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 RocketMQ 入门》.md b/win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 RocketMQ 入门》.md new file mode 100644 index 0000000..cd15a56 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 RocketMQ 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-mybatis/pom.xml b/win-framework/win-spring-boot-starter-mybatis/pom.xml new file mode 100644 index 0000000..a0afb68 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/pom.xml @@ -0,0 +1,91 @@ + + + + com.win + win-framework + ${revision} + + 4.0.0 + win-spring-boot-starter-mybatis + jar + + ${project.artifactId} + 数据库连接池、多数据源、事务、MyBatis 拓展 + https://github.com/YunaiV/ruoyi-vue-pro + + + + com.win + win-common + + + + + com.win + win-spring-boot-starter-web + provided + + + + + com.mysql + mysql-connector-j + + + com.oracle.database.jdbc + ojdbc8 + true + + + org.postgresql + postgresql + true + + + com.microsoft.sqlserver + mssql-jdbc + true + + + com.dameng + DmJdbcDriver18 + true + + + + com.alibaba + druid-spring-boot-3-starter + + + com.baomidou + mybatis-plus-spring-boot3-starter + + + com.baomidou + dynamic-datasource-spring-boot3-starter + + + org.springframework.boot + spring-boot-starter-undertow + + + + + + com.github.yulichang + mybatis-plus-join-boot-starter + + + + com.fhs-opensource + easy-trans-spring-boot-starter + + + com.fhs-opensource + easy-trans-mybatis-plus-extend + + + + diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/config/WinDataSourceAutoConfiguration.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/config/WinDataSourceAutoConfiguration.java new file mode 100644 index 0000000..a4d99ff --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/config/WinDataSourceAutoConfiguration.java @@ -0,0 +1,40 @@ +package com.win.framework.datasource.config; + +import com.win.framework.datasource.core.filter.DruidAdRemoveFilter; +import com.alibaba.druid.spring.boot3.autoconfigure.properties.DruidStatProperties; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * 数据库配置类 + * + * @author 芋道源码 + */ +@AutoConfiguration +@EnableTransactionManagement(proxyTargetClass = true) // 启动事务管理 +@EnableConfigurationProperties(DruidStatProperties.class) +public class WinDataSourceAutoConfiguration { + + /** + * 创建 DruidAdRemoveFilter 过滤器,过滤 common.js 的广告 + */ + @Bean + @ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true") + public FilterRegistrationBean druidAdRemoveFilterFilter(DruidStatProperties properties) { + // 获取 druid web 监控页面的参数 + DruidStatProperties.StatViewServlet config = properties.getStatViewServlet(); + // 提取 common.js 的配置路径 + String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*"; + String commonJsPattern = pattern.replaceAll("\\*", "js/common.js"); + // 创建 DruidAdRemoveFilter Bean + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(new DruidAdRemoveFilter()); + registrationBean.addUrlPatterns(commonJsPattern); + return registrationBean; + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/core/enums/DataSourceEnum.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/core/enums/DataSourceEnum.java new file mode 100644 index 0000000..eb1aa75 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/core/enums/DataSourceEnum.java @@ -0,0 +1,22 @@ +package com.win.framework.datasource.core.enums; + +/** + * 对应于多数据源中不同数据源配置 + * + * 通过在方法上,使用 {@link com.baomidou.dynamic.datasource.annotation.DS} 注解,设置使用的数据源。 + * 注意,默认是 {@link #MASTER} 数据源 + * + * 对应官方文档为 http://dynamic-datasource.com/guide/customize/Annotation.html + */ +public interface DataSourceEnum { + + /** + * 主库,推荐使用 {@link com.baomidou.dynamic.datasource.annotation.Master} 注解 + */ + String MASTER = "master"; + /** + * 从库,推荐使用 {@link com.baomidou.dynamic.datasource.annotation.Slave} 注解 + */ + String SLAVE = "slave"; + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/core/filter/DruidAdRemoveFilter.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/core/filter/DruidAdRemoveFilter.java new file mode 100644 index 0000000..d49f008 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/core/filter/DruidAdRemoveFilter.java @@ -0,0 +1,38 @@ +package com.win.framework.datasource.core.filter; + +import com.alibaba.druid.util.Utils; +import org.springframework.web.filter.OncePerRequestFilter; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * Druid 底部广告过滤器 + * + * @author 芋道源码 + */ +public class DruidAdRemoveFilter extends OncePerRequestFilter { + + /** + * common.js 的路径 + */ + private static final String COMMON_JS_ILE_PATH = "support/http/resources/js/common.js"; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException { + chain.doFilter(request, response); + // 重置缓冲区,响应头不会被重置 + response.resetBuffer(); + // 获取 common.js + String text = Utils.readFromResource(COMMON_JS_ILE_PATH); + // 正则替换 banner, 除去底部的广告信息 + text = text.replaceAll("
    ", ""); + text = text.replaceAll("powered.*?shrek.wang", ""); + response.getWriter().write(text); + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/package-info.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/package-info.java new file mode 100644 index 0000000..400098e --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/package-info.java @@ -0,0 +1,5 @@ +/** + * 数据库连接池,采用 Druid + * 多数据源,采用爆米花 + */ +package com.win.framework.datasource; diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java new file mode 100644 index 0000000..864901a --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java @@ -0,0 +1,108 @@ +package com.win.framework.mybatis.config; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.util.collection.SetUtils; +import com.win.framework.mybatis.core.enums.SqlConstants; +import com.win.framework.mybatis.core.util.JdbcUtils; +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.annotation.IdType; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.env.EnvironmentPostProcessor; +import org.springframework.core.env.ConfigurableEnvironment; + +import java.util.Set; + +/** + * 当 IdType 为 {@link IdType#NONE} 时,根据 PRIMARY 数据源所使用的数据库,自动设置 + * + * @author 芋道源码 + */ +@Slf4j +public class IdTypeEnvironmentPostProcessor implements EnvironmentPostProcessor { + + private static final String ID_TYPE_KEY = "mybatis-plus.global-config.db-config.id-type"; + + private static final String DATASOURCE_DYNAMIC_KEY = "spring.datasource.dynamic"; + + private static final String QUARTZ_JOB_STORE_DRIVER_KEY = "spring.quartz.properties.org.quartz.jobStore.driverDelegateClass"; + + private static final Set INPUT_ID_TYPES = SetUtils.asSet(DbType.ORACLE, DbType.ORACLE_12C, + DbType.POSTGRE_SQL, DbType.KINGBASE_ES, DbType.DB2, DbType.H2); + + @Override + public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { + // 如果获取不到 DbType,则不进行处理 + DbType dbType = getDbType(environment); + if (dbType == null) { + return; + } + + // 设置 Quartz JobStore 对应的 Driver + // TODO 芋艿:暂时没有找到特别合适的地方,先放在这里 + setJobStoreDriverIfPresent(environment, dbType); + + // 初始化 SQL 静态变量 + SqlConstants.init(dbType); + + // 如果非 NONE,则不进行处理 + IdType idType = getIdType(environment); + if (idType != IdType.NONE) { + return; + } + // 情况一,用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库 + if (INPUT_ID_TYPES.contains(dbType)) { + setIdType(environment, IdType.INPUT); + return; + } + // 情况二,自增 ID,适合 MySQL 等直接自增的数据库 + setIdType(environment, IdType.AUTO); + } + + public IdType getIdType(ConfigurableEnvironment environment) { + return environment.getProperty(ID_TYPE_KEY, IdType.class); + } + + public void setIdType(ConfigurableEnvironment environment, IdType idType) { + environment.getSystemProperties().put(ID_TYPE_KEY, idType); + log.info("[setIdType][修改 MyBatis Plus 的 idType 为({})]", idType); + } + + public void setJobStoreDriverIfPresent(ConfigurableEnvironment environment, DbType dbType) { + String driverClass = environment.getProperty(QUARTZ_JOB_STORE_DRIVER_KEY); + if (StrUtil.isNotEmpty(driverClass)) { + return; + } + // 根据 dbType 类型,获取对应的 driverClass + switch (dbType) { + case POSTGRE_SQL: + driverClass = "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate"; + break; + case ORACLE: + case ORACLE_12C: + driverClass = "org.quartz.impl.jdbcjobstore.oracle.OracleDelegate"; + break; + case SQL_SERVER: + case SQL_SERVER2005: + driverClass = "org.quartz.impl.jdbcjobstore.MSSQLDelegate"; + break; + } + // 设置 driverClass 变量 + if (StrUtil.isNotEmpty(driverClass)) { + environment.getSystemProperties().put(QUARTZ_JOB_STORE_DRIVER_KEY, driverClass); + } + } + + public static DbType getDbType(ConfigurableEnvironment environment) { + String primary = environment.getProperty(DATASOURCE_DYNAMIC_KEY + "." + "primary"); + if (StrUtil.isEmpty(primary)) { + return null; + } + String url = environment.getProperty(DATASOURCE_DYNAMIC_KEY + ".datasource." + primary + ".url"); + if (StrUtil.isEmpty(url)) { + return null; + } + return JdbcUtils.getDbType(url); + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/config/WinMybatisAutoConfiguration.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/config/WinMybatisAutoConfiguration.java new file mode 100644 index 0000000..19f8857 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/config/WinMybatisAutoConfiguration.java @@ -0,0 +1,64 @@ +package com.win.framework.mybatis.config; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.mybatis.core.handler.DefaultDBFieldHandler; +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator; +import com.baomidou.mybatisplus.extension.incrementer.*; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.apache.ibatis.annotations.Mapper; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.core.env.ConfigurableEnvironment; + +/** + * MyBaits 配置类 + * + * @author 芋道源码 + */ +@AutoConfiguration(before = MybatisPlusAutoConfiguration.class) // 目的:先于 MyBatis Plus 自动配置,避免 @MapperScan 可能扫描不到 Mapper 打印 warn 日志 +@MapperScan(value = "${win.info.base-package}", annotationClass = Mapper.class, + lazyInitialization = "${mybatis.lazy-initialization:false}") // Mapper 懒加载,目前仅用于单元测试 +public class WinMybatisAutoConfiguration { + + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); + mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 分页插件 + return mybatisPlusInterceptor; + } + + @Bean + public MetaObjectHandler defaultMetaObjectHandler(){ + return new DefaultDBFieldHandler(); // 自动填充参数类 + } + + @Bean + @ConditionalOnProperty(prefix = "mybatis-plus.global-config.db-config", name = "id-type", havingValue = "INPUT") + public IKeyGenerator keyGenerator(ConfigurableEnvironment environment) { + DbType dbType = IdTypeEnvironmentPostProcessor.getDbType(environment); + if (dbType != null) { + switch (dbType) { + case POSTGRE_SQL: + return new PostgreKeyGenerator(); + case ORACLE: + case ORACLE_12C: + return new OracleKeyGenerator(); + case H2: + return new H2KeyGenerator(); + case KINGBASE_ES: + return new KingbaseKeyGenerator(); + case DM: + return new DmKeyGenerator(); + } + } + // 找不到合适的 IKeyGenerator 实现类 + throw new IllegalArgumentException(StrUtil.format("DbType{} 找不到合适的 IKeyGenerator 实现类", dbType)); + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/dataobject/BaseDO.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/dataobject/BaseDO.java new file mode 100644 index 0000000..fce6fc0 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/dataobject/BaseDO.java @@ -0,0 +1,56 @@ +package com.win.framework.mybatis.core.dataobject; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fhs.core.trans.vo.TransPojo; +import lombok.Data; +import org.apache.ibatis.type.JdbcType; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 基础实体对象 + * + * 为什么实现 {@link TransPojo} 接口? + * 因为使用 Easy-Trans TransType.SIMPLE 模式,集成 MyBatis Plus 查询 + * + * @author 芋道源码 + */ +@Data +@JsonIgnoreProperties(value = "transMap") // 由于 Easy-Trans 会添加 transMap 属性,避免 Jackson 在 Spring Cache 反序列化报错 +public abstract class BaseDO implements Serializable, TransPojo { + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + /** + * 最后更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + /** + * 创建者,目前使用 SysUser 的 id 编号 + * + * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 + */ + @TableField(fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR) + private String creator; + /** + * 更新者,目前使用 SysUser 的 id 编号 + * + * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 + */ + @TableField(fill = FieldFill.INSERT_UPDATE, jdbcType = JdbcType.VARCHAR) + private String updater; + /** + * 是否删除 + */ + @TableLogic + private Boolean deleted; + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/enums/SqlConstants.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/enums/SqlConstants.java new file mode 100644 index 0000000..d1824dd --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/enums/SqlConstants.java @@ -0,0 +1,21 @@ +package com.win.framework.mybatis.core.enums; + +import com.baomidou.mybatisplus.annotation.DbType; + +/** + * SQL相关常量类 + * + * @author 芋道源码 + */ +public class SqlConstants { + + /** + * 数据库的类型 + */ + public static DbType DB_TYPE; + + public static void init(DbType dbType) { + DB_TYPE = dbType; + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/handler/DefaultDBFieldHandler.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/handler/DefaultDBFieldHandler.java new file mode 100644 index 0000000..d97801c --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/handler/DefaultDBFieldHandler.java @@ -0,0 +1,62 @@ +package com.win.framework.mybatis.core.handler; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.framework.web.core.util.WebFrameworkUtils; +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import org.apache.ibatis.reflection.MetaObject; + +import java.time.LocalDateTime; +import java.util.Objects; + +/** + * 通用参数填充实现类 + * + * 如果没有显式的对通用参数进行赋值,这里会对通用参数进行填充、赋值 + * + * @author hexiaowu + */ +public class DefaultDBFieldHandler implements MetaObjectHandler { + + @Override + public void insertFill(MetaObject metaObject) { + if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof BaseDO) { + BaseDO baseDO = (BaseDO) metaObject.getOriginalObject(); + + LocalDateTime current = LocalDateTime.now(); + // 创建时间为空,则以当前时间为插入时间 + if (Objects.isNull(baseDO.getCreateTime())) { + baseDO.setCreateTime(current); + } + // 更新时间为空,则以当前时间为更新时间 + if (Objects.isNull(baseDO.getUpdateTime())) { + baseDO.setUpdateTime(current); + } + + Long userId = WebFrameworkUtils.getLoginUserId(); + // 当前登录用户不为空,创建人为空,则当前登录用户为创建人 + if (Objects.nonNull(userId) && Objects.isNull(baseDO.getCreator())) { + baseDO.setCreator(userId.toString()); + } + // 当前登录用户不为空,更新人为空,则当前登录用户为更新人 + if (Objects.nonNull(userId) && Objects.isNull(baseDO.getUpdater())) { + baseDO.setUpdater(userId.toString()); + } + } + } + + @Override + public void updateFill(MetaObject metaObject) { + // 更新时间为空,则以当前时间为更新时间 + Object modifyTime = getFieldValByName("updateTime", metaObject); + if (Objects.isNull(modifyTime)) { + setFieldValByName("updateTime", LocalDateTime.now(), metaObject); + } + + // 当前登录用户不为空,更新人为空,则当前登录用户为更新人 + Object modifier = getFieldValByName("updater", metaObject); + Long userId = WebFrameworkUtils.getLoginUserId(); + if (Objects.nonNull(userId) && Objects.isNull(modifier)) { + setFieldValByName("updater", userId.toString(), metaObject); + } + } +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/mapper/BaseMapperX.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/mapper/BaseMapperX.java new file mode 100644 index 0000000..f970d9e --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/mapper/BaseMapperX.java @@ -0,0 +1,204 @@ +package com.win.framework.mybatis.core.mapper; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.pojo.SortablePageParam; +import com.win.framework.common.pojo.SortingField; +import com.win.framework.mybatis.core.enums.SqlConstants; +import com.win.framework.mybatis.core.util.MyBatisUtils; +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.github.yulichang.base.MPJBaseMapper; +import com.github.yulichang.interfaces.MPJBaseJoin; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +/** + * 在 MyBatis Plus 的 BaseMapper 的基础上拓展,提供更多的能力 + * + * 1. {@link BaseMapper} 为 MyBatis Plus 的基础接口,提供基础的 CRUD 能力 + * 2. {@link MPJBaseMapper} 为 MyBatis Plus Join 的基础接口,提供连表 Join 能力 + */ +public interface BaseMapperX extends MPJBaseMapper { + + default PageResult selectPage(SortablePageParam pageParam, @Param("ew") Wrapper queryWrapper) { + return selectPage(pageParam, pageParam.getSortingFields(), queryWrapper); + } + + default PageResult selectPage(PageParam pageParam, @Param("ew") Wrapper queryWrapper) { + return selectPage(pageParam, null, queryWrapper); + } + + default PageResult selectPage(PageParam pageParam, Collection sortingFields, @Param("ew") Wrapper queryWrapper) { + // 特殊:不分页,直接查询全部 + if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) { + List list = selectList(queryWrapper); + return new PageResult<>(list, (long) list.size()); + } + + // MyBatis Plus 查询 + IPage mpPage = MyBatisUtils.buildPage(pageParam, sortingFields); + selectPage(mpPage, queryWrapper); + // 转换返回 + return new PageResult<>(mpPage.getRecords(), mpPage.getTotal()); + } + + default PageResult selectJoinPage(PageParam pageParam, Class clazz, MPJLambdaWrapper lambdaWrapper) { + // 特殊:不分页,直接查询全部 + if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageNo())) { + List list = selectJoinList(clazz, lambdaWrapper); + return new PageResult<>(list, (long) list.size()); + } + + // MyBatis Plus Join 查询 + IPage mpPage = MyBatisUtils.buildPage(pageParam); + mpPage = selectJoinPage(mpPage, clazz, lambdaWrapper); + // 转换返回 + return new PageResult<>(mpPage.getRecords(), mpPage.getTotal()); + } + + default PageResult selectJoinPage(PageParam pageParam, Class resultTypeClass, MPJBaseJoin joinQueryWrapper) { + IPage mpPage = MyBatisUtils.buildPage(pageParam); + selectJoinPage(mpPage, resultTypeClass, joinQueryWrapper); + // 转换返回 + return new PageResult<>(mpPage.getRecords(), mpPage.getTotal()); + } + + default T selectOne(String field, Object value) { + return selectOne(new QueryWrapper().eq(field, value)); + } + + default T selectOne(SFunction field, Object value) { + return selectOne(new LambdaQueryWrapper().eq(field, value)); + } + + default T selectOne(String field1, Object value1, String field2, Object value2) { + return selectOne(new QueryWrapper().eq(field1, value1).eq(field2, value2)); + } + + default T selectOne(SFunction field1, Object value1, SFunction field2, Object value2) { + return selectOne(new LambdaQueryWrapper().eq(field1, value1).eq(field2, value2)); + } + + default T selectOne(SFunction field1, Object value1, SFunction field2, Object value2, + SFunction field3, Object value3) { + return selectOne(new LambdaQueryWrapper().eq(field1, value1).eq(field2, value2) + .eq(field3, value3)); + } + + default Long selectCount() { + return selectCount(new QueryWrapper<>()); + } + + default Long selectCount(String field, Object value) { + return selectCount(new QueryWrapper().eq(field, value)); + } + + default Long selectCount(SFunction field, Object value) { + return selectCount(new LambdaQueryWrapper().eq(field, value)); + } + + default List selectList() { + return selectList(new QueryWrapper<>()); + } + + default List selectList(String field, Object value) { + return selectList(new QueryWrapper().eq(field, value)); + } + + default List selectList(SFunction field, Object value) { + return selectList(new LambdaQueryWrapper().eq(field, value)); + } + + default List selectList(String field, Collection values) { + if (CollUtil.isEmpty(values)) { + return CollUtil.newArrayList(); + } + return selectList(new QueryWrapper().in(field, values)); + } + + default List selectList(SFunction field, Collection values) { + if (CollUtil.isEmpty(values)) { + return CollUtil.newArrayList(); + } + return selectList(new LambdaQueryWrapper().in(field, values)); + } + + @Deprecated + default List selectList(SFunction leField, SFunction geField, Object value) { + return selectList(new LambdaQueryWrapper().le(leField, value).ge(geField, value)); + } + + default List selectList(SFunction field1, Object value1, SFunction field2, Object value2) { + return selectList(new LambdaQueryWrapper().eq(field1, value1).eq(field2, value2)); + } + + /** + * 批量插入,适合大量数据插入 + * + * @param entities 实体们 + */ + default Boolean insertBatch(Collection entities) { + // 特殊:SQL Server 批量插入后,获取 id 会报错,因此通过循环处理 + if (Objects.equals(SqlConstants.DB_TYPE, DbType.SQL_SERVER)) { + entities.forEach(this::insert); + return CollUtil.isNotEmpty(entities); + } + return Db.saveBatch(entities); + } + + /** + * 批量插入,适合大量数据插入 + * + * @param entities 实体们 + * @param size 插入数量 Db.saveBatch 默认为 1000 + */ + default Boolean insertBatch(Collection entities, int size) { + // 特殊:SQL Server 批量插入后,获取 id 会报错,因此通过循环处理 + if (Objects.equals(SqlConstants.DB_TYPE, DbType.SQL_SERVER)) { + entities.forEach(this::insert); + return CollUtil.isNotEmpty(entities); + } + return Db.saveBatch(entities, size); + } + + default int updateBatch(T update) { + return update(update, new QueryWrapper<>()); + } + + default Boolean updateBatch(Collection entities) { + return Db.updateBatchById(entities); + } + + default Boolean updateBatch(Collection entities, int size) { + return Db.updateBatchById(entities, size); + } + + default Boolean insertOrUpdate(T entity) { + return Db.saveOrUpdate(entity); + } + + default Boolean insertOrUpdateBatch(Collection collection) { + return Db.saveOrUpdateBatch(collection); + } + + default int delete(String field, String value) { + return delete(new QueryWrapper().eq(field, value)); + } + + default int delete(SFunction field, Object value) { + return delete(new LambdaQueryWrapper().eq(field, value)); + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/query/LambdaQueryWrapperX.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/query/LambdaQueryWrapperX.java new file mode 100644 index 0000000..82d9eac --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/query/LambdaQueryWrapperX.java @@ -0,0 +1,135 @@ +package com.win.framework.mybatis.core.query; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ObjectUtil; +import com.win.framework.common.util.collection.ArrayUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import org.springframework.util.StringUtils; + +import java.util.Collection; + +/** + * 拓展 MyBatis Plus QueryWrapper 类,主要增加如下功能: + *

    + * 1. 拼接条件的方法,增加 xxxIfPresent 方法,用于判断值不存在的时候,不要拼接到条件中。 + * + * @param 数据类型 + */ +public class LambdaQueryWrapperX extends LambdaQueryWrapper { + + public LambdaQueryWrapperX likeIfPresent(SFunction column, String val) { + if (StringUtils.hasText(val)) { + return (LambdaQueryWrapperX) super.like(column, val); + } + return this; + } + + public LambdaQueryWrapperX inIfPresent(SFunction column, Collection values) { + if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) { + return (LambdaQueryWrapperX) super.in(column, values); + } + return this; + } + + public LambdaQueryWrapperX inIfPresent(SFunction column, Object... values) { + if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) { + return (LambdaQueryWrapperX) super.in(column, values); + } + return this; + } + + public LambdaQueryWrapperX eqIfPresent(SFunction column, Object val) { + if (ObjectUtil.isNotEmpty(val)) { + return (LambdaQueryWrapperX) super.eq(column, val); + } + return this; + } + + public LambdaQueryWrapperX neIfPresent(SFunction column, Object val) { + if (ObjectUtil.isNotEmpty(val)) { + return (LambdaQueryWrapperX) super.ne(column, val); + } + return this; + } + + public LambdaQueryWrapperX gtIfPresent(SFunction column, Object val) { + if (val != null) { + return (LambdaQueryWrapperX) super.gt(column, val); + } + return this; + } + + public LambdaQueryWrapperX geIfPresent(SFunction column, Object val) { + if (val != null) { + return (LambdaQueryWrapperX) super.ge(column, val); + } + return this; + } + + public LambdaQueryWrapperX ltIfPresent(SFunction column, Object val) { + if (val != null) { + return (LambdaQueryWrapperX) super.lt(column, val); + } + return this; + } + + public LambdaQueryWrapperX leIfPresent(SFunction column, Object val) { + if (val != null) { + return (LambdaQueryWrapperX) super.le(column, val); + } + return this; + } + + public LambdaQueryWrapperX betweenIfPresent(SFunction column, Object val1, Object val2) { + if (val1 != null && val2 != null) { + return (LambdaQueryWrapperX) super.between(column, val1, val2); + } + if (val1 != null) { + return (LambdaQueryWrapperX) ge(column, val1); + } + if (val2 != null) { + return (LambdaQueryWrapperX) le(column, val2); + } + return this; + } + + public LambdaQueryWrapperX betweenIfPresent(SFunction column, Object[] values) { + Object val1 = ArrayUtils.get(values, 0); + Object val2 = ArrayUtils.get(values, 1); + return betweenIfPresent(column, val1, val2); + } + + // ========== 重写父类方法,方便链式调用 ========== + + @Override + public LambdaQueryWrapperX eq(boolean condition, SFunction column, Object val) { + super.eq(condition, column, val); + return this; + } + + @Override + public LambdaQueryWrapperX eq(SFunction column, Object val) { + super.eq(column, val); + return this; + } + + @Override + public LambdaQueryWrapperX orderByDesc(SFunction column) { + super.orderByDesc(true, column); + return this; + } + + @Override + public LambdaQueryWrapperX last(String lastSql) { + super.last(lastSql); + return this; + } + + @Override + public LambdaQueryWrapperX in(SFunction column, Collection coll) { + super.in(column, coll); + return this; + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/query/MPJLambdaWrapperX.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/query/MPJLambdaWrapperX.java new file mode 100644 index 0000000..193775c --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/query/MPJLambdaWrapperX.java @@ -0,0 +1,313 @@ +package com.win.framework.mybatis.core.query; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ObjectUtil; +import com.win.framework.common.util.collection.ArrayUtils; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.github.yulichang.toolkit.MPJWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import org.springframework.util.StringUtils; + +import java.util.Collection; +import java.util.function.Consumer; + +/** + * 拓展 MyBatis Plus Join QueryWrapper 类,主要增加如下功能: + *

    + * 1. 拼接条件的方法,增加 xxxIfPresent 方法,用于判断值不存在的时候,不要拼接到条件中。 + * + * @param 数据类型 + */ +public class MPJLambdaWrapperX extends MPJLambdaWrapper { + + public MPJLambdaWrapperX likeIfPresent(SFunction column, String val) { + MPJWrappers.lambdaJoin().like(column, val); + if (StringUtils.hasText(val)) { + return (MPJLambdaWrapperX) super.like(column, val); + } + return this; + } + + public MPJLambdaWrapperX inIfPresent(SFunction column, Collection values) { + if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) { + return (MPJLambdaWrapperX) super.in(column, values); + } + return this; + } + + public MPJLambdaWrapperX inIfPresent(SFunction column, Object... values) { + if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) { + return (MPJLambdaWrapperX) super.in(column, values); + } + return this; + } + + public MPJLambdaWrapperX eqIfPresent(SFunction column, Object val) { + if (ObjectUtil.isNotEmpty(val)) { + return (MPJLambdaWrapperX) super.eq(column, val); + } + return this; + } + + public MPJLambdaWrapperX neIfPresent(SFunction column, Object val) { + if (ObjectUtil.isNotEmpty(val)) { + return (MPJLambdaWrapperX) super.ne(column, val); + } + return this; + } + + public MPJLambdaWrapperX gtIfPresent(SFunction column, Object val) { + if (val != null) { + return (MPJLambdaWrapperX) super.gt(column, val); + } + return this; + } + + public MPJLambdaWrapperX geIfPresent(SFunction column, Object val) { + if (val != null) { + return (MPJLambdaWrapperX) super.ge(column, val); + } + return this; + } + + public MPJLambdaWrapperX ltIfPresent(SFunction column, Object val) { + if (val != null) { + return (MPJLambdaWrapperX) super.lt(column, val); + } + return this; + } + + public MPJLambdaWrapperX leIfPresent(SFunction column, Object val) { + if (val != null) { + return (MPJLambdaWrapperX) super.le(column, val); + } + return this; + } + + public MPJLambdaWrapperX betweenIfPresent(SFunction column, Object val1, Object val2) { + if (val1 != null && val2 != null) { + return (MPJLambdaWrapperX) super.between(column, val1, val2); + } + if (val1 != null) { + return (MPJLambdaWrapperX) ge(column, val1); + } + if (val2 != null) { + return (MPJLambdaWrapperX) le(column, val2); + } + return this; + } + + public MPJLambdaWrapperX betweenIfPresent(SFunction column, Object[] values) { + Object val1 = ArrayUtils.get(values, 0); + Object val2 = ArrayUtils.get(values, 1); + return betweenIfPresent(column, val1, val2); + } + + // ========== 重写父类方法,方便链式调用 ========== + + @Override + public MPJLambdaWrapperX eq(boolean condition, SFunction column, Object val) { + super.eq(condition, column, val); + return this; + } + + @Override + public MPJLambdaWrapperX eq(SFunction column, Object val) { + super.eq(column, val); + return this; + } + + @Override + public MPJLambdaWrapperX orderByDesc(SFunction column) { + //noinspection unchecked + super.orderByDesc(true, column); + return this; + } + + @Override + public MPJLambdaWrapperX last(String lastSql) { + super.last(lastSql); + return this; + } + + @Override + public MPJLambdaWrapperX in(SFunction column, Collection coll) { + super.in(column, coll); + return this; + } + + @Override + public MPJLambdaWrapperX selectAll(Class clazz) { + super.selectAll(clazz); + return this; + } + + @Override + public MPJLambdaWrapperX selectAll(Class clazz, String prefix) { + super.selectAll(clazz, prefix); + return this; + } + + @Override + public MPJLambdaWrapperX selectAs(SFunction column, String alias) { + super.selectAs(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectAs(String column, SFunction alias) { + super.selectAs(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectAs(SFunction column, SFunction alias) { + super.selectAs(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectAs(String index, SFunction column, SFunction alias) { + super.selectAs(index, column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectAsClass(Class source, Class tag) { + super.selectAsClass(source, tag); + return this; + } + + @Override + public MPJLambdaWrapperX selectSub(Class clazz, Consumer> consumer, SFunction alias) { + super.selectSub(clazz, consumer, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectSub(Class clazz, String st, Consumer> consumer, SFunction alias) { + super.selectSub(clazz, st, consumer, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectCount(SFunction column) { + super.selectCount(column); + return this; + } + + @Override + public MPJLambdaWrapperX selectCount(Object column, String alias) { + super.selectCount(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectCount(Object column, SFunction alias) { + super.selectCount(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectCount(SFunction column, String alias) { + super.selectCount(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectCount(SFunction column, SFunction alias) { + super.selectCount(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectSum(SFunction column) { + super.selectSum(column); + return this; + } + + @Override + public MPJLambdaWrapperX selectSum(SFunction column, String alias) { + super.selectSum(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectSum(SFunction column, SFunction alias) { + super.selectSum(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectMax(SFunction column) { + super.selectMax(column); + return this; + } + + @Override + public MPJLambdaWrapperX selectMax(SFunction column, String alias) { + super.selectMax(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectMax(SFunction column, SFunction alias) { + super.selectMax(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectMin(SFunction column) { + super.selectMin(column); + return this; + } + + @Override + public MPJLambdaWrapperX selectMin(SFunction column, String alias) { + super.selectMin(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectMin(SFunction column, SFunction alias) { + super.selectMin(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectAvg(SFunction column) { + super.selectAvg(column); + return this; + } + + @Override + public MPJLambdaWrapperX selectAvg(SFunction column, String alias) { + super.selectAvg(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectAvg(SFunction column, SFunction alias) { + super.selectAvg(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectLen(SFunction column) { + super.selectLen(column); + return this; + } + + @Override + public MPJLambdaWrapperX selectLen(SFunction column, String alias) { + super.selectLen(column, alias); + return this; + } + + @Override + public MPJLambdaWrapperX selectLen(SFunction column, SFunction alias) { + super.selectLen(column, alias); + return this; + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/query/QueryWrapperX.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/query/QueryWrapperX.java new file mode 100644 index 0000000..5b9fcd2 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/query/QueryWrapperX.java @@ -0,0 +1,166 @@ +package com.win.framework.mybatis.core.query; + +import cn.hutool.core.lang.Assert; +import com.win.framework.mybatis.core.enums.SqlConstants; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.ArrayUtils; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.Collection; + +/** + * 拓展 MyBatis Plus QueryWrapper 类,主要增加如下功能: + * + * 1. 拼接条件的方法,增加 xxxIfPresent 方法,用于判断值不存在的时候,不要拼接到条件中。 + * + * @param 数据类型 + */ +public class QueryWrapperX extends QueryWrapper { + + public QueryWrapperX likeIfPresent(String column, String val) { + if (StringUtils.hasText(val)) { + return (QueryWrapperX) super.like(column, val); + } + return this; + } + + public QueryWrapperX inIfPresent(String column, Collection values) { + if (!CollectionUtils.isEmpty(values)) { + return (QueryWrapperX) super.in(column, values); + } + return this; + } + + public QueryWrapperX inIfPresent(String column, Object... values) { + if (!ArrayUtils.isEmpty(values)) { + return (QueryWrapperX) super.in(column, values); + } + return this; + } + + public QueryWrapperX eqIfPresent(String column, Object val) { + if (val != null) { + return (QueryWrapperX) super.eq(column, val); + } + return this; + } + + public QueryWrapperX neIfPresent(String column, Object val) { + if (val != null) { + return (QueryWrapperX) super.ne(column, val); + } + return this; + } + + public QueryWrapperX gtIfPresent(String column, Object val) { + if (val != null) { + return (QueryWrapperX) super.gt(column, val); + } + return this; + } + + public QueryWrapperX geIfPresent(String column, Object val) { + if (val != null) { + return (QueryWrapperX) super.ge(column, val); + } + return this; + } + + public QueryWrapperX ltIfPresent(String column, Object val) { + if (val != null) { + return (QueryWrapperX) super.lt(column, val); + } + return this; + } + + public QueryWrapperX leIfPresent(String column, Object val) { + if (val != null) { + return (QueryWrapperX) super.le(column, val); + } + return this; + } + + public QueryWrapperX betweenIfPresent(String column, Object val1, Object val2) { + if (val1 != null && val2 != null) { + return (QueryWrapperX) super.between(column, val1, val2); + } + if (val1 != null) { + return (QueryWrapperX) ge(column, val1); + } + if (val2 != null) { + return (QueryWrapperX) le(column, val2); + } + return this; + } + + public QueryWrapperX betweenIfPresent(String column, Object[] values) { + if (values!= null && values.length != 0 && values[0] != null && values[1] != null) { + return (QueryWrapperX) super.between(column, values[0], values[1]); + } + if (values!= null && values.length != 0 && values[0] != null) { + return (QueryWrapperX) ge(column, values[0]); + } + if (values!= null && values.length != 0 && values[1] != null) { + return (QueryWrapperX) le(column, values[1]); + } + return this; + } + + // ========== 重写父类方法,方便链式调用 ========== + + @Override + public QueryWrapperX eq(boolean condition, String column, Object val) { + super.eq(condition, column, val); + return this; + } + + @Override + public QueryWrapperX eq(String column, Object val) { + super.eq(column, val); + return this; + } + + @Override + public QueryWrapperX orderByDesc(String column) { + super.orderByDesc(true, column); + return this; + } + + @Override + public QueryWrapperX last(String lastSql) { + super.last(lastSql); + return this; + } + + @Override + public QueryWrapperX in(String column, Collection coll) { + super.in(column, coll); + return this; + } + + /** + * 设置只返回最后一条 + * + * TODO 芋艿:不是完美解,需要在思考下。如果使用多数据源,并且数据源是多种类型时,可能会存在问题:实现之返回一条的语法不同 + * + * @return this + */ + public QueryWrapperX limitN(int n) { + Assert.notNull(SqlConstants.DB_TYPE, "获取不到数据库的类型"); + switch (SqlConstants.DB_TYPE) { + case ORACLE: + case ORACLE_12C: + super.le("ROWNUM", n); + break; + case SQL_SERVER: + case SQL_SERVER2005: + super.select("TOP " + n + " *"); // 由于 SQL Server 是通过 SELECT TOP 1 实现限制一条,所以只好使用 * 查询剩余字段 + break; + default: + super.last("LIMIT " + n); + } + return this; + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/EncryptTypeHandler.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/EncryptTypeHandler.java new file mode 100644 index 0000000..520fadb --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/EncryptTypeHandler.java @@ -0,0 +1,75 @@ +package com.win.framework.mybatis.core.type; + +import cn.hutool.core.lang.Assert; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.symmetric.AES; +import cn.hutool.extra.spring.SpringUtil; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * 字段字段的 TypeHandler 实现类,基于 {@link cn.hutool.crypto.symmetric.AES} 实现 + * 可通过 jasypt.encryptor.password 配置项,设置密钥 + * + * @author 芋道源码 + */ +public class EncryptTypeHandler extends BaseTypeHandler { + + private static final String ENCRYPTOR_PROPERTY_NAME = "mybatis-plus.encryptor.password"; + + private static AES aes; + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { + ps.setString(i, encrypt(parameter)); + } + + @Override + public String getNullableResult(ResultSet rs, String columnName) throws SQLException { + String value = rs.getString(columnName); + return decrypt(value); + } + + @Override + public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + String value = rs.getString(columnIndex); + return decrypt(value); + } + + @Override + public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + String value = cs.getString(columnIndex); + return decrypt(value); + } + + private static String decrypt(String value) { + if (value == null) { + return null; + } + return getEncryptor().decryptStr(value); + } + + public static String encrypt(String rawValue) { + if (rawValue == null) { + return null; + } + return getEncryptor().encryptBase64(rawValue); + } + + private static AES getEncryptor() { + if (aes != null) { + return aes; + } + // 构建 AES + String password = SpringUtil.getProperty(ENCRYPTOR_PROPERTY_NAME); + Assert.notEmpty(password, "配置项({}) 不能为空", ENCRYPTOR_PROPERTY_NAME); + aes = SecureUtil.aes(password.getBytes()); + return aes; + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/IntegerListTypeHandler.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/IntegerListTypeHandler.java new file mode 100644 index 0000000..0032617 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/IntegerListTypeHandler.java @@ -0,0 +1,56 @@ +package com.win.framework.mybatis.core.type; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.util.string.StrUtils; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; +import org.apache.ibatis.type.TypeHandler; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +/** + * List 的类型转换器实现类,对应数据库的 varchar 类型 + * + * @author jason + */ +@MappedJdbcTypes(JdbcType.VARCHAR) +@MappedTypes(List.class) +public class IntegerListTypeHandler implements TypeHandler> { + + private static final String COMMA = ","; + + @Override + public void setParameter(PreparedStatement ps, int i, List strings, JdbcType jdbcType) throws SQLException { + ps.setString(i, CollUtil.join(strings, COMMA)); + } + + @Override + public List getResult(ResultSet rs, String columnName) throws SQLException { + String value = rs.getString(columnName); + return getResult(value); + } + + @Override + public List getResult(ResultSet rs, int columnIndex) throws SQLException { + String value = rs.getString(columnIndex); + return getResult(value); + } + + @Override + public List getResult(CallableStatement cs, int columnIndex) throws SQLException { + String value = cs.getString(columnIndex); + return getResult(value); + } + + private List getResult(String value) { + if (value == null) { + return null; + } + return StrUtils.splitToInteger(value, COMMA); + } +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/JsonLongSetTypeHandler.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/JsonLongSetTypeHandler.java new file mode 100644 index 0000000..986f827 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/JsonLongSetTypeHandler.java @@ -0,0 +1,31 @@ +package com.win.framework.mybatis.core.type; + +import com.win.framework.common.util.json.JsonUtils; +import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler; +import com.fasterxml.jackson.core.type.TypeReference; + +import java.util.Set; + +/** + * 参考 {@link com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler} 实现 + * 在我们将字符串反序列化为 Set 并且泛型为 Long 时,如果每个元素的数值太小,会被处理成 Integer 类型,导致可能存在隐性的 BUG。 + * + * 例如说哦,SysUserDO 的 postIds 属性 + * + * @author 芋道源码 + */ +public class JsonLongSetTypeHandler extends AbstractJsonTypeHandler { + + private static final TypeReference> TYPE_REFERENCE = new TypeReference>(){}; + + @Override + protected Object parse(String json) { + return JsonUtils.parseObject(json, TYPE_REFERENCE); + } + + @Override + protected String toJson(Object obj) { + return JsonUtils.toJsonString(obj); + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/LongListTypeHandler.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/LongListTypeHandler.java new file mode 100644 index 0000000..79aae89 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/LongListTypeHandler.java @@ -0,0 +1,57 @@ +package com.win.framework.mybatis.core.type; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.util.string.StrUtils; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; +import org.apache.ibatis.type.TypeHandler; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +/** + * List 的类型转换器实现类,对应数据库的 varchar 类型 + * + * @author 芋道源码 + */ +@MappedJdbcTypes(JdbcType.VARCHAR) +@MappedTypes(List.class) +public class LongListTypeHandler implements TypeHandler> { + + private static final String COMMA = ","; + + @Override + public void setParameter(PreparedStatement ps, int i, List strings, JdbcType jdbcType) throws SQLException { + // 设置占位符 + ps.setString(i, CollUtil.join(strings, COMMA)); + } + + @Override + public List getResult(ResultSet rs, String columnName) throws SQLException { + String value = rs.getString(columnName); + return getResult(value); + } + + @Override + public List getResult(ResultSet rs, int columnIndex) throws SQLException { + String value = rs.getString(columnIndex); + return getResult(value); + } + + @Override + public List getResult(CallableStatement cs, int columnIndex) throws SQLException { + String value = cs.getString(columnIndex); + return getResult(value); + } + + private List getResult(String value) { + if (value == null) { + return null; + } + return StrUtils.splitToLong(value, COMMA); + } +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/StringListTypeHandler.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/StringListTypeHandler.java new file mode 100644 index 0000000..fcc4958 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/type/StringListTypeHandler.java @@ -0,0 +1,58 @@ +package com.win.framework.mybatis.core.type; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; +import org.apache.ibatis.type.TypeHandler; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +/** + * List 的类型转换器实现类,对应数据库的 varchar 类型 + * + * @author 永不言败 + * @since 2022 3/23 12:50:15 + */ +@MappedJdbcTypes(JdbcType.VARCHAR) +@MappedTypes(List.class) +public class StringListTypeHandler implements TypeHandler> { + + private static final String COMMA = ","; + + @Override + public void setParameter(PreparedStatement ps, int i, List strings, JdbcType jdbcType) throws SQLException { + // 设置占位符 + ps.setString(i, CollUtil.join(strings, COMMA)); + } + + @Override + public List getResult(ResultSet rs, String columnName) throws SQLException { + String value = rs.getString(columnName); + return getResult(value); + } + + @Override + public List getResult(ResultSet rs, int columnIndex) throws SQLException { + String value = rs.getString(columnIndex); + return getResult(value); + } + + @Override + public List getResult(CallableStatement cs, int columnIndex) throws SQLException { + String value = cs.getString(columnIndex); + return getResult(value); + } + + private List getResult(String value) { + if (value == null) { + return null; + } + return StrUtil.splitTrim(value, COMMA); + } +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/JdbcUtils.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/JdbcUtils.java new file mode 100644 index 0000000..d32c6d3 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/JdbcUtils.java @@ -0,0 +1,42 @@ +package com.win.framework.mybatis.core.util; + +import com.baomidou.mybatisplus.annotation.DbType; + +import java.sql.Connection; +import java.sql.DriverManager; + +/** + * JDBC 工具类 + * + * @author 芋道源码 + */ +public class JdbcUtils { + + /** + * 判断连接是否正确 + * + * @param url 数据源连接 + * @param username 账号 + * @param password 密码 + * @return 是否正确 + */ + public static boolean isConnectionOK(String url, String username, String password) { + try (Connection ignored = DriverManager.getConnection(url, username, password)) { + return true; + } catch (Exception ex) { + return false; + } + } + + /** + * 获得 URL 对应的 DB 类型 + * + * @param url URL + * @return DB 类型 + */ + public static DbType getDbType(String url) { + String name = com.alibaba.druid.util.JdbcUtils.getDbType(url, null); + return DbType.getDbType(name); + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/MyBatisUtils.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/MyBatisUtils.java new file mode 100644 index 0000000..536012a --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/core/util/MyBatisUtils.java @@ -0,0 +1,88 @@ +package com.win.framework.mybatis.core.util; + +import cn.hutool.core.collection.CollectionUtil; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.SortingField; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.sf.jsqlparser.expression.Alias; +import net.sf.jsqlparser.schema.Column; +import net.sf.jsqlparser.schema.Table; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +/** + * MyBatis 工具类 + */ +public class MyBatisUtils { + + private static final String MYSQL_ESCAPE_CHARACTER = "`"; + + public static Page buildPage(PageParam pageParam) { + return buildPage(pageParam, null); + } + + public static Page buildPage(PageParam pageParam, Collection sortingFields) { + // 页码 + 数量 + Page page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize()); + // 排序字段 + if (!CollectionUtil.isEmpty(sortingFields)) { + page.addOrder(sortingFields.stream().map(sortingField -> SortingField.ORDER_ASC.equals(sortingField.getOrder()) ? + OrderItem.asc(sortingField.getField()) : OrderItem.desc(sortingField.getField())) + .collect(Collectors.toList())); + } + return page; + } + + /** + * 将拦截器添加到链中 + * 由于 MybatisPlusInterceptor 不支持添加拦截器,所以只能全量设置 + * + * @param interceptor 链 + * @param inner 拦截器 + * @param index 位置 + */ + public static void addInterceptor(MybatisPlusInterceptor interceptor, InnerInterceptor inner, int index) { + List inners = new ArrayList<>(interceptor.getInterceptors()); + inners.add(index, inner); + interceptor.setInterceptors(inners); + } + + /** + * 获得 Table 对应的表名 + * + * 兼容 MySQL 转义表名 `t_xxx` + * + * @param table 表 + * @return 去除转移字符后的表名 + */ + public static String getTableName(Table table) { + String tableName = table.getName(); + if (tableName.startsWith(MYSQL_ESCAPE_CHARACTER) && tableName.endsWith(MYSQL_ESCAPE_CHARACTER)) { + tableName = tableName.substring(1, tableName.length() - 1); + } + return tableName; + } + + /** + * 构建 Column 对象 + * + * @param tableName 表名 + * @param tableAlias 别名 + * @param column 字段名 + * @return Column 对象 + */ + public static Column buildColumn(String tableName, Alias tableAlias, String column) { + if (tableAlias != null) { + tableName = tableAlias.getName(); + } + return new Column(tableName + StringPool.DOT + column); + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/package-info.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/package-info.java new file mode 100644 index 0000000..bf3f1ec --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/mybatis/package-info.java @@ -0,0 +1,4 @@ +/** + * 使用 MyBatis Plus 提升使用 MyBatis 的开发效率 + */ +package com.win.framework.mybatis; diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/translate/config/WinTranslateAutoConfiguration.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/translate/config/WinTranslateAutoConfiguration.java new file mode 100644 index 0000000..fe2498c --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/translate/config/WinTranslateAutoConfiguration.java @@ -0,0 +1,18 @@ +package com.win.framework.translate.config; + +import com.win.framework.translate.core.TranslateUtils; +import com.fhs.trans.service.impl.TransService; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Bean; + +@AutoConfiguration +public class WinTranslateAutoConfiguration { + + @Bean + @SuppressWarnings({"InstantiationOfUtilityClass", "SpringJavaInjectionPointsAutowiringInspection"}) + public TranslateUtils translateUtils(TransService transService) { + TranslateUtils.init(transService); + return new TranslateUtils(); + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/translate/core/TranslateUtils.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/translate/core/TranslateUtils.java new file mode 100644 index 0000000..d0eb30a --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/translate/core/TranslateUtils.java @@ -0,0 +1,37 @@ +package com.win.framework.translate.core; + +import cn.hutool.core.collection.CollUtil; +import com.fhs.core.trans.vo.VO; +import com.fhs.trans.service.impl.TransService; + +import java.util.List; + +/** + * VO 数据翻译 Utils + * + * @author 芋道源码 + */ +public class TranslateUtils { + + private static TransService transService; + + public static void init(TransService transService) { + TranslateUtils.transService = transService; + } + + /** + * 数据翻译 + * + * 使用场景:无法使用 @TransMethodResult 注解的场景,只能通过手动触发翻译 + * + * @param data 数据 + * @return 翻译结果 + */ + public static List translate(List data) { + if (CollUtil.isNotEmpty((data))) { + transService.transBatch(data); + } + return data; + } + +} diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/translate/package-info.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/translate/package-info.java new file mode 100644 index 0000000..997ad12 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/translate/package-info.java @@ -0,0 +1,4 @@ +/** + * 使用 Easy-Trans 提升使用 VO 数据翻译的开发效率 + */ +package com.win.framework.translate; diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/resources/META-INF/spring.factories b/win-framework/win-spring-boot-starter-mybatis/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..4c2b1ed --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.env.EnvironmentPostProcessor=\ + com.win.framework.mybatis.config.IdTypeEnvironmentPostProcessor diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/win-framework/win-spring-boot-starter-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..78b9148 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,3 @@ +com.win.framework.datasource.config.WinDataSourceAutoConfiguration +com.win.framework.mybatis.config.WinMybatisAutoConfiguration +com.win.framework.translate.config.WinTranslateAutoConfiguration \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-mybatis/《芋道 Spring Boot MyBatis 入门》.md b/win-framework/win-spring-boot-starter-mybatis/《芋道 Spring Boot MyBatis 入门》.md new file mode 100644 index 0000000..7c6d724 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/《芋道 Spring Boot MyBatis 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-mybatis/《芋道 Spring Boot 多数据源(读写分离)入门》.md b/win-framework/win-spring-boot-starter-mybatis/《芋道 Spring Boot 多数据源(读写分离)入门》.md new file mode 100644 index 0000000..ad52a19 --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/《芋道 Spring Boot 多数据源(读写分离)入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-mybatis/《芋道 Spring Boot 数据库连接池入门》.md b/win-framework/win-spring-boot-starter-mybatis/《芋道 Spring Boot 数据库连接池入门》.md new file mode 100644 index 0000000..fc9ef1c --- /dev/null +++ b/win-framework/win-spring-boot-starter-mybatis/《芋道 Spring Boot 数据库连接池入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-protection/pom.xml b/win-framework/win-spring-boot-starter-protection/pom.xml new file mode 100644 index 0000000..7a19208 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/pom.xml @@ -0,0 +1,40 @@ + + + + com.win + win-framework + ${revision} + + 4.0.0 + win-spring-boot-starter-protection + jar + + ${project.artifactId} + 服务保证,提供分布式锁、幂等、限流、熔断等等功能 + https://github.com/YunaiV/ruoyi-vue-pro + + + + + com.win + win-spring-boot-starter-web + provided + + + + + com.win + win-spring-boot-starter-redis + + + + + com.baomidou + lock4j-redisson-spring-boot-starter + true + + + + diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/config/WinIdempotentConfiguration.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/config/WinIdempotentConfiguration.java new file mode 100644 index 0000000..6694ea5 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/config/WinIdempotentConfiguration.java @@ -0,0 +1,46 @@ +package com.win.framework.idempotent.config; + +import com.win.framework.idempotent.core.aop.IdempotentAspect; +import com.win.framework.idempotent.core.keyresolver.impl.DefaultIdempotentKeyResolver; +import com.win.framework.idempotent.core.keyresolver.impl.ExpressionIdempotentKeyResolver; +import com.win.framework.idempotent.core.keyresolver.IdempotentKeyResolver; +import com.win.framework.idempotent.core.keyresolver.impl.UserIdempotentKeyResolver; +import com.win.framework.idempotent.core.redis.IdempotentRedisDAO; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import com.win.framework.redis.config.WinRedisAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.data.redis.core.StringRedisTemplate; + +import java.util.List; + +@AutoConfiguration(after = WinRedisAutoConfiguration.class) +public class WinIdempotentConfiguration { + + @Bean + public IdempotentAspect idempotentAspect(List keyResolvers, IdempotentRedisDAO idempotentRedisDAO) { + return new IdempotentAspect(keyResolvers, idempotentRedisDAO); + } + + @Bean + public IdempotentRedisDAO idempotentRedisDAO(StringRedisTemplate stringRedisTemplate) { + return new IdempotentRedisDAO(stringRedisTemplate); + } + + // ========== 各种 IdempotentKeyResolver Bean ========== + + @Bean + public DefaultIdempotentKeyResolver defaultIdempotentKeyResolver() { + return new DefaultIdempotentKeyResolver(); + } + + @Bean + public UserIdempotentKeyResolver userIdempotentKeyResolver() { + return new UserIdempotentKeyResolver(); + } + + @Bean + public ExpressionIdempotentKeyResolver expressionIdempotentKeyResolver() { + return new ExpressionIdempotentKeyResolver(); + } + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/annotation/Idempotent.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/annotation/Idempotent.java new file mode 100644 index 0000000..46a4a1d --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/annotation/Idempotent.java @@ -0,0 +1,63 @@ +package com.win.framework.idempotent.core.annotation; + +import com.win.framework.idempotent.core.keyresolver.impl.DefaultIdempotentKeyResolver; +import com.win.framework.idempotent.core.keyresolver.IdempotentKeyResolver; +import com.win.framework.idempotent.core.keyresolver.impl.ExpressionIdempotentKeyResolver; +import com.win.framework.idempotent.core.keyresolver.impl.UserIdempotentKeyResolver; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.concurrent.TimeUnit; + +/** + * 幂等注解 + * + * @author 芋道源码 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface Idempotent { + + /** + * 幂等的超时时间,默认为 1 秒 + * + * 注意,如果执行时间超过它,请求还是会进来 + */ + int timeout() default 1; + /** + * 时间单位,默认为 SECONDS 秒 + */ + TimeUnit timeUnit() default TimeUnit.SECONDS; + + /** + * 提示信息,正在执行中的提示 + */ + String message() default "重复请求,请稍后重试"; + + /** + * 使用的 Key 解析器 + * + * @see DefaultIdempotentKeyResolver 全局级别 + * @see UserIdempotentKeyResolver 用户级别 + * @see ExpressionIdempotentKeyResolver 自定义表达式,通过 {@link #keyArg()} 计算 + */ + Class keyResolver() default DefaultIdempotentKeyResolver.class; + /** + * 使用的 Key 参数 + */ + String keyArg() default ""; + + /** + * 删除 Key,当发生异常时候 + * + * 问题:为什么发生异常时,需要删除 Key 呢? + * 回答:发生异常时,说明业务发生错误,此时需要删除 Key,避免下次请求无法正常执行。 + * + * 问题:为什么不搞 deleteWhenSuccess 执行成功时,需要删除 Key 呢? + * 回答:这种情况下,本质上是分布式锁,推荐使用 @Lock4j 注解 + */ + boolean deleteKeyWhenException() default true; + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/aop/IdempotentAspect.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/aop/IdempotentAspect.java new file mode 100644 index 0000000..eb39221 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/aop/IdempotentAspect.java @@ -0,0 +1,68 @@ +package com.win.framework.idempotent.core.aop; + +import com.win.framework.common.exception.ServiceException; +import com.win.framework.common.exception.enums.GlobalErrorCodeConstants; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.idempotent.core.annotation.Idempotent; +import com.win.framework.idempotent.core.keyresolver.IdempotentKeyResolver; +import com.win.framework.idempotent.core.redis.IdempotentRedisDAO; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.util.Assert; + +import java.util.List; +import java.util.Map; + +/** + * 拦截声明了 {@link Idempotent} 注解的方法,实现幂等操作 + * + * @author 芋道源码 + */ +@Aspect +@Slf4j +public class IdempotentAspect { + + /** + * IdempotentKeyResolver 集合 + */ + private final Map, IdempotentKeyResolver> keyResolvers; + + private final IdempotentRedisDAO idempotentRedisDAO; + + public IdempotentAspect(List keyResolvers, IdempotentRedisDAO idempotentRedisDAO) { + this.keyResolvers = CollectionUtils.convertMap(keyResolvers, IdempotentKeyResolver::getClass); + this.idempotentRedisDAO = idempotentRedisDAO; + } + + @Around(value = "@annotation(idempotent)") + public Object aroundPointCut(ProceedingJoinPoint joinPoint, Idempotent idempotent) throws Throwable { + // 获得 IdempotentKeyResolver + IdempotentKeyResolver keyResolver = keyResolvers.get(idempotent.keyResolver()); + Assert.notNull(keyResolver, "找不到对应的 IdempotentKeyResolver"); + // 解析 Key + String key = keyResolver.resolver(joinPoint, idempotent); + + // 1. 锁定 Key + boolean success = idempotentRedisDAO.setIfAbsent(key, idempotent.timeout(), idempotent.timeUnit()); + // 锁定失败,抛出异常 + if (!success) { + log.info("[aroundPointCut][方法({}) 参数({}) 存在重复请求]", joinPoint.getSignature().toString(), joinPoint.getArgs()); + throw new ServiceException(GlobalErrorCodeConstants.REPEATED_REQUESTS.getCode(), idempotent.message()); + } + + // 2. 执行逻辑 + try { + return joinPoint.proceed(); + } catch (Throwable throwable) { + // 3. 异常时,删除 Key + // 参考美团 GTIS 思路:https://tech.meituan.com/2016/09/29/distributed-system-mutually-exclusive-idempotence-cerberus-gtis.html + if (idempotent.deleteKeyWhenException()) { + idempotentRedisDAO.delete(key); + } + throw throwable; + } + } + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/IdempotentKeyResolver.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/IdempotentKeyResolver.java new file mode 100644 index 0000000..412443c --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/IdempotentKeyResolver.java @@ -0,0 +1,22 @@ +package com.win.framework.idempotent.core.keyresolver; + +import com.win.framework.idempotent.core.annotation.Idempotent; +import org.aspectj.lang.JoinPoint; + +/** + * 幂等 Key 解析器接口 + * + * @author 芋道源码 + */ +public interface IdempotentKeyResolver { + + /** + * 解析一个 Key + * + * @param idempotent 幂等注解 + * @param joinPoint AOP 切面 + * @return Key + */ + String resolver(JoinPoint joinPoint, Idempotent idempotent); + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/impl/DefaultIdempotentKeyResolver.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/impl/DefaultIdempotentKeyResolver.java new file mode 100644 index 0000000..f4c8e59 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/impl/DefaultIdempotentKeyResolver.java @@ -0,0 +1,25 @@ +package com.win.framework.idempotent.core.keyresolver.impl; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import com.win.framework.idempotent.core.annotation.Idempotent; +import com.win.framework.idempotent.core.keyresolver.IdempotentKeyResolver; +import org.aspectj.lang.JoinPoint; + +/** + * 默认(全局级别)幂等 Key 解析器,使用方法名 + 方法参数,组装成一个 Key + * + * 为了避免 Key 过长,使用 MD5 进行“压缩” + * + * @author 芋道源码 + */ +public class DefaultIdempotentKeyResolver implements IdempotentKeyResolver { + + @Override + public String resolver(JoinPoint joinPoint, Idempotent idempotent) { + String methodName = joinPoint.getSignature().toString(); + String argsStr = StrUtil.join(",", joinPoint.getArgs()); + return SecureUtil.md5(methodName + argsStr); + } + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/impl/ExpressionIdempotentKeyResolver.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/impl/ExpressionIdempotentKeyResolver.java new file mode 100644 index 0000000..6b5d727 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/impl/ExpressionIdempotentKeyResolver.java @@ -0,0 +1,64 @@ +package com.win.framework.idempotent.core.keyresolver.impl; + +import cn.hutool.core.util.ArrayUtil; +import com.win.framework.idempotent.core.annotation.Idempotent; +import com.win.framework.idempotent.core.keyresolver.IdempotentKeyResolver; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.core.ParameterNameDiscoverer; +import org.springframework.expression.Expression; +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; + +import java.lang.reflect.Method; + +/** + * 基于 Spring EL 表达式, + * + * @author 芋道源码 + */ +public class ExpressionIdempotentKeyResolver implements IdempotentKeyResolver { + + private final ParameterNameDiscoverer parameterNameDiscoverer = new DefaultParameterNameDiscoverer(); + + private final ExpressionParser expressionParser = new SpelExpressionParser(); + + @Override + public String resolver(JoinPoint joinPoint, Idempotent idempotent) { + // 获得被拦截方法参数名列表 + Method method = getMethod(joinPoint); + Object[] args = joinPoint.getArgs(); + String[] parameterNames = this.parameterNameDiscoverer.getParameterNames(method); + // 准备 Spring EL 表达式解析的上下文 + StandardEvaluationContext evaluationContext = new StandardEvaluationContext(); + if (ArrayUtil.isNotEmpty(parameterNames)) { + for (int i = 0; i < parameterNames.length; i++) { + evaluationContext.setVariable(parameterNames[i], args[i]); + } + } + + // 解析参数 + Expression expression = expressionParser.parseExpression(idempotent.keyArg()); + return expression.getValue(evaluationContext, String.class); + } + + private static Method getMethod(JoinPoint point) { + // 处理,声明在类上的情况 + MethodSignature signature = (MethodSignature) point.getSignature(); + Method method = signature.getMethod(); + if (!method.getDeclaringClass().isInterface()) { + return method; + } + + // 处理,声明在接口上的情况 + try { + return point.getTarget().getClass().getDeclaredMethod( + point.getSignature().getName(), method.getParameterTypes()); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/impl/UserIdempotentKeyResolver.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/impl/UserIdempotentKeyResolver.java new file mode 100644 index 0000000..af74a3a --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/keyresolver/impl/UserIdempotentKeyResolver.java @@ -0,0 +1,28 @@ +package com.win.framework.idempotent.core.keyresolver.impl; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import com.win.framework.idempotent.core.annotation.Idempotent; +import com.win.framework.idempotent.core.keyresolver.IdempotentKeyResolver; +import com.win.framework.web.core.util.WebFrameworkUtils; +import org.aspectj.lang.JoinPoint; + +/** + * 用户级别的幂等 Key 解析器,使用方法名 + 方法参数 + userId + userType,组装成一个 Key + * + * 为了避免 Key 过长,使用 MD5 进行“压缩” + * + * @author 芋道源码 + */ +public class UserIdempotentKeyResolver implements IdempotentKeyResolver { + + @Override + public String resolver(JoinPoint joinPoint, Idempotent idempotent) { + String methodName = joinPoint.getSignature().toString(); + String argsStr = StrUtil.join(",", joinPoint.getArgs()); + Long userId = WebFrameworkUtils.getLoginUserId(); + Integer userType = WebFrameworkUtils.getLoginUserType(); + return SecureUtil.md5(methodName + argsStr + userId + userType); + } + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/redis/IdempotentRedisDAO.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/redis/IdempotentRedisDAO.java new file mode 100644 index 0000000..2a7d359 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/core/redis/IdempotentRedisDAO.java @@ -0,0 +1,41 @@ +package com.win.framework.idempotent.core.redis; + +import lombok.AllArgsConstructor; +import org.springframework.data.redis.core.StringRedisTemplate; + +import java.util.concurrent.TimeUnit; + +/** + * 幂等 Redis DAO + * + * @author 芋道源码 + */ +@AllArgsConstructor +public class IdempotentRedisDAO { + + /** + * 幂等操作 + * + * KEY 格式:idempotent:%s // 参数为 uuid + * VALUE 格式:String + * 过期时间:不固定 + */ + private static final String IDEMPOTENT = "idempotent:%s"; + + private final StringRedisTemplate redisTemplate; + + public Boolean setIfAbsent(String key, long timeout, TimeUnit timeUnit) { + String redisKey = formatKey(key); + return redisTemplate.opsForValue().setIfAbsent(redisKey, "", timeout, timeUnit); + } + + public void delete(String key) { + String redisKey = formatKey(key); + redisTemplate.delete(redisKey); + } + + private static String formatKey(String key) { + return String.format(IDEMPOTENT, key); + } + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/package-info.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/package-info.java new file mode 100644 index 0000000..7a0327a --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/idempotent/package-info.java @@ -0,0 +1,12 @@ +/** + * 幂等组件,参考 https://github.com/it4alla/idempotent 项目实现 + * 实现原理是,相同参数的方法,一段时间内,有且仅能执行一次。通过这样的方式,保证幂等性。 + * + * 使用场景:例如说,用户快速的双击了某个按钮,前端没有禁用该按钮,导致发送了两次重复的请求。 + * + * 和 it4alla/idempotent 组件的差异点,主要体现在两点: + * 1. 我们去掉了 @Idempotent 注解的 delKey 属性。原因是,本质上 delKey 为 true 时,实现的是分布式锁的能力 + * 此时,我们偏向使用 Lock4j 组件。原则上,一个组件只提供一种单一的能力。 + * 2. 考虑到组件的通用性,我们并未像 it4alla/idempotent 组件一样使用 Redisson RMap 结构,而是直接使用 Redis 的 String 数据格式。 + */ +package com.win.framework.idempotent; diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/config/WinLock4jConfiguration.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/config/WinLock4jConfiguration.java new file mode 100644 index 0000000..08184bf --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/config/WinLock4jConfiguration.java @@ -0,0 +1,18 @@ +package com.win.framework.lock4j.config; + +import com.win.framework.lock4j.core.DefaultLockFailureStrategy; +import com.baomidou.lock.spring.boot.autoconfigure.LockAutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Bean; + +@AutoConfiguration(before = LockAutoConfiguration.class) +@ConditionalOnClass(name = "com.baomidou.lock.annotation.Lock4j") +public class WinLock4jConfiguration { + + @Bean + public DefaultLockFailureStrategy lockFailureStrategy() { + return new DefaultLockFailureStrategy(); + } + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/core/DefaultLockFailureStrategy.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/core/DefaultLockFailureStrategy.java new file mode 100644 index 0000000..4ac4020 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/core/DefaultLockFailureStrategy.java @@ -0,0 +1,21 @@ +package com.win.framework.lock4j.core; + +import com.win.framework.common.exception.ServiceException; +import com.win.framework.common.exception.enums.GlobalErrorCodeConstants; +import com.baomidou.lock.LockFailureStrategy; +import lombok.extern.slf4j.Slf4j; + +import java.lang.reflect.Method; + +/** + * 自定义获取锁失败策略,抛出 {@link ServiceException} 异常 + */ +@Slf4j +public class DefaultLockFailureStrategy implements LockFailureStrategy { + + @Override + public void onLockFailure(String key, Method method, Object[] arguments) { + log.debug("[onLockFailure][线程:{} 获取锁失败,key:{} 获取失败:{} ]", Thread.currentThread().getName(), key, arguments); + throw new ServiceException(GlobalErrorCodeConstants.LOCKED); + } +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/core/Lock4jRedisKeyConstants.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/core/Lock4jRedisKeyConstants.java new file mode 100644 index 0000000..5fded71 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/core/Lock4jRedisKeyConstants.java @@ -0,0 +1,19 @@ +package com.win.framework.lock4j.core; + +/** + * Lock4j Redis Key 枚举类 + * + * @author 芋道源码 + */ +public interface Lock4jRedisKeyConstants { + + /** + * 分布式锁 + * + * KEY 格式:lock4j:%s // 参数来自 DefaultLockKeyBuilder 类 + * VALUE 数据格式:HASH // RLock.class:Redisson 的 Lock 锁,使用 Hash 数据结构 + * 过期时间:不固定 + */ + String LOCK4J = "lock4j:%s"; + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/package-info.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/package-info.java new file mode 100644 index 0000000..b76745e --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/lock4j/package-info.java @@ -0,0 +1,4 @@ +/** + * 分布式锁组件,使用 https://gitee.com/baomidou/lock4j 开源项目 + */ +package com.win.framework.lock4j; diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/config/WinRateLimiterConfiguration.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/config/WinRateLimiterConfiguration.java new file mode 100644 index 0000000..e644a7c --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/config/WinRateLimiterConfiguration.java @@ -0,0 +1,55 @@ +package com.win.framework.ratelimiter.config; + +import com.win.framework.ratelimiter.core.aop.RateLimiterAspect; +import com.win.framework.ratelimiter.core.keyresolver.RateLimiterKeyResolver; +import com.win.framework.ratelimiter.core.keyresolver.impl.*; +import com.win.framework.ratelimiter.core.redis.RateLimiterRedisDAO; +import com.win.framework.redis.config.WinRedisAutoConfiguration; +import org.redisson.api.RedissonClient; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Bean; + +import java.util.List; + +@AutoConfiguration(after = WinRedisAutoConfiguration.class) +public class WinRateLimiterConfiguration { + + @Bean + public RateLimiterAspect rateLimiterAspect(List keyResolvers, RateLimiterRedisDAO rateLimiterRedisDAO) { + return new RateLimiterAspect(keyResolvers, rateLimiterRedisDAO); + } + + @Bean + @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") + public RateLimiterRedisDAO rateLimiterRedisDAO(RedissonClient redissonClient) { + return new RateLimiterRedisDAO(redissonClient); + } + + // ========== 各种 RateLimiterRedisDAO Bean ========== + + @Bean + public DefaultRateLimiterKeyResolver defaultRateLimiterKeyResolver() { + return new DefaultRateLimiterKeyResolver(); + } + + @Bean + public UserRateLimiterKeyResolver userRateLimiterKeyResolver() { + return new UserRateLimiterKeyResolver(); + } + + @Bean + public ClientIpRateLimiterKeyResolver clientIpRateLimiterKeyResolver() { + return new ClientIpRateLimiterKeyResolver(); + } + + @Bean + public ServerNodeRateLimiterKeyResolver serverNodeRateLimiterKeyResolver() { + return new ServerNodeRateLimiterKeyResolver(); + } + + @Bean + public ExpressionRateLimiterKeyResolver expressionRateLimiterKeyResolver() { + return new ExpressionRateLimiterKeyResolver(); + } + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/annotation/RateLimiter.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/annotation/RateLimiter.java new file mode 100644 index 0000000..3019bb1 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/annotation/RateLimiter.java @@ -0,0 +1,62 @@ +package com.win.framework.ratelimiter.core.annotation; + +import com.win.framework.common.exception.enums.GlobalErrorCodeConstants; +import com.win.framework.idempotent.core.keyresolver.impl.ExpressionIdempotentKeyResolver; +import com.win.framework.ratelimiter.core.keyresolver.RateLimiterKeyResolver; +import com.win.framework.ratelimiter.core.keyresolver.impl.ClientIpRateLimiterKeyResolver; +import com.win.framework.ratelimiter.core.keyresolver.impl.DefaultRateLimiterKeyResolver; +import com.win.framework.ratelimiter.core.keyresolver.impl.ServerNodeRateLimiterKeyResolver; +import com.win.framework.ratelimiter.core.keyresolver.impl.UserRateLimiterKeyResolver; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.concurrent.TimeUnit; + +/** + * 限流注解 + * + * @author 芋道源码 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface RateLimiter { + + /** + * 限流的时间,默认为 1 秒 + */ + int time() default 1; + /** + * 时间单位,默认为 SECONDS 秒 + */ + TimeUnit timeUnit() default TimeUnit.SECONDS; + + /** + * 限流次数 + */ + int count() default 100; + + /** + * 提示信息,请求过快的提示 + * + * @see GlobalErrorCodeConstants#TOO_MANY_REQUESTS + */ + String message() default ""; // 为空时,使用 TOO_MANY_REQUESTS 错误提示 + + /** + * 使用的 Key 解析器 + * + * @see DefaultRateLimiterKeyResolver 全局级别 + * @see UserRateLimiterKeyResolver 用户 ID 级别 + * @see ClientIpRateLimiterKeyResolver 用户 IP 级别 + * @see ServerNodeRateLimiterKeyResolver 服务器 Node 级别 + * @see ExpressionIdempotentKeyResolver 自定义表达式,通过 {@link #keyArg()} 计算 + */ + Class keyResolver() default DefaultRateLimiterKeyResolver.class; + /** + * 使用的 Key 参数 + */ + String keyArg() default ""; + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/aop/RateLimiterAspect.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/aop/RateLimiterAspect.java new file mode 100644 index 0000000..af2664c --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/aop/RateLimiterAspect.java @@ -0,0 +1,60 @@ +package com.win.framework.ratelimiter.core.aop; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.exception.ServiceException; +import com.win.framework.common.exception.enums.GlobalErrorCodeConstants; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.ratelimiter.core.annotation.RateLimiter; +import com.win.framework.ratelimiter.core.keyresolver.RateLimiterKeyResolver; +import com.win.framework.ratelimiter.core.redis.RateLimiterRedisDAO; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.util.Assert; + +import java.util.List; +import java.util.Map; + +/** + * 拦截声明了 {@link RateLimiter} 注解的方法,实现限流操作 + * + * @author 芋道源码 + */ +@Aspect +@Slf4j +public class RateLimiterAspect { + + /** + * RateLimiterKeyResolver 集合 + */ + private final Map, RateLimiterKeyResolver> keyResolvers; + + private final RateLimiterRedisDAO rateLimiterRedisDAO; + + public RateLimiterAspect(List keyResolvers, RateLimiterRedisDAO rateLimiterRedisDAO) { + this.keyResolvers = CollectionUtils.convertMap(keyResolvers, RateLimiterKeyResolver::getClass); + this.rateLimiterRedisDAO = rateLimiterRedisDAO; + } + + @Before("@annotation(rateLimiter)") + public void beforePointCut(JoinPoint joinPoint, RateLimiter rateLimiter) { + // 获得 IdempotentKeyResolver 对象 + RateLimiterKeyResolver keyResolver = keyResolvers.get(rateLimiter.keyResolver()); + Assert.notNull(keyResolver, "找不到对应的 RateLimiterKeyResolver"); + // 解析 Key + String key = keyResolver.resolver(joinPoint, rateLimiter); + + // 获取 1 次限流 + boolean success = rateLimiterRedisDAO.tryAcquire(key, + rateLimiter.count(), rateLimiter.time(), rateLimiter.timeUnit()); + if (!success) { + log.info("[beforePointCut][方法({}) 参数({}) 请求过于频繁]", joinPoint.getSignature().toString(), joinPoint.getArgs()); + String message = StrUtil.blankToDefault(rateLimiter.message(), + GlobalErrorCodeConstants.TOO_MANY_REQUESTS.getMsg()); + throw new ServiceException(GlobalErrorCodeConstants.TOO_MANY_REQUESTS.getCode(), message); + } + } + +} + diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/RateLimiterKeyResolver.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/RateLimiterKeyResolver.java new file mode 100644 index 0000000..85c3d85 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/RateLimiterKeyResolver.java @@ -0,0 +1,22 @@ +package com.win.framework.ratelimiter.core.keyresolver; + +import com.win.framework.ratelimiter.core.annotation.RateLimiter; +import org.aspectj.lang.JoinPoint; + +/** + * 限流 Key 解析器接口 + * + * @author 芋道源码 + */ +public interface RateLimiterKeyResolver { + + /** + * 解析一个 Key + * + * @param rateLimiter 限流注解 + * @param joinPoint AOP 切面 + * @return Key + */ + String resolver(JoinPoint joinPoint, RateLimiter rateLimiter); + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/ClientIpRateLimiterKeyResolver.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/ClientIpRateLimiterKeyResolver.java new file mode 100644 index 0000000..80cb090 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/ClientIpRateLimiterKeyResolver.java @@ -0,0 +1,27 @@ +package com.win.framework.ratelimiter.core.keyresolver.impl; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import com.win.framework.common.util.servlet.ServletUtils; +import com.win.framework.ratelimiter.core.annotation.RateLimiter; +import com.win.framework.ratelimiter.core.keyresolver.RateLimiterKeyResolver; +import org.aspectj.lang.JoinPoint; + +/** + * IP 级别的限流 Key 解析器,使用方法名 + 方法参数 + IP,组装成一个 Key + * + * 为了避免 Key 过长,使用 MD5 进行“压缩” + * + * @author 芋道源码 + */ +public class ClientIpRateLimiterKeyResolver implements RateLimiterKeyResolver { + + @Override + public String resolver(JoinPoint joinPoint, RateLimiter rateLimiter) { + String methodName = joinPoint.getSignature().toString(); + String argsStr = StrUtil.join(",", joinPoint.getArgs()); + String clientIp = ServletUtils.getClientIP(); + return SecureUtil.md5(methodName + argsStr + clientIp); + } + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/DefaultRateLimiterKeyResolver.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/DefaultRateLimiterKeyResolver.java new file mode 100644 index 0000000..01b5259 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/DefaultRateLimiterKeyResolver.java @@ -0,0 +1,25 @@ +package com.win.framework.ratelimiter.core.keyresolver.impl; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import com.win.framework.ratelimiter.core.annotation.RateLimiter; +import com.win.framework.ratelimiter.core.keyresolver.RateLimiterKeyResolver; +import org.aspectj.lang.JoinPoint; + +/** + * 默认(全局级别)限流 Key 解析器,使用方法名 + 方法参数,组装成一个 Key + * + * 为了避免 Key 过长,使用 MD5 进行“压缩” + * + * @author 芋道源码 + */ +public class DefaultRateLimiterKeyResolver implements RateLimiterKeyResolver { + + @Override + public String resolver(JoinPoint joinPoint, RateLimiter rateLimiter) { + String methodName = joinPoint.getSignature().toString(); + String argsStr = StrUtil.join(",", joinPoint.getArgs()); + return SecureUtil.md5(methodName + argsStr); + } + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/ExpressionRateLimiterKeyResolver.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/ExpressionRateLimiterKeyResolver.java new file mode 100644 index 0000000..7c0d507 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/ExpressionRateLimiterKeyResolver.java @@ -0,0 +1,64 @@ +package com.win.framework.ratelimiter.core.keyresolver.impl; + +import cn.hutool.core.util.ArrayUtil; +import com.win.framework.ratelimiter.core.annotation.RateLimiter; +import com.win.framework.ratelimiter.core.keyresolver.RateLimiterKeyResolver; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.core.ParameterNameDiscoverer; +import org.springframework.expression.Expression; +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; + +import java.lang.reflect.Method; + +/** + * 基于 Spring EL 表达式的 {@link RateLimiterKeyResolver} 实现类 + * + * @author 芋道源码 + */ +public class ExpressionRateLimiterKeyResolver implements RateLimiterKeyResolver { + + private final ParameterNameDiscoverer parameterNameDiscoverer = new DefaultParameterNameDiscoverer(); + + private final ExpressionParser expressionParser = new SpelExpressionParser(); + + @Override + public String resolver(JoinPoint joinPoint, RateLimiter rateLimiter) { + // 获得被拦截方法参数名列表 + Method method = getMethod(joinPoint); + Object[] args = joinPoint.getArgs(); + String[] parameterNames = this.parameterNameDiscoverer.getParameterNames(method); + // 准备 Spring EL 表达式解析的上下文 + StandardEvaluationContext evaluationContext = new StandardEvaluationContext(); + if (ArrayUtil.isNotEmpty(parameterNames)) { + for (int i = 0; i < parameterNames.length; i++) { + evaluationContext.setVariable(parameterNames[i], args[i]); + } + } + + // 解析参数 + Expression expression = expressionParser.parseExpression(rateLimiter.keyArg()); + return expression.getValue(evaluationContext, String.class); + } + + private static Method getMethod(JoinPoint point) { + // 处理,声明在类上的情况 + MethodSignature signature = (MethodSignature) point.getSignature(); + Method method = signature.getMethod(); + if (!method.getDeclaringClass().isInterface()) { + return method; + } + + // 处理,声明在接口上的情况 + try { + return point.getTarget().getClass().getDeclaredMethod( + point.getSignature().getName(), method.getParameterTypes()); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/ServerNodeRateLimiterKeyResolver.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/ServerNodeRateLimiterKeyResolver.java new file mode 100644 index 0000000..b249f15 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/ServerNodeRateLimiterKeyResolver.java @@ -0,0 +1,27 @@ +package com.win.framework.ratelimiter.core.keyresolver.impl; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.system.SystemUtil; +import com.win.framework.ratelimiter.core.annotation.RateLimiter; +import com.win.framework.ratelimiter.core.keyresolver.RateLimiterKeyResolver; +import org.aspectj.lang.JoinPoint; + +/** + * Server 节点级别的限流 Key 解析器,使用方法名 + 方法参数 + IP,组装成一个 Key + * + * 为了避免 Key 过长,使用 MD5 进行“压缩” + * + * @author 芋道源码 + */ +public class ServerNodeRateLimiterKeyResolver implements RateLimiterKeyResolver { + + @Override + public String resolver(JoinPoint joinPoint, RateLimiter rateLimiter) { + String methodName = joinPoint.getSignature().toString(); + String argsStr = StrUtil.join(",", joinPoint.getArgs()); + String serverNode = String.format("%s@%d", SystemUtil.getHostInfo().getAddress(), SystemUtil.getCurrentPID()); + return SecureUtil.md5(methodName + argsStr + serverNode); + } + +} \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/UserRateLimiterKeyResolver.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/UserRateLimiterKeyResolver.java new file mode 100644 index 0000000..19131e2 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/keyresolver/impl/UserRateLimiterKeyResolver.java @@ -0,0 +1,28 @@ +package com.win.framework.ratelimiter.core.keyresolver.impl; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import com.win.framework.ratelimiter.core.annotation.RateLimiter; +import com.win.framework.ratelimiter.core.keyresolver.RateLimiterKeyResolver; +import com.win.framework.web.core.util.WebFrameworkUtils; +import org.aspectj.lang.JoinPoint; + +/** + * 用户级别的限流 Key 解析器,使用方法名 + 方法参数 + userId + userType,组装成一个 Key + * + * 为了避免 Key 过长,使用 MD5 进行“压缩” + * + * @author 芋道源码 + */ +public class UserRateLimiterKeyResolver implements RateLimiterKeyResolver { + + @Override + public String resolver(JoinPoint joinPoint, RateLimiter rateLimiter) { + String methodName = joinPoint.getSignature().toString(); + String argsStr = StrUtil.join(",", joinPoint.getArgs()); + Long userId = WebFrameworkUtils.getLoginUserId(); + Integer userType = WebFrameworkUtils.getLoginUserType(); + return SecureUtil.md5(methodName + argsStr + userId + userType); + } + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/redis/RateLimiterRedisDAO.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/redis/RateLimiterRedisDAO.java new file mode 100644 index 0000000..a0b0b17 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/core/redis/RateLimiterRedisDAO.java @@ -0,0 +1,60 @@ +package com.win.framework.ratelimiter.core.redis; + +import lombok.AllArgsConstructor; +import org.redisson.api.*; + +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * 限流 Redis DAO + * + * @author 芋道源码 + */ +@AllArgsConstructor +public class RateLimiterRedisDAO { + + /** + * 限流操作 + * + * KEY 格式:rate_limiter:%s // 参数为 uuid + * VALUE 格式:String + * 过期时间:不固定 + */ + private static final String RATE_LIMITER = "rate_limiter:%s"; + + private final RedissonClient redissonClient; + + public Boolean tryAcquire(String key, int count, int time, TimeUnit timeUnit) { + // 1. 获得 RRateLimiter,并设置 rate 速率 + RRateLimiter rateLimiter = getRRateLimiter(key, count, time, timeUnit); + // 2. 尝试获取 1 个 + return rateLimiter.tryAcquire(); + } + + private static String formatKey(String key) { + return String.format(RATE_LIMITER, key); + } + + private RRateLimiter getRRateLimiter(String key, long count, int time, TimeUnit timeUnit) { + String redisKey = formatKey(key); + RRateLimiter rateLimiter = redissonClient.getRateLimiter(redisKey); + long rateInterval = timeUnit.toSeconds(time); + // 1. 如果不存在,设置 rate 速率 + RateLimiterConfig config = rateLimiter.getConfig(); + if (config == null) { + rateLimiter.trySetRate(RateType.OVERALL, count, rateInterval, RateIntervalUnit.SECONDS); + return rateLimiter; + } + // 2. 如果存在,并且配置相同,则直接返回 + if (config.getRateType() == RateType.OVERALL + && Objects.equals(config.getRate(), count) + && Objects.equals(config.getRateInterval(), TimeUnit.SECONDS.toMillis(rateInterval))) { + return rateLimiter; + } + // 3. 如果存在,并且配置不同,则进行新建 + rateLimiter.setRate(RateType.OVERALL, count, rateInterval, RateIntervalUnit.SECONDS); + return rateLimiter; + } + +} diff --git a/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/package-info.java b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/package-info.java new file mode 100644 index 0000000..bd26afa --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/java/com/win/framework/ratelimiter/package-info.java @@ -0,0 +1,4 @@ +/** + * 限流组件,基于 Redisson {@link org.redisson.api.RRateLimiter} 限流实现 + */ +package com.win.framework.ratelimiter; \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-protection/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/win-framework/win-spring-boot-starter-protection/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..7f8a528 --- /dev/null +++ b/win-framework/win-spring-boot-starter-protection/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,3 @@ +com.win.framework.idempotent.config.WinIdempotentConfiguration +com.win.framework.lock4j.config.WinLock4jConfiguration +com.win.framework.ratelimiter.config.WinRateLimiterConfiguration \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-redis/pom.xml b/win-framework/win-spring-boot-starter-redis/pom.xml new file mode 100644 index 0000000..1c5e9f8 --- /dev/null +++ b/win-framework/win-spring-boot-starter-redis/pom.xml @@ -0,0 +1,41 @@ + + + + com.win + win-framework + ${revision} + + 4.0.0 + win-spring-boot-starter-redis + jar + + ${project.artifactId} + Redis 封装拓展 + https://github.com/YunaiV/ruoyi-vue-pro + + + + com.win + win-common + + + + + org.redisson + redisson-spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-cache + + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + + diff --git a/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/config/WinCacheAutoConfiguration.java b/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/config/WinCacheAutoConfiguration.java new file mode 100644 index 0000000..7be6cdd --- /dev/null +++ b/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/config/WinCacheAutoConfiguration.java @@ -0,0 +1,82 @@ +package com.win.framework.redis.config; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.redis.core.TimeoutRedisCacheManager; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.cache.CacheProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.data.redis.cache.BatchStrategies; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.cache.RedisCacheWriter; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.RedisSerializationContext; +import org.springframework.util.StringUtils; + +import java.util.Objects; + +import static com.win.framework.redis.config.WinRedisAutoConfiguration.buildRedisSerializer; + +/** + * Cache 配置类,基于 Redis 实现 + */ +@AutoConfiguration +@EnableConfigurationProperties({CacheProperties.class, WinCacheProperties.class}) +@EnableCaching +public class WinCacheAutoConfiguration { + + /** + * RedisCacheConfiguration Bean + *

    + * 参考 org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration 的 createConfiguration 方法 + */ + @Bean + @Primary + public RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) { + RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); + // 设置使用 : 单冒号,而不是双 :: 冒号,避免 Redis Desktop Manager 多余空格 + // 详细可见 https://blog.csdn.net/chuixue24/article/details/103928965 博客 + // 再次修复单冒号,而不是双 :: 冒号问题,Issues 详情:https://gitee.com/zhijiantianya/win-cloud/issues/I86VY2 + config = config.computePrefixWith(cacheName -> { + String keyPrefix = cacheProperties.getRedis().getKeyPrefix(); + if (StringUtils.hasText(keyPrefix)) { + keyPrefix = keyPrefix.lastIndexOf(StrUtil.COLON) == -1 ? keyPrefix + StrUtil.COLON : keyPrefix; + return keyPrefix + cacheName + StrUtil.COLON; + } + return cacheName + StrUtil.COLON; + }); + // 设置使用 JSON 序列化方式 + config = config.serializeValuesWith( + RedisSerializationContext.SerializationPair.fromSerializer(buildRedisSerializer())); + + // 设置 CacheProperties.Redis 的属性 + CacheProperties.Redis redisProperties = cacheProperties.getRedis(); + if (redisProperties.getTimeToLive() != null) { + config = config.entryTtl(redisProperties.getTimeToLive()); + } + if (!redisProperties.isCacheNullValues()) { + config = config.disableCachingNullValues(); + } + if (!redisProperties.isUseKeyPrefix()) { + config = config.disableKeyPrefix(); + } + return config; + } + + @Bean + public RedisCacheManager redisCacheManager(RedisTemplate redisTemplate, + RedisCacheConfiguration redisCacheConfiguration, + WinCacheProperties winCacheProperties) { + // 创建 RedisCacheWriter 对象 + RedisConnectionFactory connectionFactory = Objects.requireNonNull(redisTemplate.getConnectionFactory()); + RedisCacheWriter cacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory, + BatchStrategies.scan(winCacheProperties.getRedisScanBatchSize())); + // 创建 TenantRedisCacheManager 对象 + return new TimeoutRedisCacheManager(cacheWriter, redisCacheConfiguration); + } + +} diff --git a/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/config/WinCacheProperties.java b/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/config/WinCacheProperties.java new file mode 100644 index 0000000..7c45681 --- /dev/null +++ b/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/config/WinCacheProperties.java @@ -0,0 +1,27 @@ +package com.win.framework.redis.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; + +/** + * Cache 配置项 + * + * @author Wanwan + */ +@ConfigurationProperties("win.cache") +@Data +@Validated +public class WinCacheProperties { + + /** + * {@link #redisScanBatchSize} 默认值 + */ + private static final Integer REDIS_SCAN_BATCH_SIZE_DEFAULT = 30; + + /** + * redis scan 一次返回数量 + */ + private Integer redisScanBatchSize = REDIS_SCAN_BATCH_SIZE_DEFAULT; + +} diff --git a/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/config/WinRedisAutoConfiguration.java b/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/config/WinRedisAutoConfiguration.java new file mode 100644 index 0000000..8df7914 --- /dev/null +++ b/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/config/WinRedisAutoConfiguration.java @@ -0,0 +1,45 @@ +package com.win.framework.redis.config; + +import cn.hutool.core.util.ReflectUtil; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.redisson.spring.starter.RedissonAutoConfigurationV2; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.RedisSerializer; + +/** + * Redis 配置类 + */ +@AutoConfiguration(before = RedissonAutoConfigurationV2.class) // 目的:使用自己定义的 RedisTemplate Bean +public class WinRedisAutoConfiguration { + + /** + * 创建 RedisTemplate Bean,使用 JSON 序列化方式 + */ + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory factory) { + // 创建 RedisTemplate 对象 + RedisTemplate template = new RedisTemplate<>(); + // 设置 RedisConnection 工厂。😈 它就是实现多种 Java Redis 客户端接入的秘密工厂。感兴趣的胖友,可以自己去撸下。 + template.setConnectionFactory(factory); + // 使用 String 序列化方式,序列化 KEY 。 + template.setKeySerializer(RedisSerializer.string()); + template.setHashKeySerializer(RedisSerializer.string()); + // 使用 JSON 序列化方式(库是 Jackson ),序列化 VALUE 。 + template.setValueSerializer(buildRedisSerializer()); + template.setHashValueSerializer(buildRedisSerializer()); + return template; + } + + public static RedisSerializer buildRedisSerializer() { + RedisSerializer json = RedisSerializer.json(); + // 解决 LocalDateTime 的序列化 + ObjectMapper objectMapper = (ObjectMapper) ReflectUtil.getFieldValue(json, "mapper"); + objectMapper.registerModules(new JavaTimeModule()); + return json; + } + +} diff --git a/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/core/TimeoutRedisCacheManager.java b/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/core/TimeoutRedisCacheManager.java new file mode 100644 index 0000000..b604b06 --- /dev/null +++ b/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/core/TimeoutRedisCacheManager.java @@ -0,0 +1,86 @@ +package com.win.framework.redis.core; + +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.data.redis.cache.RedisCache; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.cache.RedisCacheWriter; + +import java.time.Duration; + +/** + * 支持自定义过期时间的 {@link RedisCacheManager} 实现类 + * + * 在 {@link Cacheable#cacheNames()} 格式为 "key#ttl" 时,# 后面的 ttl 为过期时间。 + * 单位为最后一个字母(支持的单位有:d 天,h 小时,m 分钟,s 秒),默认单位为 s 秒 + * + * @author 芋道源码 + */ +public class TimeoutRedisCacheManager extends RedisCacheManager { + + private static final String SPLIT = "#"; + + public TimeoutRedisCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) { + super(cacheWriter, defaultCacheConfiguration); + } + + @Override + protected RedisCache createRedisCache(String name, RedisCacheConfiguration cacheConfig) { + if (StrUtil.isEmpty(name)) { + return super.createRedisCache(name, cacheConfig); + } + // 如果使用 # 分隔,大小不为 2,则说明不使用自定义过期时间 + String[] names = StrUtil.splitToArray(name, SPLIT); + if (names.length != 2) { + return super.createRedisCache(name, cacheConfig); + } + + // 核心:通过修改 cacheConfig 的过期时间,实现自定义过期时间 + if (cacheConfig != null) { + // 移除 # 后面的 : 以及后面的内容,避免影响解析 + String ttlStr = StrUtil.subBefore(names[1], StrUtil.COLON, false); // 获得 ttlStr 时间部分 + names[1] = StrUtil.subAfter(names[1], ttlStr, false); // 移除掉 ttlStr 时间部分 + // 解析时间 + Duration duration = parseDuration(ttlStr); + cacheConfig = cacheConfig.entryTtl(duration); + } + + // 创建 RedisCache 对象,需要忽略掉 ttlStr + return super.createRedisCache(names[0] + names[1], cacheConfig); + } + + /** + * 解析过期时间 Duration + * + * @param ttlStr 过期时间字符串 + * @return 过期时间 Duration + */ + private Duration parseDuration(String ttlStr) { + String timeUnit = StrUtil.subSuf(ttlStr, -1); + switch (timeUnit) { + case "d": + return Duration.ofDays(removeDurationSuffix(ttlStr)); + case "h": + return Duration.ofHours(removeDurationSuffix(ttlStr)); + case "m": + return Duration.ofMinutes(removeDurationSuffix(ttlStr)); + case "s": + return Duration.ofSeconds(removeDurationSuffix(ttlStr)); + default: + return Duration.ofSeconds(Long.parseLong(ttlStr)); + } + } + + /** + * 移除多余的后缀,返回具体的时间 + * + * @param ttlStr 过期时间字符串 + * @return 时间 + */ + private Long removeDurationSuffix(String ttlStr) { + return NumberUtil.parseLong(StrUtil.sub(ttlStr, 0, ttlStr.length() - 1)); + } + +} diff --git a/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/package-info.java b/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/package-info.java new file mode 100644 index 0000000..7be362f --- /dev/null +++ b/win-framework/win-spring-boot-starter-redis/src/main/java/com/win/framework/redis/package-info.java @@ -0,0 +1,4 @@ +/** + * 采用 Spring Data Redis 操作 Redis,底层使用 Redisson 作为客户端 + */ +package com.win.framework.redis; diff --git a/win-framework/win-spring-boot-starter-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/win-framework/win-spring-boot-starter-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..1a0b273 --- /dev/null +++ b/win-framework/win-spring-boot-starter-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +com.win.framework.redis.config.WinRedisAutoConfiguration +com.win.framework.redis.config.WinCacheAutoConfiguration diff --git a/win-framework/win-spring-boot-starter-redis/《芋道 Spring Boot Cache 入门》.md b/win-framework/win-spring-boot-starter-redis/《芋道 Spring Boot Cache 入门》.md new file mode 100644 index 0000000..50ce4c7 --- /dev/null +++ b/win-framework/win-spring-boot-starter-redis/《芋道 Spring Boot Cache 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-redis/《芋道 Spring Boot Redis 入门》.md b/win-framework/win-spring-boot-starter-redis/《芋道 Spring Boot Redis 入门》.md new file mode 100644 index 0000000..c5c959b --- /dev/null +++ b/win-framework/win-spring-boot-starter-redis/《芋道 Spring Boot Redis 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-rpc/pom.xml b/win-framework/win-spring-boot-starter-rpc/pom.xml new file mode 100644 index 0000000..f4698dc --- /dev/null +++ b/win-framework/win-spring-boot-starter-rpc/pom.xml @@ -0,0 +1,46 @@ + + + + win-framework + com.win + ${revision} + + 4.0.0 + win-spring-boot-starter-rpc + jar + + ${project.artifactId} + + OpenFeign:提供 RESTful API 的调用 + + https://github.com/YunaiV/ruoyi-vue-pro + + + + com.win + win-common + + + + + org.springframework.cloud + spring-cloud-starter-loadbalancer + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + io.github.openfeign + feign-okhttp + + + + + jakarta.validation + jakarta.validation-api + + + diff --git a/win-framework/win-spring-boot-starter-rpc/src/main/java/com/win/framework/rpc/config/package-info.java b/win-framework/win-spring-boot-starter-rpc/src/main/java/com/win/framework/rpc/config/package-info.java new file mode 100644 index 0000000..f926f43 --- /dev/null +++ b/win-framework/win-spring-boot-starter-rpc/src/main/java/com/win/framework/rpc/config/package-info.java @@ -0,0 +1,4 @@ +/** + * 占坑 TODO + */ +package com.win.framework.rpc.config; diff --git a/win-framework/win-spring-boot-starter-rpc/src/main/java/com/win/framework/rpc/core/package-info.java b/win-framework/win-spring-boot-starter-rpc/src/main/java/com/win/framework/rpc/core/package-info.java new file mode 100644 index 0000000..0fdd5dc --- /dev/null +++ b/win-framework/win-spring-boot-starter-rpc/src/main/java/com/win/framework/rpc/core/package-info.java @@ -0,0 +1,4 @@ +/** + * 占坑 TODO + */ +package com.win.framework.rpc.core; diff --git a/win-framework/win-spring-boot-starter-rpc/src/main/java/com/win/framework/rpc/package-info.java b/win-framework/win-spring-boot-starter-rpc/src/main/java/com/win/framework/rpc/package-info.java new file mode 100644 index 0000000..6347dae --- /dev/null +++ b/win-framework/win-spring-boot-starter-rpc/src/main/java/com/win/framework/rpc/package-info.java @@ -0,0 +1,6 @@ +/** + * OpenFeign:提供 RESTful API 的调用 + * + * @author 芋道源码 + */ +package com.win.framework.rpc; diff --git a/win-framework/win-spring-boot-starter-rpc/《芋道 Spring Boot 声明式调用 Feign 入门》.md b/win-framework/win-spring-boot-starter-rpc/《芋道 Spring Boot 声明式调用 Feign 入门》.md new file mode 100644 index 0000000..f2b42cc --- /dev/null +++ b/win-framework/win-spring-boot-starter-rpc/《芋道 Spring Boot 声明式调用 Feign 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-rpc/《芋道 Spring Cloud 声明式调用 Feign 入门》.md b/win-framework/win-spring-boot-starter-rpc/《芋道 Spring Cloud 声明式调用 Feign 入门》.md new file mode 100644 index 0000000..98c7fbe --- /dev/null +++ b/win-framework/win-spring-boot-starter-rpc/《芋道 Spring Cloud 声明式调用 Feign 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-security/pom.xml b/win-framework/win-spring-boot-starter-security/pom.xml new file mode 100644 index 0000000..4c6bd7b --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/pom.xml @@ -0,0 +1,85 @@ + + + + com.win + win-framework + ${revision} + + 4.0.0 + win-spring-boot-starter-security + jar + + ${project.artifactId} + + 1. security:用户的认证、权限的校验,实现「谁」可以做「什么事」 + 2. operatelog:操作日志,实现「谁」在「什么时间」对「什么」做了「什么事」 + + https://github.com/YunaiV/ruoyi-vue-pro + + + + com.win + win-common + + + + + org.springframework.boot + spring-boot-starter-aop + + + + + com.win + win-spring-boot-starter-web + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + org.springframework.boot + spring-boot-starter-security + + + + + com.win + win-spring-boot-starter-rpc + true + + + + + com.win + win-module-system-api + ${revision} + + + + + com.google.guava + guava + + + + + + io.github.mouzt + bizlog-sdk + + + + + com.win + win-module-system-api + ${revision} + + + + diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/config/WinOperateLogConfiguration.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/config/WinOperateLogConfiguration.java new file mode 100644 index 0000000..79eaed3 --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/config/WinOperateLogConfiguration.java @@ -0,0 +1,27 @@ +package com.win.framework.operatelog.config; + +import com.win.framework.operatelog.core.service.LogRecordServiceImpl; +import com.mzt.logapi.service.ILogRecordService; +import com.mzt.logapi.starter.annotation.EnableLogRecord; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; + +/** + * 操作日志配置类 + * + * @author HUIHUI + */ +@EnableLogRecord(tenant = "") // 貌似用不上 tenant 这玩意给个空好啦 +@AutoConfiguration +@Slf4j +public class WinOperateLogConfiguration { + + @Bean + @Primary + public ILogRecordService iLogRecordServiceImpl() { + return new LogRecordServiceImpl(); + } + +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/config/WinOperateLogRpcAutoConfiguration.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/config/WinOperateLogRpcAutoConfiguration.java new file mode 100644 index 0000000..ed6ec2c --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/config/WinOperateLogRpcAutoConfiguration.java @@ -0,0 +1,15 @@ +package com.win.framework.operatelog.config; + +import com.win.module.system.api.logger.OperateLogApi; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * OperateLog 使用到 Feign 的配置项 + * + * @author 芋道源码 + */ +@AutoConfiguration +@EnableFeignClients(clients = {OperateLogApi.class}) // 主要是引入相关的 API 服务 +public class WinOperateLogRpcAutoConfiguration { +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/core/package-info.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/core/package-info.java new file mode 100644 index 0000000..1075c61 --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/core/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位,无特殊作用 + */ +package com.win.framework.operatelog.core; \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/core/service/LogRecordServiceImpl.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/core/service/LogRecordServiceImpl.java new file mode 100644 index 0000000..8a8f1b8 --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/core/service/LogRecordServiceImpl.java @@ -0,0 +1,87 @@ +package com.win.framework.operatelog.core.service; + +import com.win.framework.common.util.monitor.TracerUtils; +import com.win.framework.common.util.servlet.ServletUtils; +import com.win.framework.security.core.LoginUser; +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import com.win.module.system.api.logger.OperateLogApi; +import com.win.module.system.api.logger.dto.OperateLogCreateReqDTO; +import com.mzt.logapi.beans.LogRecord; +import com.mzt.logapi.service.ILogRecordService; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; + +/** + * 操作日志 ILogRecordService 实现类 + * + * 基于 {@link OperateLogApi} 实现,记录操作日志 + * + * @author HUIHUI + */ +@Slf4j +public class LogRecordServiceImpl implements ILogRecordService { + + @Resource + private OperateLogApi operateLogApi; + + @Override + public void record(LogRecord logRecord) { + // 1. 补全通用字段 + OperateLogCreateReqDTO reqDTO = new OperateLogCreateReqDTO(); + reqDTO.setTraceId(TracerUtils.getTraceId()); + // 补充用户信息 + fillUserFields(reqDTO); + // 补全模块信息 + fillModuleFields(reqDTO, logRecord); + // 补全请求信息 + fillRequestFields(reqDTO); + + // 2. 异步记录日志 + operateLogApi.createOperateLog(reqDTO); + } + + private static void fillUserFields(OperateLogCreateReqDTO reqDTO) { + // 使用 SecurityFrameworkUtils。因为要考虑,rpc、mq、job,它其实不是 web; + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + if (loginUser == null) { + return; + } + reqDTO.setUserId(loginUser.getId()); + reqDTO.setUserType(loginUser.getUserType()); + } + + public static void fillModuleFields(OperateLogCreateReqDTO reqDTO, LogRecord logRecord) { + reqDTO.setType(logRecord.getType()); // 大模块类型,例如:CRM 客户 + reqDTO.setSubType(logRecord.getSubType());// 操作名称,例如:转移客户 + reqDTO.setBizId(Long.parseLong(logRecord.getBizNo())); // 业务编号,例如:客户编号 + reqDTO.setAction(logRecord.getAction());// 操作内容,例如:修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。 + reqDTO.setExtra(logRecord.getExtra()); // 拓展字段,有些复杂的业务,需要记录一些字段 ( JSON 格式 ),例如说,记录订单编号,{ orderId: "1"} + } + + private static void fillRequestFields(OperateLogCreateReqDTO reqDTO) { + // 获得 Request 对象 + HttpServletRequest request = ServletUtils.getRequest(); + if (request == null) { + return; + } + // 补全请求信息 + reqDTO.setRequestMethod(request.getMethod()); + reqDTO.setRequestUrl(request.getRequestURI()); + reqDTO.setUserIp(ServletUtils.getClientIP(request)); + reqDTO.setUserAgent(ServletUtils.getUserAgent(request)); + } + + @Override + public List queryLog(String bizNo, String type) { + throw new UnsupportedOperationException("使用 OperateLogApi 进行操作日志的查询"); + } + + @Override + public List queryLogByBizNo(String bizNo, String type, String subType) { + throw new UnsupportedOperationException("使用 OperateLogApi 进行操作日志的查询"); + } + +} \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/package-info.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/package-info.java new file mode 100644 index 0000000..010dd8e --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/operatelog/package-info.java @@ -0,0 +1,7 @@ +/** + * 基于 mzt-log 框架 + * 实现操作日志功能 + * + * @author HUIHUI + */ +package com.win.framework.operatelog; diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/AuthorizeRequestsCustomizer.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/AuthorizeRequestsCustomizer.java new file mode 100644 index 0000000..da40121 --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/AuthorizeRequestsCustomizer.java @@ -0,0 +1,35 @@ +package com.win.framework.security.config; + +import com.win.framework.web.config.WebProperties; +import jakarta.annotation.Resource; +import org.springframework.core.Ordered; +import org.springframework.security.config.Customizer; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer; + +/** + * 自定义的 URL 的安全配置 + * 目的:每个 Maven Module 可以自定义规则! + * + * @author 芋道源码 + */ +public abstract class AuthorizeRequestsCustomizer + implements Customizer.AuthorizationManagerRequestMatcherRegistry>, Ordered { + + @Resource + private WebProperties webProperties; + + protected String buildAdminApi(String url) { + return webProperties.getAdminApi().getPrefix() + url; + } + + protected String buildAppApi(String url) { + return webProperties.getAppApi().getPrefix() + url; + } + + @Override + public int getOrder() { + return 0; + } + +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/SecurityProperties.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/SecurityProperties.java new file mode 100644 index 0000000..c041a1c --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/SecurityProperties.java @@ -0,0 +1,51 @@ +package com.win.framework.security.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.util.Collections; +import java.util.List; + +@ConfigurationProperties(prefix = "win.security") +@Validated +@Data +public class SecurityProperties { + + /** + * HTTP 请求时,访问令牌的请求 Header + */ + @NotEmpty(message = "Token Header 不能为空") + private String tokenHeader = "Authorization"; + /** + * HTTP 请求时,访问令牌的请求参数 + * + * 初始目的:解决 WebSocket 无法通过 header 传参,只能通过 token 参数拼接 + */ + @NotEmpty(message = "Token Parameter 不能为空") + private String tokenParameter = "token"; + + /** + * mock 模式的开关 + */ + @NotNull(message = "mock 模式的开关不能为空") + private Boolean mockEnable = false; + /** + * mock 模式的密钥 + * 一定要配置密钥,保证安全性 + */ + @NotEmpty(message = "mock 模式的密钥不能为空") // 这里设置了一个默认值,因为实际上只有 mockEnable 为 true 时才需要配置。 + private String mockSecret = "test"; + + /** + * 免登录的 URL 列表 + */ + private List permitAllUrls = Collections.emptyList(); + + /** + * PasswordEncoder 加密复杂度,越高开销越大 + */ + private Integer passwordEncoderLength = 4; +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/WinSecurityAutoConfiguration.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/WinSecurityAutoConfiguration.java new file mode 100644 index 0000000..3d9dfaa --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/WinSecurityAutoConfiguration.java @@ -0,0 +1,104 @@ +package com.win.framework.security.config; + +import com.win.framework.security.core.aop.PreAuthenticatedAspect; +import com.win.framework.security.core.context.TransmittableThreadLocalSecurityContextHolderStrategy; +import com.win.framework.security.core.filter.TokenAuthenticationFilter; +import com.win.framework.security.core.handler.AccessDeniedHandlerImpl; +import com.win.framework.security.core.handler.AuthenticationEntryPointImpl; +import com.win.framework.security.core.service.SecurityFrameworkService; +import com.win.framework.security.core.service.SecurityFrameworkServiceImpl; +import com.win.framework.web.core.handler.GlobalExceptionHandler; +import com.win.module.system.api.oauth2.OAuth2TokenApi; +import com.win.module.system.api.permission.PermissionApi; +import org.springframework.beans.factory.config.MethodInvokingFactoryBean; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureOrder; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.security.web.access.AccessDeniedHandler; + +import jakarta.annotation.Resource; + +/** + * Spring Security 自动配置类,主要用于相关组件的配置 + * + * 注意,不能和 {@link WinWebSecurityConfigurerAdapter} 用一个,原因是会导致初始化报错。 + * 参见 https://stackoverflow.com/questions/53847050/spring-boot-delegatebuilder-cannot-be-null-on-autowiring-authenticationmanager 文档。 + * + * @author 芋道源码 + */ +@AutoConfiguration +@AutoConfigureOrder(-1) // 目的:先于 Spring Security 自动配置,避免一键改包后,org.* 基础包无法生效 +@EnableConfigurationProperties(SecurityProperties.class) +public class WinSecurityAutoConfiguration { + + @Resource + private SecurityProperties securityProperties; + + /** + * 处理用户未登录拦截的切面的 Bean + */ + @Bean + public PreAuthenticatedAspect preAuthenticatedAspect() { + return new PreAuthenticatedAspect(); + } + + /** + * 认证失败处理类 Bean + */ + @Bean + public AuthenticationEntryPoint authenticationEntryPoint() { + return new AuthenticationEntryPointImpl(); + } + + /** + * 权限不够处理器 Bean + */ + @Bean + public AccessDeniedHandler accessDeniedHandler() { + return new AccessDeniedHandlerImpl(); + } + + /** + * Spring Security 加密器 + * 考虑到安全性,这里采用 BCryptPasswordEncoder 加密器 + * + * @see Password Encoding with Spring Security + */ + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(securityProperties.getPasswordEncoderLength()); + } + + /** + * Token 认证过滤器 Bean + */ + @Bean + public TokenAuthenticationFilter authenticationTokenFilter(GlobalExceptionHandler globalExceptionHandler, + OAuth2TokenApi oauth2TokenApi) { + return new TokenAuthenticationFilter(securityProperties, globalExceptionHandler, oauth2TokenApi); + } + + @Bean("ss") // 使用 Spring Security 的缩写,方便使用 + public SecurityFrameworkService securityFrameworkService(PermissionApi permissionApi) { + return new SecurityFrameworkServiceImpl(permissionApi); + } + + /** + * 声明调用 {@link SecurityContextHolder#setStrategyName(String)} 方法, + * 设置使用 {@link TransmittableThreadLocalSecurityContextHolderStrategy} 作为 Security 的上下文策略 + */ + @Bean + public MethodInvokingFactoryBean securityContextHolderMethodInvokingFactoryBean() { + MethodInvokingFactoryBean methodInvokingFactoryBean = new MethodInvokingFactoryBean(); + methodInvokingFactoryBean.setTargetClass(SecurityContextHolder.class); + methodInvokingFactoryBean.setTargetMethod("setStrategyName"); + methodInvokingFactoryBean.setArguments(TransmittableThreadLocalSecurityContextHolderStrategy.class.getName()); + return methodInvokingFactoryBean; + } + +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/WinSecurityRpcAutoConfiguration.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/WinSecurityRpcAutoConfiguration.java new file mode 100644 index 0000000..17cb674 --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/WinSecurityRpcAutoConfiguration.java @@ -0,0 +1,25 @@ +package com.win.framework.security.config; + +import com.win.framework.security.core.rpc.LoginUserRequestInterceptor; +import com.win.module.system.api.oauth2.OAuth2TokenApi; +import com.win.module.system.api.permission.PermissionApi; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Bean; + +/** + * Security 使用到 Feign 的配置项 + * + * @author 芋道源码 + */ +@AutoConfiguration +@EnableFeignClients(clients = {OAuth2TokenApi.class, // 主要是引入相关的 API 服务 + PermissionApi.class}) +public class WinSecurityRpcAutoConfiguration { + + @Bean + public LoginUserRequestInterceptor loginUserRequestInterceptor() { + return new LoginUserRequestInterceptor(); + } + +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/WinWebSecurityConfigurerAdapter.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/WinWebSecurityConfigurerAdapter.java new file mode 100644 index 0000000..0440da4 --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/config/WinWebSecurityConfigurerAdapter.java @@ -0,0 +1,208 @@ +package com.win.framework.security.config; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.security.core.filter.TokenAuthenticationFilter; +import com.win.framework.web.config.WebProperties; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; +import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureOrder; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.http.HttpMethod; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.Customizer; +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; +import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 自定义的 Spring Security 配置适配器实现 + * + * @author 芋道源码 + */ +@AutoConfiguration +@AutoConfigureOrder(-1) // 目的:先于 Spring Security 自动配置,避免一键改包后,org.* 基础包无法生效 +@EnableMethodSecurity(securedEnabled = true) +public class WinWebSecurityConfigurerAdapter { + + @Resource + private WebProperties webProperties; + @Resource + private SecurityProperties securityProperties; + + /** + * 认证失败处理类 Bean + */ + @Resource + private AuthenticationEntryPoint authenticationEntryPoint; + /** + * 权限不够处理器 Bean + */ + @Resource + private AccessDeniedHandler accessDeniedHandler; + /** + * Token 认证过滤器 Bean + */ + @Resource + private TokenAuthenticationFilter authenticationTokenFilter; + + /** + * 自定义的权限映射 Bean 们 + * + * @see #filterChain(HttpSecurity) + */ + @Resource + private List authorizeRequestsCustomizers; + + @Resource + private ApplicationContext applicationContext; + + /** + * 由于 Spring Security 创建 AuthenticationManager 对象时,没声明 @Bean 注解,导致无法被注入 + * 通过覆写父类的该方法,添加 @Bean 注解,解决该问题 + */ + @Bean + public AuthenticationManager authenticationManagerBean(AuthenticationConfiguration authenticationConfiguration) throws Exception { + return authenticationConfiguration.getAuthenticationManager(); + } + + /** + * 配置 URL 的安全配置 + * + * anyRequest | 匹配所有请求路径 + * access | SpringEl表达式结果为true时可以访问 + * anonymous | 匿名可以访问 + * denyAll | 用户不能访问 + * fullyAuthenticated | 用户完全认证可以访问(非remember-me下自动登录) + * hasAnyAuthority | 如果有参数,参数表示权限,则其中任何一个权限可以访问 + * hasAnyRole | 如果有参数,参数表示角色,则其中任何一个角色可以访问 + * hasAuthority | 如果有参数,参数表示权限,则其权限可以访问 + * hasIpAddress | 如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问 + * hasRole | 如果有参数,参数表示角色,则其角色可以访问 + * permitAll | 用户可以任意访问 + * rememberMe | 允许通过remember-me登录的用户访问 + * authenticated | 用户登录后可访问 + */ + @Bean + protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { + // 登出 + httpSecurity + // 开启跨域 + .cors(Customizer.withDefaults()) + // CSRF 禁用,因为不使用 Session + .csrf(AbstractHttpConfigurer::disable) + // 基于 token 机制,所以不需要 Session + .sessionManagement(c -> c.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + .headers(c -> c.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable)) + // 一堆自定义的 Spring Security 处理器 + .exceptionHandling(c -> c.authenticationEntryPoint(authenticationEntryPoint) + .accessDeniedHandler(accessDeniedHandler)); + // 登录、登录暂时不使用 Spring Security 的拓展点,主要考虑一方面拓展多用户、多种登录方式相对复杂,一方面用户的学习成本较高 + + // 获得 @PermitAll 带来的 URL 列表,免登录 + Multimap permitAllUrls = getPermitAllUrlsFromAnnotations(); + // 设置每个请求的权限 + httpSecurity + // ①:全局共享规则 + .authorizeHttpRequests(c -> c + // 1.1 静态资源,可匿名访问 + .requestMatchers(HttpMethod.GET, "/*.html", "/*.html", "/*.css", "/*.js").permitAll() + // 1.1 设置 @PermitAll 无需认证 + .requestMatchers(HttpMethod.GET, permitAllUrls.get(HttpMethod.GET).toArray(new String[0])).permitAll() + .requestMatchers(HttpMethod.POST, permitAllUrls.get(HttpMethod.POST).toArray(new String[0])).permitAll() + .requestMatchers(HttpMethod.PUT, permitAllUrls.get(HttpMethod.PUT).toArray(new String[0])).permitAll() + .requestMatchers(HttpMethod.DELETE, permitAllUrls.get(HttpMethod.DELETE).toArray(new String[0])).permitAll() + .requestMatchers(HttpMethod.HEAD, permitAllUrls.get(HttpMethod.HEAD).toArray(new String[0])).permitAll() + .requestMatchers(HttpMethod.PATCH, permitAllUrls.get(HttpMethod.PATCH).toArray(new String[0])).permitAll() + // 1.2 基于 win.security.permit-all-urls 无需认证 + .requestMatchers(securityProperties.getPermitAllUrls().toArray(new String[0])).permitAll() + // 1.3 设置 App API 无需认证 + .requestMatchers(buildAppApi("/**")).permitAll() + ) + // ②:每个项目的自定义规则 + .authorizeHttpRequests(c -> authorizeRequestsCustomizers.forEach(customizer -> customizer.customize(c))) + // ③:兜底规则,必须认证 + .authorizeHttpRequests(c -> c.anyRequest().authenticated()); + + // 添加 Token Filter + httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); + return httpSecurity.build(); + } + + private String buildAppApi(String url) { + return webProperties.getAppApi().getPrefix() + url; + } + + private Multimap getPermitAllUrlsFromAnnotations() { + Multimap result = HashMultimap.create(); + // 获得接口对应的 HandlerMethod 集合 + RequestMappingHandlerMapping requestMappingHandlerMapping = (RequestMappingHandlerMapping) + applicationContext.getBean("requestMappingHandlerMapping"); + Map handlerMethodMap = requestMappingHandlerMapping.getHandlerMethods(); + // 获得有 @PermitAll 注解的接口 + for (Map.Entry entry : handlerMethodMap.entrySet()) { + HandlerMethod handlerMethod = entry.getValue(); + if (!handlerMethod.hasMethodAnnotation(PermitAll.class)) { + continue; + } + if (entry.getKey().getPatternsCondition() == null) { + continue; + } + Set urls = entry.getKey().getPatternsCondition().getPatterns(); + // 特殊:使用 @RequestMapping 注解,并且未写 method 属性,此时认为都需要免登录 + Set methods = entry.getKey().getMethodsCondition().getMethods(); + if (CollUtil.isEmpty(methods)) { // + result.putAll(HttpMethod.GET, urls); + result.putAll(HttpMethod.POST, urls); + result.putAll(HttpMethod.PUT, urls); + result.putAll(HttpMethod.DELETE, urls); + result.putAll(HttpMethod.HEAD, urls); + result.putAll(HttpMethod.PATCH, urls); + continue; + } + // 根据请求方法,添加到 result 结果 + entry.getKey().getMethodsCondition().getMethods().forEach(requestMethod -> { + switch (requestMethod) { + case GET: + result.putAll(HttpMethod.GET, urls); + break; + case POST: + result.putAll(HttpMethod.POST, urls); + break; + case PUT: + result.putAll(HttpMethod.PUT, urls); + break; + case DELETE: + result.putAll(HttpMethod.DELETE, urls); + break; + case HEAD: + result.putAll(HttpMethod.HEAD, urls); + break; + case PATCH: + result.putAll(HttpMethod.PATCH, urls); + break; + } + }); + } + return result; + } + +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/LoginUser.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/LoginUser.java new file mode 100644 index 0000000..01bc9db --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/LoginUser.java @@ -0,0 +1,66 @@ +package com.win.framework.security.core; + +import cn.hutool.core.map.MapUtil; +import com.win.framework.common.enums.UserTypeEnum; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 登录用户信息 + * + * @author 芋道源码 + */ +@Data +public class LoginUser { + + public static final String INFO_KEY_NICKNAME = "nickname"; + public static final String INFO_KEY_DEPT_ID = "deptId"; + + /** + * 用户编号 + */ + private Long id; + /** + * 用户类型 + * + * 关联 {@link UserTypeEnum} + */ + private Integer userType; + /** + * 额外的用户信息 + */ + private Map info; + /** + * 租户编号 + */ + private Long tenantId; + /** + * 授权范围 + */ + private List scopes; + + // ========== 上下文 ========== + /** + * 上下文字段,不进行持久化 + * + * 1. 用于基于 LoginUser 维度的临时缓存 + */ + @JsonIgnore + private Map context; + + public void setContext(String key, Object value) { + if (context == null) { + context = new HashMap<>(); + } + context.put(key, value); + } + + public T getContext(String key, Class type) { + return MapUtil.get(context, key, type); + } + +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/annotations/PreAuthenticated.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/annotations/PreAuthenticated.java new file mode 100644 index 0000000..880367c --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/annotations/PreAuthenticated.java @@ -0,0 +1,17 @@ +package com.win.framework.security.core.annotations; + +import java.lang.annotation.*; + +/** + * 声明用户需要登录 + * + * 为什么不使用 {@link org.springframework.security.access.prepost.PreAuthorize} 注解,原因是不通过时,抛出的是认证不通过,而不是未登录 + * + * @author 芋道源码 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +@Documented +public @interface PreAuthenticated { +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/aop/PreAuthenticatedAspect.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/aop/PreAuthenticatedAspect.java new file mode 100644 index 0000000..47d01b9 --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/aop/PreAuthenticatedAspect.java @@ -0,0 +1,25 @@ +package com.win.framework.security.core.aop; + +import com.win.framework.security.core.annotations.PreAuthenticated; +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; + +import static com.win.framework.common.exception.enums.GlobalErrorCodeConstants.UNAUTHORIZED; +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; + +@Aspect +@Slf4j +public class PreAuthenticatedAspect { + + @Around("@annotation(preAuthenticated)") + public Object around(ProceedingJoinPoint joinPoint, PreAuthenticated preAuthenticated) throws Throwable { + if (SecurityFrameworkUtils.getLoginUser() == null) { + throw exception(UNAUTHORIZED); + } + return joinPoint.proceed(); + } + +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/context/TransmittableThreadLocalSecurityContextHolderStrategy.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/context/TransmittableThreadLocalSecurityContextHolderStrategy.java new file mode 100644 index 0000000..dfc7f9c --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/context/TransmittableThreadLocalSecurityContextHolderStrategy.java @@ -0,0 +1,48 @@ +package com.win.framework.security.core.context; + +import com.alibaba.ttl.TransmittableThreadLocal; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolderStrategy; +import org.springframework.security.core.context.SecurityContextImpl; +import org.springframework.util.Assert; + +/** + * 基于 TransmittableThreadLocal 实现的 Security Context 持有者策略 + * 目的是,避免 @Async 等异步执行时,原生 ThreadLocal 的丢失问题 + * + * @author 芋道源码 + */ +public class TransmittableThreadLocalSecurityContextHolderStrategy implements SecurityContextHolderStrategy { + + /** + * 使用 TransmittableThreadLocal 作为上下文 + */ + private static final ThreadLocal CONTEXT_HOLDER = new TransmittableThreadLocal<>(); + + @Override + public void clearContext() { + CONTEXT_HOLDER.remove(); + } + + @Override + public SecurityContext getContext() { + SecurityContext ctx = CONTEXT_HOLDER.get(); + if (ctx == null) { + ctx = createEmptyContext(); + CONTEXT_HOLDER.set(ctx); + } + return ctx; + } + + @Override + public void setContext(SecurityContext context) { + Assert.notNull(context, "Only non-null SecurityContext instances are permitted"); + CONTEXT_HOLDER.set(context); + } + + @Override + public SecurityContext createEmptyContext() { + return new SecurityContextImpl(); + } + +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/filter/TokenAuthenticationFilter.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/filter/TokenAuthenticationFilter.java new file mode 100644 index 0000000..3672290 --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/filter/TokenAuthenticationFilter.java @@ -0,0 +1,144 @@ +package com.win.framework.security.core.filter; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.exception.ServiceException; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.common.util.servlet.ServletUtils; +import com.win.framework.security.config.SecurityProperties; +import com.win.framework.security.core.LoginUser; +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import com.win.framework.web.core.handler.GlobalExceptionHandler; +import com.win.framework.web.core.util.WebFrameworkUtils; +import com.win.module.system.api.oauth2.OAuth2TokenApi; +import com.win.module.system.api.oauth2.dto.OAuth2AccessTokenCheckRespDTO; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; + +/** + * Token 过滤器,验证 token 的有效性 + * 验证通过后,获得 {@link LoginUser} 信息,并加入到 Spring Security 上下文 + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +@Slf4j +public class TokenAuthenticationFilter extends OncePerRequestFilter { + + private final SecurityProperties securityProperties; + + private final GlobalExceptionHandler globalExceptionHandler; + + private final OAuth2TokenApi oauth2TokenApi; + + @Override + @SuppressWarnings("NullableProblems") + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException { + // 情况一,基于 header[login-user] 获得用户,例如说来自 Gateway 或者其它服务透传 + LoginUser loginUser = buildLoginUserByHeader(request); + + // 情况二,基于 Token 获得用户 + // 注意,这里主要满足直接使用 Nginx 直接转发到 Spring Cloud 服务的场景。 + if (loginUser == null) { + String token = SecurityFrameworkUtils.obtainAuthorization(request, + securityProperties.getTokenHeader(), securityProperties.getTokenParameter()); + if (StrUtil.isNotEmpty(token)) { + Integer userType = WebFrameworkUtils.getLoginUserType(request); + try { + // 1.1 基于 token 构建登录用户 + loginUser = buildLoginUserByToken(token, userType); + // 1.2 模拟 Login 功能,方便日常开发调试 + if (loginUser == null) { + loginUser = mockLoginUser(request, token, userType); + } + } catch (Throwable ex) { + CommonResult result = globalExceptionHandler.allExceptionHandler(request, ex); + ServletUtils.writeJSON(response, result); + return; + } + } + } + + // 设置当前用户 + if (loginUser != null) { + SecurityFrameworkUtils.setLoginUser(loginUser, request); + } + // 继续过滤链 + chain.doFilter(request, response); + } + + private LoginUser buildLoginUserByToken(String token, Integer userType) { + try { + // 校验访问令牌 + OAuth2AccessTokenCheckRespDTO accessToken = oauth2TokenApi.checkAccessToken(token).getCheckedData(); + if (accessToken == null) { + return null; + } + // 用户类型不匹配,无权限 + // 注意:只有 /admin-api/* 和 /app-api/* 有 userType,才需要比对用户类型 + // 类似 WebSocket 的 /ws/* 连接地址,是不需要比对用户类型的 + if (userType != null + && ObjectUtil.notEqual(accessToken.getUserType(), userType)) { + throw new AccessDeniedException("错误的用户类型"); + } + // 构建登录用户 + return new LoginUser().setId(accessToken.getUserId()).setUserType(accessToken.getUserType()) + .setInfo(accessToken.getUserInfo()) // 额外的用户信息 + .setTenantId(accessToken.getTenantId()).setScopes(accessToken.getScopes()); + } catch (ServiceException serviceException) { + // 校验 Token 不通过时,考虑到一些接口是无需登录的,所以直接返回 null 即可 + return null; + } + } + + /** + * 模拟登录用户,方便日常开发调试 + * + * 注意,在线上环境下,一定要关闭该功能!!! + * + * @param request 请求 + * @param token 模拟的 token,格式为 {@link SecurityProperties#getMockSecret()} + 用户编号 + * @param userType 用户类型 + * @return 模拟的 LoginUser + */ + private LoginUser mockLoginUser(HttpServletRequest request, String token, Integer userType) { + if (!securityProperties.getMockEnable()) { + return null; + } + // 必须以 mockSecret 开头 + if (!token.startsWith(securityProperties.getMockSecret())) { + return null; + } + // 构建模拟用户 + Long userId = Long.valueOf(token.substring(securityProperties.getMockSecret().length())); + return new LoginUser().setId(userId).setUserType(userType) + .setTenantId(WebFrameworkUtils.getTenantId(request)); + } + + private LoginUser buildLoginUserByHeader(HttpServletRequest request) { + String loginUserStr = request.getHeader(SecurityFrameworkUtils.LOGIN_USER_HEADER); + if (StrUtil.isEmpty(loginUserStr)) { + return null; + } + try { + loginUserStr = URLDecoder.decode(loginUserStr, StandardCharsets.UTF_8); // 解码,解决中文乱码问题 + return JsonUtils.parseObject(loginUserStr, LoginUser.class); + } catch (Exception ex) { + log.error("[buildLoginUserByHeader][解析 LoginUser({}) 发生异常]", loginUserStr, ex); ; + throw ex; + } + } + +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/handler/AccessDeniedHandlerImpl.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/handler/AccessDeniedHandlerImpl.java new file mode 100644 index 0000000..1607f1e --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/handler/AccessDeniedHandlerImpl.java @@ -0,0 +1,41 @@ +package com.win.framework.security.core.handler; + +import com.win.framework.common.exception.enums.GlobalErrorCodeConstants; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import com.win.framework.common.util.servlet.ServletUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.security.web.access.ExceptionTranslationFilter; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +import static com.win.framework.common.exception.enums.GlobalErrorCodeConstants.FORBIDDEN; + +/** + * 访问一个需要认证的 URL 资源,已经认证(登录)但是没有权限的情况下,返回 {@link GlobalErrorCodeConstants#FORBIDDEN} 错误码。 + * + * 补充:Spring Security 通过 {@link ExceptionTranslationFilter#handleAccessDeniedException(HttpServletRequest, HttpServletResponse, FilterChain, AccessDeniedException)} 方法,调用当前类 + * + * @author 芋道源码 + */ +@Slf4j +@SuppressWarnings("JavadocReference") +public class AccessDeniedHandlerImpl implements AccessDeniedHandler { + + @Override + public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException e) + throws IOException, ServletException { + // 打印 warn 的原因是,不定期合并 warn,看看有没恶意破坏 + log.warn("[commence][访问 URL({}) 时,用户({}) 权限不够]", request.getRequestURI(), + SecurityFrameworkUtils.getLoginUserId(), e); + // 返回 403 + ServletUtils.writeJSON(response, CommonResult.error(FORBIDDEN)); + } + +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/handler/AuthenticationEntryPointImpl.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/handler/AuthenticationEntryPointImpl.java new file mode 100644 index 0000000..ecd1666 --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/handler/AuthenticationEntryPointImpl.java @@ -0,0 +1,35 @@ +package com.win.framework.security.core.handler; + +import com.win.framework.common.exception.enums.GlobalErrorCodeConstants; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.servlet.ServletUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.security.web.access.ExceptionTranslationFilter; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import static com.win.framework.common.exception.enums.GlobalErrorCodeConstants.UNAUTHORIZED; + +/** + * 访问一个需要认证的 URL 资源,但是此时自己尚未认证(登录)的情况下,返回 {@link GlobalErrorCodeConstants#UNAUTHORIZED} 错误码,从而使前端重定向到登录页 + * + * 补充:Spring Security 通过 {@link ExceptionTranslationFilter#sendStartAuthentication(HttpServletRequest, HttpServletResponse, FilterChain, AuthenticationException)} 方法,调用当前类 + * + * @author ruoyi + */ +@Slf4j +@SuppressWarnings("JavadocReference") // 忽略文档引用报错 +public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint { + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) { + log.debug("[commence][访问 URL({}) 时,没有登录]", request.getRequestURI(), e); + // 返回 401 + ServletUtils.writeJSON(response, CommonResult.error(UNAUTHORIZED)); + } + +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/rpc/LoginUserRequestInterceptor.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/rpc/LoginUserRequestInterceptor.java new file mode 100644 index 0000000..f688a2e --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/rpc/LoginUserRequestInterceptor.java @@ -0,0 +1,37 @@ +package com.win.framework.security.core.rpc; + +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.security.core.LoginUser; +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import feign.RequestInterceptor; +import feign.RequestTemplate; +import lombok.extern.slf4j.Slf4j; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +/** + * LoginUser 的 RequestInterceptor 实现类:Feign 请求时,将 {@link LoginUser} 设置到 header 中,继续透传给被调用的服务 + * + * @author 芋道源码 + */ +@Slf4j +public class LoginUserRequestInterceptor implements RequestInterceptor { + + @Override + public void apply(RequestTemplate requestTemplate) { + LoginUser user = SecurityFrameworkUtils.getLoginUser(); + if (user == null) { + return; + } + try { + String userStr = JsonUtils.toJsonString(user); + userStr = URLEncoder.encode(userStr, StandardCharsets.UTF_8); // 编码,避免中文乱码 + requestTemplate.header(SecurityFrameworkUtils.LOGIN_USER_HEADER, userStr); + } catch (Exception ex) { + log.error("[apply][序列化 LoginUser({}) 发生异常]", user, ex); + throw ex; + } + } + +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/service/SecurityFrameworkService.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/service/SecurityFrameworkService.java new file mode 100644 index 0000000..442768e --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/service/SecurityFrameworkService.java @@ -0,0 +1,59 @@ +package com.win.framework.security.core.service; + +/** + * Security 框架 Service 接口,定义权限相关的校验操作 + * + * @author 芋道源码 + */ +public interface SecurityFrameworkService { + + /** + * 判断是否有权限 + * + * @param permission 权限 + * @return 是否 + */ + boolean hasPermission(String permission); + + /** + * 判断是否有权限,任一一个即可 + * + * @param permissions 权限 + * @return 是否 + */ + boolean hasAnyPermissions(String... permissions); + + /** + * 判断是否有角色 + * + * 注意,角色使用的是 SysRoleDO 的 code 标识 + * + * @param role 角色 + * @return 是否 + */ + boolean hasRole(String role); + + /** + * 判断是否有角色,任一一个即可 + * + * @param roles 角色数组 + * @return 是否 + */ + boolean hasAnyRoles(String... roles); + + /** + * 判断是否有授权 + * + * @param scope 授权 + * @return 是否 + */ + boolean hasScope(String scope); + + /** + * 判断是否有授权范围,任一一个即可 + * + * @param scope 授权范围数组 + * @return 是否 + */ + boolean hasAnyScopes(String... scope); +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/service/SecurityFrameworkServiceImpl.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/service/SecurityFrameworkServiceImpl.java new file mode 100644 index 0000000..ac7121a --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/service/SecurityFrameworkServiceImpl.java @@ -0,0 +1,101 @@ +package com.win.framework.security.core.service; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.HashUtil; +import cn.hutool.core.util.ObjectUtil; +import com.win.framework.common.core.KeyValue; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.cache.CacheUtils; +import com.win.framework.security.core.LoginUser; +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import com.win.module.system.api.permission.PermissionApi; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import lombok.AllArgsConstructor; +import lombok.SneakyThrows; + +import java.time.Duration; +import java.util.Arrays; +import java.util.List; + +import static com.win.framework.common.util.cache.CacheUtils.buildAsyncReloadingCache; +import static com.win.framework.common.util.cache.CacheUtils.buildCache; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +/** + * 默认的 {@link SecurityFrameworkService} 实现类 + * + * @author 芋道源码 + */ +@AllArgsConstructor +public class SecurityFrameworkServiceImpl implements SecurityFrameworkService { + + private final PermissionApi permissionApi; + + /** + * 针对 {@link #hasAnyRoles(String...)} 的缓存 + */ + private final LoadingCache>, Boolean> hasAnyRolesCache = buildCache( + Duration.ofMinutes(1L), // 过期时间 1 分钟 + new CacheLoader>, Boolean>() { + + @Override + public Boolean load(KeyValue> key) { + return permissionApi.hasAnyRoles(key.getKey(), key.getValue().toArray(new String[0])).getCheckedData(); + } + + }); + + /** + * 针对 {@link #hasAnyPermissions(String...)} 的缓存 + */ + private final LoadingCache>, Boolean> hasAnyPermissionsCache = buildCache( + Duration.ofMinutes(1L), // 过期时间 1 分钟 + new CacheLoader>, Boolean>() { + + @Override + public Boolean load(KeyValue> key) { + return permissionApi.hasAnyPermissions(key.getKey(), key.getValue().toArray(new String[0])).getCheckedData(); + } + + }); + + @Override + public boolean hasPermission(String permission) { + return hasAnyPermissions(permission); + } + + @Override + @SneakyThrows + public boolean hasAnyPermissions(String... permissions) { + return hasAnyPermissionsCache.get(new KeyValue<>(getLoginUserId(), Arrays.asList(permissions))); + } + + @Override + public boolean hasRole(String role) { + return hasAnyRoles(role); + } + + @Override + @SneakyThrows + public boolean hasAnyRoles(String... roles) { + return hasAnyRolesCache.get(new KeyValue<>(getLoginUserId(), Arrays.asList(roles))); + } + + @Override + public boolean hasScope(String scope) { + return hasAnyScopes(scope); + } + + @Override + public boolean hasAnyScopes(String... scope) { + LoginUser user = SecurityFrameworkUtils.getLoginUser(); + if (user == null) { + return false; + } + return CollUtil.containsAny(user.getScopes(), Arrays.asList(scope)); + } + +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/util/SecurityFrameworkUtils.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/util/SecurityFrameworkUtils.java new file mode 100644 index 0000000..eb73c0b --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/core/util/SecurityFrameworkUtils.java @@ -0,0 +1,142 @@ +package com.win.framework.security.core.util; + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.security.core.LoginUser; +import com.win.framework.web.core.util.WebFrameworkUtils; +import org.springframework.lang.Nullable; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; +import org.springframework.util.StringUtils; + +import jakarta.servlet.http.HttpServletRequest; +import java.util.Collections; + +/** + * 安全服务工具类 + * + * @author 芋道源码 + */ +public class SecurityFrameworkUtils { + + /** + * HEADER 认证头 value 的前缀 + */ + public static final String AUTHORIZATION_BEARER = "Bearer"; + + public static final String LOGIN_USER_HEADER = "login-user"; + + private SecurityFrameworkUtils() {} + + /** + * 从请求中,获得认证 Token + * + * @param request 请求 + * @param headerName 认证 Token 对应的 Header 名字 + * @param parameterName 认证 Token 对应的 Parameter 名字 + * @return 认证 Token + */ + public static String obtainAuthorization(HttpServletRequest request, + String headerName, String parameterName) { + // 1. 获得 Token。优先级:Header > Parameter + String token = request.getHeader(headerName); + if (StrUtil.isEmpty(token)) { + token = request.getParameter(parameterName); + } + if (!StringUtils.hasText(token)) { + return null; + } + // 2. 去除 Token 中带的 Bearer + int index = token.indexOf(AUTHORIZATION_BEARER + " "); + return index >= 0 ? token.substring(index + 7).trim() : token; + } + + /** + * 获得当前认证信息 + * + * @return 认证信息 + */ + public static Authentication getAuthentication() { + SecurityContext context = SecurityContextHolder.getContext(); + if (context == null) { + return null; + } + return context.getAuthentication(); + } + + /** + * 获取当前用户 + * + * @return 当前用户 + */ + @Nullable + public static LoginUser getLoginUser() { + Authentication authentication = getAuthentication(); + if (authentication == null) { + return null; + } + return authentication.getPrincipal() instanceof LoginUser ? (LoginUser) authentication.getPrincipal() : null; + } + + /** + * 获得当前用户的编号,从上下文中 + * + * @return 用户编号 + */ + @Nullable + public static Long getLoginUserId() { + LoginUser loginUser = getLoginUser(); + return loginUser != null ? loginUser.getId() : null; + } + + /** + * 获得当前用户的昵称,从上下文中 + * + * @return 昵称 + */ + @Nullable + public static String getLoginUserNickname() { + LoginUser loginUser = getLoginUser(); + return loginUser != null ? MapUtil.getStr(loginUser.getInfo(), LoginUser.INFO_KEY_NICKNAME) : null; + } + + /** + * 获得当前用户的部门编号,从上下文中 + * + * @return 部门编号 + */ + @Nullable + public static Long getLoginUserDeptId() { + LoginUser loginUser = getLoginUser(); + return loginUser != null ? MapUtil.getLong(loginUser.getInfo(), LoginUser.INFO_KEY_DEPT_ID) : null; + } + + /** + * 设置当前用户 + * + * @param loginUser 登录用户 + * @param request 请求 + */ + public static void setLoginUser(LoginUser loginUser, HttpServletRequest request) { + // 创建 Authentication,并设置到上下文 + Authentication authentication = buildAuthentication(loginUser, request); + SecurityContextHolder.getContext().setAuthentication(authentication); + + // 额外设置到 request 中,用于 ApiAccessLogFilter 可以获取到用户编号; + // 原因是,Spring Security 的 Filter 在 ApiAccessLogFilter 后面,在它记录访问日志时,线上上下文已经没有用户编号等信息 + WebFrameworkUtils.setLoginUserId(request, loginUser.getId()); + WebFrameworkUtils.setLoginUserType(request, loginUser.getUserType()); + } + + private static Authentication buildAuthentication(LoginUser loginUser, HttpServletRequest request) { + // 创建 UsernamePasswordAuthenticationToken 对象 + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken( + loginUser, null, Collections.emptyList()); + authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + return authenticationToken; + } + +} diff --git a/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/package-info.java b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/package-info.java new file mode 100644 index 0000000..ade6ce0 --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/java/com/win/framework/security/package-info.java @@ -0,0 +1,7 @@ +/** + * 基于 Spring Security 框架 + * 实现安全认证功能 + * + * @author 芋道源码 + */ +package com.win.framework.security; diff --git a/win-framework/win-spring-boot-starter-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/win-framework/win-spring-boot-starter-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..52a19f1 --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,5 @@ +com.win.framework.security.config.WinSecurityRpcAutoConfiguration +com.win.framework.security.config.WinSecurityAutoConfiguration +com.win.framework.security.config.WinWebSecurityConfigurerAdapter +com.win.framework.operatelog.config.WinOperateLogConfiguration +com.win.framework.operatelog.config.WinOperateLogRpcAutoConfiguration \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-security/《芋道 Spring Boot 安全框架 Spring Security 入门》.md b/win-framework/win-spring-boot-starter-security/《芋道 Spring Boot 安全框架 Spring Security 入门》.md new file mode 100644 index 0000000..e42ca54 --- /dev/null +++ b/win-framework/win-spring-boot-starter-security/《芋道 Spring Boot 安全框架 Spring Security 入门》.md @@ -0,0 +1,2 @@ +* 芋道 Spring Security 入门: +* Spring Security 基本概念: diff --git a/win-framework/win-spring-boot-starter-web/pom.xml b/win-framework/win-spring-boot-starter-web/pom.xml new file mode 100644 index 0000000..5a1dff2 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/pom.xml @@ -0,0 +1,100 @@ + + + + com.win + win-framework + ${revision} + + 4.0.0 + win-spring-boot-starter-web + jar + + ${project.artifactId} + Web 框架,全局异常、API 日志、脱敏、错误码等 + https://github.com/YunaiV/ruoyi-vue-pro + + + + com.win + win-common + + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + + org.springframework.security + spring-security-core + provided + + + + com.github.xiaoymin + knife4j-openapi3-jakarta-spring-boot-starter + + + org.springdoc + springdoc-openapi-starter-webmvc-api + + + + + com.win + win-spring-boot-starter-rpc + true + + + + + com.win + win-module-infra-api + ${revision} + + + com.win + win-module-system-api + ${revision} + + + + + org.jsoup + jsoup + + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.mockito + mockito-inline + test + + + backport-util-concurrent + backport-util-concurrent + 3.1 + + + + diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/config/WinApiLogAutoConfiguration.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/config/WinApiLogAutoConfiguration.java new file mode 100644 index 0000000..f6d53c3 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/config/WinApiLogAutoConfiguration.java @@ -0,0 +1,61 @@ +package com.win.framework.apilog.config; + +import com.win.framework.apilog.core.filter.ApiAccessLogFilter; +import com.win.framework.apilog.core.interceptor.ApiAccessLogInterceptor; +import com.win.framework.apilog.core.service.ApiAccessLogFrameworkService; +import com.win.framework.apilog.core.service.ApiAccessLogFrameworkServiceImpl; +import com.win.framework.apilog.core.service.ApiErrorLogFrameworkService; +import com.win.framework.apilog.core.service.ApiErrorLogFrameworkServiceImpl; +import com.win.framework.common.enums.WebFilterOrderEnum; +import com.win.framework.web.config.WebProperties; +import com.win.framework.web.config.WinWebAutoConfiguration; +import com.win.module.infra.api.logger.ApiAccessLogApi; +import com.win.module.infra.api.logger.ApiErrorLogApi; +import jakarta.servlet.Filter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@AutoConfiguration(after = WinWebAutoConfiguration.class) +public class WinApiLogAutoConfiguration implements WebMvcConfigurer { + + @Bean + @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") + public ApiAccessLogFrameworkService apiAccessLogFrameworkService(ApiAccessLogApi apiAccessLogApi) { + return new ApiAccessLogFrameworkServiceImpl(apiAccessLogApi); + } + + @Bean + @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") + public ApiErrorLogFrameworkService apiErrorLogFrameworkService(ApiErrorLogApi apiErrorLogApi) { + return new ApiErrorLogFrameworkServiceImpl(apiErrorLogApi); + } + + /** + * 创建 ApiAccessLogFilter Bean,记录 API 请求日志 + */ + @Bean + @ConditionalOnProperty(prefix = "win.access-log", value = "enable", matchIfMissing = true) // 允许使用 win.access-log.enable=false 禁用访问日志 + public FilterRegistrationBean apiAccessLogFilter(WebProperties webProperties, + @Value("${spring.application.name}") String applicationName, + ApiAccessLogFrameworkService apiAccessLogFrameworkService) { + ApiAccessLogFilter filter = new ApiAccessLogFilter(webProperties, applicationName, apiAccessLogFrameworkService); + return createFilterBean(filter, WebFilterOrderEnum.API_ACCESS_LOG_FILTER); + } + + private static FilterRegistrationBean createFilterBean(T filter, Integer order) { + FilterRegistrationBean bean = new FilterRegistrationBean<>(filter); + bean.setOrder(order); + return bean; + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new ApiAccessLogInterceptor()); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/config/WinApiLogRpcAutoConfiguration.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/config/WinApiLogRpcAutoConfiguration.java new file mode 100644 index 0000000..8e8eeea --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/config/WinApiLogRpcAutoConfiguration.java @@ -0,0 +1,18 @@ +package com.win.framework.apilog.config; + +import com.win.module.infra.api.logger.ApiAccessLogApi; +import com.win.module.infra.api.logger.ApiErrorLogApi; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; + +/** + * API 日志使用到 Feign 的配置项 + * + * @author 芋道源码 + */ +@AutoConfiguration +@EnableFeignClients(clients = {ApiAccessLogApi.class, // 主要是引入相关的 API 服务 + ApiErrorLogApi.class}) +public class WinApiLogRpcAutoConfiguration { +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/annotation/ApiAccessLog.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/annotation/ApiAccessLog.java new file mode 100644 index 0000000..2a081e9 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/annotation/ApiAccessLog.java @@ -0,0 +1,65 @@ +package com.win.framework.apilog.core.annotation; + +import com.win.framework.apilog.core.enums.OperateTypeEnum; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 访问日志注解 + * + * @author 芋道源码 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ApiAccessLog { + + // ========== 开关字段 ========== + + /** + * 是否记录访问日志 + */ + boolean enable() default true; + /** + * 是否记录请求参数 + * + * 默认记录,主要考虑请求数据一般不大。可手动设置为 false 进行关闭 + */ + boolean requestEnable() default true; + /** + * 是否记录响应结果 + * + * 默认不记录,主要考虑响应数据可能比较大。可手动设置为 true 进行打开 + */ + boolean responseEnable() default false; + /** + * 敏感参数数组 + * + * 添加后,请求参数、响应结果不会记录该参数 + */ + String[] sanitizeKeys() default {}; + + // ========== 模块字段 ========== + + /** + * 操作模块 + * + * 为空时,会尝试读取 {@link io.swagger.v3.oas.annotations.tags.Tag#name()} 属性 + */ + String operateModule() default ""; + /** + * 操作名 + * + * 为空时,会尝试读取 {@link io.swagger.v3.oas.annotations.Operation#summary()} 属性 + */ + String operateName() default ""; + /** + * 操作分类 + * + * 实际并不是数组,因为枚举不能设置 null 作为默认值 + */ + OperateTypeEnum[] operateType() default {}; + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/enums/OperateTypeEnum.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/enums/OperateTypeEnum.java new file mode 100644 index 0000000..70fda87 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/enums/OperateTypeEnum.java @@ -0,0 +1,51 @@ +package com.win.framework.apilog.core.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 操作日志的操作类型 + * + * @author ruoyi + */ +@Getter +@AllArgsConstructor +public enum OperateTypeEnum { + + /** + * 查询 + */ + GET(1), + /** + * 新增 + */ + CREATE(2), + /** + * 修改 + */ + UPDATE(3), + /** + * 删除 + */ + DELETE(4), + /** + * 导出 + */ + EXPORT(5), + /** + * 导入 + */ + IMPORT(6), + /** + * 其它 + * + * 在无法归类时,可以选择使用其它。因为还有操作名可以进一步标识 + */ + OTHER(0); + + /** + * 类型 + */ + private final Integer type; + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/filter/ApiAccessLogFilter.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/filter/ApiAccessLogFilter.java new file mode 100644 index 0000000..01ab568 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/filter/ApiAccessLogFilter.java @@ -0,0 +1,250 @@ +package com.win.framework.apilog.core.filter; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.exceptions.ExceptionUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.apilog.core.enums.OperateTypeEnum; +import com.win.framework.apilog.core.service.ApiAccessLogFrameworkService; +import com.win.framework.common.exception.enums.GlobalErrorCodeConstants; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.common.util.monitor.TracerUtils; +import com.win.framework.common.util.servlet.ServletUtils; +import com.win.framework.web.config.WebProperties; +import com.win.framework.web.core.filter.ApiRequestFilter; +import com.win.framework.web.core.util.WebFrameworkUtils; +import com.win.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; +import com.fasterxml.jackson.databind.JsonNode; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.method.HandlerMethod; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.Iterator; +import java.util.Map; + +import static com.win.framework.apilog.core.interceptor.ApiAccessLogInterceptor.*; +import static com.win.framework.common.util.json.JsonUtils.toJsonString; + +/** + * API 访问日志 Filter + * + * 目的:记录 API 访问日志到数据库中 + * + * @author 芋道源码 + */ +@Slf4j +public class ApiAccessLogFilter extends ApiRequestFilter { + + private static final String[] SANITIZE_KEYS = new String[]{"password", "token", "accessToken", "refreshToken"}; + + private final String applicationName; + + private final ApiAccessLogFrameworkService apiAccessLogFrameworkService; + + public ApiAccessLogFilter(WebProperties webProperties, String applicationName, ApiAccessLogFrameworkService apiAccessLogFrameworkService) { + super(webProperties); + this.applicationName = applicationName; + this.apiAccessLogFrameworkService = apiAccessLogFrameworkService; + } + + @Override + @SuppressWarnings("NullableProblems") + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException { + // 获得开始时间 + LocalDateTime beginTime = LocalDateTime.now(); + // 提前获得参数,避免 XssFilter 过滤处理 + Map queryString = ServletUtils.getParamMap(request); + String requestBody = ServletUtils.isJsonRequest(request) ? ServletUtils.getBody(request) : null; + + try { + // 继续过滤器 + filterChain.doFilter(request, response); + // 正常执行,记录日志 + createApiAccessLog(request, beginTime, queryString, requestBody, null); + } catch (Exception ex) { + // 异常执行,记录日志 + createApiAccessLog(request, beginTime, queryString, requestBody, ex); + throw ex; + } + } + + private void createApiAccessLog(HttpServletRequest request, LocalDateTime beginTime, + Map queryString, String requestBody, Exception ex) { + ApiAccessLogCreateReqDTO accessLog = new ApiAccessLogCreateReqDTO(); + try { + boolean enable = buildApiAccessLog(accessLog, request, beginTime, queryString, requestBody, ex); + if (!enable) { + return; + } + apiAccessLogFrameworkService.createApiAccessLog(accessLog); + } catch (Throwable th) { + log.error("[createApiAccessLog][url({}) log({}) 发生异常]", request.getRequestURI(), toJsonString(accessLog), th); + } + } + + private boolean buildApiAccessLog(ApiAccessLogCreateReqDTO accessLog, HttpServletRequest request, LocalDateTime beginTime, + Map queryString, String requestBody, Exception ex) { + // 判断:是否要记录操作日志 + HandlerMethod handlerMethod = (HandlerMethod) request.getAttribute(ATTRIBUTE_HANDLER_METHOD); + ApiAccessLog accessLogAnnotation = null; + if (handlerMethod != null) { + accessLogAnnotation = handlerMethod.getMethodAnnotation(ApiAccessLog.class); + if (accessLogAnnotation != null && BooleanUtil.isFalse(accessLogAnnotation.enable())) { + return false; + } + } + + // 处理用户信息 + accessLog.setUserId(WebFrameworkUtils.getLoginUserId(request)) + .setUserType(WebFrameworkUtils.getLoginUserType(request)); + // 设置访问结果 + CommonResult result = WebFrameworkUtils.getCommonResult(request); + if (result != null) { + accessLog.setResultCode(result.getCode()).setResultMsg(result.getMsg()); + } else if (ex != null) { + accessLog.setResultCode(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode()) + .setResultMsg(ExceptionUtil.getRootCauseMessage(ex)); + } else { + accessLog.setResultCode(GlobalErrorCodeConstants.SUCCESS.getCode()).setResultMsg(""); + } + // 设置请求字段 + accessLog.setTraceId(TracerUtils.getTraceId()).setApplicationName(applicationName) + .setRequestUrl(request.getRequestURI()).setRequestMethod(request.getMethod()) + .setUserAgent(ServletUtils.getUserAgent(request)).setUserIp(ServletUtils.getClientIP(request)); + String[] sanitizeKeys = accessLogAnnotation != null ? accessLogAnnotation.sanitizeKeys() : null; + Boolean requestEnable = accessLogAnnotation != null ? accessLogAnnotation.requestEnable() : Boolean.TRUE; + if (!BooleanUtil.isFalse(requestEnable)) { // 默认记录,所以判断 !false + Map requestParams = MapUtil.builder() + .put("query", sanitizeMap(queryString, sanitizeKeys)) + .put("body", sanitizeJson(requestBody, sanitizeKeys)).build(); + accessLog.setRequestParams(toJsonString(requestParams)); + } + Boolean responseEnable = accessLogAnnotation != null ? accessLogAnnotation.responseEnable() : Boolean.FALSE; + if (BooleanUtil.isTrue(responseEnable)) { // 默认不记录,默认强制要求 true + accessLog.setResponseBody(sanitizeJson(result, sanitizeKeys)); + } + // 持续时间 + accessLog.setBeginTime(beginTime).setEndTime(LocalDateTime.now()) + .setDuration((int) LocalDateTimeUtil.between(accessLog.getBeginTime(), accessLog.getEndTime(), ChronoUnit.MILLIS)); + + // 操作模块 + if (handlerMethod != null) { + Tag tagAnnotation = handlerMethod.getBeanType().getAnnotation(Tag.class); + Operation operationAnnotation = handlerMethod.getMethodAnnotation(Operation.class); + String operateModule = accessLogAnnotation != null ? accessLogAnnotation.operateModule() : + tagAnnotation != null ? StrUtil.nullToDefault(tagAnnotation.name(), tagAnnotation.description()) : null; + String operateName = accessLogAnnotation != null ? accessLogAnnotation.operateName() : + operationAnnotation != null ? operationAnnotation.summary() : null; + OperateTypeEnum operateType = accessLogAnnotation != null && accessLogAnnotation.operateType().length > 0 ? + accessLogAnnotation.operateType()[0] : parseOperateLogType(request); + accessLog.setOperateModule(operateModule).setOperateName(operateName).setOperateType(operateType.getType()); + } + return true; + } + + // ========== 解析 @ApiAccessLog、@Swagger 注解 ========== + + private static OperateTypeEnum parseOperateLogType(HttpServletRequest request) { + RequestMethod requestMethod = RequestMethod.resolve(request.getMethod()); + if (requestMethod == null) { + return OperateTypeEnum.OTHER; + } + switch (requestMethod) { + case GET: + return OperateTypeEnum.GET; + case POST: + return OperateTypeEnum.CREATE; + case PUT: + return OperateTypeEnum.UPDATE; + case DELETE: + return OperateTypeEnum.DELETE; + default: + return OperateTypeEnum.OTHER; + } + } + + // ========== 请求和响应的脱敏逻辑,移除类似 password、token 等敏感字段 ========== + + private static String sanitizeMap(Map map, String[] sanitizeKeys) { + if (CollUtil.isNotEmpty(map)) { + return null; + } + if (sanitizeKeys != null) { + MapUtil.removeAny(map, sanitizeKeys); + } + MapUtil.removeAny(map, SANITIZE_KEYS); + return JsonUtils.toJsonString(map); + } + + private static String sanitizeJson(String jsonString, String[] sanitizeKeys) { + if (StrUtil.isEmpty(jsonString)) { + return null; + } + try { + JsonNode rootNode = JsonUtils.parseTree(jsonString); + sanitizeJson(rootNode, sanitizeKeys); + return JsonUtils.toJsonString(rootNode); + } catch (Exception e) { + // 脱敏失败的情况下,直接忽略异常,避免影响用户请求 + log.error("[sanitizeJson][脱敏({}) 发生异常]", jsonString, e); + return jsonString; + } + } + + private static String sanitizeJson(CommonResult commonResult, String[] sanitizeKeys) { + if (commonResult == null) { + return null; + } + String jsonString = toJsonString(commonResult); + try { + JsonNode rootNode = JsonUtils.parseTree(jsonString); + sanitizeJson(rootNode.get("data"), sanitizeKeys); // 只处理 data 字段,不处理 code、msg 字段,避免错误被脱敏掉 + return JsonUtils.toJsonString(rootNode); + } catch (Exception e) { + // 脱敏失败的情况下,直接忽略异常,避免影响用户请求 + log.error("[sanitizeJson][脱敏({}) 发生异常]", jsonString, e); + return jsonString; + } + } + + private static void sanitizeJson(JsonNode node, String[] sanitizeKeys) { + // 情况一:数组,遍历处理 + if (node.isArray()) { + for (JsonNode childNode : node) { + sanitizeJson(childNode, sanitizeKeys); + } + return; + } + // 情况二:非 Object,只是某个值,直接返回 + if (!node.isObject()) { + return; + } + // 情况三:Object,遍历处理 + Iterator> iterator = node.properties().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (ArrayUtil.contains(sanitizeKeys, entry.getKey()) + || ArrayUtil.contains(SANITIZE_KEYS, entry.getKey())) { + iterator.remove(); + continue; + } + sanitizeJson(entry.getValue(), sanitizeKeys); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/interceptor/ApiAccessLogInterceptor.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/interceptor/ApiAccessLogInterceptor.java new file mode 100644 index 0000000..5f9374d --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/interceptor/ApiAccessLogInterceptor.java @@ -0,0 +1,67 @@ +package com.win.framework.apilog.core.interceptor; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.util.servlet.ServletUtils; +import com.win.framework.common.util.spring.SpringUtils; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.StopWatch; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; + +import java.util.Map; + +/** + * API 访问日志 Interceptor + * + * 目的:在非 prod 环境时,打印 request 和 response 两条日志到日志文件(控制台)中。 + * + * @author 芋道源码 + */ +@Slf4j +public class ApiAccessLogInterceptor implements HandlerInterceptor { + + public static final String ATTRIBUTE_HANDLER_METHOD = "HANDLER_METHOD"; + + private static final String ATTRIBUTE_STOP_WATCH = "ApiAccessLogInterceptor.StopWatch"; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + // 记录 HandlerMethod,提供给 ApiAccessLogFilter 使用 + HandlerMethod handlerMethod = handler instanceof HandlerMethod ? (HandlerMethod) handler : null; + if (handlerMethod != null) { + request.setAttribute(ATTRIBUTE_HANDLER_METHOD, handlerMethod); + } + + // 打印 request 日志 + if (!SpringUtils.isProd()) { + Map queryString = ServletUtils.getParamMap(request); + String requestBody = ServletUtils.isJsonRequest(request) ? ServletUtils.getBody(request) : null; + if (CollUtil.isEmpty(queryString) && StrUtil.isEmpty(requestBody)) { + log.info("[preHandle][开始请求 URL({}) 无参数]", request.getRequestURI()); + } else { + log.info("[preHandle][开始请求 URL({}) 参数({})]", request.getRequestURI(), + StrUtil.blankToDefault(requestBody, queryString.toString())); + } + // 计时 + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + request.setAttribute(ATTRIBUTE_STOP_WATCH, stopWatch); + } + return true; + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { + // 打印 response 日志 + if (!SpringUtils.isProd()) { + StopWatch stopWatch = (StopWatch) request.getAttribute(ATTRIBUTE_STOP_WATCH); + stopWatch.stop(); + log.info("[afterCompletion][完成请求 URL({}) 耗时({} ms)]", + request.getRequestURI(), stopWatch.getTotalTimeMillis()); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiAccessLogFrameworkService.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiAccessLogFrameworkService.java new file mode 100644 index 0000000..5f53c28 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiAccessLogFrameworkService.java @@ -0,0 +1,19 @@ +package com.win.framework.apilog.core.service; + +import com.win.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; + +/** + * API 访问日志 Framework Service 接口 + * + * @author 芋道源码 + */ +public interface ApiAccessLogFrameworkService { + + /** + * 创建 API 访问日志 + * + * @param reqDTO API 访问日志 + */ + void createApiAccessLog(ApiAccessLogCreateReqDTO reqDTO); + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiAccessLogFrameworkServiceImpl.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiAccessLogFrameworkServiceImpl.java new file mode 100644 index 0000000..b77e425 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiAccessLogFrameworkServiceImpl.java @@ -0,0 +1,26 @@ +package com.win.framework.apilog.core.service; + +import com.win.module.infra.api.logger.ApiAccessLogApi; +import com.win.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Async; + +/** + * API 访问日志 Framework Service 实现类 + * + * 基于 {@link ApiAccessLogApi} 服务,记录访问日志 + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +public class ApiAccessLogFrameworkServiceImpl implements ApiAccessLogFrameworkService { + + private final ApiAccessLogApi apiAccessLogApi; + + @Override + @Async + public void createApiAccessLog(ApiAccessLogCreateReqDTO reqDTO) { + apiAccessLogApi.createApiAccessLog(reqDTO); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiErrorLogFrameworkService.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiErrorLogFrameworkService.java new file mode 100644 index 0000000..39c54eb --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiErrorLogFrameworkService.java @@ -0,0 +1,19 @@ +package com.win.framework.apilog.core.service; + +import com.win.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; + +/** + * API 错误日志 Framework Service 接口 + * + * @author 芋道源码 + */ +public interface ApiErrorLogFrameworkService { + + /** + * 创建 API 错误日志 + * + * @param reqDTO API 错误日志 + */ + void createApiErrorLog(ApiErrorLogCreateReqDTO reqDTO); + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiErrorLogFrameworkServiceImpl.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiErrorLogFrameworkServiceImpl.java new file mode 100644 index 0000000..715d724 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/core/service/ApiErrorLogFrameworkServiceImpl.java @@ -0,0 +1,26 @@ +package com.win.framework.apilog.core.service; + +import com.win.module.infra.api.logger.ApiErrorLogApi; +import com.win.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Async; + +/** + * API 错误日志 Framework Service 实现类 + * + * 基于 {@link ApiErrorLogApi} 服务,记录错误日志 + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +public class ApiErrorLogFrameworkServiceImpl implements ApiErrorLogFrameworkService { + + private final ApiErrorLogApi apiErrorLogApi; + + @Override + @Async + public void createApiErrorLog(ApiErrorLogCreateReqDTO reqDTO) { + apiErrorLogApi.createApiErrorLog(reqDTO); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/package-info.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/package-info.java new file mode 100644 index 0000000..df97937 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/apilog/package-info.java @@ -0,0 +1,8 @@ +/** + * API 日志:包含两类 + * 1. API 访问日志:记录用户访问 API 的访问日志,定期归档历史日志。 + * 2. 异常日志:记录用户访问 API 的系统异常,方便日常排查问题与告警。 + * + * @author 芋道源码 + */ +package com.win.framework.apilog; diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/banner/config/WinBannerAutoConfiguration.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/banner/config/WinBannerAutoConfiguration.java new file mode 100644 index 0000000..58012af --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/banner/config/WinBannerAutoConfiguration.java @@ -0,0 +1,20 @@ +package com.win.framework.banner.config; + +import com.win.framework.banner.core.BannerApplicationRunner; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Bean; + +/** + * Banner 的自动配置类 + * + * @author 芋道源码 + */ +@AutoConfiguration +public class WinBannerAutoConfiguration { + + @Bean + public BannerApplicationRunner bannerApplicationRunner() { + return new BannerApplicationRunner(); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/banner/core/BannerApplicationRunner.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/banner/core/BannerApplicationRunner.java new file mode 100644 index 0000000..f94f4ea --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/banner/core/BannerApplicationRunner.java @@ -0,0 +1,50 @@ +package com.win.framework.banner.core; + +import cn.hutool.core.thread.ThreadUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; + +import java.util.concurrent.TimeUnit; + +/** + * 项目启动成功后,提供文档相关的地址 + * + * @author 芋道源码 + */ +@Slf4j +public class BannerApplicationRunner implements ApplicationRunner { + + @Override + public void run(ApplicationArguments args) { + ThreadUtil.execute(() -> { + ThreadUtil.sleep(1, TimeUnit.SECONDS); // 延迟 1 秒,保证输出到结尾 + log.info("\n----------------------------------------------------------\n\t" + + "项目启动成功!\n\t" + +// "接口文档: \t{} \n\t" + +// "开发文档: \t{} \n\t" + +// "视频教程: \t{} \n" + + "----------------------------------------------------------" +// "https://cloud.iocoder.cn/api-doc/", +// "https://cloud.iocoder.cn", +// "https://t.zsxq.com/02Yf6M7Qn" + ); + +// // 数据报表 +// System.out.println("[报表模块 win-module-report 教程][参考 https://cloud.iocoder.cn/report/ 开启]"); +// // 工作流 +// System.out.println("[工作流模块 win-module-bpm 教程][参考 https://cloud.iocoder.cn/bpm/ 开启]"); +// // 商城系统 +// System.out.println("[商城系统 win-module-mall 教程][参考 https://cloud.iocoder.cn/mall/build/ 开启]"); +// // ERP 系统 +// System.out.println("[ERP 系统 win-module-erp - 教程][参考 https://cloud.iocoder.cn/erp/build/ 开启]"); +// // CRM 系统 +// System.out.println("[CRM 系统 win-module-crm - 教程][参考 https://cloud.iocoder.cn/crm/build/ 开启]"); +// // 微信公众号 +// System.out.println("[微信公众号 win-module-mp 教程][参考 https://cloud.iocoder.cn/mp/build/ 开启]"); +// // 支付平台 +// System.out.println("[支付系统 win-module-pay - 教程][参考 https://doc.iocoder.cn/pay/build/ 开启]"); + }); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/banner/package-info.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/banner/package-info.java new file mode 100644 index 0000000..72ceca5 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/banner/package-info.java @@ -0,0 +1,6 @@ +/** + * Banner 用于在 console 控制台,打印开发文档、接口文档等 + * + * @author 芋道源码 + */ +package com.win.framework.banner; diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/base/annotation/DesensitizeBy.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/base/annotation/DesensitizeBy.java new file mode 100644 index 0000000..f70f9c4 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/base/annotation/DesensitizeBy.java @@ -0,0 +1,32 @@ +package com.win.framework.desensitize.core.base.annotation; + +import com.win.framework.desensitize.core.base.handler.DesensitizationHandler; +import com.win.framework.desensitize.core.base.serializer.StringDesensitizeSerializer; +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 顶级脱敏注解,自定义注解需要使用此注解 + * + * @author gaibu + */ +@Documented +@Target(ElementType.ANNOTATION_TYPE) +@Retention(RetentionPolicy.RUNTIME) +@JacksonAnnotationsInside // 此注解是其他所有 jackson 注解的元注解,打上了此注解的注解表明是 jackson 注解的一部分 +@JsonSerialize(using = StringDesensitizeSerializer.class) // 指定序列化器 +public @interface DesensitizeBy { + + /** + * 脱敏处理器 + */ + @SuppressWarnings("rawtypes") + Class handler(); + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/base/handler/DesensitizationHandler.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/base/handler/DesensitizationHandler.java new file mode 100644 index 0000000..2aaa1c1 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/base/handler/DesensitizationHandler.java @@ -0,0 +1,21 @@ +package com.win.framework.desensitize.core.base.handler; + +import java.lang.annotation.Annotation; + +/** + * 脱敏处理器接口 + * + * @author gaibu + */ +public interface DesensitizationHandler { + + /** + * 脱敏 + * + * @param origin 原始字符串 + * @param annotation 注解信息 + * @return 脱敏后的字符串 + */ + String desensitize(String origin, T annotation); + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/base/serializer/StringDesensitizeSerializer.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/base/serializer/StringDesensitizeSerializer.java new file mode 100644 index 0000000..2050129 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/base/serializer/StringDesensitizeSerializer.java @@ -0,0 +1,92 @@ +package com.win.framework.desensitize.core.base.serializer; + +import cn.hutool.core.annotation.AnnotationUtil; +import cn.hutool.core.lang.Singleton; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.desensitize.core.base.annotation.DesensitizeBy; +import com.win.framework.desensitize.core.base.handler.DesensitizationHandler; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.ContextualSerializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import lombok.Getter; +import lombok.Setter; + +import java.io.IOException; +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; + +/** + * 脱敏序列化器 + * + * 实现 JSON 返回数据时,使用 {@link DesensitizationHandler} 对声明脱敏注解的字段,进行脱敏处理。 + * + * @author gaibu + */ +@SuppressWarnings("rawtypes") +public class StringDesensitizeSerializer extends StdSerializer implements ContextualSerializer { + + @Getter + @Setter + private DesensitizationHandler desensitizationHandler; + + protected StringDesensitizeSerializer() { + super(String.class); + } + + @Override + public JsonSerializer createContextual(SerializerProvider serializerProvider, BeanProperty beanProperty) { + DesensitizeBy annotation = beanProperty.getAnnotation(DesensitizeBy.class); + if (annotation == null) { + return this; + } + // 创建一个 StringDesensitizeSerializer 对象,使用 DesensitizeBy 对应的处理器 + StringDesensitizeSerializer serializer = new StringDesensitizeSerializer(); + serializer.setDesensitizationHandler(Singleton.get(annotation.handler())); + return serializer; + } + + @Override + @SuppressWarnings("unchecked") + public void serialize(String value, JsonGenerator gen, SerializerProvider serializerProvider) throws IOException { + if (StrUtil.isBlank(value)) { + gen.writeNull(); + return; + } + // 获取序列化字段 + Field field = getField(gen); + + // 自定义处理器 + DesensitizeBy[] annotations = AnnotationUtil.getCombinationAnnotations(field, DesensitizeBy.class); + if (ArrayUtil.isEmpty(annotations)) { + gen.writeString(value); + return; + } + for (Annotation annotation : field.getAnnotations()) { + if (AnnotationUtil.hasAnnotation(annotation.annotationType(), DesensitizeBy.class)) { + value = this.desensitizationHandler.desensitize(value, annotation); + gen.writeString(value); + return; + } + } + gen.writeString(value); + } + + /** + * 获取字段 + * + * @param generator JsonGenerator + * @return 字段 + */ + private Field getField(JsonGenerator generator) { + String currentName = generator.getOutputContext().getCurrentName(); + Object currentValue = generator.getCurrentValue(); + Class currentValueClass = currentValue.getClass(); + return ReflectUtil.getField(currentValueClass, currentName); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/annotation/EmailDesensitize.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/annotation/EmailDesensitize.java new file mode 100644 index 0000000..f3e9c02 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/annotation/EmailDesensitize.java @@ -0,0 +1,36 @@ +package com.win.framework.desensitize.core.regex.annotation; + +import com.win.framework.desensitize.core.base.annotation.DesensitizeBy; +import com.win.framework.desensitize.core.regex.handler.EmailDesensitizationHandler; +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 邮箱脱敏注解 + * + * @author gaibu + */ +@Documented +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@JacksonAnnotationsInside +@DesensitizeBy(handler = EmailDesensitizationHandler.class) +public @interface EmailDesensitize { + + /** + * 匹配的正则表达式 + */ + String regex() default "(^.)[^@]*(@.*$)"; + + /** + * 替换规则,邮箱; + * + * 比如:example@gmail.com 脱敏之后为 e****@gmail.com + */ + String replacer() default "$1****$2"; +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/annotation/RegexDesensitize.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/annotation/RegexDesensitize.java new file mode 100644 index 0000000..166fdd1 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/annotation/RegexDesensitize.java @@ -0,0 +1,38 @@ +package com.win.framework.desensitize.core.regex.annotation; + +import com.win.framework.desensitize.core.base.annotation.DesensitizeBy; +import com.win.framework.desensitize.core.regex.handler.DefaultRegexDesensitizationHandler; +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 正则脱敏注解 + * + * @author gaibu + */ +@Documented +@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@JacksonAnnotationsInside +@DesensitizeBy(handler = DefaultRegexDesensitizationHandler.class) +public @interface RegexDesensitize { + + /** + * 匹配的正则表达式(默认匹配所有) + */ + String regex() default "^[\\s\\S]*$"; + + /** + * 替换规则,会将匹配到的字符串全部替换成 replacer + * + * 例如:regex=123; replacer=****** + * 原始字符串 123456789 + * 脱敏后字符串 ******456789 + */ + String replacer() default "******"; +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/handler/AbstractRegexDesensitizationHandler.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/handler/AbstractRegexDesensitizationHandler.java new file mode 100644 index 0000000..0b64e30 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/handler/AbstractRegexDesensitizationHandler.java @@ -0,0 +1,38 @@ +package com.win.framework.desensitize.core.regex.handler; + +import com.win.framework.desensitize.core.base.handler.DesensitizationHandler; + +import java.lang.annotation.Annotation; + +/** + * 正则表达式脱敏处理器抽象类,已实现通用的方法 + * + * @author gaibu + */ +public abstract class AbstractRegexDesensitizationHandler + implements DesensitizationHandler { + + @Override + public String desensitize(String origin, T annotation) { + String regex = getRegex(annotation); + String replacer = getReplacer(annotation); + return origin.replaceAll(regex, replacer); + } + + /** + * 获取注解上的 regex 参数 + * + * @param annotation 注解信息 + * @return 正则表达式 + */ + abstract String getRegex(T annotation); + + /** + * 获取注解上的 replacer 参数 + * + * @param annotation 注解信息 + * @return 待替换的字符串 + */ + abstract String getReplacer(T annotation); + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/handler/DefaultRegexDesensitizationHandler.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/handler/DefaultRegexDesensitizationHandler.java new file mode 100644 index 0000000..98a9ec0 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/handler/DefaultRegexDesensitizationHandler.java @@ -0,0 +1,21 @@ +package com.win.framework.desensitize.core.regex.handler; + +import com.win.framework.desensitize.core.regex.annotation.RegexDesensitize; + +/** + * {@link RegexDesensitize} 的正则脱敏处理器 + * + * @author gaibu + */ +public class DefaultRegexDesensitizationHandler extends AbstractRegexDesensitizationHandler { + + @Override + String getRegex(RegexDesensitize annotation) { + return annotation.regex(); + } + + @Override + String getReplacer(RegexDesensitize annotation) { + return annotation.replacer(); + } +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/handler/EmailDesensitizationHandler.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/handler/EmailDesensitizationHandler.java new file mode 100644 index 0000000..3872264 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/regex/handler/EmailDesensitizationHandler.java @@ -0,0 +1,22 @@ +package com.win.framework.desensitize.core.regex.handler; + +import com.win.framework.desensitize.core.regex.annotation.EmailDesensitize; + +/** + * {@link EmailDesensitize} 的脱敏处理器 + * + * @author gaibu + */ +public class EmailDesensitizationHandler extends AbstractRegexDesensitizationHandler { + + @Override + String getRegex(EmailDesensitize annotation) { + return annotation.regex(); + } + + @Override + String getReplacer(EmailDesensitize annotation) { + return annotation.replacer(); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/BankCardDesensitize.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/BankCardDesensitize.java new file mode 100644 index 0000000..b49ed70 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/BankCardDesensitize.java @@ -0,0 +1,40 @@ +package com.win.framework.desensitize.core.slider.annotation; + +import com.win.framework.desensitize.core.base.annotation.DesensitizeBy; +import com.win.framework.desensitize.core.slider.handler.BankCardDesensitization; +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 银行卡号 + * + * @author gaibu + */ +@Documented +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@JacksonAnnotationsInside +@DesensitizeBy(handler = BankCardDesensitization.class) +public @interface BankCardDesensitize { + + /** + * 前缀保留长度 + */ + int prefixKeep() default 6; + + /** + * 后缀保留长度 + */ + int suffixKeep() default 2; + + /** + * 替换规则,银行卡号; 比如:9988002866797031 脱敏之后为 998800********31 + */ + String replacer() default "*"; + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/CarLicenseDesensitize.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/CarLicenseDesensitize.java new file mode 100644 index 0000000..3fc7049 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/CarLicenseDesensitize.java @@ -0,0 +1,40 @@ +package com.win.framework.desensitize.core.slider.annotation; + +import com.win.framework.desensitize.core.base.annotation.DesensitizeBy; +import com.win.framework.desensitize.core.slider.handler.CarLicenseDesensitization; +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 车牌号 + * + * @author gaibu + */ +@Documented +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@JacksonAnnotationsInside +@DesensitizeBy(handler = CarLicenseDesensitization.class) +public @interface CarLicenseDesensitize { + + /** + * 前缀保留长度 + */ + int prefixKeep() default 3; + + /** + * 后缀保留长度 + */ + int suffixKeep() default 1; + + /** + * 替换规则,车牌号;比如:粤A66666 脱敏之后为粤A6***6 + */ + String replacer() default "*"; + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/ChineseNameDesensitize.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/ChineseNameDesensitize.java new file mode 100644 index 0000000..d5065c3 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/ChineseNameDesensitize.java @@ -0,0 +1,40 @@ +package com.win.framework.desensitize.core.slider.annotation; + +import com.win.framework.desensitize.core.base.annotation.DesensitizeBy; +import com.win.framework.desensitize.core.slider.handler.ChineseNameDesensitization; +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 中文名 + * + * @author gaibu + */ +@Documented +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@JacksonAnnotationsInside +@DesensitizeBy(handler = ChineseNameDesensitization.class) +public @interface ChineseNameDesensitize { + + /** + * 前缀保留长度 + */ + int prefixKeep() default 1; + + /** + * 后缀保留长度 + */ + int suffixKeep() default 0; + + /** + * 替换规则,中文名;比如:刘子豪脱敏之后为刘** + */ + String replacer() default "*"; + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/FixedPhoneDesensitize.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/FixedPhoneDesensitize.java new file mode 100644 index 0000000..ac0e78f --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/FixedPhoneDesensitize.java @@ -0,0 +1,40 @@ +package com.win.framework.desensitize.core.slider.annotation; + +import com.win.framework.desensitize.core.base.annotation.DesensitizeBy; +import com.win.framework.desensitize.core.slider.handler.FixedPhoneDesensitization; +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 固定电话 + * + * @author gaibu + */ +@Documented +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@JacksonAnnotationsInside +@DesensitizeBy(handler = FixedPhoneDesensitization.class) +public @interface FixedPhoneDesensitize { + + /** + * 前缀保留长度 + */ + int prefixKeep() default 4; + + /** + * 后缀保留长度 + */ + int suffixKeep() default 2; + + /** + * 替换规则,固定电话;比如:01086551122 脱敏之后为 0108*****22 + */ + String replacer() default "*"; + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/IdCardDesensitize.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/IdCardDesensitize.java new file mode 100644 index 0000000..b2ff3a0 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/IdCardDesensitize.java @@ -0,0 +1,40 @@ +package com.win.framework.desensitize.core.slider.annotation; + +import com.win.framework.desensitize.core.base.annotation.DesensitizeBy; +import com.win.framework.desensitize.core.slider.handler.IdCardDesensitization; +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 身份证 + * + * @author gaibu + */ +@Documented +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@JacksonAnnotationsInside +@DesensitizeBy(handler = IdCardDesensitization.class) +public @interface IdCardDesensitize { + + /** + * 前缀保留长度 + */ + int prefixKeep() default 6; + + /** + * 后缀保留长度 + */ + int suffixKeep() default 2; + + /** + * 替换规则,身份证号码;比如:530321199204074611 脱敏之后为 530321**********11 + */ + String replacer() default "*"; + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/MobileDesensitize.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/MobileDesensitize.java new file mode 100644 index 0000000..c83fb26 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/MobileDesensitize.java @@ -0,0 +1,40 @@ +package com.win.framework.desensitize.core.slider.annotation; + +import com.win.framework.desensitize.core.base.annotation.DesensitizeBy; +import com.win.framework.desensitize.core.slider.handler.MobileDesensitization; +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 手机号 + * + * @author gaibu + */ +@Documented +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@JacksonAnnotationsInside +@DesensitizeBy(handler = MobileDesensitization.class) +public @interface MobileDesensitize { + + /** + * 前缀保留长度 + */ + int prefixKeep() default 3; + + /** + * 后缀保留长度 + */ + int suffixKeep() default 4; + + /** + * 替换规则,手机号;比如:13248765917 脱敏之后为 132****5917 + */ + String replacer() default "*"; + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/PasswordDesensitize.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/PasswordDesensitize.java new file mode 100644 index 0000000..878e1db --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/PasswordDesensitize.java @@ -0,0 +1,42 @@ +package com.win.framework.desensitize.core.slider.annotation; + +import com.win.framework.desensitize.core.base.annotation.DesensitizeBy; +import com.win.framework.desensitize.core.slider.handler.PasswordDesensitization; +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 密码 + * + * @author gaibu + */ +@Documented +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@JacksonAnnotationsInside +@DesensitizeBy(handler = PasswordDesensitization.class) +public @interface PasswordDesensitize { + + /** + * 前缀保留长度 + */ + int prefixKeep() default 0; + + /** + * 后缀保留长度 + */ + int suffixKeep() default 0; + + /** + * 替换规则,密码; + * + * 比如:123456 脱敏之后为 ****** + */ + String replacer() default "*"; + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/SliderDesensitize.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/SliderDesensitize.java new file mode 100644 index 0000000..fe1c0e4 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/annotation/SliderDesensitize.java @@ -0,0 +1,43 @@ +package com.win.framework.desensitize.core.slider.annotation; + +import com.win.framework.desensitize.core.base.annotation.DesensitizeBy; +import com.win.framework.desensitize.core.slider.handler.DefaultDesensitizationHandler; +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 滑动脱敏注解 + * + * @author gaibu + */ +@Documented +@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@JacksonAnnotationsInside +@DesensitizeBy(handler = DefaultDesensitizationHandler.class) +public @interface SliderDesensitize { + + /** + * 后缀保留长度 + */ + int suffixKeep() default 0; + + /** + * 替换规则,会将前缀后缀保留后,全部替换成 replacer + * + * 例如:prefixKeep = 1; suffixKeep = 2; replacer = "*"; + * 原始字符串 123456 + * 脱敏后 1***56 + */ + String replacer() default "*"; + + /** + * 前缀保留长度 + */ + int prefixKeep() default 0; +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/AbstractSliderDesensitizationHandler.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/AbstractSliderDesensitizationHandler.java new file mode 100644 index 0000000..e7a0a5c --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/AbstractSliderDesensitizationHandler.java @@ -0,0 +1,78 @@ +package com.win.framework.desensitize.core.slider.handler; + +import com.win.framework.desensitize.core.base.handler.DesensitizationHandler; + +import java.lang.annotation.Annotation; + +/** + * 滑动脱敏处理器抽象类,已实现通用的方法 + * + * @author gaibu + */ +public abstract class AbstractSliderDesensitizationHandler + implements DesensitizationHandler { + + @Override + public String desensitize(String origin, T annotation) { + int prefixKeep = getPrefixKeep(annotation); + int suffixKeep = getSuffixKeep(annotation); + String replacer = getReplacer(annotation); + int length = origin.length(); + + // 情况一:原始字符串长度小于等于保留长度,则原始字符串全部替换 + if (prefixKeep >= length || suffixKeep >= length) { + return buildReplacerByLength(replacer, length); + } + + // 情况二:原始字符串长度小于等于前后缀保留字符串长度,则原始字符串全部替换 + if ((prefixKeep + suffixKeep) >= length) { + return buildReplacerByLength(replacer, length); + } + + // 情况三:原始字符串长度大于前后缀保留字符串长度,则替换中间字符串 + int interval = length - prefixKeep - suffixKeep; + return origin.substring(0, prefixKeep) + + buildReplacerByLength(replacer, interval) + + origin.substring(prefixKeep + interval); + } + + /** + * 根据长度循环构建替换符 + * + * @param replacer 替换符 + * @param length 长度 + * @return 构建后的替换符 + */ + private String buildReplacerByLength(String replacer, int length) { + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < length; i++) { + builder.append(replacer); + } + return builder.toString(); + } + + /** + * 前缀保留长度 + * + * @param annotation 注解信息 + * @return 前缀保留长度 + */ + abstract Integer getPrefixKeep(T annotation); + + /** + * 后缀保留长度 + * + * @param annotation 注解信息 + * @return 后缀保留长度 + */ + abstract Integer getSuffixKeep(T annotation); + + /** + * 替换符 + * + * @param annotation 注解信息 + * @return 替换符 + */ + abstract String getReplacer(T annotation); + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/BankCardDesensitization.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/BankCardDesensitization.java new file mode 100644 index 0000000..169cf42 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/BankCardDesensitization.java @@ -0,0 +1,27 @@ +package com.win.framework.desensitize.core.slider.handler; + +import com.win.framework.desensitize.core.slider.annotation.BankCardDesensitize; + +/** + * {@link BankCardDesensitize} 的脱敏处理器 + * + * @author gaibu + */ +public class BankCardDesensitization extends AbstractSliderDesensitizationHandler { + + @Override + Integer getPrefixKeep(BankCardDesensitize annotation) { + return annotation.prefixKeep(); + } + + @Override + Integer getSuffixKeep(BankCardDesensitize annotation) { + return annotation.suffixKeep(); + } + + @Override + String getReplacer(BankCardDesensitize annotation) { + return annotation.replacer(); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/CarLicenseDesensitization.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/CarLicenseDesensitization.java new file mode 100644 index 0000000..06446eb --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/CarLicenseDesensitization.java @@ -0,0 +1,25 @@ +package com.win.framework.desensitize.core.slider.handler; + +import com.win.framework.desensitize.core.slider.annotation.CarLicenseDesensitize; + +/** + * {@link CarLicenseDesensitize} 的脱敏处理器 + * + * @author gaibu + */ +public class CarLicenseDesensitization extends AbstractSliderDesensitizationHandler { + @Override + Integer getPrefixKeep(CarLicenseDesensitize annotation) { + return annotation.prefixKeep(); + } + + @Override + Integer getSuffixKeep(CarLicenseDesensitize annotation) { + return annotation.suffixKeep(); + } + + @Override + String getReplacer(CarLicenseDesensitize annotation) { + return annotation.replacer(); + } +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/ChineseNameDesensitization.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/ChineseNameDesensitization.java new file mode 100644 index 0000000..04eb5a4 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/ChineseNameDesensitization.java @@ -0,0 +1,27 @@ +package com.win.framework.desensitize.core.slider.handler; + +import com.win.framework.desensitize.core.slider.annotation.ChineseNameDesensitize; + +/** + * {@link ChineseNameDesensitize} 的脱敏处理器 + * + * @author gaibu + */ +public class ChineseNameDesensitization extends AbstractSliderDesensitizationHandler { + + @Override + Integer getPrefixKeep(ChineseNameDesensitize annotation) { + return annotation.prefixKeep(); + } + + @Override + Integer getSuffixKeep(ChineseNameDesensitize annotation) { + return annotation.suffixKeep(); + } + + @Override + String getReplacer(ChineseNameDesensitize annotation) { + return annotation.replacer(); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/DefaultDesensitizationHandler.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/DefaultDesensitizationHandler.java new file mode 100644 index 0000000..c17a491 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/DefaultDesensitizationHandler.java @@ -0,0 +1,25 @@ +package com.win.framework.desensitize.core.slider.handler; + +import com.win.framework.desensitize.core.slider.annotation.SliderDesensitize; + +/** + * {@link SliderDesensitize} 的脱敏处理器 + * + * @author gaibu + */ +public class DefaultDesensitizationHandler extends AbstractSliderDesensitizationHandler { + @Override + Integer getPrefixKeep(SliderDesensitize annotation) { + return annotation.prefixKeep(); + } + + @Override + Integer getSuffixKeep(SliderDesensitize annotation) { + return annotation.suffixKeep(); + } + + @Override + String getReplacer(SliderDesensitize annotation) { + return annotation.replacer(); + } +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/FixedPhoneDesensitization.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/FixedPhoneDesensitization.java new file mode 100644 index 0000000..09d47f0 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/FixedPhoneDesensitization.java @@ -0,0 +1,25 @@ +package com.win.framework.desensitize.core.slider.handler; + +import com.win.framework.desensitize.core.slider.annotation.FixedPhoneDesensitize; + +/** + * {@link FixedPhoneDesensitize} 的脱敏处理器 + * + * @author gaibu + */ +public class FixedPhoneDesensitization extends AbstractSliderDesensitizationHandler { + @Override + Integer getPrefixKeep(FixedPhoneDesensitize annotation) { + return annotation.prefixKeep(); + } + + @Override + Integer getSuffixKeep(FixedPhoneDesensitize annotation) { + return annotation.suffixKeep(); + } + + @Override + String getReplacer(FixedPhoneDesensitize annotation) { + return annotation.replacer(); + } +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/IdCardDesensitization.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/IdCardDesensitization.java new file mode 100644 index 0000000..1d0a767 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/IdCardDesensitization.java @@ -0,0 +1,25 @@ +package com.win.framework.desensitize.core.slider.handler; + +import com.win.framework.desensitize.core.slider.annotation.IdCardDesensitize; + +/** + * {@link IdCardDesensitize} 的脱敏处理器 + * + * @author gaibu + */ +public class IdCardDesensitization extends AbstractSliderDesensitizationHandler { + @Override + Integer getPrefixKeep(IdCardDesensitize annotation) { + return annotation.prefixKeep(); + } + + @Override + Integer getSuffixKeep(IdCardDesensitize annotation) { + return annotation.suffixKeep(); + } + + @Override + String getReplacer(IdCardDesensitize annotation) { + return annotation.replacer(); + } +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/MobileDesensitization.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/MobileDesensitization.java new file mode 100644 index 0000000..a26b169 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/MobileDesensitization.java @@ -0,0 +1,26 @@ +package com.win.framework.desensitize.core.slider.handler; + +import com.win.framework.desensitize.core.slider.annotation.MobileDesensitize; + +/** + * {@link MobileDesensitize} 的脱敏处理器 + * + * @author gaibu + */ +public class MobileDesensitization extends AbstractSliderDesensitizationHandler { + + @Override + Integer getPrefixKeep(MobileDesensitize annotation) { + return annotation.prefixKeep(); + } + + @Override + Integer getSuffixKeep(MobileDesensitize annotation) { + return annotation.suffixKeep(); + } + + @Override + String getReplacer(MobileDesensitize annotation) { + return annotation.replacer(); + } +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/PasswordDesensitization.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/PasswordDesensitization.java new file mode 100644 index 0000000..7e5a9b2 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/core/slider/handler/PasswordDesensitization.java @@ -0,0 +1,25 @@ +package com.win.framework.desensitize.core.slider.handler; + +import com.win.framework.desensitize.core.slider.annotation.PasswordDesensitize; + +/** + * {@link PasswordDesensitize} 的码脱敏处理器 + * + * @author gaibu + */ +public class PasswordDesensitization extends AbstractSliderDesensitizationHandler { + @Override + Integer getPrefixKeep(PasswordDesensitize annotation) { + return annotation.prefixKeep(); + } + + @Override + Integer getSuffixKeep(PasswordDesensitize annotation) { + return annotation.suffixKeep(); + } + + @Override + String getReplacer(PasswordDesensitize annotation) { + return annotation.replacer(); + } +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/package-info.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/package-info.java new file mode 100644 index 0000000..9c6dcb9 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/desensitize/package-info.java @@ -0,0 +1,4 @@ +/** + * 脱敏组件:支持 JSON 返回数据时,将邮箱、手机等字段进行脱敏 + */ +package com.win.framework.desensitize; diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/config/WinJacksonAutoConfiguration.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/config/WinJacksonAutoConfiguration.java new file mode 100644 index 0000000..986b27a --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/config/WinJacksonAutoConfiguration.java @@ -0,0 +1,52 @@ +package com.win.framework.jackson.config; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.jackson.core.databind.NumberSerializer; +import com.win.framework.jackson.core.databind.TimestampLocalDateTimeDeserializer; +import com.win.framework.jackson.core.databind.TimestampLocalDateTimeSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Bean; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.List; + +@AutoConfiguration +@Slf4j +public class WinJacksonAutoConfiguration { + + @Bean + @SuppressWarnings("InstantiationOfUtilityClass") + public JsonUtils jsonUtils(List objectMappers) { + // 1.1 创建 SimpleModule 对象 + SimpleModule simpleModule = new SimpleModule(); + simpleModule + // 新增 Long 类型序列化规则,数值超过 2^53-1,在 JS 会出现精度丢失问题,因此 Long 自动序列化为字符串类型 + .addSerializer(Long.class, NumberSerializer.INSTANCE) + .addSerializer(Long.TYPE, NumberSerializer.INSTANCE) + .addSerializer(LocalDate.class, LocalDateSerializer.INSTANCE) + .addDeserializer(LocalDate.class, LocalDateDeserializer.INSTANCE) + .addSerializer(LocalTime.class, LocalTimeSerializer.INSTANCE) + .addDeserializer(LocalTime.class, LocalTimeDeserializer.INSTANCE) + // 新增 LocalDateTime 序列化、反序列化规则,使用 Long 时间戳 + .addSerializer(LocalDateTime.class, TimestampLocalDateTimeSerializer.INSTANCE) + .addDeserializer(LocalDateTime.class, TimestampLocalDateTimeDeserializer.INSTANCE); + // 1.2 注册到 objectMapper + objectMappers.forEach(objectMapper -> objectMapper.registerModule(simpleModule)); + + // 2. 设置 objectMapper 到 JsonUtils + JsonUtils.init(CollUtil.getFirst(objectMappers)); + log.info("[init][初始化 JsonUtils 成功]"); + return new JsonUtils(); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/databind/NumberSerializer.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/databind/NumberSerializer.java new file mode 100644 index 0000000..1b01cf5 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/databind/NumberSerializer.java @@ -0,0 +1,37 @@ +package com.win.framework.jackson.core.databind; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JacksonStdImpl; + +import java.io.IOException; + +/** + * Long 序列化规则 + * + * 会将超长 long 值转换为 string,解决前端 JavaScript 最大安全整数是 2^53-1 的问题 + * + * @author 星语 + */ +@JacksonStdImpl +public class NumberSerializer extends com.fasterxml.jackson.databind.ser.std.NumberSerializer { + + private static final long MAX_SAFE_INTEGER = 9007199254740991L; + private static final long MIN_SAFE_INTEGER = -9007199254740991L; + + public static final NumberSerializer INSTANCE = new NumberSerializer(Number.class); + + public NumberSerializer(Class rawType) { + super(rawType); + } + + @Override + public void serialize(Number value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + // 超出范围 序列化位字符串 + if (value.longValue() > MIN_SAFE_INTEGER && value.longValue() < MAX_SAFE_INTEGER) { + super.serialize(value, gen, serializers); + } else { + gen.writeString(value.toString()); + } + } +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/databind/TimestampLocalDateTimeDeserializer.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/databind/TimestampLocalDateTimeDeserializer.java new file mode 100644 index 0000000..7ad1ca2 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/databind/TimestampLocalDateTimeDeserializer.java @@ -0,0 +1,27 @@ +package com.win.framework.jackson.core.databind; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; + +/** + * 基于时间戳的 LocalDateTime 反序列化器 + * + * @author 老五 + */ +public class TimestampLocalDateTimeDeserializer extends JsonDeserializer { + + public static final TimestampLocalDateTimeDeserializer INSTANCE = new TimestampLocalDateTimeDeserializer(); + + @Override + public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + // 将 Long 时间戳,转换为 LocalDateTime 对象 + return LocalDateTime.ofInstant(Instant.ofEpochMilli(p.getValueAsLong()), ZoneId.systemDefault()); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/databind/TimestampLocalDateTimeSerializer.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/databind/TimestampLocalDateTimeSerializer.java new file mode 100644 index 0000000..6692d8f --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/databind/TimestampLocalDateTimeSerializer.java @@ -0,0 +1,26 @@ +package com.win.framework.jackson.core.databind; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.ZoneId; + +/** + * 基于时间戳的 LocalDateTime 序列化器 + * + * @author 老五 + */ +public class TimestampLocalDateTimeSerializer extends JsonSerializer { + + public static final TimestampLocalDateTimeSerializer INSTANCE = new TimestampLocalDateTimeSerializer(); + + @Override + public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + // 将 LocalDateTime 对象,转换为 Long 时间戳 + gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/package-info.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/package-info.java new file mode 100644 index 0000000..d1951c2 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/jackson/core/package-info.java @@ -0,0 +1 @@ +package com.win.framework.jackson.core; diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/package-info.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/package-info.java new file mode 100644 index 0000000..e00af68 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/package-info.java @@ -0,0 +1,4 @@ +/** + * Web 框架,全局异常、API 日志等 + */ +package com.win.framework; diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/swagger/config/SwaggerProperties.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/swagger/config/SwaggerProperties.java new file mode 100644 index 0000000..acf9a8f --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/swagger/config/SwaggerProperties.java @@ -0,0 +1,60 @@ +package com.win.framework.swagger.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import jakarta.validation.constraints.NotEmpty; + +/** + * Swagger 配置属性 + * + * @author 芋道源码 + */ +@ConfigurationProperties("win.swagger") +@Data +public class SwaggerProperties { + + /** + * 标题 + */ + @NotEmpty(message = "标题不能为空") + private String title; + /** + * 描述 + */ + @NotEmpty(message = "描述不能为空") + private String description; + /** + * 作者 + */ + @NotEmpty(message = "作者不能为空") + private String author; + /** + * 版本 + */ + @NotEmpty(message = "版本不能为空") + private String version; + /** + * url + */ + @NotEmpty(message = "扫描的 package 不能为空") + private String url; + /** + * email + */ + @NotEmpty(message = "扫描的 email 不能为空") + private String email; + + /** + * license + */ + @NotEmpty(message = "扫描的 license 不能为空") + private String license; + + /** + * license-url + */ + @NotEmpty(message = "扫描的 license-url 不能为空") + private String licenseUrl; + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/swagger/config/WinSwaggerAutoConfiguration.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/swagger/config/WinSwaggerAutoConfiguration.java new file mode 100644 index 0000000..b63b9ac --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/swagger/config/WinSwaggerAutoConfiguration.java @@ -0,0 +1,161 @@ +package com.win.framework.swagger.config; + +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Contact; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.info.License; +import io.swagger.v3.oas.models.media.IntegerSchema; +import io.swagger.v3.oas.models.media.StringSchema; +import io.swagger.v3.oas.models.parameters.Parameter; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.security.SecurityScheme; +import org.springdoc.core.customizers.OpenApiBuilderCustomizer; +import org.springdoc.core.customizers.ServerBaseUrlCustomizer; +import org.springdoc.core.models.GroupedOpenApi; +import org.springdoc.core.properties.SpringDocConfigProperties; +import org.springdoc.core.providers.JavadocProvider; +import org.springdoc.core.service.OpenAPIService; +import org.springdoc.core.service.SecurityService; +import org.springdoc.core.utils.PropertyResolverUtils; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.http.HttpHeaders; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import static com.win.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID; + +/** + * Swagger 自动配置类,基于 OpenAPI + Springdoc 实现。 + * + * 友情提示: + * 1. Springdoc 文档地址:仓库 + * 2. Swagger 规范,于 2015 更名为 OpenAPI 规范,本质是一个东西 + * + * @author 芋道源码 + */ +@AutoConfiguration +@ConditionalOnClass({OpenAPI.class}) +@EnableConfigurationProperties(SwaggerProperties.class) +@ConditionalOnProperty(prefix = "springdoc.api-docs", name = "enabled", havingValue = "true", matchIfMissing = true) // 设置为 false 时,禁用 +public class WinSwaggerAutoConfiguration { + + // ========== 全局 OpenAPI 配置 ========== + + @Bean + public OpenAPI createApi(SwaggerProperties properties) { + Map securitySchemas = buildSecuritySchemes(); + OpenAPI openAPI = new OpenAPI() + // 接口信息 + .info(buildInfo(properties)) + // 接口安全配置 + .components(new Components().securitySchemes(securitySchemas)) + .addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION)); + securitySchemas.keySet().forEach(key -> openAPI.addSecurityItem(new SecurityRequirement().addList(key))); + return openAPI; + } + + /** + * API 摘要信息 + */ + private Info buildInfo(SwaggerProperties properties) { + return new Info() + .title(properties.getTitle()) + .description(properties.getDescription()) + .version(properties.getVersion()) + .contact(new Contact().name(properties.getAuthor()).url(properties.getUrl()).email(properties.getEmail())) + .license(new License().name(properties.getLicense()).url(properties.getLicenseUrl())); + } + + /** + * 安全模式,这里配置通过请求头 Authorization 传递 token 参数 + */ + private Map buildSecuritySchemes() { + Map securitySchemes = new HashMap<>(); + SecurityScheme securityScheme = new SecurityScheme() + .type(SecurityScheme.Type.APIKEY) // 类型 + .name(HttpHeaders.AUTHORIZATION) // 请求头的 name + .in(SecurityScheme.In.HEADER); // token 所在位置 + securitySchemes.put(HttpHeaders.AUTHORIZATION, securityScheme); + return securitySchemes; + } + + /** + * 自定义 OpenAPI 处理器 + */ + @Bean + @Primary // 目的:以我们创建的 OpenAPIService Bean 为主,避免一键改包后,启动报错! + public OpenAPIService openApiBuilder(Optional openAPI, + SecurityService securityParser, + SpringDocConfigProperties springDocConfigProperties, + PropertyResolverUtils propertyResolverUtils, + Optional> openApiBuilderCustomizers, + Optional> serverBaseUrlCustomizers, + Optional javadocProvider) { + + return new OpenAPIService(openAPI, securityParser, springDocConfigProperties, + propertyResolverUtils, openApiBuilderCustomizers, serverBaseUrlCustomizers, javadocProvider); + } + + // ========== 分组 OpenAPI 配置 ========== + + /** + * 所有模块的 API 分组 + */ + @Bean + public GroupedOpenApi allGroupedOpenApi() { + return buildGroupedOpenApi("all", ""); + } + + public static GroupedOpenApi buildGroupedOpenApi(String group) { + return buildGroupedOpenApi(group, group); + } + + public static GroupedOpenApi buildGroupedOpenApi(String group, String path) { + return GroupedOpenApi.builder() + .group(group) + .pathsToMatch("/admin-api/" + path + "/**", "/app-api/" + path + "/**") + .addOperationCustomizer((operation, handlerMethod) -> operation + .addParametersItem(buildTenantHeaderParameter()) + .addParametersItem(buildSecurityHeaderParameter())) + .build(); + } + + /** + * 构建 Tenant 租户编号请求头参数 + * + * @return 多租户参数 + */ + private static Parameter buildTenantHeaderParameter() { + return new Parameter() + .name(HEADER_TENANT_ID) // header 名 + .description("租户编号") // 描述 + .in(String.valueOf(SecurityScheme.In.HEADER)) // 请求 header + .schema(new IntegerSchema()._default(1L).name(HEADER_TENANT_ID).description("租户编号")); // 默认:使用租户编号为 1 + } + + /** + * 构建 Authorization 认证请求头参数 + * + * 解决 Knife4j Authorize 未生效,请求header里未包含参数 + * + * @return 认证参数 + */ + private static Parameter buildSecurityHeaderParameter() { + return new Parameter() + .name(HttpHeaders.AUTHORIZATION) // header 名 + .description("认证 Token") // 描述 + .in(String.valueOf(SecurityScheme.In.HEADER)) // 请求 header + .schema(new StringSchema()._default("Bearer test1").name(HEADER_TENANT_ID).description("认证 Token")); // 默认:使用用户编号为 1 + } + +} + diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/swagger/package-info.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/swagger/package-info.java new file mode 100644 index 0000000..8fafb3b --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/swagger/package-info.java @@ -0,0 +1,6 @@ +/** + * 基于 Swagger + Knife4j 实现 API 接口文档 + * + * @author 芋道源码 + */ +package com.win.framework.swagger; diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/config/WebProperties.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/config/WebProperties.java new file mode 100644 index 0000000..a560ac2 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/config/WebProperties.java @@ -0,0 +1,66 @@ +package com.win.framework.web.config; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +@ConfigurationProperties(prefix = "win.web") +@Validated +@Data +public class WebProperties { + + @NotNull(message = "APP API 不能为空") + private Api appApi = new Api("/app-api", "**.controller.app.**"); + @NotNull(message = "Admin API 不能为空") + private Api adminApi = new Api("/admin-api", "**.controller.admin.**"); + + @NotNull(message = "Admin UI 不能为空") + private Ui adminUi; + + @Data + @AllArgsConstructor + @NoArgsConstructor + @Valid + public static class Api { + + /** + * API 前缀,实现所有 Controller 提供的 RESTFul API 的统一前缀 + * + * + * 意义:通过该前缀,避免 Swagger、Actuator 意外通过 Nginx 暴露出来给外部,带来安全性问题 + * 这样,Nginx 只需要配置转发到 /api/* 的所有接口即可。 + * + * @see WinWebAutoConfiguration#configurePathMatch(PathMatchConfigurer) + */ + @NotEmpty(message = "API 前缀不能为空") + private String prefix; + + /** + * Controller 所在包的 Ant 路径规则 + * + * 主要目的是,给该 Controller 设置指定的 {@link #prefix} + */ + @NotEmpty(message = "Controller 所在包不能为空") + private String controller; + + } + + @Data + @Valid + public static class Ui { + + /** + * 访问地址 + */ + private String url; + + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/config/WinWebAutoConfiguration.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/config/WinWebAutoConfiguration.java new file mode 100644 index 0000000..03f9ffe --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/config/WinWebAutoConfiguration.java @@ -0,0 +1,131 @@ +package com.win.framework.web.config; + +import com.win.framework.apilog.core.service.ApiErrorLogFrameworkService; +import com.win.framework.common.enums.WebFilterOrderEnum; +import com.win.framework.web.core.filter.CacheRequestBodyFilter; +import com.win.framework.web.core.filter.DemoFilter; +import com.win.framework.web.core.handler.GlobalExceptionHandler; +import com.win.framework.web.core.handler.GlobalResponseBodyHandler; +import com.win.framework.web.core.util.WebFrameworkUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.util.AntPathMatcher; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; +import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import jakarta.annotation.Resource; +import jakarta.servlet.Filter; + +@AutoConfiguration +@EnableConfigurationProperties(WebProperties.class) +public class WinWebAutoConfiguration implements WebMvcConfigurer { + + @Resource + private WebProperties webProperties; + /** + * 应用名 + */ + @Value("${spring.application.name}") + private String applicationName; + + @Override + public void configurePathMatch(PathMatchConfigurer configurer) { + configurePathMatch(configurer, webProperties.getAdminApi()); + configurePathMatch(configurer, webProperties.getAppApi()); + } + + /** + * 设置 API 前缀,仅仅匹配 controller 包下的 + * + * @param configurer 配置 + * @param api API 配置 + */ + private void configurePathMatch(PathMatchConfigurer configurer, WebProperties.Api api) { + AntPathMatcher antPathMatcher = new AntPathMatcher("."); + configurer.addPathPrefix(api.getPrefix(), clazz -> clazz.isAnnotationPresent(RestController.class) + && antPathMatcher.match(api.getController(), clazz.getPackage().getName())); // 仅仅匹配 controller 包 + } + + @Bean + public GlobalExceptionHandler globalExceptionHandler(ApiErrorLogFrameworkService ApiErrorLogFrameworkService) { + return new GlobalExceptionHandler(applicationName, ApiErrorLogFrameworkService); + } + + @Bean + public GlobalResponseBodyHandler globalResponseBodyHandler() { + return new GlobalResponseBodyHandler(); + } + + @Bean + @SuppressWarnings("InstantiationOfUtilityClass") + public WebFrameworkUtils webFrameworkUtils(WebProperties webProperties) { + // 由于 WebFrameworkUtils 需要使用到 webProperties 属性,所以注册为一个 Bean + return new WebFrameworkUtils(webProperties); + } + + // ========== Filter 相关 ========== + + /** + * 创建 CorsFilter Bean,解决跨域问题 + */ + @Bean + public FilterRegistrationBean corsFilterBean() { + // 创建 CorsConfiguration 对象 + CorsConfiguration config = new CorsConfiguration(); + config.setAllowCredentials(true); + config.addAllowedOriginPattern("*"); // 设置访问源地址 + config.addAllowedHeader("*"); // 设置访问源请求头 + config.addAllowedMethod("*"); // 设置访问源请求方法 + // 创建 UrlBasedCorsConfigurationSource 对象 + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", config); // 对接口配置跨域设置 + return createFilterBean(new CorsFilter(source), WebFilterOrderEnum.CORS_FILTER); + } + + /** + * 创建 RequestBodyCacheFilter Bean,可重复读取请求内容 + */ + @Bean + public FilterRegistrationBean requestBodyCacheFilter() { + return createFilterBean(new CacheRequestBodyFilter(), WebFilterOrderEnum.REQUEST_BODY_CACHE_FILTER); + } + + /** + * 创建 DemoFilter Bean,演示模式 + */ + @Bean + @ConditionalOnProperty(value = "win.demo", havingValue = "true") + public FilterRegistrationBean demoFilter() { + return createFilterBean(new DemoFilter(), WebFilterOrderEnum.DEMO_FILTER); + } + + public static FilterRegistrationBean createFilterBean(T filter, Integer order) { + FilterRegistrationBean bean = new FilterRegistrationBean<>(filter); + bean.setOrder(order); + return bean; + } + + /** + * 创建 RestTemplate 实例 + * + * @param restTemplateBuilder {@link RestTemplateAutoConfiguration#restTemplateBuilder} + */ + @Bean + @ConditionalOnMissingBean + public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) { + return restTemplateBuilder.build(); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/ApiRequestFilter.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/ApiRequestFilter.java new file mode 100644 index 0000000..39be32f --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/ApiRequestFilter.java @@ -0,0 +1,27 @@ +package com.win.framework.web.core.filter; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.web.config.WebProperties; +import lombok.RequiredArgsConstructor; +import org.springframework.web.filter.OncePerRequestFilter; + +import jakarta.servlet.http.HttpServletRequest; + +/** + * 过滤 /admin-api、/app-api 等 API 请求的过滤器 + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +public abstract class ApiRequestFilter extends OncePerRequestFilter { + + protected final WebProperties webProperties; + + @Override + protected boolean shouldNotFilter(HttpServletRequest request) { + // 只过滤 API 请求的地址 + return !StrUtil.startWithAny(request.getRequestURI(), webProperties.getAdminApi().getPrefix(), + webProperties.getAppApi().getPrefix()); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/CacheRequestBodyFilter.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/CacheRequestBodyFilter.java new file mode 100644 index 0000000..ac92884 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/CacheRequestBodyFilter.java @@ -0,0 +1,31 @@ +package com.win.framework.web.core.filter; + +import com.win.framework.common.util.servlet.ServletUtils; +import org.springframework.web.filter.OncePerRequestFilter; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * Request Body 缓存 Filter,实现它的可重复读取 + * + * @author 芋道源码 + */ +public class CacheRequestBodyFilter extends OncePerRequestFilter { + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws IOException, ServletException { + filterChain.doFilter(new CacheRequestBodyWrapper(request), response); + } + + @Override + protected boolean shouldNotFilter(HttpServletRequest request) { + // 只处理 json 请求内容 + return !ServletUtils.isJsonRequest(request); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/CacheRequestBodyWrapper.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/CacheRequestBodyWrapper.java new file mode 100644 index 0000000..c1de5fe --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/CacheRequestBodyWrapper.java @@ -0,0 +1,68 @@ +package com.win.framework.web.core.filter; + +import com.win.framework.common.util.servlet.ServletUtils; + +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStreamReader; + +/** + * Request Body 缓存 Wrapper + * + * @author 芋道源码 + */ +public class CacheRequestBodyWrapper extends HttpServletRequestWrapper { + + /** + * 缓存的内容 + */ + private final byte[] body; + + public CacheRequestBodyWrapper(HttpServletRequest request) { + super(request); + body = ServletUtils.getBodyBytes(request); + } + + @Override + public BufferedReader getReader() throws IOException { + return new BufferedReader(new InputStreamReader(this.getInputStream())); + } + + @Override + public ServletInputStream getInputStream() throws IOException { + final ByteArrayInputStream inputStream = new ByteArrayInputStream(body); + // 返回 ServletInputStream + return new ServletInputStream() { + + @Override + public int read() { + return inputStream.read(); + } + + @Override + public boolean isFinished() { + return false; + } + + @Override + public boolean isReady() { + return false; + } + + @Override + public void setReadListener(ReadListener readListener) {} + + @Override + public int available() { + return body.length; + } + + }; + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/DemoFilter.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/DemoFilter.java new file mode 100644 index 0000000..79c49eb --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/filter/DemoFilter.java @@ -0,0 +1,35 @@ +package com.win.framework.web.core.filter; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.servlet.ServletUtils; +import com.win.framework.web.core.util.WebFrameworkUtils; +import org.springframework.web.filter.OncePerRequestFilter; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import static com.win.framework.common.exception.enums.GlobalErrorCodeConstants.DEMO_DENY; + +/** + * 演示 Filter,禁止用户发起写操作,避免影响测试数据 + * + * @author 芋道源码 + */ +public class DemoFilter extends OncePerRequestFilter { + + @Override + protected boolean shouldNotFilter(HttpServletRequest request) { + String method = request.getMethod(); + return !StrUtil.equalsAnyIgnoreCase(method, "POST", "PUT", "DELETE") // 写操作时,不进行过滤率 + || WebFrameworkUtils.getLoginUserId(request) == null; // 非登录用户时,不进行过滤 + } + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) { + // 直接返回 DEMO_DENY 的结果。即,请求不继续 + ServletUtils.writeJSON(response, CommonResult.error(DEMO_DENY)); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/handler/GlobalExceptionHandler.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..9b5c468 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/handler/GlobalExceptionHandler.java @@ -0,0 +1,334 @@ +package com.win.framework.web.core.handler; + +import cn.hutool.core.exceptions.ExceptionUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.servlet.JakartaServletUtil; +import com.win.framework.apilog.core.service.ApiErrorLogFrameworkService; +import com.win.framework.common.exception.ServiceException; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.collection.SetUtils; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.common.util.monitor.TracerUtils; +import com.win.framework.common.util.servlet.ServletUtils; +import com.win.framework.web.core.util.WebFrameworkUtils; +import com.win.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.ValidationException; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.util.Assert; +import org.springframework.validation.BindException; +import org.springframework.validation.FieldError; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; +import org.springframework.web.servlet.NoHandlerFoundException; + +import java.time.LocalDateTime; +import java.util.Map; +import java.util.Set; + +import static com.win.framework.common.exception.enums.GlobalErrorCodeConstants.*; + +/** + * 全局异常处理器,将 Exception 翻译成 CommonResult + 对应的异常编号 + * + * @author 芋道源码 + */ +@RestControllerAdvice +@AllArgsConstructor +@Slf4j +public class GlobalExceptionHandler { + + /** + * 忽略的 ServiceException 错误提示,避免打印过多 logger + */ + public static final Set IGNORE_ERROR_MESSAGES = SetUtils.asSet("无效的刷新令牌"); + + @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") + private final String applicationName; + + private final ApiErrorLogFrameworkService apiErrorLogFrameworkService; + + /** + * 处理所有异常,主要是提供给 Filter 使用 + * 因为 Filter 不走 SpringMVC 的流程,但是我们又需要兜底处理异常,所以这里提供一个全量的异常处理过程,保持逻辑统一。 + * + * @param request 请求 + * @param ex 异常 + * @return 通用返回 + */ + public CommonResult allExceptionHandler(HttpServletRequest request, Throwable ex) { + if (ex instanceof MissingServletRequestParameterException) { + return missingServletRequestParameterExceptionHandler((MissingServletRequestParameterException) ex); + } + if (ex instanceof MethodArgumentTypeMismatchException) { + return methodArgumentTypeMismatchExceptionHandler((MethodArgumentTypeMismatchException) ex); + } + if (ex instanceof MethodArgumentNotValidException) { + return methodArgumentNotValidExceptionExceptionHandler((MethodArgumentNotValidException) ex); + } + if (ex instanceof BindException) { + return bindExceptionHandler((BindException) ex); + } + if (ex instanceof ConstraintViolationException) { + return constraintViolationExceptionHandler((ConstraintViolationException) ex); + } + if (ex instanceof ValidationException) { + return validationException((ValidationException) ex); + } + if (ex instanceof NoHandlerFoundException) { + return noHandlerFoundExceptionHandler((NoHandlerFoundException) ex); + } + if (ex instanceof HttpRequestMethodNotSupportedException) { + return httpRequestMethodNotSupportedExceptionHandler((HttpRequestMethodNotSupportedException) ex); + } + if (ex instanceof ServiceException) { + return serviceExceptionHandler((ServiceException) ex); + } + if (ex instanceof AccessDeniedException) { + return accessDeniedExceptionHandler(request, (AccessDeniedException) ex); + } + return defaultExceptionHandler(request, ex); + } + + /** + * 处理 SpringMVC 请求参数缺失 + * + * 例如说,接口上设置了 @RequestParam("xx") 参数,结果并未传递 xx 参数 + */ + @ExceptionHandler(value = MissingServletRequestParameterException.class) + public CommonResult missingServletRequestParameterExceptionHandler(MissingServletRequestParameterException ex) { + log.warn("[missingServletRequestParameterExceptionHandler]", ex); + return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数缺失:%s", ex.getParameterName())); + } + + /** + * 处理 SpringMVC 请求参数类型错误 + * + * 例如说,接口上设置了 @RequestParam("xx") 参数为 Integer,结果传递 xx 参数类型为 String + */ + @ExceptionHandler(MethodArgumentTypeMismatchException.class) + public CommonResult methodArgumentTypeMismatchExceptionHandler(MethodArgumentTypeMismatchException ex) { + log.warn("[missingServletRequestParameterExceptionHandler]", ex); + return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数类型错误:%s", ex.getMessage())); + } + + /** + * 处理 SpringMVC 参数校验不正确 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public CommonResult methodArgumentNotValidExceptionExceptionHandler(MethodArgumentNotValidException ex) { + log.warn("[methodArgumentNotValidExceptionExceptionHandler]", ex); + FieldError fieldError = ex.getBindingResult().getFieldError(); + assert fieldError != null; // 断言,避免告警 + return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", fieldError.getDefaultMessage())); + } + + /** + * 处理 SpringMVC 参数绑定不正确,本质上也是通过 Validator 校验 + */ + @ExceptionHandler(BindException.class) + public CommonResult bindExceptionHandler(BindException ex) { + log.warn("[handleBindException]", ex); + FieldError fieldError = ex.getFieldError(); + assert fieldError != null; // 断言,避免告警 + return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", fieldError.getDefaultMessage())); + } + + /** + * 处理 Validator 校验不通过产生的异常 + */ + @ExceptionHandler(value = ConstraintViolationException.class) + public CommonResult constraintViolationExceptionHandler(ConstraintViolationException ex) { + log.warn("[constraintViolationExceptionHandler]", ex); + ConstraintViolation constraintViolation = ex.getConstraintViolations().iterator().next(); + return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", constraintViolation.getMessage())); + } + + /** + * 处理 Dubbo Consumer 本地参数校验时,抛出的 ValidationException 异常 + */ + @ExceptionHandler(value = ValidationException.class) + public CommonResult validationException(ValidationException ex) { + log.warn("[constraintViolationExceptionHandler]", ex); + // 无法拼接明细的错误信息,因为 Dubbo Consumer 抛出 ValidationException 异常时,是直接的字符串信息,且人类不可读 + return CommonResult.error(BAD_REQUEST); + } + + /** + * 处理 SpringMVC 请求地址不存在 + * + * 注意,它需要设置如下两个配置项: + * 1. spring.mvc.throw-exception-if-no-handler-found 为 true + * 2. spring.mvc.static-path-pattern 为 /statics/** + */ + @ExceptionHandler(NoHandlerFoundException.class) + public CommonResult noHandlerFoundExceptionHandler(NoHandlerFoundException ex) { + log.warn("[noHandlerFoundExceptionHandler]", ex); + return CommonResult.error(NOT_FOUND.getCode(), String.format("请求地址不存在:%s", ex.getRequestURL())); + } + + /** + * 处理 SpringMVC 请求方法不正确 + * + * 例如说,A 接口的方法为 GET 方式,结果请求方法为 POST 方式,导致不匹配 + */ + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public CommonResult httpRequestMethodNotSupportedExceptionHandler(HttpRequestMethodNotSupportedException ex) { + log.warn("[httpRequestMethodNotSupportedExceptionHandler]", ex); + return CommonResult.error(METHOD_NOT_ALLOWED.getCode(), String.format("请求方法不正确:%s", ex.getMessage())); + } + + /** + * 处理 Spring Security 权限不足的异常 + * + * 来源是,使用 @PreAuthorize 注解,AOP 进行权限拦截 + */ + @ExceptionHandler(value = AccessDeniedException.class) + public CommonResult accessDeniedExceptionHandler(HttpServletRequest req, AccessDeniedException ex) { + log.warn("[accessDeniedExceptionHandler][userId({}) 无法访问 url({})]", WebFrameworkUtils.getLoginUserId(req), + req.getRequestURL(), ex); + return CommonResult.error(FORBIDDEN); + } + + /** + * 处理业务异常 ServiceException + * + * 例如说,商品库存不足,用户手机号已存在。 + */ + @ExceptionHandler(value = ServiceException.class) + public CommonResult serviceExceptionHandler(ServiceException ex) { + if (!IGNORE_ERROR_MESSAGES.contains(ex.getMessage())) { + // 不包含的时候,才进行打印,避免 ex 堆栈过多 + log.info("[serviceExceptionHandler]", ex); + } + return CommonResult.error(ex.getCode(), ex.getMessage()); + } + + /** + * 处理系统异常,兜底处理所有的一切 + */ + @ExceptionHandler(value = Exception.class) + public CommonResult defaultExceptionHandler(HttpServletRequest req, Throwable ex) { + // 情况一:处理表不存在的异常 + CommonResult tableNotExistsResult = handleTableNotExists(ex); + if (tableNotExistsResult != null) { + return tableNotExistsResult; + } + + // 情况二:处理异常 + log.error("[defaultExceptionHandler]", ex); + // 插入异常日志 + createExceptionLog(req, ex); + // 返回 ERROR CommonResult + return CommonResult.error(INTERNAL_SERVER_ERROR.getCode(), INTERNAL_SERVER_ERROR.getMsg()); + } + + private void createExceptionLog(HttpServletRequest req, Throwable e) { + // 插入错误日志 + ApiErrorLogCreateReqDTO errorLog = new ApiErrorLogCreateReqDTO(); + try { + // 初始化 errorLog + buildExceptionLog(errorLog, req, e); + // 执行插入 errorLog + apiErrorLogFrameworkService.createApiErrorLog(errorLog); + } catch (Throwable th) { + log.error("[createExceptionLog][url({}) log({}) 发生异常]", req.getRequestURI(), JsonUtils.toJsonString(errorLog), th); + } + } + + private void buildExceptionLog(ApiErrorLogCreateReqDTO errorLog, HttpServletRequest request, Throwable e) { + // 处理用户信息 + errorLog.setUserId(WebFrameworkUtils.getLoginUserId(request)); + errorLog.setUserType(WebFrameworkUtils.getLoginUserType(request)); + // 设置异常字段 + errorLog.setExceptionName(e.getClass().getName()); + errorLog.setExceptionMessage(ExceptionUtil.getMessage(e)); + errorLog.setExceptionRootCauseMessage(ExceptionUtil.getRootCauseMessage(e)); + errorLog.setExceptionStackTrace(ExceptionUtil.stacktraceToString(e)); + StackTraceElement[] stackTraceElements = e.getStackTrace(); + Assert.notEmpty(stackTraceElements, "异常 stackTraceElements 不能为空"); + StackTraceElement stackTraceElement = stackTraceElements[0]; + errorLog.setExceptionClassName(stackTraceElement.getClassName()); + errorLog.setExceptionFileName(stackTraceElement.getFileName()); + errorLog.setExceptionMethodName(stackTraceElement.getMethodName()); + errorLog.setExceptionLineNumber(stackTraceElement.getLineNumber()); + // 设置其它字段 + errorLog.setTraceId(TracerUtils.getTraceId()); + errorLog.setApplicationName(applicationName); + errorLog.setRequestUrl(request.getRequestURI()); + Map requestParams = MapUtil.builder() + .put("query", JakartaServletUtil.getParamMap(request)) + .put("body", JakartaServletUtil.getBody(request)).build(); + errorLog.setRequestParams(JsonUtils.toJsonString(requestParams)); + errorLog.setRequestMethod(request.getMethod()); + errorLog.setUserAgent(ServletUtils.getUserAgent(request)); + errorLog.setUserIp(JakartaServletUtil.getClientIP(request)); + errorLog.setExceptionTime(LocalDateTime.now()); + } + + /** + * 处理 Table 不存在的异常情况 + * + * @param ex 异常 + * @return 如果是 Table 不存在的异常,则返回对应的 CommonResult + */ + private CommonResult handleTableNotExists(Throwable ex) { + String message = ExceptionUtil.getRootCauseMessage(ex); + if (!message.contains("doesn't exist")) { + return null; + } + // 1. 数据报表 + if (message.contains("report_")) { + log.error("[报表模块 win-module-report - 表结构未导入][参考 https://doc.iocoder.cn/report/ 开启]"); + return CommonResult.error(NOT_IMPLEMENTED.getCode(), + "[报表模块 win-module-report - 表结构未导入][参考 https://doc.iocoder.cn/report/ 开启]"); + } + // 2. 工作流 + if (message.contains("bpm_")) { + log.error("[工作流模块 win-module-bpm - 表结构未导入][参考 https://doc.iocoder.cn/bpm/ 开启]"); + return CommonResult.error(NOT_IMPLEMENTED.getCode(), + "[工作流模块 win-module-bpm - 表结构未导入][参考 https://doc.iocoder.cn/bpm/ 开启]"); + } + // 3. 微信公众号 + if (message.contains("mp_")) { + log.error("[微信公众号 win-module-mp - 表结构未导入][参考 https://doc.iocoder.cn/mp/build/ 开启]"); + return CommonResult.error(NOT_IMPLEMENTED.getCode(), + "[微信公众号 win-module-mp - 表结构未导入][参考 https://doc.iocoder.cn/mp/build/ 开启]"); + } + // 4. 商城系统 + if (StrUtil.containsAny(message, "product_", "promotion_", "trade_")) { + log.error("[商城系统 win-module-mall - 已禁用][参考 https://doc.iocoder.cn/mall/build/ 开启]"); + return CommonResult.error(NOT_IMPLEMENTED.getCode(), + "[商城系统 win-module-mall - 已禁用][参考 https://doc.iocoder.cn/mall/build/ 开启]"); + } + // 5. ERP 系统 + if (message.contains("erp_")) { + log.error("[ERP 系统 win-module-erp - 表结构未导入][参考 https://doc.iocoder.cn/erp/build/ 开启]"); + return CommonResult.error(NOT_IMPLEMENTED.getCode(), + "[ERP 系统 win-module-erp - 表结构未导入][参考 https://doc.iocoder.cn/erp/build/ 开启]"); + } + // 6. CRM 系统 + if (message.contains("crm_")) { + log.error("[CRM 系统 win-module-crm - 表结构未导入][参考 https://doc.iocoder.cn/crm/build/ 开启]"); + return CommonResult.error(NOT_IMPLEMENTED.getCode(), + "[CRM 系统 win-module-crm - 表结构未导入][参考 https://doc.iocoder.cn/crm/build/ 开启]"); + } + // 7. 支付平台 + if (message.contains("pay_")) { + log.error("[支付模块 win-module-pay - 表结构未导入][参考 https://doc.iocoder.cn/pay/build/ 开启]"); + return CommonResult.error(NOT_IMPLEMENTED.getCode(), + "[支付模块 win-module-pay - 表结构未导入][参考 https://doc.iocoder.cn/pay/build/ 开启]"); + } + return null; + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/handler/GlobalResponseBodyHandler.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/handler/GlobalResponseBodyHandler.java new file mode 100644 index 0000000..f006b3a --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/handler/GlobalResponseBodyHandler.java @@ -0,0 +1,45 @@ +package com.win.framework.web.core.handler; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.web.core.util.WebFrameworkUtils; +import org.springframework.core.MethodParameter; +import org.springframework.http.MediaType; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.http.server.ServletServerHttpRequest; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +/** + * 全局响应结果(ResponseBody)处理器 + * + * 不同于在网上看到的很多文章,会选择自动将 Controller 返回结果包上 {@link CommonResult}, + * 在 onemall 中,是 Controller 在返回时,主动自己包上 {@link CommonResult}。 + * 原因是,GlobalResponseBodyHandler 本质上是 AOP,它不应该改变 Controller 返回的数据结构 + * + * 目前,GlobalResponseBodyHandler 的主要作用是,记录 Controller 的返回结果, + * 方便 {@link com.win.framework.apilog.core.filter.ApiAccessLogFilter} 记录访问日志 + */ +@ControllerAdvice +public class GlobalResponseBodyHandler implements ResponseBodyAdvice { + + @Override + @SuppressWarnings("NullableProblems") // 避免 IDEA 警告 + public boolean supports(MethodParameter returnType, Class converterType) { + if (returnType.getMethod() == null) { + return false; + } + // 只拦截返回结果为 CommonResult 类型 + return returnType.getMethod().getReturnType() == CommonResult.class; + } + + @Override + @SuppressWarnings("NullableProblems") // 避免 IDEA 警告 + public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, + ServerHttpRequest request, ServerHttpResponse response) { + // 记录 Controller 结果 + WebFrameworkUtils.setCommonResult(((ServletServerHttpRequest) request).getServletRequest(), (CommonResult) body); + return body; + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/util/WebFrameworkUtils.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/util/WebFrameworkUtils.java new file mode 100644 index 0000000..f7c1f14 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/core/util/WebFrameworkUtils.java @@ -0,0 +1,169 @@ +package com.win.framework.web.core.util; + +import cn.hutool.core.util.NumberUtil; +import cn.hutool.extra.servlet.ServletUtil; +import com.win.framework.common.enums.RpcConstants; +import com.win.framework.common.enums.TerminalEnum; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.servlet.ServletUtils; +import com.win.framework.web.config.WebProperties; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import jakarta.servlet.ServletRequest; +import jakarta.servlet.http.HttpServletRequest; + +/** + * 专属于 web 包的工具类 + * + * @author 芋道源码 + */ +public class WebFrameworkUtils { + + private static final String REQUEST_ATTRIBUTE_LOGIN_USER_ID = "login_user_id"; + private static final String REQUEST_ATTRIBUTE_LOGIN_USER_TYPE = "login_user_type"; + + private static final String REQUEST_ATTRIBUTE_COMMON_RESULT = "common_result"; + + public static final String HEADER_TENANT_ID = "tenant-id"; + + /** + * 终端的 Header + * + * @see com.win.framework.common.enums.TerminalEnum + */ + public static final String HEADER_TERMINAL = "terminal"; + + private static WebProperties properties; + + public WebFrameworkUtils(WebProperties webProperties) { + WebFrameworkUtils.properties = webProperties; + } + + /** + * 获得租户编号,从 header 中 + * 考虑到其它 framework 组件也会使用到租户编号,所以不得不放在 WebFrameworkUtils 统一提供 + * + * @param request 请求 + * @return 租户编号 + */ + public static Long getTenantId(HttpServletRequest request) { + String tenantId = request.getHeader(HEADER_TENANT_ID); + return NumberUtil.isNumber(tenantId) ? Long.valueOf(tenantId) : null; + } + + public static void setLoginUserId(ServletRequest request, Long userId) { + request.setAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_ID, userId); + } + + /** + * 设置用户类型 + * + * @param request 请求 + * @param userType 用户类型 + */ + public static void setLoginUserType(ServletRequest request, Integer userType) { + request.setAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_TYPE, userType); + } + + /** + * 获得当前用户的编号,从请求中 + * 注意:该方法仅限于 framework 框架使用!!! + * + * @param request 请求 + * @return 用户编号 + */ + public static Long getLoginUserId(HttpServletRequest request) { + if (request == null) { + return null; + } + return (Long) request.getAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_ID); + } + + /** + * 获得当前用户的类型 + * 注意:该方法仅限于 web 相关的 framework 组件使用!!! + * + * @param request 请求 + * @return 用户编号 + */ + public static Integer getLoginUserType(HttpServletRequest request) { + if (request == null) { + return null; + } + // 1. 优先,从 Attribute 中获取 + Integer userType = (Integer) request.getAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_TYPE); + if (userType != null) { + return userType; + } + // 2. 其次,基于 URL 前缀的约定 + if (request.getServletPath().startsWith(properties.getAdminApi().getPrefix())) { + return UserTypeEnum.ADMIN.getValue(); + } + if (request.getServletPath().startsWith(properties.getAppApi().getPrefix())) { + return UserTypeEnum.MEMBER.getValue(); + } + return null; + } + + public static Integer getLoginUserType() { + HttpServletRequest request = getRequest(); + return getLoginUserType(request); + } + + public static Long getLoginUserId() { + HttpServletRequest request = getRequest(); + return getLoginUserId(request); + } + + public static Integer getTerminal() { + HttpServletRequest request = getRequest(); + if (request == null) { + return TerminalEnum.UNKNOWN.getTerminal(); + } + String terminalValue = request.getHeader(HEADER_TERMINAL); + return NumberUtil.parseInt(terminalValue, TerminalEnum.UNKNOWN.getTerminal()); + } + + public static void setCommonResult(ServletRequest request, CommonResult result) { + request.setAttribute(REQUEST_ATTRIBUTE_COMMON_RESULT, result); + } + + public static CommonResult getCommonResult(ServletRequest request) { + return (CommonResult) request.getAttribute(REQUEST_ATTRIBUTE_COMMON_RESULT); + } + + public static HttpServletRequest getRequest() { + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + if (!(requestAttributes instanceof ServletRequestAttributes)) { + return null; + } + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes; + return servletRequestAttributes.getRequest(); + } + + /** + * 判断是否为 RPC 请求 + * + * @param request 请求 + * @return 是否为 RPC 请求 + */ + public static boolean isRpcRequest(HttpServletRequest request) { + return request.getRequestURI().startsWith(RpcConstants.RPC_API_PREFIX); + } + + /** + * 判断是否为 RPC 请求 + * + * 约定大于配置,只要以 Api 结尾,都认为是 RPC 接口 + * + * @param className 类名 + * @return 是否为 RPC 请求 + */ + public static boolean isRpcRequest(String className) { + return className.endsWith("Api"); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/package-info.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/package-info.java new file mode 100644 index 0000000..2c269be --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/web/package-info.java @@ -0,0 +1,4 @@ +/** + * 针对 SpringMVC 的基础封装 + */ +package com.win.framework.web; diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/config/WinXssAutoConfiguration.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/config/WinXssAutoConfiguration.java new file mode 100644 index 0000000..bfd898c --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/config/WinXssAutoConfiguration.java @@ -0,0 +1,63 @@ +package com.win.framework.xss.config; + +import com.win.framework.common.enums.WebFilterOrderEnum; +import com.win.framework.xss.core.clean.JsoupXssCleaner; +import com.win.framework.xss.core.clean.XssCleaner; +import com.win.framework.xss.core.filter.XssFilter; +import com.win.framework.xss.core.json.XssStringJsonDeserializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.util.PathMatcher; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import static com.win.framework.web.config.WinWebAutoConfiguration.createFilterBean; + +@AutoConfiguration +@EnableConfigurationProperties(XssProperties.class) +@ConditionalOnProperty(prefix = "win.xss", name = "enable", havingValue = "true", matchIfMissing = true) // 设置为 false 时,禁用 +public class WinXssAutoConfiguration implements WebMvcConfigurer { + + /** + * Xss 清理者 + * + * @return XssCleaner + */ + @Bean + @ConditionalOnMissingBean(XssCleaner.class) + public XssCleaner xssCleaner() { + return new JsoupXssCleaner(); + } + + /** + * 注册 Jackson 的序列化器,用于处理 json 类型参数的 xss 过滤 + * + * @return Jackson2ObjectMapperBuilderCustomizer + */ + @Bean + @ConditionalOnMissingBean(name = "xssJacksonCustomizer") + @ConditionalOnBean(ObjectMapper.class) + @ConditionalOnProperty(value = "win.xss.enable", havingValue = "true") + public Jackson2ObjectMapperBuilderCustomizer xssJacksonCustomizer(XssProperties properties, + PathMatcher pathMatcher, + XssCleaner xssCleaner) { + // 在反序列化时进行 xss 过滤,可以替换使用 XssStringJsonSerializer,在序列化时进行处理 + return builder -> builder.deserializerByType(String.class, new XssStringJsonDeserializer(properties, pathMatcher, xssCleaner)); + } + + /** + * 创建 XssFilter Bean,解决 Xss 安全问题 + */ + @Bean + @ConditionalOnBean(XssCleaner.class) + public FilterRegistrationBean xssFilter(XssProperties properties, PathMatcher pathMatcher, XssCleaner xssCleaner) { + return createFilterBean(new XssFilter(properties, pathMatcher, xssCleaner), WebFilterOrderEnum.XSS_FILTER); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/config/XssProperties.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/config/XssProperties.java new file mode 100644 index 0000000..0ef3ad4 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/config/XssProperties.java @@ -0,0 +1,29 @@ +package com.win.framework.xss.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; + +import java.util.Collections; +import java.util.List; + +/** + * Xss 配置属性 + * + * @author 芋道源码 + */ +@ConfigurationProperties(prefix = "win.xss") +@Validated +@Data +public class XssProperties { + + /** + * 是否开启,默认为 true + */ + private boolean enable = true; + /** + * 需要排除的 URL,默认为空 + */ + private List excludeUrls = Collections.emptyList(); + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/clean/JsoupXssCleaner.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/clean/JsoupXssCleaner.java new file mode 100644 index 0000000..12f77a6 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/clean/JsoupXssCleaner.java @@ -0,0 +1,64 @@ +package com.win.framework.xss.core.clean; + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.safety.Safelist; + +/** + * 基于 JSONP 实现 XSS 过滤字符串 + */ +public class JsoupXssCleaner implements XssCleaner { + + private final Safelist safelist; + + /** + * 用于在 src 属性使用相对路径时,强制转换为绝对路径。 为空时不处理,值应为绝对路径的前缀(包含协议部分) + */ + private final String baseUri; + + /** + * 无参构造,默认使用 {@link JsoupXssCleaner#buildSafelist} 方法构建一个安全列表 + */ + public JsoupXssCleaner() { + this.safelist = buildSafelist(); + this.baseUri = ""; + } + + /** + * 构建一个 Xss 清理的 Safelist 规则。 + * 基于 Safelist#relaxed() 的基础上: + * 1. 扩展支持了 style 和 class 属性 + * 2. a 标签额外支持了 target 属性 + * 3. img 标签额外支持了 data 协议,便于支持 base64 + * + * @return Safelist + */ + private Safelist buildSafelist() { + // 使用 jsoup 提供的默认的 + Safelist relaxedSafelist = Safelist.relaxed(); + // 富文本编辑时一些样式是使用 style 来进行实现的 + // 比如红色字体 style="color:red;", 所以需要给所有标签添加 style 属性 + // 注意:style 属性会有注入风险 + relaxedSafelist.addAttributes(":all", "style", "class"); + // 保留 a 标签的 target 属性 + relaxedSafelist.addAttributes("a", "target"); + // 支持img 为base64 + relaxedSafelist.addProtocols("img", "src", "data"); + + // 保留相对路径, 保留相对路径时,必须提供对应的 baseUri 属性,否则依然会被删除 + // WHITELIST.preserveRelativeLinks(false); + + // 移除 a 标签和 img 标签的一些协议限制,这会导致 xss 防注入失效,如 + // 虽然可以重写 WhiteList#isSafeAttribute 来处理,但是有隐患,所以暂时不支持相对路径 + // WHITELIST.removeProtocols("a", "href", "ftp", "http", "https", "mailto"); + // WHITELIST.removeProtocols("img", "src", "http", "https"); + return relaxedSafelist; + } + + @Override + public String clean(String html) { + return Jsoup.clean(html, baseUri, safelist, new Document.OutputSettings().prettyPrint(false)); + } + +} + diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/clean/XssCleaner.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/clean/XssCleaner.java new file mode 100644 index 0000000..f9673a5 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/clean/XssCleaner.java @@ -0,0 +1,16 @@ +package com.win.framework.xss.core.clean; + +/** + * 对 html 文本中的有 Xss 风险的数据进行清理 + */ +public interface XssCleaner { + + /** + * 清理有 Xss 风险的文本 + * + * @param html 原 html + * @return 清理后的 html + */ + String clean(String html); + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/filter/XssFilter.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/filter/XssFilter.java new file mode 100644 index 0000000..fc6291b --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/filter/XssFilter.java @@ -0,0 +1,52 @@ +package com.win.framework.xss.core.filter; + +import com.win.framework.xss.config.XssProperties; +import com.win.framework.xss.core.clean.XssCleaner; +import lombok.AllArgsConstructor; +import org.springframework.util.PathMatcher; +import org.springframework.web.filter.OncePerRequestFilter; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * Xss 过滤器 + * + * @author 芋道源码 + */ +@AllArgsConstructor +public class XssFilter extends OncePerRequestFilter { + + /** + * 属性 + */ + private final XssProperties properties; + /** + * 路径匹配器 + */ + private final PathMatcher pathMatcher; + + private final XssCleaner xssCleaner; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws IOException, ServletException { + filterChain.doFilter(new XssRequestWrapper(request, xssCleaner), response); + } + + @Override + protected boolean shouldNotFilter(HttpServletRequest request) { + // 如果关闭,则不过滤 + if (!properties.isEnable()) { + return true; + } + + // 如果匹配到无需过滤,则不过滤 + String uri = request.getRequestURI(); + return properties.getExcludeUrls().stream().anyMatch(excludeUrl -> pathMatcher.match(excludeUrl, uri)); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/filter/XssRequestWrapper.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/filter/XssRequestWrapper.java new file mode 100644 index 0000000..480f4f5 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/filter/XssRequestWrapper.java @@ -0,0 +1,92 @@ +package com.win.framework.xss.core.filter; + +import com.win.framework.xss.core.clean.XssCleaner; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * Xss 请求 Wrapper + * + * @author 芋道源码 + */ +public class XssRequestWrapper extends HttpServletRequestWrapper { + + private final XssCleaner xssCleaner; + + public XssRequestWrapper(HttpServletRequest request, XssCleaner xssCleaner) { + super(request); + this.xssCleaner = xssCleaner; + } + + // ============================ parameter ============================ + @Override + public Map getParameterMap() { + Map map = new LinkedHashMap<>(); + Map parameters = super.getParameterMap(); + for (Map.Entry entry : parameters.entrySet()) { + String[] values = entry.getValue(); + for (int i = 0; i < values.length; i++) { + values[i] = xssCleaner.clean(values[i]); + } + map.put(entry.getKey(), values); + } + return map; + } + + @Override + public String[] getParameterValues(String name) { + String[] values = super.getParameterValues(name); + if (values == null) { + return null; + } + int count = values.length; + String[] encodedValues = new String[count]; + for (int i = 0; i < count; i++) { + encodedValues[i] = xssCleaner.clean(values[i]); + } + return encodedValues; + } + + @Override + public String getParameter(String name) { + String value = super.getParameter(name); + if (value == null) { + return null; + } + return xssCleaner.clean(value); + } + + // ============================ attribute ============================ + @Override + public Object getAttribute(String name) { + Object value = super.getAttribute(name); + if (value instanceof String) { + return xssCleaner.clean((String) value); + } + return value; + } + + // ============================ header ============================ + @Override + public String getHeader(String name) { + String value = super.getHeader(name); + if (value == null) { + return null; + } + return xssCleaner.clean(value); + } + + // ============================ queryString ============================ + @Override + public String getQueryString() { + String value = super.getQueryString(); + if (value == null) { + return null; + } + return xssCleaner.clean(value); + } + +} diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/json/XssStringJsonDeserializer.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/json/XssStringJsonDeserializer.java new file mode 100644 index 0000000..61b0f60 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/core/json/XssStringJsonDeserializer.java @@ -0,0 +1,82 @@ +package com.win.framework.xss.core.json; + +import com.win.framework.common.util.servlet.ServletUtils; +import com.win.framework.xss.config.XssProperties; +import com.win.framework.xss.core.clean.XssCleaner; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StringDeserializer; +import jakarta.servlet.http.HttpServletRequest; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.PathMatcher; + +import java.io.IOException; + +/** + * XSS 过滤 jackson 反序列化器。 + * 在反序列化的过程中,会对字符串进行 XSS 过滤。 + * + * @author Hccake + */ +@Slf4j +@AllArgsConstructor +public class XssStringJsonDeserializer extends StringDeserializer { + + /** + * 属性 + */ + private final XssProperties properties; + /** + * 路径匹配器 + */ + private final PathMatcher pathMatcher; + + private final XssCleaner xssCleaner; + + @Override + public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + // 1. 白名单 URL 的处理 + HttpServletRequest request = ServletUtils.getRequest(); + if (request != null) { + String uri = ServletUtils.getRequest().getRequestURI(); + if (properties.getExcludeUrls().stream().anyMatch(excludeUrl -> pathMatcher.match(excludeUrl, uri))) { + return p.getText(); + } + } + + // 2. 真正使用 xssCleaner 进行过滤 + if (p.hasToken(JsonToken.VALUE_STRING)) { + return xssCleaner.clean(p.getText()); + } + JsonToken t = p.currentToken(); + // [databind#381] + if (t == JsonToken.START_ARRAY) { + return _deserializeFromArray(p, ctxt); + } + // need to gracefully handle byte[] data, as base64 + if (t == JsonToken.VALUE_EMBEDDED_OBJECT) { + Object ob = p.getEmbeddedObject(); + if (ob == null) { + return null; + } + if (ob instanceof byte[]) { + return ctxt.getBase64Variant().encode((byte[]) ob, false); + } + // otherwise, try conversion using toString()... + return ob.toString(); + } + // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML) + if (t == JsonToken.START_OBJECT) { + return ctxt.extractScalarFromObject(p, this, _valueClass); + } + + if (t.isScalarValue()) { + String text = p.getValueAsString(); + return xssCleaner.clean(text); + } + return (String) ctxt.handleUnexpectedToken(_valueClass, p); + } +} + diff --git a/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/package-info.java b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/package-info.java new file mode 100644 index 0000000..73558a0 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/java/com/win/framework/xss/package-info.java @@ -0,0 +1,6 @@ +/** + * 针对 XSS 的基础封装 + * + * XSS 说明:https://tech.meituan.com/2018/09/27/fe-security.html + */ +package com.win.framework.xss; diff --git a/win-framework/win-spring-boot-starter-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/win-framework/win-spring-boot-starter-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..ed85b79 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,6 @@ +com.win.framework.apilog.config.WinApiLogAutoConfiguration +com.win.framework.jackson.config.WinJacksonAutoConfiguration +com.win.framework.swagger.config.WinSwaggerAutoConfiguration +com.win.framework.web.config.WinWebAutoConfiguration +com.win.framework.apilog.config.WinApiLogRpcAutoConfiguration +com.win.framework.banner.config.WinBannerAutoConfiguration \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-web/src/main/resources/banner.txt b/win-framework/win-spring-boot-starter-web/src/main/resources/banner.txt new file mode 100644 index 0000000..569d201 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/src/main/resources/banner.txt @@ -0,0 +1,17 @@ +芋道源码 http://www.iocoder.cn +Application Version: ${win.info.version} +Spring Boot Version: ${spring-boot.version} + +.__ __. ______ .______ __ __ _______ +| \ | | / __ \ | _ \ | | | | / _____| +| \| | | | | | | |_) | | | | | | | __ +| . ` | | | | | | _ < | | | | | | |_ | +| |\ | | `--' | | |_) | | `--' | | |__| | +|__| \__| \______/ |______/ \______/ \______| + +███╗ ██╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗ +████╗ ██║██╔═══██╗ ██╔══██╗██║ ██║██╔════╝ +██╔██╗ ██║██║ ██║ ██████╔╝██║ ██║██║ ███╗ +██║╚██╗██║██║ ██║ ██╔══██╗██║ ██║██║ ██║ +██║ ╚████║╚██████╔╝ ██████╔╝╚██████╔╝╚██████╔╝ +╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ diff --git a/win-framework/win-spring-boot-starter-web/《芋道 Spring Boot API 接口文档 Swagger 入门》.md b/win-framework/win-spring-boot-starter-web/《芋道 Spring Boot API 接口文档 Swagger 入门》.md new file mode 100644 index 0000000..f5f32c6 --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/《芋道 Spring Boot API 接口文档 Swagger 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-web/《芋道 Spring Boot SpringMVC 入门》.md b/win-framework/win-spring-boot-starter-web/《芋道 Spring Boot SpringMVC 入门》.md new file mode 100644 index 0000000..0d6c7da --- /dev/null +++ b/win-framework/win-spring-boot-starter-web/《芋道 Spring Boot SpringMVC 入门》.md @@ -0,0 +1 @@ + diff --git a/win-framework/win-spring-boot-starter-websocket/pom.xml b/win-framework/win-spring-boot-starter-websocket/pom.xml new file mode 100644 index 0000000..ad79def --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/pom.xml @@ -0,0 +1,73 @@ + + + + com.win + win-framework + ${revision} + + 4.0.0 + win-spring-boot-starter-websocket + jar + + ${project.artifactId} + WebSocket 框架,支持多节点的广播 + https://github.com/YunaiV/ruoyi-vue-pro + + + + + com.win + win-common + + + + + + com.win + win-spring-boot-starter-security + provided + + + + org.springframework.boot + spring-boot-starter-websocket + + + + + com.win + win-spring-boot-starter-mq + + + org.springframework.kafka + spring-kafka + true + + + org.springframework.amqp + spring-rabbit + true + + + org.apache.rocketmq + rocketmq-spring-boot-starter + true + + + + + + com.win + win-spring-boot-starter-biz-tenant + provided + + + + \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/config/WebSocketProperties.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/config/WebSocketProperties.java new file mode 100644 index 0000000..cbdc837 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/config/WebSocketProperties.java @@ -0,0 +1,34 @@ +package com.win.framework.websocket.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +/** + * WebSocket 配置项 + * + * @author xingyu4j + */ +@ConfigurationProperties("win.websocket") +@Data +@Validated +public class WebSocketProperties { + + /** + * WebSocket 的连接路径 + */ + @NotEmpty(message = "WebSocket 的连接路径不能为空") + private String path = "/ws"; + + /** + * 消息发送器的类型 + * + * 可选值:local、redis、rocketmq、kafka、rabbitmq + */ + @NotNull(message = "WebSocket 的消息发送者不能为空") + private String senderType = "local"; + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/config/WinWebSocketAutoConfiguration.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/config/WinWebSocketAutoConfiguration.java new file mode 100644 index 0000000..fe7d8b6 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/config/WinWebSocketAutoConfiguration.java @@ -0,0 +1,177 @@ +package com.win.framework.websocket.config; + +import com.win.framework.mq.redis.config.WinRedisMQConsumerAutoConfiguration; +import com.win.framework.mq.redis.core.RedisMQTemplate; +import com.win.framework.websocket.core.handler.JsonWebSocketMessageHandler; +import com.win.framework.websocket.core.listener.WebSocketMessageListener; +import com.win.framework.websocket.core.security.LoginUserHandshakeInterceptor; +import com.win.framework.websocket.core.sender.kafka.KafkaWebSocketMessageConsumer; +import com.win.framework.websocket.core.sender.kafka.KafkaWebSocketMessageSender; +import com.win.framework.websocket.core.sender.local.LocalWebSocketMessageSender; +import com.win.framework.websocket.core.sender.rabbitmq.RabbitMQWebSocketMessageConsumer; +import com.win.framework.websocket.core.sender.rabbitmq.RabbitMQWebSocketMessageSender; +import com.win.framework.websocket.core.sender.redis.RedisWebSocketMessageConsumer; +import com.win.framework.websocket.core.sender.redis.RedisWebSocketMessageSender; +import com.win.framework.websocket.core.sender.rocketmq.RocketMQWebSocketMessageConsumer; +import com.win.framework.websocket.core.sender.rocketmq.RocketMQWebSocketMessageSender; +import com.win.framework.websocket.core.session.WebSocketSessionHandlerDecorator; +import com.win.framework.websocket.core.session.WebSocketSessionManager; +import com.win.framework.websocket.core.session.WebSocketSessionManagerImpl; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.amqp.core.TopicExchange; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.config.annotation.EnableWebSocket; +import org.springframework.web.socket.config.annotation.WebSocketConfigurer; +import org.springframework.web.socket.server.HandshakeInterceptor; + +import java.util.List; + +/** + * WebSocket 自动配置 + * + * @author xingyu4j + */ +@AutoConfiguration(before = WinRedisMQConsumerAutoConfiguration.class) // before WinRedisMQConsumerAutoConfiguration 的原因是,需要保证 RedisWebSocketMessageConsumer 先创建,才能创建 RedisMessageListenerContainer +@EnableWebSocket // 开启 websocket +@ConditionalOnProperty(prefix = "win.websocket", value = "enable", matchIfMissing = true) // 允许使用 win.websocket.enable=false 禁用 websocket +@EnableConfigurationProperties(WebSocketProperties.class) +public class WinWebSocketAutoConfiguration { + + @Bean + public WebSocketConfigurer webSocketConfigurer(HandshakeInterceptor[] handshakeInterceptors, + WebSocketHandler webSocketHandler, + WebSocketProperties webSocketProperties) { + return registry -> registry + // 添加 WebSocketHandler + .addHandler(webSocketHandler, webSocketProperties.getPath()) + .addInterceptors(handshakeInterceptors) + // 允许跨域,否则前端连接会直接断开 + .setAllowedOriginPatterns("*"); + } + + @Bean + public HandshakeInterceptor handshakeInterceptor() { + return new LoginUserHandshakeInterceptor(); + } + + @Bean + public WebSocketHandler webSocketHandler(WebSocketSessionManager sessionManager, + List> messageListeners) { + // 1. 创建 JsonWebSocketMessageHandler 对象,处理消息 + JsonWebSocketMessageHandler messageHandler = new JsonWebSocketMessageHandler(messageListeners); + // 2. 创建 WebSocketSessionHandlerDecorator 对象,处理连接 + return new WebSocketSessionHandlerDecorator(messageHandler, sessionManager); + } + + @Bean + public WebSocketSessionManager webSocketSessionManager() { + return new WebSocketSessionManagerImpl(); + } + + // ==================== Sender 相关 ==================== + + @Configuration + @ConditionalOnProperty(prefix = "win.websocket", name = "sender-type", havingValue = "local", matchIfMissing = true) + public class LocalWebSocketMessageSenderConfiguration { + + @Bean + public LocalWebSocketMessageSender localWebSocketMessageSender(WebSocketSessionManager sessionManager) { + return new LocalWebSocketMessageSender(sessionManager); + } + + } + + @Configuration + @ConditionalOnProperty(prefix = "win.websocket", name = "sender-type", havingValue = "redis", matchIfMissing = true) + public class RedisWebSocketMessageSenderConfiguration { + + @Bean + public RedisWebSocketMessageSender redisWebSocketMessageSender(WebSocketSessionManager sessionManager, + RedisMQTemplate redisMQTemplate) { + return new RedisWebSocketMessageSender(sessionManager, redisMQTemplate); + } + + @Bean + public RedisWebSocketMessageConsumer redisWebSocketMessageConsumer( + RedisWebSocketMessageSender redisWebSocketMessageSender) { + return new RedisWebSocketMessageConsumer(redisWebSocketMessageSender); + } + + } + + @Configuration + @ConditionalOnProperty(prefix = "win.websocket", name = "sender-type", havingValue = "rocketmq", matchIfMissing = true) + public class RocketMQWebSocketMessageSenderConfiguration { + + @Bean + public RocketMQWebSocketMessageSender rocketMQWebSocketMessageSender( + WebSocketSessionManager sessionManager, RocketMQTemplate rocketMQTemplate, + @Value("${win.websocket.sender-rocketmq.topic}") String topic) { + return new RocketMQWebSocketMessageSender(sessionManager, rocketMQTemplate, topic); + } + + @Bean + public RocketMQWebSocketMessageConsumer rocketMQWebSocketMessageConsumer( + RocketMQWebSocketMessageSender rocketMQWebSocketMessageSender) { + return new RocketMQWebSocketMessageConsumer(rocketMQWebSocketMessageSender); + } + + } + + @Configuration + @ConditionalOnProperty(prefix = "win.websocket", name = "sender-type", havingValue = "rabbitmq", matchIfMissing = true) + public class RabbitMQWebSocketMessageSenderConfiguration { + + @Bean + public RabbitMQWebSocketMessageSender rabbitMQWebSocketMessageSender( + WebSocketSessionManager sessionManager, RabbitTemplate rabbitTemplate, + TopicExchange websocketTopicExchange) { + return new RabbitMQWebSocketMessageSender(sessionManager, rabbitTemplate, websocketTopicExchange); + } + + @Bean + public RabbitMQWebSocketMessageConsumer rabbitMQWebSocketMessageConsumer( + RabbitMQWebSocketMessageSender rabbitMQWebSocketMessageSender) { + return new RabbitMQWebSocketMessageConsumer(rabbitMQWebSocketMessageSender); + } + + /** + * 创建 Topic Exchange + */ + @Bean + public TopicExchange websocketTopicExchange(@Value("${win.websocket.sender-rabbitmq.exchange}") String exchange) { + return new TopicExchange(exchange, + true, // durable: 是否持久化 + false); // exclusive: 是否排它 + } + + } + + @Configuration + @ConditionalOnProperty(prefix = "win.websocket", name = "sender-type", havingValue = "kafka", matchIfMissing = true) + public class KafkaWebSocketMessageSenderConfiguration { + + @Bean + public KafkaWebSocketMessageSender kafkaWebSocketMessageSender( + WebSocketSessionManager sessionManager, KafkaTemplate kafkaTemplate, + @Value("${win.websocket.sender-kafka.topic}") String topic) { + return new KafkaWebSocketMessageSender(sessionManager, kafkaTemplate, topic); + } + + @Bean + public KafkaWebSocketMessageConsumer kafkaWebSocketMessageConsumer( + KafkaWebSocketMessageSender kafkaWebSocketMessageSender) { + return new KafkaWebSocketMessageConsumer(kafkaWebSocketMessageSender); + } + + } + +} \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/handler/JsonWebSocketMessageHandler.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/handler/JsonWebSocketMessageHandler.java new file mode 100644 index 0000000..85467f2 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/handler/JsonWebSocketMessageHandler.java @@ -0,0 +1,83 @@ +package com.win.framework.websocket.core.handler; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.TypeUtil; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.tenant.core.util.TenantUtils; +import com.win.framework.websocket.core.listener.WebSocketMessageListener; +import com.win.framework.websocket.core.message.JsonWebSocketMessage; +import com.win.framework.websocket.core.util.WebSocketFrameworkUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.TextWebSocketHandler; + +import java.lang.reflect.Type; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Consumer; + +/** + * JSON 格式 {@link WebSocketHandler} 实现类 + * + * 基于 {@link JsonWebSocketMessage#getType()} 消息类型,调度到对应的 {@link WebSocketMessageListener} 监听器。 + * + * @author 芋道源码 + */ +@Slf4j +public class JsonWebSocketMessageHandler extends TextWebSocketHandler { + + /** + * type 与 WebSocketMessageListener 的映射 + */ + private final Map> listeners = new HashMap<>(); + + @SuppressWarnings({"rawtypes", "unchecked"}) + public JsonWebSocketMessageHandler(List listenersList) { + listenersList.forEach((Consumer) + listener -> listeners.put(listener.getType(), listener)); + } + + @Override + protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { + // 1.1 空消息,跳过 + if (message.getPayloadLength() == 0) { + return; + } + // 1.2 ping 心跳消息,直接返回 pong 消息。 + if (message.getPayloadLength() == 4 && Objects.equals(message.getPayload(), "ping")) { + session.sendMessage(new TextMessage("pong")); + return; + } + + // 2.1 解析消息 + try { + JsonWebSocketMessage jsonMessage = JsonUtils.parseObject(message.getPayload(), JsonWebSocketMessage.class); + if (jsonMessage == null) { + log.error("[handleTextMessage][session({}) message({}) 解析为空]", session.getId(), message.getPayload()); + return; + } + if (StrUtil.isEmpty(jsonMessage.getType())) { + log.error("[handleTextMessage][session({}) message({}) 类型为空]", session.getId(), message.getPayload()); + return; + } + // 2.2 获得对应的 WebSocketMessageListener + WebSocketMessageListener messageListener = listeners.get(jsonMessage.getType()); + if (messageListener == null) { + log.error("[handleTextMessage][session({}) message({}) 监听器为空]", session.getId(), message.getPayload()); + return; + } + // 2.3 处理消息 + Type type = TypeUtil.getTypeArgument(messageListener.getClass(), 0); + Object messageObj = JsonUtils.parseObject(jsonMessage.getContent(), type); + Long tenantId = WebSocketFrameworkUtils.getTenantId(session); + TenantUtils.execute(tenantId, () -> messageListener.onMessage(session, messageObj)); + } catch (Throwable ex) { + log.error("[handleTextMessage][session({}) message({}) 处理异常]", session.getId(), message.getPayload()); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/listener/WebSocketMessageListener.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/listener/WebSocketMessageListener.java new file mode 100644 index 0000000..cacc31b --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/listener/WebSocketMessageListener.java @@ -0,0 +1,31 @@ +package com.win.framework.websocket.core.listener; + +import com.win.framework.websocket.core.message.JsonWebSocketMessage; +import org.springframework.web.socket.WebSocketSession; + +/** + * WebSocket 消息监听器接口 + * + * 目的:前端发送消息给后端后,处理对应 {@link #getType()} 类型的消息 + * + * @param 泛型,消息类型 + */ +public interface WebSocketMessageListener { + + /** + * 处理消息 + * + * @param session Session + * @param message 消息 + */ + void onMessage(WebSocketSession session, T message); + + /** + * 获得消息类型 + * + * @see JsonWebSocketMessage#getType() + * @return 消息类型 + */ + String getType(); + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/message/JsonWebSocketMessage.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/message/JsonWebSocketMessage.java new file mode 100644 index 0000000..9921c4a --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/message/JsonWebSocketMessage.java @@ -0,0 +1,29 @@ +package com.win.framework.websocket.core.message; + +import com.win.framework.websocket.core.listener.WebSocketMessageListener; +import lombok.Data; + +import java.io.Serializable; + +/** + * JSON 格式的 WebSocket 消息帧 + * + * @author 芋道源码 + */ +@Data +public class JsonWebSocketMessage implements Serializable { + + /** + * 消息类型 + * + * 目的:用于分发到对应的 {@link WebSocketMessageListener} 实现类 + */ + private String type; + /** + * 消息内容 + * + * 要求 JSON 对象 + */ + private String content; + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/security/LoginUserHandshakeInterceptor.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/security/LoginUserHandshakeInterceptor.java new file mode 100644 index 0000000..5cb8744 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/security/LoginUserHandshakeInterceptor.java @@ -0,0 +1,42 @@ +package com.win.framework.websocket.core.security; + +import com.win.framework.security.core.LoginUser; +import com.win.framework.security.core.filter.TokenAuthenticationFilter; +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import com.win.framework.websocket.core.util.WebSocketFrameworkUtils; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.server.HandshakeInterceptor; + +import java.util.Map; + +/** + * 登录用户的 {@link HandshakeInterceptor} 实现类 + * + * 流程如下: + * 1. 前端连接 websocket 时,会通过拼接 ?token={token} 到 ws:// 连接后,这样它可以被 {@link TokenAuthenticationFilter} 所认证通过 + * 2. {@link LoginUserHandshakeInterceptor} 负责把 {@link LoginUser} 添加到 {@link WebSocketSession} 中 + * + * @author 芋道源码 + */ +public class LoginUserHandshakeInterceptor implements HandshakeInterceptor { + + @Override + public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, + WebSocketHandler wsHandler, Map attributes) { + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + if (loginUser != null) { + WebSocketFrameworkUtils.setLoginUser(loginUser, attributes); + } + return true; + } + + @Override + public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, + WebSocketHandler wsHandler, Exception exception) { + // do nothing + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/security/WebSocketAuthorizeRequestsCustomizer.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/security/WebSocketAuthorizeRequestsCustomizer.java new file mode 100644 index 0000000..8379bd7 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/security/WebSocketAuthorizeRequestsCustomizer.java @@ -0,0 +1,24 @@ +package com.win.framework.websocket.core.security; + +import com.win.framework.security.config.AuthorizeRequestsCustomizer; +import com.win.framework.websocket.config.WebSocketProperties; +import lombok.RequiredArgsConstructor; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer; + +/** + * WebSocket 的权限自定义 + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +public class WebSocketAuthorizeRequestsCustomizer extends AuthorizeRequestsCustomizer { + + private final WebSocketProperties webSocketProperties; + + @Override + public void customize(AuthorizeHttpRequestsConfigurer.AuthorizationManagerRequestMatcherRegistry registry) { + registry.requestMatchers(webSocketProperties.getPath()).permitAll(); + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/AbstractWebSocketMessageSender.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/AbstractWebSocketMessageSender.java new file mode 100644 index 0000000..d48407f --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/AbstractWebSocketMessageSender.java @@ -0,0 +1,104 @@ +package com.win.framework.websocket.core.sender; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.websocket.core.message.JsonWebSocketMessage; +import com.win.framework.websocket.core.session.WebSocketSessionManager; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketSession; + +import java.io.IOException; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +/** + * WebSocketMessageSender 实现类 + * + * @author 芋道源码 + */ +@Slf4j +@RequiredArgsConstructor +public abstract class AbstractWebSocketMessageSender implements WebSocketMessageSender { + + private final WebSocketSessionManager sessionManager; + + @Override + public void send(Integer userType, Long userId, String messageType, String messageContent) { + send(null, userType, userId, messageType, messageContent); + } + + @Override + public void send(Integer userType, String messageType, String messageContent) { + send(null, userType, null, messageType, messageContent); + } + + @Override + public void send(String sessionId, String messageType, String messageContent) { + send(sessionId, null, null, messageType, messageContent); + } + + /** + * 发送消息 + * + * @param sessionId Session 编号 + * @param userType 用户类型 + * @param userId 用户编号 + * @param messageType 消息类型 + * @param messageContent 消息内容 + */ + public void send(String sessionId, Integer userType, Long userId, String messageType, String messageContent) { + // 1. 获得 Session 列表 + List sessions = Collections.emptyList(); + if (StrUtil.isNotEmpty(sessionId)) { + WebSocketSession session = sessionManager.getSession(sessionId); + if (session != null) { + sessions = Collections.singletonList(session); + } + } else if (userType != null && userId != null) { + sessions = (List) sessionManager.getSessionList(userType, userId); + } else if (userType != null) { + sessions = (List) sessionManager.getSessionList(userType); + } + if (CollUtil.isEmpty(sessions)) { + log.info("[send][sessionId({}) userType({}) userId({}) messageType({}) messageContent({}) 未匹配到会话]", + sessionId, userType, userId, messageType, messageContent); + } + // 2. 执行发送 + doSend(sessions, messageType, messageContent); + } + + /** + * 发送消息的具体实现 + * + * @param sessions Session 列表 + * @param messageType 消息类型 + * @param messageContent 消息内容 + */ + public void doSend(Collection sessions, String messageType, String messageContent) { + JsonWebSocketMessage message = new JsonWebSocketMessage().setType(messageType).setContent(messageContent); + String payload = JsonUtils.toJsonString(message); // 关键,使用 JSON 序列化 + sessions.forEach(session -> { + // 1. 各种校验,保证 Session 可以被发送 + if (session == null) { + log.error("[doSend][session 为空, message({})]", message); + return; + } + if (!session.isOpen()) { + log.error("[doSend][session({}) 已关闭, message({})]", session.getId(), message); + return; + } + // 2. 执行发送 + try { + session.sendMessage(new TextMessage(payload)); + log.info("[doSend][session({}) 发送消息成功,message({})]", session.getId(), message); + } catch (IOException ex) { + log.error("[doSend][session({}) 发送消息失败,message({})]", session.getId(), message, ex); + } + }); + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/WebSocketMessageSender.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/WebSocketMessageSender.java new file mode 100644 index 0000000..439c730 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/WebSocketMessageSender.java @@ -0,0 +1,52 @@ +package com.win.framework.websocket.core.sender; + +import com.win.framework.common.util.json.JsonUtils; + +/** + * WebSocket 消息的发送器接口 + * + * @author 芋道源码 + */ +public interface WebSocketMessageSender { + + /** + * 发送消息给指定用户 + * + * @param userType 用户类型 + * @param userId 用户编号 + * @param messageType 消息类型 + * @param messageContent 消息内容,JSON 格式 + */ + void send(Integer userType, Long userId, String messageType, String messageContent); + + /** + * 发送消息给指定用户类型 + * + * @param userType 用户类型 + * @param messageType 消息类型 + * @param messageContent 消息内容,JSON 格式 + */ + void send(Integer userType, String messageType, String messageContent); + + /** + * 发送消息给指定 Session + * + * @param sessionId Session 编号 + * @param messageType 消息类型 + * @param messageContent 消息内容,JSON 格式 + */ + void send(String sessionId, String messageType, String messageContent); + + default void sendObject(Integer userType, Long userId, String messageType, Object messageContent) { + send(userType, userId, messageType, JsonUtils.toJsonString(messageContent)); + } + + default void sendObject(Integer userType, String messageType, Object messageContent) { + send(userType, messageType, JsonUtils.toJsonString(messageContent)); + } + + default void sendObject(String sessionId, String messageType, Object messageContent) { + send(sessionId, messageType, JsonUtils.toJsonString(messageContent)); + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/kafka/KafkaWebSocketMessage.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/kafka/KafkaWebSocketMessage.java new file mode 100644 index 0000000..da5544d --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/kafka/KafkaWebSocketMessage.java @@ -0,0 +1,35 @@ +package com.win.framework.websocket.core.sender.kafka; + +import lombok.Data; + +/** + * Kafka 广播 WebSocket 的消息 + * + * @author 芋道源码 + */ +@Data +public class KafkaWebSocketMessage { + + /** + * Session 编号 + */ + private String sessionId; + /** + * 用户类型 + */ + private Integer userType; + /** + * 用户编号 + */ + private Long userId; + + /** + * 消息类型 + */ + private String messageType; + /** + * 消息内容 + */ + private String messageContent; + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/kafka/KafkaWebSocketMessageConsumer.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/kafka/KafkaWebSocketMessageConsumer.java new file mode 100644 index 0000000..96c0e67 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/kafka/KafkaWebSocketMessageConsumer.java @@ -0,0 +1,28 @@ +package com.win.framework.websocket.core.sender.kafka; + +import lombok.RequiredArgsConstructor; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.kafka.annotation.KafkaListener; + +/** + * {@link KafkaWebSocketMessage} 广播消息的消费者,真正把消息发送出去 + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +public class KafkaWebSocketMessageConsumer { + + private final KafkaWebSocketMessageSender rabbitMQWebSocketMessageSender; + + @RabbitHandler + @KafkaListener( + topics = "${win.websocket.sender-kafka.topic}", + // 在 Group 上,使用 UUID 生成其后缀。这样,启动的 Consumer 的 Group 不同,以达到广播消费的目的 + groupId = "${win.websocket.sender-kafka.consumer-group}" + "-" + "#{T(java.util.UUID).randomUUID()}") + public void onMessage(KafkaWebSocketMessage message) { + rabbitMQWebSocketMessageSender.send(message.getSessionId(), + message.getUserType(), message.getUserId(), + message.getMessageType(), message.getMessageContent()); + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/kafka/KafkaWebSocketMessageSender.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/kafka/KafkaWebSocketMessageSender.java new file mode 100644 index 0000000..337dc64 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/kafka/KafkaWebSocketMessageSender.java @@ -0,0 +1,67 @@ +package com.win.framework.websocket.core.sender.kafka; + +import com.win.framework.websocket.core.sender.AbstractWebSocketMessageSender; +import com.win.framework.websocket.core.sender.WebSocketMessageSender; +import com.win.framework.websocket.core.session.WebSocketSessionManager; +import lombok.extern.slf4j.Slf4j; +import org.springframework.kafka.core.KafkaTemplate; + +import java.util.concurrent.ExecutionException; + +/** + * 基于 Kafka 的 {@link WebSocketMessageSender} 实现类 + * + * @author 芋道源码 + */ +@Slf4j +public class KafkaWebSocketMessageSender extends AbstractWebSocketMessageSender { + + private final KafkaTemplate kafkaTemplate; + + private final String topic; + + public KafkaWebSocketMessageSender(WebSocketSessionManager sessionManager, + KafkaTemplate kafkaTemplate, + String topic) { + super(sessionManager); + this.kafkaTemplate = kafkaTemplate; + this.topic = topic; + } + + @Override + public void send(Integer userType, Long userId, String messageType, String messageContent) { + sendKafkaMessage(null, userId, userType, messageType, messageContent); + } + + @Override + public void send(Integer userType, String messageType, String messageContent) { + sendKafkaMessage(null, null, userType, messageType, messageContent); + } + + @Override + public void send(String sessionId, String messageType, String messageContent) { + sendKafkaMessage(sessionId, null, null, messageType, messageContent); + } + + /** + * 通过 Kafka 广播消息 + * + * @param sessionId Session 编号 + * @param userId 用户编号 + * @param userType 用户类型 + * @param messageType 消息类型 + * @param messageContent 消息内容 + */ + private void sendKafkaMessage(String sessionId, Long userId, Integer userType, + String messageType, String messageContent) { + KafkaWebSocketMessage mqMessage = new KafkaWebSocketMessage() + .setSessionId(sessionId).setUserId(userId).setUserType(userType) + .setMessageType(messageType).setMessageContent(messageContent); + try { + kafkaTemplate.send(topic, mqMessage).get(); + } catch (InterruptedException | ExecutionException e) { + log.error("[sendKafkaMessage][发送消息({}) 到 Kafka 失败]", mqMessage, e); + } + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/local/LocalWebSocketMessageSender.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/local/LocalWebSocketMessageSender.java new file mode 100644 index 0000000..1b8d107 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/local/LocalWebSocketMessageSender.java @@ -0,0 +1,20 @@ +package com.win.framework.websocket.core.sender.local; + +import com.win.framework.websocket.core.sender.AbstractWebSocketMessageSender; +import com.win.framework.websocket.core.sender.WebSocketMessageSender; +import com.win.framework.websocket.core.session.WebSocketSessionManager; + +/** + * 本地的 {@link WebSocketMessageSender} 实现类 + * + * 注意:仅仅适合单机场景!!! + * + * @author 芋道源码 + */ +public class LocalWebSocketMessageSender extends AbstractWebSocketMessageSender { + + public LocalWebSocketMessageSender(WebSocketSessionManager sessionManager) { + super(sessionManager); + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessage.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessage.java new file mode 100644 index 0000000..0b57cec --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessage.java @@ -0,0 +1,37 @@ +package com.win.framework.websocket.core.sender.rabbitmq; + +import lombok.Data; + +import java.io.Serializable; + +/** + * RabbitMQ 广播 WebSocket 的消息 + * + * @author 芋道源码 + */ +@Data +public class RabbitMQWebSocketMessage implements Serializable { + + /** + * Session 编号 + */ + private String sessionId; + /** + * 用户类型 + */ + private Integer userType; + /** + * 用户编号 + */ + private Long userId; + + /** + * 消息类型 + */ + private String messageType; + /** + * 消息内容 + */ + private String messageContent; + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessageConsumer.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessageConsumer.java new file mode 100644 index 0000000..411e193 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessageConsumer.java @@ -0,0 +1,39 @@ +package com.win.framework.websocket.core.sender.rabbitmq; + +import lombok.RequiredArgsConstructor; +import org.springframework.amqp.core.ExchangeTypes; +import org.springframework.amqp.rabbit.annotation.*; + +/** + * {@link RabbitMQWebSocketMessage} 广播消息的消费者,真正把消息发送出去 + * + * @author 芋道源码 + */ +@RabbitListener( + bindings = @QueueBinding( + value = @Queue( + // 在 Queue 的名字上,使用 UUID 生成其后缀。这样,启动的 Consumer 的 Queue 不同,以达到广播消费的目的 + name = "${win.websocket.sender-rabbitmq.queue}" + "-" + "#{T(java.util.UUID).randomUUID()}", + // Consumer 关闭时,该队列就可以被自动删除了 + autoDelete = "true" + ), + exchange = @Exchange( + name = "${win.websocket.sender-rabbitmq.exchange}", + type = ExchangeTypes.TOPIC, + declare = "false" + ) + ) +) +@RequiredArgsConstructor +public class RabbitMQWebSocketMessageConsumer { + + private final RabbitMQWebSocketMessageSender rabbitMQWebSocketMessageSender; + + @RabbitHandler + public void onMessage(RabbitMQWebSocketMessage message) { + rabbitMQWebSocketMessageSender.send(message.getSessionId(), + message.getUserType(), message.getUserId(), + message.getMessageType(), message.getMessageContent()); + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessageSender.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessageSender.java new file mode 100644 index 0000000..15654d0 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessageSender.java @@ -0,0 +1,62 @@ +package com.win.framework.websocket.core.sender.rabbitmq; + +import com.win.framework.websocket.core.sender.AbstractWebSocketMessageSender; +import com.win.framework.websocket.core.sender.WebSocketMessageSender; +import com.win.framework.websocket.core.session.WebSocketSessionManager; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.TopicExchange; +import org.springframework.amqp.rabbit.core.RabbitTemplate; + +/** + * 基于 RabbitMQ 的 {@link WebSocketMessageSender} 实现类 + * + * @author 芋道源码 + */ +@Slf4j +public class RabbitMQWebSocketMessageSender extends AbstractWebSocketMessageSender { + + private final RabbitTemplate rabbitTemplate; + + private final TopicExchange topicExchange; + + public RabbitMQWebSocketMessageSender(WebSocketSessionManager sessionManager, + RabbitTemplate rabbitTemplate, + TopicExchange topicExchange) { + super(sessionManager); + this.rabbitTemplate = rabbitTemplate; + this.topicExchange = topicExchange; + } + + @Override + public void send(Integer userType, Long userId, String messageType, String messageContent) { + sendRabbitMQMessage(null, userId, userType, messageType, messageContent); + } + + @Override + public void send(Integer userType, String messageType, String messageContent) { + sendRabbitMQMessage(null, null, userType, messageType, messageContent); + } + + @Override + public void send(String sessionId, String messageType, String messageContent) { + sendRabbitMQMessage(sessionId, null, null, messageType, messageContent); + } + + /** + * 通过 RabbitMQ 广播消息 + * + * @param sessionId Session 编号 + * @param userId 用户编号 + * @param userType 用户类型 + * @param messageType 消息类型 + * @param messageContent 消息内容 + */ + private void sendRabbitMQMessage(String sessionId, Long userId, Integer userType, + String messageType, String messageContent) { + RabbitMQWebSocketMessage mqMessage = new RabbitMQWebSocketMessage() + .setSessionId(sessionId).setUserId(userId).setUserType(userType) + .setMessageType(messageType).setMessageContent(messageContent); + rabbitTemplate.convertAndSend(topicExchange.getName(), null, mqMessage); + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/redis/RedisWebSocketMessage.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/redis/RedisWebSocketMessage.java new file mode 100644 index 0000000..043cd97 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/redis/RedisWebSocketMessage.java @@ -0,0 +1,34 @@ +package com.win.framework.websocket.core.sender.redis; + +import com.win.framework.mq.redis.core.pubsub.AbstractRedisChannelMessage; +import lombok.Data; + +/** + * Redis 广播 WebSocket 的消息 + */ +@Data +public class RedisWebSocketMessage extends AbstractRedisChannelMessage { + + /** + * Session 编号 + */ + private String sessionId; + /** + * 用户类型 + */ + private Integer userType; + /** + * 用户编号 + */ + private Long userId; + + /** + * 消息类型 + */ + private String messageType; + /** + * 消息内容 + */ + private String messageContent; + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/redis/RedisWebSocketMessageConsumer.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/redis/RedisWebSocketMessageConsumer.java new file mode 100644 index 0000000..3a0bdac --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/redis/RedisWebSocketMessageConsumer.java @@ -0,0 +1,23 @@ +package com.win.framework.websocket.core.sender.redis; + +import com.win.framework.mq.redis.core.pubsub.AbstractRedisChannelMessageListener; +import lombok.RequiredArgsConstructor; + +/** + * {@link RedisWebSocketMessage} 广播消息的消费者,真正把消息发送出去 + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +public class RedisWebSocketMessageConsumer extends AbstractRedisChannelMessageListener { + + private final RedisWebSocketMessageSender redisWebSocketMessageSender; + + @Override + public void onMessage(RedisWebSocketMessage message) { + redisWebSocketMessageSender.send(message.getSessionId(), + message.getUserType(), message.getUserId(), + message.getMessageType(), message.getMessageContent()); + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/redis/RedisWebSocketMessageSender.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/redis/RedisWebSocketMessageSender.java new file mode 100644 index 0000000..4faf92f --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/redis/RedisWebSocketMessageSender.java @@ -0,0 +1,57 @@ +package com.win.framework.websocket.core.sender.redis; + +import com.win.framework.mq.redis.core.RedisMQTemplate; +import com.win.framework.websocket.core.sender.AbstractWebSocketMessageSender; +import com.win.framework.websocket.core.sender.WebSocketMessageSender; +import com.win.framework.websocket.core.session.WebSocketSessionManager; +import lombok.extern.slf4j.Slf4j; + +/** + * 基于 Redis 的 {@link WebSocketMessageSender} 实现类 + * + * @author 芋道源码 + */ +@Slf4j +public class RedisWebSocketMessageSender extends AbstractWebSocketMessageSender { + + private final RedisMQTemplate redisMQTemplate; + + public RedisWebSocketMessageSender(WebSocketSessionManager sessionManager, + RedisMQTemplate redisMQTemplate) { + super(sessionManager); + this.redisMQTemplate = redisMQTemplate; + } + + @Override + public void send(Integer userType, Long userId, String messageType, String messageContent) { + sendRedisMessage(null, userId, userType, messageType, messageContent); + } + + @Override + public void send(Integer userType, String messageType, String messageContent) { + sendRedisMessage(null, null, userType, messageType, messageContent); + } + + @Override + public void send(String sessionId, String messageType, String messageContent) { + sendRedisMessage(sessionId, null, null, messageType, messageContent); + } + + /** + * 通过 Redis 广播消息 + * + * @param sessionId Session 编号 + * @param userId 用户编号 + * @param userType 用户类型 + * @param messageType 消息类型 + * @param messageContent 消息内容 + */ + private void sendRedisMessage(String sessionId, Long userId, Integer userType, + String messageType, String messageContent) { + RedisWebSocketMessage mqMessage = new RedisWebSocketMessage() + .setSessionId(sessionId).setUserId(userId).setUserType(userType) + .setMessageType(messageType).setMessageContent(messageContent); + redisMQTemplate.send(mqMessage); + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessage.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessage.java new file mode 100644 index 0000000..0efa532 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessage.java @@ -0,0 +1,35 @@ +package com.win.framework.websocket.core.sender.rocketmq; + +import lombok.Data; + +/** + * RocketMQ 广播 WebSocket 的消息 + * + * @author 芋道源码 + */ +@Data +public class RocketMQWebSocketMessage { + + /** + * Session 编号 + */ + private String sessionId; + /** + * 用户类型 + */ + private Integer userType; + /** + * 用户编号 + */ + private Long userId; + + /** + * 消息类型 + */ + private String messageType; + /** + * 消息内容 + */ + private String messageContent; + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessageConsumer.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessageConsumer.java new file mode 100644 index 0000000..7ab491b --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessageConsumer.java @@ -0,0 +1,30 @@ +package com.win.framework.websocket.core.sender.rocketmq; + +import lombok.RequiredArgsConstructor; +import org.apache.rocketmq.spring.annotation.MessageModel; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; + +/** + * {@link RocketMQWebSocketMessage} 广播消息的消费者,真正把消息发送出去 + * + * @author 芋道源码 + */ +@RocketMQMessageListener( // 重点:添加 @RocketMQMessageListener 注解,声明消费的 topic + topic = "${win.websocket.sender-rocketmq.topic}", + consumerGroup = "${win.websocket.sender-rocketmq.consumer-group}", + messageModel = MessageModel.BROADCASTING // 设置为广播模式,保证每个实例都能收到消息 +) +@RequiredArgsConstructor +public class RocketMQWebSocketMessageConsumer implements RocketMQListener { + + private final RocketMQWebSocketMessageSender rocketMQWebSocketMessageSender; + + @Override + public void onMessage(RocketMQWebSocketMessage message) { + rocketMQWebSocketMessageSender.send(message.getSessionId(), + message.getUserType(), message.getUserId(), + message.getMessageType(), message.getMessageContent()); + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessageSender.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessageSender.java new file mode 100644 index 0000000..9b1c7de --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessageSender.java @@ -0,0 +1,61 @@ +package com.win.framework.websocket.core.sender.rocketmq; + +import com.win.framework.websocket.core.sender.AbstractWebSocketMessageSender; +import com.win.framework.websocket.core.sender.WebSocketMessageSender; +import com.win.framework.websocket.core.session.WebSocketSessionManager; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.core.RocketMQTemplate; + +/** + * 基于 RocketMQ 的 {@link WebSocketMessageSender} 实现类 + * + * @author 芋道源码 + */ +@Slf4j +public class RocketMQWebSocketMessageSender extends AbstractWebSocketMessageSender { + + private final RocketMQTemplate rocketMQTemplate; + + private final String topic; + + public RocketMQWebSocketMessageSender(WebSocketSessionManager sessionManager, + RocketMQTemplate rocketMQTemplate, + String topic) { + super(sessionManager); + this.rocketMQTemplate = rocketMQTemplate; + this.topic = topic; + } + + @Override + public void send(Integer userType, Long userId, String messageType, String messageContent) { + sendRocketMQMessage(null, userId, userType, messageType, messageContent); + } + + @Override + public void send(Integer userType, String messageType, String messageContent) { + sendRocketMQMessage(null, null, userType, messageType, messageContent); + } + + @Override + public void send(String sessionId, String messageType, String messageContent) { + sendRocketMQMessage(sessionId, null, null, messageType, messageContent); + } + + /** + * 通过 RocketMQ 广播消息 + * + * @param sessionId Session 编号 + * @param userId 用户编号 + * @param userType 用户类型 + * @param messageType 消息类型 + * @param messageContent 消息内容 + */ + private void sendRocketMQMessage(String sessionId, Long userId, Integer userType, + String messageType, String messageContent) { + RocketMQWebSocketMessage mqMessage = new RocketMQWebSocketMessage() + .setSessionId(sessionId).setUserId(userId).setUserType(userType) + .setMessageType(messageType).setMessageContent(messageContent); + rocketMQTemplate.syncSend(topic, mqMessage); + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/session/WebSocketSessionHandlerDecorator.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/session/WebSocketSessionHandlerDecorator.java new file mode 100644 index 0000000..e7dc887 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/session/WebSocketSessionHandlerDecorator.java @@ -0,0 +1,49 @@ +package com.win.framework.websocket.core.session; + +import org.springframework.web.socket.CloseStatus; +import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator; +import org.springframework.web.socket.handler.WebSocketHandlerDecorator; + +/** + * {@link WebSocketHandler} 的装饰类,实现了以下功能: + * + * 1. {@link WebSocketSession} 连接或关闭时,使用 {@link #sessionManager} 进行管理 + * 2. 封装 {@link WebSocketSession} 支持并发操作 + * + * @author 芋道源码 + */ +public class WebSocketSessionHandlerDecorator extends WebSocketHandlerDecorator { + + /** + * 发送时间的限制,单位:毫秒 + */ + private static final Integer SEND_TIME_LIMIT = 1000 * 5; + /** + * 发送消息缓冲上线,单位:bytes + */ + private static final Integer BUFFER_SIZE_LIMIT = 1024 * 100; + + private final WebSocketSessionManager sessionManager; + + public WebSocketSessionHandlerDecorator(WebSocketHandler delegate, + WebSocketSessionManager sessionManager) { + super(delegate); + this.sessionManager = sessionManager; + } + + @Override + public void afterConnectionEstablished(WebSocketSession session) { + // 实现 session 支持并发,可参考 https://blog.csdn.net/abu935009066/article/details/131218149 + session = new ConcurrentWebSocketSessionDecorator(session, SEND_TIME_LIMIT, BUFFER_SIZE_LIMIT); + // 添加到 WebSocketSessionManager 中 + sessionManager.addSession(session); + } + + @Override + public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) { + sessionManager.removeSession(session); + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/session/WebSocketSessionManager.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/session/WebSocketSessionManager.java new file mode 100644 index 0000000..01a222d --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/session/WebSocketSessionManager.java @@ -0,0 +1,53 @@ +package com.win.framework.websocket.core.session; + +import org.springframework.web.socket.WebSocketSession; + +import java.util.Collection; + +/** + * {@link WebSocketSession} 管理器的接口 + * + * @author 芋道源码 + */ +public interface WebSocketSessionManager { + + /** + * 添加 Session + * + * @param session Session + */ + void addSession(WebSocketSession session); + + /** + * 移除 Session + * + * @param session Session + */ + void removeSession(WebSocketSession session); + + /** + * 获得指定编号的 Session + * + * @param id Session 编号 + * @return Session + */ + WebSocketSession getSession(String id); + + /** + * 获得指定用户类型的 Session 列表 + * + * @param userType 用户类型 + * @return Session 列表 + */ + Collection getSessionList(Integer userType); + + /** + * 获得指定用户编号的 Session 列表 + * + * @param userType 用户类型 + * @param userId 用户编号 + * @return Session 列表 + */ + Collection getSessionList(Integer userType, Long userId); + +} \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/session/WebSocketSessionManagerImpl.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/session/WebSocketSessionManagerImpl.java new file mode 100644 index 0000000..a8fea07 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/session/WebSocketSessionManagerImpl.java @@ -0,0 +1,125 @@ +package com.win.framework.websocket.core.session; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.security.core.LoginUser; +import com.win.framework.tenant.core.context.TenantContextHolder; +import com.win.framework.websocket.core.util.WebSocketFrameworkUtils; +import org.springframework.web.socket.WebSocketSession; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.CopyOnWriteArrayList; + +/** + * 默认的 {@link WebSocketSessionManager} 实现类 + * + * @author 芋道源码 + */ +public class WebSocketSessionManagerImpl implements WebSocketSessionManager { + + /** + * id 与 WebSocketSession 映射 + * + * key:Session 编号 + */ + private final ConcurrentMap idSessions = new ConcurrentHashMap<>(); + + /** + * user 与 WebSocketSession 映射 + * + * key1:用户类型 + * key2:用户编号 + */ + private final ConcurrentMap>> userSessions + = new ConcurrentHashMap<>(); + + @Override + public void addSession(WebSocketSession session) { + // 添加到 idSessions 中 + idSessions.put(session.getId(), session); + // 添加到 userSessions 中 + LoginUser user = WebSocketFrameworkUtils.getLoginUser(session); + if (user == null) { + return; + } + ConcurrentMap> userSessionsMap = userSessions.get(user.getUserType()); + if (userSessionsMap == null) { + userSessionsMap = new ConcurrentHashMap<>(); + if (userSessions.putIfAbsent(user.getUserType(), userSessionsMap) != null) { + userSessionsMap = userSessions.get(user.getUserType()); + } + } + CopyOnWriteArrayList sessions = userSessionsMap.get(user.getId()); + if (sessions == null) { + sessions = new CopyOnWriteArrayList<>(); + if (userSessionsMap.putIfAbsent(user.getId(), sessions) != null) { + sessions = userSessionsMap.get(user.getId()); + } + } + sessions.add(session); + } + + @Override + public void removeSession(WebSocketSession session) { + // 移除从 idSessions 中 + idSessions.remove(session.getId()); + // 移除从 idSessions 中 + LoginUser user = WebSocketFrameworkUtils.getLoginUser(session); + if (user == null) { + return; + } + ConcurrentMap> userSessionsMap = userSessions.get(user.getUserType()); + if (userSessionsMap == null) { + return; + } + CopyOnWriteArrayList sessions = userSessionsMap.get(user.getId()); + sessions.removeIf(session0 -> session0.getId().equals(session.getId())); + if (CollUtil.isEmpty(sessions)) { + userSessionsMap.remove(user.getId(), sessions); + } + } + + @Override + public WebSocketSession getSession(String id) { + return idSessions.get(id); + } + + @Override + public Collection getSessionList(Integer userType) { + ConcurrentMap> userSessionsMap = userSessions.get(userType); + if (CollUtil.isEmpty(userSessionsMap)) { + return new ArrayList<>(); + } + LinkedList result = new LinkedList<>(); // 避免扩容 + Long contextTenantId = TenantContextHolder.getTenantId(); + for (List sessions : userSessionsMap.values()) { + if (CollUtil.isEmpty(sessions)) { + continue; + } + // 特殊:如果租户不匹配,则直接排除 + if (contextTenantId != null) { + Long userTenantId = WebSocketFrameworkUtils.getTenantId(sessions.get(0)); + if (!contextTenantId.equals(userTenantId)) { + continue; + } + } + result.addAll(sessions); + } + return result; + } + + @Override + public Collection getSessionList(Integer userType, Long userId) { + ConcurrentMap> userSessionsMap = userSessions.get(userType); + if (CollUtil.isEmpty(userSessionsMap)) { + return new ArrayList<>(); + } + CopyOnWriteArrayList sessions = userSessionsMap.get(userId); + return CollUtil.isNotEmpty(sessions) ? new ArrayList<>(sessions) : new ArrayList<>(); + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/util/WebSocketFrameworkUtils.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/util/WebSocketFrameworkUtils.java new file mode 100644 index 0000000..6ae449c --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/core/util/WebSocketFrameworkUtils.java @@ -0,0 +1,67 @@ +package com.win.framework.websocket.core.util; + +import com.win.framework.security.core.LoginUser; +import org.springframework.web.socket.WebSocketSession; + +import java.util.Map; + +/** + * 专属于 web 包的工具类 + * + * @author 芋道源码 + */ +public class WebSocketFrameworkUtils { + + public static final String ATTRIBUTE_LOGIN_USER = "LOGIN_USER"; + + /** + * 设置当前用户 + * + * @param loginUser 登录用户 + * @param attributes Session + */ + public static void setLoginUser(LoginUser loginUser, Map attributes) { + attributes.put(ATTRIBUTE_LOGIN_USER, loginUser); + } + + /** + * 获取当前用户 + * + * @return 当前用户 + */ + public static LoginUser getLoginUser(WebSocketSession session) { + return (LoginUser) session.getAttributes().get(ATTRIBUTE_LOGIN_USER); + } + + /** + * 获得当前用户的编号 + * + * @return 用户编号 + */ + public static Long getLoginUserId(WebSocketSession session) { + LoginUser loginUser = getLoginUser(session); + return loginUser != null ? loginUser.getId() : null; + } + + /** + * 获得当前用户的类型 + * + * @return 用户编号 + */ + public static Integer getLoginUserType(WebSocketSession session) { + LoginUser loginUser = getLoginUser(session); + return loginUser != null ? loginUser.getUserType() : null; + } + + /** + * 获得当前用户的租户编号 + * + * @param session Session + * @return 租户编号 + */ + public static Long getTenantId(WebSocketSession session) { + LoginUser loginUser = getLoginUser(session); + return loginUser != null ? loginUser.getTenantId() : null; + } + +} diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/package-info.java b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/package-info.java new file mode 100644 index 0000000..85eee4a --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/java/com/win/framework/websocket/package-info.java @@ -0,0 +1,4 @@ +/** + * WebSocket 框架,支持多节点的广播 + */ +package com.win.framework.websocket; diff --git a/win-framework/win-spring-boot-starter-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/win-framework/win-spring-boot-starter-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..21b10e0 --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.win.framework.websocket.config.WinWebSocketAutoConfiguration \ No newline at end of file diff --git a/win-framework/win-spring-boot-starter-websocket/《芋道 Spring Boot WebSocket 入门》.md b/win-framework/win-spring-boot-starter-websocket/《芋道 Spring Boot WebSocket 入门》.md new file mode 100644 index 0000000..44e251c --- /dev/null +++ b/win-framework/win-spring-boot-starter-websocket/《芋道 Spring Boot WebSocket 入门》.md @@ -0,0 +1 @@ + diff --git a/win-gateway/Dockerfile b/win-gateway/Dockerfile new file mode 100644 index 0000000..03c1eb2 --- /dev/null +++ b/win-gateway/Dockerfile @@ -0,0 +1,19 @@ +## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性 +## 感谢复旦核博士的建议!灰子哥,牛皮! +FROM eclipse-temurin:21-jre + +## 创建目录,并使用它作为工作目录 +RUN mkdir -p /win-gateway +WORKDIR /win-gateway +## 将后端项目的 Jar 文件,复制到镜像中 +COPY ./target/win-gateway.jar app.jar + +## 设置 TZ 时区 +## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖 +ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m" + +## 暴露后端项目的 48080 端口 +EXPOSE 48080 + +## 启动后端项目 +CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar diff --git a/win-gateway/pom.xml b/win-gateway/pom.xml new file mode 100644 index 0000000..ab2655c --- /dev/null +++ b/win-gateway/pom.xml @@ -0,0 +1,101 @@ + + + + win + com.win + ${revision} + + 4.0.0 + win-gateway + jar + + ${project.artifactId} + API 服务网关,基于 Spring Cloud Gateway 实现 + https://github.com/YunaiV/win-cloud + + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + + com.win + win-module-system-api + ${revision} + + + org.springdoc + springdoc-openapi-webmvc-core + + + + + + + org.springframework.cloud + spring-cloud-starter-gateway + + + + com.github.xiaoymin + knife4j-gateway-spring-boot-starter + + + + + org.springframework.cloud + spring-cloud-starter-loadbalancer + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.win + win-spring-boot-starter-monitor + + + + + com.google.guava + guava + + + + + + + ${project.artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + + + repackage + + + + + + + + diff --git a/win-gateway/src/main/java/com/win/gateway/GatewayServerApplication.java b/win-gateway/src/main/java/com/win/gateway/GatewayServerApplication.java new file mode 100644 index 0000000..a3b584d --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/GatewayServerApplication.java @@ -0,0 +1,14 @@ +package com.win.gateway; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class GatewayServerApplication { + + public static void main(String[] args) { + // 启动 Spring Boot 应用 + SpringApplication.run(GatewayServerApplication.class, args); + } + +} diff --git a/win-gateway/src/main/java/com/win/gateway/filter/cors/CorsFilter.java b/win-gateway/src/main/java/com/win/gateway/filter/cors/CorsFilter.java new file mode 100644 index 0000000..dea429c --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/filter/cors/CorsFilter.java @@ -0,0 +1,48 @@ +package com.win.gateway.filter.cors; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.cors.reactive.CorsUtils; +import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.server.WebFilter; +import org.springframework.web.server.WebFilterChain; +import reactor.core.publisher.Mono; + +/** + * 跨域 Filter + * + * @author 芋道源码 + */ +@Component +public class CorsFilter implements WebFilter { + + private static final String ALL = "*"; + private static final String MAX_AGE = "3600L"; + + @Override + public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { + // 非跨域请求,直接放行 + ServerHttpRequest request = exchange.getRequest(); + if (!CorsUtils.isCorsRequest(request)) { + return chain.filter(exchange); + } + + // 设置跨域响应头 + ServerHttpResponse response = exchange.getResponse(); + HttpHeaders headers = response.getHeaders(); + headers.add("Access-Control-Allow-Origin", ALL); + headers.add("Access-Control-Allow-Methods", ALL); + headers.add("Access-Control-Allow-Headers", ALL); + headers.add("Access-Control-Max-Age", MAX_AGE); + if (request.getMethod() == HttpMethod.OPTIONS) { + response.setStatusCode(HttpStatus.OK); + return Mono.empty(); + } + return chain.filter(exchange); + } + +} diff --git a/win-gateway/src/main/java/com/win/gateway/filter/cors/CorsResponseHeaderFilter.java b/win-gateway/src/main/java/com/win/gateway/filter/cors/CorsResponseHeaderFilter.java new file mode 100644 index 0000000..db9c6e3 --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/filter/cors/CorsResponseHeaderFilter.java @@ -0,0 +1,45 @@ +package com.win.gateway.filter.cors; + +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter; +import org.springframework.core.Ordered; +import org.springframework.http.HttpHeaders; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import java.util.ArrayList; + +/** + * 解决 Spring Cloud Gateway 2.x 跨域时,出现重复 Origin 的 BUG + * + * 参考文档: + * + * @author 芋道源码 + */ +@Component +public class CorsResponseHeaderFilter implements GlobalFilter, Ordered { + + @Override + public int getOrder() { + // 指定此过滤器位于 NettyWriteResponseFilter 之后 + // 即待处理完响应体后接着处理响应头 + return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER + 1; + } + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + return chain.filter(exchange).then(Mono.defer(() -> { + exchange.getResponse().getHeaders().entrySet().stream() + .filter(kv -> (kv.getValue() != null && kv.getValue().size() > 1)) + .filter(kv -> (kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN) + || kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS))) + .forEach(kv -> kv.setValue(new ArrayList() {{ + add(kv.getValue().get(0)); + }})); + return chain.filter(exchange); + })); + } + +} diff --git a/win-gateway/src/main/java/com/win/gateway/filter/grey/GrayLoadBalancer.java b/win-gateway/src/main/java/com/win/gateway/filter/grey/GrayLoadBalancer.java new file mode 100644 index 0000000..a9a3b27 --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/filter/grey/GrayLoadBalancer.java @@ -0,0 +1,111 @@ +package com.win.gateway.filter.grey; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.gateway.util.EnvUtils; +import com.alibaba.cloud.nacos.balancer.NacosBalancer; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.*; +import org.springframework.cloud.loadbalancer.core.NoopServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.core.ReactorServiceInstanceLoadBalancer; +import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; +import org.springframework.http.HttpHeaders; +import reactor.core.publisher.Mono; + +import java.util.List; + +/** + * 灰度 {@link GrayLoadBalancer} 实现类 + * + * 根据请求的 header[version] 匹配,筛选满足 metadata[version] 相等的服务实例列表,然后随机 + 权重进行选择一个 + * 1. 假如请求的 header[version] 为空,则不进行筛选,所有服务实例都进行选择 + * 2. 如果 metadata[version] 都不相等,则不进行筛选,所有服务实例都进行选择 + * + * 注意,考虑到实现的简易,它的权重是使用 Nacos 的 nacos.weight,所以随机 + 权重也是基于 {@link NacosBalancer} 筛选。 + * 也就是说,如果你不使用 Nacos 作为注册中心,需要微调一下筛选的实现逻辑 + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +@Slf4j +public class GrayLoadBalancer implements ReactorServiceInstanceLoadBalancer { + + private static final String VERSION = "version"; + + /** + * 用于获取 serviceId 对应的服务实例的列表 + */ + private final ObjectProvider serviceInstanceListSupplierProvider; + /** + * 需要获取的服务实例名 + * + * 暂时用于打印 logger 日志 + */ + private final String serviceId; + + @Override + public Mono> choose(Request request) { + // 获得 HttpHeaders 属性,实现从 header 中获取 version + HttpHeaders headers = ((RequestDataContext) request.getContext()).getClientRequest().getHeaders(); + // 选择实例 + ServiceInstanceListSupplier supplier = serviceInstanceListSupplierProvider.getIfAvailable(NoopServiceInstanceListSupplier::new); + return supplier.get(request).next().map(list -> getInstanceResponse(list, headers)); + } + + private Response getInstanceResponse(List instances, HttpHeaders headers) { + // 如果服务实例为空,则直接返回 + if (CollUtil.isEmpty(instances)) { + log.warn("[getInstanceResponse][serviceId({}) 服务实例列表为空]", serviceId); + return new EmptyResponse(); + } + + // 筛选满足 version 条件的实例列表 + String version = headers.getFirst(VERSION); + List chooseInstances; + if (StrUtil.isEmpty(version)) { + chooseInstances = instances; + } else { + chooseInstances = CollectionUtils.filterList(instances, instance -> version.equals(instance.getMetadata().get("version"))); + if (CollUtil.isEmpty(chooseInstances)) { + log.warn("[getInstanceResponse][serviceId({}) 没有满足版本({})的服务实例列表,直接使用所有服务实例列表]", serviceId, version); + chooseInstances = instances; + } + } + + // 基于 tag 过滤实例列表 + chooseInstances = filterTagServiceInstances(chooseInstances, headers); + + // 随机 + 权重获取实例列表 TODO 芋艿:目前直接使用 Nacos 提供的方法,如果替换注册中心,需要重新失败该方法 + return new DefaultResponse(NacosBalancer.getHostByRandomWeight3(chooseInstances)); + } + + /** + * 基于 tag 请求头,过滤匹配 tag 的服务实例列表 + * + * copy from EnvLoadBalancerClient + * + * @param instances 服务实例列表 + * @param headers 请求头 + * @return 服务实例列表 + */ + private List filterTagServiceInstances(List instances, HttpHeaders headers) { + // 情况一,没有 tag 时,直接返回 + String tag = EnvUtils.getTag(headers); + if (StrUtil.isEmpty(tag)) { + return instances; + } + + // 情况二,有 tag 时,使用 tag 匹配服务实例 + List chooseInstances = CollectionUtils.filterList(instances, instance -> tag.equals(EnvUtils.getTag(instance))); + if (CollUtil.isEmpty(chooseInstances)) { + log.warn("[filterTagServiceInstances][serviceId({}) 没有满足 tag({}) 的服务实例列表,直接使用所有服务实例列表]", serviceId, tag); + chooseInstances = instances; + } + return chooseInstances; + } + +} diff --git a/win-gateway/src/main/java/com/win/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java b/win-gateway/src/main/java/com/win/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java new file mode 100644 index 0000000..8a94230 --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java @@ -0,0 +1,138 @@ +package com.win.gateway.filter.grey; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.*; +import org.springframework.cloud.gateway.config.GatewayLoadBalancerProperties; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.cloud.gateway.filter.ReactiveLoadBalancerClientFilter; +import org.springframework.cloud.gateway.support.DelegatingServiceInstance; +import org.springframework.cloud.gateway.support.NotFoundException; +import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; +import org.springframework.core.Ordered; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import java.net.URI; +import java.util.Map; +import java.util.Set; + +import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.*; + +/** + * 支持灰度功能的 {@link ReactiveLoadBalancerClientFilter} 实现类 + * + * 由于 {@link ReactiveLoadBalancerClientFilter#choose(Request, String, Set)} 是 private 方法,无法进行重写。 + * 因此,这里只好 copy 它所有的代码,手动重写 choose 方法 + * + * 具体的使用与实现原理,可阅读如下两个文章: + * 1. https://www.jianshu.com/p/6db15bc0be8f + * 2. https://cloud.tencent.com/developer/article/1620795 + * + * @author 芋道源码 + */ +@Component +@AllArgsConstructor +@Slf4j +@SuppressWarnings({"JavadocReference", "rawtypes", "unchecked", "ConstantConditions"}) +public class GrayReactiveLoadBalancerClientFilter implements GlobalFilter, Ordered { + + private final LoadBalancerClientFactory clientFactory; + + private final GatewayLoadBalancerProperties properties; + + @Override + public int getOrder() { + return ReactiveLoadBalancerClientFilter.LOAD_BALANCER_CLIENT_FILTER_ORDER; + } + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + URI url = exchange.getAttribute(GATEWAY_REQUEST_URL_ATTR); + String schemePrefix = exchange.getAttribute(GATEWAY_SCHEME_PREFIX_ATTR); + // 修改 by 芋道源码:将 lb 替换成 grayLb,表示灰度负载均衡 + if (url == null || (!"grayLb".equals(url.getScheme()) && !"grayLb".equals(schemePrefix))) { + return chain.filter(exchange); + } + // preserve the original url + addOriginalRequestUrl(exchange, url); + + if (log.isTraceEnabled()) { + log.trace(ReactiveLoadBalancerClientFilter.class.getSimpleName() + " url before: " + url); + } + + URI requestUri = exchange.getAttribute(GATEWAY_REQUEST_URL_ATTR); + String serviceId = requestUri.getHost(); + Set supportedLifecycleProcessors = LoadBalancerLifecycleValidator + .getSupportedLifecycleProcessors(clientFactory.getInstances(serviceId, LoadBalancerLifecycle.class), + RequestDataContext.class, ResponseData.class, ServiceInstance.class); + DefaultRequest lbRequest = new DefaultRequest<>( + new RequestDataContext(new RequestData(exchange.getRequest()), getHint(serviceId))); + return choose(lbRequest, serviceId, supportedLifecycleProcessors).doOnNext(response -> { + + if (!response.hasServer()) { + supportedLifecycleProcessors.forEach(lifecycle -> lifecycle + .onComplete(new CompletionContext<>(CompletionContext.Status.DISCARD, lbRequest, response))); + throw NotFoundException.create(properties.isUse404(), "Unable to find instance for " + url.getHost()); + } + + ServiceInstance retrievedInstance = response.getServer(); + + URI uri = exchange.getRequest().getURI(); + + // if the `lb:` mechanism was used, use `` as the default, + // if the loadbalancer doesn't provide one. + String overrideScheme = retrievedInstance.isSecure() ? "https" : "http"; + if (schemePrefix != null) { + overrideScheme = url.getScheme(); + } + + DelegatingServiceInstance serviceInstance = new DelegatingServiceInstance(retrievedInstance, + overrideScheme); + + URI requestUrl = reconstructURI(serviceInstance, uri); + + if (log.isTraceEnabled()) { + log.trace("LoadBalancerClientFilter url chosen: " + requestUrl); + } + exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, requestUrl); + exchange.getAttributes().put(GATEWAY_LOADBALANCER_RESPONSE_ATTR, response); + supportedLifecycleProcessors.forEach(lifecycle -> lifecycle.onStartRequest(lbRequest, response)); + }).then(chain.filter(exchange)) + .doOnError(throwable -> supportedLifecycleProcessors.forEach(lifecycle -> lifecycle + .onComplete(new CompletionContext( + CompletionContext.Status.FAILED, throwable, lbRequest, + exchange.getAttribute(GATEWAY_LOADBALANCER_RESPONSE_ATTR))))) + .doOnSuccess(aVoid -> supportedLifecycleProcessors.forEach(lifecycle -> lifecycle + .onComplete(new CompletionContext( + CompletionContext.Status.SUCCESS, lbRequest, + exchange.getAttribute(GATEWAY_LOADBALANCER_RESPONSE_ATTR), + new ResponseData(exchange.getResponse(), new RequestData(exchange.getRequest())))))); + } + + protected URI reconstructURI(ServiceInstance serviceInstance, URI original) { + return LoadBalancerUriTools.reconstructURI(serviceInstance, original); + } + + private Mono> choose(Request lbRequest, String serviceId, + Set supportedLifecycleProcessors) { + // 修改 by 芋道源码:直接创建 GrayLoadBalancer 对象 + GrayLoadBalancer loadBalancer = new GrayLoadBalancer( + clientFactory.getLazyProvider(serviceId, ServiceInstanceListSupplier.class), serviceId); + supportedLifecycleProcessors.forEach(lifecycle -> lifecycle.onStart(lbRequest)); + return loadBalancer.choose(lbRequest); + } + + private String getHint(String serviceId) { + LoadBalancerProperties loadBalancerProperties = clientFactory.getProperties(serviceId); + Map hints = loadBalancerProperties.getHint(); + String defaultHint = hints.getOrDefault("default", "default"); + String hintPropertyValue = hints.get(serviceId); + return hintPropertyValue != null ? hintPropertyValue : defaultHint; + } + +} diff --git a/win-gateway/src/main/java/com/win/gateway/filter/logging/AccessLog.java b/win-gateway/src/main/java/com/win/gateway/filter/logging/AccessLog.java new file mode 100644 index 0000000..4b8e00f --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/filter/logging/AccessLog.java @@ -0,0 +1,92 @@ +package com.win.gateway.filter.logging; + +import lombok.Data; +import org.springframework.cloud.gateway.route.Route; +import org.springframework.http.HttpStatus; +import org.springframework.util.MultiValueMap; + +import java.time.LocalDateTime; + +/** + * 网关的访问日志 + */ +@Data +public class AccessLog { + + /** + * 链路追踪编号 + */ + private String traceId; + /** + * 用户编号 + */ + private Long userId; + /** + * 用户类型 + */ + private Integer userType; + /** + * 路由 + * + * 类似 ApiAccessLogCreateReqDTO 的 applicationName + */ + private Route route; + + /** + * 协议 + */ + private String schema; + /** + * 请求方法名 + */ + private String requestMethod; + /** + * 访问地址 + */ + private String requestUrl; + /** + * 查询参数 + */ + private MultiValueMap queryParams; + /** + * 请求体 + */ + private String requestBody; + /** + * 请求头 + */ + private MultiValueMap requestHeaders; + /** + * 用户 IP + */ + private String userIp; + + /** + * 响应体 + * + * 类似 ApiAccessLogCreateReqDTO 的 resultCode + resultMsg + */ + private String responseBody; + /** + * 响应头 + */ + private MultiValueMap responseHeaders; + /** + * 响应结果 + */ + private HttpStatus httpStatus; + + /** + * 开始请求时间 + */ + private LocalDateTime startTime; + /** + * 结束请求时间 + */ + private LocalDateTime endTime; + /** + * 执行时长,单位:毫秒 + */ + private Integer duration; + +} diff --git a/win-gateway/src/main/java/com/win/gateway/filter/logging/AccessLogFilter.java b/win-gateway/src/main/java/com/win/gateway/filter/logging/AccessLogFilter.java new file mode 100644 index 0000000..efd2a70 --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/filter/logging/AccessLogFilter.java @@ -0,0 +1,263 @@ +package com.win.gateway.filter.logging; + +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.json.JSONUtil; +import com.win.framework.common.util.json.JsonUtils; +import com.win.gateway.util.SecurityFrameworkUtils; +import com.win.gateway.util.WebFrameworkUtils; +import com.alibaba.nacos.common.utils.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.reactivestreams.Publisher; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.cloud.gateway.filter.factory.rewrite.CachedBodyOutputMessage; +import org.springframework.cloud.gateway.filter.factory.rewrite.ModifyRequestBodyGatewayFilterFactory; +import org.springframework.cloud.gateway.support.BodyInserterContext; +import org.springframework.cloud.gateway.support.ServerWebExchangeUtils; +import org.springframework.core.Ordered; +import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.core.io.buffer.DataBufferFactory; +import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.core.io.buffer.DefaultDataBufferFactory; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ReactiveHttpOutputMessage; +import org.springframework.http.codec.CodecConfigurer; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpRequestDecorator; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.http.server.reactive.ServerHttpResponseDecorator; +import org.springframework.stereotype.Component; +import org.springframework.web.reactive.function.BodyInserter; +import org.springframework.web.reactive.function.BodyInserters; +import org.springframework.web.reactive.function.server.ServerRequest; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +import jakarta.annotation.Resource; +import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +import static cn.hutool.core.date.DatePattern.NORM_DATETIME_MS_FORMATTER; + +/** + * 网关的访问日志过滤器 + * + * 从功能上,它类似 win-spring-boot-starter-web 的 ApiAccessLogFilter 过滤器 + * + * TODO 芋艿:如果网关执行异常,不会记录访问日志,后续研究下 https://github.com/Silvmike/webflux-demo/blob/master/tests/src/test/java/ru/hardcoders/demo/webflux/web_handler/filters/logging + * + * @author 芋道源码 + */ +@Slf4j +@Component +public class AccessLogFilter implements GlobalFilter, Ordered { + + @Resource + private CodecConfigurer codecConfigurer; + + /** + * 打印日志 + * + * @param gatewayLog 网关日志 + */ + private void writeAccessLog(AccessLog gatewayLog) { + // 方式一:打印 Logger 后,通过 ELK 进行收集 + // log.info("[writeAccessLog][日志内容:{}]", JsonUtils.toJsonString(gatewayLog)); + + // 方式二:调用远程服务,记录到数据库中 + // TODO 芋艿:暂未实现 + + // 方式三:打印到控制台,方便排查错误 + Map values = MapUtil.newHashMap(15, true); // 手工拼接,保证排序;15 保证不用扩容 + values.put("userId", gatewayLog.getUserId()); + values.put("userType", gatewayLog.getUserType()); + values.put("routeId", gatewayLog.getRoute() != null ? gatewayLog.getRoute().getId() : null); + values.put("schema", gatewayLog.getSchema()); + values.put("requestUrl", gatewayLog.getRequestUrl()); + values.put("queryParams", gatewayLog.getQueryParams().toSingleValueMap()); + values.put("requestBody", JsonUtils.isJson(gatewayLog.getRequestBody()) ? // 保证 body 的展示好看 + JSONUtil.parse(gatewayLog.getRequestBody()) : gatewayLog.getRequestBody()); + values.put("requestHeaders", JsonUtils.toJsonString(gatewayLog.getRequestHeaders().toSingleValueMap())); + values.put("userIp", gatewayLog.getUserIp()); + values.put("responseBody", JsonUtils.isJson(gatewayLog.getResponseBody()) ? // 保证 body 的展示好看 + JSONUtil.parse(gatewayLog.getResponseBody()) : gatewayLog.getResponseBody()); + values.put("responseHeaders", gatewayLog.getResponseHeaders() != null ? + JsonUtils.toJsonString(gatewayLog.getResponseHeaders().toSingleValueMap()) : null); + values.put("httpStatus", gatewayLog.getHttpStatus()); + values.put("startTime", LocalDateTimeUtil.format(gatewayLog.getStartTime(), NORM_DATETIME_MS_FORMATTER)); + values.put("endTime", LocalDateTimeUtil.format(gatewayLog.getEndTime(), NORM_DATETIME_MS_FORMATTER)); + values.put("duration", gatewayLog.getDuration() != null ? gatewayLog.getDuration() + " ms" : null); + log.info("[writeAccessLog][网关日志:{}]", JsonUtils.toJsonPrettyString(values)); + } + + @Override + public int getOrder() { + return Ordered.HIGHEST_PRECEDENCE; + } + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + // 将 Request 中可以直接获取到的参数,设置到网关日志 + ServerHttpRequest request = exchange.getRequest(); + // TODO traceId + AccessLog gatewayLog = new AccessLog(); + gatewayLog.setRoute(WebFrameworkUtils.getGatewayRoute(exchange)); + gatewayLog.setSchema(request.getURI().getScheme()); + gatewayLog.setRequestMethod(request.getMethod().name()); + gatewayLog.setRequestUrl(request.getURI().getRawPath()); + gatewayLog.setQueryParams(request.getQueryParams()); + gatewayLog.setRequestHeaders(request.getHeaders()); + gatewayLog.setStartTime(LocalDateTime.now()); + gatewayLog.setUserIp(WebFrameworkUtils.getClientIP(exchange)); + + // 继续 filter 过滤 + MediaType mediaType = request.getHeaders().getContentType(); + if (MediaType.APPLICATION_FORM_URLENCODED.isCompatibleWith(mediaType) + || MediaType.APPLICATION_JSON.isCompatibleWith(mediaType)) { // 适合 JSON 和 Form 提交的请求 + return filterWithRequestBody(exchange, chain, gatewayLog); + } + return filterWithoutRequestBody(exchange, chain, gatewayLog); + } + + private Mono filterWithoutRequestBody(ServerWebExchange exchange, GatewayFilterChain chain, AccessLog accessLog) { + // 包装 Response,用于记录 Response Body + ServerHttpResponseDecorator decoratedResponse = recordResponseLog(exchange, accessLog); + return chain.filter(exchange.mutate().response(decoratedResponse).build()) + .then(Mono.fromRunnable(() -> writeAccessLog(accessLog))); // 打印日志 + } + + /** + * 参考 {@link ModifyRequestBodyGatewayFilterFactory} 实现 + * + * 差别主要在于使用 modifiedBody 来读取 Request Body 数据 + */ + private Mono filterWithRequestBody(ServerWebExchange exchange, GatewayFilterChain chain, AccessLog gatewayLog) { + // 设置 Request Body 读取时,设置到网关日志 + // 此处 codecConfigurer.getReaders() 的目的,是解决 spring.codec.max-in-memory-size 不生效 + ServerRequest serverRequest = ServerRequest.create(exchange, codecConfigurer.getReaders()); + Mono modifiedBody = serverRequest.bodyToMono(String.class).flatMap(body -> { + gatewayLog.setRequestBody(body); + return Mono.just(body); + }); + + // 创建 BodyInserter 对象 + BodyInserter, ReactiveHttpOutputMessage> bodyInserter = BodyInserters.fromPublisher(modifiedBody, String.class); + // 创建 CachedBodyOutputMessage 对象 + HttpHeaders headers = new HttpHeaders(); + headers.putAll(exchange.getRequest().getHeaders()); + // the new content type will be computed by bodyInserter + // and then set in the request decorator + headers.remove(HttpHeaders.CONTENT_LENGTH); // 移除 + CachedBodyOutputMessage outputMessage = new CachedBodyOutputMessage(exchange, headers); + // 通过 BodyInserter 将 Request Body 写入到 CachedBodyOutputMessage 中 + return bodyInserter.insert(outputMessage, new BodyInserterContext()).then(Mono.defer(() -> { + // 包装 Request,用于缓存 Request Body + ServerHttpRequest decoratedRequest = requestDecorate(exchange, headers, outputMessage); + // 包装 Response,用于记录 Response Body + ServerHttpResponseDecorator decoratedResponse = recordResponseLog(exchange, gatewayLog); + // 记录普通的 + return chain.filter(exchange.mutate().request(decoratedRequest).response(decoratedResponse).build()) + .then(Mono.fromRunnable(() -> writeAccessLog(gatewayLog))); // 打印日志 + + })); + } + + /** + * 记录响应日志 + * 通过 DataBufferFactory 解决响应体分段传输问题。 + */ + private ServerHttpResponseDecorator recordResponseLog(ServerWebExchange exchange, AccessLog gatewayLog) { + ServerHttpResponse response = exchange.getResponse(); + return new ServerHttpResponseDecorator(response) { + + @Override + public Mono writeWith(Publisher body) { + if (body instanceof Flux) { + DataBufferFactory bufferFactory = response.bufferFactory(); + // 计算执行时间 + gatewayLog.setEndTime(LocalDateTime.now()); + gatewayLog.setDuration((int) (LocalDateTimeUtil.between(gatewayLog.getStartTime(), + gatewayLog.getEndTime()).toMillis())); + // 设置其它字段 + gatewayLog.setUserId(SecurityFrameworkUtils.getLoginUserId(exchange)); + gatewayLog.setUserType(SecurityFrameworkUtils.getLoginUserType(exchange)); + gatewayLog.setResponseHeaders(response.getHeaders()); + gatewayLog.setHttpStatus((HttpStatus) response.getStatusCode()); + + // 获取响应类型,如果是 json 就打印 + String originalResponseContentType = exchange.getAttribute(ServerWebExchangeUtils.ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR); + if (StringUtils.isNotBlank(originalResponseContentType) + && originalResponseContentType.contains("application/json")) { + Flux fluxBody = Flux.from(body); + return super.writeWith(fluxBody.buffer().map(dataBuffers -> { + // 设置 response body 到网关日志 + byte[] content = readContent(dataBuffers); + String responseResult = new String(content, StandardCharsets.UTF_8); + gatewayLog.setResponseBody(responseResult); + + // 响应 + return bufferFactory.wrap(content); + })); + } + } + // if body is not a flux. never got there. + return super.writeWith(body); + } + }; + } + + // ========== 参考 ModifyRequestBodyGatewayFilterFactory 中的方法 ========== + + /** + * 请求装饰器,支持重新计算 headers、body 缓存 + * + * @param exchange 请求 + * @param headers 请求头 + * @param outputMessage body 缓存 + * @return 请求装饰器 + */ + private ServerHttpRequestDecorator requestDecorate(ServerWebExchange exchange, HttpHeaders headers, CachedBodyOutputMessage outputMessage) { + return new ServerHttpRequestDecorator(exchange.getRequest()) { + + @Override + public HttpHeaders getHeaders() { + long contentLength = headers.getContentLength(); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.putAll(super.getHeaders()); + if (contentLength > 0) { + httpHeaders.setContentLength(contentLength); + } else { + // TODO: this causes a 'HTTP/1.1 411 Length Required' // on + // httpbin.org + httpHeaders.set(HttpHeaders.TRANSFER_ENCODING, "chunked"); + } + return httpHeaders; + } + + @Override + public Flux getBody() { + return outputMessage.getBody(); + } + }; + } + + // ========== 参考 ModifyResponseBodyGatewayFilterFactory 中的方法 ========== + + private byte[] readContent(List dataBuffers) { + // 合并多个流集合,解决返回体分段传输 + DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); + DataBuffer join = dataBufferFactory.join(dataBuffers); + byte[] content = new byte[join.readableByteCount()]; + join.read(content); + // 释放掉内存 + DataBufferUtils.release(join); + return content; + } + +} diff --git a/win-gateway/src/main/java/com/win/gateway/filter/security/LoginUser.java b/win-gateway/src/main/java/com/win/gateway/filter/security/LoginUser.java new file mode 100644 index 0000000..ca59b16 --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/filter/security/LoginUser.java @@ -0,0 +1,39 @@ +package com.win.gateway.filter.security; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * 登录用户信息 + * + * copy from win-spring-boot-starter-security 的 LoginUser 类 + * + * @author 芋道源码 + */ +@Data +public class LoginUser { + + /** + * 用户编号 + */ + private Long id; + /** + * 用户类型 + */ + private Integer userType; + /** + * 额外的用户信息 + */ + private Map info; + /** + * 租户编号 + */ + private Long tenantId; + /** + * 授权范围 + */ + private List scopes; + +} diff --git a/win-gateway/src/main/java/com/win/gateway/filter/security/TokenAuthenticationFilter.java b/win-gateway/src/main/java/com/win/gateway/filter/security/TokenAuthenticationFilter.java new file mode 100644 index 0000000..07679e1 --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/filter/security/TokenAuthenticationFilter.java @@ -0,0 +1,164 @@ +package com.win.gateway.filter.security; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.core.KeyValue; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.json.JsonUtils; +import com.win.gateway.util.SecurityFrameworkUtils; +import com.win.gateway.util.WebFrameworkUtils; +import com.win.module.system.api.oauth2.OAuth2TokenApi; +import com.win.module.system.api.oauth2.dto.OAuth2AccessTokenCheckRespDTO; +import com.fasterxml.jackson.core.type.TypeReference; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import org.springframework.cloud.client.loadbalancer.reactive.ReactorLoadBalancerExchangeFilterFunction; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; +import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import java.time.Duration; +import java.util.Objects; +import java.util.function.Function; + +import static com.win.framework.common.util.cache.CacheUtils.buildAsyncReloadingCache; + +/** + * Token 过滤器,验证 token 的有效性 + * 1. 验证通过时,将 userId、userType、tenantId 通过 Header 转发给服务 + * 2. 验证不通过,还是会转发给服务。因为,接口是否需要登录的校验,还是交给服务自身处理 + * + * @author 芋道源码 + */ +@Component +public class TokenAuthenticationFilter implements GlobalFilter, Ordered { + + /** + * CommonResult 对应的 TypeReference 结果,用于解析 checkToken 的结果 + */ + private static final TypeReference> CHECK_RESULT_TYPE_REFERENCE + = new TypeReference>() {}; + + /** + * 空的 LoginUser 的结果 + * + * 用于解决如下问题: + * 1. {@link #getLoginUser(ServerWebExchange, String)} 返回 Mono.empty() 时,会导致后续的 flatMap 无法进行处理的问题。 + * 2. {@link #buildUser(String)} 时,如果 Token 已经过期,返回 LOGIN_USER_EMPTY 对象,避免缓存无法刷新 + */ + private static final LoginUser LOGIN_USER_EMPTY = new LoginUser(); + + private final WebClient webClient; + + /** + * 登录用户的本地缓存 + * + * key1:多租户的编号 + * key2:访问令牌 + */ + private final LoadingCache, LoginUser> loginUserCache = buildAsyncReloadingCache(Duration.ofMinutes(1), + new CacheLoader, LoginUser>() { + + @Override + public LoginUser load(KeyValue token) { + String body = checkAccessToken(token.getKey(), token.getValue()).block(); + return buildUser(body); + } + + }); + + public TokenAuthenticationFilter(ReactorLoadBalancerExchangeFilterFunction lbFunction) { + // Q:为什么不使用 OAuth2TokenApi 进行调用? + // A1:Spring Cloud OpenFeign 官方未内置 Reactive 的支持 https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#reactive-support + // A2:校验 Token 的 API 需要使用到 header[tenant-id] 传递租户编号,暂时不想编写 RequestInterceptor 实现 + // 因此,这里采用 WebClient,通过 lbFunction 实现负载均衡 + this.webClient = WebClient.builder().filter(lbFunction).build(); + } + + @Override + public Mono filter(final ServerWebExchange exchange, GatewayFilterChain chain) { + // 移除 login-user 的请求头,避免伪造模拟 + SecurityFrameworkUtils.removeLoginUser(exchange); + + // 情况一,如果没有 Token 令牌,则直接继续 filter + String token = SecurityFrameworkUtils.obtainAuthorization(exchange); + if (StrUtil.isEmpty(token)) { + return chain.filter(exchange); + } + + // 情况二,如果有 Token 令牌,则解析对应 userId、userType、tenantId 等字段,并通过 通过 Header 转发给服务 + // 重要说明:defaultIfEmpty 作用,保证 Mono.empty() 情况,可以继续执行 `flatMap 的 chain.filter(exchange)` 逻辑,避免返回给前端空的 Response!! + return getLoginUser(exchange, token).defaultIfEmpty(LOGIN_USER_EMPTY).flatMap(user -> { + // 1. 无用户,直接 filter 继续请求 + if (user == LOGIN_USER_EMPTY) { + return chain.filter(exchange); + } + + // 2.1 有用户,则设置登录用户 + SecurityFrameworkUtils.setLoginUser(exchange, user); + // 2.2 将 user 并设置到 login-user 的请求头,使用 json 存储值 + ServerWebExchange newExchange = exchange.mutate() + .request(builder -> SecurityFrameworkUtils.setLoginUserHeader(builder, user)).build(); + return chain.filter(newExchange); + }); + } + + private Mono getLoginUser(ServerWebExchange exchange, String token) { + // 从缓存中,获取 LoginUser + Long tenantId = WebFrameworkUtils.getTenantId(exchange); + KeyValue cacheKey = new KeyValue().setKey(tenantId).setValue(token); + LoginUser localUser = loginUserCache.getIfPresent(cacheKey); + if (localUser != null) { + return Mono.just(localUser); + } + + // 缓存不存在,则请求远程服务 + return checkAccessToken(tenantId, token).flatMap((Function>) body -> { + LoginUser remoteUser = buildUser(body); + if (remoteUser != null) { + // 非空,则进行缓存 + loginUserCache.put(cacheKey, remoteUser); + return Mono.just(remoteUser); + } + return Mono.empty(); + }); + } + + private Mono checkAccessToken(Long tenantId, String token) { + return webClient.get() + .uri(OAuth2TokenApi.URL_CHECK, uriBuilder -> uriBuilder.queryParam("accessToken", token).build()) + .headers(httpHeaders -> WebFrameworkUtils.setTenantIdHeader(tenantId, httpHeaders)) // 设置租户的 Header + .retrieve().bodyToMono(String.class); + } + + private LoginUser buildUser(String body) { + // 处理结果,结果不正确 + CommonResult result = JsonUtils.parseObject(body, CHECK_RESULT_TYPE_REFERENCE); + if (result == null) { + return null; + } + if (result.isError()) { + // 特殊情况:令牌已经过期(code = 401),需要返回 LOGIN_USER_EMPTY,避免 Token 一直因为缓存,被误判为有效 + if (Objects.equals(result.getCode(), HttpStatus.UNAUTHORIZED.value())) { + return LOGIN_USER_EMPTY; + } + return null; + } + + // 创建登录用户 + OAuth2AccessTokenCheckRespDTO tokenInfo = result.getData(); + return new LoginUser().setId(tokenInfo.getUserId()).setUserType(tokenInfo.getUserType()) + .setInfo(tokenInfo.getUserInfo()) // 额外的用户信息 + .setTenantId(tokenInfo.getTenantId()).setScopes(tokenInfo.getScopes()); + } + + @Override + public int getOrder() { + return -100; // 和 Spring Security Filter 的顺序对齐 + } + +} diff --git a/win-gateway/src/main/java/com/win/gateway/handler/GlobalExceptionHandler.java b/win-gateway/src/main/java/com/win/gateway/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..9ef5e07 --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/handler/GlobalExceptionHandler.java @@ -0,0 +1,74 @@ +package com.win.gateway.handler; + +import com.win.framework.common.pojo.CommonResult; +import com.win.gateway.util.WebFrameworkUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler; +import org.springframework.core.annotation.Order; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.server.ResponseStatusException; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import static com.win.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR; + +/** + * Gateway 的全局异常处理器,将 Exception 翻译成 CommonResult + 对应的异常编号 + * + * 在功能上,和 win-spring-boot-starter-web 的 GlobalExceptionHandler 类是一致的 + * + * @author 芋道源码 + */ +@Component +@Order(-1) // 保证优先级高于默认的 Spring Cloud Gateway 的 ErrorWebExceptionHandler 实现 +@Slf4j +public class GlobalExceptionHandler implements ErrorWebExceptionHandler { + + @Override + public Mono handle(ServerWebExchange exchange, Throwable ex) { + // 已经 commit,则直接返回异常 + ServerHttpResponse response = exchange.getResponse(); + if (response.isCommitted()) { + return Mono.error(ex); + } + + // 转换成 CommonResult + CommonResult result; + if (ex instanceof ResponseStatusException) { + result = responseStatusExceptionHandler(exchange, (ResponseStatusException) ex); + } else { + result = defaultExceptionHandler(exchange, ex); + } + + // 返回给前端 + return WebFrameworkUtils.writeJSON(exchange, result); + } + + /** + * 处理 Spring Cloud Gateway 默认抛出的 ResponseStatusException 异常 + */ + private CommonResult responseStatusExceptionHandler(ServerWebExchange exchange, + ResponseStatusException ex) { + // TODO 芋艿:这里要精细化翻译,默认返回用户是看不懂的 + ServerHttpRequest request = exchange.getRequest(); + log.error("[responseStatusExceptionHandler][uri({}/{}) 发生异常]", request.getURI(), request.getMethod(), ex); + return CommonResult.error(ex.getStatusCode().value(), ex.getReason()); + } + + /** + * 处理系统异常,兜底处理所有的一切 + */ + @ExceptionHandler(value = Exception.class) + public CommonResult defaultExceptionHandler(ServerWebExchange exchange, + Throwable ex) { + ServerHttpRequest request = exchange.getRequest(); + log.error("[defaultExceptionHandler][uri({}/{}) 发生异常]", request.getURI(), request.getMethod(), ex); + // TODO 芋艿:是否要插入异常日志呢? + // 返回 ERROR CommonResult + return CommonResult.error(INTERNAL_SERVER_ERROR.getCode(), INTERNAL_SERVER_ERROR.getMsg()); + } + +} diff --git a/win-gateway/src/main/java/com/win/gateway/route/dynamic/package-info.java b/win-gateway/src/main/java/com/win/gateway/route/dynamic/package-info.java new file mode 100644 index 0000000..c0d9c1c --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/route/dynamic/package-info.java @@ -0,0 +1,10 @@ +/** + * 在 Nacos 配置发生变化时,Spring Cloud Alibaba Nacos Config 内置的监听器,会监听到配置刷新,最终触发 Gateway 的路由信息刷新。 + * + * 参见 https://www.iocoder.cn/Spring-Cloud/Spring-Cloud-Gateway/?win 博客的「6. 基于配置中心 Nacos 实现动态路由」小节 + * + * 使用方式:在 Nacos 修改 DataId 为 gateway-server.yaml 的配置,修改 spring.cloud.gateway.routes 配置项 + * + * @author 芋道源码 + */ +package com.win.gateway.route.dynamic; diff --git a/win-gateway/src/main/java/com/win/gateway/route/package-info.java b/win-gateway/src/main/java/com/win/gateway/route/package-info.java new file mode 100644 index 0000000..42d1376 --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/route/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位符 + */ +package com.win.gateway.route; diff --git a/win-gateway/src/main/java/com/win/gateway/util/BannerApplicationRunner.java b/win-gateway/src/main/java/com/win/gateway/util/BannerApplicationRunner.java new file mode 100644 index 0000000..d1ef976 --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/util/BannerApplicationRunner.java @@ -0,0 +1,51 @@ +package com.win.gateway.util; + +import cn.hutool.core.thread.ThreadUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +/** + * 项目启动成功后,提供文档相关的地址 + * + * @author 芋道源码 + */ +@Component +@Slf4j +public class BannerApplicationRunner implements ApplicationRunner { + + @Override + public void run(ApplicationArguments args) { + ThreadUtil.execute(() -> { + ThreadUtil.sleep(1, TimeUnit.SECONDS); // 延迟 1 秒,保证输出到结尾 + log.info("\n----------------------------------------------------------\n\t" + + "项目启动成功!\n\t" + +// "接口文档: \t{} \n\t" + +// "开发文档: \t{} \n\t" + +// "视频教程: \t{} \n" + + "----------------------------------------------------------", + "https://cloud.iocoder.cn/api-doc/", + "https://cloud.iocoder.cn", + "https://t.zsxq.com/02Yf6M7Qn"); + +// // 数据报表 +// System.out.println("[报表模块 win-module-report 教程][参考 https://cloud.iocoder.cn/report/ 开启]"); +// // 工作流 +// System.out.println("[工作流模块 win-module-bpm 教程][参考 https://cloud.iocoder.cn/bpm/ 开启]"); +// // 商城系统 +// System.out.println("[商城系统 win-module-mall 教程][参考 https://cloud.iocoder.cn/mall/build/ 开启]"); +// // ERP 系统 +// System.out.println("[ERP 系统 win-module-erp - 教程][参考 https://cloud.iocoder.cn/erp/build/ 开启]"); +// // CRM 系统 +// System.out.println("[CRM 系统 win-module-crm - 教程][参考 https://cloud.iocoder.cn/crm/build/ 开启]"); +// // 微信公众号 +// System.out.println("[微信公众号 win-module-mp 教程][参考 https://cloud.iocoder.cn/mp/build/ 开启]"); +// // 支付平台 +// System.out.println("[支付系统 win-module-pay - 教程][参考 https://doc.iocoder.cn/pay/build/ 开启]"); + }); + } + +} diff --git a/win-gateway/src/main/java/com/win/gateway/util/EnvUtils.java b/win-gateway/src/main/java/com/win/gateway/util/EnvUtils.java new file mode 100644 index 0000000..acbbe12 --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/util/EnvUtils.java @@ -0,0 +1,39 @@ +package com.win.gateway.util; + +import cn.hutool.core.net.NetUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.http.HttpHeaders; + +import java.util.Objects; + +/** + * 环境 Utils + * + * copy from win-spring-boot-starter-env 的 EnvUtils 类 + * + * @author 芋道源码 + */ +public class EnvUtils { + + private static final String HEADER_TAG = "tag"; + + public static final String HOST_NAME_VALUE = "${HOSTNAME}"; + + public static String getTag(HttpHeaders headers) { + String tag = headers.getFirst(HEADER_TAG); + // 如果请求的是 "${HOSTNAME}",则解析成对应的本地主机名 + // 目的:特殊逻辑,解决 IDEA Rest Client 不支持环境变量的读取,所以就服务器来做 + return Objects.equals(tag, HOST_NAME_VALUE) ? getHostName() : tag; + } + + public static String getTag(ServiceInstance instance) { + return instance.getMetadata().get(HEADER_TAG); + } + + public static String getHostName() { + return StrUtil.blankToDefault(NetUtil.getLocalHostName(), IdUtil.fastSimpleUUID()); + } + +} diff --git a/win-gateway/src/main/java/com/win/gateway/util/SecurityFrameworkUtils.java b/win-gateway/src/main/java/com/win/gateway/util/SecurityFrameworkUtils.java new file mode 100644 index 0000000..6a6892f --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/util/SecurityFrameworkUtils.java @@ -0,0 +1,118 @@ +package com.win.gateway.util; + +import cn.hutool.core.map.MapUtil; +import com.win.framework.common.util.json.JsonUtils; +import com.win.gateway.filter.security.LoginUser; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.util.StringUtils; +import org.springframework.web.server.ServerWebExchange; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +/** + * 安全服务工具类 + * + * copy from win-spring-boot-starter-security 的 SecurityFrameworkUtils 类 + * + * @author 芋道源码 + */ +@Slf4j +public class SecurityFrameworkUtils { + + private static final String AUTHORIZATION_HEADER = "Authorization"; + + private static final String AUTHORIZATION_BEARER = "Bearer"; + + private static final String LOGIN_USER_HEADER = "login-user"; + + private static final String LOGIN_USER_ID_ATTR = "login-user-id"; + private static final String LOGIN_USER_TYPE_ATTR = "login-user-type"; + + private SecurityFrameworkUtils() {} + + /** + * 从请求中,获得认证 Token + * + * @param exchange 请求 + * @return 认证 Token + */ + public static String obtainAuthorization(ServerWebExchange exchange) { + String authorization = exchange.getRequest().getHeaders().getFirst(AUTHORIZATION_HEADER); + if (!StringUtils.hasText(authorization)) { + return null; + } + int index = authorization.indexOf(AUTHORIZATION_BEARER + " "); + if (index == -1) { // 未找到 + return null; + } + return authorization.substring(index + 7).trim(); + } + + /** + * 设置登录用户 + * + * @param exchange 请求 + * @param user 用户 + */ + public static void setLoginUser(ServerWebExchange exchange, LoginUser user) { + exchange.getAttributes().put(LOGIN_USER_ID_ATTR, user.getId()); + exchange.getAttributes().put(LOGIN_USER_TYPE_ATTR, user.getUserType()); + } + + /** + * 移除请求头的用户 + * + * @param exchange 请求 + * @return 请求 + */ + public static ServerWebExchange removeLoginUser(ServerWebExchange exchange) { + // 如果不包含,直接返回 + if (!exchange.getRequest().getHeaders().containsKey(LOGIN_USER_HEADER)) { + return exchange; + } + // 如果包含,则移除。参考 RemoveRequestHeaderGatewayFilterFactory 实现 + ServerHttpRequest request = exchange.getRequest().mutate() + .headers(httpHeaders -> httpHeaders.remove(LOGIN_USER_HEADER)).build(); + return exchange.mutate().request(request).build(); + } + + /** + * 获得登录用户的编号 + * + * @param exchange 请求 + * @return 用户编号 + */ + public static Long getLoginUserId(ServerWebExchange exchange) { + return MapUtil.getLong(exchange.getAttributes(), LOGIN_USER_ID_ATTR); + } + + /** + * 获得登录用户的类型 + * + * @param exchange 请求 + * @return 用户类型 + */ + public static Integer getLoginUserType(ServerWebExchange exchange) { + return MapUtil.getInt(exchange.getAttributes(), LOGIN_USER_TYPE_ATTR); + } + + /** + * 将 user 并设置到 login-user 的请求头,使用 json 存储值 + * + * @param builder 请求 + * @param user 用户 + */ + public static void setLoginUserHeader(ServerHttpRequest.Builder builder, LoginUser user) { + try { + String userStr = JsonUtils.toJsonString(user); + userStr = URLEncoder.encode(userStr, StandardCharsets.UTF_8); // 编码,避免中文乱码 + builder.header(LOGIN_USER_HEADER, userStr); + } catch (Exception ex) { + log.error("[setLoginUserHeader][序列化 user({}) 发生异常]", user, ex); + throw ex; + } + } + +} diff --git a/win-gateway/src/main/java/com/win/gateway/util/WebFrameworkUtils.java b/win-gateway/src/main/java/com/win/gateway/util/WebFrameworkUtils.java new file mode 100644 index 0000000..e153d20 --- /dev/null +++ b/win-gateway/src/main/java/com/win/gateway/util/WebFrameworkUtils.java @@ -0,0 +1,116 @@ +package com.win.gateway.util; + +import cn.hutool.core.net.NetUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.extra.servlet.ServletUtil; +import com.win.framework.common.util.json.JsonUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cloud.gateway.route.Route; +import org.springframework.cloud.gateway.support.ServerWebExchangeUtils; +import org.springframework.core.io.buffer.DataBufferFactory; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +/** + * Web 工具类 + * + * copy from win-spring-boot-starter-web 的 WebFrameworkUtils 类 + * + * @author 芋道源码 + */ +@Slf4j +public class WebFrameworkUtils { + + private static final String HEADER_TENANT_ID = "tenant-id"; + + private WebFrameworkUtils() {} + + /** + * 将 Gateway 请求中的 header,设置到 HttpHeaders 中 + * + * @param tenantId 租户编号 + * @param httpHeaders WebClient 的请求 + */ + public static void setTenantIdHeader(Long tenantId, HttpHeaders httpHeaders) { + if (tenantId == null) { + return; + } + httpHeaders.set(HEADER_TENANT_ID, String.valueOf(tenantId)); + } + + public static Long getTenantId(ServerWebExchange exchange) { + String tenantId = exchange.getRequest().getHeaders().getFirst(HEADER_TENANT_ID); + return NumberUtil.isNumber(tenantId) ? Long.valueOf(tenantId) : null; + } + + /** + * 返回 JSON 字符串 + * + * @param exchange 响应 + * @param object 对象,会序列化成 JSON 字符串 + */ + @SuppressWarnings("deprecation") // 必须使用 APPLICATION_JSON_UTF8_VALUE,否则会乱码 + public static Mono writeJSON(ServerWebExchange exchange, Object object) { + // 设置 header + ServerHttpResponse response = exchange.getResponse(); + response.getHeaders().setContentType(MediaType.APPLICATION_JSON_UTF8); + // 设置 body + return response.writeWith(Mono.fromSupplier(() -> { + DataBufferFactory bufferFactory = response.bufferFactory(); + try { + return bufferFactory.wrap(JsonUtils.toJsonByte(object)); + } catch (Exception ex) { + ServerHttpRequest request = exchange.getRequest(); + log.error("[writeJSON][uri({}/{}) 发生异常]", request.getURI(), request.getMethod(), ex); + return bufferFactory.wrap(new byte[0]); + } + })); + } + + /** + * 获得客户端 IP + * + * 参考 {@link ServletUtil} 的 getClientIP 方法 + * + * @param exchange 请求 + * @param otherHeaderNames 其它 header 名字的数组 + * @return 客户端 IP + */ + public static String getClientIP(ServerWebExchange exchange, String... otherHeaderNames) { + String[] headers = { "X-Forwarded-For", "X-Real-IP", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR" }; + if (ArrayUtil.isNotEmpty(otherHeaderNames)) { + headers = ArrayUtil.addAll(headers, otherHeaderNames); + } + // 方式一,通过 header 获取 + String ip; + for (String header : headers) { + ip = exchange.getRequest().getHeaders().getFirst(header); + if (!NetUtil.isUnknown(ip)) { + return NetUtil.getMultistageReverseProxyIp(ip); + } + } + + // 方式二,通过 remoteAddress 获取 + if (exchange.getRequest().getRemoteAddress() == null) { + return null; + } + ip = exchange.getRequest().getRemoteAddress().getHostString(); + return NetUtil.getMultistageReverseProxyIp(ip); + } + + /** + * 获得请求匹配的 Route 路由 + * + * @param exchange 请求 + * @return 路由 + */ + public static Route getGatewayRoute(ServerWebExchange exchange) { + return exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR); + } + +} diff --git a/win-gateway/src/main/resources/application-local.yaml b/win-gateway/src/main/resources/application-local.yaml new file mode 100644 index 0000000..e69de29 diff --git a/win-gateway/src/main/resources/application.yaml b/win-gateway/src/main/resources/application.yaml new file mode 100644 index 0000000..1f60180 --- /dev/null +++ b/win-gateway/src/main/resources/application.yaml @@ -0,0 +1,107 @@ +spring: + main: + allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 + + cloud: + # Spring Cloud Gateway 配置项,对应 GatewayProperties 类 + gateway: + # 路由配置项,对应 RouteDefinition 数组 + routes: + ## system-server 服务 + - id: system-admin-api # 路由的编号 + uri: lb://system-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/system/** + filters: + - RewritePath=/admin-api/system/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs + - id: system-app-api # 路由的编号 + uri: lb://system-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/system/** + filters: + - RewritePath=/app-api/system/v3/api-docs, /v3/api-docs + ## infra-server 服务 + - id: infra-admin-api # 路由的编号 + uri: grayLb://infra-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/infra/** + filters: + - RewritePath=/admin-api/infra/v3/api-docs, /v3/api-docs + - id: infra-app-api # 路由的编号 + uri: grayLb://infra-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/infra/** + filters: + - RewritePath=/app-api/infra/v3/api-docs, /v3/api-docs + - id: infra-spring-boot-admin # 路由的编号(Spring Boot Admin) + uri: grayLb://infra-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin/** + - id: infra-websocket # 路由的编号(WebSocket) + uri: grayLb://infra-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/infra/ws/** + ## member-server 服务 + - id: mes-admin-api # 路由的编号 + uri: lb://mes-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/mes/** + filters: + - RewritePath=/admin-api/mes/v3/api-docs, /v3/api-docs + - id: mes-app-api # 路由的编号 + uri: lb://mes-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/mes/** + filters: + - RewritePath=/app-api/mes/v3/api-docs, /v3/api-docs + ## bpm-server 服务 + - id: bpm-admin-api # 路由的编号 + uri: grayLb://bpm-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/bpm/** + filters: + - RewritePath=/admin-api/bpm/v3/api-docs, /v3/api-docs + ## report-server 服务 + - id: report-admin-api # 路由的编号 + uri: grayLb://report-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/report/** + filters: + - RewritePath=/admin-api/report/v3/api-docs, /v3/api-docs + - id: report-jimu # 路由的编号(积木报表) + uri: grayLb://report-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/jmreport/** + ## statistics-server 服务 + - id: statistics-admin-api # 路由的编号 + uri: grayLb://statistics-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/statistics/** + filters: + - RewritePath=/admin-api/statistics/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs + x-forwarded: + prefix-enabled: false # 避免 Swagger 重复带上额外的 /admin-api/system 前缀 + +knife4j: + # 聚合 Swagger 文档,参考 https://doc.xiaominfo.com/docs/action/springcloud-gateway 文档 + gateway: + enabled: true + routes: + - name: system-server + service-name: system-server + url: /admin-api/system/v3/api-docs + - name: infra-server + service-name: infra-server + url: /admin-api/infra/v3/api-docs + - name: mes-server + service-name: mes-server + url: /admin-api/mes/v3/api-docs + - name: bpm-server + service-name: bpm-server + url: /admin-api/bpm/v3/api-docs + +--- #################### 芋道相关配置 #################### + +win: + info: + version: 1.0.0 \ No newline at end of file diff --git a/win-gateway/src/main/resources/banner.txt b/win-gateway/src/main/resources/banner.txt new file mode 100644 index 0000000..569d201 --- /dev/null +++ b/win-gateway/src/main/resources/banner.txt @@ -0,0 +1,17 @@ +芋道源码 http://www.iocoder.cn +Application Version: ${win.info.version} +Spring Boot Version: ${spring-boot.version} + +.__ __. ______ .______ __ __ _______ +| \ | | / __ \ | _ \ | | | | / _____| +| \| | | | | | | |_) | | | | | | | __ +| . ` | | | | | | _ < | | | | | | |_ | +| |\ | | `--' | | |_) | | `--' | | |__| | +|__| \__| \______/ |______/ \______/ \______| + +███╗ ██╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗ +████╗ ██║██╔═══██╗ ██╔══██╗██║ ██║██╔════╝ +██╔██╗ ██║██║ ██║ ██████╔╝██║ ██║██║ ███╗ +██║╚██╗██║██║ ██║ ██╔══██╗██║ ██║██║ ██║ +██║ ╚████║╚██████╔╝ ██████╔╝╚██████╔╝╚██████╔╝ +╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ diff --git a/win-gateway/src/main/resources/bootstrap-local.yaml b/win-gateway/src/main/resources/bootstrap-local.yaml new file mode 100644 index 0000000..6b2f8f1 --- /dev/null +++ b/win-gateway/src/main/resources/bootstrap-local.yaml @@ -0,0 +1,21 @@ +--- #################### 注册中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.0.103:8848 # + discovery: + namespace: win-cloud-dev # 命名空间。这里使用 dev 开发环境 + +--- #################### 配置中心相关配置 #################### + +spring: + cloud: + nacos: + # Nacos Config 配置项,对应 NacosConfigProperties 配置属性类 + config: + server-addr: 192.168.0.103:8848 # Nacos 服务器地址 + namespace: win-cloud-dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + name: ${spring.application.name} # 使用的 Nacos 配置集的 dataId,默认为 spring.application.name + file-extension: yaml # 使用的 Nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties diff --git a/win-gateway/src/main/resources/bootstrap.yaml b/win-gateway/src/main/resources/bootstrap.yaml new file mode 100644 index 0000000..3eed7be --- /dev/null +++ b/win-gateway/src/main/resources/bootstrap.yaml @@ -0,0 +1,14 @@ +spring: + application: + name: gateway-server + + profiles: + active: local + +server: + port: 48080 + +# 日志文件配置。注意,如果 logging.file.name 不放在 bootstrap.yaml 配置文件,而是放在 application.yaml 中,会导致出现 LOG_FILE_IS_UNDEFINED 文件 +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 diff --git a/win-gateway/src/main/resources/logback-spring.xml b/win-gateway/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..ce034da --- /dev/null +++ b/win-gateway/src/main/resources/logback-spring.xml @@ -0,0 +1,76 @@ + + + + + + + + + +       + + + ${PATTERN_DEFAULT} + + + + + + + + + + ${PATTERN_DEFAULT} + + + + ${LOG_FILE} + + + ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz} + + ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false} + + ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB} + + ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0} + + ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30} + + + + + + 0 + + 256 + + + + + + + + ${PATTERN_DEFAULT} + + + + + + + + + + + + + + + + + + + + + + diff --git a/win-gateway/src/main/resources/static/favicon.ico b/win-gateway/src/main/resources/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..30053fa0fb7c686ce54e7978243cbf2266a79cde GIT binary patch literal 3708 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 R{r4&XYRcM5C + * 通过修改 groupIdNew、artifactIdNew、projectBaseDirNew 三个变量 + * + * @author 闻荫源码 + */ +@Slf4j +public class ProjectReactor { + + private static final String GROUP_ID = "com.win"; + private static final String ARTIFACT_ID = "win"; + private static final String PACKAGE_NAME = "com.win"; + private static final String TITLE = "闻荫管理系统"; + + /** + * 白名单文件,不进行重写,避免出问题 + */ + private static final Set WHITE_FILE_TYPES = SetUtils.asSet("gif", "jpg", "svg", "png", // 图片 + "eot", "woff2", "ttf", "woff"); // 字体 + + public static void main(String[] args) { + long start = System.currentTimeMillis(); + String projectBaseDir = getProjectBaseDir(); + log.info("[main][原项目路劲改地址 ({})]", projectBaseDir); + + // ========== 配置,需要你手动修改 ========== + String groupIdNew = "com.win"; + String artifactIdNew = "win"; + String packageNameNew = "com.win"; + String titleNew = "闻荫管理系统"; + //String projectBaseDirNew = projectBaseDir + "-new"; // 一键改名后,“新”项目所在的目录 + String projectBaseDirNew ="D:\\ideaworkspace\\win-cloud-master-jdk17"; + log.info("[main][检测新项目目录 ({})是否存在]", projectBaseDirNew); + if (FileUtil.exist(projectBaseDirNew)) { + log.error("[main][新项目目录检测 ({})已存在,请更改新的目录!程序退出]", projectBaseDirNew); + return; + } + // 如果新目录中存在 PACKAGE_NAME,ARTIFACT_ID 等关键字,路径会被替换,导致生成的文件不在预期目录 + if (StrUtil.containsAny(projectBaseDirNew, PACKAGE_NAME, ARTIFACT_ID, StrUtil.upperFirst(ARTIFACT_ID))) { + log.error("[main][新项目目录 `projectBaseDirNew` 检测 ({}) 存在冲突名称「{}」或者「{}」,请更改新的目录!程序退出]", + projectBaseDirNew, PACKAGE_NAME, ARTIFACT_ID); + return; + } + log.info("[main][完成新项目目录检测,新项目路径地址 ({})]", projectBaseDirNew); + // 获得需要复制的文件 + log.info("[main][开始获得需要重写的文件,预计需要 10-20 秒]"); + Collection files = listFiles(projectBaseDir); + log.info("[main][需要重写的文件数量:{},预计需要 15-30 秒]", files.size()); + // 写入文件 + files.forEach(file -> { + // 如果是白名单的文件类型,不进行重写,直接拷贝 + String fileType = getFileType(file); + if (WHITE_FILE_TYPES.contains(fileType)) { + copyFile(file, projectBaseDir, projectBaseDirNew, packageNameNew, artifactIdNew); + return; + } + // 如果非白名单的文件类型,重写内容,在生成文件 + String content = replaceFileContent(file, groupIdNew, artifactIdNew, packageNameNew, titleNew); + writeFile(file, content, projectBaseDir, projectBaseDirNew, packageNameNew, artifactIdNew); + }); + log.info("[main][重写完成]共耗时:{} 秒", (System.currentTimeMillis() - start) / 1000); + } + + private static String getProjectBaseDir() { + String baseDir = System.getProperty("user.dir"); + if (StrUtil.isEmpty(baseDir)) { + throw new NullPointerException("项目基础路径不存在"); + } + return baseDir; + } + + private static Collection listFiles(String projectBaseDir) { + Collection files = FileUtil.loopFiles(projectBaseDir); + // 移除 IDEA、Git 自身的文件、Node 编译出来的文件 + files = files.stream() + .filter(file -> !file.getPath().contains(separator + "target" + separator) + && !file.getPath().contains(separator + "node_modules" + separator) + && !file.getPath().contains(separator + ".idea" + separator) + && !file.getPath().contains(separator + ".git" + separator) + && !file.getPath().contains(separator + "dist" + separator) + && !file.getPath().contains(".iml") + && !file.getPath().contains(".html.gz")) + .collect(Collectors.toList()); + return files; + } + + private static String replaceFileContent(File file, String groupIdNew, + String artifactIdNew, String packageNameNew, + String titleNew) { + String content = FileUtil.readString(file, StandardCharsets.UTF_8); + // 如果是白名单的文件类型,不进行重写 + String fileType = getFileType(file); + if (WHITE_FILE_TYPES.contains(fileType)) { + return content; + } + // 执行文件内容都重写 + return content.replaceAll(GROUP_ID, groupIdNew) + .replaceAll(PACKAGE_NAME, packageNameNew) + .replaceAll(ARTIFACT_ID, artifactIdNew) // 必须放在最后替换,因为 ARTIFACT_ID 太短! + .replaceAll(StrUtil.upperFirst(ARTIFACT_ID), StrUtil.upperFirst(artifactIdNew)) + .replaceAll(TITLE, titleNew); + } + + private static void writeFile(File file, String fileContent, String projectBaseDir, + String projectBaseDirNew, String packageNameNew, String artifactIdNew) { + String newPath = buildNewFilePath(file, projectBaseDir, projectBaseDirNew, packageNameNew, artifactIdNew); + FileUtil.writeUtf8String(fileContent, newPath); + } + + private static void copyFile(File file, String projectBaseDir, + String projectBaseDirNew, String packageNameNew, String artifactIdNew) { + String newPath = buildNewFilePath(file, projectBaseDir, projectBaseDirNew, packageNameNew, artifactIdNew); + FileUtil.copyFile(file, new File(newPath)); + } + + private static String buildNewFilePath(File file, String projectBaseDir, + String projectBaseDirNew, String packageNameNew, String artifactIdNew) { + return file.getPath().replace(projectBaseDir, projectBaseDirNew) // 新目录 + .replace(PACKAGE_NAME.replaceAll("\\.", Matcher.quoteReplacement(separator)), + packageNameNew.replaceAll("\\.", Matcher.quoteReplacement(separator))) + .replace(ARTIFACT_ID, artifactIdNew) // + .replaceAll(StrUtil.upperFirst(ARTIFACT_ID), StrUtil.upperFirst(artifactIdNew)); + } + + private static String getFileType(File file) { + return file.length() > 0 ? FileTypeUtil.getType(file) : ""; + } + +} diff --git a/win-module-bpm/pom.xml b/win-module-bpm/pom.xml new file mode 100644 index 0000000..fe9ea34 --- /dev/null +++ b/win-module-bpm/pom.xml @@ -0,0 +1,27 @@ + + + + com.win + win + ${revision} + + 4.0.0 + + win-module-bpm-api + win-module-bpm-biz + + win-module-bpm + pom + + ${project.artifactId} + + bpm 包下,业务流程管理(Business Process Management),我们放工作流的功能。 + 例如说:流程定义、表单配置、审核中心(我的申请、我的待办、我的已办)等等 + bpm 解释:https://baike.baidu.com/item/BPM/1933 + + 工作流基于 Flowable 6 实现,分成流程定义、流程表单、流程实例、流程任务等功能模块。 + + + diff --git a/win-module-bpm/win-module-bpm-api/pom.xml b/win-module-bpm/win-module-bpm-api/pom.xml new file mode 100644 index 0000000..520e2ab --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/pom.xml @@ -0,0 +1,47 @@ + + + + com.win + win-module-bpm + ${revision} + + 4.0.0 + win-module-bpm-api + jar + + ${project.artifactId} + + bpm 模块 API,暴露给其它模块调用 + + + + + com.win + win-common + + + + + org.springdoc + springdoc-openapi-starter-webmvc-api + provided + + + + + org.springframework.boot + spring-boot-starter-validation + true + + + + + org.springframework.cloud + spring-cloud-starter-openfeign + true + + + + diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/api/package-info.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/api/package-info.java new file mode 100644 index 0000000..6af3b56 --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/api/package-info.java @@ -0,0 +1,4 @@ +/** + * bpm API 包,定义暴露给其它模块的 API + */ +package com.win.module.bpm.api; diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/api/task/BpmProcessInstanceApi.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/api/task/BpmProcessInstanceApi.java new file mode 100644 index 0000000..dcc541d --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/api/task/BpmProcessInstanceApi.java @@ -0,0 +1,28 @@ +package com.win.module.bpm.api.task; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import com.win.module.bpm.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import jakarta.validation.Valid; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 流程实例") +public interface BpmProcessInstanceApi { + + String PREFIX = ApiConstants.PREFIX + "/process-instance"; + + @PostMapping(PREFIX + "/create") + @Operation(summary = "创建流程实例(提供给内部),返回实例编号") + @Parameter(name = "userId", description = "用户编号", required = true, example = "1") + CommonResult createProcessInstance(@RequestParam("userId") Long userId, + @Valid @RequestBody BpmProcessInstanceCreateReqDTO reqDTO); + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/api/task/dto/BpmProcessInstanceCreateReqDTO.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/api/task/dto/BpmProcessInstanceCreateReqDTO.java new file mode 100644 index 0000000..3925f45 --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/api/task/dto/BpmProcessInstanceCreateReqDTO.java @@ -0,0 +1,36 @@ +package com.win.module.bpm.api.task.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; + +import java.util.List; +import java.util.Map; + +@Schema(description = "RPC 服务 - 流程实例的创建 Request DTO") +@Data +public class BpmProcessInstanceCreateReqDTO { + + @Schema(description = "流程定义的标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "leave") + @NotEmpty(message = "流程定义的标识不能为空") + private String processDefinitionKey; + + @Schema(description = "变量实例", requiredMode = Schema.RequiredMode.REQUIRED) + private Map variables; + + @Schema(description = "业务的唯一标识", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "业务的唯一标识不能为空") + private String businessKey; // 例如说,请假申请的编号。通过它,可以查询到对应的实例 + + /** + * 发起人自选审批人 Map + * + * key:taskKey 任务编码 + * value:审批人的数组 + * 例如:{ taskKey1 :[1, 2] },则表示 taskKey1 这个任务,提前设定了,由 userId 为 1,2 的用户进行审批 + */ + @Schema(description = "发起人自选审批人 Map") + private Map> startUserSelectAssignees; + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/ApiConstants.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/ApiConstants.java new file mode 100644 index 0000000..4ded342 --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/ApiConstants.java @@ -0,0 +1,23 @@ +package com.win.module.bpm.enums; + +import com.win.framework.common.enums.RpcConstants; + +/** + * API 相关的枚举 + * + * @author 芋道源码 + */ +public class ApiConstants { + + /** + * 服务名 + * + * 注意,需要保证和 spring.application.name 保持一致 + */ + public static final String NAME = "bpm-server"; + + public static final String PREFIX = RpcConstants.RPC_API_PREFIX + "/bpm"; + + public static final String VERSION = "1.0.0"; + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/DictTypeConstants.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/DictTypeConstants.java new file mode 100644 index 0000000..78915ac --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/DictTypeConstants.java @@ -0,0 +1,13 @@ +package com.win.module.bpm.enums; + +/** + * BPM 字典类型的枚举类 + * + * @author 芋道源码 + */ +public interface DictTypeConstants { + + String TASK_ASSIGN_RULE_TYPE = "bpm_task_assign_rule_type"; // 任务分配规则类型 + String TASK_ASSIGN_SCRIPT = "bpm_task_assign_script"; // 任务分配自定义脚本 + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/ErrorCodeConstants.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/ErrorCodeConstants.java new file mode 100644 index 0000000..c86b1b6 --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/ErrorCodeConstants.java @@ -0,0 +1,78 @@ +package com.win.module.bpm.enums; + +import com.win.framework.common.exception.ErrorCode; + +/** + * Bpm 错误码枚举类 + *

    + * bpm 系统,使用 1-009-000-000 段 + */ +public interface ErrorCodeConstants { + + // ========== 通用流程处理 模块 1-009-000-000 ========== + + // ========== OA 流程模块 1-009-001-000 ========== + ErrorCode OA_LEAVE_NOT_EXISTS = new ErrorCode(1_009_001_001, "请假申请不存在"); + + // ========== 流程模型 1-009-002-000 ========== + ErrorCode MODEL_KEY_EXISTS = new ErrorCode(1_009_002_000, "已经存在流程标识为【{}】的流程"); + ErrorCode MODEL_NOT_EXISTS = new ErrorCode(1_009_002_001, "流程模型不存在"); + ErrorCode MODEL_KEY_VALID = new ErrorCode(1_009_002_002, "流程标识格式不正确,需要以字母或下划线开头,后接任意字母、数字、中划线、下划线、句点!"); + ErrorCode MODEL_DEPLOY_FAIL_FORM_NOT_CONFIG = new ErrorCode(1_009_002_003, "部署流程失败,原因:流程表单未配置,请点击【修改流程】按钮进行配置"); + ErrorCode MODEL_DEPLOY_FAIL_TASK_CANDIDATE_NOT_CONFIG = new ErrorCode(1_009_002_004, "部署流程失败," + + "原因:用户任务({})未配置审批人,请点击【流程设计】按钮,选择该它的【任务(审批人)】进行配置"); + ErrorCode MODEL_DEPLOY_FAIL_BPMN_START_EVENT_NOT_EXISTS = new ErrorCode(1_009_002_005, "部署流程失败,原因:BPMN 流程图中,没有开始事件"); + ErrorCode MODEL_DEPLOY_FAIL_BPMN_USER_TASK_NAME_NOT_EXISTS = new ErrorCode(1_009_002_006, "部署流程失败,原因:BPMN 流程图中,用户任务({})的名字不存在"); + + // ========== 流程定义 1-009-003-000 ========== + ErrorCode PROCESS_DEFINITION_KEY_NOT_MATCH = new ErrorCode(1_009_003_000, "流程定义的标识期望是({}),当前是({}),请修改 BPMN 流程图"); + ErrorCode PROCESS_DEFINITION_NAME_NOT_MATCH = new ErrorCode(1_009_003_001, "流程定义的名字期望是({}),当前是({}),请修改 BPMN 流程图"); + ErrorCode PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_009_003_002, "流程定义不存在"); + ErrorCode PROCESS_DEFINITION_IS_SUSPENDED = new ErrorCode(1_009_003_003, "流程定义处于挂起状态"); + + // ========== 流程实例 1-009-004-000 ========== + ErrorCode PROCESS_INSTANCE_NOT_EXISTS = new ErrorCode(1_009_004_000, "流程实例不存在"); + ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS = new ErrorCode(1_009_004_001, "流程取消失败,流程不处于运行中"); + ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF = new ErrorCode(1_009_004_002, "流程取消失败,该流程不是你发起的"); + ErrorCode PROCESS_INSTANCE_START_USER_SELECT_ASSIGNEES_NOT_CONFIG = new ErrorCode(1_009_004_003, "审批任务({})的审批人未配置"); + ErrorCode PROCESS_INSTANCE_START_USER_SELECT_ASSIGNEES_NOT_EXISTS = new ErrorCode(1_009_004_004, "审批任务({})的审批人({})不存在"); + + // ========== 流程任务 1-009-005-000 ========== + ErrorCode TASK_OPERATE_FAIL_ASSIGN_NOT_SELF = new ErrorCode(1_009_005_001, "操作失败,原因:该任务的审批人不是你"); + ErrorCode TASK_NOT_EXISTS = new ErrorCode(1_009_005_002, "流程任务不存在"); + ErrorCode TASK_IS_PENDING = new ErrorCode(1_009_005_003, "当前任务处于挂起状态,不能操作"); + ErrorCode TASK_TARGET_NODE_NOT_EXISTS = new ErrorCode(1_009_005_004, " 目标节点不存在"); + ErrorCode TASK_RETURN_FAIL_SOURCE_TARGET_ERROR = new ErrorCode(1_009_005_006, "回退任务失败,目标节点是在并行网关上或非同一路线上,不可跳转"); + ErrorCode TASK_DELEGATE_FAIL_USER_REPEAT = new ErrorCode(1_009_005_007, "任务委派失败,委派人和当前审批人为同一人"); + ErrorCode TASK_DELEGATE_FAIL_USER_NOT_EXISTS = new ErrorCode(1_009_005_008, "任务委派失败,被委派人不存在"); + ErrorCode TASK_SIGN_CREATE_USER_NOT_EXIST = new ErrorCode(1_009_005_009, "任务加签:选择的用户不存在"); + ErrorCode TASK_SIGN_CREATE_TYPE_ERROR = new ErrorCode(1_009_005_010, "任务加签:当前任务已经{},不能{}"); + ErrorCode TASK_SIGN_CREATE_USER_REPEAT = new ErrorCode(1_009_005_011, "任务加签失败,加签人与现有审批人[{}]重复"); + ErrorCode TASK_SIGN_DELETE_NO_PARENT = new ErrorCode(1_009_005_012, "任务减签失败,被减签的任务必须是通过加签生成的任务"); + ErrorCode TASK_TRANSFER_FAIL_USER_REPEAT = new ErrorCode(1_009_005_013, "任务转办失败,转办人和当前审批人为同一人"); + ErrorCode TASK_TRANSFER_FAIL_USER_NOT_EXISTS = new ErrorCode(1_009_005_014, "任务转办失败,转办人不存在"); + ErrorCode TASK_CREATE_FAIL_NO_CANDIDATE_USER = new ErrorCode(1_009_006_003, "操作失败,原因:找不到任务的审批人!"); + + // ========== 动态表单模块 1-009-010-000 ========== + ErrorCode FORM_NOT_EXISTS = new ErrorCode(1_009_010_000, "动态表单不存在"); + ErrorCode FORM_FIELD_REPEAT = new ErrorCode(1_009_010_001, "表单项({}) 和 ({}) 使用了相同的字段名({})"); + + // ========== 用户组模块 1-009-011-000 ========== + ErrorCode USER_GROUP_NOT_EXISTS = new ErrorCode(1_009_011_000, "用户分组不存在"); + ErrorCode USER_GROUP_IS_DISABLE = new ErrorCode(1_009_011_001, "名字为【{}】的用户分组已被禁用"); + + // ========== 用户组模块 1-009-012-000 ========== + ErrorCode CATEGORY_NOT_EXISTS = new ErrorCode(1_009_012_000, "流程分类不存在"); + ErrorCode CATEGORY_NAME_DUPLICATE = new ErrorCode(1_009_012_001, "流程分类名字【{}】重复"); + ErrorCode CATEGORY_CODE_DUPLICATE = new ErrorCode(1_009_012_002, "流程分类编码【{}】重复"); + + // ========== BPM 流程监听器 1-009-013-000 ========== + ErrorCode PROCESS_LISTENER_NOT_EXISTS = new ErrorCode(1_009_013_000, "流程监听器不存在"); + ErrorCode PROCESS_LISTENER_CLASS_NOT_FOUND = new ErrorCode(1_009_013_001, "流程监听器类({})不存在"); + ErrorCode PROCESS_LISTENER_CLASS_IMPLEMENTS_ERROR = new ErrorCode(1_009_013_002, "流程监听器类({})没有实现接口({})"); + ErrorCode PROCESS_LISTENER_EXPRESSION_INVALID = new ErrorCode(1_009_013_003, "流程监听器表达式({})不合法"); + + // ========== BPM 流程表达式 1-009-014-000 ========== + ErrorCode PROCESS_EXPRESSION_NOT_EXISTS = new ErrorCode(1_009_014_000, "流程表达式不存在"); + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/definition/BpmModelFormTypeEnum.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/definition/BpmModelFormTypeEnum.java new file mode 100644 index 0000000..3849865 --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/definition/BpmModelFormTypeEnum.java @@ -0,0 +1,32 @@ +package com.win.module.bpm.enums.definition; + +import com.win.framework.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * BPM 模型的表单类型的枚举 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum BpmModelFormTypeEnum implements IntArrayValuable { + + NORMAL(10, "流程表单"), // 对应 BpmFormDO + CUSTOM(20, "业务表单") // 业务自己定义的表单,自己进行数据的存储 + ; + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BpmModelFormTypeEnum::getType).toArray(); + + private final Integer type; + private final String name; + + @Override + public int[] array() { + return ARRAYS; + } + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/definition/BpmProcessListenerType.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/definition/BpmProcessListenerType.java new file mode 100644 index 0000000..6e8fa62 --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/definition/BpmProcessListenerType.java @@ -0,0 +1,21 @@ +package com.win.module.bpm.enums.definition; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * BPM 流程监听器的类型 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum BpmProcessListenerType { + + EXECUTION("execution", "执行监听器"), + TASK("task", "任务执行器"); + + private final String type; + private final String name; + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/definition/BpmProcessListenerValueType.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/definition/BpmProcessListenerValueType.java new file mode 100644 index 0000000..31825cf --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/definition/BpmProcessListenerValueType.java @@ -0,0 +1,22 @@ +package com.win.module.bpm.enums.definition; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * BPM 流程监听器的值类型 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum BpmProcessListenerValueType { + + CLASS("class", "Java 类"), + DELEGATE_EXPRESSION("delegateExpression", "代理表达式"), + EXPRESSION("expression", "表达式"); + + private final String type; + private final String name; + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/message/BpmMessageEnum.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/message/BpmMessageEnum.java new file mode 100644 index 0000000..c88b84b --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/message/BpmMessageEnum.java @@ -0,0 +1,26 @@ +package com.win.module.bpm.enums.message; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * Bpm 消息的枚举 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum BpmMessageEnum { + + PROCESS_INSTANCE_APPROVE("bpm_process_instance_approve"), // 流程任务被审批通过时,发送给申请人 + PROCESS_INSTANCE_REJECT("bpm_process_instance_reject"), // 流程任务被审批不通过时,发送给申请人 + TASK_ASSIGNED("bpm_task_assigned"); // 任务被分配时,发送给审批人 + + /** + * 短信模板的标识 + * + * 关联 SmsTemplateDO 的 code 属性 + */ + private final String smsTemplateCode; + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmCommentTypeEnum.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmCommentTypeEnum.java new file mode 100644 index 0000000..def3a9b --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmCommentTypeEnum.java @@ -0,0 +1,46 @@ +package com.win.module.bpm.enums.task; + +import cn.hutool.core.util.StrUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 流程任务的 Comment 评论类型枚举 + * + * @author kehaiyou + */ +@Getter +@AllArgsConstructor +public enum BpmCommentTypeEnum { + + APPROVE("1", "审批通过", "审批通过,原因是:{}"), + REJECT("2", "不通过", "审批不通过:原因是:{}"), + CANCEL("3", "已取消", "系统自动取消,原因是:{}"), + RETURN("4", "退回", "任务被退回,原因是:{}"), + DELEGATE_START("5", "委派发起", "[{}]将任务委派给[{}],委派理由为:{}"), + DELEGATE_END("6", "委派完成", "[{}]完成委派任务,任务重新回到[{}]手中,审批建议为:{}"), + TRANSFER("7", "转派", "[{}]将任务转派给[{}],转派理由为:{}"), + ADD_SIGN("8", "加签", "[{}]{}给了[{}],理由为:{}"), + SUB_SIGN("9", "减签", "[{}]操作了【减签】,审批人[{}]的任务被取消"), + ; + + /** + * 操作类型 + * + * 由于 BPM Comment 类型为 String,所以这里就不使用 Integer + */ + private final String type; + /** + * 操作名字 + */ + private final String name; + /** + * 操作描述 + */ + private final String comment; + + public String formatComment(Object... params) { + return StrUtil.format(comment, params); + } + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmDeleteReasonEnum.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmDeleteReasonEnum.java new file mode 100644 index 0000000..49858d6 --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmDeleteReasonEnum.java @@ -0,0 +1,45 @@ +package com.win.module.bpm.enums.task; + +import cn.hutool.core.util.StrUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 流程实例/任务的删除原因枚举 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum BpmDeleteReasonEnum { + + // ========== 流程实例的独有原因 ========== + + REJECT_TASK("审批不通过任务,原因:{}"), // 场景:用户审批不通过任务。修改文案时,需要注意 isRejectReason 方法 + CANCEL_PROCESS_INSTANCE_BY_START_USER("用户主动取消流程,原因:{}"), // 场景:用户主动取消流程 + CANCEL_PROCESS_INSTANCE_BY_ADMIN("管理员【{}】取消流程,原因:{}"), // 场景:管理员取消流程 + + // ========== 流程任务的独有原因 ========== + + CANCEL_BY_SYSTEM("系统自动取消"), // 场景:非常多,比如说:1)多任务审批已经满足条件,无需审批该任务;2)流程实例被取消,无需审批该任务;等等 + ; + + private final String reason; + + /** + * 格式化理由 + * + * @param args 参数 + * @return 理由 + */ + public String format(Object... args) { + return StrUtil.format(reason, args); + } + + // ========== 逻辑 ========== + + public static boolean isRejectReason(String reason) { + return StrUtil.startWith(reason, "审批不通过任务,原因:"); + } + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmProcessInstanceStatusEnum.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmProcessInstanceStatusEnum.java new file mode 100644 index 0000000..b26f1ce --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmProcessInstanceStatusEnum.java @@ -0,0 +1,39 @@ +package com.win.module.bpm.enums.task; + +import com.win.framework.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 流程实例 ProcessInstance 的状态 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum BpmProcessInstanceStatusEnum implements IntArrayValuable { + + RUNNING(1, "审批中"), + APPROVE(2, "审批通过"), + REJECT(3, "审批不通过"), + CANCEL(4, "已取消"); + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BpmProcessInstanceStatusEnum::getStatus).toArray(); + + /** + * 状态 + */ + private final Integer status; + /** + * 描述 + */ + private final String desc; + + @Override + public int[] array() { + return new int[0]; + } + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmTaskSignTypeEnum.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmTaskSignTypeEnum.java new file mode 100644 index 0000000..e293d18 --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmTaskSignTypeEnum.java @@ -0,0 +1,47 @@ +package com.win.module.bpm.enums.task; + +import cn.hutool.core.util.ArrayUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 流程任务的加签类型枚举 + * + * @author kehaiyou + */ +@Getter +@AllArgsConstructor +public enum BpmTaskSignTypeEnum { + + /** + * 向前加签,需要前置任务审批完成,才回到原审批人 + */ + BEFORE("before", "向前加签"), + /** + * 向后加签,需要后置任务全部审批完,才会通过原审批人节点 + */ + AFTER("after", "向后加签"); + + /** + * 类型 + */ + private final String type; + /** + * 名字 + */ + private final String name; + + public static String nameOfType(String type) { + for (BpmTaskSignTypeEnum value : values()) { + if (value.type.equals(type)) { + return value.name; + } + } + return null; + } + + public static BpmTaskSignTypeEnum of(String type) { + return ArrayUtil.firstMatch(value -> value.getType().equals(type), values()); + } + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmTaskStatusEnum.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmTaskStatusEnum.java new file mode 100644 index 0000000..c3c7d2e --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/enums/task/BpmTaskStatusEnum.java @@ -0,0 +1,61 @@ +package com.win.module.bpm.enums.task; + +import com.win.framework.common.util.object.ObjectUtils; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 流程任务 Task 的状态枚举 + * + * @author jason + */ +@Getter +@AllArgsConstructor +public enum BpmTaskStatusEnum { + + RUNNING(1, "审批中"), + APPROVE(2, "审批通过"), + REJECT(3, "审批不通过"), + CANCEL(4, "已取消"), + + RETURN(5, "已退回"), + DELEGATE(6, "委派中"), + + /** + * 使用场景: + * 1. 任务被向后【加签】时,它在审批通过后,会变成 APPROVING 这个状态,然后等到【加签】出来的任务都被审批后,才会变成 APPROVE 审批通过 + */ + APPROVING(7, "审批通过中"), + /** + * 使用场景: + * 1. 任务被向前【加签】时,它会变成 WAIT 状态,需要等待【加签】出来的任务被审批后,它才能继续变为 RUNNING 继续审批 + * 2. 任务被向后【加签】时,【加签】出来的任务处于 WAIT 状态,它们需要等待该任务被审批后,它们才能继续变为 RUNNING 继续审批 + */ + WAIT(0, "待审批"); + + /** + * 状态 + *

    + * 如果新增时,注意 {@link #isEndStatus(Integer)} 是否需要变更 + */ + private final Integer status; + /** + * 名字 + */ + private final String name; + + /** + * 判断该状态是否已经处于 End 最终状态 + *

    + * 主要用于一些状态更新的逻辑,如果已经是最终状态,就不再进行更新 + * + * @param status 状态 + * @return 是否 + */ + public static boolean isEndStatus(Integer status) { + return ObjectUtils.equalsAny(status, + APPROVE.getStatus(), REJECT.getStatus(), CANCEL.getStatus(), + RETURN.getStatus(), APPROVING.getStatus()); + } + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/event/BpmProcessInstanceStatusEvent.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/event/BpmProcessInstanceStatusEvent.java new file mode 100644 index 0000000..723d38b --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/event/BpmProcessInstanceStatusEvent.java @@ -0,0 +1,41 @@ +package com.win.module.bpm.event; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.springframework.context.ApplicationEvent; + +/** + * 流程实例的状态(结果)发生变化的 Event + * + * @author 芋道源码 + */ +@SuppressWarnings("ALL") +@Data +public class BpmProcessInstanceStatusEvent extends ApplicationEvent { + + /** + * 流程实例的编号 + */ + @NotNull(message = "流程实例的编号不能为空") + private String id; + /** + * 流程实例的 key + */ + @NotNull(message = "流程实例的 key 不能为空") + private String processDefinitionKey; + /** + * 流程实例的结果 + */ + @NotNull(message = "流程实例的状态不能为空") + private Integer status; + /** + * 流程实例对应的业务标识 + * 例如说,请假 + */ + private String businessKey; + + public BpmProcessInstanceStatusEvent(Object source) { + super(source); + } + +} diff --git a/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/event/BpmProcessInstanceStatusEventListener.java b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/event/BpmProcessInstanceStatusEventListener.java new file mode 100644 index 0000000..429e10a --- /dev/null +++ b/win-module-bpm/win-module-bpm-api/src/main/java/com/win/module/bpm/event/BpmProcessInstanceStatusEventListener.java @@ -0,0 +1,34 @@ +package com.win.module.bpm.event; + +import cn.hutool.core.util.StrUtil; +import org.springframework.context.ApplicationListener; + +/** + * {@link BpmProcessInstanceStatusEvent} 的监听器 + * + * @author 芋道源码 + */ +public abstract class BpmProcessInstanceStatusEventListener + implements ApplicationListener { + + @Override + public final void onApplicationEvent(BpmProcessInstanceStatusEvent event) { + if (!StrUtil.equals(event.getProcessDefinitionKey(), getProcessDefinitionKey())) { + return; + } + onEvent(event); + } + + /** + * @return 返回监听的流程定义 Key + */ + protected abstract String getProcessDefinitionKey(); + + /** + * 处理事件 + * + * @param event 事件 + */ + protected abstract void onEvent(BpmProcessInstanceStatusEvent event); + +} diff --git a/win-module-bpm/win-module-bpm-biz/Dockerfile b/win-module-bpm/win-module-bpm-biz/Dockerfile new file mode 100644 index 0000000..7cfddfe --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/Dockerfile @@ -0,0 +1,19 @@ +## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性 +## 感谢复旦核博士的建议!灰子哥,牛皮! +FROM eclipse-temurin:21-jre + +## 创建目录,并使用它作为工作目录 +RUN mkdir -p /win-module-bpm-biz +WORKDIR /win-module-bpm-biz +## 将后端项目的 Jar 文件,复制到镜像中 +COPY ./target/win-module-bpm-biz.jar app.jar + +## 设置 TZ 时区 +## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖 +ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m" + +## 暴露后端项目的 48080 端口 +EXPOSE 48083 + +## 启动后端项目 +CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar diff --git a/win-module-bpm/win-module-bpm-biz/pom.xml b/win-module-bpm/win-module-bpm-biz/pom.xml new file mode 100644 index 0000000..03a185d --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/pom.xml @@ -0,0 +1,139 @@ + + + + com.win + win-module-bpm + ${revision} + + 4.0.0 + win-module-bpm-biz + + ${project.artifactId} + + bpm 包下,业务流程管理(Business Process Management),我们放工作流的功能,基于 Flowable 6 版本实现。 + 例如说:流程定义、表单配置、审核中心(我的申请、我的待办、我的已办)等等 + + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + com.win + win-module-bpm-api + ${revision} + + + com.win + win-module-system-api + ${revision} + + + + + com.win + win-spring-boot-starter-biz-data-permission + + + com.win + win-spring-boot-starter-biz-tenant + + + + + com.win + win-spring-boot-starter-security + + + + + com.win + win-spring-boot-starter-mybatis + + + + com.win + win-spring-boot-starter-redis + + + + + com.win + win-spring-boot-starter-rpc + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + + + + + + + + + + + + + com.win + win-spring-boot-starter-monitor + + + + + com.win + win-spring-boot-starter-excel + + + + + org.flowable + flowable-spring-boot-starter-process + + + org.flowable + flowable-spring-boot-starter-actuator + + + org.postgresql + postgresql + + + + + + ${project.artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + + + repackage + + + + + + + diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/BpmServerApplication.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/BpmServerApplication.java new file mode 100644 index 0000000..06800dd --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/BpmServerApplication.java @@ -0,0 +1,30 @@ +package com.win.module.bpm; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 项目的启动类 + * + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * + * @author 芋道源码 + */ +@SpringBootApplication +public class BpmServerApplication { + + public static void main(String[] args) { + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + + SpringApplication.run(BpmServerApplication.class, args); + + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/api/package-info.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/api/package-info.java new file mode 100644 index 0000000..a9eba17 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/api/package-info.java @@ -0,0 +1,4 @@ +/** + * bpm API 实现类,定义暴露给其它模块的 API + */ +package com.win.module.bpm.api; diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/api/task/BpmProcessInstanceApiImpl.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/api/task/BpmProcessInstanceApiImpl.java new file mode 100644 index 0000000..112e4da --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/api/task/BpmProcessInstanceApiImpl.java @@ -0,0 +1,32 @@ +package com.win.module.bpm.api.task; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import com.win.module.bpm.service.task.BpmProcessInstanceService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static com.win.framework.common.pojo.CommonResult.success; + +/** + * Flowable 流程实例 Api 实现类 + * + * @author 芋道源码 + * @author jason + */ +@RestController +@Validated +public class BpmProcessInstanceApiImpl implements BpmProcessInstanceApi { + + @Resource + private BpmProcessInstanceService processInstanceService; + + @Override + public CommonResult createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO reqDTO) { + return success(processInstanceService.createProcessInstance(userId, reqDTO)); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmCategoryController.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmCategoryController.java new file mode 100644 index 0000000..1bcff23 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmCategoryController.java @@ -0,0 +1,86 @@ +package com.win.module.bpm.controller.admin.definition; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.definition.vo.category.BpmCategoryPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.category.BpmCategoryRespVO; +import com.win.module.bpm.controller.admin.definition.vo.category.BpmCategorySaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmCategoryDO; +import com.win.module.bpm.service.definition.BpmCategoryService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Comparator; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.common.util.collection.CollectionUtils.convertList; + +@Tag(name = "管理后台 - BPM 流程分类") +@RestController +@RequestMapping("/bpm/category") +@Validated +public class BpmCategoryController { + + @Resource + private BpmCategoryService categoryService; + + @PostMapping("/create") + @Operation(summary = "创建流程分类") + @PreAuthorize("@ss.hasPermission('bpm:category:create')") + public CommonResult createCategory(@Valid @RequestBody BpmCategorySaveReqVO createReqVO) { + return success(categoryService.createCategory(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新流程分类") + @PreAuthorize("@ss.hasPermission('bpm:category:update')") + public CommonResult updateCategory(@Valid @RequestBody BpmCategorySaveReqVO updateReqVO) { + categoryService.updateCategory(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除流程分类") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('bpm:category:delete')") + public CommonResult deleteCategory(@RequestParam("id") Long id) { + categoryService.deleteCategory(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得流程分类") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('bpm:category:query')") + public CommonResult getCategory(@RequestParam("id") Long id) { + BpmCategoryDO category = categoryService.getCategory(id); + return success(BeanUtils.toBean(category, BpmCategoryRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得流程分类分页") + @PreAuthorize("@ss.hasPermission('bpm:category:query')") + public CommonResult> getCategoryPage(@Valid BpmCategoryPageReqVO pageReqVO) { + PageResult pageResult = categoryService.getCategoryPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, BpmCategoryRespVO.class)); + } + + @GetMapping("/simple-list") + @Operation(summary = "获取流程分类的精简信息列表", description = "只包含被开启的分类,主要用于前端的下拉选项") + public CommonResult> getCategorySimpleList() { + List list = categoryService.getCategoryListByStatus(CommonStatusEnum.ENABLE.getStatus()); + list.sort(Comparator.comparingInt(BpmCategoryDO::getSort)); + return success(convertList(list, category -> new BpmCategoryRespVO().setId(category.getId()) + .setName(category.getName()).setCode(category.getCode()))); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmFormController.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmFormController.java new file mode 100644 index 0000000..b304d13 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmFormController.java @@ -0,0 +1,83 @@ +package com.win.module.bpm.controller.admin.definition; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.definition.vo.form.BpmFormPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.form.BpmFormRespVO; +import com.win.module.bpm.controller.admin.definition.vo.form.BpmFormSaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmFormDO; +import com.win.module.bpm.service.definition.BpmFormService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.common.util.collection.CollectionUtils.convertList; + +@Tag(name = "管理后台 - 动态表单") +@RestController +@RequestMapping("/bpm/form") +@Validated +public class BpmFormController { + + @Resource + private BpmFormService formService; + + @PostMapping("/create") + @Operation(summary = "创建动态表单") + @PreAuthorize("@ss.hasPermission('bpm:form:create')") + public CommonResult createForm(@Valid @RequestBody BpmFormSaveReqVO createReqVO) { + return success(formService.createForm(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新动态表单") + @PreAuthorize("@ss.hasPermission('bpm:form:update')") + public CommonResult updateForm(@Valid @RequestBody BpmFormSaveReqVO updateReqVO) { + formService.updateForm(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除动态表单") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('bpm:form:delete')") + public CommonResult deleteForm(@RequestParam("id") Long id) { + formService.deleteForm(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得动态表单") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('bpm:form:query')") + public CommonResult getForm(@RequestParam("id") Long id) { + BpmFormDO form = formService.getForm(id); + return success(BeanUtils.toBean(form, BpmFormRespVO.class)); + } + + @GetMapping({"/list-all-simple", "/simple-list"}) + @Operation(summary = "获得动态表单的精简列表", description = "用于表单下拉框") + public CommonResult> getFormSimpleList() { + List list = formService.getFormList(); + return success(convertList(list, formDO -> // 只返回 id、name 字段 + new BpmFormRespVO().setId(formDO.getId()).setName(formDO.getName()))); + } + + @GetMapping("/page") + @Operation(summary = "获得动态表单分页") + @PreAuthorize("@ss.hasPermission('bpm:form:query')") + public CommonResult> getFormPage(@Valid BpmFormPageReqVO pageVO) { + PageResult pageResult = formService.getFormPage(pageVO); + return success(BeanUtils.toBean(pageResult, BpmFormRespVO.class)); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmModelController.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmModelController.java new file mode 100644 index 0000000..595d4d8 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmModelController.java @@ -0,0 +1,148 @@ +package com.win.module.bpm.controller.admin.definition; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.common.util.io.IoUtils; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.definition.vo.model.*; +import com.win.module.bpm.convert.definition.BpmModelConvert; +import com.win.module.bpm.dal.dataobject.definition.BpmCategoryDO; +import com.win.module.bpm.dal.dataobject.definition.BpmFormDO; +import com.win.module.bpm.service.definition.BpmCategoryService; +import com.win.module.bpm.service.definition.BpmFormService; +import com.win.module.bpm.service.definition.BpmModelService; +import com.win.module.bpm.service.definition.BpmProcessDefinitionService; +import com.win.module.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.flowable.engine.repository.Deployment; +import org.flowable.engine.repository.Model; +import org.flowable.engine.repository.ProcessDefinition; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.common.util.collection.CollectionUtils.convertMap; +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; + +@Tag(name = "管理后台 - 流程模型") +@RestController +@RequestMapping("/bpm/model") +@Validated +public class BpmModelController { + + @Resource + private BpmModelService modelService; + @Resource + private BpmFormService formService; + @Resource + private BpmCategoryService categoryService; + @Resource + private BpmProcessDefinitionService processDefinitionService; + + @GetMapping("/page") + @Operation(summary = "获得模型分页") + public CommonResult> getModelPage(BpmModelPageReqVO pageVO) { + PageResult pageResult = modelService.getModelPage(pageVO); + if (CollUtil.isEmpty(pageResult.getList())) { + return success(PageResult.empty(pageResult.getTotal())); + } + + // 拼接数据 + // 获得 Form 表单 + Set formIds = convertSet(pageResult.getList(), model -> { + BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); + return metaInfo != null ? metaInfo.getFormId() : null; + }); + Map formMap = formService.getFormMap(formIds); + // 获得 Category Map + Map categoryMap = categoryService.getCategoryMap( + convertSet(pageResult.getList(), Model::getCategory)); + // 获得 Deployment Map + Set deploymentIds = new HashSet<>(); + pageResult.getList().forEach(model -> CollectionUtils.addIfNotNull(deploymentIds, model.getDeploymentId())); + Map deploymentMap = processDefinitionService.getDeploymentMap(deploymentIds); + // 获得 ProcessDefinition Map + List processDefinitions = processDefinitionService.getProcessDefinitionListByDeploymentIds(deploymentIds); + Map processDefinitionMap = convertMap(processDefinitions, ProcessDefinition::getDeploymentId); + return success(BpmModelConvert.INSTANCE.buildModelPage(pageResult, formMap, categoryMap, deploymentMap, processDefinitionMap)); + } + + @GetMapping("/get") + @Operation(summary = "获得模型") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('bpm:model:query')") + public CommonResult getModel(@RequestParam("id") String id) { + Model model = modelService.getModel(id); + if (model == null) { + return null; + } + byte[] bpmnBytes = modelService.getModelBpmnXML(id); + return success(BpmModelConvert.INSTANCE.buildModel(model, bpmnBytes)); + } + + @PostMapping("/create") + @Operation(summary = "新建模型") + @PreAuthorize("@ss.hasPermission('bpm:model:create')") + public CommonResult createModel(@Valid @RequestBody BpmModelCreateReqVO createRetVO) { + return success(modelService.createModel(createRetVO, null)); + } + + @PutMapping("/update") + @Operation(summary = "修改模型") + @PreAuthorize("@ss.hasPermission('bpm:model:update')") + public CommonResult updateModel(@Valid @RequestBody BpmModelUpdateReqVO modelVO) { + modelService.updateModel(modelVO); + return success(true); + } + + @PostMapping("/import") + @Operation(summary = "导入模型") + @PreAuthorize("@ss.hasPermission('bpm:model:import')") + public CommonResult importModel(@Valid BpmModeImportReqVO importReqVO) throws IOException { + BpmModelCreateReqVO createReqVO = BeanUtils.toBean(importReqVO, BpmModelCreateReqVO.class); + // 读取文件 + String bpmnXml = IoUtils.readUtf8(importReqVO.getBpmnFile().getInputStream(), false); + return success(modelService.createModel(createReqVO, bpmnXml)); + } + + @PostMapping("/deploy") + @Operation(summary = "部署模型") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('bpm:model:deploy')") + public CommonResult deployModel(@RequestParam("id") String id) { + modelService.deployModel(id); + return success(true); + } + + @PutMapping("/update-state") + @Operation(summary = "修改模型的状态", description = "实际更新的部署的流程定义的状态") + @PreAuthorize("@ss.hasPermission('bpm:model:update')") + public CommonResult updateModelState(@Valid @RequestBody BpmModelUpdateStateReqVO reqVO) { + modelService.updateModelState(reqVO.getId(), reqVO.getState()); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除模型") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('bpm:model:delete')") + public CommonResult deleteModel(@RequestParam("id") String id) { + modelService.deleteModel(id); + return success(true); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmProcessDefinitionController.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmProcessDefinitionController.java new file mode 100644 index 0000000..13c3bd8 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmProcessDefinitionController.java @@ -0,0 +1,114 @@ +package com.win.module.bpm.controller.admin.definition; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; +import com.win.module.bpm.convert.definition.BpmProcessDefinitionConvert; +import com.win.module.bpm.dal.dataobject.definition.BpmCategoryDO; +import com.win.module.bpm.dal.dataobject.definition.BpmFormDO; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; +import com.win.module.bpm.framework.flowable.core.candidate.strategy.BpmTaskCandidateStartUserSelectStrategy; +import com.win.module.bpm.service.definition.BpmCategoryService; +import com.win.module.bpm.service.definition.BpmFormService; +import com.win.module.bpm.service.definition.BpmProcessDefinitionService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.bpmn.model.UserTask; +import org.flowable.engine.repository.Deployment; +import org.flowable.engine.repository.ProcessDefinition; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; + +@Tag(name = "管理后台 - 流程定义") +@RestController +@RequestMapping("/bpm/process-definition") +@Validated +public class BpmProcessDefinitionController { + + @Resource + private BpmProcessDefinitionService processDefinitionService; + @Resource + private BpmFormService formService; + @Resource + private BpmCategoryService categoryService; + + @GetMapping("/page") + @Operation(summary = "获得流程定义分页") + @PreAuthorize("@ss.hasPermission('bpm:process-definition:query')") + public CommonResult> getProcessDefinitionPage( + BpmProcessDefinitionPageReqVO pageReqVO) { + PageResult pageResult = processDefinitionService.getProcessDefinitionPage(pageReqVO); + if (CollUtil.isEmpty(pageResult.getList())) { + return success(PageResult.empty(pageResult.getTotal())); + } + + // 获得 Category Map + Map categoryMap = categoryService.getCategoryMap( + convertSet(pageResult.getList(), ProcessDefinition::getCategory)); + // 获得 Deployment Map + Map deploymentMap = processDefinitionService.getDeploymentMap( + convertSet(pageResult.getList(), ProcessDefinition::getDeploymentId)); + // 获得 BpmProcessDefinitionInfoDO Map + Map processDefinitionMap = processDefinitionService.getProcessDefinitionInfoMap( + convertSet(pageResult.getList(), ProcessDefinition::getId)); + // 获得 Form Map + Map formMap = formService.getFormMap( + convertSet(processDefinitionMap.values(), BpmProcessDefinitionInfoDO::getFormId)); + return success(BpmProcessDefinitionConvert.INSTANCE.buildProcessDefinitionPage( + pageResult, deploymentMap, processDefinitionMap, formMap, categoryMap)); + } + + @GetMapping ("/list") + @Operation(summary = "获得流程定义列表") + @Parameter(name = "suspensionState", description = "挂起状态", required = true, example = "1") // 参见 Flowable SuspensionState 枚举 + @PreAuthorize("@ss.hasPermission('bpm:process-definition:query')") + public CommonResult> getProcessDefinitionList( + @RequestParam("suspensionState") Integer suspensionState) { + List list = processDefinitionService.getProcessDefinitionListBySuspensionState(suspensionState); + if (CollUtil.isEmpty(list)) { + return success(Collections.emptyList()); + } + + // 获得 BpmProcessDefinitionInfoDO Map + Map processDefinitionMap = processDefinitionService.getProcessDefinitionInfoMap( + convertSet(list, ProcessDefinition::getId)); + return success(BpmProcessDefinitionConvert.INSTANCE.buildProcessDefinitionList( + list, null, processDefinitionMap, null, null)); + } + + @GetMapping ("/get") + @Operation(summary = "获得流程定义") + @Parameter(name = "id", description = "流程编号", required = true, example = "1024") + @Parameter(name = "key", description = "流程定义标识", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('bpm:process-definition:query')") + public CommonResult getProcessDefinition( + @RequestParam(value = "id", required = false) String id, + @RequestParam(value = "key", required = false) String key) { + ProcessDefinition processDefinition = id != null ? processDefinitionService.getProcessDefinition(id) + : processDefinitionService.getActiveProcessDefinition(key); + if (processDefinition == null) { + return success(null); + } + BpmnModel bpmnModel = processDefinitionService.getProcessDefinitionBpmnModel(processDefinition.getId()); + List userTaskList = BpmTaskCandidateStartUserSelectStrategy.getStartUserSelectUserTaskList(bpmnModel); + return success(BpmProcessDefinitionConvert.INSTANCE.buildProcessDefinition( + processDefinition, null, null, null, null, bpmnModel, userTaskList)); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmProcessExpressionController.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmProcessExpressionController.java new file mode 100644 index 0000000..a8a124c --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmProcessExpressionController.java @@ -0,0 +1,73 @@ +package com.win.module.bpm.controller.admin.definition; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.definition.vo.expression.BpmProcessExpressionPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.expression.BpmProcessExpressionRespVO; +import com.win.module.bpm.controller.admin.definition.vo.expression.BpmProcessExpressionSaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessExpressionDO; +import com.win.module.bpm.service.definition.BpmProcessExpressionService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - BPM 流程表达式") +@RestController +@RequestMapping("/bpm/process-expression") +@Validated +public class BpmProcessExpressionController { + + @Resource + private BpmProcessExpressionService processExpressionService; + + @PostMapping("/create") + @Operation(summary = "创建流程表达式") + @PreAuthorize("@ss.hasPermission('bpm:process-expression:create')") + public CommonResult createProcessExpression(@Valid @RequestBody BpmProcessExpressionSaveReqVO createReqVO) { + return success(processExpressionService.createProcessExpression(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新流程表达式") + @PreAuthorize("@ss.hasPermission('bpm:process-expression:update')") + public CommonResult updateProcessExpression(@Valid @RequestBody BpmProcessExpressionSaveReqVO updateReqVO) { + processExpressionService.updateProcessExpression(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除流程表达式") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('bpm:process-expression:delete')") + public CommonResult deleteProcessExpression(@RequestParam("id") Long id) { + processExpressionService.deleteProcessExpression(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得流程表达式") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('bpm:process-expression:query')") + public CommonResult getProcessExpression(@RequestParam("id") Long id) { + BpmProcessExpressionDO processExpression = processExpressionService.getProcessExpression(id); + return success(BeanUtils.toBean(processExpression, BpmProcessExpressionRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得流程表达式分页") + @PreAuthorize("@ss.hasPermission('bpm:process-expression:query')") + public CommonResult> getProcessExpressionPage( + @Valid BpmProcessExpressionPageReqVO pageReqVO) { + PageResult pageResult = processExpressionService.getProcessExpressionPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, BpmProcessExpressionRespVO.class)); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmProcessListenerController.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmProcessListenerController.java new file mode 100644 index 0000000..dd78858 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmProcessListenerController.java @@ -0,0 +1,73 @@ +package com.win.module.bpm.controller.admin.definition; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.definition.vo.listener.BpmProcessListenerPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.listener.BpmProcessListenerRespVO; +import com.win.module.bpm.controller.admin.definition.vo.listener.BpmProcessListenerSaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessListenerDO; +import com.win.module.bpm.service.definition.BpmProcessListenerService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - BPM 流程监听器") +@RestController +@RequestMapping("/bpm/process-listener") +@Validated +public class BpmProcessListenerController { + + @Resource + private BpmProcessListenerService processListenerService; + + @PostMapping("/create") + @Operation(summary = "创建流程监听器") + @PreAuthorize("@ss.hasPermission('bpm:process-listener:create')") + public CommonResult createProcessListener(@Valid @RequestBody BpmProcessListenerSaveReqVO createReqVO) { + return success(processListenerService.createProcessListener(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新流程监听器") + @PreAuthorize("@ss.hasPermission('bpm:process-listener:update')") + public CommonResult updateProcessListener(@Valid @RequestBody BpmProcessListenerSaveReqVO updateReqVO) { + processListenerService.updateProcessListener(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除流程监听器") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('bpm:process-listener:delete')") + public CommonResult deleteProcessListener(@RequestParam("id") Long id) { + processListenerService.deleteProcessListener(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得流程监听器") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('bpm:process-listener:query')") + public CommonResult getProcessListener(@RequestParam("id") Long id) { + BpmProcessListenerDO processListener = processListenerService.getProcessListener(id); + return success(BeanUtils.toBean(processListener, BpmProcessListenerRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得流程监听器分页") + @PreAuthorize("@ss.hasPermission('bpm:process-listener:query')") + public CommonResult> getProcessListenerPage( + @Valid BpmProcessListenerPageReqVO pageReqVO) { + PageResult pageResult = processListenerService.getProcessListenerPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, BpmProcessListenerRespVO.class)); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmUserGroupController.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmUserGroupController.java new file mode 100644 index 0000000..51a613e --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/BpmUserGroupController.java @@ -0,0 +1,83 @@ +package com.win.module.bpm.controller.admin.definition; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.definition.vo.group.BpmUserGroupPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.group.BpmUserGroupRespVO; +import com.win.module.bpm.controller.admin.definition.vo.group.BpmUserGroupSaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmUserGroupDO; +import com.win.module.bpm.service.definition.BpmUserGroupService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.common.util.collection.CollectionUtils.convertList; + +@Tag(name = "管理后台 - 用户组") +@RestController +@RequestMapping("/bpm/user-group") +@Validated +public class BpmUserGroupController { + + @Resource + private BpmUserGroupService userGroupService; + + @PostMapping("/create") + @Operation(summary = "创建用户组") + @PreAuthorize("@ss.hasPermission('bpm:user-group:create')") + public CommonResult createUserGroup(@Valid @RequestBody BpmUserGroupSaveReqVO createReqVO) { + return success(userGroupService.createUserGroup(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新用户组") + @PreAuthorize("@ss.hasPermission('bpm:user-group:update')") + public CommonResult updateUserGroup(@Valid @RequestBody BpmUserGroupSaveReqVO updateReqVO) { + userGroupService.updateUserGroup(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除用户组") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('bpm:user-group:delete')") + public CommonResult deleteUserGroup(@RequestParam("id") Long id) { + userGroupService.deleteUserGroup(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得用户组") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('bpm:user-group:query')") + public CommonResult getUserGroup(@RequestParam("id") Long id) { + BpmUserGroupDO userGroup = userGroupService.getUserGroup(id); + return success(BeanUtils.toBean(userGroup, BpmUserGroupRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得用户组分页") + @PreAuthorize("@ss.hasPermission('bpm:user-group:query')") + public CommonResult> getUserGroupPage(@Valid BpmUserGroupPageReqVO pageVO) { + PageResult pageResult = userGroupService.getUserGroupPage(pageVO); + return success(BeanUtils.toBean(pageResult, BpmUserGroupRespVO.class)); + } + + @GetMapping("/simple-list") + @Operation(summary = "获取用户组精简信息列表", description = "只包含被开启的用户组,主要用于前端的下拉选项") + public CommonResult> getUserGroupSimpleList() { + List list = userGroupService.getUserGroupListByStatus(CommonStatusEnum.ENABLE.getStatus()); + return success(convertList(list, group -> new BpmUserGroupRespVO().setId(group.getId()).setName(group.getName()))); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/category/BpmCategoryPageReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/category/BpmCategoryPageReqVO.java new file mode 100644 index 0000000..63a8010 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/category/BpmCategoryPageReqVO.java @@ -0,0 +1,32 @@ +package com.win.module.bpm.controller.admin.definition.vo.category; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.validation.InEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - BPM 流程分类分页 Request VO") +@Data +public class BpmCategoryPageReqVO extends PageParam { + + @Schema(description = "分类名", example = "王五") + private String name; + + @Schema(description = "分类标志", example = "OA") + private String code; + + @Schema(description = "分类状态", example = "1") + @InEnum(CommonStatusEnum.class) + private Integer status; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/category/BpmCategoryRespVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/category/BpmCategoryRespVO.java new file mode 100644 index 0000000..0f7b606 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/category/BpmCategoryRespVO.java @@ -0,0 +1,33 @@ +package com.win.module.bpm.controller.admin.definition.vo.category; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - BPM 流程分类 Response VO") +@Data +public class BpmCategoryRespVO { + + @Schema(description = "分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3167") + private Long id; + + @Schema(description = "分类名", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + private String name; + + @Schema(description = "分类标志", requiredMode = Schema.RequiredMode.REQUIRED, example = "OA") + private String code; + + @Schema(description = "分类描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜") + private String description; + + @Schema(description = "分类状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; + + @Schema(description = "分类排序", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer sort; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/category/BpmCategorySaveReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/category/BpmCategorySaveReqVO.java new file mode 100644 index 0000000..6244c2c --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/category/BpmCategorySaveReqVO.java @@ -0,0 +1,37 @@ +package com.win.module.bpm.controller.admin.definition.vo.category; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.validation.InEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Schema(description = "管理后台 - BPM 流程分类新增/修改 Request VO") +@Data +public class BpmCategorySaveReqVO { + + @Schema(description = "分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3167") + private Long id; + + @Schema(description = "分类名", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @NotEmpty(message = "分类名不能为空") + private String name; + + @Schema(description = "分类描述", example = "你猜") + private String description; + + @Schema(description = "分类标志", requiredMode = Schema.RequiredMode.REQUIRED, example = "OA") + @NotEmpty(message = "分类标志不能为空") + private String code; + + @Schema(description = "分类状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "分类状态不能为空") + @InEnum(CommonStatusEnum.class) + private Integer status; + + @Schema(description = "分类排序", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "分类排序不能为空") + private Integer sort; + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/expression/BpmProcessExpressionPageReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/expression/BpmProcessExpressionPageReqVO.java new file mode 100644 index 0000000..cd7a816 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/expression/BpmProcessExpressionPageReqVO.java @@ -0,0 +1,33 @@ +package com.win.module.bpm.controller.admin.definition.vo.expression; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.validation.InEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - BPM 流程表达式分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmProcessExpressionPageReqVO extends PageParam { + + @Schema(description = "表达式名字", example = "李四") + private String name; + + @Schema(description = "表达式状态", example = "1") + @InEnum(CommonStatusEnum.class) + private Integer status; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/expression/BpmProcessExpressionRespVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/expression/BpmProcessExpressionRespVO.java new file mode 100644 index 0000000..2e7485a --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/expression/BpmProcessExpressionRespVO.java @@ -0,0 +1,30 @@ +package com.win.module.bpm.controller.admin.definition.vo.expression; + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - BPM 流程表达式 Response VO") +@Data +public class BpmProcessExpressionRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3870") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "表达式名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") + @ExcelProperty("表达式名字") + private String name; + + @Schema(description = "表达式状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; + + @Schema(description = "表达式", requiredMode = Schema.RequiredMode.REQUIRED) + private String expression; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/expression/BpmProcessExpressionSaveReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/expression/BpmProcessExpressionSaveReqVO.java new file mode 100644 index 0000000..8d69589 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/expression/BpmProcessExpressionSaveReqVO.java @@ -0,0 +1,27 @@ +package com.win.module.bpm.controller.admin.definition.vo.expression; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Schema(description = "管理后台 - BPM 流程表达式新增/修改 Request VO") +@Data +public class BpmProcessExpressionSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3870") + private Long id; + + @Schema(description = "表达式名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") + @NotEmpty(message = "表达式名字不能为空") + private String name; + + @Schema(description = "表达式状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "表达式状态不能为空") + private Integer status; + + @Schema(description = "表达式", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "表达式不能为空") + private String expression; + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/form/BpmFormPageReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/form/BpmFormPageReqVO.java new file mode 100644 index 0000000..e16aeb7 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/form/BpmFormPageReqVO.java @@ -0,0 +1,14 @@ +package com.win.module.bpm.controller.admin.definition.vo.form; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 动态表单分页 Request VO") +@Data +public class BpmFormPageReqVO extends PageParam { + + @Schema(description = "表单名称", example = "芋道") + private String name; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/form/BpmFormRespVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/form/BpmFormRespVO.java new file mode 100644 index 0000000..e872f90 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/form/BpmFormRespVO.java @@ -0,0 +1,39 @@ +package com.win.module.bpm.controller.admin.definition.vo.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 动态表单 Response VO") +@Data +public class BpmFormRespVO { + + @Schema(description = "表单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "表单名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + @NotNull(message = "表单名称不能为空") + private String name; + + @Schema(description = "表单的配置-JSON 字符串", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "表单的配置不能为空") + private String conf; + + @Schema(description = "表单项的数组-JSON 字符串的数组", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "表单项的数组不能为空") + private List fields; + + @Schema(description = "表单状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "表单状态不能为空") + private Integer status; // 参见 CommonStatusEnum 枚举 + + @Schema(description = "备注", example = "我是备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/form/BpmFormSaveReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/form/BpmFormSaveReqVO.java new file mode 100644 index 0000000..5388886 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/form/BpmFormSaveReqVO.java @@ -0,0 +1,35 @@ +package com.win.module.bpm.controller.admin.definition.vo.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +@Schema(description = "管理后台 - 动态表单创建/更新 Request VO") +@Data +public class BpmFormSaveReqVO { + + @Schema(description = "表单编号", example = "1024") + private Long id; + + @Schema(description = "表单名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + @NotNull(message = "表单名称不能为空") + private String name; + + @Schema(description = "表单的配置-JSON 字符串", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "表单的配置不能为空") + private String conf; + + @Schema(description = "表单项的数组-JSON 字符串的数组", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "表单项的数组不能为空") + private List fields; + + @Schema(description = "表单状态-参见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "表单状态不能为空") + private Integer status; + + @Schema(description = "备注", example = "我是备注") + private String remark; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/group/BpmUserGroupPageReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/group/BpmUserGroupPageReqVO.java new file mode 100644 index 0000000..ca2306c --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/group/BpmUserGroupPageReqVO.java @@ -0,0 +1,28 @@ +package com.win.module.bpm.controller.admin.definition.vo.group; + +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.util.date.DateUtils; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 用户组分页 Request VO") +@Data +public class BpmUserGroupPageReqVO extends PageParam { + + @Schema(description = "编号", example = "1024") + private Long id; + + @Schema(description = "组名", example = "芋道") + private String name; + + @Schema(description = "状态", example = "1") + private Integer status; + + @DateTimeFormat(pattern = DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @Schema(description = "创建时间") + private LocalDateTime[] createTime; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/group/BpmUserGroupRespVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/group/BpmUserGroupRespVO.java new file mode 100644 index 0000000..47271c7 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/group/BpmUserGroupRespVO.java @@ -0,0 +1,31 @@ +package com.win.module.bpm.controller.admin.definition.vo.group; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Set; + +@Schema(description = "管理后台 - 用户组 Response VO") +@Data +public class BpmUserGroupRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "组名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + + @Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码") + private String description; + + @Schema(description = "成员编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2,3") + private Set userIds; + + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/group/BpmUserGroupSaveReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/group/BpmUserGroupSaveReqVO.java new file mode 100644 index 0000000..92fb0b1 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/group/BpmUserGroupSaveReqVO.java @@ -0,0 +1,31 @@ +package com.win.module.bpm.controller.admin.definition.vo.group; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.Set; + +@Schema(description = "管理后台 - 用户组创建/修改 Request VO") +@Data +public class BpmUserGroupSaveReqVO { + + @Schema(description = "编号", example = "1024") + private Long id; + + @Schema(description = "组名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + @NotNull(message = "组名不能为空") + private String name; + + @Schema(description = "描述", example = "芋道源码") + private String description; + + @Schema(description = "成员编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2,3") + @NotNull(message = "成员编号数组不能为空") + private Set userIds; + + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + private Integer status; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/listener/BpmProcessListenerPageReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/listener/BpmProcessListenerPageReqVO.java new file mode 100644 index 0000000..df4723b --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/listener/BpmProcessListenerPageReqVO.java @@ -0,0 +1,30 @@ +package com.win.module.bpm.controller.admin.definition.vo.listener; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.validation.InEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Schema(description = "管理后台 - BPM 流程监听器分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmProcessListenerPageReqVO extends PageParam { + + @Schema(description = "监听器名字", example = "赵六") + private String name; + + @Schema(description = "监听器类型", example = "execution") + private String type; + + @Schema(description = "监听事件", example = "start") + private String event; + + @Schema(description = "状态", example = "1") + @InEnum(CommonStatusEnum.class) + private Integer status; + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/listener/BpmProcessListenerRespVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/listener/BpmProcessListenerRespVO.java new file mode 100644 index 0000000..5c90b1d --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/listener/BpmProcessListenerRespVO.java @@ -0,0 +1,36 @@ +package com.win.module.bpm.controller.admin.definition.vo.listener; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - BPM 流程监听器 Response VO") +@Data +public class BpmProcessListenerRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13089") + private Long id; + + @Schema(description = "监听器名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + private String name; + + @Schema(description = "监听器类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "execution") + private String type; + + @Schema(description = "监听器状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; + + @Schema(description = "监听事件", requiredMode = Schema.RequiredMode.REQUIRED, example = "start") + private String event; + + @Schema(description = "监听器值类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "class") + private String valueType; + + @Schema(description = "监听器值", requiredMode = Schema.RequiredMode.REQUIRED) + private String value; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/listener/BpmProcessListenerSaveReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/listener/BpmProcessListenerSaveReqVO.java new file mode 100644 index 0000000..22055ea --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/listener/BpmProcessListenerSaveReqVO.java @@ -0,0 +1,39 @@ +package com.win.module.bpm.controller.admin.definition.vo.listener; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Schema(description = "管理后台 - BPM 流程监听器新增/修改 Request VO") +@Data +public class BpmProcessListenerSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13089") + private Long id; + + @Schema(description = "监听器名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @NotEmpty(message = "监听器名字不能为空") + private String name; + + @Schema(description = "监听器类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "execution") + @NotEmpty(message = "监听器类型不能为空") + private String type; + + @Schema(description = "监听器状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "监听器状态不能为空") + private Integer status; + + @Schema(description = "监听事件", requiredMode = Schema.RequiredMode.REQUIRED, example = "start") + @NotEmpty(message = "监听事件不能为空") + private String event; + + @Schema(description = "监听器值类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "class") + @NotEmpty(message = "监听器值类型不能为空") + private String valueType; + + @Schema(description = "监听器值", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "监听器值不能为空") + private String value; + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModeImportReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModeImportReqVO.java new file mode 100644 index 0000000..43823f4 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModeImportReqVO.java @@ -0,0 +1,16 @@ +package com.win.module.bpm.controller.admin.definition.vo.model; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +@Schema(description = "管理后台 - 流程模型的导入 Request VO 相比流程模型的新建来说,只是多了一个 bpmnFile 文件") +@Data +public class BpmModeImportReqVO extends BpmModelCreateReqVO { + + @Schema(description = "BPMN 文件", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "BPMN 文件不能为空") + private MultipartFile bpmnFile; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelCreateReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelCreateReqVO.java new file mode 100644 index 0000000..3c22ade --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelCreateReqVO.java @@ -0,0 +1,22 @@ +package com.win.module.bpm.controller.admin.definition.vo.model; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +@Schema(description = "管理后台 - 流程模型的创建 Request VO") +@Data +public class BpmModelCreateReqVO { + + @Schema(description = "流程标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "process_win") + @NotEmpty(message = "流程标识不能为空") + private String key; + + @Schema(description = "流程名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + @NotEmpty(message = "流程名称不能为空") + private String name; + + @Schema(description = "流程描述", example = "我是描述") + private String description; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelPageReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelPageReqVO.java new file mode 100644 index 0000000..b21f73b --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelPageReqVO.java @@ -0,0 +1,21 @@ +package com.win.module.bpm.controller.admin.definition.vo.model; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + + +@Schema(description = "管理后台 - 流程模型分页 Request VO") +@Data +public class BpmModelPageReqVO extends PageParam { + + @Schema(description = "标识,精准匹配", example = "process1641042089407") + private String key; + + @Schema(description = "名字,模糊匹配", example = "芋道") + private String name; + + @Schema(description = "流程分类", example = "1") + private String category; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelRespVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelRespVO.java new file mode 100644 index 0000000..d071826 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelRespVO.java @@ -0,0 +1,57 @@ +package com.win.module.bpm.controller.admin.definition.vo.model; + +import com.win.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 流程模型 Response VO") +@Data +public class BpmModelRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private String id; + + @Schema(description = "流程标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "process_win") + private String key; + + @Schema(description = "流程名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + + @Schema(description = "流程图标", example = "https://www.iocoder.cn/win.jpg") + private String icon; + + @Schema(description = "流程描述", example = "我是描述") + private String description; + + @Schema(description = "流程分类编码", example = "1") + private String category; + @Schema(description = "流程分类名字", example = "请假") + private String categoryName; + + @Schema(description = "表单类型-参见 bpm_model_form_type 数据字典", example = "1") + private Integer formType; + + @Schema(description = "表单编号", example = "1024") + private Long formId; // 在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空 + @Schema(description = "表单名字", example = "请假表单") + private String formName; + + @Schema(description = "自定义表单的提交路径", example = "/bpm/oa/leave/create") + private String formCustomCreatePath; // 使用 Vue 的路由地址-在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空 + @Schema(description = "自定义表单的查看路径", example = "/bpm/oa/leave/view") + private String formCustomViewPath; // ,使用 Vue 的路由地址-在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空 + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + + @Schema(description = "BPMN XML", requiredMode = Schema.RequiredMode.REQUIRED) + private String bpmnXml; + + /** + * 最新部署的流程定义 + */ + private BpmProcessDefinitionRespVO processDefinition; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateReqVO.java new file mode 100644 index 0000000..a23ba86 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateReqVO.java @@ -0,0 +1,46 @@ +package com.win.module.bpm.controller.admin.definition.vo.model; + +import com.win.framework.common.validation.InEnum; +import com.win.module.bpm.enums.definition.BpmModelFormTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +@Schema(description = "管理后台 - 流程模型的更新 Request VO") +@Data +public class BpmModelUpdateReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "编号不能为空") + private String id; + + @Schema(description = "流程名称", example = "芋道") + private String name; + + @Schema(description = "流程图标", example = "https://www.iocoder.cn/win.jpg") + @URL(message = "流程图标格式不正确") + private String icon; + + @Schema(description = "流程描述", example = "我是描述") + private String description; + + @Schema(description = "流程分类", example = "1") + private String category; + + @Schema(description = "BPMN XML", requiredMode = Schema.RequiredMode.REQUIRED) + private String bpmnXml; + + @Schema(description = "表单类型-参见 bpm_model_form_type 数据字典", example = "1") + @InEnum(BpmModelFormTypeEnum.class) + private Integer formType; + @Schema(description = "表单编号-在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空", example = "1024") + private Long formId; + @Schema(description = "自定义表单的提交路径,使用 Vue 的路由地址-在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空", + example = "/bpm/oa/leave/create") + private String formCustomCreatePath; + @Schema(description = "自定义表单的查看路径,使用 Vue 的路由地址-在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空", + example = "/bpm/oa/leave/view") + private String formCustomViewPath; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateStateReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateStateReqVO.java new file mode 100644 index 0000000..2150549 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateStateReqVO.java @@ -0,0 +1,19 @@ +package com.win.module.bpm.controller.admin.definition.vo.model; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Schema(description = "管理后台 - 流程模型更新状态 Request VO") +@Data +public class BpmModelUpdateStateReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "编号不能为空") + private String id; + + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + private Integer state; // 参见 Flowable SuspensionState 枚举 + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionPageReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionPageReqVO.java new file mode 100644 index 0000000..820d41a --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionPageReqVO.java @@ -0,0 +1,14 @@ +package com.win.module.bpm.controller.admin.definition.vo.process; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 流程定义分页 Request VO") +@Data +public class BpmProcessDefinitionPageReqVO extends PageParam { + + @Schema(description = "标识-精准匹配", example = "process1641042089407") + private String key; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionRespVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionRespVO.java new file mode 100644 index 0000000..18794dc --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionRespVO.java @@ -0,0 +1,77 @@ +package com.win.module.bpm.controller.admin.definition.vo.process; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 流程定义 Response VO") +@Data +public class BpmProcessDefinitionRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private String id; + + @Schema(description = "版本", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer version; + + @Schema(description = "流程名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + + @Schema(description = "流程标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + private String key; + + @Schema(description = "流程图标", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/win.jpg") + private String icon; + + @Schema(description = "流程描述", example = "我是描述") + private String description; + + @Schema(description = "流程分类", example = "1") + private String category; + @Schema(description = "流程分类名字", example = "请假") + private String categoryName; + + @Schema(description = "表单类型-参见 bpm_model_form_type 数据字典", example = "1") + private Integer formType; + @Schema(description = "表单编号-在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空", example = "1024") + private Long formId; + @Schema(description = "表单名字", example = "请假表单") + private String formName; + @Schema(description = "表单的配置-JSON 字符串。在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空", requiredMode = Schema.RequiredMode.REQUIRED) + private String formConf; + @Schema(description = "表单项的数组-JSON 字符串的数组。在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空", requiredMode = Schema.RequiredMode.REQUIRED) + private List formFields; + @Schema(description = "自定义表单的提交路径,使用 Vue 的路由地址-在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空", + example = "/bpm/oa/leave/create") + private String formCustomCreatePath; + @Schema(description = "自定义表单的查看路径,使用 Vue 的路由地址-在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时,必须非空", + example = "/bpm/oa/leave/view") + private String formCustomViewPath; + + @Schema(description = "中断状态-参见 SuspensionState 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer suspensionState; // 参见 SuspensionState 枚举 + + @Schema(description = "部署时间") + private LocalDateTime deploymentTime; // 需要从对应的 Deployment 读取,非必须返回 + + @Schema(description = "BPMN XML") + private String bpmnXml; // 需要从对应的 BpmnModel 读取,非必须返回 + + @Schema(description = "发起用户需要选择审批人的任务数组") + private List startUserSelectTasks; // 需要从对应的 BpmnModel 读取,非必须返回 + + @Schema(description = "BPMN UserTask 用户任务") + @Data + public static class UserTask { + + @Schema(description = "任务标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "sudo") + private String id; + + @Schema(description = "任务名", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + private String name; + + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/BpmOALeaveController.http b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/BpmOALeaveController.http new file mode 100644 index 0000000..96bbf96 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/BpmOALeaveController.http @@ -0,0 +1,12 @@ +### 请求 /bpm/oa/leave/create 接口 => 成功 +POST {{baseUrl}}/bpm/oa/leave/create +Content-Type: application/json +tenant-id: 1 +Authorization: Bearer {{token}} + +{ + "startTime": "2022-03-01", + "endTime": "2022-03-05", + "type": 1, + "reason": "我要请假啦啦啦!" +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/BpmOALeaveController.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/BpmOALeaveController.java new file mode 100644 index 0000000..77df84b --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/BpmOALeaveController.java @@ -0,0 +1,62 @@ +package com.win.module.bpm.controller.admin.oa; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.oa.vo.BpmOALeaveCreateReqVO; +import com.win.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO; +import com.win.module.bpm.controller.admin.oa.vo.BpmOALeaveRespVO; +import com.win.module.bpm.dal.dataobject.oa.BpmOALeaveDO; +import com.win.module.bpm.service.oa.BpmOALeaveService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +/** + * OA 请假申请 Controller,用于演示自己存储数据,接入工作流的例子 + * + * @author jason + * @author 芋道源码 + */ +@Tag(name = "管理后台 - OA 请假申请") +@RestController +@RequestMapping("/bpm/oa/leave") +@Validated +public class BpmOALeaveController { + + @Resource + private BpmOALeaveService leaveService; + + @PostMapping("/create") + @PreAuthorize("@ss.hasPermission('bpm:oa-leave:create')") + @Operation(summary = "创建请求申请") + public CommonResult createLeave(@Valid @RequestBody BpmOALeaveCreateReqVO createReqVO) { + return success(leaveService.createLeave(getLoginUserId(), createReqVO)); + } + + @GetMapping("/get") + @PreAuthorize("@ss.hasPermission('bpm:oa-leave:query')") + @Operation(summary = "获得请假申请") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + public CommonResult getLeave(@RequestParam("id") Long id) { + BpmOALeaveDO leave = leaveService.getLeave(id); + return success(BeanUtils.toBean(leave, BpmOALeaveRespVO.class)); + } + + @GetMapping("/page") + @PreAuthorize("@ss.hasPermission('bpm:oa-leave:query')") + @Operation(summary = "获得请假申请分页") + public CommonResult> getLeavePage(@Valid BpmOALeavePageReqVO pageVO) { + PageResult pageResult = leaveService.getLeavePage(getLoginUserId(), pageVO); + return success(BeanUtils.toBean(pageResult, BpmOALeaveRespVO.class)); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/package-info.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/package-info.java new file mode 100644 index 0000000..e4bcffc --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/package-info.java @@ -0,0 +1,5 @@ +/** + * OA 示例,用于演示外部业务接入 BPM 工作流的示例 + * 一般的接入方式,只需要调用 接口,后续 Admin 用户在管理后台的【待办事务】进行审批 + */ +package com.win.module.bpm.controller.admin.oa; diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/vo/BpmOALeaveCreateReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/vo/BpmOALeaveCreateReqVO.java new file mode 100644 index 0000000..7282f87 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/vo/BpmOALeaveCreateReqVO.java @@ -0,0 +1,43 @@ +package com.win.module.bpm.controller.admin.oa.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.AssertTrue; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 请假申请创建 Request VO") +@Data +public class BpmOALeaveCreateReqVO { + + @Schema(description = "请假的开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "开始时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime startTime; + + @Schema(description = "请假的结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "结束时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime endTime; + + @Schema(description = "请假类型-参见 bpm_oa_type 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer type; + + @Schema(description = "原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "阅读芋道源码") + private String reason; + + @Schema(description = "发起人自选审批人 Map", example = "{taskKey1: [1, 2]}") + private Map> startUserSelectAssignees; + + @AssertTrue(message = "结束时间,需要在开始时间之后") + public boolean isEndTimeValid() { + return !getEndTime().isBefore(getStartTime()); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/vo/BpmOALeavePageReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/vo/BpmOALeavePageReqVO.java new file mode 100644 index 0000000..5668b56 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/vo/BpmOALeavePageReqVO.java @@ -0,0 +1,29 @@ +package com.win.module.bpm.controller.admin.oa.vo; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 请假申请分页 Request VO") +@Data +public class BpmOALeavePageReqVO extends PageParam { + + @Schema(description = "状态", example = "1") + private Integer status; // 参见 BpmProcessInstanceResultEnum 枚举 + + @Schema(description = "请假类型,参见 bpm_oa_type", example = "1") + private Integer type; + + @Schema(description = "原因,模糊匹配", example = "阅读芋道源码") + private String reason; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @Schema(description = "申请时间") + private LocalDateTime[] createTime; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/vo/BpmOALeaveRespVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/vo/BpmOALeaveRespVO.java new file mode 100644 index 0000000..1965e58 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/oa/vo/BpmOALeaveRespVO.java @@ -0,0 +1,36 @@ +package com.win.module.bpm.controller.admin.oa.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 请假申请 Response VO") +@Data +public class BpmOALeaveRespVO { + + @Schema(description = "请假表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "请假类型,参见 bpm_oa_type 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer type; + + @Schema(description = "原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "阅读芋道源码") + private String reason; + + @Schema(description = "申请时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + + @Schema(description = "请假的开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime startTime; + + @Schema(description = "请假的结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime endTime; + + @Schema(description = "流程编号") + private String processInstanceId; + + @Schema(description = "审批结果", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; // 参见 BpmProcessInstanceStatusEnum 枚举 + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmActivityController.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmActivityController.java new file mode 100644 index 0000000..2f8405c --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmActivityController.java @@ -0,0 +1,39 @@ +package com.win.module.bpm.controller.admin.task; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.bpm.controller.admin.task.vo.activity.BpmActivityRespVO; +import com.win.module.bpm.service.task.BpmActivityService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 流程活动实例") +@RestController +@RequestMapping("/bpm/activity") +@Validated +public class BpmActivityController { + + @Resource + private BpmActivityService activityService; + + @GetMapping("/list") + @Operation(summary = "生成指定流程实例的高亮流程图", + description = "只高亮进行中的任务。不过要注意,该接口暂时没用,通过前端的 ProcessViewer.vue 界面的 highlightDiagram 方法生成") + @Parameter(name = "processInstanceId", description = "流程实例的编号", required = true) + @PreAuthorize("@ss.hasPermission('bpm:task:query')") + public CommonResult> getActivityList( + @RequestParam("processInstanceId") String processInstanceId) { + return success(activityService.getActivityListByProcessInstanceId(processInstanceId)); + } +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmProcessInstanceController.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmProcessInstanceController.java new file mode 100644 index 0000000..7d17116 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmProcessInstanceController.java @@ -0,0 +1,163 @@ +package com.win.module.bpm.controller.admin.task; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.number.NumberUtils; +import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCancelReqVO; +import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCreateReqVO; +import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstancePageReqVO; +import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO; +import com.win.module.bpm.convert.task.BpmProcessInstanceConvert; +import com.win.module.bpm.dal.dataobject.definition.BpmCategoryDO; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; +import com.win.module.bpm.framework.flowable.core.util.BpmnModelUtils; +import com.win.module.bpm.service.definition.BpmCategoryService; +import com.win.module.bpm.service.definition.BpmProcessDefinitionService; +import com.win.module.bpm.service.task.BpmProcessInstanceService; +import com.win.module.bpm.service.task.BpmTaskService; +import com.win.module.system.api.dept.DeptApi; +import com.win.module.system.api.dept.dto.DeptRespDTO; +import com.win.module.system.api.user.AdminUserApi; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.repository.ProcessDefinition; +import org.flowable.task.api.Task; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.common.util.collection.CollectionUtils.convertList; +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +@Tag(name = "管理后台 - 流程实例") // 流程实例,通过流程定义创建的一次“申请” +@RestController +@RequestMapping("/bpm/process-instance") +@Validated +public class BpmProcessInstanceController { + + @Resource + private BpmProcessInstanceService processInstanceService; + @Resource + private BpmTaskService taskService; + @Resource + private BpmProcessDefinitionService processDefinitionService; + @Resource + private BpmCategoryService categoryService; + + @Resource + private AdminUserApi adminUserApi; + @Resource + private DeptApi deptApi; + + @GetMapping("/my-page") + @Operation(summary = "获得我的实例分页列表", description = "在【我的流程】菜单中,进行调用") + @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") + public CommonResult> getProcessInstanceMyPage( + @Valid BpmProcessInstancePageReqVO pageReqVO) { + PageResult pageResult = processInstanceService.getProcessInstancePage( + getLoginUserId(), pageReqVO); + if (CollUtil.isEmpty(pageResult.getList())) { + return success(PageResult.empty(pageResult.getTotal())); + } + + // 拼接返回 + Map> taskMap = taskService.getTaskMapByProcessInstanceIds( + convertList(pageResult.getList(), HistoricProcessInstance::getId)); + Map processDefinitionMap = processDefinitionService.getProcessDefinitionMap( + convertSet(pageResult.getList(), HistoricProcessInstance::getProcessDefinitionId)); + Map categoryMap = categoryService.getCategoryMap( + convertSet(processDefinitionMap.values(), ProcessDefinition::getCategory)); + return success(BpmProcessInstanceConvert.INSTANCE.buildProcessInstancePage(pageResult, + processDefinitionMap, categoryMap, taskMap, null, null)); + } + + @GetMapping("/manager-page") + @Operation(summary = "获得管理流程实例的分页列表", description = "在【流程实例】菜单中,进行调用") + @PreAuthorize("@ss.hasPermission('bpm:process-instance:manager-query')") + public CommonResult> getProcessInstanceManagerPage( + @Valid BpmProcessInstancePageReqVO pageReqVO) { + PageResult pageResult = processInstanceService.getProcessInstancePage( + null, pageReqVO); + if (CollUtil.isEmpty(pageResult.getList())) { + return success(PageResult.empty(pageResult.getTotal())); + } + + // 拼接返回 + Map> taskMap = taskService.getTaskMapByProcessInstanceIds( + convertList(pageResult.getList(), HistoricProcessInstance::getId)); + Map processDefinitionMap = processDefinitionService.getProcessDefinitionMap( + convertSet(pageResult.getList(), HistoricProcessInstance::getProcessDefinitionId)); + Map categoryMap = categoryService.getCategoryMap( + convertSet(processDefinitionMap.values(), ProcessDefinition::getCategory)); + // 发起人信息 + Map userMap = adminUserApi.getUserMap( + convertSet(pageResult.getList(), processInstance -> NumberUtils.parseLong(processInstance.getStartUserId()))); + Map deptMap = deptApi.getDeptMap( + convertSet(userMap.values(), AdminUserRespDTO::getDeptId)); + return success(BpmProcessInstanceConvert.INSTANCE.buildProcessInstancePage(pageResult, + processDefinitionMap, categoryMap, taskMap, userMap, deptMap)); + } + + @PostMapping("/create") + @Operation(summary = "新建流程实例") + @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") + public CommonResult createProcessInstance(@Valid @RequestBody BpmProcessInstanceCreateReqVO createReqVO) { + return success(processInstanceService.createProcessInstance(getLoginUserId(), createReqVO)); + } + + @GetMapping("/get") + @Operation(summary = "获得指定流程实例", description = "在【流程详细】界面中,进行调用") + @Parameter(name = "id", description = "流程实例的编号", required = true) + @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") + public CommonResult getProcessInstance(@RequestParam("id") String id) { + HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(id); + if (processInstance == null) { + return success(null); + } + + // 拼接返回 + ProcessDefinition processDefinition = processDefinitionService.getProcessDefinition( + processInstance.getProcessDefinitionId()); + BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionService.getProcessDefinitionInfo( + processInstance.getProcessDefinitionId()); + String bpmnXml = BpmnModelUtils.getBpmnXml( + processDefinitionService.getProcessDefinitionBpmnModel(processInstance.getProcessDefinitionId())); + AdminUserRespDTO startUser = adminUserApi.getUser(NumberUtils.parseLong(processInstance.getStartUserId())).getCheckedData(); + DeptRespDTO dept = null; + if (startUser != null) { + dept = deptApi.getDept(startUser.getDeptId()).getCheckedData(); + } + return success(BpmProcessInstanceConvert.INSTANCE.buildProcessInstance(processInstance, + processDefinition, processDefinitionInfo, bpmnXml, startUser, dept)); + } + + @DeleteMapping("/cancel-by-start-user") + @Operation(summary = "用户取消流程实例", description = "取消发起的流程") + @PreAuthorize("@ss.hasPermission('bpm:process-instance:cancel')") + public CommonResult cancelProcessInstanceByStartUser( + @Valid @RequestBody BpmProcessInstanceCancelReqVO cancelReqVO) { + processInstanceService.cancelProcessInstanceByStartUser(getLoginUserId(), cancelReqVO); + return success(true); + } + + @DeleteMapping("/cancel-by-admin") + @Operation(summary = "管理员取消流程实例", description = "管理员撤回流程") + @PreAuthorize("@ss.hasPermission('bpm:process-instance:cancel-by-admin')") + public CommonResult cancelProcessInstanceByManager( + @Valid @RequestBody BpmProcessInstanceCancelReqVO cancelReqVO) { + processInstanceService.cancelProcessInstanceByAdmin(getLoginUserId(), cancelReqVO); + return success(true); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmProcessInstanceCopyController.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmProcessInstanceCopyController.java new file mode 100644 index 0000000..5539703 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmProcessInstanceCopyController.java @@ -0,0 +1,79 @@ +package com.win.module.bpm.controller.admin.task; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.MapUtils; +import com.win.framework.common.util.date.DateUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.task.vo.cc.BpmProcessInstanceCopyRespVO; +import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyPageReqVO; +import com.win.module.bpm.dal.dataobject.task.BpmProcessInstanceCopyDO; +import com.win.module.bpm.service.task.BpmProcessInstanceCopyService; +import com.win.module.bpm.service.task.BpmProcessInstanceService; +import com.win.module.bpm.service.task.BpmTaskService; +import com.win.module.system.api.user.AdminUserApi; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.flowable.engine.history.HistoricProcessInstance; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; +import java.util.stream.Stream; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.common.util.collection.CollectionUtils.convertListByFlatMap; +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +@Tag(name = "管理后台 - 流程实例抄送") +@RestController +@RequestMapping("/bpm/process-instance/copy") +@Validated +public class BpmProcessInstanceCopyController { + + @Resource + private BpmProcessInstanceCopyService processInstanceCopyService; + @Resource + private BpmProcessInstanceService processInstanceService; + @Resource + private BpmTaskService taskService; + + @Resource + private AdminUserApi adminUserApi; + + @GetMapping("/page") + @Operation(summary = "获得抄送流程分页列表") + @PreAuthorize("@ss.hasPermission('bpm:process-instance-cc:query')") + public CommonResult> getProcessInstanceCopyPage( + @Valid BpmProcessInstanceCopyPageReqVO pageReqVO) { + PageResult pageResult = processInstanceCopyService.getProcessInstanceCopyPage( + getLoginUserId(), pageReqVO); + if (CollUtil.isEmpty(pageResult.getList())) { + return success(new PageResult<>(pageResult.getTotal())); + } + + // 拼接返回 + Map taskNameMap = taskService.getTaskNameByTaskIds( + convertSet(pageResult.getList(), BpmProcessInstanceCopyDO::getTaskId)); + Map processInstanceMap = processInstanceService.getHistoricProcessInstanceMap( + convertSet(pageResult.getList(), BpmProcessInstanceCopyDO::getProcessInstanceId)); + Map userMap = adminUserApi.getUserMap(convertListByFlatMap(pageResult.getList(), + copy -> Stream.of(copy.getStartUserId(), Long.parseLong(copy.getCreator())))); + return success(BeanUtils.toBean(pageResult, BpmProcessInstanceCopyRespVO.class, copyVO -> { + MapUtils.findAndThen(userMap, Long.valueOf(copyVO.getCreator()), user -> copyVO.setCreatorName(user.getNickname())); + MapUtils.findAndThen(userMap, copyVO.getStartUserId(), user -> copyVO.setStartUserName(user.getNickname())); + MapUtils.findAndThen(taskNameMap, copyVO.getTaskId(), copyVO::setTaskName); + MapUtils.findAndThen(processInstanceMap, copyVO.getProcessInstanceId(), + processInstance -> copyVO.setProcessInstanceStartTime(DateUtils.of(processInstance.getStartTime()))); + })); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmTaskController.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmTaskController.java new file mode 100644 index 0000000..071ad60 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/BpmTaskController.java @@ -0,0 +1,224 @@ +package com.win.module.bpm.controller.admin.task; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.number.NumberUtils; +import com.win.module.bpm.controller.admin.task.vo.task.*; +import com.win.module.bpm.convert.task.BpmTaskConvert; +import com.win.module.bpm.dal.dataobject.definition.BpmFormDO; +import com.win.module.bpm.service.definition.BpmFormService; +import com.win.module.bpm.service.task.BpmProcessInstanceService; +import com.win.module.bpm.service.task.BpmTaskService; +import com.win.module.system.api.dept.DeptApi; +import com.win.module.system.api.dept.dto.DeptRespDTO; +import com.win.module.system.api.user.AdminUserApi; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.flowable.bpmn.model.UserTask; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.Task; +import org.flowable.task.api.history.HistoricTaskInstance; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Stream; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.common.util.collection.CollectionUtils.*; +import static com.win.framework.web.core.util.WebFrameworkUtils.getLoginUserId; + +@Tag(name = "管理后台 - 流程任务实例") +@RestController +@RequestMapping("/bpm/task") +@Validated +public class BpmTaskController { + + @Resource + private BpmTaskService taskService; + @Resource + private BpmProcessInstanceService processInstanceService; + @Resource + private BpmFormService formService; + + @Resource + private AdminUserApi adminUserApi; + @Resource + private DeptApi deptApi; + + @GetMapping("todo-page") + @Operation(summary = "获取 Todo 待办任务分页") + @PreAuthorize("@ss.hasPermission('bpm:task:query')") + public CommonResult> getTaskTodoPage(@Valid BpmTaskPageReqVO pageVO) { + PageResult pageResult = taskService.getTaskTodoPage(getLoginUserId(), pageVO); + if (CollUtil.isEmpty(pageResult.getList())) { + return success(PageResult.empty()); + } + + // 拼接数据 + Map processInstanceMap = processInstanceService.getProcessInstanceMap( + convertSet(pageResult.getList(), Task::getProcessInstanceId)); + Map userMap = adminUserApi.getUserMap( + convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); + return success(BpmTaskConvert.INSTANCE.buildTodoTaskPage(pageResult, processInstanceMap, userMap)); + } + + @GetMapping("done-page") + @Operation(summary = "获取 Done 已办任务分页") + @PreAuthorize("@ss.hasPermission('bpm:task:query')") + public CommonResult> getTaskDonePage(@Valid BpmTaskPageReqVO pageVO) { + PageResult pageResult = taskService.getTaskDonePage(getLoginUserId(), pageVO); + if (CollUtil.isEmpty(pageResult.getList())) { + return success(PageResult.empty()); + } + + // 拼接数据 + Map processInstanceMap = processInstanceService.getHistoricProcessInstanceMap( + convertSet(pageResult.getList(), HistoricTaskInstance::getProcessInstanceId)); + Map userMap = adminUserApi.getUserMap( + convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); + return success(BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, null)); + } + + @GetMapping("manager-page") + @Operation(summary = "获取全部任务的分页", description = "用于【流程任务】菜单") + @PreAuthorize("@ss.hasPermission('bpm:task:mananger-query')") + public CommonResult> getTaskManagerPage(@Valid BpmTaskPageReqVO pageVO) { + PageResult pageResult = taskService.getTaskPage(getLoginUserId(), pageVO); + if (CollUtil.isEmpty(pageResult.getList())) { + return success(PageResult.empty()); + } + + // 拼接数据 + Map processInstanceMap = processInstanceService.getHistoricProcessInstanceMap( + convertSet(pageResult.getList(), HistoricTaskInstance::getProcessInstanceId)); + // 获得 User 和 Dept Map + Set userIds = convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId())); + userIds.addAll(convertSet(pageResult.getList(), task -> NumberUtils.parseLong(task.getAssignee()))); + Map userMap = adminUserApi.getUserMap(userIds); + Map deptMap = deptApi.getDeptMap( + convertSet(userMap.values(), AdminUserRespDTO::getDeptId)); + return success(BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, deptMap)); + } + + @GetMapping("/list-by-process-instance-id") + @Operation(summary = "获得指定流程实例的任务列表", description = "包括完成的、未完成的") + @Parameter(name = "processInstanceId", description = "流程实例的编号", required = true) + @PreAuthorize("@ss.hasPermission('bpm:task:query')") + public CommonResult> getTaskListByProcessInstanceId( + @RequestParam("processInstanceId") String processInstanceId) { + List taskList = taskService.getTaskListByProcessInstanceId(processInstanceId); + if (CollUtil.isEmpty(taskList)) { + return success(Collections.emptyList()); + } + + // 拼接数据 + HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(processInstanceId); + // 获得 User 和 Dept Map + Set userIds = convertSetByFlatMap(taskList, task -> + Stream.of(NumberUtils.parseLong(task.getAssignee()), NumberUtils.parseLong(task.getOwner()))); + userIds.add(NumberUtils.parseLong(processInstance.getStartUserId())); + Map userMap = adminUserApi.getUserMap(userIds); + Map deptMap = deptApi.getDeptMap( + convertSet(userMap.values(), AdminUserRespDTO::getDeptId)); + // 获得 Form Map + Map formMap = formService.getFormMap( + convertSet(taskList, task -> NumberUtils.parseLong(task.getFormKey()))); + return success(BpmTaskConvert.INSTANCE.buildTaskListByProcessInstanceId(taskList, processInstance, + formMap, userMap, deptMap)); + } + + @PutMapping("/approve") + @Operation(summary = "通过任务") + @PreAuthorize("@ss.hasPermission('bpm:task:update')") + public CommonResult approveTask(@Valid @RequestBody BpmTaskApproveReqVO reqVO) { + taskService.approveTask(getLoginUserId(), reqVO); + return success(true); + } + + @PutMapping("/reject") + @Operation(summary = "不通过任务") + @PreAuthorize("@ss.hasPermission('bpm:task:update')") + public CommonResult rejectTask(@Valid @RequestBody BpmTaskRejectReqVO reqVO) { + taskService.rejectTask(getLoginUserId(), reqVO); + return success(true); + } + + @GetMapping("/list-by-return") + @Operation(summary = "获取所有可回退的节点", description = "用于【流程详情】的【回退】按钮") + @Parameter(name = "taskId", description = "当前任务ID", required = true) + @PreAuthorize("@ss.hasPermission('bpm:task:update')") + public CommonResult> getTaskListByReturn(@RequestParam("id") String id) { + List userTaskList = taskService.getUserTaskListByReturn(id); + return success(convertList(userTaskList, userTask -> // 只返回 id 和 name + new BpmTaskRespVO().setName(userTask.getName()).setTaskDefinitionKey(userTask.getId()))); + } + + @PutMapping("/return") + @Operation(summary = "回退任务", description = "用于【流程详情】的【回退】按钮") + @PreAuthorize("@ss.hasPermission('bpm:task:update')") + public CommonResult returnTask(@Valid @RequestBody BpmTaskReturnReqVO reqVO) { + taskService.returnTask(getLoginUserId(), reqVO); + return success(true); + } + + @PutMapping("/delegate") + @Operation(summary = "委派任务", description = "用于【流程详情】的【委派】按钮") + @PreAuthorize("@ss.hasPermission('bpm:task:update')") + public CommonResult delegateTask(@Valid @RequestBody BpmTaskDelegateReqVO reqVO) { + taskService.delegateTask(getLoginUserId(), reqVO); + return success(true); + } + + @PutMapping("/transfer") + @Operation(summary = "转派任务", description = "用于【流程详情】的【转派】按钮") + @PreAuthorize("@ss.hasPermission('bpm:task:update')") + public CommonResult transferTask(@Valid @RequestBody BpmTaskTransferReqVO reqVO) { + taskService.transferTask(getLoginUserId(), reqVO); + return success(true); + } + + @PutMapping("/create-sign") + @Operation(summary = "加签", description = "before 前加签,after 后加签") + @PreAuthorize("@ss.hasPermission('bpm:task:update')") + public CommonResult createSignTask(@Valid @RequestBody BpmTaskSignCreateReqVO reqVO) { + taskService.createSignTask(getLoginUserId(), reqVO); + return success(true); + } + + @DeleteMapping("/delete-sign") + @Operation(summary = "减签") + @PreAuthorize("@ss.hasPermission('bpm:task:update')") + public CommonResult deleteSignTask(@Valid @RequestBody BpmTaskSignDeleteReqVO reqVO) { + taskService.deleteSignTask(getLoginUserId(), reqVO); + return success(true); + } + + @GetMapping("/list-by-parent-task-id") + @Operation(summary = "获得指定父级任务的子任务列表") // 目前用于,减签的时候,获得子任务列表 + @Parameter(name = "parentTaskId", description = "父级任务编号", required = true) + @PreAuthorize("@ss.hasPermission('bpm:task:query')") + public CommonResult> getTaskListByParentTaskId(@RequestParam("parentTaskId") String parentTaskId) { + List taskList = taskService.getTaskListByParentTaskId(parentTaskId); + if (CollUtil.isEmpty(taskList)) { + return success(Collections.emptyList()); + } + // 拼接数据 + Map userMap = adminUserApi.getUserMap(convertSetByFlatMap(taskList, + user -> Stream.of(NumberUtils.parseLong(user.getAssignee()), NumberUtils.parseLong(user.getOwner())))); + Map deptMap = deptApi.getDeptMap( + convertSet(userMap.values(), AdminUserRespDTO::getDeptId)); + return success(BpmTaskConvert.INSTANCE.buildTaskListByParentTaskId(taskList, userMap, deptMap)); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/activity/BpmActivityRespVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/activity/BpmActivityRespVO.java new file mode 100644 index 0000000..9307ffa --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/activity/BpmActivityRespVO.java @@ -0,0 +1,25 @@ +package com.win.module.bpm.controller.admin.task.vo.activity; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 流程活动的 Response VO") +@Data +public class BpmActivityRespVO { + + @Schema(description = "流程活动的标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private String key; + @Schema(description = "流程活动的类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "StartEvent") + private String type; + + @Schema(description = "流程活动的开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime startTime; + @Schema(description = "流程活动的结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime endTime; + + @Schema(description = "关联的流程任务的编号", example = "2048") + private String taskId; // 关联的流程任务,只有 UserTask 等类型才有 + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/cc/BpmProcessInstanceCopyRespVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/cc/BpmProcessInstanceCopyRespVO.java new file mode 100644 index 0000000..ee89116 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/cc/BpmProcessInstanceCopyRespVO.java @@ -0,0 +1,40 @@ +package com.win.module.bpm.controller.admin.task.vo.cc; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 流程实例抄送的分页 Item Response VO") +@Data +public class BpmProcessInstanceCopyRespVO { + + @Schema(description = "抄送主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "发起人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "888") + private Long startUserId; + @Schema(description = "发起人昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String startUserName; + + @Schema(description = "流程实例编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "A233") + private String processInstanceId; + @Schema(description = "流程实例的名称") + private String processInstanceName; + @Schema(description = "流程实例的发起时间") + private LocalDateTime processInstanceStartTime; + + @Schema(description = "发起抄送的任务编号") + private String taskId; + @Schema(description = "发起抄送的任务名称") + private String taskName; + + @Schema(description = "抄送人") + private String creator; + @Schema(description = "抄送人昵称") + private String creatorName; + + @Schema(description = "抄送时间") + private LocalDateTime createTime; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCancelReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCancelReqVO.java new file mode 100644 index 0000000..f69bba8 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCancelReqVO.java @@ -0,0 +1,19 @@ +package com.win.module.bpm.controller.admin.task.vo.instance; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +@Schema(description = "管理后台 - 流程实例的取消 Request VO") +@Data +public class BpmProcessInstanceCancelReqVO { + + @Schema(description = "流程实例的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "流程实例的编号不能为空") + private String id; + + @Schema(description = "取消原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "不请假了!") + @NotEmpty(message = "取消原因不能为空") + private String reason; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCopyPageReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCopyPageReqVO.java new file mode 100644 index 0000000..50ed120 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCopyPageReqVO.java @@ -0,0 +1,23 @@ +package com.win.module.bpm.controller.admin.task.vo.instance; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 流程实例抄送的分页 Request VO") +@Data +public class BpmProcessInstanceCopyPageReqVO extends PageParam { + + @Schema(description = "流程名称", example = "芋道") + private String processInstanceName; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCreateReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCreateReqVO.java new file mode 100644 index 0000000..7a5d537 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCreateReqVO.java @@ -0,0 +1,24 @@ +package com.win.module.bpm.controller.admin.task.vo.instance; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Schema(description = "管理后台 - 流程实例的创建 Request VO") +@Data +public class BpmProcessInstanceCreateReqVO { + + @Schema(description = "流程定义的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "流程定义编号不能为空") + private String processDefinitionId; + + @Schema(description = "变量实例(动态表单)") + private Map variables; + + @Schema(description = "发起人自选审批人 Map", example = "{taskKey1: [1, 2]}") + private Map> startUserSelectAssignees; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageReqVO.java new file mode 100644 index 0000000..430a215 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageReqVO.java @@ -0,0 +1,38 @@ +package com.win.module.bpm.controller.admin.task.vo.instance; + +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.validation.InEnum; +import com.win.module.bpm.enums.task.BpmProcessInstanceStatusEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 流程实例分页 Request VO") +@Data +public class BpmProcessInstancePageReqVO extends PageParam { + + @Schema(description = "流程名称", example = "芋道") + private String name; + + @Schema(description = "流程定义的编号", example = "2048") + private String processDefinitionId; + + @Schema(description = "流程实例的状态", example = "1") + @InEnum(BpmProcessInstanceStatusEnum.class) + private Integer status; + + @Schema(description = "流程分类", example = "1") + private String category; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "发起用户编号", example = "1024") + private Long startUserId; // 注意,只有在【流程实例】菜单,才使用该参数 + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceRespVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceRespVO.java new file mode 100644 index 0000000..fe229e3 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceRespVO.java @@ -0,0 +1,89 @@ +package com.win.module.bpm.controller.admin.task.vo.instance; + +import com.win.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +@Schema(description = "管理后台 - 流程实例的 Response VO") +@Data +public class BpmProcessInstanceRespVO { + + @Schema(description = "流程实例的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private String id; + + @Schema(description = "流程名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + + @Schema(description = "流程分类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private String category; + @Schema(description = "流程分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "请假") + private String categoryName; + + @Schema(description = "流程实例的状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; // 参见 BpmProcessInstanceStatusEnum 枚举 + + @Schema(description = "发起时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime startTime; + + @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime endTime; + + @Schema(description = "持续时间", example = "1000") + private Long durationInMillis; + + @Schema(description = "提交的表单值", requiredMode = Schema.RequiredMode.REQUIRED) + private Map formVariables; + + @Schema(description = "业务的唯一标识-例如说,请假申请的编号", example = "1") + private String businessKey; + + /** + * 发起流程的用户 + */ + private User startUser; + + @Schema(description = "流程定义的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") + private String processDefinitionId; + /** + * 流程定义 + */ + private BpmProcessDefinitionRespVO processDefinition; + + /** + * 当前审批中的任务 + */ + private List tasks; // 仅在流程实例分页才返回 + + @Schema(description = "用户信息") + @Data + public static class User { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + private String nickname; + + @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long deptId; + @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "研发部") + private String deptName; + + } + + @Schema(description = "流程任务") + @Data + public static class Task { + + @Schema(description = "流程任务的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private String id; + + @Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskApproveReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskApproveReqVO.java new file mode 100644 index 0000000..93c39d0 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskApproveReqVO.java @@ -0,0 +1,28 @@ +package com.win.module.bpm.controller.admin.task.vo.task; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.Collection; +import java.util.Map; + +@Schema(description = "管理后台 - 通过流程任务的 Request VO") +@Data +public class BpmTaskApproveReqVO { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @Schema(description = "审批意见", requiredMode = Schema.RequiredMode.REQUIRED, example = "不错不错!") + @NotEmpty(message = "审批意见不能为空") + private String reason; + + @Schema(description = "抄送的用户编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2") + private Collection copyUserIds; + + @Schema(description = "变量实例(动态表单)", requiredMode = Schema.RequiredMode.REQUIRED) + private Map variables; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskDelegateReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskDelegateReqVO.java new file mode 100644 index 0000000..e1766c9 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskDelegateReqVO.java @@ -0,0 +1,24 @@ +package com.win.module.bpm.controller.admin.task.vo.task; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Schema(description = "管理后台 - 委派流程任务的 Request VO") +@Data +public class BpmTaskDelegateReqVO { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @Schema(description = "被委派人 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "被委派人 ID 不能为空") + private Long delegateUserId; + + @Schema(description = "委派原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "做不了决定,需要你先帮忙瞅瞅") + @NotEmpty(message = "委派原因不能为空") + private String reason; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskPageReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskPageReqVO.java new file mode 100644 index 0000000..ede732d --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskPageReqVO.java @@ -0,0 +1,22 @@ +package com.win.module.bpm.controller.admin.task.vo.task; + +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.util.date.DateUtils; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 流程任务的的分页 Request VO") // 待办、已办,都使用该分页 +@Data +public class BpmTaskPageReqVO extends PageParam { + + @Schema(description = "流程任务名", example = "芋道") + private String name; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskRejectReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskRejectReqVO.java new file mode 100644 index 0000000..74e609a --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskRejectReqVO.java @@ -0,0 +1,19 @@ +package com.win.module.bpm.controller.admin.task.vo.task; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +@Schema(description = "管理后台 - 不通过流程任务的 Request VO") +@Data +public class BpmTaskRejectReqVO { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @Schema(description = "审批意见", requiredMode = Schema.RequiredMode.REQUIRED, example = "不错不错!") + @NotEmpty(message = "审批意见不能为空") + private String reason; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java new file mode 100644 index 0000000..e63f92e --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java @@ -0,0 +1,94 @@ +package com.win.module.bpm.controller.admin.task.vo.task; + +import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +@Schema(description = "管理后台 - 流程任务 Response VO") +@Data +public class BpmTaskRespVO { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private String id; + + @Schema(description = "任务名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + + @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime endTime; + + @Schema(description = "持续时间", example = "1000") + private Long durationInMillis; + + @Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer status; // 参见 BpmTaskStatusEnum 枚举 + + @Schema(description = "审批理由", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private String reason; + + /** + * 负责人的用户信息 + */ + private BpmProcessInstanceRespVO.User ownerUser; + /** + * 审核的用户信息 + */ + private BpmProcessInstanceRespVO.User assigneeUser; + + @Schema(description = "任务定义的标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "Activity_one") + private String taskDefinitionKey; + + @Schema(description = "所属流程实例编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8888") + private String processInstanceId; + /** + * 所属流程实例 + */ + private ProcessInstance processInstance; + + @Schema(description = "父任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private String parentTaskId; + @Schema(description = "子任务列表(由加签生成)", requiredMode = Schema.RequiredMode.REQUIRED, example = "childrenTask") + private List children; + + @Schema(description = "表单编号", example = "1024") + private Long formId; + @Schema(description = "表单名字", example = "请假表单") + private String formName; + @Schema(description = "表单的配置-JSON 字符串") + private String formConf; + @Schema(description = "表单项的数组") + private List formFields; + @Schema(description = "提交的表单值", requiredMode = Schema.RequiredMode.REQUIRED) + private Map formVariables; + + @Data + @Schema(description = "流程实例") + public static class ProcessInstance { + + @Schema(description = "流程实例编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private String id; + + @Schema(description = "流程实例名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + + @Schema(description = "提交时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + + @Schema(description = "流程定义的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") + private String processDefinitionId; + + /** + * 发起人的用户信息 + */ + private BpmProcessInstanceRespVO.User startUser; + + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskReturnReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskReturnReqVO.java new file mode 100644 index 0000000..df23719 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskReturnReqVO.java @@ -0,0 +1,23 @@ +package com.win.module.bpm.controller.admin.task.vo.task; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +@Schema(description = "管理后台 - 回退流程任务的 Request VO") +@Data +public class BpmTaskReturnReqVO { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @Schema(description = "回退到的任务 Key", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotEmpty(message = "回退到的任务 Key 不能为空") + private String targetTaskDefinitionKey; + + @Schema(description = "回退意见", requiredMode = Schema.RequiredMode.REQUIRED, example = "我就是想驳回") + @NotEmpty(message = "回退意见不能为空") + private String reason; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskSignCreateReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskSignCreateReqVO.java new file mode 100644 index 0000000..b7e65ae --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskSignCreateReqVO.java @@ -0,0 +1,29 @@ +package com.win.module.bpm.controller.admin.task.vo.task; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.Set; + +@Schema(description = "管理后台 - 加签任务的创建(加签) Request VO") +@Data +public class BpmTaskSignCreateReqVO { + + @Schema(description = "需要加签的任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @Schema(description = "加签的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "888") + @NotEmpty(message = "加签用户不能为空") + private Set userIds; + + @Schema(description = "加签类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "before") + @NotEmpty(message = "加签类型不能为空") + private String type; // 参见 BpmTaskSignTypeEnum 枚举 + + @Schema(description = "加签原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "需要加签") + @NotEmpty(message = "加签原因不能为空") + private String reason; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskSignDeleteReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskSignDeleteReqVO.java new file mode 100644 index 0000000..3ddaf56 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskSignDeleteReqVO.java @@ -0,0 +1,19 @@ +package com.win.module.bpm.controller.admin.task.vo.task; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +@Schema(description = "管理后台 - 加签任务的删除(减签) Request VO") +@Data +public class BpmTaskSignDeleteReqVO { + + @Schema(description = "被减签的任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @Schema(description = "加签原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "需要减签") + @NotEmpty(message = "加签原因不能为空") + private String reason; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskTransferReqVO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskTransferReqVO.java new file mode 100644 index 0000000..1c2de35 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/admin/task/vo/task/BpmTaskTransferReqVO.java @@ -0,0 +1,24 @@ +package com.win.module.bpm.controller.admin.task.vo.task; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Schema(description = "管理后台 - 流程任务的转办 Request VO") +@Data +public class BpmTaskTransferReqVO { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @Schema(description = "新审批人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") + @NotNull(message = "新审批人的用户编号不能为空") + private Long assigneeUserId; + + @Schema(description = "转办原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "做不了决定,需要你先帮忙瞅瞅") + @NotEmpty(message = "转办原因不能为空") + private String reason; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/app/package-info.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/app/package-info.java new file mode 100644 index 0000000..421c0a1 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/app/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package com.win.module.bpm.controller.app; diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/package-info.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/package-info.java new file mode 100644 index 0000000..69fc8c6 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/controller/package-info.java @@ -0,0 +1,6 @@ +/** + * 提供 RESTful API 给前端: + * 1. admin 包:提供给管理后台 win-ui-admin 前端项目 + * 2. app 包:提供给用户 APP win-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 + */ +package com.win.module.bpm.controller; diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/definition/BpmModelConvert.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/definition/BpmModelConvert.java new file mode 100644 index 0000000..1cbf1b7 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/definition/BpmModelConvert.java @@ -0,0 +1,137 @@ +package com.win.module.bpm.convert.definition; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.common.util.date.DateUtils; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.definition.vo.model.BpmModelCreateReqVO; +import com.win.module.bpm.controller.admin.definition.vo.model.BpmModelRespVO; +import com.win.module.bpm.controller.admin.definition.vo.model.BpmModelUpdateReqVO; +import com.win.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; +import com.win.module.bpm.dal.dataobject.definition.BpmCategoryDO; +import com.win.module.bpm.dal.dataobject.definition.BpmFormDO; +import com.win.module.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; +import org.flowable.common.engine.impl.db.SuspensionState; +import org.flowable.engine.repository.Deployment; +import org.flowable.engine.repository.Model; +import org.flowable.engine.repository.ProcessDefinition; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * 流程模型 Convert + * + * @author yunlongn + */ +@Mapper +public interface BpmModelConvert { + + BpmModelConvert INSTANCE = Mappers.getMapper(BpmModelConvert.class); + + default PageResult buildModelPage(PageResult pageResult, + Map formMap, + Map categoryMap, Map deploymentMap, + Map processDefinitionMap) { + List list = CollectionUtils.convertList(pageResult.getList(), model -> { + BpmModelMetaInfoRespDTO metaInfo = buildMetaInfo(model); + BpmFormDO form = metaInfo != null ? formMap.get(metaInfo.getFormId()) : null; + BpmCategoryDO category = categoryMap.get(model.getCategory()); + Deployment deployment = model.getDeploymentId() != null ? deploymentMap.get(model.getDeploymentId()) : null; + ProcessDefinition processDefinition = model.getDeploymentId() != null ? processDefinitionMap.get(model.getDeploymentId()) : null; + return buildModel0(model, metaInfo, form, category, deployment, processDefinition); + }); + return new PageResult<>(list, pageResult.getTotal()); + } + + default BpmModelRespVO buildModel(Model model, + byte[] bpmnBytes) { + BpmModelMetaInfoRespDTO metaInfo = buildMetaInfo(model); + BpmModelRespVO modelVO = buildModel0(model, metaInfo, null, null, null, null); + if (ArrayUtil.isNotEmpty(bpmnBytes)) { + modelVO.setBpmnXml(new String(bpmnBytes)); + } + return modelVO; + } + + default BpmModelRespVO buildModel0(Model model, + BpmModelMetaInfoRespDTO metaInfo, BpmFormDO form, BpmCategoryDO category, + Deployment deployment, ProcessDefinition processDefinition) { + BpmModelRespVO modelRespVO = new BpmModelRespVO().setId(model.getId()).setName(model.getName()) + .setKey(model.getKey()).setCategory(model.getCategory()) + .setCreateTime(DateUtils.of(model.getCreateTime())); + // Form + if (metaInfo != null) { + modelRespVO.setFormType(metaInfo.getFormType()).setFormId(metaInfo.getFormId()) + .setFormCustomCreatePath(metaInfo.getFormCustomCreatePath()) + .setFormCustomViewPath(metaInfo.getFormCustomViewPath()); + modelRespVO.setIcon(metaInfo.getIcon()).setDescription(metaInfo.getDescription()); + } + if (form != null) { + modelRespVO.setFormId(form.getId()).setFormName(form.getName()); + } + // Category + if (category != null) { + modelRespVO.setCategoryName(category.getName()); + } + // ProcessDefinition + if (processDefinition != null) { + modelRespVO.setProcessDefinition(BeanUtils.toBean(processDefinition, BpmProcessDefinitionRespVO.class)); + modelRespVO.getProcessDefinition().setSuspensionState(processDefinition.isSuspended() ? + SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode()); + if (deployment != null) { + modelRespVO.getProcessDefinition().setDeploymentTime(DateUtils.of(deployment.getDeploymentTime())); + } + } + return modelRespVO; + } + + default void copyToCreateModel(Model model, BpmModelCreateReqVO bean) { + model.setName(bean.getName()); + model.setKey(bean.getKey()); + model.setMetaInfo(buildMetaInfoStr(null, + null, bean.getDescription(), + null, null, null, null)); + } + + default void copyToUpdateModel(Model model, BpmModelUpdateReqVO bean) { + model.setName(bean.getName()); + model.setCategory(bean.getCategory()); + model.setMetaInfo(buildMetaInfoStr(buildMetaInfo(model), + bean.getIcon(), bean.getDescription(), + bean.getFormType(), bean.getFormId(), bean.getFormCustomCreatePath(), bean.getFormCustomViewPath())); + } + + default String buildMetaInfoStr(BpmModelMetaInfoRespDTO metaInfo, + String icon, String description, + Integer formType, Long formId, String formCustomCreatePath, String formCustomViewPath) { + if (metaInfo == null) { + metaInfo = new BpmModelMetaInfoRespDTO(); + } + // 只有非空,才进行设置,避免更新时的覆盖 + if (StrUtil.isNotEmpty(icon)) { + metaInfo.setIcon(icon); + } + if (StrUtil.isNotEmpty(description)) { + metaInfo.setDescription(description); + } + if (Objects.nonNull(formType)) { + metaInfo.setFormType(formType); + metaInfo.setFormId(formId); + metaInfo.setFormCustomCreatePath(formCustomCreatePath); + metaInfo.setFormCustomViewPath(formCustomViewPath); + } + return JsonUtils.toJsonString(metaInfo); + } + + default BpmModelMetaInfoRespDTO buildMetaInfo(Model model) { + return JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/definition/BpmProcessDefinitionConvert.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/definition/BpmProcessDefinitionConvert.java new file mode 100644 index 0000000..f78596c --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/definition/BpmProcessDefinitionConvert.java @@ -0,0 +1,98 @@ +package com.win.module.bpm.convert.definition; + +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.map.MapUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; +import com.win.module.bpm.dal.dataobject.definition.BpmCategoryDO; +import com.win.module.bpm.dal.dataobject.definition.BpmFormDO; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; +import com.win.module.bpm.framework.flowable.core.util.BpmnModelUtils; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.bpmn.model.UserTask; +import org.flowable.common.engine.impl.db.SuspensionState; +import org.flowable.engine.repository.Deployment; +import org.flowable.engine.repository.ProcessDefinition; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.factory.Mappers; + +import java.util.List; +import java.util.Map; + +/** + * Bpm 流程定义的 Convert + * + * @author yunlong.li + */ +@Mapper +public interface BpmProcessDefinitionConvert { + + BpmProcessDefinitionConvert INSTANCE = Mappers.getMapper(BpmProcessDefinitionConvert.class); + + default PageResult buildProcessDefinitionPage(PageResult page, + Map deploymentMap, + Map processDefinitionInfoMap, + Map formMap, + Map categoryMap) { + List list = buildProcessDefinitionList(page.getList(), deploymentMap, processDefinitionInfoMap, formMap, categoryMap); + return new PageResult<>(list, page.getTotal()); + } + + default List buildProcessDefinitionList(List list, + Map deploymentMap, + Map processDefinitionInfoMap, + Map formMap, + Map categoryMap) { + return CollectionUtils.convertList(list, definition -> { + Deployment deployment = MapUtil.get(deploymentMap, definition.getDeploymentId(), Deployment.class); + BpmProcessDefinitionInfoDO processDefinitionInfo = MapUtil.get(processDefinitionInfoMap, definition.getId(), BpmProcessDefinitionInfoDO.class); + BpmFormDO form = null; + if (processDefinitionInfo != null) { + form = MapUtil.get(formMap, processDefinitionInfo.getFormId(), BpmFormDO.class); + } + BpmCategoryDO category = MapUtil.get(categoryMap, definition.getCategory(), BpmCategoryDO.class); + return buildProcessDefinition(definition, deployment, processDefinitionInfo, form, category, null, null); + }); + } + + default BpmProcessDefinitionRespVO buildProcessDefinition(ProcessDefinition definition, + Deployment deployment, + BpmProcessDefinitionInfoDO processDefinitionInfo, + BpmFormDO form, + BpmCategoryDO category, + BpmnModel bpmnModel, + List startUserSelectUserTaskList) { + BpmProcessDefinitionRespVO respVO = BeanUtils.toBean(definition, BpmProcessDefinitionRespVO.class); + respVO.setSuspensionState(definition.isSuspended() ? SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode()); + // Deployment + if (deployment != null) { + respVO.setDeploymentTime(LocalDateTimeUtil.of(deployment.getDeploymentTime())); + } + // BpmProcessDefinitionInfoDO + if (processDefinitionInfo != null) { + copyTo(processDefinitionInfo, respVO); + // Form + if (form != null) { + respVO.setFormName(form.getName()); + } + } + // Category + if (category != null) { + respVO.setCategoryName(category.getName()); + } + // BpmnModel + if (bpmnModel != null) { + respVO.setBpmnXml(BpmnModelUtils.getBpmnXml(bpmnModel)); + respVO.setStartUserSelectTasks(BeanUtils.toBean(startUserSelectUserTaskList, BpmProcessDefinitionRespVO.UserTask.class)); + } + return respVO; + } + + @Mapping(source = "from.id", target = "to.id", ignore = true) + void copyTo(BpmProcessDefinitionInfoDO from, @MappingTarget BpmProcessDefinitionRespVO to); + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/message/BpmMessageConvert.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/message/BpmMessageConvert.java new file mode 100644 index 0000000..69139ba --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/message/BpmMessageConvert.java @@ -0,0 +1,21 @@ +package com.win.module.bpm.convert.message; + +import com.win.module.system.api.sms.dto.send.SmsSendSingleToUserReqDTO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.Map; + +@Mapper +public interface BpmMessageConvert { + + BpmMessageConvert INSTANCE = Mappers.getMapper(BpmMessageConvert.class); + + @Mapping(target = "mobile", ignore = true) + @Mapping(source = "userId", target = "userId") + @Mapping(source = "templateCode", target = "templateCode") + @Mapping(source = "templateParams", target = "templateParams") + SmsSendSingleToUserReqDTO convert(Long userId, String templateCode, Map templateParams); + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/package-info.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/package-info.java new file mode 100644 index 0000000..58e52d3 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/package-info.java @@ -0,0 +1,6 @@ +/** + * 提供 POJO 类的实体转换 + * + * 目前使用 MapStruct 框架 + */ +package com.win.module.bpm.convert; diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/task/BpmActivityConvert.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/task/BpmActivityConvert.java new file mode 100644 index 0000000..2a67216 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/task/BpmActivityConvert.java @@ -0,0 +1,30 @@ +package com.win.module.bpm.convert.task; + +import com.win.framework.common.util.date.DateUtils; +import com.win.module.bpm.controller.admin.task.vo.activity.BpmActivityRespVO; +import org.flowable.engine.history.HistoricActivityInstance; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * BPM 活动 Convert + * + * @author 芋道源码 + */ +@Mapper(uses = DateUtils.class) +public interface BpmActivityConvert { + + BpmActivityConvert INSTANCE = Mappers.getMapper(BpmActivityConvert.class); + + List convertList(List list); + + @Mappings({ + @Mapping(source = "activityId", target = "key"), + @Mapping(source = "activityType", target = "type") + }) + BpmActivityRespVO convert(HistoricActivityInstance bean); +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/task/BpmProcessInstanceConvert.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/task/BpmProcessInstanceConvert.java new file mode 100644 index 0000000..0359896 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/task/BpmProcessInstanceConvert.java @@ -0,0 +1,116 @@ +package com.win.module.bpm.convert.task; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.MapUtils; +import com.win.framework.common.util.number.NumberUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; +import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO; +import com.win.module.bpm.dal.dataobject.definition.BpmCategoryDO; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; +import com.win.module.bpm.event.BpmProcessInstanceStatusEvent; +import com.win.module.bpm.framework.flowable.core.util.FlowableUtils; +import com.win.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; +import com.win.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; +import com.win.module.system.api.dept.dto.DeptRespDTO; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.repository.ProcessDefinition; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.Task; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.factory.Mappers; + +import java.util.List; +import java.util.Map; + +/** + * 流程实例 Convert + * + * @author 芋道源码 + */ +@Mapper +public interface BpmProcessInstanceConvert { + + BpmProcessInstanceConvert INSTANCE = Mappers.getMapper(BpmProcessInstanceConvert.class); + + default PageResult buildProcessInstancePage(PageResult pageResult, + Map processDefinitionMap, + Map categoryMap, + Map> taskMap, + Map userMap, + Map deptMap) { + PageResult vpPageResult = BeanUtils.toBean(pageResult, BpmProcessInstanceRespVO.class); + for (int i = 0; i < pageResult.getList().size(); i++) { + BpmProcessInstanceRespVO respVO = vpPageResult.getList().get(i); + respVO.setStatus(FlowableUtils.getProcessInstanceStatus(pageResult.getList().get(i))); + MapUtils.findAndThen(processDefinitionMap, respVO.getProcessDefinitionId(), + processDefinition -> respVO.setCategory(processDefinition.getCategory())); + MapUtils.findAndThen(categoryMap, respVO.getCategory(), category -> respVO.setCategoryName(category.getName())); + respVO.setTasks(BeanUtils.toBean(taskMap.get(respVO.getId()), BpmProcessInstanceRespVO.Task.class)); + // user + if (userMap != null) { + AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(pageResult.getList().get(i).getStartUserId())); + if (startUser != null) { + respVO.setStartUser(BeanUtils.toBean(startUser, BpmProcessInstanceRespVO.User.class)); + MapUtils.findAndThen(deptMap, startUser.getDeptId(), dept -> respVO.getStartUser().setDeptName(dept.getName())); + } + } + } + return vpPageResult; + } + + default BpmProcessInstanceRespVO buildProcessInstance(HistoricProcessInstance processInstance, + ProcessDefinition processDefinition, + BpmProcessDefinitionInfoDO processDefinitionExt, + String bpmnXml, + AdminUserRespDTO startUser, + DeptRespDTO dept) { + BpmProcessInstanceRespVO respVO = BeanUtils.toBean(processInstance, BpmProcessInstanceRespVO.class); + respVO.setStatus(FlowableUtils.getProcessInstanceStatus(processInstance)); + respVO.setFormVariables(FlowableUtils.getProcessInstanceFormVariable(processInstance)); + // definition + respVO.setProcessDefinition(BeanUtils.toBean(processDefinition, BpmProcessDefinitionRespVO.class)); + copyTo(processDefinitionExt, respVO.getProcessDefinition()); + respVO.getProcessDefinition().setBpmnXml(bpmnXml); + // user + if (startUser != null) { + respVO.setStartUser(BeanUtils.toBean(startUser, BpmProcessInstanceRespVO.User.class)); + if (dept != null) { + respVO.getStartUser().setDeptName(dept.getName()); + } + } + return respVO; + } + + @Mapping(source = "from.id", target = "to.id", ignore = true) + void copyTo(BpmProcessDefinitionInfoDO from, @MappingTarget BpmProcessDefinitionRespVO to); + + default BpmProcessInstanceStatusEvent buildProcessInstanceStatusEvent(Object source, HistoricProcessInstance instance, Integer status) { + return new BpmProcessInstanceStatusEvent(source).setId(instance.getId()).setStatus(status) + .setProcessDefinitionKey(instance.getProcessDefinitionKey()).setBusinessKey(instance.getBusinessKey()); + } + + default BpmProcessInstanceStatusEvent buildProcessInstanceStatusEvent(Object source, ProcessInstance instance, Integer status) {; + return new BpmProcessInstanceStatusEvent(source).setId(instance.getId()).setStatus(status) + .setProcessDefinitionKey(instance.getProcessDefinitionKey()).setBusinessKey(instance.getBusinessKey()); + } + + default BpmMessageSendWhenProcessInstanceApproveReqDTO buildProcessInstanceApproveMessage(ProcessInstance instance) { + return new BpmMessageSendWhenProcessInstanceApproveReqDTO() + .setStartUserId(NumberUtils.parseLong(instance.getStartUserId())) + .setProcessInstanceId(instance.getId()) + .setProcessInstanceName(instance.getName()); + } + + default BpmMessageSendWhenProcessInstanceRejectReqDTO buildProcessInstanceRejectMessage(ProcessInstance instance, String reason) { + return new BpmMessageSendWhenProcessInstanceRejectReqDTO() + .setProcessInstanceName(instance.getName()) + .setProcessInstanceId(instance.getId()) + .setReason(reason) + .setStartUserId(NumberUtils.parseLong(instance.getStartUserId())); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/task/BpmTaskConvert.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/task/BpmTaskConvert.java new file mode 100644 index 0000000..299c5fb --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/task/BpmTaskConvert.java @@ -0,0 +1,176 @@ +package com.win.module.bpm.convert.task; + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.common.util.number.NumberUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO; +import com.win.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; +import com.win.module.bpm.dal.dataobject.definition.BpmFormDO; +import com.win.module.bpm.framework.flowable.core.util.FlowableUtils; +import com.win.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; +import com.win.module.system.api.dept.dto.DeptRespDTO; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.Task; +import org.flowable.task.api.history.HistoricTaskInstance; +import org.flowable.task.service.impl.persistence.entity.TaskEntityImpl; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +import static com.win.framework.common.util.collection.CollectionUtils.*; +import static com.win.framework.common.util.collection.MapUtils.findAndThen; + +/** + * Bpm 任务 Convert + * + * @author 芋道源码 + */ +@Mapper +public interface BpmTaskConvert { + + BpmTaskConvert INSTANCE = Mappers.getMapper(BpmTaskConvert.class); + + default PageResult buildTodoTaskPage(PageResult pageResult, + Map processInstanceMap, + Map userMap) { + return BeanUtils.toBean(pageResult, BpmTaskRespVO.class, taskVO -> { + ProcessInstance processInstance = processInstanceMap.get(taskVO.getProcessInstanceId()); + if (processInstance == null) { + return; + } + taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class)); + AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); + taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, BpmProcessInstanceRespVO.User.class)); + }); + } + + default PageResult buildTaskPage(PageResult pageResult, + Map processInstanceMap, + Map userMap, + Map deptMap) { + List taskVOList = CollectionUtils.convertList(pageResult.getList(), task -> { + BpmTaskRespVO taskVO = BeanUtils.toBean(task, BpmTaskRespVO.class); + taskVO.setStatus(FlowableUtils.getTaskStatus(task)).setReason(FlowableUtils.getTaskReason(task)); + // 用户信息 + AdminUserRespDTO assignUser = userMap.get(NumberUtils.parseLong(task.getAssignee())); + if (assignUser != null) { + taskVO.setAssigneeUser(BeanUtils.toBean(assignUser, BpmProcessInstanceRespVO.User.class)); + findAndThen(deptMap, assignUser.getDeptId(), dept -> taskVO.getAssigneeUser().setDeptName(dept.getName())); + } + // 流程实例 + HistoricProcessInstance processInstance = processInstanceMap.get(taskVO.getProcessInstanceId()); + if (processInstance != null) { + AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); + taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class)); + taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, BpmProcessInstanceRespVO.User.class)); + } + return taskVO; + }); + return new PageResult<>(taskVOList, pageResult.getTotal()); + } + + default List buildTaskListByProcessInstanceId(List taskList, + HistoricProcessInstance processInstance, + Map formMap, + Map userMap, + Map deptMap) { + List taskVOList = CollectionUtils.convertList(taskList, task -> { + BpmTaskRespVO taskVO = BeanUtils.toBean(task, BpmTaskRespVO.class); + taskVO.setStatus(FlowableUtils.getTaskStatus(task)).setReason(FlowableUtils.getTaskReason(task)); + // 流程实例 + AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); + taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class)); + taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, BpmProcessInstanceRespVO.User.class)); + // 表单信息 + BpmFormDO form = MapUtil.get(formMap, NumberUtils.parseLong(task.getFormKey()), BpmFormDO.class); + if (form != null) { + taskVO.setFormId(form.getId()).setFormName(form.getName()).setFormConf(form.getConf()) + .setFormFields(form.getFields()).setFormVariables(FlowableUtils.getTaskFormVariable(task)); + } + // 用户信息 + AdminUserRespDTO assignUser = userMap.get(NumberUtils.parseLong(task.getAssignee())); + if (assignUser != null) { + taskVO.setAssigneeUser(BeanUtils.toBean(assignUser, BpmProcessInstanceRespVO.User.class)); + findAndThen(deptMap, assignUser.getDeptId(), dept -> taskVO.getAssigneeUser().setDeptName(dept.getName())); + } + AdminUserRespDTO ownerUser = userMap.get(NumberUtils.parseLong(task.getOwner())); + if (ownerUser != null) { + taskVO.setOwnerUser(BeanUtils.toBean(ownerUser, BpmProcessInstanceRespVO.User.class)); + findAndThen(deptMap, ownerUser.getDeptId(), dept -> taskVO.getOwnerUser().setDeptName(dept.getName())); + } + return taskVO; + }); + + // 拼接父子关系 + Map> childrenTaskMap = convertMultiMap( + filterList(taskVOList, r -> StrUtil.isNotEmpty(r.getParentTaskId())), + BpmTaskRespVO::getParentTaskId); + for (BpmTaskRespVO taskVO : taskVOList) { + taskVO.setChildren(childrenTaskMap.get(taskVO.getId())); + } + return filterList(taskVOList, r -> StrUtil.isEmpty(r.getParentTaskId())); + } + + default List buildTaskListByParentTaskId(List taskList, + Map userMap, + Map deptMap) { + return convertList(taskList, task -> BeanUtils.toBean(task, BpmTaskRespVO.class, taskVO -> { + AdminUserRespDTO assignUser = userMap.get(NumberUtils.parseLong(task.getAssignee())); + if (assignUser != null) { + taskVO.setAssigneeUser(BeanUtils.toBean(assignUser, BpmProcessInstanceRespVO.User.class)); + DeptRespDTO dept = deptMap.get(assignUser.getDeptId()); + if (dept != null) { + taskVO.getAssigneeUser().setDeptName(dept.getName()); + } + } + AdminUserRespDTO ownerUser = userMap.get(NumberUtils.parseLong(task.getOwner())); + if (ownerUser != null) { + taskVO.setOwnerUser(BeanUtils.toBean(ownerUser, BpmProcessInstanceRespVO.User.class)); + findAndThen(deptMap, ownerUser.getDeptId(), dept -> taskVO.getOwnerUser().setDeptName(dept.getName())); + } + })); + } + + default BpmMessageSendWhenTaskCreatedReqDTO convert(ProcessInstance processInstance, AdminUserRespDTO startUser, + Task task) { + BpmMessageSendWhenTaskCreatedReqDTO reqDTO = new BpmMessageSendWhenTaskCreatedReqDTO(); + reqDTO.setProcessInstanceId(processInstance.getProcessInstanceId()) + .setProcessInstanceName(processInstance.getName()).setStartUserId(startUser.getId()) + .setStartUserNickname(startUser.getNickname()).setTaskId(task.getId()).setTaskName(task.getName()) + .setAssigneeUserId(NumberUtils.parseLong(task.getAssignee())); + return reqDTO; + } + + /** + * 将父任务的属性,拷贝到子任务(加签任务) + * + * 为什么不使用 mapstruct 映射?因为 TaskEntityImpl 还有很多其他属性,这里我们只设置我们需要的。 + * 使用 mapstruct 会将里面嵌套的各个属性值都设置进去,会出现意想不到的问题。 + * + * @param parentTask 父任务 + * @param childTask 加签任务 + */ + default void copyTo(TaskEntityImpl parentTask, TaskEntityImpl childTask) { + childTask.setName(parentTask.getName()); + childTask.setDescription(parentTask.getDescription()); + childTask.setCategory(parentTask.getCategory()); + childTask.setParentTaskId(parentTask.getId()); + childTask.setProcessDefinitionId(parentTask.getProcessDefinitionId()); + childTask.setProcessInstanceId(parentTask.getProcessInstanceId()); +// childTask.setExecutionId(parentTask.getExecutionId()); // TODO 芋艿:新加的,不太确定;尴尬,不加时,子任务不通过会失败(报错);加了,子任务审批通过会失败(报错) + childTask.setTaskDefinitionKey(parentTask.getTaskDefinitionKey()); + childTask.setTaskDefinitionId(parentTask.getTaskDefinitionId()); + childTask.setPriority(parentTask.getPriority()); + childTask.setCreateTime(new Date()); + childTask.setTenantId(parentTask.getTenantId()); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md new file mode 100644 index 0000000..2f05ebd --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md @@ -0,0 +1 @@ + diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmCategoryDO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmCategoryDO.java new file mode 100644 index 0000000..47c7864 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmCategoryDO.java @@ -0,0 +1,53 @@ +package com.win.module.bpm.dal.dataobject.definition; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * BPM 流程分类 DO + * + * @author 芋道源码 + */ +@TableName("bpm_category") +@KeySequence("bpm_category_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmCategoryDO extends BaseDO { + + /** + * 分类编号 + */ + @TableId + private Long id; + /** + * 分类名 + */ + private String name; + /** + * 分类标志 + */ + private String code; + /** + * 分类描述 + */ + private String description; + /** + * 分类状态 + * + * 枚举 {@link com.win.framework.common.enums.CommonStatusEnum} + */ + private Integer status; + /** + * 分类排序 + */ + private Integer sort; + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmFormDO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmFormDO.java new file mode 100644 index 0000000..ea69bf4 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmFormDO.java @@ -0,0 +1,58 @@ +package com.win.module.bpm.dal.dataobject.definition; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * BPM 工作流的表单定义 + * 用于工作流的申请表单,需要动态配置的场景 + * + * @author 芋道源码 + */ +@TableName(value = "bpm_form", autoResultMap = true) +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmFormDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 表单名 + */ + private String name; + /** + * 状态 + */ + private Integer status; + /** + * 表单的配置 + */ + private String conf; + /** + * 表单项的数组 + * + * 目前直接将 https://github.com/JakHuang/form-generator 生成的 JSON 串,直接保存 + * 定义:https://github.com/JakHuang/form-generator/issues/46 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List fields; + /** + * 备注 + */ + private String remark; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO.java new file mode 100644 index 0000000..0a55088 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO.java @@ -0,0 +1,95 @@ +package com.win.module.bpm.dal.dataobject.definition; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.bpm.enums.definition.BpmModelFormTypeEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * BPM 流程定义的拓信息 + * 主要解决 Flowable {@link org.flowable.engine.repository.ProcessDefinition} 不支持拓展字段,所以新建该表 + * + * @author 芋道源码 + */ +@TableName(value = "bpm_process_definition_info", autoResultMap = true) +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmProcessDefinitionInfoDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 流程定义的编号 + * + * 关联 ProcessDefinition 的 id 属性 + */ + private String processDefinitionId; + /** + * 流程模型的编号 + * + * 关联 Model 的 id 属性 + */ + private String modelId; + + /** + * 图标 + */ + private String icon; + /** + * 描述 + */ + private String description; + + /** + * 表单类型 + * + * 关联 {@link BpmModelFormTypeEnum} + */ + private Integer formType; + /** + * 动态表单编号 + * 在表单类型为 {@link BpmModelFormTypeEnum#NORMAL} 时 + * + * 关联 {@link BpmFormDO#getId()} + */ + private Long formId; + /** + * 表单的配置 + * 在表单类型为 {@link BpmModelFormTypeEnum#NORMAL} 时 + * + * 冗余 {@link BpmFormDO#getConf()} + */ + private String formConf; + /** + * 表单项的数组 + * 在表单类型为 {@link BpmModelFormTypeEnum#NORMAL} 时 + * + * 冗余 {@link BpmFormDO#getFields()} ()} + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List formFields; + /** + * 自定义表单的提交路径,使用 Vue 的路由地址 + * 在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时 + */ + private String formCustomCreatePath; + /** + * 自定义表单的查看路径,使用 Vue 的路由地址 + * 在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时 + */ + private String formCustomViewPath; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmProcessExpressionDO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmProcessExpressionDO.java new file mode 100644 index 0000000..6dfdb40 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmProcessExpressionDO.java @@ -0,0 +1,44 @@ +package com.win.module.bpm.dal.dataobject.definition; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * BPM 流程表达式 DO + * + * @author 芋道源码 + */ +@TableName("bpm_process_expression") +@KeySequence("bpm_process_expression_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmProcessExpressionDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 表达式名字 + */ + private String name; + /** + * 表达式状态 + * + * 枚举 {@link TODO common_status 对应的类} + */ + private Integer status; + /** + * 表达式 + */ + private String expression; + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmProcessListenerDO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmProcessListenerDO.java new file mode 100644 index 0000000..5f680ee --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmProcessListenerDO.java @@ -0,0 +1,70 @@ +package com.win.module.bpm.dal.dataobject.definition; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * BPM 流程监听器 DO + * + * 目的:本质上它是流程监听器的模版,用于 BPMN 在设计时,直接选择这些模版 + * + * @author 芋道源码 + */ +@TableName(value = "bpm_process_listener") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmProcessListenerDO extends BaseDO { + + /** + * 主键 ID,自增 + */ + @TableId + private Long id; + /** + * 监听器名字 + */ + private String name; + /** + * 状态 + * + * 枚举 {@link com.win.framework.common.enums.CommonStatusEnum} + */ + private Integer status; + /** + * 监听类型 + * + * 枚举 {@link com.win.module.bpm.enums.definition.BpmProcessListenerType} + * + * 1. execution:ExecutionListener 执行监听器 + * 2. task:TaskListener 任务监听器 + */ + private String type; + /** + * 监听事件 + * + * execution 时:start、end + * task 时:create 创建、assignment 指派、complete 完成、delete 删除、update 更新、timeout 超时 + */ + private String event; + + /** + * 值类型 + * + * 1. class:Java 类,ExecutionListener 需要 {@link org.flowable.engine.delegate.JavaDelegate},TaskListener 需要 {@link org.flowable.engine.delegate.TaskListener} + * 2. delegateExpression:委托表达式,在 class 的基础上,需要注册到 Spring 容器里,后续表达式通过 Spring Bean 名称即可 + * 3. expression:表达式,一个普通类的普通方法,将这个普通类注册到 Spring 容器中,然后表达式中还可以执行这个类中的方法 + */ + private String valueType; + /** + * 值 + */ + private String value; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmUserGroupDO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmUserGroupDO.java new file mode 100644 index 0000000..7be26f9 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/definition/BpmUserGroupDO.java @@ -0,0 +1,53 @@ +package com.win.module.bpm.dal.dataobject.definition; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.framework.mybatis.core.type.JsonLongSetTypeHandler; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Set; + +/** + * BPM 用户组 + * + * @author 芋道源码 + */ +@TableName(value = "bpm_user_group", autoResultMap = true) +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmUserGroupDO extends BaseDO { + + /** + * 编号,自增 + */ + @TableId + private Long id; + /** + * 组名 + */ + private String name; + /** + * 描述 + */ + private String description; + /** + * 状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 成员用户编号数组 + */ + @TableField(typeHandler = JsonLongSetTypeHandler.class) + private Set userIds; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java new file mode 100644 index 0000000..3d3cbb1 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java @@ -0,0 +1,75 @@ +package com.win.module.bpm.dal.dataobject.oa; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.bpm.enums.task.BpmTaskStatusEnum; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * OA 请假申请 DO + * + * {@link #day} 请假天数,目前先简单做。一般是分成请假上午和下午,可以是 1 整天,可以是 0.5 半天 + * + * @author jason + * @author 芋道源码 + */ +@TableName("bpm_oa_leave") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmOALeaveDO extends BaseDO { + + /** + * 请假表单主键 + */ + @TableId + private Long id; + /** + * 申请人的用户编号 + * + * 关联 AdminUserDO 的 id 属性 + */ + private Long userId; + /** + * 请假类型 + */ + private String type; + /** + * 原因 + */ + private String reason; + /** + * 开始时间 + */ + private LocalDateTime startTime; + /** + * 结束时间 + */ + private LocalDateTime endTime; + /** + * 请假天数 + */ + private Long day; + /** + * 审批结果 + * + * 枚举 {@link BpmTaskStatusEnum} + * 考虑到简单,所以直接复用了 BpmProcessInstanceStatusEnum 枚举,也可以自己定义一个枚举哈 + */ + private Integer status; + + /** + * 对应的流程编号 + * + * 关联 ProcessInstance 的 id 属性 + */ + private String processInstanceId; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/task/BpmProcessInstanceCopyDO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/task/BpmProcessInstanceCopyDO.java new file mode 100644 index 0000000..1ad21c9 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/dataobject/task/BpmProcessInstanceCopyDO.java @@ -0,0 +1,75 @@ +package com.win.module.bpm.dal.dataobject.task; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 流程抄送 DO + * + * @author kyle + * @since 2024-01-22 + */ +@TableName(value = "bpm_process_instance_copy", autoResultMap = true) +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmProcessInstanceCopyDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + + /** + * 发起人 Id + * + * 冗余 ProcessInstance 的 startUserId 字段 + */ + private Long startUserId; + /** + * 流程名 + * + * 冗余 ProcessInstance 的 name 字段 + */ + private String processInstanceName; + /** + * 流程实例的编号 + * + * 关联 ProcessInstance 的 id 属性 + */ + private String processInstanceId; + /** + * 流程分类 + * + * 冗余 ProcessInstance 的 category 字段 + */ + private String category; + + /** + * 任务主键 + * + * 关联 Task 的 id 属性 + */ + private String taskId; + /** + * 任务名称 + * + * 冗余 Task 的 name 属性 + */ + private String taskName; + + /** + * 用户编号(被抄送的用户编号) + * + * 关联 system_users 的 id 属性 + */ + private Long userId; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/category/BpmCategoryMapper.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/category/BpmCategoryMapper.java new file mode 100644 index 0000000..35131ee --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/category/BpmCategoryMapper.java @@ -0,0 +1,46 @@ +package com.win.module.bpm.dal.mysql.category; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.bpm.controller.admin.definition.vo.category.BpmCategoryPageReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmCategoryDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +/** + * BPM 流程分类 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface BpmCategoryMapper extends BaseMapperX { + + default PageResult selectPage(BpmCategoryPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(BpmCategoryDO::getName, reqVO.getName()) + .likeIfPresent(BpmCategoryDO::getCode, reqVO.getCode()) + .eqIfPresent(BpmCategoryDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(BpmCategoryDO::getCreateTime, reqVO.getCreateTime()) + .orderByAsc(BpmCategoryDO::getSort)); + } + + default BpmCategoryDO selectByName(String name) { + return selectOne(BpmCategoryDO::getName, name); + } + + default BpmCategoryDO selectByCode(String code) { + return selectOne(BpmCategoryDO::getCode, code); + } + + default List selectListByCode(Collection codes) { + return selectList(BpmCategoryDO::getCode, codes); + } + + default List selectListByStatus(Integer status) { + return selectList(BpmCategoryDO::getStatus, status); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmFormMapper.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmFormMapper.java new file mode 100644 index 0000000..5db8a6c --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmFormMapper.java @@ -0,0 +1,25 @@ +package com.win.module.bpm.dal.mysql.definition; + + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.QueryWrapperX; +import com.win.module.bpm.controller.admin.definition.vo.form.BpmFormPageReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmFormDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 动态表单 Mapper + * + * @author 风里雾里 + */ +@Mapper +public interface BpmFormMapper extends BaseMapperX { + + default PageResult selectPage(BpmFormPageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() + .likeIfPresent("name", reqVO.getName()) + .orderByDesc("id")); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmProcessDefinitionInfoMapper.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmProcessDefinitionInfoMapper.java new file mode 100644 index 0000000..94816c4 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmProcessDefinitionInfoMapper.java @@ -0,0 +1,21 @@ +package com.win.module.bpm.dal.mysql.definition; + +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface BpmProcessDefinitionInfoMapper extends BaseMapperX { + + default List selectListByProcessDefinitionIds(Collection processDefinitionIds) { + return selectList(BpmProcessDefinitionInfoDO::getProcessDefinitionId, processDefinitionIds); + } + + default BpmProcessDefinitionInfoDO selectByProcessDefinitionId(String processDefinitionId) { + return selectOne(BpmProcessDefinitionInfoDO::getProcessDefinitionId, processDefinitionId); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmProcessExpressionMapper.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmProcessExpressionMapper.java new file mode 100644 index 0000000..c890cc6 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmProcessExpressionMapper.java @@ -0,0 +1,26 @@ +package com.win.module.bpm.dal.mysql.definition; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.bpm.controller.admin.definition.vo.expression.BpmProcessExpressionPageReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessExpressionDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * BPM 流程表达式 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface BpmProcessExpressionMapper extends BaseMapperX { + + default PageResult selectPage(BpmProcessExpressionPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(BpmProcessExpressionDO::getName, reqVO.getName()) + .eqIfPresent(BpmProcessExpressionDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(BpmProcessExpressionDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(BpmProcessExpressionDO::getId)); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmProcessListenerMapper.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmProcessListenerMapper.java new file mode 100644 index 0000000..48d72c2 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmProcessListenerMapper.java @@ -0,0 +1,27 @@ +package com.win.module.bpm.dal.mysql.definition; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.bpm.controller.admin.definition.vo.listener.BpmProcessListenerPageReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessListenerDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * BPM 流程监听器 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface BpmProcessListenerMapper extends BaseMapperX { + + default PageResult selectPage(BpmProcessListenerPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(BpmProcessListenerDO::getName, reqVO.getName()) + .eqIfPresent(BpmProcessListenerDO::getType, reqVO.getType()) + .eqIfPresent(BpmProcessListenerDO::getEvent, reqVO.getEvent()) + .eqIfPresent(BpmProcessListenerDO::getStatus, reqVO.getStatus()) + .orderByDesc(BpmProcessListenerDO::getId)); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmUserGroupMapper.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmUserGroupMapper.java new file mode 100644 index 0000000..a15cab7 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/definition/BpmUserGroupMapper.java @@ -0,0 +1,32 @@ +package com.win.module.bpm.dal.mysql.definition; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.bpm.controller.admin.definition.vo.group.BpmUserGroupPageReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmUserGroupDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 用户组 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface BpmUserGroupMapper extends BaseMapperX { + + default PageResult selectPage(BpmUserGroupPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(BpmUserGroupDO::getName, reqVO.getName()) + .eqIfPresent(BpmUserGroupDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(BpmUserGroupDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(BpmUserGroupDO::getId)); + } + + default List selectListByStatus(Integer status) { + return selectList(BpmUserGroupDO::getStatus, status); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/oa/BpmOALeaveMapper.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/oa/BpmOALeaveMapper.java new file mode 100644 index 0000000..64e61a3 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/oa/BpmOALeaveMapper.java @@ -0,0 +1,29 @@ +package com.win.module.bpm.dal.mysql.oa; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO; +import com.win.module.bpm.dal.dataobject.oa.BpmOALeaveDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 请假申请 Mapper + * + * @author jason + * @author 芋道源码 + */ +@Mapper +public interface BpmOALeaveMapper extends BaseMapperX { + + default PageResult selectPage(Long userId, BpmOALeavePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(BpmOALeaveDO::getUserId, userId) + .eqIfPresent(BpmOALeaveDO::getStatus, reqVO.getStatus()) + .eqIfPresent(BpmOALeaveDO::getType, reqVO.getType()) + .likeIfPresent(BpmOALeaveDO::getReason, reqVO.getReason()) + .betweenIfPresent(BpmOALeaveDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(BpmOALeaveDO::getId)); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/task/BpmProcessInstanceCopyMapper.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/task/BpmProcessInstanceCopyMapper.java new file mode 100644 index 0000000..fa4ff45 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/dal/mysql/task/BpmProcessInstanceCopyMapper.java @@ -0,0 +1,21 @@ +package com.win.module.bpm.dal.mysql.task; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyPageReqVO; +import com.win.module.bpm.dal.dataobject.task.BpmProcessInstanceCopyDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface BpmProcessInstanceCopyMapper extends BaseMapperX { + + default PageResult selectPage(Long loginUserId, BpmProcessInstanceCopyPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(BpmProcessInstanceCopyDO::getUserId, loginUserId) + .likeIfPresent(BpmProcessInstanceCopyDO::getProcessInstanceName, reqVO.getProcessInstanceName()) + .betweenIfPresent(BpmProcessInstanceCopyDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(BpmProcessInstanceCopyDO::getId)); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/config/BpmFlowableConfiguration.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/config/BpmFlowableConfiguration.java new file mode 100644 index 0000000..25bdd15 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/config/BpmFlowableConfiguration.java @@ -0,0 +1,91 @@ +package com.win.module.bpm.framework.flowable.config; + +import cn.hutool.core.collection.ListUtil; +import com.win.module.bpm.framework.flowable.core.behavior.BpmActivityBehaviorFactory; +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateInvoker; +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateStrategy; +import com.win.module.bpm.framework.flowable.core.event.BpmProcessInstanceEventPublisher; +import com.win.module.system.api.user.AdminUserApi; +import org.flowable.common.engine.api.delegate.event.FlowableEventListener; +import org.flowable.spring.SpringProcessEngineConfiguration; +import org.flowable.spring.boot.EngineConfigurationConfigurer; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.task.AsyncListenableTaskExecutor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.List; + +/** + * BPM 模块的 Flowable 配置类 + * + * @author jason + */ +@Configuration(proxyBeanMethods = false) +public class BpmFlowableConfiguration { + + /** + * 参考 {@link org.flowable.spring.boot.FlowableJobConfiguration} 类,创建对应的 AsyncListenableTaskExecutor Bean + * + * 如果不创建,会导致项目启动时,Flowable 报错的问题 + */ + @Bean(name = "applicationTaskExecutor") + @ConditionalOnMissingBean(name = "applicationTaskExecutor") + public AsyncListenableTaskExecutor taskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(8); + executor.setMaxPoolSize(8); + executor.setQueueCapacity(100); + executor.setThreadNamePrefix("flowable-task-Executor-"); + executor.setAwaitTerminationSeconds(30); + executor.setWaitForTasksToCompleteOnShutdown(true); + executor.setAllowCoreThreadTimeOut(true); + executor.initialize(); + return executor; + } + + /** + * BPM 模块的 ProcessEngineConfigurationConfigurer 实现类: + * + * 1. 设置各种监听器 + * 2. 设置自定义的 ActivityBehaviorFactory 实现 + */ + @Bean + public EngineConfigurationConfigurer bpmProcessEngineConfigurationConfigurer( + ObjectProvider listeners, + BpmActivityBehaviorFactory bpmActivityBehaviorFactory) { + return configuration -> { + // 注册监听器,例如说 BpmActivityEventListener + configuration.setEventListeners(ListUtil.toList(listeners.iterator())); + // 设置 ActivityBehaviorFactory 实现类,用于流程任务的审核人的自定义 + configuration.setActivityBehaviorFactory(bpmActivityBehaviorFactory); + }; + } + + // =========== 审批人相关的 Bean ========== + + @Bean + public BpmActivityBehaviorFactory bpmActivityBehaviorFactory(BpmTaskCandidateInvoker bpmTaskCandidateInvoker) { + BpmActivityBehaviorFactory bpmActivityBehaviorFactory = new BpmActivityBehaviorFactory(); + bpmActivityBehaviorFactory.setTaskCandidateInvoker(bpmTaskCandidateInvoker); + return bpmActivityBehaviorFactory; + } + + @Bean + @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") // adminUserApi 可以注入成功 + public BpmTaskCandidateInvoker bpmTaskCandidateInvoker(List strategyList, + AdminUserApi adminUserApi) { + return new BpmTaskCandidateInvoker(strategyList, adminUserApi); + } + + // =========== 自己拓展的 Bean ========== + + @Bean + public BpmProcessInstanceEventPublisher processInstanceEventPublisher(ApplicationEventPublisher publisher) { + return new BpmProcessInstanceEventPublisher(publisher); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmActivityBehaviorFactory.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmActivityBehaviorFactory.java new file mode 100644 index 0000000..4ab1ce0 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmActivityBehaviorFactory.java @@ -0,0 +1,44 @@ +package com.win.module.bpm.framework.flowable.core.behavior; + +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateInvoker; +import lombok.Setter; +import org.flowable.bpmn.model.Activity; +import org.flowable.bpmn.model.UserTask; +import org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior; +import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior; +import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; +import org.flowable.engine.impl.bpmn.behavior.UserTaskActivityBehavior; +import org.flowable.engine.impl.bpmn.parser.factory.DefaultActivityBehaviorFactory; + +/** + * 自定义的 ActivityBehaviorFactory 实现类,目的如下: + * 1. 自定义 {@link #createUserTaskActivityBehavior(UserTask)}:实现自定义的流程任务的 assignee 负责人的分配 + * + * @author 芋道源码 + */ +@Setter +public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory { + + private BpmTaskCandidateInvoker taskCandidateInvoker; + + @Override + public UserTaskActivityBehavior createUserTaskActivityBehavior(UserTask userTask) { + return new BpmUserTaskActivityBehavior(userTask) + .setTaskCandidateInvoker(taskCandidateInvoker); + } + + @Override + public ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(Activity activity, + AbstractBpmnActivityBehavior behavior) { + return new BpmParallelMultiInstanceBehavior(activity, behavior) + .setTaskCandidateInvoker(taskCandidateInvoker); + } + + @Override + public SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(Activity activity, + AbstractBpmnActivityBehavior behavior) { + return new BpmSequentialMultiInstanceBehavior(activity, behavior) + .setTaskCandidateInvoker(taskCandidateInvoker); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmParallelMultiInstanceBehavior.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmParallelMultiInstanceBehavior.java new file mode 100644 index 0000000..a76303f --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmParallelMultiInstanceBehavior.java @@ -0,0 +1,56 @@ +package com.win.module.bpm.framework.flowable.core.behavior; + +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateInvoker; +import com.win.module.bpm.framework.flowable.core.util.FlowableUtils; +import lombok.Setter; +import org.flowable.bpmn.model.Activity; +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior; +import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior; + +import java.util.Set; + +/** + * 自定义的【并行】的【多个】流程任务的 assignee 负责人的分配 + * 第一步,基于分配规则,计算出分配任务的【多个】候选人们。 + * 第二步,将【多个】任务候选人们,设置到 DelegateExecution 的 collectionVariable 变量中,以便 BpmUserTaskActivityBehavior 使用它 + * + * @author kemengkai + * @since 2022-04-21 16:57 + */ +@Setter +public class BpmParallelMultiInstanceBehavior extends ParallelMultiInstanceBehavior { + + private BpmTaskCandidateInvoker taskCandidateInvoker; + + public BpmParallelMultiInstanceBehavior(Activity activity, + AbstractBpmnActivityBehavior innerActivityBehavior) { + super(activity, innerActivityBehavior); + } + + /** + * 重写该方法,主要实现两个功能: + * 1. 忽略原有的 collectionVariable、collectionElementVariable 表达式,而是采用自己定义的 + * 2. 获得任务的处理人,并设置到 collectionVariable 中,用于 BpmUserTaskActivityBehavior 从中可以获取任务的处理人 + * + * 注意,多个任务实例,每个任务实例对应一个处理人,所以返回的数量就是任务处理人的数量 + * + * @param execution 执行任务 + * @return 数量 + */ + @Override + protected int resolveNrOfInstances(DelegateExecution execution) { + // 第一步,设置 collectionVariable 和 CollectionVariable + // 从 execution.getVariable() 读取所有任务处理人的 key + super.collectionExpression = null; // collectionExpression 和 collectionVariable 是互斥的 + super.collectionVariable = FlowableUtils.formatExecutionCollectionVariable(execution.getCurrentActivityId()); + // 从 execution.getVariable() 读取当前所有任务处理的人的 key + super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId()); + + // 第二步,获取任务的所有处理人 + Set assigneeUserIds = taskCandidateInvoker.calculateUsers(execution); + execution.setVariable(super.collectionVariable, assigneeUserIds); + return assigneeUserIds.size(); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.java new file mode 100644 index 0000000..907d1c9 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.java @@ -0,0 +1,50 @@ +package com.win.module.bpm.framework.flowable.core.behavior; + +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateInvoker; +import com.win.module.bpm.framework.flowable.core.util.FlowableUtils; +import lombok.Setter; +import org.flowable.bpmn.model.Activity; +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior; +import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; + +import java.util.LinkedHashSet; +import java.util.Set; + +/** + * 自定义的【串行】的【多个】流程任务的 assignee 负责人的分配 + * + * 本质上,实现和 {@link BpmParallelMultiInstanceBehavior} 一样,只是继承的类不一样 + * + * @author 芋道源码 + */ +@Setter +public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceBehavior { + + private BpmTaskCandidateInvoker taskCandidateInvoker; + + public BpmSequentialMultiInstanceBehavior(Activity activity, AbstractBpmnActivityBehavior innerActivityBehavior) { + super(activity, innerActivityBehavior); + } + + /** + * 逻辑和 {@link BpmParallelMultiInstanceBehavior#resolveNrOfInstances(DelegateExecution)} 类似 + * + * 差异的点:是在【第二步】的时候,需要返回 LinkedHashSet 集合!因为它需要有序! + */ + @Override + protected int resolveNrOfInstances(DelegateExecution execution) { + // 第一步,设置 collectionVariable 和 CollectionVariable + // 从 execution.getVariable() 读取所有任务处理人的 key + super.collectionExpression = null; // collectionExpression 和 collectionVariable 是互斥的 + super.collectionVariable = FlowableUtils.formatExecutionCollectionVariable(execution.getCurrentActivityId()); + // 从 execution.getVariable() 读取当前所有任务处理的人的 key + super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId()); + + // 第二步,获取任务的所有处理人 + Set assigneeUserIds = new LinkedHashSet<>(taskCandidateInvoker.calculateUsers(execution)); // 保证有序!!! + execution.setVariable(super.collectionVariable, assigneeUserIds); + return assigneeUserIds.size(); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmUserTaskActivityBehavior.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmUserTaskActivityBehavior.java new file mode 100644 index 0000000..94a32a6 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/behavior/BpmUserTaskActivityBehavior.java @@ -0,0 +1,67 @@ +package com.win.module.bpm.framework.flowable.core.behavior; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.RandomUtil; +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateInvoker; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.model.UserTask; +import org.flowable.common.engine.impl.el.ExpressionManager; +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.impl.bpmn.behavior.UserTaskActivityBehavior; +import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; +import org.flowable.engine.impl.util.TaskHelper; +import org.flowable.task.service.TaskService; +import org.flowable.task.service.impl.persistence.entity.TaskEntity; + +import java.util.List; +import java.util.Set; + +/** + * 自定义的【单个】流程任务的 assignee 负责人的分配 + * 第一步,基于分配规则,计算出分配任务的【单个】候选人。如果找不到,则直接报业务异常,不继续执行后续的流程; + * 第二步,随机选择一个候选人,则选择作为 assignee 负责人。 + * + * @author 芋道源码 + */ +@Slf4j +public class BpmUserTaskActivityBehavior extends UserTaskActivityBehavior { + + @Setter + private BpmTaskCandidateInvoker taskCandidateInvoker; + + public BpmUserTaskActivityBehavior(UserTask userTask) { + super(userTask); + } + + @Override + protected void handleAssignments(TaskService taskService, String assignee, String owner, + List candidateUsers, List candidateGroups, TaskEntity task, ExpressionManager expressionManager, + DelegateExecution execution, ProcessEngineConfigurationImpl processEngineConfiguration) { + // 第一步,获得任务的候选用户 + Long assigneeUserId = calculateTaskCandidateUsers(execution); + Assert.notNull(assigneeUserId, "任务处理人不能为空"); + // 第二步,设置作为负责人 + TaskHelper.changeTaskAssignee(task, String.valueOf(assigneeUserId)); + } + + private Long calculateTaskCandidateUsers(DelegateExecution execution) { + // 情况一,如果是多实例的任务,例如说会签、或签等情况,则从 Variable 中获取。 + // 顺序审批可见 BpmSequentialMultiInstanceBehavior,并发审批可见 BpmSequentialMultiInstanceBehavior + if (super.multiInstanceActivityBehavior != null) { + return execution.getVariable(super.multiInstanceActivityBehavior.getCollectionElementVariable(), Long.class); + } + + // 情况二,如果非多实例的任务,则计算任务处理人 + // 第一步,先计算可处理该任务的处理人们 + Set candidateUserIds = taskCandidateInvoker.calculateUsers(execution); + // 第二步,后随机选择一个任务的处理人 + // 疑问:为什么一定要选择一个任务处理人? + // 解答:项目对 bpm 的任务是责任到人,所以每个任务有且仅有一个处理人。 + // 如果希望一个任务可以同时被多个人处理,可以考虑使用 BpmParallelMultiInstanceBehavior 实现的会签 or 或签。 + int index = RandomUtil.randomInt(candidateUserIds.size()); + return CollUtil.get(candidateUserIds, index); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateInvoker.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateInvoker.java new file mode 100644 index 0000000..91a49b2 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateInvoker.java @@ -0,0 +1,119 @@ +package com.win.module.bpm.framework.flowable.core.candidate; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.datapermission.core.annotation.DataPermission; +import com.win.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum; +import com.win.module.bpm.framework.flowable.core.util.BpmnModelUtils; +import com.win.module.system.api.user.AdminUserApi; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.bpmn.model.UserTask; +import org.flowable.engine.delegate.DelegateExecution; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.bpm.enums.ErrorCodeConstants.MODEL_DEPLOY_FAIL_TASK_CANDIDATE_NOT_CONFIG; +import static com.win.module.bpm.enums.ErrorCodeConstants.TASK_CREATE_FAIL_NO_CANDIDATE_USER; + +/** + * {@link BpmTaskCandidateStrategy} 的调用者,用于调用对应的策略,实现任务的候选人的计算 + * + * @author 芋道源码 + */ +@Slf4j +public class BpmTaskCandidateInvoker { + + private final Map strategyMap = new HashMap<>(); + + private final AdminUserApi adminUserApi; + + public BpmTaskCandidateInvoker(List strategyList, + AdminUserApi adminUserApi) { + strategyList.forEach(strategy -> { + BpmTaskCandidateStrategy oldStrategy = strategyMap.put(strategy.getStrategy(), strategy); + Assert.isNull(oldStrategy, "策略(%s) 重复", strategy.getStrategy()); + }); + this.adminUserApi = adminUserApi; + } + + /** + * 校验流程模型的任务分配规则全部都配置了 + * 目的:如果有规则未配置,会导致流程任务找不到负责人,进而流程无法进行下去! + * + * @param bpmnBytes BPMN XML + */ + public void validateBpmnConfig(byte[] bpmnBytes) { + BpmnModel bpmnModel = BpmnModelUtils.getBpmnModel(bpmnBytes); + assert bpmnModel != null; + List userTaskList = BpmnModelUtils.getBpmnModelElements(bpmnModel, UserTask.class); + // 遍历所有的 UserTask,校验审批人配置 + userTaskList.forEach(userTask -> { + // 1. 非空校验 + Integer strategy = BpmnModelUtils.parseCandidateStrategy(userTask); + String param = BpmnModelUtils.parseCandidateParam(userTask); + if (strategy == null) { + throw exception(MODEL_DEPLOY_FAIL_TASK_CANDIDATE_NOT_CONFIG, userTask.getName()); + } + BpmTaskCandidateStrategy candidateStrategy = getCandidateStrategy(strategy); + if (candidateStrategy.isParamRequired() && StrUtil.isBlank(param)) { + throw exception(MODEL_DEPLOY_FAIL_TASK_CANDIDATE_NOT_CONFIG, userTask.getName()); + } + // 2. 具体策略校验 + getCandidateStrategy(strategy).validateParam(param); + }); + } + + /** + * 计算任务的候选人 + * + * @param execution 执行任务 + * @return 用户编号集合 + */ + @DataPermission(enable = false) // 忽略数据权限,避免因为过滤,导致找不到候选人 + public Set calculateUsers(DelegateExecution execution) { + Integer strategy = BpmnModelUtils.parseCandidateStrategy(execution.getCurrentFlowElement()); + String param = BpmnModelUtils.parseCandidateParam(execution.getCurrentFlowElement()); + // 1.1 计算任务的候选人 + Set userIds = getCandidateStrategy(strategy).calculateUsers(execution, param); + // 1.2 移除被禁用的用户 + removeDisableUsers(userIds); + + // 2. 校验是否有候选人 + if (CollUtil.isEmpty(userIds)) { + log.error("[calculateUsers][流程任务({}/{}/{}) 任务规则({}/{}) 找不到候选人]", execution.getId(), + execution.getProcessDefinitionId(), execution.getCurrentActivityId(), strategy, param); + throw exception(TASK_CREATE_FAIL_NO_CANDIDATE_USER); + } + return userIds; + } + + @VisibleForTesting + void removeDisableUsers(Set assigneeUserIds) { + if (CollUtil.isEmpty(assigneeUserIds)) { + return; + } + Map userMap = adminUserApi.getUserMap(assigneeUserIds); + assigneeUserIds.removeIf(id -> { + AdminUserRespDTO user = userMap.get(id); + return user == null || !CommonStatusEnum.ENABLE.getStatus().equals(user.getStatus()); + }); + } + + private BpmTaskCandidateStrategy getCandidateStrategy(Integer strategy) { + BpmTaskCandidateStrategyEnum strategyEnum = BpmTaskCandidateStrategyEnum.valueOf(strategy); + Assert.notNull(strategyEnum, "策略(%s) 不存在", strategy); + BpmTaskCandidateStrategy strategyObj = strategyMap.get(strategyEnum); + Assert.notNull(strategyObj, "策略(%s) 不存在", strategy); + return strategyObj; + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateStrategy.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateStrategy.java new file mode 100644 index 0000000..27f562e --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateStrategy.java @@ -0,0 +1,48 @@ +package com.win.module.bpm.framework.flowable.core.candidate; + +import com.win.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum; +import org.flowable.engine.delegate.DelegateExecution; + +import java.util.Set; + +/** + * BPM 任务的候选人的策略接口 + * + * 例如说:分配审批人 + * + * @author 芋道源码 + */ +public interface BpmTaskCandidateStrategy { + + /** + * 对应策略 + * + * @return 策略 + */ + BpmTaskCandidateStrategyEnum getStrategy(); + + /** + * 校验参数 + * + * @param param 参数 + */ + void validateParam(String param); + + /** + * 基于执行任务,获得任务的候选用户们 + * + * @param execution 执行任务 + * @return 用户编号集合 + */ + Set calculateUsers(DelegateExecution execution, String param); + + /** + * 是否一定要输入参数 + * + * @return 是否 + */ + default boolean isParamRequired() { + return true; + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/expression/BpmTaskAssignLeaderExpression.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/expression/BpmTaskAssignLeaderExpression.java new file mode 100644 index 0000000..d780b62 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/expression/BpmTaskAssignLeaderExpression.java @@ -0,0 +1,77 @@ +package com.win.module.bpm.framework.flowable.core.candidate.expression; + +import com.win.framework.common.util.number.NumberUtils; +import com.win.module.bpm.service.task.BpmProcessInstanceService; +import com.win.module.system.api.dept.DeptApi; +import com.win.module.system.api.dept.dto.DeptRespDTO; +import com.win.module.system.api.user.AdminUserApi; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import jakarta.annotation.Resource; +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.runtime.ProcessInstance; +import org.springframework.stereotype.Component; +import org.springframework.util.Assert; + +import java.util.Set; + +import static com.win.framework.common.util.collection.SetUtils.asSet; +import static java.util.Collections.emptySet; + +/** + * 分配给发起人的 Leader 审批的 Expression 流程表达式 + * 目前 Leader 的定义是,发起人所在部门的 Leader + * + * @author 芋道源码 + */ +@Component +public class BpmTaskAssignLeaderExpression { + + @Resource + private AdminUserApi adminUserApi; + @Resource + private DeptApi deptApi; + + @Resource + private BpmProcessInstanceService processInstanceService; + + /** + * 计算审批的候选人 + * + * @param execution 流程执行实体 + * @param level 指定级别 + * @return 指定级别的领导 + */ + public Set calculateUsers(DelegateExecution execution, int level) { + Assert.isTrue(level > 0, "level 必须大于 0"); + // 获得发起人 + ProcessInstance processInstance = processInstanceService.getProcessInstance(execution.getProcessInstanceId()); + Long startUserId = NumberUtils.parseLong(processInstance.getStartUserId()); + // 获得对应 leve 的部门 + DeptRespDTO dept = null; + for (int i = 0; i < level; i++) { + // 获得 level 对应的部门 + if (dept == null) { + dept = getStartUserDept(startUserId); + if (dept == null) { // 找不到发起人的部门,所以无法使用该规则 + return emptySet(); + } + } else { + DeptRespDTO parentDept = deptApi.getDept(dept.getParentId()).getCheckedData(); + if (parentDept == null) { // 找不到父级部门,所以只好结束寻找。原因是:例如说,级别比较高的人,所在部门层级比较少 + break; + } + dept = parentDept; + } + } + return dept.getLeaderUserId() != null ? asSet(dept.getLeaderUserId()) : emptySet(); + } + + private DeptRespDTO getStartUserDept(Long startUserId) { + AdminUserRespDTO startUser = adminUserApi.getUser(startUserId).getCheckedData(); + if (startUser.getDeptId() == null) { // 找不到部门,所以无法使用该规则 + return null; + } + return deptApi.getDept(startUser.getDeptId()).getCheckedData(); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/expression/BpmTaskAssignStartUserExpression.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/expression/BpmTaskAssignStartUserExpression.java new file mode 100644 index 0000000..b8639e1 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/expression/BpmTaskAssignStartUserExpression.java @@ -0,0 +1,36 @@ +package com.win.module.bpm.framework.flowable.core.candidate.expression; + +import com.win.framework.common.util.collection.SetUtils; +import com.win.framework.common.util.number.NumberUtils; +import com.win.module.bpm.service.task.BpmProcessInstanceService; +import jakarta.annotation.Resource; +import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl; +import org.flowable.engine.runtime.ProcessInstance; +import org.springframework.stereotype.Component; + +import java.util.Set; + +/** + * 分配给发起人审批的 Expression 流程表达式 + * + * @author 芋道源码 + */ +@Component +public class BpmTaskAssignStartUserExpression { + + @Resource + private BpmProcessInstanceService processInstanceService; + + /** + * 计算审批的候选人 + * + * @param execution 流程执行实体 + * @return 发起人 + */ + public Set calculateUsers(ExecutionEntityImpl execution) { + ProcessInstance processInstance = processInstanceService.getProcessInstance(execution.getProcessInstanceId()); + Long startUserId = NumberUtils.parseLong(processInstance.getStartUserId()); + return SetUtils.asSet(startUserId); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateDeptLeaderStrategy.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateDeptLeaderStrategy.java new file mode 100644 index 0000000..9c7dcf1 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateDeptLeaderStrategy.java @@ -0,0 +1,46 @@ +package com.win.module.bpm.framework.flowable.core.candidate.strategy; + +import com.win.framework.common.util.string.StrUtils; +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateStrategy; +import com.win.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum; +import com.win.module.system.api.dept.DeptApi; +import com.win.module.system.api.dept.dto.DeptRespDTO; +import jakarta.annotation.Resource; +import org.flowable.engine.delegate.DelegateExecution; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Set; + +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; + +/** + * 部门的负责人 {@link BpmTaskCandidateStrategy} 实现类 + * + * @author kyle + */ +@Component +public class BpmTaskCandidateDeptLeaderStrategy implements BpmTaskCandidateStrategy { + + @Resource + private DeptApi deptApi; + + @Override + public BpmTaskCandidateStrategyEnum getStrategy() { + return BpmTaskCandidateStrategyEnum.DEPT_LEADER; + } + + @Override + public void validateParam(String param) { + Set deptIds = StrUtils.splitToLongSet(param); + deptApi.validateDeptList(deptIds); + } + + @Override + public Set calculateUsers(DelegateExecution execution, String param) { + Set deptIds = StrUtils.splitToLongSet(param); + List depts = deptApi.getDeptList(deptIds).getCheckedData(); + return convertSet(depts, DeptRespDTO::getLeaderUserId); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateDeptMemberStrategy.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateDeptMemberStrategy.java new file mode 100644 index 0000000..2faf321 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateDeptMemberStrategy.java @@ -0,0 +1,49 @@ +package com.win.module.bpm.framework.flowable.core.candidate.strategy; + +import com.win.framework.common.util.string.StrUtils; +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateStrategy; +import com.win.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum; +import com.win.module.system.api.dept.DeptApi; +import com.win.module.system.api.user.AdminUserApi; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import jakarta.annotation.Resource; +import org.flowable.engine.delegate.DelegateExecution; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Set; + +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; + +/** + * 部门的成员 {@link BpmTaskCandidateStrategy} 实现类 + * + * @author kyle + */ +@Component +public class BpmTaskCandidateDeptMemberStrategy implements BpmTaskCandidateStrategy { + + @Resource + private DeptApi deptApi; + @Resource + private AdminUserApi adminUserApi; + + @Override + public BpmTaskCandidateStrategyEnum getStrategy() { + return BpmTaskCandidateStrategyEnum.DEPT_MEMBER; + } + + @Override + public void validateParam(String param) { + Set deptIds = StrUtils.splitToLongSet(param); + deptApi.validateDeptList(deptIds); + } + + @Override + public Set calculateUsers(DelegateExecution execution, String param) { + Set deptIds = StrUtils.splitToLongSet(param); + List users = adminUserApi.getUserListByDeptIds(deptIds).getCheckedData(); + return convertSet(users, AdminUserRespDTO::getId); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateExpressionStrategy.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateExpressionStrategy.java new file mode 100644 index 0000000..e937838 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateExpressionStrategy.java @@ -0,0 +1,36 @@ +package com.win.module.bpm.framework.flowable.core.candidate.strategy; + +import cn.hutool.core.convert.Convert; +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateStrategy; +import com.win.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum; +import com.win.module.bpm.framework.flowable.core.util.FlowableUtils; +import org.flowable.engine.delegate.DelegateExecution; +import org.springframework.stereotype.Component; + +import java.util.Set; + +/** + * 流程表达式 {@link BpmTaskCandidateStrategy} 实现类 + * + * @author 芋道源码 + */ +@Component +public class BpmTaskCandidateExpressionStrategy implements BpmTaskCandidateStrategy { + + @Override + public BpmTaskCandidateStrategyEnum getStrategy() { + return BpmTaskCandidateStrategyEnum.EXPRESSION; + } + + @Override + public void validateParam(String param) { + // do nothing 因为它基本做不了校验 + } + + @Override + public Set calculateUsers(DelegateExecution execution, String param) { + Object result = FlowableUtils.getExpressionValue(execution, param); + return Convert.toSet(Long.class, result); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateGroupStrategy.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateGroupStrategy.java new file mode 100644 index 0000000..49707f7 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateGroupStrategy.java @@ -0,0 +1,47 @@ +package com.win.module.bpm.framework.flowable.core.candidate.strategy; + +import com.win.framework.common.util.string.StrUtils; +import com.win.module.bpm.dal.dataobject.definition.BpmUserGroupDO; +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateStrategy; +import com.win.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum; +import com.win.module.bpm.service.definition.BpmUserGroupService; +import jakarta.annotation.Resource; +import org.flowable.engine.delegate.DelegateExecution; +import org.springframework.stereotype.Component; + +import java.util.Collection; +import java.util.List; +import java.util.Set; + +import static com.win.framework.common.util.collection.CollectionUtils.convertSetByFlatMap; + +/** + * 用户组 {@link BpmTaskCandidateStrategy} 实现类 + * + * @author kyle + */ +@Component +public class BpmTaskCandidateGroupStrategy implements BpmTaskCandidateStrategy { + + @Resource + private BpmUserGroupService userGroupService; + + @Override + public BpmTaskCandidateStrategyEnum getStrategy() { + return BpmTaskCandidateStrategyEnum.USER_GROUP; + } + + @Override + public void validateParam(String param) { + Set groupIds = StrUtils.splitToLongSet(param); + userGroupService.getUserGroupList(groupIds); + } + + @Override + public Set calculateUsers(DelegateExecution execution, String param) { + Set groupIds = StrUtils.splitToLongSet(param); + List groups = userGroupService.getUserGroupList(groupIds); + return convertSetByFlatMap(groups, BpmUserGroupDO::getUserIds, Collection::stream); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidatePostStrategy.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidatePostStrategy.java new file mode 100644 index 0000000..596f44a --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidatePostStrategy.java @@ -0,0 +1,49 @@ +package com.win.module.bpm.framework.flowable.core.candidate.strategy; + +import com.win.framework.common.util.string.StrUtils; +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateStrategy; +import com.win.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum; +import com.win.module.system.api.dept.PostApi; +import com.win.module.system.api.user.AdminUserApi; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import jakarta.annotation.Resource; +import org.flowable.engine.delegate.DelegateExecution; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Set; + +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; + +/** + * 岗位 {@link BpmTaskCandidateStrategy} 实现类 + * + * @author kyle + */ +@Component +public class BpmTaskCandidatePostStrategy implements BpmTaskCandidateStrategy { + + @Resource + private PostApi postApi; + @Resource + private AdminUserApi adminUserApi; + + @Override + public BpmTaskCandidateStrategyEnum getStrategy() { + return BpmTaskCandidateStrategyEnum.POST; + } + + @Override + public void validateParam(String param) { + Set postIds = StrUtils.splitToLongSet(param); + postApi.validPostList(postIds); + } + + @Override + public Set calculateUsers(DelegateExecution execution, String param) { + Set postIds = StrUtils.splitToLongSet(param); + List users = adminUserApi.getUserListByPostIds(postIds).getCheckedData(); + return convertSet(users, AdminUserRespDTO::getId); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateRoleStrategy.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateRoleStrategy.java new file mode 100644 index 0000000..9acf6eb --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateRoleStrategy.java @@ -0,0 +1,44 @@ +package com.win.module.bpm.framework.flowable.core.candidate.strategy; + +import com.win.framework.common.util.string.StrUtils; +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateStrategy; +import com.win.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum; +import com.win.module.system.api.permission.PermissionApi; +import com.win.module.system.api.permission.RoleApi; +import jakarta.annotation.Resource; +import org.flowable.engine.delegate.DelegateExecution; +import org.springframework.stereotype.Component; + +import java.util.Set; + +/** + * 角色 {@link BpmTaskCandidateStrategy} 实现类 + * + * @author kyle + */ +@Component +public class BpmTaskCandidateRoleStrategy implements BpmTaskCandidateStrategy { + + @Resource + private RoleApi roleApi; + @Resource + private PermissionApi permissionApi; + + @Override + public BpmTaskCandidateStrategyEnum getStrategy() { + return BpmTaskCandidateStrategyEnum.ROLE; + } + + @Override + public void validateParam(String param) { + Set roleIds = StrUtils.splitToLongSet(param); + roleApi.validRoleList(roleIds); + } + + @Override + public Set calculateUsers(DelegateExecution execution, String param) { + Set roleIds = StrUtils.splitToLongSet(param); + return permissionApi.getUserRoleIdListByRoleIds(roleIds).getCheckedData(); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateStartUserSelectStrategy.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateStartUserSelectStrategy.java new file mode 100644 index 0000000..b493c87 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateStartUserSelectStrategy.java @@ -0,0 +1,76 @@ +package com.win.module.bpm.framework.flowable.core.candidate.strategy; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateStrategy; +import com.win.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum; +import com.win.module.bpm.framework.flowable.core.util.BpmnModelUtils; +import com.win.module.bpm.framework.flowable.core.util.FlowableUtils; +import com.win.module.bpm.service.task.BpmProcessInstanceService; +import jakarta.annotation.Resource; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.bpmn.model.UserTask; +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.runtime.ProcessInstance; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * 发起人自选 {@link BpmTaskCandidateUserStrategy} 实现类 + * + * @author 芋道源码 + */ +@Component +public class BpmTaskCandidateStartUserSelectStrategy implements BpmTaskCandidateStrategy { + + @Resource + @Lazy // 延迟加载,避免循环依赖 + private BpmProcessInstanceService processInstanceService; + + @Override + public BpmTaskCandidateStrategyEnum getStrategy() { + return BpmTaskCandidateStrategyEnum.START_USER_SELECT; + } + + @Override + public void validateParam(String param) {} + + @Override + public Set calculateUsers(DelegateExecution execution, String param) { + ProcessInstance processInstance = processInstanceService.getProcessInstance(execution.getProcessInstanceId()); + Assert.notNull(processInstance, "流程实例({})不能为空", execution.getProcessInstanceId()); + Map> startUserSelectAssignees = FlowableUtils.getStartUserSelectAssignees(processInstance); + Assert.notNull(startUserSelectAssignees, "流程实例({}) 的发起人自选审批人不能为空", + execution.getProcessInstanceId()); + // 获得审批人 + List assignees = startUserSelectAssignees.get(execution.getCurrentActivityId()); + return new LinkedHashSet<>(assignees); + } + + @Override + public boolean isParamRequired() { + return false; + } + + /** + * 获得发起人自选审批人的 UserTask 列表 + * + * @param bpmnModel BPMN 模型 + * @return UserTask 列表 + */ + public static List getStartUserSelectUserTaskList(BpmnModel bpmnModel) { + if (bpmnModel == null) { + return null; + } + List userTaskList = BpmnModelUtils.getBpmnModelElements(bpmnModel, UserTask.class); + if (CollUtil.isEmpty(userTaskList)) { + return null; + } + userTaskList.removeIf(userTask -> !Objects.equals(BpmnModelUtils.parseCandidateStrategy(userTask), + BpmTaskCandidateStrategyEnum.START_USER_SELECT.getStrategy())); + return userTaskList; + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateUserStrategy.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateUserStrategy.java new file mode 100644 index 0000000..e88a66d --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateUserStrategy.java @@ -0,0 +1,39 @@ +package com.win.module.bpm.framework.flowable.core.candidate.strategy; + +import com.win.framework.common.util.string.StrUtils; +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateStrategy; +import com.win.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum; +import com.win.module.system.api.user.AdminUserApi; +import jakarta.annotation.Resource; +import org.flowable.engine.delegate.DelegateExecution; +import org.springframework.stereotype.Component; + +import java.util.Set; + +/** + * 用户 {@link BpmTaskCandidateStrategy} 实现类 + * + * @author kyle + */ +@Component +public class BpmTaskCandidateUserStrategy implements BpmTaskCandidateStrategy { + + @Resource + private AdminUserApi adminUserApi; + + @Override + public BpmTaskCandidateStrategyEnum getStrategy() { + return BpmTaskCandidateStrategyEnum.USER; + } + + @Override + public void validateParam(String param) { + adminUserApi.validateUserList(StrUtils.splitToLongSet(param)); + } + + @Override + public Set calculateUsers(DelegateExecution execution, String param) { + return StrUtils.splitToLongSet(param); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/enums/BpmConstants.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/enums/BpmConstants.java new file mode 100644 index 0000000..41b370a --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/enums/BpmConstants.java @@ -0,0 +1,40 @@ +package com.win.module.bpm.framework.flowable.core.enums; + +import org.flowable.engine.runtime.ProcessInstance; + +/** + * BPM 通用常量 + * + * @author 芋道源码 + */ +public class BpmConstants { + + /** + * 流程实例的变量 - 状态 + * + * @see ProcessInstance#getProcessVariables() + */ + public static final String PROCESS_INSTANCE_VARIABLE_STATUS = "PROCESS_STATUS"; + /** + * 流程实例的变量 - 发起用户选择的审批人 Map + * + * @see ProcessInstance#getProcessVariables() + */ + public static final String PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES = "PROCESS_START_USER_SELECT_ASSIGNEES"; + + /** + * 任务的变量 - 状态 + * + * @see org.flowable.task.api.Task#getTaskLocalVariables() + */ + public static final String TASK_VARIABLE_STATUS = "TASK_STATUS"; + /** + * 任务的变量 - 理由 + * + * 例如说:审批通过、不通过的理由 + * + * @see org.flowable.task.api.Task#getTaskLocalVariables() + */ + public static final String TASK_VARIABLE_REASON = "TASK_REASON"; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/enums/BpmTaskCandidateStrategyEnum.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/enums/BpmTaskCandidateStrategyEnum.java new file mode 100644 index 0000000..39e8d86 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/enums/BpmTaskCandidateStrategyEnum.java @@ -0,0 +1,41 @@ +package com.win.module.bpm.framework.flowable.core.enums; + +import cn.hutool.core.util.ArrayUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * BPM 任务的候选人策略枚举 + * + * 例如说:分配给指定人审批 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum BpmTaskCandidateStrategyEnum { + + ROLE(10, "角色"), + DEPT_MEMBER(20, "部门的成员"), // 包括负责人 + DEPT_LEADER(21, "部门的负责人"), + POST(22, "岗位"), + USER(30, "用户"), + START_USER_SELECT(35, "发起人自选"), // 申请人自己,可在提交申请时选择此节点的审批人 + USER_GROUP(40, "用户组"), + EXPRESSION(60, "流程表达式"), // 表达式 ExpressionManager + ; + + /** + * 类型 + */ + private final Integer strategy; + /** + * 描述 + */ + private final String description; + + public static BpmTaskCandidateStrategyEnum valueOf(Integer strategy) { + return ArrayUtil.firstMatch(o -> o.getStrategy().equals(strategy), values()); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/enums/BpmnModelConstants.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/enums/BpmnModelConstants.java new file mode 100644 index 0000000..e181f62 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/enums/BpmnModelConstants.java @@ -0,0 +1,26 @@ +package com.win.module.bpm.framework.flowable.core.enums; + +/** + * BPMN XML 常量信息 + * + * @author 芋道源码 + */ +public interface BpmnModelConstants { + + String BPMN_FILE_SUFFIX = ".bpmn"; + + /** + * BPMN 中的命名空间 + */ + String NAMESPACE = "http://flowable.org/bpmn"; + + /** + * BPMN UserTask 的扩展属性,用于标记候选人策略 + */ + String USER_TASK_CANDIDATE_STRATEGY = "candidateStrategy"; + /** + * BPMN UserTask 的扩展属性,用于标记候选人参数 + */ + String USER_TASK_CANDIDATE_PARAM = "candidateParam"; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/event/BpmProcessInstanceEventPublisher.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/event/BpmProcessInstanceEventPublisher.java new file mode 100644 index 0000000..361a3d0 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/event/BpmProcessInstanceEventPublisher.java @@ -0,0 +1,24 @@ +package com.win.module.bpm.framework.flowable.core.event; + +import com.win.module.bpm.event.BpmProcessInstanceStatusEvent; +import jakarta.validation.Valid; +import lombok.AllArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.validation.annotation.Validated; + +/** + * {@link BpmProcessInstanceStatusEvent} 的生产者 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Validated +public class BpmProcessInstanceEventPublisher { + + private final ApplicationEventPublisher publisher; + + public void sendProcessInstanceResultEvent(@Valid BpmProcessInstanceStatusEvent event) { + publisher.publishEvent(event); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/BpmProcessInstanceEventListener.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/BpmProcessInstanceEventListener.java new file mode 100644 index 0000000..9140d38 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/BpmProcessInstanceEventListener.java @@ -0,0 +1,47 @@ +package com.win.module.bpm.framework.flowable.core.listener; + +import com.win.module.bpm.service.task.BpmProcessInstanceService; +import com.google.common.collect.ImmutableSet; +import jakarta.annotation.Resource; +import org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent; +import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType; +import org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener; +import org.flowable.engine.delegate.event.FlowableCancelledEvent; +import org.flowable.engine.runtime.ProcessInstance; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import java.util.Set; + +/** + * 监听 {@link ProcessInstance} 的状态变更,更新其对应的 status 状态 + * + * @author jason + */ +@Component +public class BpmProcessInstanceEventListener extends AbstractFlowableEngineEventListener { + + @Resource + @Lazy + private BpmProcessInstanceService processInstanceService; + + public static final Set PROCESS_INSTANCE_EVENTS = ImmutableSet.builder() + .add(FlowableEngineEventType.PROCESS_CANCELLED) + .add(FlowableEngineEventType.PROCESS_COMPLETED) + .build(); + + public BpmProcessInstanceEventListener(){ + super(PROCESS_INSTANCE_EVENTS); + } + + @Override + protected void processCancelled(FlowableCancelledEvent event) { + processInstanceService.updateProcessInstanceWhenCancel(event); + } + + @Override + protected void processCompleted(FlowableEngineEntityEvent event) { + processInstanceService.updateProcessInstanceWhenApprove((ProcessInstance)event.getEntity()); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/BpmTaskEventListener.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/BpmTaskEventListener.java new file mode 100644 index 0000000..8507f50 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/BpmTaskEventListener.java @@ -0,0 +1,75 @@ +package com.win.module.bpm.framework.flowable.core.listener; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.win.module.bpm.service.task.BpmActivityService; +import com.win.module.bpm.service.task.BpmTaskService; +import com.google.common.collect.ImmutableSet; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent; +import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType; +import org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener; +import org.flowable.engine.delegate.event.FlowableActivityCancelledEvent; +import org.flowable.engine.history.HistoricActivityInstance; +import org.flowable.task.api.Task; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Set; + +/** + * 监听 {@link Task} 的开始与完成 + * + * @author jason + */ +@Component +@Slf4j +public class BpmTaskEventListener extends AbstractFlowableEngineEventListener { + + @Resource + @Lazy // 解决循环依赖 + private BpmTaskService taskService; + @Resource + @Lazy // 解决循环依赖 + private BpmActivityService activityService; + + public static final Set TASK_EVENTS = ImmutableSet.builder() + .add(FlowableEngineEventType.TASK_CREATED) + .add(FlowableEngineEventType.TASK_ASSIGNED) +// .add(FlowableEngineEventType.TASK_COMPLETED) // 由于审批通过时,已经记录了 task 的 status 为通过,所以不需要监听了。 + .add(FlowableEngineEventType.ACTIVITY_CANCELLED) + .build(); + + public BpmTaskEventListener(){ + super(TASK_EVENTS); + } + + @Override + protected void taskCreated(FlowableEngineEntityEvent event) { + taskService.updateTaskStatusWhenCreated((Task) event.getEntity()); + } + + @Override + protected void taskAssigned(FlowableEngineEntityEvent event) { + taskService.updateTaskExtAssign((Task)event.getEntity()); + } + + @Override + protected void activityCancelled(FlowableActivityCancelledEvent event) { + List activityList = activityService.getHistoricActivityListByExecutionId(event.getExecutionId()); + if (CollUtil.isEmpty(activityList)) { + log.error("[activityCancelled][使用 executionId({}) 查找不到对应的活动实例]", event.getExecutionId()); + return; + } + // 遍历处理 + activityList.forEach(activity -> { + if (StrUtil.isEmpty(activity.getTaskId())) { + return; + } + taskService.updateTaskStatusWhenCanceled(activity.getTaskId()); + }); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/exection/DemoDelegateClassExecutionListener.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/exection/DemoDelegateClassExecutionListener.java new file mode 100644 index 0000000..8959c9b --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/exection/DemoDelegateClassExecutionListener.java @@ -0,0 +1,21 @@ +package com.win.module.bpm.framework.flowable.core.listener.demo.exection; + +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.delegate.JavaDelegate; + +/** + * 类型为 class 的 ExecutionListener 监听器示例 + * + * @author 芋道源码 + */ +@Slf4j +public class DemoDelegateClassExecutionListener implements JavaDelegate { + + @Override + public void execute(DelegateExecution execution) { + log.info("[execute][execution({}) 被调用!变量有:{}]", execution.getId(), + execution.getCurrentFlowableListener().getFieldExtensions()); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/exection/DemoDelegateExpressionExecutionListener.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/exection/DemoDelegateExpressionExecutionListener.java new file mode 100644 index 0000000..363cf5d --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/exection/DemoDelegateExpressionExecutionListener.java @@ -0,0 +1,23 @@ +package com.win.module.bpm.framework.flowable.core.listener.demo.exection; + +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.delegate.JavaDelegate; +import org.springframework.stereotype.Component; + +/** + * 类型为 delegateExpression 的 ExecutionListener 监听器示例 + * + * 和 {@link DemoDelegateClassExecutionListener} 的差异是,需要注册到 Spring 中 + */ +@Component +@Slf4j +public class DemoDelegateExpressionExecutionListener implements JavaDelegate { + + @Override + public void execute(DelegateExecution execution) { + log.info("[execute][execution({}) 被调用!变量有:{}]", execution.getId(), + execution.getCurrentFlowableListener().getFieldExtensions()); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/exection/DemoSpringExpressionExecutionListener.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/exection/DemoSpringExpressionExecutionListener.java new file mode 100644 index 0000000..506a669 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/exection/DemoSpringExpressionExecutionListener.java @@ -0,0 +1,21 @@ +package com.win.module.bpm.framework.flowable.core.listener.demo.exection; + +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.delegate.DelegateExecution; +import org.springframework.stereotype.Component; + +/** + * 类型为 expression 的 ExecutionListener 监听器示例 + * + * 和 {@link DemoDelegateClassExecutionListener} 的差异是,需要注册到 Spring 中,但不用实现 {@link org.flowable.engine.delegate.JavaDelegate} 接口 + */ +@Component +@Slf4j +public class DemoSpringExpressionExecutionListener { + + public void execute(DelegateExecution execution) { + log.info("[execute][execution({}) 被调用!变量有:{}]", execution.getId(), + execution.getCurrentFlowableListener().getFieldExtensions()); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/task/DemoDelegateClassTaskListener.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/task/DemoDelegateClassTaskListener.java new file mode 100644 index 0000000..ff91e73 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/task/DemoDelegateClassTaskListener.java @@ -0,0 +1,20 @@ +package com.win.module.bpm.framework.flowable.core.listener.demo.task; + +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.delegate.TaskListener; +import org.flowable.task.service.delegate.DelegateTask; + +/** + * 类型为 class 的 TaskListener 监听器示例 + * + * @author 芋道源码 + */ +@Slf4j +public class DemoDelegateClassTaskListener implements TaskListener { + + @Override + public void notify(DelegateTask delegateTask) { + log.info("[execute][task({}) 被调用]", delegateTask.getId()); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/task/DemoDelegateExpressionTaskListener.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/task/DemoDelegateExpressionTaskListener.java new file mode 100644 index 0000000..62ef645 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/task/DemoDelegateExpressionTaskListener.java @@ -0,0 +1,22 @@ +package com.win.module.bpm.framework.flowable.core.listener.demo.task; + +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.delegate.TaskListener; +import org.flowable.task.service.delegate.DelegateTask; +import org.springframework.stereotype.Component; + +/** + * 类型为 delegateExpression 的 TaskListener 监听器示例 + * + * @author 芋道源码 + */ +@Component +@Slf4j +public class DemoDelegateExpressionTaskListener implements TaskListener { + + @Override + public void notify(DelegateTask delegateTask) { + log.info("[execute][task({}) 被调用]", delegateTask.getId()); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/task/DemoSpringExpressionTaskListener.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/task/DemoSpringExpressionTaskListener.java new file mode 100644 index 0000000..61b61ad --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/listener/demo/task/DemoSpringExpressionTaskListener.java @@ -0,0 +1,20 @@ +package com.win.module.bpm.framework.flowable.core.listener.demo.task; + +import lombok.extern.slf4j.Slf4j; +import org.flowable.task.service.delegate.DelegateTask; +import org.springframework.stereotype.Component; + +/** + * 类型为 expression 的 TaskListener 监听器示例 + * + * @author 芋道源码 + */ +@Slf4j +@Component +public class DemoSpringExpressionTaskListener { + + public void notify(DelegateTask delegateTask) { + log.info("[execute][task({}) 被调用]", delegateTask.getId()); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/util/BpmnModelUtils.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/util/BpmnModelUtils.java new file mode 100644 index 0000000..4f28a55 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/util/BpmnModelUtils.java @@ -0,0 +1,332 @@ +package com.win.module.bpm.framework.flowable.core.util; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ArrayUtil; +import com.win.framework.common.util.number.NumberUtils; +import com.win.module.bpm.framework.flowable.core.enums.BpmnModelConstants; +import org.flowable.bpmn.converter.BpmnXMLConverter; +import org.flowable.bpmn.model.Process; +import org.flowable.bpmn.model.*; +import org.flowable.common.engine.impl.util.io.BytesStreamSource; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * 流程模型转操作工具类 + */ +public class BpmnModelUtils { + + public static Integer parseCandidateStrategy(FlowElement userTask) { + return NumberUtils.parseInt(userTask.getAttributeValue( + BpmnModelConstants.NAMESPACE, BpmnModelConstants.USER_TASK_CANDIDATE_STRATEGY)); + } + + public static String parseCandidateParam(FlowElement userTask) { + return userTask.getAttributeValue( + BpmnModelConstants.NAMESPACE, BpmnModelConstants.USER_TASK_CANDIDATE_PARAM); + } + + /** + * 根据节点,获取入口连线 + * + * @param source 起始节点 + * @return 入口连线列表 + */ + public static List getElementIncomingFlows(FlowElement source) { + if (source instanceof FlowNode) { + return ((FlowNode) source).getIncomingFlows(); + } + return new ArrayList<>(); + } + + /** + * 根据节点,获取出口连线 + * + * @param source 起始节点 + * @return 出口连线列表 + */ + public static List getElementOutgoingFlows(FlowElement source) { + if (source instanceof FlowNode) { + return ((FlowNode) source).getOutgoingFlows(); + } + return new ArrayList<>(); + } + + /** + * 获取流程元素信息 + * + * @param model bpmnModel 对象 + * @param flowElementId 元素 ID + * @return 元素信息 + */ + public static FlowElement getFlowElementById(BpmnModel model, String flowElementId) { + Process process = model.getMainProcess(); + return process.getFlowElement(flowElementId); + } + + /** + * 获得 BPMN 流程中,指定的元素们 + * + * @param model 模型 + * @param clazz 指定元素。例如说,{@link UserTask}、{@link Gateway} 等等 + * @return 元素们 + */ + public static List getBpmnModelElements(BpmnModel model, Class clazz) { + List result = new ArrayList<>(); + model.getProcesses().forEach(process -> { + process.getFlowElements().forEach(flowElement -> { + if (flowElement.getClass().isAssignableFrom(clazz)) { + result.add((T) flowElement); + } + }); + }); + return result; + } + + public static StartEvent getStartEvent(BpmnModel model) { + Process process = model.getMainProcess(); + // 从 initialFlowElement 找 + FlowElement startElement = process.getInitialFlowElement(); + if (startElement instanceof StartEvent) { + return (StartEvent) startElement; + } + // 从 flowElementList 找 + return (StartEvent) CollUtil.findOne(process.getFlowElements(), flowElement -> flowElement instanceof StartEvent); + } + + public static BpmnModel getBpmnModel(byte[] bpmnBytes) { + if (ArrayUtil.isEmpty(bpmnBytes)) { + return null; + } + BpmnXMLConverter converter = new BpmnXMLConverter(); + // 补充说明:由于在 Flowable 中自定义了属性,所以 validateSchema 传递 false + return converter.convertToBpmnModel(new BytesStreamSource(bpmnBytes), false, false); + } + + public static String getBpmnXml(BpmnModel model) { + if (model == null) { + return null; + } + BpmnXMLConverter converter = new BpmnXMLConverter(); + return new String(converter.convertToXML(model)); + } + + // ========== 遍历相关的方法 ========== + + /** + * 找到 source 节点之前的所有用户任务节点 + * + * @param source 起始节点 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param userTaskList 已找到的用户任务节点 + * @return 用户任务节点 数组 + */ + public static List getPreviousUserTaskList(FlowElement source, Set hasSequenceFlow, List userTaskList) { + userTaskList = userTaskList == null ? new ArrayList<>() : userTaskList; + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代 + if (source instanceof StartEvent && source.getSubProcess() != null) { + userTaskList = getPreviousUserTaskList(source.getSubProcess(), hasSequenceFlow, userTaskList); + } + + // 根据类型,获取入口连线 + List sequenceFlows = getElementIncomingFlows(source); + if (sequenceFlows == null) { + return userTaskList; + } + // 循环找到目标元素 + for (SequenceFlow sequenceFlow : sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 类型为用户节点,则新增父级节点 + if (sequenceFlow.getSourceFlowElement() instanceof UserTask) { + userTaskList.add((UserTask) sequenceFlow.getSourceFlowElement()); + } + // 类型为子流程,则添加子流程开始节点出口处相连的节点 + if (sequenceFlow.getSourceFlowElement() instanceof SubProcess) { + // 获取子流程用户任务节点 + List childUserTaskList = findChildProcessUserTaskList((StartEvent) ((SubProcess) sequenceFlow.getSourceFlowElement()).getFlowElements().toArray()[0], null, null); + // 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续 + if (CollUtil.isNotEmpty(childUserTaskList)) { + userTaskList.addAll(childUserTaskList); + } + } + // 继续迭代 + userTaskList = getPreviousUserTaskList(sequenceFlow.getSourceFlowElement(), hasSequenceFlow, userTaskList); + } + return userTaskList; + } + + /** + * 迭代获取子流程用户任务节点 + * + * @param source 起始节点 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param userTaskList 需要撤回的用户任务列表 + * @return 用户任务节点 + */ + public static List findChildProcessUserTaskList(FlowElement source, Set hasSequenceFlow, List userTaskList) { + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + userTaskList = userTaskList == null ? new ArrayList<>() : userTaskList; + + // 根据类型,获取出口连线 + List sequenceFlows = getElementOutgoingFlows(source); + if (sequenceFlows == null) { + return userTaskList; + } + // 循环找到目标元素 + for (SequenceFlow sequenceFlow : sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 如果为用户任务类型,且任务节点的 Key 正在运行的任务中存在,添加 + if (sequenceFlow.getTargetFlowElement() instanceof UserTask) { + userTaskList.add((UserTask) sequenceFlow.getTargetFlowElement()); + continue; + } + // 如果节点为子流程节点情况,则从节点中的第一个节点开始获取 + if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) { + List childUserTaskList = findChildProcessUserTaskList((FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements().toArray()[0]), hasSequenceFlow, null); + // 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续 + if (CollUtil.isNotEmpty(childUserTaskList)) { + userTaskList.addAll(childUserTaskList); + continue; + } + } + // 继续迭代 + userTaskList = findChildProcessUserTaskList(sequenceFlow.getTargetFlowElement(), hasSequenceFlow, userTaskList); + } + return userTaskList; + } + + + /** + * 迭代从后向前扫描,判断目标节点相对于当前节点是否是串行 + * 不存在直接回退到子流程中的情况,但存在从子流程出去到父流程情况 + * + * @param source 起始节点 + * @param target 目标节点 + * @param visitedElements 已经经过的连线的 ID,用于判断线路是否重复 + * @return 结果 + */ + public static boolean isSequentialReachable(FlowElement source, FlowElement target, Set visitedElements) { + visitedElements = visitedElements == null ? new HashSet<>() : visitedElements; + // 不能是开始事件和子流程 + if (source instanceof StartEvent && isInEventSubprocess(source)) { + return false; + } + + // 根据类型,获取入口连线 + List sequenceFlows = getElementIncomingFlows(source); + if (CollUtil.isEmpty(sequenceFlows)) { + return true; + } + // 循环找到目标元素 + for (SequenceFlow sequenceFlow : sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (visitedElements.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + visitedElements.add(sequenceFlow.getId()); + // 这条线路存在目标节点,这条线路完成,进入下个线路 + FlowElement sourceFlowElement = sequenceFlow.getSourceFlowElement(); + if (target.getId().equals(sourceFlowElement.getId())) { + continue; + } + // 如果目标节点为并行网关,则不继续 + if (sourceFlowElement instanceof ParallelGateway) { + return false; + } + // 否则就继续迭代 + if (!isSequentialReachable(sourceFlowElement, target, visitedElements)) { + return false; + } + } + return true; + } + + /** + * 判断当前节点是否属于不同的子流程 + * + * @param flowElement 被判断的节点 + * @return true 表示属于子流程 + */ + private static boolean isInEventSubprocess(FlowElement flowElement) { + FlowElementsContainer flowElementsContainer = flowElement.getParentContainer(); + while (flowElementsContainer != null) { + if (flowElementsContainer instanceof EventSubProcess) { + return true; + } + + if (flowElementsContainer instanceof FlowElement) { + flowElementsContainer = ((FlowElement) flowElementsContainer).getParentContainer(); + } else { + flowElementsContainer = null; + } + } + return false; + } + + /** + * 根据正在运行的任务节点,迭代获取子级任务节点列表,向后找 + * + * @param source 起始节点 + * @param runTaskKeyList 正在运行的任务 Key,用于校验任务节点是否是正在运行的节点 + * @param hasSequenceFlow 已经经过的连线的 ID,用于判断线路是否重复 + * @param userTaskList 需要撤回的用户任务列表 + * @return 子级任务节点列表 + */ + public static List iteratorFindChildUserTasks(FlowElement source, List runTaskKeyList, + Set hasSequenceFlow, List userTaskList) { + hasSequenceFlow = hasSequenceFlow == null ? new HashSet<>() : hasSequenceFlow; + userTaskList = userTaskList == null ? new ArrayList<>() : userTaskList; + // 如果该节点为开始节点,且存在上级子节点,则顺着上级子节点继续迭代 + if (source instanceof StartEvent && source.getSubProcess() != null) { + userTaskList = iteratorFindChildUserTasks(source.getSubProcess(), runTaskKeyList, hasSequenceFlow, userTaskList); + } + + // 根据类型,获取出口连线 + List sequenceFlows = getElementOutgoingFlows(source); + if (sequenceFlows == null) { + return userTaskList; + } + // 循环找到目标元素 + for (SequenceFlow sequenceFlow : sequenceFlows) { + // 如果发现连线重复,说明循环了,跳过这个循环 + if (hasSequenceFlow.contains(sequenceFlow.getId())) { + continue; + } + // 添加已经走过的连线 + hasSequenceFlow.add(sequenceFlow.getId()); + // 如果为用户任务类型,且任务节点的 Key 正在运行的任务中存在,添加 + if (sequenceFlow.getTargetFlowElement() instanceof UserTask && runTaskKeyList.contains((sequenceFlow.getTargetFlowElement()).getId())) { + userTaskList.add((UserTask) sequenceFlow.getTargetFlowElement()); + continue; + } + // 如果节点为子流程节点情况,则从节点中的第一个节点开始获取 + if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) { + List childUserTaskList = iteratorFindChildUserTasks((FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements().toArray()[0]), runTaskKeyList, hasSequenceFlow, null); + // 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续 + if (CollUtil.isNotEmpty(childUserTaskList)) { + userTaskList.addAll(childUserTaskList); + continue; + } + } + // 继续迭代 + userTaskList = iteratorFindChildUserTasks(sequenceFlow.getTargetFlowElement(), runTaskKeyList, hasSequenceFlow, userTaskList); + } + return userTaskList; + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/util/FlowableUtils.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/util/FlowableUtils.java new file mode 100644 index 0000000..4c36bde --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/flowable/core/util/FlowableUtils.java @@ -0,0 +1,180 @@ +package com.win.module.bpm.framework.flowable.core.util; + +import com.win.framework.tenant.core.context.TenantContextHolder; +import com.win.module.bpm.framework.flowable.core.enums.BpmConstants; +import org.flowable.common.engine.api.delegate.Expression; +import org.flowable.common.engine.api.variable.VariableContainer; +import org.flowable.common.engine.impl.el.ExpressionManager; +import org.flowable.common.engine.impl.identity.Authentication; +import org.flowable.engine.ProcessEngineConfiguration; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; +import org.flowable.engine.impl.util.CommandContextUtil; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.TaskInfo; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Flowable 相关的工具方法 + * + * @author 芋道源码 + */ +public class FlowableUtils { + + // ========== User 相关的工具方法 ========== + + public static void setAuthenticatedUserId(Long userId) { + Authentication.setAuthenticatedUserId(String.valueOf(userId)); + } + + public static void clearAuthenticatedUserId() { + Authentication.setAuthenticatedUserId(null); + } + + public static String getTenantId() { + Long tenantId = TenantContextHolder.getTenantId(); + return tenantId != null ? String.valueOf(tenantId) : ProcessEngineConfiguration.NO_TENANT_ID; + } + + // ========== Execution 相关的工具方法 ========== + + /** + * 格式化多实例(并签、或签)的 collectionVariable 变量(多实例对应的多审批人列表) + * + * @param activityId 活动编号 + * @return collectionVariable 变量 + */ + public static String formatExecutionCollectionVariable(String activityId) { + return activityId + "_assignees"; + } + + /** + * 格式化多实例(并签、或签)的 collectionElementVariable 变量(当前实例对应的一个审批人) + * + * @param activityId 活动编号 + * @return collectionElementVariable 变量 + */ + public static String formatExecutionCollectionElementVariable(String activityId) { + return activityId + "_assignee"; + } + + // ========== ProcessInstance 相关的工具方法 ========== + + public static Integer getProcessInstanceStatus(ProcessInstance processInstance) { + return getProcessInstanceStatus(processInstance.getProcessVariables()); + } + + public static Integer getProcessInstanceStatus(HistoricProcessInstance processInstance) { + return getProcessInstanceStatus(processInstance.getProcessVariables()); + } + + /** + * 获得流程实例的状态 + * + * @param processVariables 流程实例的 variables + * @return 状态 + */ + private static Integer getProcessInstanceStatus(Map processVariables) { + return (Integer) processVariables.get(BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS); + } + + /** + * 获得流程实例的表单 + * + * @param processInstance 流程实例 + * @return 表单 + */ + public static Map getProcessInstanceFormVariable(HistoricProcessInstance processInstance) { + Map formVariables = new HashMap<>(processInstance.getProcessVariables()); + filterProcessInstanceFormVariable(formVariables); + return formVariables; + } + + /** + * 过滤流程实例的表单 + * + * 为什么要过滤?目前使用 processVariables 存储所有流程实例的拓展字段,需要过滤掉一部分的系统字段,从而实现表单的展示 + * + * @param processVariables 流程实例的 variables + * @return 过滤后的表单 + */ + public static Map filterProcessInstanceFormVariable(Map processVariables) { + processVariables.remove(BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS); + return processVariables; + } + + /** + * 获得流程实例的发起用户选择的审批人 Map + * + * @param processInstance 流程实例 + * @return 发起用户选择的审批人 Map + */ + @SuppressWarnings("unchecked") + public static Map> getStartUserSelectAssignees(ProcessInstance processInstance) { + return (Map>) processInstance.getProcessVariables().get( + BpmConstants.PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES); + } + + // ========== Task 相关的工具方法 ========== + + /** + * 获得任务的状态 + * + * @param task 任务 + * @return 状态 + */ + public static Integer getTaskStatus(TaskInfo task) { + return (Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS); + } + + /** + * 获得任务的审批原因 + * + * @param task 任务 + * @return 审批原因 + */ + public static String getTaskReason(TaskInfo task) { + return (String) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_REASON); + } + + /** + * 获得任务的表单 + * + * @param task 任务 + * @return 表单 + */ + public static Map getTaskFormVariable(TaskInfo task) { + Map formVariables = new HashMap<>(task.getTaskLocalVariables()); + filterTaskFormVariable(formVariables); + return formVariables; + } + + /** + * 过滤任务的表单 + * + * 为什么要过滤?目前使用 taskLocalVariables 存储所有任务的拓展字段,需要过滤掉一部分的系统字段,从而实现表单的展示 + * + * @param taskLocalVariables 任务的 taskLocalVariables + * @return 过滤后的表单 + */ + public static Map filterTaskFormVariable(Map taskLocalVariables) { + taskLocalVariables.remove(BpmConstants.TASK_VARIABLE_STATUS); + taskLocalVariables.remove(BpmConstants.TASK_VARIABLE_REASON); + return taskLocalVariables; + } + + // ========== Expression 相关的工具方法 ========== + + public static Object getExpressionValue(VariableContainer variableContainer, String expressionString) { + ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(); + assert processEngineConfiguration != null; + ExpressionManager expressionManager = processEngineConfiguration.getExpressionManager(); + assert expressionManager != null; + Expression expression = expressionManager.createExpression(expressionString); + return expression.getValue(variableContainer); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/package-info.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/package-info.java new file mode 100644 index 0000000..ad7f9d2 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/package-info.java @@ -0,0 +1,6 @@ +/** + * 属于 bpm 模块的 framework 封装 + * + * @author 芋道源码 + */ +package com.win.module.bpm.framework; diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/rpc/config/RpcConfiguration.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/rpc/config/RpcConfiguration.java new file mode 100644 index 0000000..145f6f5 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/rpc/config/RpcConfiguration.java @@ -0,0 +1,15 @@ +package com.win.module.bpm.framework.rpc.config; + +import com.win.module.system.api.dept.DeptApi; +import com.win.module.system.api.dept.PostApi; +import com.win.module.system.api.dict.DictDataApi; +import com.win.module.system.api.permission.RoleApi; +import com.win.module.system.api.sms.SmsSendApi; +import com.win.module.system.api.user.AdminUserApi; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; + +@Configuration(proxyBeanMethods = false) +@EnableFeignClients(clients = {RoleApi.class, DeptApi.class, PostApi.class, AdminUserApi.class, SmsSendApi.class, DictDataApi.class}) +public class RpcConfiguration { +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/rpc/package-info.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/rpc/package-info.java new file mode 100644 index 0000000..a537908 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/rpc/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package com.win.module.bpm.framework.rpc; diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/security/config/SecurityConfiguration.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/security/config/SecurityConfiguration.java new file mode 100644 index 0000000..2382b04 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/security/config/SecurityConfiguration.java @@ -0,0 +1,36 @@ +package com.win.module.bpm.framework.security.config; + +import com.win.framework.security.config.AuthorizeRequestsCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer; +import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; + +/** + * Bpm 模块的 Security 配置 + */ +@Configuration(proxyBeanMethods = false, value = "bpmSecurityConfiguration") +public class SecurityConfiguration { + + @Bean("bpmAuthorizeRequestsCustomizer") + public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { + return new AuthorizeRequestsCustomizer() { + + @Override + public void customize(AuthorizeHttpRequestsConfigurer.AuthorizationManagerRequestMatcherRegistry registry) { + // TODO 芋艿:这个每个项目都需要重复配置,得捉摸有没通用的方案 + // Swagger 接口文档 + registry.requestMatchers("/v3/api-docs/**").permitAll() // 元数据 + .requestMatchers("/swagger-ui.html").permitAll(); // Swagger UI + // Druid 监控 + registry.requestMatchers("/druid/**").permitAll(); + // Spring Boot Actuator 的安全配置 + registry.requestMatchers("/actuator").permitAll() + .requestMatchers("/actuator/**").permitAll(); + } + + }; + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/security/core/package-info.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/security/core/package-info.java new file mode 100644 index 0000000..5544759 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/security/core/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package com.win.module.bpm.framework.security.core; diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/web/config/BpmWebConfiguration.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/web/config/BpmWebConfiguration.java new file mode 100644 index 0000000..903b25f --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/web/config/BpmWebConfiguration.java @@ -0,0 +1,30 @@ +package com.win.module.bpm.framework.web.config; + +import com.win.framework.common.enums.WebFilterOrderEnum; +import com.win.framework.swagger.config.WinSwaggerAutoConfiguration; +import com.win.module.bpm.framework.web.core.FlowableWebFilter; +import org.springdoc.core.models.GroupedOpenApi; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * bpm 模块的 web 组件的 Configuration + * + * @author 芋道源码 + */ +@Configuration(proxyBeanMethods = false) +public class BpmWebConfiguration { + + /** + * 配置 Flowable Web 过滤器 + */ + @Bean + public FilterRegistrationBean flowableWebFilter() { + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(new FlowableWebFilter()); + registrationBean.setOrder(WebFilterOrderEnum.FLOWABLE_FILTER); + return registrationBean; + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/web/core/FlowableWebFilter.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/web/core/FlowableWebFilter.java new file mode 100644 index 0000000..551d684 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/web/core/FlowableWebFilter.java @@ -0,0 +1,36 @@ +package com.win.module.bpm.framework.web.core; + +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import com.win.module.bpm.framework.flowable.core.util.FlowableUtils; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; + +/** + * Flowable Web 过滤器,将 userId 设置到 {@link org.flowable.common.engine.impl.identity.Authentication} 中 + * + * @author jason + */ +public class FlowableWebFilter extends OncePerRequestFilter { + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException { + try { + // 设置工作流的用户 + Long userId = SecurityFrameworkUtils.getLoginUserId(); + if (userId != null) { + FlowableUtils.setAuthenticatedUserId(userId); + } + // 过滤 + chain.doFilter(request, response); + } finally { + // 清理 + FlowableUtils.clearAuthenticatedUserId(); + } + } +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/web/package-info.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/web/package-info.java new file mode 100644 index 0000000..919006a --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/framework/web/package-info.java @@ -0,0 +1,4 @@ +/** + * bpm 模块的 web 配置 + */ +package com.win.module.bpm.framework.web; diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/package-info.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/package-info.java new file mode 100644 index 0000000..42183df --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/package-info.java @@ -0,0 +1,12 @@ +/** + * bpm 包下,业务流程管理(Business Process Management),我们放工作流的功能,基于 Flowable 6 版本实现。 + * 例如说:流程定义、表单配置、审核中心(我的申请、我的待办、我的已办)等等 + * + * bpm 解释:https://baike.baidu.com/item/BPM/1933 + * + * 1. Controller URL:以 /bpm/ 开头,避免和其它 Module 冲突 + * 2. DataObject 表名:以 bpm_ 开头,方便在数据库中区分 + * + * 注意,由于 Bpm 模块下,容易和其它模块重名,所以类名都加载 Bpm 的前缀~ + */ +package com.win.module.bpm; diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmCategoryService.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmCategoryService.java new file mode 100644 index 0000000..9b799ee --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmCategoryService.java @@ -0,0 +1,85 @@ +package com.win.module.bpm.service.definition; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.bpm.controller.admin.definition.vo.category.BpmCategoryPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.category.BpmCategorySaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmCategoryDO; +import jakarta.validation.Valid; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import static com.win.framework.common.util.collection.CollectionUtils.convertMap; + +/** + * BPM 流程分类 Service 接口 + * + * @author 芋道源码 + */ +public interface BpmCategoryService { + + /** + * 创建流程分类 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createCategory(@Valid BpmCategorySaveReqVO createReqVO); + + /** + * 更新流程分类 + * + * @param updateReqVO 更新信息 + */ + void updateCategory(@Valid BpmCategorySaveReqVO updateReqVO); + + /** + * 删除流程分类 + * + * @param id 编号 + */ + void deleteCategory(Long id); + + /** + * 获得流程分类 + * + * @param id 编号 + * @return BPM 流程分类 + */ + BpmCategoryDO getCategory(Long id); + + /** + * 获得流程分类分页 + * + * @param pageReqVO 分页查询 + * @return 流程分类分页 + */ + PageResult getCategoryPage(BpmCategoryPageReqVO pageReqVO); + + /** + * 获得流程分类 Map,基于指定编码 + * + * @param codes 编号数组 + * @return 流程分类 Map + */ + default Map getCategoryMap(Collection codes) { + return convertMap(getCategoryListByCode(codes), BpmCategoryDO::getCode); + } + + /** + * 获得流程分类列表,基于指定编码 + * + * @return 流程分类列表 + */ + List getCategoryListByCode(Collection codes); + + /** + * 获得流程分类列表,基于指定状态 + * + * @param status 状态 + * @return 流程分类列表 + */ + List getCategoryListByStatus(Integer status); + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmCategoryServiceImpl.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmCategoryServiceImpl.java new file mode 100644 index 0000000..27f9f3d --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmCategoryServiceImpl.java @@ -0,0 +1,111 @@ +package com.win.module.bpm.service.definition; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.definition.vo.category.BpmCategoryPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.category.BpmCategorySaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmCategoryDO; +import com.win.module.bpm.dal.mysql.category.BpmCategoryMapper; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.bpm.enums.ErrorCodeConstants.*; + +/** + * BPM 流程分类 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class BpmCategoryServiceImpl implements BpmCategoryService { + + @Resource + private BpmCategoryMapper bpmCategoryMapper; + + @Override + public Long createCategory(BpmCategorySaveReqVO createReqVO) { + // 校验唯一 + validateCategoryNameUnique(createReqVO); + validateCategoryCodeUnique(createReqVO); + // 插入 + BpmCategoryDO category = BeanUtils.toBean(createReqVO, BpmCategoryDO.class); + bpmCategoryMapper.insert(category); + return category.getId(); + } + + @Override + public void updateCategory(BpmCategorySaveReqVO updateReqVO) { + // 校验存在 + validateCategoryExists(updateReqVO.getId()); + validateCategoryNameUnique(updateReqVO); + validateCategoryCodeUnique(updateReqVO); + // 更新 + BpmCategoryDO updateObj = BeanUtils.toBean(updateReqVO, BpmCategoryDO.class); + bpmCategoryMapper.updateById(updateObj); + } + + private void validateCategoryNameUnique(BpmCategorySaveReqVO updateReqVO) { + BpmCategoryDO category = bpmCategoryMapper.selectByName(updateReqVO.getName()); + if (category == null + || ObjUtil.equal(category.getId(), updateReqVO.getId())) { + return; + } + throw exception(CATEGORY_NAME_DUPLICATE, updateReqVO.getName()); + } + + private void validateCategoryCodeUnique(BpmCategorySaveReqVO updateReqVO) { + BpmCategoryDO category = bpmCategoryMapper.selectByCode(updateReqVO.getCode()); + if (category == null + || ObjUtil.equal(category.getId(), updateReqVO.getId())) { + return; + } + throw exception(CATEGORY_CODE_DUPLICATE, updateReqVO.getCode()); + } + + @Override + public void deleteCategory(Long id) { + // 校验存在 + validateCategoryExists(id); + // 删除 + bpmCategoryMapper.deleteById(id); + } + + private void validateCategoryExists(Long id) { + if (bpmCategoryMapper.selectById(id) == null) { + throw exception(CATEGORY_NOT_EXISTS); + } + } + + @Override + public BpmCategoryDO getCategory(Long id) { + return bpmCategoryMapper.selectById(id); + } + + @Override + public PageResult getCategoryPage(BpmCategoryPageReqVO pageReqVO) { + return bpmCategoryMapper.selectPage(pageReqVO); + } + + @Override + public List getCategoryListByCode(Collection codes) { + if (CollUtil.isEmpty(codes)) { + return Collections.emptyList(); + } + return bpmCategoryMapper.selectListByCode(codes); + } + + @Override + public List getCategoryListByStatus(Integer status) { + return bpmCategoryMapper.selectListByStatus(status); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmFormService.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmFormService.java new file mode 100644 index 0000000..a6f9e82 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmFormService.java @@ -0,0 +1,85 @@ +package com.win.module.bpm.service.definition; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.module.bpm.controller.admin.definition.vo.form.BpmFormPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.form.BpmFormSaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmFormDO; +import jakarta.validation.Valid; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + + +/** + * 动态表单 Service 接口 + * + * @author @风里雾里 + */ +public interface BpmFormService { + + /** + * 创建动态表单 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createForm(@Valid BpmFormSaveReqVO createReqVO); + + /** + * 更新动态表单 + * + * @param updateReqVO 更新信息 + */ + void updateForm(@Valid BpmFormSaveReqVO updateReqVO); + + /** + * 删除动态表单 + * + * @param id 编号 + */ + void deleteForm(Long id); + + /** + * 获得动态表单 + * + * @param id 编号 + * @return 动态表单 + */ + BpmFormDO getForm(Long id); + + /** + * 获得动态表单列表 + * + * @return 动态表单列表 + */ + List getFormList(); + + /** + * 获得动态表单列表 + * + * @param ids 编号 + * @return 动态表单列表 + */ + List getFormList(Collection ids); + + /** + * 获得动态表单 Map + * + * @param ids 编号 + * @return 动态表单 Map + */ + default Map getFormMap(Collection ids) { + return CollectionUtils.convertMap(this.getFormList(ids), BpmFormDO::getId); + } + + /** + * 获得动态表单分页 + * + * @param pageReqVO 分页查询 + * @return 动态表单分页 + */ + PageResult getFormPage(BpmFormPageReqVO pageReqVO); + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmFormServiceImpl.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmFormServiceImpl.java new file mode 100644 index 0000000..3607d13 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmFormServiceImpl.java @@ -0,0 +1,114 @@ +package com.win.module.bpm.service.definition; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.definition.vo.form.BpmFormPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.form.BpmFormSaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmFormDO; +import com.win.module.bpm.dal.mysql.definition.BpmFormMapper; +import com.win.module.bpm.enums.ErrorCodeConstants; +import com.win.module.bpm.service.definition.dto.BpmFormFieldRespDTO; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.util.*; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 动态表单 Service 实现类 + * + * @author 风里雾里 + */ +@Service +@Validated +public class BpmFormServiceImpl implements BpmFormService { + + @Resource + private BpmFormMapper formMapper; + + @Override + public Long createForm(BpmFormSaveReqVO createReqVO) { + this.validateFields(createReqVO.getFields()); + // 插入 + BpmFormDO form = BeanUtils.toBean(createReqVO, BpmFormDO.class); + formMapper.insert(form); + // 返回 + return form.getId(); + } + + @Override + public void updateForm(BpmFormSaveReqVO updateReqVO) { + validateFields(updateReqVO.getFields()); + // 校验存在 + validateFormExists(updateReqVO.getId()); + // 更新 + BpmFormDO updateObj = BeanUtils.toBean(updateReqVO, BpmFormDO.class); + formMapper.updateById(updateObj); + } + + @Override + public void deleteForm(Long id) { + // 校验存在 + this.validateFormExists(id); + // 删除 + formMapper.deleteById(id); + } + + private void validateFormExists(Long id) { + if (formMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.FORM_NOT_EXISTS); + } + } + + @Override + public BpmFormDO getForm(Long id) { + return formMapper.selectById(id); + } + + @Override + public List getFormList() { + return formMapper.selectList(); + } + + @Override + public List getFormList(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return Collections.emptyList(); + } + return formMapper.selectBatchIds(ids); + } + + @Override + public PageResult getFormPage(BpmFormPageReqVO pageReqVO) { + return formMapper.selectPage(pageReqVO); + } + + /** + * 校验 Field,避免 field 重复 + * + * @param fields field 数组 + */ + private void validateFields(List fields) { + if (true) { // TODO 芋艿:兼容 Vue3 工作流:因为采用了新的表单设计器,所以暂时不校验 + return; + } + Map fieldMap = new HashMap<>(); // key 是 vModel,value 是 label + for (String field : fields) { + BpmFormFieldRespDTO fieldDTO = JsonUtils.parseObject(field, BpmFormFieldRespDTO.class); + Assert.notNull(fieldDTO); + String oldLabel = fieldMap.put(fieldDTO.getVModel(), fieldDTO.getLabel()); + // 如果不存在,则直接返回 + if (oldLabel == null) { + continue; + } + // 如果存在,则报错 + throw exception(ErrorCodeConstants.FORM_FIELD_REPEAT, oldLabel, fieldDTO.getLabel(), fieldDTO.getVModel()); + } + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmModelService.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmModelService.java new file mode 100644 index 0000000..e6ca1cb --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmModelService.java @@ -0,0 +1,88 @@ +package com.win.module.bpm.service.definition; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.bpm.controller.admin.definition.vo.model.BpmModelCreateReqVO; +import com.win.module.bpm.controller.admin.definition.vo.model.BpmModelPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.model.BpmModelUpdateReqVO; +import jakarta.validation.Valid; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.engine.repository.Model; + +/** + * Flowable流程模型接口 + * + * @author yunlongn + */ +public interface BpmModelService { + + /** + * 获得流程模型分页 + * + * @param pageVO 分页查询 + * @return 流程模型分页 + */ + PageResult getModelPage(BpmModelPageReqVO pageVO); + + /** + * 创建流程模型 + * + * @param modelVO 创建信息 + * @param bpmnXml BPMN XML + * @return 创建的流程模型的编号 + */ + String createModel(@Valid BpmModelCreateReqVO modelVO, String bpmnXml); + + /** + * 获得流程模块 + * + * @param id 编号 + * @return 流程模型 + */ + Model getModel(String id); + + /** + * 获得流程模型的 BPMN XML + * + * @param id 编号 + * @return BPMN XML + */ + byte[] getModelBpmnXML(String id); + + /** + * 修改流程模型 + * + * @param updateReqVO 更新信息 + */ + void updateModel(@Valid BpmModelUpdateReqVO updateReqVO); + + /** + * 将流程模型,部署成一个流程定义 + * + * @param id 编号 + */ + void deployModel(String id); + + /** + * 删除模型 + * + * @param id 编号 + */ + void deleteModel(String id); + + /** + * 修改模型的状态,实际更新的部署的流程定义的状态 + * + * @param id 编号 + * @param state 状态 + */ + void updateModelState(String id, Integer state); + + /** + * 获得流程定义编号对应的 BPMN Model + * + * @param processDefinitionId 流程定义编号 + * @return BPMN Model + */ + BpmnModel getBpmnModelByDefinitionId(String processDefinitionId); + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmModelServiceImpl.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmModelServiceImpl.java new file mode 100644 index 0000000..de70770 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmModelServiceImpl.java @@ -0,0 +1,278 @@ +package com.win.module.bpm.service.definition; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.common.util.object.PageUtils; +import com.win.framework.common.util.validation.ValidationUtils; +import com.win.module.bpm.controller.admin.definition.vo.model.BpmModelCreateReqVO; +import com.win.module.bpm.controller.admin.definition.vo.model.BpmModelPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.model.BpmModelUpdateReqVO; +import com.win.module.bpm.convert.definition.BpmModelConvert; +import com.win.module.bpm.dal.dataobject.definition.BpmFormDO; +import com.win.module.bpm.enums.definition.BpmModelFormTypeEnum; +import com.win.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateInvoker; +import com.win.module.bpm.framework.flowable.core.util.BpmnModelUtils; +import com.win.module.bpm.framework.flowable.core.util.FlowableUtils; +import com.win.module.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.bpmn.model.StartEvent; +import org.flowable.bpmn.model.UserTask; +import org.flowable.common.engine.impl.db.SuspensionState; +import org.flowable.engine.RepositoryService; +import org.flowable.engine.repository.Model; +import org.flowable.engine.repository.ModelQuery; +import org.flowable.engine.repository.ProcessDefinition; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; +import org.springframework.validation.annotation.Validated; + +import java.util.List; +import java.util.Objects; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.bpm.enums.ErrorCodeConstants.*; + +/** + * Flowable流程模型实现 + * 主要进行 Flowable {@link Model} 的维护 + * + * @author yunlongn + * @author 芋道源码 + * @author jason + */ +@Service +@Validated +@Slf4j +public class BpmModelServiceImpl implements BpmModelService { + + @Resource + private RepositoryService repositoryService; + @Resource + private BpmProcessDefinitionService processDefinitionService; + @Resource + private BpmFormService bpmFormService; + + @Resource + private BpmTaskCandidateInvoker taskCandidateInvoker; + + @Override + public PageResult getModelPage(BpmModelPageReqVO pageVO) { + ModelQuery modelQuery = repositoryService.createModelQuery(); + if (StrUtil.isNotBlank(pageVO.getKey())) { + modelQuery.modelKey(pageVO.getKey()); + } + if (StrUtil.isNotBlank(pageVO.getName())) { + modelQuery.modelNameLike("%" + pageVO.getName() + "%"); // 模糊匹配 + } + if (StrUtil.isNotBlank(pageVO.getCategory())) { + modelQuery.modelCategory(pageVO.getCategory()); + } + // 执行查询 + long count = modelQuery.count(); + if (count == 0) { + return PageResult.empty(count); + } + List models = modelQuery + .modelTenantId(FlowableUtils.getTenantId()) + .orderByCreateTime().desc() + .listPage(PageUtils.getStart(pageVO), pageVO.getPageSize()); + return new PageResult<>(models, count); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String createModel(@Valid BpmModelCreateReqVO createReqVO, String bpmnXml) { + if (!ValidationUtils.isXmlNCName(createReqVO.getKey())) { + throw exception(MODEL_KEY_VALID); + } + // 校验流程标识已经存在 + Model keyModel = getModelByKey(createReqVO.getKey()); + if (keyModel != null) { + throw exception(MODEL_KEY_EXISTS, createReqVO.getKey()); + } + + // 创建流程定义 + Model model = repositoryService.newModel(); + BpmModelConvert.INSTANCE.copyToCreateModel(model, createReqVO); + model.setTenantId(FlowableUtils.getTenantId()); + // 保存流程定义 + repositoryService.saveModel(model); + // 保存 BPMN XML + saveModelBpmnXml(model, bpmnXml); + return model.getId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) // 因为进行多个操作,所以开启事务 + public void updateModel(@Valid BpmModelUpdateReqVO updateReqVO) { + // 校验流程模型存在 + Model model = getModel(updateReqVO.getId()); + if (model == null) { + throw exception(MODEL_NOT_EXISTS); + } + + // 修改流程定义 + BpmModelConvert.INSTANCE.copyToUpdateModel(model, updateReqVO); + // 更新模型 + repositoryService.saveModel(model); + // 更新 BPMN XML + saveModelBpmnXml(model, updateReqVO.getBpmnXml()); + } + + @Override + @Transactional(rollbackFor = Exception.class) // 因为进行多个操作,所以开启事务 + public void deployModel(String id) { + // 1.1 校验流程模型存在 + Model model = getModel(id); + if (ObjectUtils.isEmpty(model)) { + throw exception(MODEL_NOT_EXISTS); + } + // 1.2 校验流程图 + byte[] bpmnBytes = getModelBpmnXML(model.getId()); + validateBpmnXml(bpmnBytes); + // 1.3 校验表单已配 + BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class); + BpmFormDO form = validateFormConfig(metaInfo); + // 1.4 校验任务分配规则已配置 + taskCandidateInvoker.validateBpmnConfig(bpmnBytes); + + // 2.1 创建流程定义 + String definitionId = processDefinitionService.createProcessDefinition(model, metaInfo, bpmnBytes, form); + + // 2.2 将老的流程定义进行挂起。也就是说,只有最新部署的流程定义,才可以发起任务。 + updateProcessDefinitionSuspended(model.getDeploymentId()); + + // 2.3 更新 model 的 deploymentId,进行关联 + ProcessDefinition definition = processDefinitionService.getProcessDefinition(definitionId); + model.setDeploymentId(definition.getDeploymentId()); + repositoryService.saveModel(model); + } + + private void validateBpmnXml(byte[] bpmnBytes) { + BpmnModel bpmnModel = BpmnModelUtils.getBpmnModel(bpmnBytes); + if (bpmnModel == null) { + throw exception(MODEL_NOT_EXISTS); + } + // 1. 没有 StartEvent + StartEvent startEvent = BpmnModelUtils.getStartEvent(bpmnModel); + if (startEvent == null) { + throw exception(MODEL_DEPLOY_FAIL_BPMN_START_EVENT_NOT_EXISTS); + } + // 2. 校验 UserTask 的 name 都配置了 + List userTasks = BpmnModelUtils.getBpmnModelElements(bpmnModel, UserTask.class); + userTasks.forEach(userTask -> { + if (StrUtil.isEmpty(userTask.getName())) { + throw exception(MODEL_DEPLOY_FAIL_BPMN_USER_TASK_NAME_NOT_EXISTS, userTask.getId()); + } + }); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteModel(String id) { + // 校验流程模型存在 + Model model = getModel(id); + if (model == null) { + throw exception(MODEL_NOT_EXISTS); + } + // 执行删除 + repositoryService.deleteModel(id); + // 禁用流程定义 + updateProcessDefinitionSuspended(model.getDeploymentId()); + } + + @Override + public void updateModelState(String id, Integer state) { + // 1.1 校验流程模型存在 + Model model = getModel(id); + if (model == null) { + throw exception(MODEL_NOT_EXISTS); + } + // 1.2 校验流程定义存在 + ProcessDefinition definition = processDefinitionService.getProcessDefinitionByDeploymentId(model.getDeploymentId()); + if (definition == null) { + throw exception(PROCESS_DEFINITION_NOT_EXISTS); + } + + // 2. 更新状态 + processDefinitionService.updateProcessDefinitionState(definition.getId(), state); + } + + @Override + public BpmnModel getBpmnModelByDefinitionId(String processDefinitionId) { + return repositoryService.getBpmnModel(processDefinitionId); + } + + /** + * 校验流程表单已配置 + * + * @param metaInfo 流程模型元数据 + * @return 表单配置 + */ + private BpmFormDO validateFormConfig(BpmModelMetaInfoRespDTO metaInfo) { + if (metaInfo == null || metaInfo.getFormType() == null) { + throw exception(MODEL_DEPLOY_FAIL_FORM_NOT_CONFIG); + } + // 校验表单存在 + if (Objects.equals(metaInfo.getFormType(), BpmModelFormTypeEnum.NORMAL.getType())) { + if (metaInfo.getFormId() == null) { + throw exception(MODEL_DEPLOY_FAIL_FORM_NOT_CONFIG); + } + BpmFormDO form = bpmFormService.getForm(metaInfo.getFormId()); + if (form == null) { + throw exception(FORM_NOT_EXISTS); + } + return form; + } else { + if (StrUtil.isEmpty(metaInfo.getFormCustomCreatePath()) || StrUtil.isEmpty(metaInfo.getFormCustomViewPath())) { + throw exception(MODEL_DEPLOY_FAIL_FORM_NOT_CONFIG); + } + return null; + } + } + + private void saveModelBpmnXml(Model model, String bpmnXml) { + if (StrUtil.isEmpty(bpmnXml)) { + return; + } + repositoryService.addModelEditorSource(model.getId(), StrUtil.utf8Bytes(bpmnXml)); + } + + /** + * 挂起 deploymentId 对应的流程定义 + * + * 注意:这里一个 deploymentId 只关联一个流程定义 + * + * @param deploymentId 流程发布Id + */ + private void updateProcessDefinitionSuspended(String deploymentId) { + if (StrUtil.isEmpty(deploymentId)) { + return; + } + ProcessDefinition oldDefinition = processDefinitionService.getProcessDefinitionByDeploymentId(deploymentId); + if (oldDefinition == null) { + return; + } + processDefinitionService.updateProcessDefinitionState(oldDefinition.getId(), SuspensionState.SUSPENDED.getStateCode()); + } + + private Model getModelByKey(String key) { + return repositoryService.createModelQuery().modelKey(key).singleResult(); + } + + @Override + public Model getModel(String id) { + return repositoryService.getModel(id); + } + + @Override + public byte[] getModelBpmnXML(String id) { + return repositoryService.getModelEditorSource(id); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessDefinitionService.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessDefinitionService.java new file mode 100644 index 0000000..8fc5318 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessDefinitionService.java @@ -0,0 +1,162 @@ +package com.win.module.bpm.service.definition; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmFormDO; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; +import com.win.module.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.engine.repository.Deployment; +import org.flowable.engine.repository.Model; +import org.flowable.engine.repository.ProcessDefinition; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static com.win.framework.common.util.collection.CollectionUtils.convertMap; + +/** + * Flowable流程定义接口 + * + * @author yunlong.li + * @author ZJQ + * @author 芋道源码 + */ +public interface BpmProcessDefinitionService { + + /** + * 获得流程定义分页 + * + * @param pageReqVO 分页入参 + * @return 流程定义 Page + */ + PageResult getProcessDefinitionPage(BpmProcessDefinitionPageReqVO pageReqVO); + + /** + * 获得流程定义列表 + * + * @param suspensionState 中断状态 + * @return 流程定义列表 + */ + List getProcessDefinitionListBySuspensionState(Integer suspensionState); + + /** + * 基于流程模型,创建流程定义 + * + * @param model 流程模型 + * @param modelMetaInfo 流程模型元信息 + * @param bpmnBytes BPMN XML 字节数组 + * @param form 表单 + * @return 流程编号 + */ + String createProcessDefinition(Model model, BpmModelMetaInfoRespDTO modelMetaInfo, byte[] bpmnBytes, BpmFormDO form); + + /** + * 更新流程定义状态 + * + * @param id 流程定义的编号 + * @param state 状态 + */ + void updateProcessDefinitionState(String id, Integer state); + + /** + * 获得流程定义对应的 BPMN + * + * @param id 流程定义编号 + * @return BPMN + */ + BpmnModel getProcessDefinitionBpmnModel(String id); + + /** + * 获得流程定义的信息 + * + * @param id 流程定义编号 + * @return 流程定义信息 + */ + BpmProcessDefinitionInfoDO getProcessDefinitionInfo(String id); + + /** + * 获得流程定义的信息 List + * + * @param ids 流程定义编号数组 + * @return 流程额定义信息数组 + */ + List getProcessDefinitionInfoList(Collection ids); + + default Map getProcessDefinitionInfoMap(Set ids) { + return convertMap(getProcessDefinitionInfoList(ids), BpmProcessDefinitionInfoDO::getProcessDefinitionId); + } + + /** + * 获得流程定义编号对应的 ProcessDefinition + * + * @param id 流程定义编号 + * @return 流程定义 + */ + ProcessDefinition getProcessDefinition(String id); + + /** + * 获得 ids 对应的 ProcessDefinition 数组 + * + * @param ids 编号的数组 + * @return 流程定义的数组 + */ + List getProcessDefinitionList(Set ids); + + default Map getProcessDefinitionMap(Set ids) { + return convertMap(getProcessDefinitionList(ids), ProcessDefinition::getId); + } + + /** + * 获得 deploymentId 对应的 ProcessDefinition + * + * @param deploymentId 部署编号 + * @return 流程定义 + */ + ProcessDefinition getProcessDefinitionByDeploymentId(String deploymentId); + + /** + * 获得 deploymentIds 对应的 ProcessDefinition 数组 + * + * @param deploymentIds 部署编号的数组 + * @return 流程定义的数组 + */ + List getProcessDefinitionListByDeploymentIds(Set deploymentIds); + + /** + * 获得流程定义标识对应的激活的流程定义 + * + * @param key 流程定义的标识 + * @return 流程定义 + */ + ProcessDefinition getActiveProcessDefinition(String key); + + /** + * 获得 ids 对应的 Deployment Map + * + * @param ids 部署编号的数组 + * @return 流程部署 Map + */ + default Map getDeploymentMap(Set ids) { + return convertMap(getDeploymentList(ids), Deployment::getId); + } + + /** + * 获得 ids 对应的 Deployment 数组 + * + * @param ids 部署编号的数组 + * @return 流程部署的数组 + */ + List getDeploymentList(Set ids); + + /** + * 获得 id 对应的 Deployment + * + * @param id 部署编号 + * @return 流程部署 + */ + Deployment getDeployment(String id); + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java new file mode 100644 index 0000000..d999806 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java @@ -0,0 +1,202 @@ +package com.win.module.bpm.service.definition; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.common.util.object.PageUtils; +import com.win.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmFormDO; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; +import com.win.module.bpm.dal.mysql.definition.BpmProcessDefinitionInfoMapper; +import com.win.module.bpm.framework.flowable.core.enums.BpmnModelConstants; +import com.win.module.bpm.framework.flowable.core.util.FlowableUtils; +import com.win.module.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.common.engine.impl.db.SuspensionState; +import org.flowable.engine.RepositoryService; +import org.flowable.engine.repository.Deployment; +import org.flowable.engine.repository.Model; +import org.flowable.engine.repository.ProcessDefinition; +import org.flowable.engine.repository.ProcessDefinitionQuery; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.util.*; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.collection.CollectionUtils.addIfNotNull; +import static com.win.module.bpm.enums.ErrorCodeConstants.PROCESS_DEFINITION_KEY_NOT_MATCH; +import static com.win.module.bpm.enums.ErrorCodeConstants.PROCESS_DEFINITION_NAME_NOT_MATCH; +import static java.util.Collections.emptyList; + +/** + * 流程定义实现 + * 主要进行 Flowable {@link ProcessDefinition} 和 {@link Deployment} 的维护 + * + * @author yunlongn + * @author ZJQ + * @author 芋道源码 + */ +@Service +@Validated +@Slf4j +public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionService { + + @Resource + private RepositoryService repositoryService; + + @Resource + private BpmProcessDefinitionInfoMapper processDefinitionMapper; + + @Override + public ProcessDefinition getProcessDefinition(String id) { + return repositoryService.getProcessDefinition(id); + } + + @Override + public List getProcessDefinitionList(Set ids) { + return repositoryService.createProcessDefinitionQuery().processDefinitionIds(ids).list(); + } + + @Override + public ProcessDefinition getProcessDefinitionByDeploymentId(String deploymentId) { + if (StrUtil.isEmpty(deploymentId)) { + return null; + } + return repositoryService.createProcessDefinitionQuery().deploymentId(deploymentId).singleResult(); + } + + @Override + public List getProcessDefinitionListByDeploymentIds(Set deploymentIds) { + if (CollUtil.isEmpty(deploymentIds)) { + return emptyList(); + } + return repositoryService.createProcessDefinitionQuery().deploymentIds(deploymentIds).list(); + } + + @Override + public ProcessDefinition getActiveProcessDefinition(String key) { + return repositoryService.createProcessDefinitionQuery().processDefinitionKey(key).active().singleResult(); + } + + @Override + public List getDeploymentList(Set ids) { + if (CollUtil.isEmpty(ids)) { + return emptyList(); + } + List list = new ArrayList<>(ids.size()); + for (String id : ids) { + addIfNotNull(list, getDeployment(id)); + } + return list; + } + + @Override + public Deployment getDeployment(String id) { + if (StrUtil.isEmpty(id)) { + return null; + } + return repositoryService.createDeploymentQuery().deploymentId(id).singleResult(); + } + + @Override + public String createProcessDefinition(Model model, BpmModelMetaInfoRespDTO modelMetaInfo, + byte[] bpmnBytes, BpmFormDO form) { + // 创建 Deployment 部署 + Deployment deploy = repositoryService.createDeployment() + .key(model.getKey()).name(model.getName()).category(model.getCategory()) + .addBytes(model.getKey() + BpmnModelConstants.BPMN_FILE_SUFFIX, bpmnBytes) + .tenantId(FlowableUtils.getTenantId()) + .disableSchemaValidation() // 禁用 XML Schema 验证,因为有自定义的属性 + .deploy(); + + // 设置 ProcessDefinition 的 category 分类 + ProcessDefinition definition = repositoryService.createProcessDefinitionQuery() + .deploymentId(deploy.getId()).singleResult(); + repositoryService.setProcessDefinitionCategory(definition.getId(), model.getCategory()); + // 注意 1,ProcessDefinition 的 key 和 name 是通过 BPMN 中的 的 id 和 name 决定 + // 注意 2,目前该项目的设计上,需要保证 Model、Deployment、ProcessDefinition 使用相同的 key,保证关联性。 + // 否则,会导致 ProcessDefinition 的分页无法查询到。 + if (!Objects.equals(definition.getKey(), model.getKey())) { + throw exception(PROCESS_DEFINITION_KEY_NOT_MATCH, model.getKey(), definition.getKey()); + } + if (!Objects.equals(definition.getName(), model.getName())) { + throw exception(PROCESS_DEFINITION_NAME_NOT_MATCH, model.getName(), definition.getName()); + } + + // 插入拓展表 + BpmProcessDefinitionInfoDO definitionDO = BeanUtils.toBean(modelMetaInfo, BpmProcessDefinitionInfoDO.class) + .setModelId(model.getId()).setProcessDefinitionId(definition.getId()); + if (form != null) { + definitionDO.setFormFields(form.getFields()).setFormConf(form.getConf()); + } + processDefinitionMapper.insert(definitionDO); + return definition.getId(); + } + + @Override + public void updateProcessDefinitionState(String id, Integer state) { + // 激活 + if (Objects.equals(SuspensionState.ACTIVE.getStateCode(), state)) { + repositoryService.activateProcessDefinitionById(id, false, null); + return; + } + // 挂起 + if (Objects.equals(SuspensionState.SUSPENDED.getStateCode(), state)) { + // suspendProcessInstances = false,进行中的任务,不进行挂起。 + // 原因:只要新的流程不允许发起即可,老流程继续可以执行。 + repositoryService.suspendProcessDefinitionById(id, false, null); + return; + } + log.error("[updateProcessDefinitionState][流程定义({}) 修改未知状态({})]", id, state); + } + + @Override + public BpmnModel getProcessDefinitionBpmnModel(String id) { + return repositoryService.getBpmnModel(id); + } + + @Override + public BpmProcessDefinitionInfoDO getProcessDefinitionInfo(String id) { + return processDefinitionMapper.selectByProcessDefinitionId(id); + } + + @Override + public List getProcessDefinitionInfoList(Collection ids) { + return processDefinitionMapper.selectListByProcessDefinitionIds(ids); + } + + @Override + public PageResult getProcessDefinitionPage(BpmProcessDefinitionPageReqVO pageVO) { + ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery(); + if (StrUtil.isNotBlank(pageVO.getKey())) { + query.processDefinitionKey(pageVO.getKey()); + } + // 执行查询 + long count = query.count(); + if (count == 0) { + return PageResult.empty(count); + } + List list = query.orderByProcessDefinitionVersion().desc() + .listPage(PageUtils.getStart(pageVO), pageVO.getPageSize()); + return new PageResult<>(list, count); + } + + @Override + public List getProcessDefinitionListBySuspensionState(Integer suspensionState) { + // 拼接查询条件 + ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery(); + if (Objects.equals(SuspensionState.SUSPENDED.getStateCode(), suspensionState)) { + query.suspended(); + } else if (Objects.equals(SuspensionState.ACTIVE.getStateCode(), suspensionState)) { + query.active(); + } + // 执行查询 + query.processDefinitionTenantId(FlowableUtils.getTenantId()); + return query.list(); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessExpressionService.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessExpressionService.java new file mode 100644 index 0000000..073ce70 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessExpressionService.java @@ -0,0 +1,54 @@ +package com.win.module.bpm.service.definition; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.bpm.controller.admin.definition.vo.expression.BpmProcessExpressionPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.expression.BpmProcessExpressionSaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessExpressionDO; +import jakarta.validation.Valid; + +/** + * BPM 流程表达式 Service 接口 + * + * @author 芋道源码 + */ +public interface BpmProcessExpressionService { + + /** + * 创建流程表达式 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProcessExpression(@Valid BpmProcessExpressionSaveReqVO createReqVO); + + /** + * 更新流程表达式 + * + * @param updateReqVO 更新信息 + */ + void updateProcessExpression(@Valid BpmProcessExpressionSaveReqVO updateReqVO); + + /** + * 删除流程表达式 + * + * @param id 编号 + */ + void deleteProcessExpression(Long id); + + /** + * 获得流程表达式 + * + * @param id 编号 + * @return 流程表达式 + */ + BpmProcessExpressionDO getProcessExpression(Long id); + + /** + * 获得流程表达式分页 + * + * @param pageReqVO 分页查询 + * @return 流程表达式分页 + */ + PageResult getProcessExpressionPage(BpmProcessExpressionPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessExpressionServiceImpl.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessExpressionServiceImpl.java new file mode 100644 index 0000000..5c8905e --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessExpressionServiceImpl.java @@ -0,0 +1,70 @@ +package com.win.module.bpm.service.definition; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.definition.vo.expression.BpmProcessExpressionPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.expression.BpmProcessExpressionSaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessExpressionDO; +import com.win.module.bpm.dal.mysql.definition.BpmProcessExpressionMapper; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.bpm.enums.ErrorCodeConstants.PROCESS_EXPRESSION_NOT_EXISTS; + +/** + * BPM 流程表达式 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class BpmProcessExpressionServiceImpl implements BpmProcessExpressionService { + + @Resource + private BpmProcessExpressionMapper processExpressionMapper; + + @Override + public Long createProcessExpression(BpmProcessExpressionSaveReqVO createReqVO) { + // 插入 + BpmProcessExpressionDO processExpression = BeanUtils.toBean(createReqVO, BpmProcessExpressionDO.class); + processExpressionMapper.insert(processExpression); + // 返回 + return processExpression.getId(); + } + + @Override + public void updateProcessExpression(BpmProcessExpressionSaveReqVO updateReqVO) { + // 校验存在 + validateProcessExpressionExists(updateReqVO.getId()); + // 更新 + BpmProcessExpressionDO updateObj = BeanUtils.toBean(updateReqVO, BpmProcessExpressionDO.class); + processExpressionMapper.updateById(updateObj); + } + + @Override + public void deleteProcessExpression(Long id) { + // 校验存在 + validateProcessExpressionExists(id); + // 删除 + processExpressionMapper.deleteById(id); + } + + private void validateProcessExpressionExists(Long id) { + if (processExpressionMapper.selectById(id) == null) { + throw exception(PROCESS_EXPRESSION_NOT_EXISTS); + } + } + + @Override + public BpmProcessExpressionDO getProcessExpression(Long id) { + return processExpressionMapper.selectById(id); + } + + @Override + public PageResult getProcessExpressionPage(BpmProcessExpressionPageReqVO pageReqVO) { + return processExpressionMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessListenerService.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessListenerService.java new file mode 100644 index 0000000..9d65cb7 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessListenerService.java @@ -0,0 +1,54 @@ +package com.win.module.bpm.service.definition; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.bpm.controller.admin.definition.vo.listener.BpmProcessListenerPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.listener.BpmProcessListenerSaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessListenerDO; +import jakarta.validation.Valid; + +/** + * BPM 流程监听器 Service 接口 + * + * @author 芋道源码 + */ +public interface BpmProcessListenerService { + + /** + * 创建流程监听器 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProcessListener(@Valid BpmProcessListenerSaveReqVO createReqVO); + + /** + * 更新流程监听器 + * + * @param updateReqVO 更新信息 + */ + void updateProcessListener(@Valid BpmProcessListenerSaveReqVO updateReqVO); + + /** + * 删除流程监听器 + * + * @param id 编号 + */ + void deleteProcessListener(Long id); + + /** + * 获得流程监听器 + * + * @param id 编号 + * @return 流程监听器 + */ + BpmProcessListenerDO getProcessListener(Long id); + + /** + * 获得流程监听器分页 + * + * @param pageReqVO 分页查询 + * @return 流程监听器分页 + */ + PageResult getProcessListenerPage(BpmProcessListenerPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessListenerServiceImpl.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessListenerServiceImpl.java new file mode 100644 index 0000000..0be3373 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmProcessListenerServiceImpl.java @@ -0,0 +1,102 @@ +package com.win.module.bpm.service.definition; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.definition.vo.listener.BpmProcessListenerPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.listener.BpmProcessListenerSaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmProcessListenerDO; +import com.win.module.bpm.dal.mysql.definition.BpmProcessListenerMapper; +import com.win.module.bpm.enums.definition.BpmProcessListenerType; +import com.win.module.bpm.enums.definition.BpmProcessListenerValueType; +import jakarta.annotation.Resource; +import org.flowable.engine.delegate.JavaDelegate; +import org.flowable.engine.delegate.TaskListener; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.bpm.enums.ErrorCodeConstants.*; + +/** + * BPM 流程监听器 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class BpmProcessListenerServiceImpl implements BpmProcessListenerService { + + @Resource + private BpmProcessListenerMapper processListenerMapper; + + @Override + public Long createProcessListener(BpmProcessListenerSaveReqVO createReqVO) { + // 校验 + validateCreateProcessListenerValue(createReqVO); + // 插入 + BpmProcessListenerDO processListener = BeanUtils.toBean(createReqVO, BpmProcessListenerDO.class); + processListenerMapper.insert(processListener); + return processListener.getId(); + } + + @Override + public void updateProcessListener(BpmProcessListenerSaveReqVO updateReqVO) { + // 校验存在 + validateProcessListenerExists(updateReqVO.getId()); + validateCreateProcessListenerValue(updateReqVO); + // 更新 + BpmProcessListenerDO updateObj = BeanUtils.toBean(updateReqVO, BpmProcessListenerDO.class); + processListenerMapper.updateById(updateObj); + } + + private void validateCreateProcessListenerValue(BpmProcessListenerSaveReqVO createReqVO) { + // class 类型 + if (createReqVO.getValueType().equals(BpmProcessListenerValueType.CLASS.getType())) { + try { + Class clazz = Class.forName(createReqVO.getValue()); + if (createReqVO.getType().equals(BpmProcessListenerType.EXECUTION.getType()) + && !JavaDelegate.class.isAssignableFrom(clazz)) { + throw exception(PROCESS_LISTENER_CLASS_IMPLEMENTS_ERROR, createReqVO.getValue(), + JavaDelegate.class.getName()); + } else if (createReqVO.getType().equals(BpmProcessListenerType.TASK.getType()) + && !TaskListener.class.isAssignableFrom(clazz)) { + throw exception(PROCESS_LISTENER_CLASS_IMPLEMENTS_ERROR, createReqVO.getValue(), + TaskListener.class.getName()); + } + } catch (ClassNotFoundException e) { + throw exception(PROCESS_LISTENER_CLASS_NOT_FOUND, createReqVO.getValue()); + } + return; + } + // 表达式 + if (!StrUtil.startWith(createReqVO.getValue(), "${") || !StrUtil.endWith(createReqVO.getValue(), "}")) { + throw exception(PROCESS_LISTENER_EXPRESSION_INVALID, createReqVO.getValue()); + } + } + + @Override + public void deleteProcessListener(Long id) { + // 校验存在 + validateProcessListenerExists(id); + // 删除 + processListenerMapper.deleteById(id); + } + + private void validateProcessListenerExists(Long id) { + if (processListenerMapper.selectById(id) == null) { + throw exception(PROCESS_LISTENER_NOT_EXISTS); + } + } + + @Override + public BpmProcessListenerDO getProcessListener(Long id) { + return processListenerMapper.selectById(id); + } + + @Override + public PageResult getProcessListenerPage(BpmProcessListenerPageReqVO pageReqVO) { + return processListenerMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmUserGroupService.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmUserGroupService.java new file mode 100644 index 0000000..22a1ff3 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmUserGroupService.java @@ -0,0 +1,82 @@ +package com.win.module.bpm.service.definition; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.bpm.controller.admin.definition.vo.group.BpmUserGroupPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.group.BpmUserGroupSaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmUserGroupDO; +import jakarta.validation.Valid; + +import java.util.Collection; +import java.util.List; + +/** + * 用户组 Service 接口 + * + * @author 芋道源码 + */ +public interface BpmUserGroupService { + + /** + * 创建用户组 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createUserGroup(@Valid BpmUserGroupSaveReqVO createReqVO); + + /** + * 更新用户组 + * + * @param updateReqVO 更新信息 + */ + void updateUserGroup(@Valid BpmUserGroupSaveReqVO updateReqVO); + + /** + * 删除用户组 + * + * @param id 编号 + */ + void deleteUserGroup(Long id); + + /** + * 获得用户组 + * + * @param id 编号 + * @return 用户组 + */ + BpmUserGroupDO getUserGroup(Long id); + + /** + * 获得用户组列表 + * + * @param ids 编号 + * @return 用户组列表 + */ + List getUserGroupList(Collection ids); + + /** + * 获得指定状态的用户组列表 + * + * @param status 状态 + * @return 用户组列表 + */ + List getUserGroupListByStatus(Integer status); + + /** + * 获得用户组分页 + * + * @param pageReqVO 分页查询 + * @return 用户组分页 + */ + PageResult getUserGroupPage(BpmUserGroupPageReqVO pageReqVO); + + /** + * 校验用户组们是否有效。如下情况,视为无效: + * 1. 用户组编号不存在 + * 2. 用户组被禁用 + * + * @param ids 用户组编号数组 + */ + void validUserGroups(Collection ids); + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmUserGroupServiceImpl.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmUserGroupServiceImpl.java new file mode 100644 index 0000000..632f426 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/BpmUserGroupServiceImpl.java @@ -0,0 +1,107 @@ +package com.win.module.bpm.service.definition; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.controller.admin.definition.vo.group.BpmUserGroupPageReqVO; +import com.win.module.bpm.controller.admin.definition.vo.group.BpmUserGroupSaveReqVO; +import com.win.module.bpm.dal.dataobject.definition.BpmUserGroupDO; +import com.win.module.bpm.dal.mysql.definition.BpmUserGroupMapper; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.collection.CollectionUtils.convertMap; +import static com.win.module.bpm.enums.ErrorCodeConstants.USER_GROUP_IS_DISABLE; +import static com.win.module.bpm.enums.ErrorCodeConstants.USER_GROUP_NOT_EXISTS; + +/** + * 用户组 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class BpmUserGroupServiceImpl implements BpmUserGroupService { + + @Resource + private BpmUserGroupMapper userGroupMapper; + + @Override + public Long createUserGroup(BpmUserGroupSaveReqVO createReqVO) { + BpmUserGroupDO userGroup = BeanUtils.toBean(createReqVO, BpmUserGroupDO.class); + userGroupMapper.insert(userGroup); + return userGroup.getId(); + } + + @Override + public void updateUserGroup(BpmUserGroupSaveReqVO updateReqVO) { + // 校验存在 + validateUserGroupExists(updateReqVO.getId()); + // 更新 + BpmUserGroupDO updateObj = BeanUtils.toBean(updateReqVO, BpmUserGroupDO.class); + userGroupMapper.updateById(updateObj); + } + + @Override + public void deleteUserGroup(Long id) { + // 校验存在 + this.validateUserGroupExists(id); + // 删除 + userGroupMapper.deleteById(id); + } + + private void validateUserGroupExists(Long id) { + if (userGroupMapper.selectById(id) == null) { + throw exception(USER_GROUP_NOT_EXISTS); + } + } + + @Override + public BpmUserGroupDO getUserGroup(Long id) { + return userGroupMapper.selectById(id); + } + + @Override + public List getUserGroupList(Collection ids) { + return userGroupMapper.selectBatchIds(ids); + } + + + @Override + public List getUserGroupListByStatus(Integer status) { + return userGroupMapper.selectListByStatus(status); + } + + @Override + public PageResult getUserGroupPage(BpmUserGroupPageReqVO pageReqVO) { + return userGroupMapper.selectPage(pageReqVO); + } + + @Override + public void validUserGroups(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 获得用户组信息 + List userGroups = userGroupMapper.selectBatchIds(ids); + Map userGroupMap = convertMap(userGroups, BpmUserGroupDO::getId); + // 校验 + ids.forEach(id -> { + BpmUserGroupDO userGroup = userGroupMap.get(id); + if (userGroup == null) { + throw exception(USER_GROUP_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(userGroup.getStatus())) { + throw exception(USER_GROUP_IS_DISABLE, userGroup.getName()); + } + }); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/dto/BpmFormFieldRespDTO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/dto/BpmFormFieldRespDTO.java new file mode 100644 index 0000000..107652b --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/dto/BpmFormFieldRespDTO.java @@ -0,0 +1,25 @@ +package com.win.module.bpm.service.definition.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * Bpm 表单的 Field 表单项 Response DTO + * 字段的定义,可见 https://github.com/JakHuang/form-generator/issues/46 文档 + * + * @author 芋道源码 + */ +@Data +public class BpmFormFieldRespDTO { + + /** + * 表单标题 + */ + private String label; + /** + * 表单字段的属性名,可自定义 + */ + @JsonProperty(value = "vModel") + private String vModel; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java new file mode 100644 index 0000000..ea06043 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/dto/BpmModelMetaInfoRespDTO.java @@ -0,0 +1,46 @@ +package com.win.module.bpm.service.definition.dto; + +import com.win.module.bpm.enums.definition.BpmModelFormTypeEnum; +import lombok.Data; + +/** + * BPM 流程 MetaInfo Response DTO + * 主要用于 { Model#setMetaInfo(String)} 的存储 + * + * 最终,它的字段和 {@link com.win.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO} 是一致的 + * + * @author 芋道源码 + */ +@Data +public class BpmModelMetaInfoRespDTO { + + /** + * 流程图标 + */ + private String icon; + /** + * 流程描述 + */ + private String description; + + /** + * 表单类型 + */ + private Integer formType; + /** + * 表单编号 + * 在表单类型为 {@link BpmModelFormTypeEnum#NORMAL} 时 + */ + private Long formId; + /** + * 自定义表单的提交路径,使用 Vue 的路由地址 + * 在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时 + */ + private String formCustomCreatePath; + /** + * 自定义表单的查看路径,使用 Vue 的路由地址 + * 在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时 + */ + private String formCustomViewPath; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java new file mode 100644 index 0000000..1c90cbc --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java @@ -0,0 +1,81 @@ +package com.win.module.bpm.service.definition.dto; + +import com.win.module.bpm.enums.definition.BpmModelFormTypeEnum; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +/** + * 流程定义创建 Request DTO + */ +@Data +public class BpmProcessDefinitionCreateReqDTO { + + // ========== 模型相关 ========== + + /** + * 流程模型的编号 + */ + @NotEmpty(message = "流程模型编号不能为空") + private String modelId; + /** + * 流程标识 + */ + @NotEmpty(message = "流程标识不能为空") + private String key; + /** + * 流程名称 + */ + @NotEmpty(message = "流程名称不能为空") + private String name; + /** + * 流程描述 + */ + private String description; + /** + * 流程分类 + */ + @NotEmpty(message = "流程分类不能为空") + private String category; + /** + * BPMN XML + */ + @NotEmpty(message = "BPMN XML 不能为空") + private byte[] bpmnBytes; + + // ========== 表单相关 ========== + + /** + * 表单类型 + */ + @NotNull(message = "表单类型不能为空") + private Integer formType; + /** + * 动态表单编号 + * 在表单类型为 {@link BpmModelFormTypeEnum#NORMAL} 时 + */ + private Long formId; + /** + * 表单的配置 + * 在表单类型为 {@link BpmModelFormTypeEnum#NORMAL} 时 + */ + private String formConf; + /** + * 表单项的数组 + * 在表单类型为 {@link BpmModelFormTypeEnum#NORMAL} 时 + */ + private List formFields; + /** + * 自定义表单的提交路径,使用 Vue 的路由地址 + * 在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时 + */ + private String formCustomCreatePath; + /** + * 自定义表单的查看路径,使用 Vue 的路由地址 + * 在表单类型为 {@link BpmModelFormTypeEnum#CUSTOM} 时 + */ + private String formCustomViewPath; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/BpmMessageService.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/BpmMessageService.java new file mode 100644 index 0000000..868b814 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/BpmMessageService.java @@ -0,0 +1,38 @@ +package com.win.module.bpm.service.message; + +import com.win.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; +import com.win.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; +import com.win.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; +import jakarta.validation.Valid; + +/** + * BPM 消息 Service 接口 + * + * TODO 芋艿:未来支持消息的可配置;不同的流程,在什么场景下,需要发送什么消息,消息的内容是什么; + * + * @author 芋道源码 + */ +public interface BpmMessageService { + + /** + * 发送流程实例被通过的消息 + * + * @param reqDTO 发送信息 + */ + void sendMessageWhenProcessInstanceApprove(@Valid BpmMessageSendWhenProcessInstanceApproveReqDTO reqDTO); + + /** + * 发送流程实例被不通过的消息 + * + * @param reqDTO 发送信息 + */ + void sendMessageWhenProcessInstanceReject(@Valid BpmMessageSendWhenProcessInstanceRejectReqDTO reqDTO); + + /** + * 发送任务被分配的消息 + * + * @param reqDTO 发送信息 + */ + void sendMessageWhenTaskAssigned(@Valid BpmMessageSendWhenTaskCreatedReqDTO reqDTO); + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/BpmMessageServiceImpl.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/BpmMessageServiceImpl.java new file mode 100644 index 0000000..fd095be --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/BpmMessageServiceImpl.java @@ -0,0 +1,68 @@ +package com.win.module.bpm.service.message; + +import com.win.framework.web.config.WebProperties; +import com.win.module.bpm.convert.message.BpmMessageConvert; +import com.win.module.bpm.enums.message.BpmMessageEnum; +import com.win.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; +import com.win.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO; +import com.win.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; +import com.win.module.system.api.sms.SmsSendApi; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.util.HashMap; +import java.util.Map; + +/** + * BPM 消息 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +@Slf4j +public class BpmMessageServiceImpl implements BpmMessageService { + + @Resource + private SmsSendApi smsSendApi; + + @Resource + private WebProperties webProperties; + + @Override + public void sendMessageWhenProcessInstanceApprove(BpmMessageSendWhenProcessInstanceApproveReqDTO reqDTO) { + Map templateParams = new HashMap<>(); + templateParams.put("processInstanceName", reqDTO.getProcessInstanceName()); + templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId())); + smsSendApi.sendSingleSmsToAdmin(BpmMessageConvert.INSTANCE.convert(reqDTO.getStartUserId(), + BpmMessageEnum.PROCESS_INSTANCE_APPROVE.getSmsTemplateCode(), templateParams)); + } + + @Override + public void sendMessageWhenProcessInstanceReject(BpmMessageSendWhenProcessInstanceRejectReqDTO reqDTO) { + Map templateParams = new HashMap<>(); + templateParams.put("processInstanceName", reqDTO.getProcessInstanceName()); + templateParams.put("reason", reqDTO.getReason()); + templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId())); + smsSendApi.sendSingleSmsToAdmin(BpmMessageConvert.INSTANCE.convert(reqDTO.getStartUserId(), + BpmMessageEnum.PROCESS_INSTANCE_REJECT.getSmsTemplateCode(), templateParams)); + } + + @Override + public void sendMessageWhenTaskAssigned(BpmMessageSendWhenTaskCreatedReqDTO reqDTO) { + Map templateParams = new HashMap<>(); + templateParams.put("processInstanceName", reqDTO.getProcessInstanceName()); + templateParams.put("taskName", reqDTO.getTaskName()); + templateParams.put("startUserNickname", reqDTO.getStartUserNickname()); + templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId())); + smsSendApi.sendSingleSmsToAdmin(BpmMessageConvert.INSTANCE.convert(reqDTO.getAssigneeUserId(), + BpmMessageEnum.TASK_ASSIGNED.getSmsTemplateCode(), templateParams)); + } + + private String getProcessInstanceDetailUrl(String taskId) { + return webProperties.getAdminUi().getUrl() + "/bpm/process-instance/detail?id=" + taskId; + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java new file mode 100644 index 0000000..ee3d0be --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java @@ -0,0 +1,26 @@ +package com.win.module.bpm.service.message.dto; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * BPM 发送流程实例被通过 Request DTO + */ +@Data +public class BpmMessageSendWhenProcessInstanceApproveReqDTO { + + /** + * 流程实例的编号 + */ + @NotEmpty(message = "流程实例的编号不能为空") + private String processInstanceId; + /** + * 流程实例的名字 + */ + @NotEmpty(message = "流程实例的名字不能为空") + private String processInstanceName; + @NotNull(message = "发起人的用户编号") + private Long startUserId; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java new file mode 100644 index 0000000..e646006 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java @@ -0,0 +1,32 @@ +package com.win.module.bpm.service.message.dto; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * BPM 发送流程实例被不通过 Request DTO + */ +@Data +public class BpmMessageSendWhenProcessInstanceRejectReqDTO { + + /** + * 流程实例的编号 + */ + @NotEmpty(message = "流程实例的编号不能为空") + private String processInstanceId; + /** + * 流程实例的名字 + */ + @NotEmpty(message = "流程实例的名字不能为空") + private String processInstanceName; + @NotNull(message = "发起人的用户编号") + private Long startUserId; + + /** + * 不通过理由 + */ + @NotEmpty(message = "不通过理由不能为空") + private String reason; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java new file mode 100644 index 0000000..871baf3 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java @@ -0,0 +1,45 @@ +package com.win.module.bpm.service.message.dto; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * BPM 发送任务被分配 Request DTO + */ +@Data +public class BpmMessageSendWhenTaskCreatedReqDTO { + + /** + * 流程实例的编号 + */ + @NotEmpty(message = "流程实例的编号不能为空") + private String processInstanceId; + /** + * 流程实例的名字 + */ + @NotEmpty(message = "流程实例的名字不能为空") + private String processInstanceName; + @NotNull(message = "发起人的用户编号") + private Long startUserId; + @NotEmpty(message = "发起人的昵称") + private String startUserNickname; + + /** + * 流程任务的编号 + */ + @NotEmpty(message = "流程任务的编号不能为空") + private String taskId; + /** + * 流程任务的名字 + */ + @NotEmpty(message = "流程任务的名字不能为空") + private String taskName; + + /** + * 审批人的用户编号 + */ + @NotNull(message = "审批人的用户编号不能为空") + private Long assigneeUserId; + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/oa/BpmOALeaveService.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/oa/BpmOALeaveService.java new file mode 100644 index 0000000..7f0a246 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/oa/BpmOALeaveService.java @@ -0,0 +1,52 @@ +package com.win.module.bpm.service.oa; + + +import com.win.framework.common.pojo.PageResult; +import com.win.module.bpm.controller.admin.oa.vo.BpmOALeaveCreateReqVO; +import com.win.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO; +import com.win.module.bpm.dal.dataobject.oa.BpmOALeaveDO; +import jakarta.validation.Valid; + +/** + * 请假申请 Service 接口 + * + * @author jason + * @author 芋道源码 + */ +public interface BpmOALeaveService { + + /** + * 创建请假申请 + * + * @param userId 用户编号 + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createLeave(Long userId, @Valid BpmOALeaveCreateReqVO createReqVO); + + /** + * 更新请假申请的状态 + * + * @param id 编号 + * @param status 结果 + */ + void updateLeaveStatus(Long id, Integer status); + + /** + * 获得请假申请 + * + * @param id 编号 + * @return 请假申请 + */ + BpmOALeaveDO getLeave(Long id); + + /** + * 获得请假申请分页 + * + * @param userId 用户编号 + * @param pageReqVO 分页查询 + * @return 请假申请分页 + */ + PageResult getLeavePage(Long userId, BpmOALeavePageReqVO pageReqVO); + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/oa/BpmOALeaveServiceImpl.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/oa/BpmOALeaveServiceImpl.java new file mode 100644 index 0000000..6b60591 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/oa/BpmOALeaveServiceImpl.java @@ -0,0 +1,89 @@ +package com.win.module.bpm.service.oa; + +import cn.hutool.core.date.LocalDateTimeUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.bpm.api.task.BpmProcessInstanceApi; +import com.win.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import com.win.module.bpm.controller.admin.oa.vo.BpmOALeaveCreateReqVO; +import com.win.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO; +import com.win.module.bpm.dal.dataobject.oa.BpmOALeaveDO; +import com.win.module.bpm.dal.mysql.oa.BpmOALeaveMapper; +import com.win.module.bpm.enums.task.BpmTaskStatusEnum; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import java.util.HashMap; +import java.util.Map; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.bpm.enums.ErrorCodeConstants.OA_LEAVE_NOT_EXISTS; + +/** + * OA 请假申请 Service 实现类 + * + * @author jason + * @author 芋道源码 + */ +@Service +@Validated +public class BpmOALeaveServiceImpl implements BpmOALeaveService { + + /** + * OA 请假对应的流程定义 KEY + */ + public static final String PROCESS_KEY = "oa_leave"; + + @Resource + private BpmOALeaveMapper leaveMapper; + + @Resource + private BpmProcessInstanceApi processInstanceApi; + + @Override + @Transactional(rollbackFor = Exception.class) + public Long createLeave(Long userId, BpmOALeaveCreateReqVO createReqVO) { + // 插入 OA 请假单 + long day = LocalDateTimeUtil.between(createReqVO.getStartTime(), createReqVO.getEndTime()).toDays(); + BpmOALeaveDO leave = BeanUtils.toBean(createReqVO, BpmOALeaveDO.class) + .setUserId(userId).setDay(day).setStatus(BpmTaskStatusEnum.RUNNING.getStatus()); + leaveMapper.insert(leave); + + // 发起 BPM 流程 + Map processInstanceVariables = new HashMap<>(); + processInstanceVariables.put("day", day); + String processInstanceId = processInstanceApi.createProcessInstance(userId, + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) + .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(leave.getId())) + .setStartUserSelectAssignees(createReqVO.getStartUserSelectAssignees())).getCheckedData(); + + // 将工作流的编号,更新到 OA 请假单中 + leaveMapper.updateById(new BpmOALeaveDO().setId(leave.getId()).setProcessInstanceId(processInstanceId)); + return leave.getId(); + } + + @Override + public void updateLeaveStatus(Long id, Integer status) { + validateLeaveExists(id); + leaveMapper.updateById(new BpmOALeaveDO().setId(id).setStatus(status)); + } + + private void validateLeaveExists(Long id) { + if (leaveMapper.selectById(id) == null) { + throw exception(OA_LEAVE_NOT_EXISTS); + } + } + + @Override + public BpmOALeaveDO getLeave(Long id) { + return leaveMapper.selectById(id); + } + + @Override + public PageResult getLeavePage(Long userId, BpmOALeavePageReqVO pageReqVO) { + return leaveMapper.selectPage(userId, pageReqVO); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/oa/listener/BpmOALeaveStatusListener.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/oa/listener/BpmOALeaveStatusListener.java new file mode 100644 index 0000000..bba3be8 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/oa/listener/BpmOALeaveStatusListener.java @@ -0,0 +1,31 @@ +package com.win.module.bpm.service.oa.listener; + +import com.win.module.bpm.event.BpmProcessInstanceStatusEvent; +import com.win.module.bpm.event.BpmProcessInstanceStatusEventListener; +import com.win.module.bpm.service.oa.BpmOALeaveService; +import com.win.module.bpm.service.oa.BpmOALeaveServiceImpl; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +/** + * OA 请假单的结果的监听器实现类 + * + * @author 芋道源码 + */ +@Component +public class BpmOALeaveStatusListener extends BpmProcessInstanceStatusEventListener { + + @Resource + private BpmOALeaveService leaveService; + + @Override + protected String getProcessDefinitionKey() { + return BpmOALeaveServiceImpl.PROCESS_KEY; + } + + @Override + protected void onEvent(BpmProcessInstanceStatusEvent event) { + leaveService.updateLeaveStatus(Long.parseLong(event.getBusinessKey()), event.getStatus()); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmActivityService.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmActivityService.java new file mode 100644 index 0000000..ad35d87 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmActivityService.java @@ -0,0 +1,31 @@ +package com.win.module.bpm.service.task; + +import com.win.module.bpm.controller.admin.task.vo.activity.BpmActivityRespVO; +import org.flowable.engine.history.HistoricActivityInstance; + +import java.util.List; + +/** + * BPM 活动实例 Service 接口 + * + * @author 芋道源码 + */ +public interface BpmActivityService { + + /** + * 获得指定流程实例的活动实例列表 + * + * @param processInstanceId 流程实例的编号 + * @return 活动实例列表 + */ + List getActivityListByProcessInstanceId(String processInstanceId); + + /** + * 获得执行编号对应的活动实例 + * + * @param executionId 执行编号 + * @return 活动实例 + */ + List getHistoricActivityListByExecutionId(String executionId); + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmActivityServiceImpl.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmActivityServiceImpl.java new file mode 100644 index 0000000..ef82f72 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmActivityServiceImpl.java @@ -0,0 +1,40 @@ +package com.win.module.bpm.service.task; + +import com.win.module.bpm.controller.admin.task.vo.activity.BpmActivityRespVO; +import com.win.module.bpm.convert.task.BpmActivityConvert; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.HistoryService; +import org.flowable.engine.history.HistoricActivityInstance; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.util.List; + + +/** + * BPM 活动实例 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Slf4j +@Validated +public class BpmActivityServiceImpl implements BpmActivityService { + + @Resource + private HistoryService historyService; + + @Override + public List getActivityListByProcessInstanceId(String processInstanceId) { + List activityList = historyService.createHistoricActivityInstanceQuery() + .processInstanceId(processInstanceId).list(); + return BpmActivityConvert.INSTANCE.convertList(activityList); + } + + @Override + public List getHistoricActivityListByExecutionId(String executionId) { + return historyService.createHistoricActivityInstanceQuery().executionId(executionId).list(); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceCopyService.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceCopyService.java new file mode 100644 index 0000000..8c19a38 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceCopyService.java @@ -0,0 +1,34 @@ +package com.win.module.bpm.service.task; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyPageReqVO; +import com.win.module.bpm.dal.dataobject.task.BpmProcessInstanceCopyDO; + +import java.util.Collection; + +/** + * 流程抄送 Service 接口 + * + * 现在是在审批的时候进行流程抄送 + */ +public interface BpmProcessInstanceCopyService { + + /** + * 流程实例的抄送 + * + * @param userIds 抄送的用户编号 + * @param taskId 流程任务编号 + */ + void createProcessInstanceCopy(Collection userIds, String taskId); + + /** + * 获得抄送的流程的分页 + * + * @param userId 当前登录用户 + * @param pageReqVO 分页请求 + * @return 抄送的分页结果 + */ + PageResult getProcessInstanceCopyPage(Long userId, + BpmProcessInstanceCopyPageReqVO pageReqVO); + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceCopyServiceImpl.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceCopyServiceImpl.java new file mode 100644 index 0000000..e71f55a --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceCopyServiceImpl.java @@ -0,0 +1,83 @@ +package com.win.module.bpm.service.task; + +import cn.hutool.core.util.ObjectUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyPageReqVO; +import com.win.module.bpm.dal.dataobject.task.BpmProcessInstanceCopyDO; +import com.win.module.bpm.dal.mysql.task.BpmProcessInstanceCopyMapper; +import com.win.module.bpm.enums.ErrorCodeConstants; +import com.win.module.bpm.service.definition.BpmProcessDefinitionService; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.repository.ProcessDefinition; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.Task; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.util.Collection; +import java.util.List; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.collection.CollectionUtils.convertList; + +/** + * 流程抄送 Service 实现类 + * + * @author kyle + */ +@Service +@Validated +@Slf4j +public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopyService { + + @Resource + private BpmProcessInstanceCopyMapper processInstanceCopyMapper; + + @Resource + @Lazy // 延迟加载,避免循环依赖 + private BpmTaskService taskService; + + @Resource + @Lazy // 延迟加载,避免循环依赖 + private BpmProcessInstanceService processInstanceService; + @Resource + @Lazy // 延迟加载,避免循环依赖 + private BpmProcessDefinitionService processDefinitionService; + + @Override + public void createProcessInstanceCopy(Collection userIds, String taskId) { + // 1.1 校验任务存在 + Task task = taskService.getTask(taskId); + if (ObjectUtil.isNull(task)) { + throw exception(ErrorCodeConstants.TASK_NOT_EXISTS); + } + // 1.2 校验流程实例存在 + String processInstanceId = task.getProcessInstanceId(); + ProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId); + if (processInstance == null) { + throw exception(ErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS); + } + // 1.3 校验流程定义存在 + ProcessDefinition processDefinition = processDefinitionService.getProcessDefinition( + processInstance.getProcessDefinitionId()); + if (processDefinition == null) { + throw exception(ErrorCodeConstants.PROCESS_DEFINITION_NOT_EXISTS); + } + + // 2. 创建抄送流程 + List copyList = convertList(userIds, userId -> new BpmProcessInstanceCopyDO() + .setUserId(userId).setStartUserId(Long.valueOf(processInstance.getStartUserId())) + .setProcessInstanceId(processInstanceId).setProcessInstanceName(processInstance.getName()) + .setCategory(processDefinition.getCategory()).setTaskId(taskId).setTaskName(task.getName())); + processInstanceCopyMapper.insertBatch(copyList); + } + + @Override + public PageResult getProcessInstanceCopyPage(Long userId, + BpmProcessInstanceCopyPageReqVO pageReqVO) { + return processInstanceCopyMapper.selectPage(userId, pageReqVO); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceService.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceService.java new file mode 100644 index 0000000..61e547d --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceService.java @@ -0,0 +1,144 @@ +package com.win.module.bpm.service.task; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCancelReqVO; +import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCreateReqVO; +import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstancePageReqVO; +import jakarta.validation.Valid; +import org.flowable.engine.delegate.event.FlowableCancelledEvent; +import org.flowable.engine.history.HistoricProcessInstance; +import org.flowable.engine.runtime.ProcessInstance; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static com.win.framework.common.util.collection.CollectionUtils.convertMap; + +/** + * 流程实例 Service 接口 + * + * @author 芋道源码 + */ +public interface BpmProcessInstanceService { + + /** + * 获得流程实例 + * + * @param id 流程实例的编号 + * @return 流程实例 + */ + ProcessInstance getProcessInstance(String id); + + /** + * 获得流程实例列表 + * + * @param ids 流程实例的编号集合 + * @return 流程实例列表 + */ + List getProcessInstances(Set ids); + + /** + * 获得流程实例 Map + * + * @param ids 流程实例的编号集合 + * @return 流程实例列表 Map + */ + default Map getProcessInstanceMap(Set ids) { + return convertMap(getProcessInstances(ids), ProcessInstance::getProcessInstanceId); + } + + /** + * 获得历史的流程实例 + * + * @param id 流程实例的编号 + * @return 历史的流程实例 + */ + HistoricProcessInstance getHistoricProcessInstance(String id); + + /** + * 获得历史的流程实例列表 + * + * @param ids 流程实例的编号集合 + * @return 历史的流程实例列表 + */ + List getHistoricProcessInstances(Set ids); + + /** + * 获得历史的流程实例 Map + * + * @param ids 流程实例的编号集合 + * @return 历史的流程实例列表 Map + */ + default Map getHistoricProcessInstanceMap(Set ids) { + return convertMap(getHistoricProcessInstances(ids), HistoricProcessInstance::getId); + } + + /** + * 获得流程实例的分页 + * + * @param userId 用户编号 + * @param pageReqVO 分页请求 + * @return 流程实例的分页 + */ + PageResult getProcessInstancePage(Long userId, + @Valid BpmProcessInstancePageReqVO pageReqVO); + + /** + * 创建流程实例(提供给前端) + * + * @param userId 用户编号 + * @param createReqVO 创建信息 + * @return 实例的编号 + */ + String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqVO createReqVO); + + /** + * 创建流程实例(提供给内部) + * + * @param userId 用户编号 + * @param createReqDTO 创建信息 + * @return 实例的编号 + */ + String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO createReqDTO); + + /** + * 发起人取消流程实例 + * + * @param userId 用户编号 + * @param cancelReqVO 取消信息 + */ + void cancelProcessInstanceByStartUser(Long userId, @Valid BpmProcessInstanceCancelReqVO cancelReqVO); + + /** + * 管理员取消流程实例 + * + * @param userId 用户编号 + * @param cancelReqVO 取消信息 + */ + void cancelProcessInstanceByAdmin(Long userId, BpmProcessInstanceCancelReqVO cancelReqVO); + + /** + * 更新 ProcessInstance 拓展记录为取消 + * + * @param event 流程取消事件 + */ + void updateProcessInstanceWhenCancel(FlowableCancelledEvent event); + + /** + * 更新 ProcessInstance 拓展记录为完成 + * + * @param instance 流程任务 + */ + void updateProcessInstanceWhenApprove(ProcessInstance instance); + + /** + * 更新 ProcessInstance 拓展记录为不通过 + * + * @param id 流程编号 + * @param reason 理由。例如说,审批不通过时,需要传递该值 + */ + void updateProcessInstanceReject(String id, String reason); + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceServiceImpl.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceServiceImpl.java new file mode 100644 index 0000000..5c87bab --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmProcessInstanceServiceImpl.java @@ -0,0 +1 @@ +package com.win.module.bpm.service.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; import com.win.framework.common.pojo.PageResult; import com.win.framework.common.util.date.DateUtils; import com.win.framework.common.util.object.PageUtils; import com.win.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCancelReqVO; import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCreateReqVO; import com.win.module.bpm.controller.admin.task.vo.instance.BpmProcessInstancePageReqVO; import com.win.module.bpm.convert.task.BpmProcessInstanceConvert; import com.win.module.bpm.enums.task.BpmDeleteReasonEnum; import com.win.module.bpm.enums.task.BpmProcessInstanceStatusEnum; import com.win.module.bpm.framework.flowable.core.candidate.strategy.BpmTaskCandidateStartUserSelectStrategy; import com.win.module.bpm.framework.flowable.core.enums.BpmConstants; import com.win.module.bpm.framework.flowable.core.event.BpmProcessInstanceEventPublisher; import com.win.module.bpm.framework.flowable.core.util.FlowableUtils; import com.win.module.bpm.service.definition.BpmProcessDefinitionService; import com.win.module.bpm.service.message.BpmMessageService; import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.api.user.dto.AdminUserRespDTO; import jakarta.annotation.Resource; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.UserTask; import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.delegate.event.FlowableCancelledEvent; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstanceQuery; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.util.*; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.win.module.bpm.enums.ErrorCodeConstants.*; /** * 流程实例 Service 实现类 * * ProcessDefinition & ProcessInstance & Execution & Task 的关系: * 1. * * HistoricProcessInstance & ProcessInstance 的关系: * 1. * * 简单来说,前者 = 历史 + 运行中的流程实例,后者仅是运行中的流程实例 * * @author 芋道源码 */ @Service @Validated @Slf4j public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService { @Resource private RuntimeService runtimeService; @Resource private HistoryService historyService; @Resource private BpmProcessDefinitionService processDefinitionService; @Resource private BpmMessageService messageService; @Resource private AdminUserApi adminUserApi; @Resource private BpmProcessInstanceEventPublisher processInstanceEventPublisher; @Override public ProcessInstance getProcessInstance(String id) { return runtimeService.createProcessInstanceQuery() .includeProcessVariables() .processInstanceId(id) .singleResult(); } @Override public List getProcessInstances(Set ids) { return runtimeService.createProcessInstanceQuery().processInstanceIds(ids).list(); } @Override public HistoricProcessInstance getHistoricProcessInstance(String id) { return historyService.createHistoricProcessInstanceQuery().processInstanceId(id).includeProcessVariables().singleResult(); } @Override public List getHistoricProcessInstances(Set ids) { return historyService.createHistoricProcessInstanceQuery().processInstanceIds(ids).list(); } @Override public PageResult getProcessInstancePage(Long userId, BpmProcessInstancePageReqVO pageReqVO) { // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页 HistoricProcessInstanceQuery processInstanceQuery = historyService.createHistoricProcessInstanceQuery() .includeProcessVariables() .processInstanceTenantId(FlowableUtils.getTenantId()) .orderByProcessInstanceStartTime().desc(); if (userId != null) { // 【我的流程】菜单时,需要传递该字段 processInstanceQuery.startedBy(String.valueOf(userId)); } else if (pageReqVO.getStartUserId() != null) { // 【管理流程】菜单时,才会传递该字段 processInstanceQuery.startedBy(String.valueOf(pageReqVO.getStartUserId())); } if (StrUtil.isNotEmpty(pageReqVO.getName())) { processInstanceQuery.processInstanceNameLike("%" + pageReqVO.getName() + "%"); } if (StrUtil.isNotEmpty(pageReqVO.getProcessDefinitionId())) { processInstanceQuery.processDefinitionId("%" + pageReqVO.getProcessDefinitionId() + "%"); } if (StrUtil.isNotEmpty(pageReqVO.getCategory())) { processInstanceQuery.processDefinitionCategory(pageReqVO.getCategory()); } if (pageReqVO.getStatus() != null) { processInstanceQuery.variableValueEquals(BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, pageReqVO.getStatus()); } if (ArrayUtil.isNotEmpty(pageReqVO.getCreateTime())) { processInstanceQuery.startedAfter(DateUtils.of(pageReqVO.getCreateTime()[0])); processInstanceQuery.startedBefore(DateUtils.of(pageReqVO.getCreateTime()[1])); } // 查询数量 long processInstanceCount = processInstanceQuery.count(); if (processInstanceCount == 0) { return PageResult.empty(processInstanceCount); } // 查询列表 List processInstanceList = processInstanceQuery.listPage(PageUtils.getStart(pageReqVO), pageReqVO.getPageSize()); return new PageResult<>(processInstanceList, processInstanceCount); } @Override @Transactional(rollbackFor = Exception.class) public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqVO createReqVO) { // 获得流程定义 ProcessDefinition definition = processDefinitionService.getProcessDefinition(createReqVO.getProcessDefinitionId()); // 发起流程 return createProcessInstance0(userId, definition, createReqVO.getVariables(), null, createReqVO.getStartUserSelectAssignees()); } @Override public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO createReqDTO) { // 获得流程定义 ProcessDefinition definition = processDefinitionService.getActiveProcessDefinition(createReqDTO.getProcessDefinitionKey()); // 发起流程 return createProcessInstance0(userId, definition, createReqDTO.getVariables(), createReqDTO.getBusinessKey(), createReqDTO.getStartUserSelectAssignees()); } private String createProcessInstance0(Long userId, ProcessDefinition definition, Map variables, String businessKey, Map> startUserSelectAssignees) { // 1.1 校验流程定义 if (definition == null) { throw exception(PROCESS_DEFINITION_NOT_EXISTS); } if (definition.isSuspended()) { throw exception(PROCESS_DEFINITION_IS_SUSPENDED); } // 1.2 校验发起人自选审批人 validateStartUserSelectAssignees(definition, startUserSelectAssignees); // 2. 创建流程实例 if (variables == null) { variables = new HashMap<>(); } FlowableUtils.filterProcessInstanceFormVariable(variables); // 过滤一下,避免 ProcessInstance 系统级的变量被占用 variables.put(BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, // 流程实例状态:审批中 BpmProcessInstanceStatusEnum.RUNNING.getStatus()); if (CollUtil.isNotEmpty(startUserSelectAssignees)) { variables.put(BpmConstants.PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES, startUserSelectAssignees); } ProcessInstance instance = runtimeService.createProcessInstanceBuilder() .processDefinitionId(definition.getId()) .businessKey(businessKey) .name(definition.getName().trim()) .variables(variables) .start(); return instance.getId(); } private void validateStartUserSelectAssignees(ProcessDefinition definition, Map> startUserSelectAssignees) { // 1. 获得发起人自选审批人的 UserTask 列表 BpmnModel bpmnModel = processDefinitionService.getProcessDefinitionBpmnModel(definition.getId()); List userTaskList = BpmTaskCandidateStartUserSelectStrategy.getStartUserSelectUserTaskList(bpmnModel); if (CollUtil.isEmpty(userTaskList)) { return; } // 2. 校验发起人自选审批人的 UserTask 是否都配置了 userTaskList.forEach(userTask -> { List assignees = startUserSelectAssignees != null ? startUserSelectAssignees.get(userTask.getId()) : null; if (CollUtil.isEmpty(assignees)) { throw exception(PROCESS_INSTANCE_START_USER_SELECT_ASSIGNEES_NOT_CONFIG, userTask.getName()); } Map userMap = adminUserApi.getUserMap(assignees); assignees.forEach(assignee -> { if (userMap.get(assignee) == null) { throw exception(PROCESS_INSTANCE_START_USER_SELECT_ASSIGNEES_NOT_EXISTS, userTask.getName(), assignee); } }); }); } @Override public void cancelProcessInstanceByStartUser(Long userId, @Valid BpmProcessInstanceCancelReqVO cancelReqVO) { // 1.1 校验流程实例存在 ProcessInstance instance = getProcessInstance(cancelReqVO.getId()); if (instance == null) { throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS); } // 1.2 只能取消自己的 if (!Objects.equals(instance.getStartUserId(), String.valueOf(userId))) { throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF); } // 2. 通过删除流程实例,实现流程实例的取消, // 删除流程实例,正则执行任务 ACT_RU_TASK. 任务会被删除。 deleteProcessInstance(cancelReqVO.getId(), BpmDeleteReasonEnum.CANCEL_PROCESS_INSTANCE_BY_START_USER.format(cancelReqVO.getReason())); // 3. 进一步的处理,交给 updateProcessInstanceCancel 方法 } @Override public void cancelProcessInstanceByAdmin(Long userId, BpmProcessInstanceCancelReqVO cancelReqVO) { // 1.1 校验流程实例存在 ProcessInstance instance = getProcessInstance(cancelReqVO.getId()); if (instance == null) { throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS); } // 1.2 管理员取消,不用校验是否为自己的 AdminUserRespDTO user = adminUserApi.getUser(userId).getCheckedData(); // 2. 通过删除流程实例,实现流程实例的取消, // 删除流程实例,正则执行任务 ACT_RU_TASK. 任务会被删除。 deleteProcessInstance(cancelReqVO.getId(), BpmDeleteReasonEnum.CANCEL_PROCESS_INSTANCE_BY_ADMIN.format(user.getNickname(), cancelReqVO.getReason())); // 3. 进一步的处理,交给 updateProcessInstanceCancel 方法 } @Override public void updateProcessInstanceWhenCancel(FlowableCancelledEvent event) { // 1. 判断是否为 Reject 不通过。如果是,则不进行更新. // 因为,updateProcessInstanceReject 方法(审批不通过),已经进行更新了 if (BpmDeleteReasonEnum.isRejectReason((String) event.getCause())) { return; } // 2. 更新流程实例 status runtimeService.setVariable(event.getProcessInstanceId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, BpmProcessInstanceStatusEnum.CANCEL.getStatus()); // 3. 发送流程实例的状态事件 // 注意:此时如果去查询 ProcessInstance 的话,字段是不全的,所以去查询了 HistoricProcessInstance HistoricProcessInstance processInstance = getHistoricProcessInstance(event.getProcessInstanceId()); // 发送流程实例的状态事件 processInstanceEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceStatusEvent(this, processInstance, BpmProcessInstanceStatusEnum.CANCEL.getStatus())); } @Override public void updateProcessInstanceWhenApprove(ProcessInstance instance) { // 1. 更新流程实例 status runtimeService.setVariable(instance.getId(), BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, BpmProcessInstanceStatusEnum.APPROVE.getStatus()); // 2. 发送流程被【通过】的消息 messageService.sendMessageWhenProcessInstanceApprove(BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceApproveMessage(instance)); // 3. 发送流程实例的状态事件 // 注意:此时如果去查询 ProcessInstance 的话,字段是不全的,所以去查询了 HistoricProcessInstance HistoricProcessInstance processInstance = getHistoricProcessInstance(instance.getId()); processInstanceEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceStatusEvent(this, processInstance, BpmProcessInstanceStatusEnum.APPROVE.getStatus())); } @Override @Transactional(rollbackFor = Exception.class) public void updateProcessInstanceReject(String id, String reason) { // 1. 更新流程实例 status runtimeService.setVariable(id, BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, BpmProcessInstanceStatusEnum.REJECT.getStatus()); // 2. 删除流程实例,以实现驳回任务时,取消整个审批流程 ProcessInstance processInstance = getProcessInstance(id); deleteProcessInstance(id, StrUtil.format(BpmDeleteReasonEnum.REJECT_TASK.format(reason))); // 3. 发送流程被【不通过】的消息 messageService.sendMessageWhenProcessInstanceReject(BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceRejectMessage(processInstance, reason)); // 4. 发送流程实例的状态事件 processInstanceEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceStatusEvent(this, processInstance, BpmProcessInstanceStatusEnum.REJECT.getStatus())); } private void deleteProcessInstance(String id, String reason) { runtimeService.deleteProcessInstance(id, reason); } } \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmTaskService.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmTaskService.java new file mode 100644 index 0000000..e517c84 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmTaskService.java @@ -0,0 +1,186 @@ +package com.win.module.bpm.service.task; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.module.bpm.controller.admin.task.vo.task.*; +import jakarta.validation.Valid; +import org.flowable.bpmn.model.UserTask; +import org.flowable.task.api.Task; +import org.flowable.task.api.history.HistoricTaskInstance; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 流程任务实例 Service 接口 + * + * @author jason + * @author 芋道源码 + */ +public interface BpmTaskService { + + /** + * 获得待办的流程任务分页 + * + * @param userId 用户编号 + * @param pageReqVO 分页请求 + * @return 流程任务分页 + */ + PageResult getTaskTodoPage(Long userId, BpmTaskPageReqVO pageReqVO); + + /** + * 获得已办的流程任务分页 + * + * @param userId 用户编号 + * @param pageReqVO 分页请求 + * @return 流程任务分页 + */ + PageResult getTaskDonePage(Long userId, BpmTaskPageReqVO pageReqVO); + + /** + * 获得全部的流程任务分页 + * + * @param userId 用户编号 + * @param pageReqVO 分页请求 + * @return 流程任务分页 + */ + PageResult getTaskPage(Long userId, BpmTaskPageReqVO pageReqVO); + + /** + * 获得流程任务 Map + * + * @param processInstanceIds 流程实例的编号数组 + * @return 流程任务 Map + */ + default Map> getTaskMapByProcessInstanceIds(List processInstanceIds) { + return CollectionUtils.convertMultiMap(getTasksByProcessInstanceIds(processInstanceIds), + Task::getProcessInstanceId); + } + + /** + * 获得流程任务列表 + * + * @param processInstanceIds 流程实例的编号数组 + * @return 流程任务列表 + */ + List getTasksByProcessInstanceIds(List processInstanceIds); + + /** + * 获得指定流程实例的流程任务列表,包括所有状态的 + * + * @param processInstanceId 流程实例的编号 + * @return 流程任务列表 + */ + List getTaskListByProcessInstanceId(String processInstanceId); + + /** + * 通过任务 + * + * @param userId 用户编号 + * @param reqVO 通过请求 + */ + void approveTask(Long userId, @Valid BpmTaskApproveReqVO reqVO); + + /** + * 不通过任务 + * + * @param userId 用户编号 + * @param reqVO 不通过请求 + */ + void rejectTask(Long userId, @Valid BpmTaskRejectReqVO reqVO); + + /** + * 将流程任务分配给指定用户 + * + * @param userId 用户编号 + * @param reqVO 分配请求 + */ + void transferTask(Long userId, BpmTaskTransferReqVO reqVO); + + /** + * 更新 Task 状态,在创建时 + * + * @param task 任务实体 + */ + void updateTaskStatusWhenCreated(Task task); + + /** + * 更新 Task 状态,在取消时 + * + * @param taskId 任务的编号 + */ + void updateTaskStatusWhenCanceled(String taskId); + + /** + * 更新 Task 拓展记录,并发送通知 + * + * @param task 任务实体 + */ + void updateTaskExtAssign(Task task); + + /** + * 获取任务 + * + * @param id 任务编号 + * @return 任务 + */ + Task getTask(String id); + + /** + * 获取当前任务的可回退的 UserTask 集合 + * + * @param id 当前的任务 ID + * @return 可以回退的节点列表 + */ + List getUserTaskListByReturn(String id); + + /** + * 将任务回退到指定的 targetDefinitionKey 位置 + * + * @param userId 用户编号 + * @param reqVO 回退的任务key和当前所在的任务ID + */ + void returnTask(Long userId, BpmTaskReturnReqVO reqVO); + + /** + * 将指定任务委派给其他人处理,等接收人处理后再回到原审批人手中审批 + * + * @param userId 用户编号 + * @param reqVO 被委派人和被委派的任务编号理由参数 + */ + void delegateTask(Long userId, BpmTaskDelegateReqVO reqVO); + + /** + * 任务加签 + * + * @param userId 被加签的用户和任务 ID,加签类型 + * @param reqVO 当前用户 ID + */ + void createSignTask(Long userId, BpmTaskSignCreateReqVO reqVO); + + /** + * 任务减签 + * + * @param userId 当前用户ID + * @param reqVO 被减签的任务 ID,理由 + */ + void deleteSignTask(Long userId, BpmTaskSignDeleteReqVO reqVO); + + /** + * 获取指定任务的子任务列表 + * + * @param parentTaskId 父任务ID + * @return 子任务列表 + */ + List getTaskListByParentTaskId(String parentTaskId); + + /** + * 通过任务 ID,查询任务名 Map + * + * @param taskIds 任务 ID + * @return 任务 ID 与名字的 Map + */ + Map getTaskNameByTaskIds(Collection taskIds); + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmTaskServiceImpl.java b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmTaskServiceImpl.java new file mode 100644 index 0000000..de7a99d --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/java/com/win/module/bpm/service/task/BpmTaskServiceImpl.java @@ -0,0 +1,822 @@ +package com.win.module.bpm.service.task; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.date.DateUtils; +import com.win.framework.common.util.number.NumberUtils; +import com.win.framework.common.util.object.PageUtils; +import com.win.module.bpm.framework.flowable.core.util.BpmnModelUtils; +import com.win.module.bpm.framework.flowable.core.util.FlowableUtils; +import com.win.framework.web.core.util.WebFrameworkUtils; +import com.win.module.bpm.controller.admin.task.vo.task.*; +import com.win.module.bpm.convert.task.BpmTaskConvert; +import com.win.module.bpm.enums.task.BpmCommentTypeEnum; +import com.win.module.bpm.enums.task.BpmDeleteReasonEnum; +import com.win.module.bpm.enums.task.BpmTaskSignTypeEnum; +import com.win.module.bpm.enums.task.BpmTaskStatusEnum; +import com.win.module.bpm.framework.flowable.core.enums.BpmConstants; +import com.win.module.bpm.service.definition.BpmModelService; +import com.win.module.bpm.service.message.BpmMessageService; +import com.win.module.system.api.user.AdminUserApi; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.bpmn.model.FlowElement; +import org.flowable.bpmn.model.UserTask; +import org.flowable.engine.HistoryService; +import org.flowable.engine.ManagementService; +import org.flowable.engine.RuntimeService; +import org.flowable.engine.TaskService; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.DelegationState; +import org.flowable.task.api.Task; +import org.flowable.task.api.TaskQuery; +import org.flowable.task.api.history.HistoricTaskInstance; +import org.flowable.task.api.history.HistoricTaskInstanceQuery; +import org.flowable.task.service.impl.persistence.entity.TaskEntity; +import org.flowable.task.service.impl.persistence.entity.TaskEntityImpl; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionSynchronization; +import org.springframework.transaction.support.TransactionSynchronizationManager; +import org.springframework.util.Assert; + +import java.util.*; +import java.util.stream.Stream; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.collection.CollectionUtils.*; +import static com.win.module.bpm.enums.ErrorCodeConstants.*; + +/** + * 流程任务实例 Service 实现类 + * + * @author 芋道源码 + * @author jason + */ +@Slf4j +@Service +public class BpmTaskServiceImpl implements BpmTaskService { + + @Resource + private TaskService taskService; + @Resource + private HistoryService historyService; + @Resource + private RuntimeService runtimeService; + @Resource + private ManagementService managementService; + + @Resource + private BpmProcessInstanceService processInstanceService; + @Resource + private BpmProcessInstanceCopyService processInstanceCopyService; + @Resource + private BpmModelService bpmModelService; + @Resource + private BpmMessageService messageService; + + @Resource + private AdminUserApi adminUserApi; + + @Override + public PageResult getTaskTodoPage(Long userId, BpmTaskPageReqVO pageVO) { + TaskQuery taskQuery = taskService.createTaskQuery() + .taskAssignee(String.valueOf(userId)) // 分配给自己 + .active() + .includeProcessVariables() + .orderByTaskCreateTime().desc(); // 创建时间倒序 + if (StrUtil.isNotBlank(pageVO.getName())) { + taskQuery.taskNameLike("%" + pageVO.getName() + "%"); + } + if (ArrayUtil.isNotEmpty(pageVO.getCreateTime())) { + taskQuery.taskCreatedAfter(DateUtils.of(pageVO.getCreateTime()[0])); + taskQuery.taskCreatedAfter(DateUtils.of(pageVO.getCreateTime()[1])); + } + long count = taskQuery.count(); + if (count == 0) { + return PageResult.empty(); + } + List tasks = taskQuery.listPage(PageUtils.getStart(pageVO), pageVO.getPageSize()); + return new PageResult<>(tasks, count); + } + + @Override + public PageResult getTaskDonePage(Long userId, BpmTaskPageReqVO pageVO) { + HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery() + .finished() // 已完成 + .taskAssignee(String.valueOf(userId)) // 分配给自己 + .includeTaskLocalVariables() + .orderByHistoricTaskInstanceEndTime().desc(); // 审批时间倒序 + if (StrUtil.isNotBlank(pageVO.getName())) { + taskQuery.taskNameLike("%" + pageVO.getName() + "%"); + } + if (ArrayUtil.isNotEmpty(pageVO.getCreateTime())) { + taskQuery.taskCreatedAfter(DateUtils.of(pageVO.getCreateTime()[0])); + taskQuery.taskCreatedAfter(DateUtils.of(pageVO.getCreateTime()[1])); + } + // 执行查询 + long count = taskQuery.count(); + if (count == 0) { + return PageResult.empty(); + } + List tasks = taskQuery.listPage(PageUtils.getStart(pageVO), pageVO.getPageSize()); + return new PageResult<>(tasks, count); + } + + @Override + public PageResult getTaskPage(Long userId, BpmTaskPageReqVO pageVO) { + HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery() + .includeTaskLocalVariables() + .taskTenantId(FlowableUtils.getTenantId()) + .orderByHistoricTaskInstanceEndTime().desc(); // 审批时间倒序 + if (StrUtil.isNotBlank(pageVO.getName())) { + taskQuery.taskNameLike("%" + pageVO.getName() + "%"); + } + if (ArrayUtil.isNotEmpty(pageVO.getCreateTime())) { + taskQuery.taskCreatedAfter(DateUtils.of(pageVO.getCreateTime()[0])); + taskQuery.taskCreatedAfter(DateUtils.of(pageVO.getCreateTime()[1])); + } + // 执行查询 + long count = taskQuery.count(); + if (count == 0) { + return PageResult.empty(); + } + List tasks = taskQuery.listPage(PageUtils.getStart(pageVO), pageVO.getPageSize()); + return new PageResult<>(tasks, count); + } + + @Override + public List getTasksByProcessInstanceIds(List processInstanceIds) { + if (CollUtil.isEmpty(processInstanceIds)) { + return Collections.emptyList(); + } + return taskService.createTaskQuery().processInstanceIdIn(processInstanceIds).list(); + } + + @Override + public List getTaskListByProcessInstanceId(String processInstanceId) { + List tasks = historyService.createHistoricTaskInstanceQuery() + .includeTaskLocalVariables() + .processInstanceId(processInstanceId) + .orderByHistoricTaskInstanceStartTime().desc() // 创建时间倒序 + .list(); + if (CollUtil.isEmpty(tasks)) { + return Collections.emptyList(); + } + return tasks; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void approveTask(Long userId, @Valid BpmTaskApproveReqVO reqVO) { + // 1.1 校验任务存在 + Task task = validateTask(userId, reqVO.getId()); + // 1.2 校验流程实例存在 + ProcessInstance instance = processInstanceService.getProcessInstance(task.getProcessInstanceId()); + if (instance == null) { + throw exception(PROCESS_INSTANCE_NOT_EXISTS); + } + + // 2. 抄送用户 + if (CollUtil.isNotEmpty(reqVO.getCopyUserIds())) { + processInstanceCopyService.createProcessInstanceCopy(reqVO.getCopyUserIds(), reqVO.getId()); + } + + // 情况一:被委派的任务,不调用 complete 去完成任务 + if (DelegationState.PENDING.equals(task.getDelegationState())) { + approveDelegateTask(reqVO, task); + return; + } + + // 情况二:审批有【后】加签的任务 + if (BpmTaskSignTypeEnum.AFTER.getType().equals(task.getScopeType())) { + approveAfterSignTask(task, reqVO); + return; + } + + // 情况三:审批普通的任务。大多数情况下,都是这样 + // 3.1 更新 task 状态、原因 + updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.APPROVE.getStatus(), reqVO.getReason()); + // 3.2 添加评论 + taskService.addComment(task.getId(), task.getProcessInstanceId(), BpmCommentTypeEnum.APPROVE.getType(), + BpmCommentTypeEnum.APPROVE.formatComment(reqVO.getReason())); + // 3.3 调用 BPM complete 去完成任务 + // 其中,variables 是存储动态表单到 local 任务级别。过滤一下,避免 ProcessInstance 系统级的变量被占用 + if (CollUtil.isNotEmpty(reqVO.getVariables())) { + Map variables = FlowableUtils.filterTaskFormVariable(reqVO.getVariables()); + taskService.complete(task.getId(), variables, true); + } else { + taskService.complete(task.getId()); + } + + // 【加签专属】处理加签任务 + handleParentTaskIfSign(task.getParentTaskId()); + } + + /** + * 审批通过存在“后加签”的任务。 + *

    + * 注意:该任务不能马上完成,需要一个中间状态(APPROVING),并激活剩余所有子任务(PROCESS)为可审批处理 + * 如果马上完成,则会触发下一个任务,甚至如果没有下一个任务则流程实例就直接结束了! + * + * @param task 当前任务 + * @param reqVO 前端请求参数 + */ + private void approveAfterSignTask(Task task, BpmTaskApproveReqVO reqVO) { + // 更新父 task 状态 + 原因 + updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.APPROVING.getStatus(), reqVO.getReason()); + + // 2. 激活子任务 + List childrenTaskList = getTaskListByParentTaskId(task.getId()); + for (Task childrenTask : childrenTaskList) { + taskService.resolveTask(childrenTask.getId()); + // 更新子 task 状态 + updateTaskStatus(childrenTask.getId(), BpmTaskStatusEnum.RUNNING.getStatus()); + } + } + + /** + * 如果父任务是有前后【加签】的任务,如果它【加签】出来的子任务都被处理,需要处理父任务: + * + * 1. 如果是【向前】加签,则需要重新激活父任务,让它可以被审批 + * 2. 如果是【向后】加签,则需要完成父任务,让它完成审批 + * + * @param parentTaskId 父任务编号 + */ + private void handleParentTaskIfSign(String parentTaskId) { + if (StrUtil.isBlank(parentTaskId)) { + return; + } + // 1.1 判断是否还有子任务。如果没有,就不处理 + Long childrenTaskCount = getTaskCountByParentTaskId(parentTaskId); + if (childrenTaskCount > 0) { + return; + } + // 1.2 只处理加签的父任务 + Task parentTask = validateTaskExist(parentTaskId); + String scopeType = parentTask.getScopeType(); + if (BpmTaskSignTypeEnum.of(scopeType) == null) { + return; + } + + // 2. 子任务已处理完成,清空 scopeType 字段,修改 parentTask 信息,方便后续可以继续向前后向后加签 + TaskEntityImpl parentTaskImpl = (TaskEntityImpl) parentTask; + parentTaskImpl.setScopeType(null); + taskService.saveTask(parentTaskImpl); + + // 3.1 情况一:处理向【向前】加签 + if (BpmTaskSignTypeEnum.BEFORE.getType().equals(scopeType)) { + // 3.1.1 owner 重新赋值给父任务的 assignee,这样它就可以被审批 + taskService.resolveTask(parentTaskId); + // 3.1.2 更新流程任务 status + updateTaskStatus(parentTaskId, BpmTaskStatusEnum.RUNNING.getStatus()); + // 3.2 情况二:处理向【向后】加签 + } else if (BpmTaskSignTypeEnum.AFTER.getType().equals(scopeType)) { + // 只有 parentTask 处于 APPROVING 的情况下,才可以继续 complete 完成 + // 否则,一个未审批的 parentTask 任务,在加签出来的任务都被减签的情况下,就直接完成审批,这样会存在问题 + Integer status = (Integer) parentTask.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS); + if (ObjectUtil.notEqual(status, BpmTaskStatusEnum.APPROVING.getStatus())) { + return; + } + // 3.2.2 完成自己(因为它已经没有子任务,所以也可以完成) + updateTaskStatus(parentTaskId, BpmTaskStatusEnum.APPROVE.getStatus()); + taskService.complete(parentTaskId); + } + + // 4. 递归处理父任务 + handleParentTaskIfSign(parentTask.getParentTaskId()); + } + + /** + * 审批被委派的任务 + * + * @param reqVO 前端请求参数,包含当前任务ID,审批意见等 + * @param task 当前被审批的任务 + */ + private void approveDelegateTask(BpmTaskApproveReqVO reqVO, Task task) { + // 1. 添加审批意见 + AdminUserRespDTO currentUser = adminUserApi.getUser(WebFrameworkUtils.getLoginUserId()).getCheckedData(); + AdminUserRespDTO ownerUser = adminUserApi.getUser(NumberUtils.parseLong(task.getOwner())).getCheckedData(); // 发起委托的用户 + Assert.notNull(ownerUser, "委派任务找不到原审批人,需要检查数据"); + taskService.addComment(reqVO.getId(), task.getProcessInstanceId(), BpmCommentTypeEnum.DELEGATE_END.getType(), + BpmCommentTypeEnum.DELEGATE_END.formatComment(currentUser.getNickname(), ownerUser.getNickname(), reqVO.getReason())); + + // 2.1 调用 resolveTask 完成任务。 + // 底层调用 TaskHelper.changeTaskAssignee(task, task.getOwner()):将 owner 设置为 assignee + taskService.resolveTask(task.getId()); + // 2.2 更新 task 状态 + 原因 + updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.RUNNING.getStatus(), reqVO.getReason()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void rejectTask(Long userId, @Valid BpmTaskRejectReqVO reqVO) { + // 1.1 校验任务存在 + Task task = validateTask(userId, reqVO.getId()); + // 1.2 校验流程实例存在 + ProcessInstance instance = processInstanceService.getProcessInstance(task.getProcessInstanceId()); + if (instance == null) { + throw exception(PROCESS_INSTANCE_NOT_EXISTS); + } + + // 2.1 更新流程实例为不通过 + updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.REJECT.getStatus(), reqVO.getReason()); + // 2.2 添加评论 + taskService.addComment(task.getId(), task.getProcessInstanceId(), BpmCommentTypeEnum.REJECT.getType(), + BpmCommentTypeEnum.REJECT.formatComment(reqVO.getReason())); + + // 3. 更新流程实例,审批不通过! + processInstanceService.updateProcessInstanceReject(instance.getProcessInstanceId(), reqVO.getReason()); + } + + /** + * 更新流程任务的 status 状态 + * + * @param id 任务编号 + * @param status 状态 + */ + private void updateTaskStatus(String id, Integer status) { + taskService.setVariableLocal(id, BpmConstants.TASK_VARIABLE_STATUS, status); + } + + /** + * 更新流程任务的 status 状态、reason 理由 + * + * @param id 任务编号 + * @param status 状态 + * @param reason 理由(审批通过、审批不通过的理由) + */ + private void updateTaskStatusAndReason(String id, Integer status, String reason) { + updateTaskStatus(id, status); + taskService.setVariableLocal(id, BpmConstants.TASK_VARIABLE_REASON, reason); + } + + /** + * 校验任务是否存在,并且是否是分配给自己的任务 + * + * @param userId 用户 id + * @param taskId task id + */ + private Task validateTask(Long userId, String taskId) { + Task task = validateTaskExist(taskId); + if (!Objects.equals(userId, NumberUtils.parseLong(task.getAssignee()))) { + throw exception(TASK_OPERATE_FAIL_ASSIGN_NOT_SELF); + } + return task; + } + + @Override + public void updateTaskStatusWhenCreated(Task task) { + Integer status = (Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS); + if (status != null) { + log.error("[updateTaskStatusWhenCreated][taskId({}) 已经有状态({})]", task.getId(), status); + return; + } + updateTaskStatus(task.getId(), BpmTaskStatusEnum.RUNNING.getStatus()); + } + + @Override + public void updateTaskStatusWhenCanceled(String taskId) { + Task task = getTask(taskId); + // 1. 可能只是活动,不是任务,所以查询不到 + if (task == null) { + log.error("[updateTaskStatusWhenCanceled][taskId({}) 任务不存在]", taskId); + return; + } + + // 2. 更新 task 状态 + 原因 + Integer status = (Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS); + if (BpmTaskStatusEnum.isEndStatus(status)) { + log.error("[updateTaskStatusWhenCanceled][taskId({}) 处于结果({}),无需进行更新]", taskId, status); + return; + } + updateTaskStatusAndReason(taskId, BpmTaskStatusEnum.CANCEL.getStatus(), BpmDeleteReasonEnum.CANCEL_BY_SYSTEM.getReason()); + // 补充说明:由于 Task 被删除成 HistoricTask 后,无法通过 taskService.addComment 添加理由,所以无法存储具体的取消理由 + } + + @Override + public void updateTaskExtAssign(Task task) { + // 发送通知。在事务提交时,批量执行操作,所以直接查询会无法查询到 ProcessInstance,所以这里是通过监听事务的提交来实现。 + TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { + + @Override + public void afterCommit() { + if (StrUtil.isEmpty(task.getAssignee())) { + return; + } + ProcessInstance processInstance = processInstanceService.getProcessInstance(task.getProcessInstanceId()); + AdminUserRespDTO startUser = adminUserApi.getUser(Long.valueOf(processInstance.getStartUserId())).getCheckedData(); + messageService.sendMessageWhenTaskAssigned(BpmTaskConvert.INSTANCE.convert(processInstance, startUser, task)); + } + + }); + } + + private Task validateTaskExist(String id) { + Task task = getTask(id); + if (task == null) { + throw exception(TASK_NOT_EXISTS); + } + return task; + } + + @Override + public Task getTask(String id) { + return taskService.createTaskQuery().taskId(id).includeTaskLocalVariables().singleResult(); + } + + private HistoricTaskInstance getHistoricTask(String id) { + return historyService.createHistoricTaskInstanceQuery().taskId(id).includeTaskLocalVariables().singleResult(); + } + + @Override + public List getUserTaskListByReturn(String id) { + // 1.1 校验当前任务 task 存在 + Task task = validateTaskExist(id); + // 1.2 根据流程定义获取流程模型信息 + BpmnModel bpmnModel = bpmModelService.getBpmnModelByDefinitionId(task.getProcessDefinitionId()); + FlowElement source = BpmnModelUtils.getFlowElementById(bpmnModel, task.getTaskDefinitionKey()); + if (source == null) { + throw exception(TASK_NOT_EXISTS); + } + + // 2.1 查询该任务的前置任务节点的 key 集合 + List previousUserList = BpmnModelUtils.getPreviousUserTaskList(source, null, null); + if (CollUtil.isEmpty(previousUserList)) { + return Collections.emptyList(); + } + // 2.2 过滤:只有串行可到达的节点,才可以回退。类似非串行、子流程无法退回 + previousUserList.removeIf(userTask -> !BpmnModelUtils.isSequentialReachable(source, userTask, null)); + return previousUserList; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void returnTask(Long userId, BpmTaskReturnReqVO reqVO) { + // 1.1 当前任务 task + Task task = validateTask(userId, reqVO.getId()); + if (task.isSuspended()) { + throw exception(TASK_IS_PENDING); + } + // 1.2 校验源头和目标节点的关系,并返回目标元素 + FlowElement targetElement = validateTargetTaskCanReturn(task.getTaskDefinitionKey(), + reqVO.getTargetTaskDefinitionKey(), task.getProcessDefinitionId()); + + // 2. 调用 Flowable 框架的回退逻辑 + returnTask(task, targetElement, reqVO); + } + + /** + * 回退流程节点时,校验目标任务节点是否可回退 + * + * @param sourceKey 当前任务节点 Key + * @param targetKey 目标任务节点 key + * @param processDefinitionId 当前流程定义 ID + * @return 目标任务节点元素 + */ + private FlowElement validateTargetTaskCanReturn(String sourceKey, String targetKey, String processDefinitionId) { + // 1.1 获取流程模型信息 + BpmnModel bpmnModel = bpmModelService.getBpmnModelByDefinitionId(processDefinitionId); + // 1.3 获取当前任务节点元素 + FlowElement source = BpmnModelUtils.getFlowElementById(bpmnModel, sourceKey); + // 1.3 获取跳转的节点元素 + FlowElement target = BpmnModelUtils.getFlowElementById(bpmnModel, targetKey); + if (target == null) { + throw exception(TASK_TARGET_NODE_NOT_EXISTS); + } + + // 2.2 只有串行可到达的节点,才可以回退。类似非串行、子流程无法退回 + if (!BpmnModelUtils.isSequentialReachable(source, target, null)) { + throw exception(TASK_RETURN_FAIL_SOURCE_TARGET_ERROR); + } + return target; + } + + /** + * 执行回退逻辑 + * + * @param currentTask 当前回退的任务 + * @param targetElement 需要回退到的目标任务 + * @param reqVO 前端参数封装 + */ + public void returnTask(Task currentTask, FlowElement targetElement, BpmTaskReturnReqVO reqVO) { + // 1. 获得所有需要回撤的任务 taskDefinitionKey,用于稍后的 moveActivityIdsToSingleActivityId 回撤 + // 1.1 获取所有正常进行的任务节点 Key + List taskList = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).list(); + List runTaskKeyList = convertList(taskList, Task::getTaskDefinitionKey); + // 1.2 通过 targetElement 的出口连线,计算在 runTaskKeyList 有哪些 key 需要被撤回 + // 为什么不直接使用 runTaskKeyList 呢?因为可能存在多个审批分支,例如说:A -> B -> C 和 D -> F,而只要 C 撤回到 A,需要排除掉 F + List returnUserTaskList = BpmnModelUtils.iteratorFindChildUserTasks(targetElement, runTaskKeyList, null, null); + List returnTaskKeyList = convertList(returnUserTaskList, UserTask::getId); + + // 2. 给当前要被回退的 task 数组,设置回退意见 + taskList.forEach(task -> { + // 需要排除掉,不需要设置回退意见的任务 + if (!returnTaskKeyList.contains(task.getTaskDefinitionKey())) { + return; + } + // 2.1 添加评论 + taskService.addComment(task.getId(), currentTask.getProcessInstanceId(), BpmCommentTypeEnum.RETURN.getType(), + BpmCommentTypeEnum.RETURN.formatComment(reqVO.getReason())); + // 2.2 更新 task 状态 + 原因 + updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.RETURN.getStatus(), reqVO.getReason()); + }); + + // 3. 执行驳回 + runtimeService.createChangeActivityStateBuilder() + .processInstanceId(currentTask.getProcessInstanceId()) + .moveActivityIdsToSingleActivityId(returnTaskKeyList, // 当前要跳转的节点列表( 1 或多) + reqVO.getTargetTaskDefinitionKey()) // targetKey 跳转到的节点(1) + .changeState(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delegateTask(Long userId, BpmTaskDelegateReqVO reqVO) { + String taskId = reqVO.getId(); + // 1.1 校验任务 + Task task = validateTask(userId, reqVO.getId()); + if (task.getAssignee().equals(reqVO.getDelegateUserId().toString())) { // 校验当前审批人和被委派人不是同一人 + throw exception(TASK_DELEGATE_FAIL_USER_REPEAT); + } + // 1.2 校验目标用户存在 + AdminUserRespDTO delegateUser = adminUserApi.getUser(reqVO.getDelegateUserId()).getCheckedData(); + if (delegateUser == null) { + throw exception(TASK_DELEGATE_FAIL_USER_NOT_EXISTS); + } + + // 2. 添加委托意见 + AdminUserRespDTO currentUser = adminUserApi.getUser(userId).getCheckedData(); + taskService.addComment(taskId, task.getProcessInstanceId(), BpmCommentTypeEnum.DELEGATE_START.getType(), + BpmCommentTypeEnum.DELEGATE_START.formatComment(currentUser.getNickname(), delegateUser.getNickname(), reqVO.getReason())); + + // 3.1 设置任务所有人 (owner) 为原任务的处理人 (assignee) + taskService.setOwner(taskId, task.getAssignee()); + // 3.2 执行委派,将任务委派给 delegateUser + taskService.delegateTask(taskId, reqVO.getDelegateUserId().toString()); + // 3.3 更新 task 状态。 + // 为什么不更新原因?因为原因目前主要给审批通过、不通过时使用 + updateTaskStatus(taskId, BpmTaskStatusEnum.DELEGATE.getStatus()); + } + + @Override + public void transferTask(Long userId, BpmTaskTransferReqVO reqVO) { + String taskId = reqVO.getId(); + // 1.1 校验任务 + Task task = validateTask(userId, reqVO.getId()); + if (task.getAssignee().equals(reqVO.getAssigneeUserId().toString())) { // 校验当前审批人和被转派人不是同一人 + throw exception(TASK_TRANSFER_FAIL_USER_REPEAT); + } + // 1.2 校验目标用户存在 + AdminUserRespDTO assigneeUser = adminUserApi.getUser(reqVO.getAssigneeUserId()).getCheckedData(); + if (assigneeUser == null) { + throw exception(TASK_TRANSFER_FAIL_USER_NOT_EXISTS); + } + + // 2. 添加委托意见 + AdminUserRespDTO currentUser = adminUserApi.getUser(userId).getCheckedData(); + taskService.addComment(taskId, task.getProcessInstanceId(), BpmCommentTypeEnum.TRANSFER.getType(), + BpmCommentTypeEnum.TRANSFER.formatComment(currentUser.getNickname(), assigneeUser.getNickname(), reqVO.getReason())); + + // 3.1 设置任务所有人 (owner) 为原任务的处理人 (assignee) + taskService.setOwner(taskId, task.getAssignee()); + // 3.2 执行转派(审批人),将任务转派给 assigneeUser + // 委托( delegate)和转派(transfer)的差别,就在这块的调用!!!! + taskService.setAssignee(taskId, reqVO.getAssigneeUserId().toString()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createSignTask(Long userId, BpmTaskSignCreateReqVO reqVO) { + // 1. 获取和校验任务 + TaskEntityImpl taskEntity = validateTaskCanCreateSign(userId, reqVO); + List userList = adminUserApi.getUserList(reqVO.getUserIds()).getCheckedData(); + if (CollUtil.isEmpty(userList)) { + throw exception(TASK_SIGN_CREATE_USER_NOT_EXIST); + } + + // 2. 处理当前任务 + // 2.1 开启计数功能,主要用于为了让表 ACT_RU_TASK 中的 SUB_TASK_COUNT_ 字段记录下总共有多少子任务,后续可能有用 + taskEntity.setCountEnabled(true); + // 2.2 向前加签,设置 owner,置空 assign。等子任务都完成后,再调用 resolveTask 重新将 owner 设置为 assign + // 原因是:不能和向前加签的子任务一起审批,需要等前面的子任务都完成才能审批 + if (reqVO.getType().equals(BpmTaskSignTypeEnum.BEFORE.getType())) { + taskEntity.setOwner(taskEntity.getAssignee()); + taskEntity.setAssignee(null); + } + // 2.4 记录加签方式,完成任务时需要用到判断 + taskEntity.setScopeType(reqVO.getType()); + // 2.5 保存当前任务修改后的值 + taskService.saveTask(taskEntity); + // 2.6 更新 task 状态为 WAIT,只有在向前加签的时候 + if (reqVO.getType().equals(BpmTaskSignTypeEnum.BEFORE.getType())) { + updateTaskStatus(taskEntity.getId(), BpmTaskStatusEnum.WAIT.getStatus()); + } + + // 3. 创建加签任务 + createSignTaskList(convertList(reqVO.getUserIds(), String::valueOf), taskEntity); + + // 4. 记录加签的评论到 task 任务 + AdminUserRespDTO currentUser = adminUserApi.getUser(userId).getCheckedData(); + String comment = StrUtil.format(BpmCommentTypeEnum.ADD_SIGN.getComment(), + currentUser.getNickname(), BpmTaskSignTypeEnum.nameOfType(reqVO.getType()), + String.join(",", convertList(userList, AdminUserRespDTO::getNickname)), reqVO.getReason()); + taskService.addComment(reqVO.getId(), taskEntity.getProcessInstanceId(), BpmCommentTypeEnum.ADD_SIGN.getType(), comment); + } + + /** + * 校验任务是否可以加签,主要校验加签类型是否一致: + *

    + * 1. 如果存在“向前加签”的任务,则不能“向后加签” + * 2. 如果存在“向后加签”的任务,则不能“向前加签” + * + * @param userId 当前用户 ID + * @param reqVO 请求参数,包含任务 ID 和加签类型 + * @return 当前任务 + */ + private TaskEntityImpl validateTaskCanCreateSign(Long userId, BpmTaskSignCreateReqVO reqVO) { + TaskEntityImpl taskEntity = (TaskEntityImpl) validateTask(userId, reqVO.getId()); + // 向前加签和向后加签不能同时存在 + if (taskEntity.getScopeType() != null + && ObjectUtil.notEqual(taskEntity.getScopeType(), reqVO.getType())) { + throw exception(TASK_SIGN_CREATE_TYPE_ERROR, + BpmTaskSignTypeEnum.nameOfType(taskEntity.getScopeType()), BpmTaskSignTypeEnum.nameOfType(reqVO.getType())); + } + + // 同一个 key 的任务,审批人不重复 + List taskList = taskService.createTaskQuery().processInstanceId(taskEntity.getProcessInstanceId()) + .taskDefinitionKey(taskEntity.getTaskDefinitionKey()).list(); + List currentAssigneeList = convertListByFlatMap(taskList, task -> // 需要考虑 owner 的情况,因为向后加签时,它暂时没 assignee 而是 owner + Stream.of(NumberUtils.parseLong(task.getAssignee()), NumberUtils.parseLong(task.getOwner()))); + if (CollUtil.containsAny(currentAssigneeList, reqVO.getUserIds())) { + List userList = adminUserApi.getUserList( CollUtil.intersection(currentAssigneeList, reqVO.getUserIds())).getCheckedData(); + throw exception(TASK_SIGN_CREATE_USER_REPEAT, String.join(",", convertList(userList, AdminUserRespDTO::getNickname))); + } + return taskEntity; + } + + /** + * 创建加签子任务 + * + * @param userIds 被加签的用户 ID + * @param taskEntity 被加签的任务 + */ + private void createSignTaskList(List userIds, TaskEntityImpl taskEntity) { + if (CollUtil.isEmpty(userIds)) { + return; + } + // 创建加签人的新任务,全部基于 taskEntity 为父任务来创建 + for (String addSignId : userIds) { + if (StrUtil.isBlank(addSignId)) { + continue; + } + createSignTask(taskEntity, addSignId); + } + } + + /** + * 创建加签子任务 + * + * @param parentTask 父任务 + * @param assignee 子任务的执行人 + */ + private void createSignTask(TaskEntityImpl parentTask, String assignee) { + // 1. 生成子任务 + TaskEntityImpl task = (TaskEntityImpl) taskService.newTask(IdUtil.fastSimpleUUID()); + BpmTaskConvert.INSTANCE.copyTo(parentTask, task); + + // 2.1 向前加签,设置审批人 + if (BpmTaskSignTypeEnum.BEFORE.getType().equals(parentTask.getScopeType())) { + task.setAssignee(assignee); + // 2.2 向后加签,设置 owner 不设置 assignee 是因为不能同时审批,需要等父任务完成 + } else { + task.setOwner(assignee); + } + // 2.3 保存子任务 + taskService.saveTask(task); + + // 3. 向后前签,设置子任务的状态为 WAIT,因为需要等父任务审批完 + if (BpmTaskSignTypeEnum.AFTER.getType().equals(parentTask.getScopeType())) { + updateTaskStatus(task.getId(), BpmTaskStatusEnum.WAIT.getStatus()); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteSignTask(Long userId, BpmTaskSignDeleteReqVO reqVO) { + // 1.1 校验 task 可以被减签 + Task task = validateTaskCanSignDelete(reqVO.getId()); + // 1.2 校验取消人存在 + AdminUserRespDTO cancelUser = null; + if (StrUtil.isNotBlank(task.getAssignee())) { + cancelUser = adminUserApi.getUser(NumberUtils.parseLong(task.getAssignee())).getCheckedData(); + } + if (cancelUser == null && StrUtil.isNotBlank(task.getOwner())) { + cancelUser = adminUserApi.getUser(NumberUtils.parseLong(task.getOwner())).getCheckedData(); + } + Assert.notNull(cancelUser, "任务中没有所有者和审批人,数据错误"); + + // 2.1 获得子任务列表,包括子任务的子任务 + List childTaskList = getAllChildTaskList(task); + childTaskList.add(task); + // 2.2 更新子任务为已取消 + String cancelReason = StrUtil.format("任务被取消,原因:由于[{}]操作[减签],", cancelUser.getNickname()); + childTaskList.forEach(childTask -> updateTaskStatusAndReason(childTask.getId(), BpmTaskStatusEnum.CANCEL.getStatus(), cancelReason)); + // 2.3 删除任务和所有子任务 + taskService.deleteTasks(convertList(childTaskList, Task::getId)); + + // 3. 记录日志到父任务中。先记录日志是因为,通过 handleParentTask 方法之后,任务可能被完成了,并且不存在了,会报异常,所以先记录 + AdminUserRespDTO user = adminUserApi.getUser(userId).getCheckedData(); + taskService.addComment(task.getParentTaskId(), task.getProcessInstanceId(), BpmCommentTypeEnum.SUB_SIGN.getType(), + StrUtil.format(BpmCommentTypeEnum.SUB_SIGN.getComment(), user.getNickname(), cancelUser.getNickname())); + + // 4. 处理当前任务的父任务 + handleParentTaskIfSign(task.getParentTaskId()); + } + + /** + * 校验任务是否能被减签 + * + * @param id 任务编号 + * @return 任务信息 + */ + private Task validateTaskCanSignDelete(String id) { + Task task = validateTaskExist(id); + if (task.getParentTaskId() == null) { + throw exception(TASK_SIGN_DELETE_NO_PARENT); + } + Task parentTask = getTask(task.getParentTaskId()); + if (parentTask == null) { + throw exception(TASK_SIGN_DELETE_NO_PARENT); + } + if (BpmTaskSignTypeEnum.of(parentTask.getScopeType()) == null) { + throw exception(TASK_SIGN_DELETE_NO_PARENT); + } + return task; + } + + /** + * 获得所有子任务列表 + * + * @param parentTask 父任务 + * @return 所有子任务列表 + */ + private List getAllChildTaskList(Task parentTask) { + List result = new ArrayList<>(); + // 1. 递归获取子级 + Stack stack = new Stack<>(); + stack.push(parentTask); + // 2. 递归遍历 + for (int i = 0; i < Short.MAX_VALUE; i++) { + if (stack.isEmpty()) { + break; + } + // 2.1 获取子任务们 + Task task = stack.pop(); + List childTaskList = getTaskListByParentTaskId(task.getId()); + // 2.2 如果非空,则添加到 stack 进一步递归 + if (CollUtil.isNotEmpty(childTaskList)) { + stack.addAll(childTaskList); + result.addAll(childTaskList); + } + } + return result; + } + + @Override + public List getTaskListByParentTaskId(String parentTaskId) { + String tableName = managementService.getTableName(TaskEntity.class); + // taskService.createTaskQuery() 没有 parentId 参数,所以写 sql 查询 + String sql = "select ID_,NAME_,OWNER_,ASSIGNEE_ from " + tableName + " where PARENT_TASK_ID_=#{parentTaskId}"; + return taskService.createNativeTaskQuery().sql(sql).parameter("parentTaskId", parentTaskId).list(); + } + + /** + * 获取子任务个数 + * + * @param parentTaskId 父任务 ID + * @return 剩余子任务个数 + */ + private Long getTaskCountByParentTaskId(String parentTaskId) { + String tableName = managementService.getTableName(TaskEntity.class); + String sql = "SELECT COUNT(1) from " + tableName + " WHERE PARENT_TASK_ID_=#{parentTaskId}"; + return taskService.createNativeTaskQuery().sql(sql).parameter("parentTaskId", parentTaskId).count(); + } + + @Override + public Map getTaskNameByTaskIds(Collection taskIds) { + if (CollUtil.isEmpty(taskIds)) { + return Collections.emptyMap(); + } + List tasks = taskService.createTaskQuery().taskIds(taskIds).list(); + return convertMap(tasks, Task::getId, Task::getName); + } + +} diff --git a/win-module-bpm/win-module-bpm-biz/src/main/resources/application-dev.yaml b/win-module-bpm/win-module-bpm-biz/src/main/resources/application-dev.yaml new file mode 100644 index 0000000..cb9d421 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/resources/application-dev.yaml @@ -0,0 +1,101 @@ +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 5 # 初始连接数 + min-idle: 10 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: 123456 + slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: 123456 + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: 400-infra.server.iocoder.cn # 地址 + port: 6379 # 端口 + database: 1 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### +xxl: + job: + admin: + addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +win: + xss: + enable: false + exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 + - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + demo: true # 开启演示模式 diff --git a/win-module-bpm/win-module-bpm-biz/src/main/resources/application-local.yaml b/win-module-bpm/win-module-bpm-biz/src/main/resources/application-local.yaml new file mode 100644 index 0000000..15f76f8 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/resources/application-local.yaml @@ -0,0 +1,201 @@ +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms_cloud_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 + # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + username: sfms + password: Microsoft@2023 + # username: sa # SQL Server 连接的示例 + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 + # username: SYSDBA # DM 连接的示例 + # password: SYSDBA # DM 连接的示例 + slave: # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms_cloud_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: sfms + password: Microsoft@2023 + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: dev.ccwin-in.com # 地址 + port: 23114 # 端口 + database: 12 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + name-server: 127.0.0.1:9876 # RocketMQ Namesrv + +spring: + # RabbitMQ 配置项,对应 RabbitProperties 配置类 + rabbitmq: + host: 127.0.0.1 # RabbitMQ 服务的地址 + port: 5672 # RabbitMQ 服务的端口 + username: guest # RabbitMQ 服务的账号 + password: guest # RabbitMQ 服务的密码 + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + enabled: false # 是否开启调度中心,默认为 true 开启 + admin: + addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + com.win.module.system.dal.mysql: debug + com.win.module.system.dal.mysql.sensitiveword.SensitiveWordMapper: INFO # 配置 SensitiveWordMapper 的日志级别为 info + com.win.module.system.dal.mysql.sms.SmsChannelMapper: INFO # 配置 SmsChannelMapper 的日志级别为 info + +--- #################### 微信公众号、小程序相关配置 #################### +wx: + mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 + # app-id: wx041349c6f39b268b # 测试号(牛希尧提供的) + # secret: 5abee519483bc9f8cb37ce280e814bd0 + app-id: wx5b23ba7a5589ecbb # 测试号(自己的) + secret: 2a7b3b20c537e52e74afd395eb85f61f + # app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的) + # secret: bd4f9fab889591b62aeac0d7b8d8b4a0 + # 存储配置,解决 AccessToken 的跨节点的共享 + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wx # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 + # appid: wx62056c0d5e8db250 # 测试号(牛希尧提供的) + # secret: 333ae72f41552af1e998fe1f54e1584a + appid: wx63c280fe3248a3e7 # wenhualian的接口测试号 + secret: 6f270509224a7ae1296bbf1c8cb97aed + # appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的) + # secret: 4a1a04e07f6a4a0751b39c3064a92c8b + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wa # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +win: + env: # 多环境的配置项 + tag: ${HOSTNAME} + captcha: + enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试 + security: + mock-enable: true + xss: + enable: false + exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 + - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + pay: + pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify + pay-return-url: http://niubi.natapp1.cc/api/pay/order/return + refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify + access-log: # 访问日志的配置项 + enable: false + demo: false # 关闭演示模式 + +justauth: + enabled: true + type: + DINGTALK: # 钉钉 + client-id: dingvrnreaje3yqvzhxg + client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI + ignore-check-redirect-uri: true + WECHAT_ENTERPRISE: # 企业微信 + client-id: wwd411c69a39ad2e54 + client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw + agent-id: 1000004 + ignore-check-redirect-uri: true + # noinspection SpringBootApplicationYaml + WECHAT_MINI_APP: # 微信小程序 + client-id: ${wx.miniapp.appid} + client-secret: ${wx.miniapp.secret} + ignore-check-redirect-uri: true + ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验 + WECHAT_MP: # 微信公众号 + client-id: ${wx.mp.app-id} + client-secret: ${wx.mp.secret} + ignore-check-redirect-uri: true + cache: + type: REDIS + prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: + timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 diff --git a/win-module-bpm/win-module-bpm-biz/src/main/resources/application.yaml b/win-module-bpm/win-module-bpm-biz/src/main/resources/application.yaml new file mode 100644 index 0000000..bd18778 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/resources/application.yaml @@ -0,0 +1,123 @@ +spring: + main: + allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 + allow-bean-definition-overriding: true # 允许 Bean 覆盖,例如说 Feign 等会存在重复定义的服务 + + # Servlet 配置 + servlet: + # 文件上传相关配置项 + multipart: + max-file-size: 16MB # 单个文件大小 + max-request-size: 32MB # 设置总上传的文件大小 + mvc: + pathmatch: + matching-strategy: ANT_PATH_MATCHER # 解决 SpringFox 与 SpringBoot 2.6.x 不兼容的问题,参见 SpringFoxHandlerProviderBeanPostProcessor 类 + + # Jackson 配置项 + jackson: + serialization: + write-dates-as-timestamps: true # 设置 LocalDateTime 的格式,使用时间戳 + write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401 + write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳 + fail-on-empty-beans: false # 允许序列化无属性的 Bean + + # Cache 配置项 + cache: + type: REDIS + redis: + time-to-live: 1h # 设置过期时间为 1 小时 + +--- #################### 接口文档配置 #################### + +springdoc: + api-docs: + enabled: true # 1. 是否开启 Swagger 接文档的元数据 + path: /v3/api-docs + swagger-ui: + enabled: true # 2.1 是否开启 Swagger 文档的官方 UI 界面 + path: /swagger-ui.html + default-flat-param-object: true # 参见 https://doc.xiaominfo.com/docs/faq/v4/knife4j-parameterobject-flat-param 文档 + +knife4j: + enable: true # 2.2 是否开启 Swagger 文档的 Knife4j UI 界面 + setting: + language: zh_cn + +# 工作流 Flowable 配置 +flowable: + # 1. false: 默认值,Flowable 启动时,对比数据库表中保存的版本,如果不匹配。将抛出异常 + # 2. true: 启动时会对数据库中所有表进行更新操作,如果表存在,不做处理,反之,自动创建表 + # 3. create_drop: 启动时自动创建表,关闭时自动删除表 + # 4. drop_create: 启动时,删除旧表,再创建新表 + database-schema-update: true # 设置为 false,可通过 https://github.com/flowable/flowable-sql 初始化 + db-history-used: true # flowable6 默认 true 生成信息表,无需手动设置 + check-process-definitions: false # 设置为 false,禁用 /resources/processes 自动部署 BPMN XML 流程 + history-level: audit # full:保存历史数据的最高级别,可保存全部流程相关细节,包括流程流转各节点参数 + +# MyBatis Plus 的配置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + global-config: + db-config: + id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。 + # id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库 + # id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库 + # id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解 + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + banner: false # 关闭控制台的 Banner 打印 + type-aliases-package: ${win.info.base-package}.dal.dataobject + encryptor: + password: XDV71a+xqStEA3WH # 加解密的秘钥,可使用 https://www.imaegoo.com/2020/aes-key-generator/ 网站生成 + +mybatis-plus-join: + banner: false # 关闭控制台的 Banner 打印 + +# Spring Data Redis 配置 +spring: + data: + redis: + repositories: + enabled: false # 项目未使用到 Spring Data Redis 的 Repository,所以直接禁用,保证启动速度 + +# VO 转换(数据翻译)相关 +easy-trans: + is-enable-global: true # 启用全局翻译(拦截所有 SpringMVC ResponseBody 进行自动翻译 )。如果对于性能要求很高可关闭此配置,或通过 @IgnoreTrans 忽略某个接口 + is-enable-cloud: false # 禁用 TransType.RPC 微服务模式 + +--- #################### RPC 远程调用相关配置 #################### + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + executor: + appname: ${spring.application.name} # 执行器 AppName + logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径 + accessToken: default_token # 执行器通讯TOKEN + +--- #################### 芋道相关配置 #################### + +win: + info: + version: 1.0.0 + base-package: com.win.module.bpm + web: + admin-ui: + url: http://dashboard.win.iocoder.cn # Admin 管理后台 UI 的地址 + swagger: + title: 管理后台 + description: 提供管理员管理的所有功能 + version: ${win.info.version} + base-package: ${win.info.base-package} + captcha: + timeout: 5m + width: 160 + height: 60 + tenant: # 多租户相关配置项 + enable: true + +debug: false diff --git a/win-module-bpm/win-module-bpm-biz/src/main/resources/bootstrap-local.yaml b/win-module-bpm/win-module-bpm-biz/src/main/resources/bootstrap-local.yaml new file mode 100644 index 0000000..9dc3425 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/resources/bootstrap-local.yaml @@ -0,0 +1,23 @@ +--- #################### 注册中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.0.103:8848 + discovery: + namespace: win-cloud-dev # 命名空间。这里使用 dev 开发环境 + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + +--- #################### 配置中心相关配置 #################### + +spring: + cloud: + nacos: + # Nacos Config 配置项,对应 NacosConfigProperties 配置属性类 + config: + server-addr: 192.168.0.103:8848 # Nacos 服务器地址 + namespace: win-cloud-dev # 命名空间 dev 的ID,不能直接使用 dev 名称。创建命名空间的时候需要指定ID为 dev,这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + name: ${spring.application.name}-local # 使用的 Nacos 配置集的 dataId,默认为 spring.application.name + file-extension: yaml # 使用的 Nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties diff --git a/win-module-bpm/win-module-bpm-biz/src/main/resources/bootstrap.yaml b/win-module-bpm/win-module-bpm-biz/src/main/resources/bootstrap.yaml new file mode 100644 index 0000000..7f16173 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/resources/bootstrap.yaml @@ -0,0 +1,14 @@ +spring: + application: + name: bpm-server + + profiles: + active: local + +server: + port: 48084 + +# 日志文件配置。注意,如果 logging.file.name 不放在 bootstrap.yaml 配置文件,而是放在 application.yaml 中,会导致出现 LOG_FILE_IS_UNDEFINED 文件 +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 diff --git a/win-module-bpm/win-module-bpm-biz/src/main/resources/i18n/bpm.properties b/win-module-bpm/win-module-bpm-biz/src/main/resources/i18n/bpm.properties new file mode 100644 index 0000000..6882c29 --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/resources/i18n/bpm.properties @@ -0,0 +1 @@ +#\u6B64\u6587\u4EF6\u4E0D\u9700\u8981\u586B\u5199 \ No newline at end of file diff --git a/win-module-bpm/win-module-bpm-biz/src/main/resources/i18n/bpm_en_US.properties b/win-module-bpm/win-module-bpm-biz/src/main/resources/i18n/bpm_en_US.properties new file mode 100644 index 0000000..e69de29 diff --git a/win-module-bpm/win-module-bpm-biz/src/main/resources/i18n/bpm_zh_CN.properties b/win-module-bpm/win-module-bpm-biz/src/main/resources/i18n/bpm_zh_CN.properties new file mode 100644 index 0000000..e69de29 diff --git a/win-module-bpm/win-module-bpm-biz/src/main/resources/logback-spring.xml b/win-module-bpm/win-module-bpm-biz/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..ce034da --- /dev/null +++ b/win-module-bpm/win-module-bpm-biz/src/main/resources/logback-spring.xml @@ -0,0 +1,76 @@ + + + + + + + + + +       + + + ${PATTERN_DEFAULT} + + + + + + + + + + ${PATTERN_DEFAULT} + + + + ${LOG_FILE} + + + ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz} + + ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false} + + ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB} + + ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0} + + ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30} + + + + + + 0 + + 256 + + + + + + + + ${PATTERN_DEFAULT} + + + + + + + + + + + + + + + + + + + + + + diff --git a/win-module-infra/pom.xml b/win-module-infra/pom.xml new file mode 100644 index 0000000..0b145e0 --- /dev/null +++ b/win-module-infra/pom.xml @@ -0,0 +1,25 @@ + + + + com.win + win + ${revision} + + 4.0.0 + + win-module-infra-api + win-module-infra-biz + + win-module-infra + pom + + ${project.artifactId} + + infra 模块,主要提供两块能力: + 1. 我们放基础设施的运维与管理,支撑上层的通用与核心业务。 例如说:定时任务的管理、服务器的信息等等 + 2. 研发工具,提升研发效率与质量。 例如说:代码生成器、接口文档等等 + + + diff --git a/win-module-infra/win-module-infra-api/pom.xml b/win-module-infra/win-module-infra-api/pom.xml new file mode 100644 index 0000000..b5c5396 --- /dev/null +++ b/win-module-infra/win-module-infra-api/pom.xml @@ -0,0 +1,47 @@ + + + + com.win + win-module-infra + ${revision} + + 4.0.0 + win-module-infra-api + jar + + ${project.artifactId} + + infra 模块 API,暴露给其它模块调用 + + + + + com.win + win-common + + + + + org.springdoc + springdoc-openapi-starter-webmvc-api + provided + + + + + org.springframework.boot + spring-boot-starter-validation + true + + + + + org.springframework.cloud + spring-cloud-starter-openfeign + true + + + + diff --git a/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/file/FileApi.java b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/file/FileApi.java new file mode 100644 index 0000000..c11cf3e --- /dev/null +++ b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/file/FileApi.java @@ -0,0 +1,60 @@ +package com.win.module.infra.api.file; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.infra.api.file.dto.FileCreateReqDTO; +import com.win.module.infra.enums.ApiConstants; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import jakarta.validation.Valid; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 文件") +public interface FileApi { + + String PREFIX = ApiConstants.PREFIX + "/file"; + + /** + * 保存文件,并返回文件的访问路径 + * + * @param content 文件内容 + * @return 文件路径 + */ + default String createFile(byte[] content) { + return createFile(null, null, content); + } + + /** + * 保存文件,并返回文件的访问路径 + * + * @param path 文件路径 + * @param content 文件内容 + * @return 文件路径 + */ + default String createFile(String path, byte[] content) { + return createFile(null, path, content); + } + + /** + * 保存文件,并返回文件的访问路径 + * + * @param name 原文件名称 + * @param path 文件路径 + * @param content 文件内容 + * @return 文件路径 + */ + default String createFile(@RequestParam("name") String name, + @RequestParam("path") String path, + @RequestParam("content") byte[] content) { + return createFile(new FileCreateReqDTO().setName(name).setPath(path).setContent(content)).getCheckedData(); + } + + @PostMapping(PREFIX + "/create") + @Operation(summary = "保存文件,并返回文件的访问路径") + CommonResult createFile(@Valid @RequestBody FileCreateReqDTO createReqDTO); + +} diff --git a/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/file/dto/FileCreateReqDTO.java b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/file/dto/FileCreateReqDTO.java new file mode 100644 index 0000000..98dfd4b --- /dev/null +++ b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/file/dto/FileCreateReqDTO.java @@ -0,0 +1,22 @@ +package com.win.module.infra.api.file.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; + +@Schema(description = "RPC 服务 - 文件创建 Request DTO") +@Data +public class FileCreateReqDTO { + + @Schema(description = "原文件名称", example = "xxx.png") + private String name; + + @Schema(description = "文件路径", example = "xxx.png") + private String path; + + @Schema(description = "文件内容", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "文件内容不能为空") + private byte[] content; + +} diff --git a/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/ApiAccessLogApi.java b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/ApiAccessLogApi.java new file mode 100644 index 0000000..e8305d3 --- /dev/null +++ b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/ApiAccessLogApi.java @@ -0,0 +1,24 @@ +package com.win.module.infra.api.logger; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; +import com.win.module.infra.enums.ApiConstants; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import jakarta.validation.Valid; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - API 访问日志") +public interface ApiAccessLogApi { + + String PREFIX = ApiConstants.PREFIX + "/api-access-log"; + + @PostMapping(PREFIX + "/create") + @Operation(summary = "创建 API 访问日志") + CommonResult createApiAccessLog(@Valid @RequestBody ApiAccessLogCreateReqDTO createDTO); + +} diff --git a/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/ApiErrorLogApi.java b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/ApiErrorLogApi.java new file mode 100644 index 0000000..321e3fa --- /dev/null +++ b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/ApiErrorLogApi.java @@ -0,0 +1,24 @@ +package com.win.module.infra.api.logger; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; +import com.win.module.infra.enums.ApiConstants; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import jakarta.validation.Valid; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - API 异常日志") +public interface ApiErrorLogApi { + + String PREFIX = ApiConstants.PREFIX + "/api-error-log"; + + @PostMapping(PREFIX + "/create") + @Operation(summary = "创建 API 异常日志") + CommonResult createApiErrorLog(@Valid @RequestBody ApiErrorLogCreateReqDTO createDTO); + +} diff --git a/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/dto/ApiAccessLogCreateReqDTO.java b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/dto/ApiAccessLogCreateReqDTO.java new file mode 100644 index 0000000..46f50dd --- /dev/null +++ b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/dto/ApiAccessLogCreateReqDTO.java @@ -0,0 +1,63 @@ +package com.win.module.infra.api.logger.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; + +@Schema(description = "RPC 服务 - API 访问日志创建 Request DTO") +@Data +public class ApiAccessLogCreateReqDTO { + + @Schema(description = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab") + private String traceId; + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long userId; + @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer userType; + @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "system-server") + @NotNull(message = "应用名不能为空") + private String applicationName; + + @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET") + @NotNull(message = "http 请求方法不能为空") + private String requestMethod; + @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/xxx/yyy") + @NotNull(message = "访问地址不能为空") + private String requestUrl; + @Schema(description = "请求参数") + private String requestParams; + @Schema(description = "响应结果") + private String responseBody; + @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") + @NotNull(message = "ip 不能为空") + private String userIp; + @Schema(description = "浏览器 UserAgent", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0") + @NotNull(message = "User-Agent 不能为空") + private String userAgent; + + @Schema(description = "操作模块", requiredMode = Schema.RequiredMode.REQUIRED, example = "商品模块") + private String operateModule; + @Schema(description = "操作名", requiredMode = Schema.RequiredMode.REQUIRED, example = "商品新增") + private String operateName; + @Schema(description = "操作分类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer operateType; // 参见 OperateTypeEnum 枚举 + + @Schema(description = "开始时间",requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "开始请求时间不能为空") + private LocalDateTime beginTime; + @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "结束请求时间不能为空") + private LocalDateTime endTime; + @Schema(description = "执行时长,单位:毫秒", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "执行时长不能为空") + private Integer duration; + @Schema(description = "结果码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "错误码不能为空") + private Integer resultCode; + @Schema(description = "结果提示") + private String resultMsg; + +} diff --git a/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/dto/ApiErrorLogCreateReqDTO.java b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/dto/ApiErrorLogCreateReqDTO.java new file mode 100644 index 0000000..349a60f --- /dev/null +++ b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/logger/dto/ApiErrorLogCreateReqDTO.java @@ -0,0 +1,68 @@ +package com.win.module.infra.api.logger.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; + +@Schema(description = "RPC 服务 - API 错误日志创建 Request DTO") +@Data +public class ApiErrorLogCreateReqDTO { + + @Schema(description = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab") + private String traceId; + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long userId; + @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer userType; + @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "system-server") + @NotNull(message = "应用名不能为空") + private String applicationName; + + @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET") + @NotNull(message = "http 请求方法不能为空") + private String requestMethod; + @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/xxx/yyy") + @NotNull(message = "访问地址不能为空") + private String requestUrl; + @Schema(description = "请求参数", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "请求参数不能为空") + private String requestParams; + @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") + @NotNull(message = "ip 不能为空") + private String userIp; + @Schema(description = "浏览器 UserAgent", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0") + @NotNull(message = "User-Agent 不能为空") + private String userAgent; + + @Schema(description = "异常时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "异常时间不能为空") + private LocalDateTime exceptionTime; + @Schema(description = "异常名", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "异常名不能为空") + private String exceptionName; + @Schema(description = "异常发生的类全名", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "异常发生的类全名不能为空") + private String exceptionClassName; + @Schema(description = "异常发生的类文件", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "异常发生的类文件不能为空") + private String exceptionFileName; + @Schema(description = "异常发生的方法名", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "异常发生的方法名不能为空") + private String exceptionMethodName; + @Schema(description = "异常发生的方法所在行", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "异常发生的方法所在行不能为空") + private Integer exceptionLineNumber; + @Schema(description = "异常的栈轨迹异常的栈轨迹", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "异常的栈轨迹不能为空") + private String exceptionStackTrace; + @Schema(description = "异常导致的根消息", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "异常导致的根消息不能为空") + private String exceptionRootCauseMessage; + @Schema(description = "异常导致的消息", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "异常导致的消息不能为空") + private String exceptionMessage; + +} diff --git a/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/package-info.java b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/package-info.java new file mode 100644 index 0000000..fb1cab7 --- /dev/null +++ b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/package-info.java @@ -0,0 +1,4 @@ +/** + * infra API 包,定义暴露给其它模块的 API + */ +package com.win.module.infra.api; diff --git a/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/websocket/WebSocketSenderApi.java b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/websocket/WebSocketSenderApi.java new file mode 100644 index 0000000..0faf8dd --- /dev/null +++ b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/websocket/WebSocketSenderApi.java @@ -0,0 +1,74 @@ +package com.win.module.infra.api.websocket; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.json.JsonUtils; +import com.win.module.infra.api.websocket.dto.WebSocketSendReqDTO; +import com.win.module.infra.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import jakarta.validation.Valid; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - WebSocket 发送器的") // 对 WebSocketMessageSender 进行封装,提供给其它模块使用 +public interface WebSocketSenderApi { + + String PREFIX = ApiConstants.PREFIX + "/websocket"; + + @PostMapping(PREFIX + "/send") + @Operation(summary = "发送 WebSocket 消息") + CommonResult send(@Valid @RequestBody WebSocketSendReqDTO message); + + /** + * 发送消息给指定用户 + * + * @param userType 用户类型 + * @param userId 用户编号 + * @param messageType 消息类型 + * @param messageContent 消息内容,JSON 格式 + */ + default void send(Integer userType, Long userId, String messageType, String messageContent) { + send(new WebSocketSendReqDTO().setUserType(userType).setUserId(userId) + .setMessageType(messageType).setMessageContent(messageContent)).checkError(); + } + + /** + * 发送消息给指定用户类型 + * + * @param userType 用户类型 + * @param messageType 消息类型 + * @param messageContent 消息内容,JSON 格式 + */ + default void send(Integer userType, String messageType, String messageContent) { + send(new WebSocketSendReqDTO().setUserType(userType) + .setMessageType(messageType).setMessageContent(messageContent)).checkError(); + } + + /** + * 发送消息给指定 Session + * + * @param sessionId Session 编号 + * @param messageType 消息类型 + * @param messageContent 消息内容,JSON 格式 + */ + default void send(String sessionId, String messageType, String messageContent) { + send(new WebSocketSendReqDTO().setSessionId(sessionId) + .setMessageType(messageType).setMessageContent(messageContent)).checkError(); + } + + default void sendObject(Integer userType, Long userId, String messageType, Object messageContent) { + send(userType, userId, messageType, JsonUtils.toJsonString(messageContent)); + } + + default void sendObject(Integer userType, String messageType, Object messageContent) { + send(userType, messageType, JsonUtils.toJsonString(messageContent)); + } + + default void sendObject(String sessionId, String messageType, Object messageContent) { + send(sessionId, messageType, JsonUtils.toJsonString(messageContent)); + } + +} diff --git a/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/websocket/dto/WebSocketSendReqDTO.java b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/websocket/dto/WebSocketSendReqDTO.java new file mode 100644 index 0000000..a91a3eb --- /dev/null +++ b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/api/websocket/dto/WebSocketSendReqDTO.java @@ -0,0 +1,26 @@ +package com.win.module.infra.api.websocket.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; + +@Schema(description = "RPC 服务 - WebSocket 消息发送 Request DTO") +@Data +public class WebSocketSendReqDTO { + + @Schema(description = "Session 编号", example = "abc") + private String sessionId; + @Schema(description = "用户编号", example = "1024") + private Long userId; + @Schema(description = "用户类型", example = "1") + private Integer userType; + + @Schema(description = "消息类型", example = "demo-message") + @NotEmpty(message = "消息类型不能为空") + private String messageType; + @Schema(description = "消息内容", example = "{\"name\":\"李四\"}}") + @NotEmpty(message = "消息内容不能为空") + private String messageContent; + +} diff --git a/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/enums/ApiConstants.java b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/enums/ApiConstants.java new file mode 100644 index 0000000..179f6c9 --- /dev/null +++ b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/enums/ApiConstants.java @@ -0,0 +1,23 @@ +package com.win.module.infra.enums; + +import com.win.framework.common.enums.RpcConstants; + +/** + * API 相关的枚举 + * + * @author 芋道源码 + */ +public class ApiConstants { + + /** + * 服务名 + * + * 注意,需要保证和 spring.application.name 保持一致 + */ + public static final String NAME = "infra-server"; + + public static final String PREFIX = RpcConstants.RPC_API_PREFIX + "/infra"; + + public static final String VERSION = "1.0.0"; + +} diff --git a/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/enums/DictTypeConstants.java b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/enums/DictTypeConstants.java new file mode 100644 index 0000000..722ad4d --- /dev/null +++ b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/enums/DictTypeConstants.java @@ -0,0 +1,20 @@ +package com.win.module.infra.enums; + +/** + * Infra 字典类型的枚举类 + * + * @author 芋道源码 + */ +public interface DictTypeConstants { + + String JOB_STATUS = "infra_job_status"; // 定时任务状态的枚举 + String JOB_LOG_STATUS = "infra_job_log_status"; // 定时任务日志状态的枚举 + + String API_ERROR_LOG_PROCESS_STATUS = "infra_api_error_log_process_status"; // API 错误日志的处理状态的枚举 + + String CONFIG_TYPE = "infra_config_type"; // 参数配置类型 + String BOOLEAN_STRING = "infra_boolean_string"; // Boolean 是否类型 + + String OPERATE_TYPE = "infra_operate_type"; // 操作类型 + +} diff --git a/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/enums/ErrorCodeConstants.java b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/enums/ErrorCodeConstants.java new file mode 100644 index 0000000..8ea93d9 --- /dev/null +++ b/win-module-infra/win-module-infra-api/src/main/java/com/win/module/infra/enums/ErrorCodeConstants.java @@ -0,0 +1,61 @@ +package com.win.module.infra.enums; + +import com.win.framework.common.exception.ErrorCode; + +/** + * Infra 错误码枚举类 + * + * infra 系统,使用 1-001-000-000 段 + */ +public interface ErrorCodeConstants { + + // ========== 参数配置 1-001-000-000 ========== + ErrorCode CONFIG_NOT_EXISTS = new ErrorCode(1_001_000_001, "参数配置不存在"); + ErrorCode CONFIG_KEY_DUPLICATE = new ErrorCode(1_001_000_002, "参数配置 key 重复"); + ErrorCode CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE = new ErrorCode(1_001_000_003, "不能删除类型为系统内置的参数配置"); + ErrorCode CONFIG_GET_VALUE_ERROR_IF_VISIBLE = new ErrorCode(1_001_000_004, "获取参数配置失败,原因:不允许获取不可见配置"); + + // ========== API 错误日志 1-001-002-000 ========== + ErrorCode API_ERROR_LOG_NOT_FOUND = new ErrorCode(1_001_002_000, "API 错误日志不存在"); + ErrorCode API_ERROR_LOG_PROCESSED = new ErrorCode(1_001_002_001, "API 错误日志已处理"); + + // ========= 文件相关 1-001-003-000 ================= + ErrorCode FILE_PATH_EXISTS = new ErrorCode(1_001_003_000, "文件路径已存在"); + ErrorCode FILE_NOT_EXISTS = new ErrorCode(1_001_003_001, "文件不存在"); + ErrorCode FILE_IS_EMPTY = new ErrorCode(1_001_003_002, "文件为空"); + + // ========== 代码生成器 1-001-004-000 ========== + ErrorCode CODEGEN_TABLE_EXISTS = new ErrorCode(1_001_004_002, "表定义已经存在"); + ErrorCode CODEGEN_IMPORT_TABLE_NULL = new ErrorCode(1_001_004_001, "导入的表不存在"); + ErrorCode CODEGEN_IMPORT_COLUMNS_NULL = new ErrorCode(1_001_004_002, "导入的字段不存在"); + ErrorCode CODEGEN_TABLE_NOT_EXISTS = new ErrorCode(1_001_004_004, "表定义不存在"); + ErrorCode CODEGEN_COLUMN_NOT_EXISTS = new ErrorCode(1_001_004_005, "字段义不存在"); + ErrorCode CODEGEN_SYNC_COLUMNS_NULL = new ErrorCode(1_001_004_006, "同步的字段不存在"); + ErrorCode CODEGEN_SYNC_NONE_CHANGE = new ErrorCode(1_001_004_007, "同步失败,不存在改变"); + ErrorCode CODEGEN_TABLE_INFO_TABLE_COMMENT_IS_NULL = new ErrorCode(1_001_004_008, "数据库的表注释未填写"); + ErrorCode CODEGEN_TABLE_INFO_COLUMN_COMMENT_IS_NULL = new ErrorCode(1_001_004_009, "数据库的表字段({})注释未填写"); + ErrorCode CODEGEN_MASTER_TABLE_NOT_EXISTS = new ErrorCode(1_001_004_010, "主表(id={})定义不存在,请检查"); + ErrorCode CODEGEN_SUB_COLUMN_NOT_EXISTS = new ErrorCode(1_001_004_011, "子表的字段(id={})不存在,请检查"); + ErrorCode CODEGEN_MASTER_GENERATION_FAIL_NO_SUB_TABLE = new ErrorCode(1_001_004_012, "主表生成代码失败,原因:它没有子表"); + + // ========== 文件配置 1-001-006-000 ========== + ErrorCode FILE_CONFIG_NOT_EXISTS = new ErrorCode(1_001_006_000, "文件配置不存在"); + ErrorCode FILE_CONFIG_DELETE_FAIL_MASTER = new ErrorCode(1_001_006_001, "该文件配置不允许删除,原因:它是主配置,删除会导致无法上传文件"); + + // ========== 数据源配置 1-001-007-000 ========== + ErrorCode DATA_SOURCE_CONFIG_NOT_EXISTS = new ErrorCode(1_001_007_000, "数据源配置不存在"); + ErrorCode DATA_SOURCE_CONFIG_NOT_OK = new ErrorCode(1_001_007_001, "数据源配置不正确,无法进行连接"); + + // ========== 学生 1-001-201-000 ========== + ErrorCode DEMO01_CONTACT_NOT_EXISTS = new ErrorCode(1_001_201_000, "示例联系人不存在"); + ErrorCode DEMO02_CATEGORY_NOT_EXISTS = new ErrorCode(1_001_201_001, "示例分类不存在"); + ErrorCode DEMO02_CATEGORY_EXITS_CHILDREN = new ErrorCode(1_001_201_002, "存在存在子示例分类,无法删除"); + ErrorCode DEMO02_CATEGORY_PARENT_NOT_EXITS = new ErrorCode(1_001_201_003,"父级示例分类不存在"); + ErrorCode DEMO02_CATEGORY_PARENT_ERROR = new ErrorCode(1_001_201_004, "不能设置自己为父示例分类"); + ErrorCode DEMO02_CATEGORY_NAME_DUPLICATE = new ErrorCode(1_001_201_005, "已经存在该名字的示例分类"); + ErrorCode DEMO02_CATEGORY_PARENT_IS_CHILD = new ErrorCode(1_001_201_006, "不能设置自己的子示例分类为父示例分类"); + ErrorCode DEMO03_STUDENT_NOT_EXISTS = new ErrorCode(1_001_201_007, "学生不存在"); + ErrorCode DEMO03_GRADE_NOT_EXISTS = new ErrorCode(1_001_201_008, "学生班级不存在"); + ErrorCode DEMO03_GRADE_EXISTS = new ErrorCode(1_001_201_009, "学生班级已存在"); + +} diff --git a/win-module-infra/win-module-infra-biz/Dockerfile b/win-module-infra/win-module-infra-biz/Dockerfile new file mode 100644 index 0000000..5c3a65b --- /dev/null +++ b/win-module-infra/win-module-infra-biz/Dockerfile @@ -0,0 +1,19 @@ +## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性 +## 感谢复旦核博士的建议!灰子哥,牛皮! +FROM eclipse-temurin:21-jre + +## 创建目录,并使用它作为工作目录 +RUN mkdir -p /win-module-infra-biz +WORKDIR /win-module-infra-biz +## 将后端项目的 Jar 文件,复制到镜像中 +COPY ./target/win-module-infra-biz.jar app.jar + +## 设置 TZ 时区 +## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖 +ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m" + +## 暴露后端项目的 48080 端口 +EXPOSE 48082 + +## 启动后端项目 +CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar diff --git a/win-module-infra/win-module-infra-biz/pom.xml b/win-module-infra/win-module-infra-biz/pom.xml new file mode 100644 index 0000000..48a8c3d --- /dev/null +++ b/win-module-infra/win-module-infra-biz/pom.xml @@ -0,0 +1,167 @@ + + + + com.win + win-module-infra + ${revision} + + 4.0.0 + win-module-infra-biz + jar + + ${project.artifactId} + + infra 模块,主要提供两块能力: + 1. 我们放基础设施的运维与管理,支撑上层的通用与核心业务。 例如说:定时任务的管理、服务器的信息等等 + 2. 研发工具,提升研发效率与质量。 例如说:代码生成器、接口文档等等 + + + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + + com.win + win-module-system-api + ${revision} + + + com.win + win-module-infra-api + ${revision} + + + + + com.win + win-spring-boot-starter-biz-tenant + + + + + com.win + win-spring-boot-starter-security + + + + com.win + win-spring-boot-starter-websocket + + + + + com.win + win-spring-boot-starter-mybatis + + + com.baomidou + mybatis-plus-generator + + + + com.win + win-spring-boot-starter-redis + + + + + com.win + win-spring-boot-starter-rpc + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.win + win-spring-boot-starter-job + + + + + com.win + win-spring-boot-starter-mq + + + + + com.win + win-spring-boot-starter-excel + + + + org.apache.velocity + velocity-engine-core + + + + + com.win + win-spring-boot-starter-monitor + + + + de.codecentric + spring-boot-admin-starter-server + + + + + commons-net + commons-net + + + com.jcraft + jsch + + + io.minio + minio + + + + org.apache.tika + tika-core + + + org.postgresql + postgresql + + + + + ${project.artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + + + repackage + + + + + + + + diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/InfraServerApplication.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/InfraServerApplication.java new file mode 100644 index 0000000..e506064 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/InfraServerApplication.java @@ -0,0 +1,30 @@ +package com.win.module.infra; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 项目的启动类 + *

    + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * + * @author 芋道源码 + */ +@SpringBootApplication +public class InfraServerApplication { + + public static void main(String[] args) { + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + + SpringApplication.run(InfraServerApplication.class, args); + + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/file/FileApiImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/file/FileApiImpl.java new file mode 100644 index 0000000..8103c61 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/file/FileApiImpl.java @@ -0,0 +1,26 @@ +package com.win.module.infra.api.file; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.infra.api.file.dto.FileCreateReqDTO; +import com.win.module.infra.service.file.FileService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class FileApiImpl implements FileApi { + + @Resource + private FileService fileService; + + @Override + public CommonResult createFile(FileCreateReqDTO createReqDTO) { + return success(fileService.createFile(createReqDTO.getName(), createReqDTO.getPath(), + createReqDTO.getContent())); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/logger/ApiAccessLogApiImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/logger/ApiAccessLogApiImpl.java new file mode 100644 index 0000000..faa82ec --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/logger/ApiAccessLogApiImpl.java @@ -0,0 +1,26 @@ +package com.win.module.infra.api.logger; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; +import com.win.module.infra.service.logger.ApiAccessLogService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class ApiAccessLogApiImpl implements ApiAccessLogApi { + + @Resource + private ApiAccessLogService apiAccessLogService; + + @Override + public CommonResult createApiAccessLog(ApiAccessLogCreateReqDTO createDTO) { + apiAccessLogService.createApiAccessLog(createDTO); + return success(true); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/logger/ApiErrorLogApiImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/logger/ApiErrorLogApiImpl.java new file mode 100644 index 0000000..ff1714a --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/logger/ApiErrorLogApiImpl.java @@ -0,0 +1,26 @@ +package com.win.module.infra.api.logger; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; +import com.win.module.infra.service.logger.ApiErrorLogService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class ApiErrorLogApiImpl implements ApiErrorLogApi { + + @Resource + private ApiErrorLogService apiErrorLogService; + + @Override + public CommonResult createApiErrorLog(ApiErrorLogCreateReqDTO createDTO) { + apiErrorLogService.createApiErrorLog(createDTO); + return success(true); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/package-info.java new file mode 100644 index 0000000..1f23f65 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/package-info.java @@ -0,0 +1 @@ +package com.win.module.infra.api; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/websocket/WebSocketSenderApiImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/websocket/WebSocketSenderApiImpl.java new file mode 100644 index 0000000..59582b1 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/api/websocket/WebSocketSenderApiImpl.java @@ -0,0 +1,36 @@ +package com.win.module.infra.api.websocket; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.websocket.core.sender.WebSocketMessageSender; +import com.win.module.infra.api.websocket.dto.WebSocketSendReqDTO; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class WebSocketSenderApiImpl implements WebSocketSenderApi { + + @Resource + private WebSocketMessageSender webSocketMessageSender; + + @Override + public CommonResult send(WebSocketSendReqDTO message) { + if (StrUtil.isNotEmpty(message.getSessionId())) { + webSocketMessageSender.send(message.getSessionId(), + message.getMessageType(), message.getMessageContent()); + } else if (message.getUserType() != null && message.getUserId() != null) { + webSocketMessageSender.send(message.getUserType(), message.getUserId(), + message.getMessageType(), message.getMessageContent()); + } else if (message.getUserType() != null) { + webSocketMessageSender.send(message.getUserType(), + message.getMessageType(), message.getMessageContent()); + } + return success(true); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/CodegenController.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/CodegenController.java new file mode 100644 index 0000000..0256a2d --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/CodegenController.java @@ -0,0 +1,151 @@ +package com.win.module.infra.controller.admin.codegen; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.ZipUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.infra.controller.admin.codegen.vo.CodegenCreateListReqVO; +import com.win.module.infra.controller.admin.codegen.vo.CodegenDetailRespVO; +import com.win.module.infra.controller.admin.codegen.vo.CodegenPreviewRespVO; +import com.win.module.infra.controller.admin.codegen.vo.CodegenUpdateReqVO; +import com.win.module.infra.controller.admin.codegen.vo.table.CodegenTablePageReqVO; +import com.win.module.infra.controller.admin.codegen.vo.table.CodegenTableRespVO; +import com.win.module.infra.controller.admin.codegen.vo.table.DatabaseTableRespVO; +import com.win.module.infra.convert.codegen.CodegenConvert; +import com.win.module.infra.dal.dataobject.codegen.CodegenColumnDO; +import com.win.module.infra.dal.dataobject.codegen.CodegenTableDO; +import com.win.module.infra.service.codegen.CodegenService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; +import static com.win.module.infra.framework.file.core.utils.FileTypeUtils.writeAttachment; + +@Tag(name = "管理后台 - 代码生成器") +@RestController +@RequestMapping("/infra/codegen") +@Validated +public class CodegenController { + + @Resource + private CodegenService codegenService; + + @GetMapping("/db/table/list") + @Operation(summary = "获得数据库自带的表定义列表", description = "会过滤掉已经导入 Codegen 的表") + @Parameters({ + @Parameter(name = "dataSourceConfigId", description = "数据源配置的编号", required = true, example = "1"), + @Parameter(name = "name", description = "表名,模糊匹配", example = "win"), + @Parameter(name = "comment", description = "描述,模糊匹配", example = "芋道") + }) + @PreAuthorize("@ss.hasPermission('infra:codegen:query')") + public CommonResult> getDatabaseTableList( + @RequestParam(value = "dataSourceConfigId") Long dataSourceConfigId, + @RequestParam(value = "name", required = false) String name, + @RequestParam(value = "comment", required = false) String comment) { + return success(codegenService.getDatabaseTableList(dataSourceConfigId, name, comment)); + } + + @GetMapping("/table/list") + @Operation(summary = "获得表定义列表") + @Parameter(name = "dataSourceConfigId", description = "数据源配置的编号", required = true, example = "1") + @PreAuthorize("@ss.hasPermission('infra:codegen:query')") + public CommonResult> getCodegenTableList(@RequestParam(value = "dataSourceConfigId") Long dataSourceConfigId) { + List list = codegenService.getCodegenTableList(dataSourceConfigId); + return success(BeanUtils.toBean(list, CodegenTableRespVO.class)); + } + + @GetMapping("/table/page") + @Operation(summary = "获得表定义分页") + @PreAuthorize("@ss.hasPermission('infra:codegen:query')") + public CommonResult> getCodegenTablePage(@Valid CodegenTablePageReqVO pageReqVO) { + PageResult pageResult = codegenService.getCodegenTablePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, CodegenTableRespVO.class)); + } + + @GetMapping("/detail") + @Operation(summary = "获得表和字段的明细") + @Parameter(name = "tableId", description = "表编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('infra:codegen:query')") + public CommonResult getCodegenDetail(@RequestParam("tableId") Long tableId) { + CodegenTableDO table = codegenService.getCodegenTable(tableId); + List columns = codegenService.getCodegenColumnListByTableId(tableId); + // 拼装返回 + return success(CodegenConvert.INSTANCE.convert(table, columns)); + } + + @Operation(summary = "基于数据库的表结构,创建代码生成器的表和字段定义") + @PostMapping("/create-list") + @PreAuthorize("@ss.hasPermission('infra:codegen:create')") + public CommonResult> createCodegenList(@Valid @RequestBody CodegenCreateListReqVO reqVO) { + return success(codegenService.createCodegenList(getLoginUserId(), reqVO)); + } + + @Operation(summary = "更新数据库的表和字段定义") + @PutMapping("/update") + @PreAuthorize("@ss.hasPermission('infra:codegen:update')") + public CommonResult updateCodegen(@Valid @RequestBody CodegenUpdateReqVO updateReqVO) { + codegenService.updateCodegen(updateReqVO); + return success(true); + } + + @Operation(summary = "基于数据库的表结构,同步数据库的表和字段定义") + @PutMapping("/sync-from-db") + @Parameter(name = "tableId", description = "表编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('infra:codegen:update')") + public CommonResult syncCodegenFromDB(@RequestParam("tableId") Long tableId) { + codegenService.syncCodegenFromDB(tableId); + return success(true); + } + + @Operation(summary = "删除数据库的表和字段定义") + @DeleteMapping("/delete") + @Parameter(name = "tableId", description = "表编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('infra:codegen:delete')") + public CommonResult deleteCodegen(@RequestParam("tableId") Long tableId) { + codegenService.deleteCodegen(tableId); + return success(true); + } + + @Operation(summary = "预览生成代码") + @GetMapping("/preview") + @Parameter(name = "tableId", description = "表编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('infra:codegen:preview')") + public CommonResult> previewCodegen(@RequestParam("tableId") Long tableId) { + Map codes = codegenService.generationCodes(tableId); + return success(CodegenConvert.INSTANCE.convert(codes)); + } + + @Operation(summary = "下载生成代码") + @GetMapping("/download") + @Parameter(name = "tableId", description = "表编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('infra:codegen:download')") + public void downloadCodegen(@RequestParam("tableId") Long tableId, + HttpServletResponse response) throws IOException { + // 生成代码 + Map codes = codegenService.generationCodes(tableId); + // 构建 zip 包 + String[] paths = codes.keySet().toArray(new String[0]); + ByteArrayInputStream[] ins = codes.values().stream().map(IoUtil::toUtf8Stream).toArray(ByteArrayInputStream[]::new); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipUtil.zip(outputStream, paths, ins); + // 输出 + writeAttachment(response, "codegen.zip", outputStream.toByteArray()); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenCreateListReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenCreateListReqVO.java new file mode 100644 index 0000000..759bbe9 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenCreateListReqVO.java @@ -0,0 +1,21 @@ +package com.win.module.infra.controller.admin.codegen.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; +import java.util.List; + +@Schema(description = "管理后台 - 基于数据库的表结构,创建代码生成器的表和字段定义 Request VO") +@Data +public class CodegenCreateListReqVO { + + @Schema(description = "数据源配置的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "数据源配置的编号不能为空") + private Long dataSourceConfigId; + + @Schema(description = "表名数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1, 2, 3]") + @NotNull(message = "表名数组不能为空") + private List tableNames; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenDetailRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenDetailRespVO.java new file mode 100644 index 0000000..216bb8e --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenDetailRespVO.java @@ -0,0 +1,20 @@ +package com.win.module.infra.controller.admin.codegen.vo; + +import com.win.module.infra.controller.admin.codegen.vo.column.CodegenColumnRespVO; +import com.win.module.infra.controller.admin.codegen.vo.table.CodegenTableRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Schema(description = "管理后台 - 代码生成表和字段的明细 Response VO") +@Data +public class CodegenDetailRespVO { + + @Schema(description = "表定义") + private CodegenTableRespVO table; + + @Schema(description = "字段定义") + private List columns; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenPreviewRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenPreviewRespVO.java new file mode 100644 index 0000000..539318a --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenPreviewRespVO.java @@ -0,0 +1,16 @@ +package com.win.module.infra.controller.admin.codegen.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 代码生成预览 Response VO,注意,每个文件都是一个该对象") +@Data +public class CodegenPreviewRespVO { + + @Schema(description = "文件路径", requiredMode = Schema.RequiredMode.REQUIRED, example = "java/com.win/adminserver/modules/system/controller/test/SysTestDemoController.java") + private String filePath; + + @Schema(description = "代码", requiredMode = Schema.RequiredMode.REQUIRED, example = "Hello World") + private String code; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenUpdateReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenUpdateReqVO.java new file mode 100644 index 0000000..02cd15c --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/CodegenUpdateReqVO.java @@ -0,0 +1,24 @@ +package com.win.module.infra.controller.admin.codegen.vo; + +import com.win.module.infra.controller.admin.codegen.vo.column.CodegenColumnSaveReqVO; +import com.win.module.infra.controller.admin.codegen.vo.table.CodegenTableSaveReqVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import java.util.List; + +@Schema(description = "管理后台 - 代码生成表和字段的修改 Request VO") +@Data +public class CodegenUpdateReqVO { + + @Valid // 校验内嵌的字段 + @NotNull(message = "表定义不能为空") + private CodegenTableSaveReqVO table; + + @Valid // 校验内嵌的字段 + @NotNull(message = "字段定义不能为空") + private List columns; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/column/CodegenColumnRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/column/CodegenColumnRespVO.java new file mode 100644 index 0000000..768ac29 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/column/CodegenColumnRespVO.java @@ -0,0 +1,69 @@ +package com.win.module.infra.controller.admin.codegen.vo.column; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 代码生成字段定义 Response VO") +@Data +public class CodegenColumnRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "表编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long tableId; + + @Schema(description = "字段名", requiredMode = Schema.RequiredMode.REQUIRED, example = "user_age") + private String columnName; + + @Schema(description = "字段类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "int(11)") + private String dataType; + + @Schema(description = "字段描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "年龄") + private String columnComment; + + @Schema(description = "是否允许为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + private Boolean nullable; + + @Schema(description = "是否主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") + private Boolean primaryKey; + + @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + private Integer ordinalPosition; + + @Schema(description = "Java 属性类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "userAge") + private String javaType; + + @Schema(description = "Java 属性名", requiredMode = Schema.RequiredMode.REQUIRED, example = "Integer") + private String javaField; + + @Schema(description = "字典类型", example = "sys_gender") + private String dictType; + + @Schema(description = "数据示例", example = "1024") + private String example; + + @Schema(description = "是否为 Create 创建操作的字段", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + private Boolean createOperation; + + @Schema(description = "是否为 Update 更新操作的字段", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") + private Boolean updateOperation; + + @Schema(description = "是否为 List 查询操作的字段", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + private Boolean listOperation; + + @Schema(description = "List 查询操作的条件类型,参见 CodegenColumnListConditionEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "LIKE") + private String listOperationCondition; + + @Schema(description = "是否为 List 查询操作的返回字段", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + private Boolean listOperationResult; + + @Schema(description = "显示类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "input") + private String htmlType; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/column/CodegenColumnSaveReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/column/CodegenColumnSaveReqVO.java new file mode 100644 index 0000000..5eb4f67 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/column/CodegenColumnSaveReqVO.java @@ -0,0 +1,81 @@ +package com.win.module.infra.controller.admin.codegen.vo.column; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 代码生成字段定义创建/修改 Request VO") +@Data +public class CodegenColumnSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "表编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "表编号不能为空") + private Long tableId; + + @Schema(description = "字段名", requiredMode = Schema.RequiredMode.REQUIRED, example = "user_age") + @NotNull(message = "字段名不能为空") + private String columnName; + + @Schema(description = "字段类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "int(11)") + @NotNull(message = "字段类型不能为空") + private String dataType; + + @Schema(description = "字段描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "年龄") + @NotNull(message = "字段描述不能为空") + private String columnComment; + + @Schema(description = "是否允许为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + @NotNull(message = "是否允许为空不能为空") + private Boolean nullable; + + @Schema(description = "是否主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") + @NotNull(message = "是否主键不能为空") + private Boolean primaryKey; + + @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + @NotNull(message = "排序不能为空") + private Integer ordinalPosition; + + @Schema(description = "Java 属性类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "userAge") + @NotNull(message = "Java 属性类型不能为空") + private String javaType; + + @Schema(description = "Java 属性名", requiredMode = Schema.RequiredMode.REQUIRED, example = "Integer") + @NotNull(message = "Java 属性名不能为空") + private String javaField; + + @Schema(description = "字典类型", example = "sys_gender") + private String dictType; + + @Schema(description = "数据示例", example = "1024") + private String example; + + @Schema(description = "是否为 Create 创建操作的字段", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + @NotNull(message = "是否为 Create 创建操作的字段不能为空") + private Boolean createOperation; + + @Schema(description = "是否为 Update 更新操作的字段", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") + @NotNull(message = "是否为 Update 更新操作的字段不能为空") + private Boolean updateOperation; + + @Schema(description = "是否为 List 查询操作的字段", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + @NotNull(message = "是否为 List 查询操作的字段不能为空") + private Boolean listOperation; + + @Schema(description = "List 查询操作的条件类型,参见 CodegenColumnListConditionEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "LIKE") + @NotNull(message = "List 查询操作的条件类型不能为空") + private String listOperationCondition; + + @Schema(description = "是否为 List 查询操作的返回字段", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + @NotNull(message = "是否为 List 查询操作的返回字段不能为空") + private Boolean listOperationResult; + + @Schema(description = "显示类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "input") + @NotNull(message = "显示类型不能为空") + private String htmlType; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java new file mode 100644 index 0000000..1ef6d90 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java @@ -0,0 +1,33 @@ +package com.win.module.infra.controller.admin.codegen.vo.table; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 表定义分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class CodegenTablePageReqVO extends PageParam { + + @Schema(description = "表名称,模糊匹配", example = "win") + private String tableName; + + @Schema(description = "表描述,模糊匹配", example = "芋道") + private String tableComment; + + @Schema(description = "实体,模糊匹配", example = "Win") + private String className; + + @Schema(description = "创建时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/CodegenTableRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/CodegenTableRespVO.java new file mode 100644 index 0000000..eb3e7be --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/CodegenTableRespVO.java @@ -0,0 +1,72 @@ +package com.win.module.infra.controller.admin.codegen.vo.table; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 代码生成表定义 Response VO") +@Data +public class CodegenTableRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "生成场景,参见 CodegenSceneEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer scene; + + @Schema(description = "表名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + private String tableName; + + @Schema(description = "表描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String tableComment; + + @Schema(description = "备注", example = "我是备注") + private String remark; + + @Schema(description = "模块名", requiredMode = Schema.RequiredMode.REQUIRED, example = "system") + private String moduleName; + + @Schema(description = "业务名", requiredMode = Schema.RequiredMode.REQUIRED, example = "codegen") + private String businessName; + + @Schema(description = "类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "CodegenTable") + private String className; + + @Schema(description = "类描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "代码生成器的表定义") + private String classComment; + + @Schema(description = "作者", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码") + private String author; + + @Schema(description = "模板类型,参见 CodegenTemplateTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer templateType; + + @Schema(description = "前端类型,参见 CodegenFrontTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "20") + private Integer frontType; + + @Schema(description = "父菜单编号", example = "1024") + private Long parentMenuId; + + @Schema(description = "主表的编号", example = "2048") + private Long masterTableId; + @Schema(description = "子表关联主表的字段编号", example = "4096") + private Long subJoinColumnId; + @Schema(description = "主表与子表是否一对多", example = "4096") + private Boolean subJoinMany; + + @Schema(description = "树表的父字段编号", example = "8192") + private Long treeParentColumnId; + @Schema(description = "树表的名字字段编号", example = "16384") + private Long treeNameColumnId; + + @Schema(description = "主键编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Integer dataSourceConfigId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + + @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime updateTime; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/CodegenTableSaveReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/CodegenTableSaveReqVO.java new file mode 100644 index 0000000..8a10595 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/CodegenTableSaveReqVO.java @@ -0,0 +1,100 @@ +package com.win.module.infra.controller.admin.codegen.vo.table; + +import cn.hutool.core.util.ObjectUtil; +import com.win.module.infra.enums.codegen.CodegenSceneEnum; +import com.win.module.infra.enums.codegen.CodegenTemplateTypeEnum; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.AssertTrue; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 代码生成表定义创建/修改 Response VO") +@Data +public class CodegenTableSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "生成场景,参见 CodegenSceneEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "导入类型不能为空") + private Integer scene; + + @Schema(description = "表名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + @NotNull(message = "表名称不能为空") + private String tableName; + + @Schema(description = "表描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + @NotNull(message = "表描述不能为空") + private String tableComment; + + @Schema(description = "备注", example = "我是备注") + private String remark; + + @Schema(description = "模块名", requiredMode = Schema.RequiredMode.REQUIRED, example = "system") + @NotNull(message = "模块名不能为空") + private String moduleName; + + @Schema(description = "业务名", requiredMode = Schema.RequiredMode.REQUIRED, example = "codegen") + @NotNull(message = "业务名不能为空") + private String businessName; + + @Schema(description = "类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "CodegenTable") + @NotNull(message = "类名称不能为空") + private String className; + + @Schema(description = "类描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "代码生成器的表定义") + @NotNull(message = "类描述不能为空") + private String classComment; + + @Schema(description = "作者", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码") + @NotNull(message = "作者不能为空") + private String author; + + @Schema(description = "模板类型,参见 CodegenTemplateTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "模板类型不能为空") + private Integer templateType; + + @Schema(description = "前端类型,参见 CodegenFrontTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "20") + @NotNull(message = "前端类型不能为空") + private Integer frontType; + + @Schema(description = "父菜单编号", example = "1024") + private Long parentMenuId; + + @Schema(description = "主表的编号", example = "2048") + private Long masterTableId; + @Schema(description = "子表关联主表的字段编号", example = "4096") + private Long subJoinColumnId; + @Schema(description = "主表与子表是否一对多", example = "4096") + private Boolean subJoinMany; + + @Schema(description = "树表的父字段编号", example = "8192") + private Long treeParentColumnId; + @Schema(description = "树表的名字字段编号", example = "16384") + private Long treeNameColumnId; + + @AssertTrue(message = "上级菜单不能为空,请前往 [修改生成配置 -> 生成信息] 界面,设置“上级菜单”字段") + @JsonIgnore + public boolean isParentMenuIdValid() { + // 生成场景为管理后台时,必须设置上级菜单,不然生成的菜单 SQL 是无父级菜单的 + return ObjectUtil.notEqual(getScene(), CodegenSceneEnum.ADMIN.getScene()) + || getParentMenuId() != null; + } + + @AssertTrue(message = "关联的父表信息不全") + @JsonIgnore + public boolean isSubValid() { + return ObjectUtil.notEqual(getTemplateType(), CodegenTemplateTypeEnum.SUB) + || (ObjectUtil.isAllNotEmpty(masterTableId, subJoinColumnId, subJoinMany)); + } + + @AssertTrue(message = "关联的树表信息不全") + @JsonIgnore + public boolean isTreeValid() { + return ObjectUtil.notEqual(templateType, CodegenTemplateTypeEnum.TREE) + || (ObjectUtil.isAllNotEmpty(treeParentColumnId, treeNameColumnId)); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/DatabaseTableRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/DatabaseTableRespVO.java new file mode 100644 index 0000000..1c8d44d --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/codegen/vo/table/DatabaseTableRespVO.java @@ -0,0 +1,16 @@ +package com.win.module.infra.controller.admin.codegen.vo.table; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 数据库的表定义 Response VO") +@Data +public class DatabaseTableRespVO { + + @Schema(description = "表名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "yuanma") + private String name; + + @Schema(description = "表描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码") + private String comment; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/ConfigController.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/ConfigController.java new file mode 100644 index 0000000..3bb299d --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/ConfigController.java @@ -0,0 +1,108 @@ +package com.win.module.infra.controller.admin.config; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.infra.controller.admin.config.vo.ConfigPageReqVO; +import com.win.module.infra.controller.admin.config.vo.ConfigRespVO; +import com.win.module.infra.controller.admin.config.vo.ConfigSaveReqVO; +import com.win.module.infra.convert.config.ConfigConvert; +import com.win.module.infra.dal.dataobject.config.ConfigDO; +import com.win.module.infra.enums.ErrorCodeConstants; +import com.win.module.infra.service.config.ConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 参数配置") +@RestController +@RequestMapping("/infra/config") +@Validated +public class ConfigController { + + @Resource + private ConfigService configService; + + @PostMapping("/create") + @Operation(summary = "创建参数配置") + @PreAuthorize("@ss.hasPermission('infra:config:create')") + public CommonResult createConfig(@Valid @RequestBody ConfigSaveReqVO createReqVO) { + return success(configService.createConfig(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "修改参数配置") + @PreAuthorize("@ss.hasPermission('infra:config:update')") + public CommonResult updateConfig(@Valid @RequestBody ConfigSaveReqVO updateReqVO) { + configService.updateConfig(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除参数配置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('infra:config:delete')") + public CommonResult deleteConfig(@RequestParam("id") Long id) { + configService.deleteConfig(id); + return success(true); + } + + @GetMapping(value = "/get") + @Operation(summary = "获得参数配置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('infra:config:query')") + public CommonResult getConfig(@RequestParam("id") Long id) { + return success(ConfigConvert.INSTANCE.convert(configService.getConfig(id))); + } + + @GetMapping(value = "/get-value-by-key") + @Operation(summary = "根据参数键名查询参数值", description = "不可见的配置,不允许返回给前端") + @Parameter(name = "key", description = "参数键", required = true, example = "yunai.biz.username") + public CommonResult getConfigKey(@RequestParam("key") String key) { + ConfigDO config = configService.getConfigByKey(key); + if (config == null) { + return success(null); + } + if (!config.getVisible()) { + throw exception(ErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_VISIBLE); + } + return success(config.getValue()); + } + + @GetMapping("/page") + @Operation(summary = "获取参数配置分页") + @PreAuthorize("@ss.hasPermission('infra:config:query')") + public CommonResult> getConfigPage(@Valid ConfigPageReqVO pageReqVO) { + PageResult page = configService.getConfigPage(pageReqVO); + return success(ConfigConvert.INSTANCE.convertPage(page)); + } + + @GetMapping("/export") + @Operation(summary = "导出参数配置") + @PreAuthorize("@ss.hasPermission('infra:config:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportConfig(@Valid ConfigPageReqVO exportReqVO, + HttpServletResponse response) throws IOException { + exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = configService.getConfigPage(exportReqVO).getList(); + // 输出 + ExcelUtils.write(response, "参数配置.xls", "数据", ConfigRespVO.class, + ConfigConvert.INSTANCE.convertList(list)); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/vo/ConfigPageReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/vo/ConfigPageReqVO.java new file mode 100644 index 0000000..f5a28e6 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/vo/ConfigPageReqVO.java @@ -0,0 +1,33 @@ +package com.win.module.infra.controller.admin.config.vo; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 参数配置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ConfigPageReqVO extends PageParam { + + @Schema(description = "数据源名称,模糊匹配", example = "名称") + private String name; + + @Schema(description = "参数键名,模糊匹配", example = "yunai.db.username") + private String key; + + @Schema(description = "参数类型,参见 SysConfigTypeEnum 枚举", example = "1") + private Integer type; + + @Schema(description = "创建时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/vo/ConfigRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/vo/ConfigRespVO.java new file mode 100644 index 0000000..f80d786 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/vo/ConfigRespVO.java @@ -0,0 +1,56 @@ +package com.win.module.infra.controller.admin.config.vo; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.infra.enums.DictTypeConstants; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 参数配置信息 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ConfigRespVO { + + @Schema(description = "参数配置序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("参数配置序号") + private Long id; + + @Schema(description = "参数分类", requiredMode = Schema.RequiredMode.REQUIRED, example = "biz") + @ExcelProperty("参数分类") + private String category; + + @Schema(description = "参数名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "数据库名") + @ExcelProperty("参数名称") + private String name; + + @Schema(description = "参数键名", requiredMode = Schema.RequiredMode.REQUIRED, example = "yunai.db.username") + @ExcelProperty("参数键名") + private String key; + + @Schema(description = "参数键值", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("参数键值") + private String value; + + @Schema(description = "参数类型,参见 SysConfigTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "参数类型", converter = DictConvert.class) + @DictFormat(DictTypeConstants.CONFIG_TYPE) + private Integer type; + + @Schema(description = "是否可见", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + @ExcelProperty(value = "是否可见", converter = DictConvert.class) + @DictFormat(DictTypeConstants.BOOLEAN_STRING) + private Boolean visible; + + @Schema(description = "备注", example = "备注一下很帅气!") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/vo/ConfigSaveReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/vo/ConfigSaveReqVO.java new file mode 100644 index 0000000..d888bf7 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/config/vo/ConfigSaveReqVO.java @@ -0,0 +1,45 @@ +package com.win.module.infra.controller.admin.config.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; + +@Schema(description = "管理后台 - 参数配置创建/修改 Request VO") +@Data +public class ConfigSaveReqVO { + + @Schema(description = "参数配置序号", example = "1024") + private Long id; + + @Schema(description = "参数分组", requiredMode = Schema.RequiredMode.REQUIRED, example = "biz") + @NotEmpty(message = "参数分组不能为空") + @Size(max = 50, message = "参数名称不能超过 50 个字符") + private String category; + + @Schema(description = "参数名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "数据库名") + @NotBlank(message = "参数名称不能为空") + @Size(max = 100, message = "参数名称不能超过 100 个字符") + private String name; + + @Schema(description = "参数键名", requiredMode = Schema.RequiredMode.REQUIRED, example = "yunai.db.username") + @NotBlank(message = "参数键名长度不能为空") + @Size(max = 100, message = "参数键名长度不能超过 100 个字符") + private String key; + + @Schema(description = "参数键值", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotBlank(message = "参数键值不能为空") + @Size(max = 500, message = "参数键值长度不能超过 500 个字符") + private String value; + + @Schema(description = "是否可见", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + @NotNull(message = "是否可见不能为空") + private Boolean visible; + + @Schema(description = "备注", example = "备注一下很帅气!") + private String remark; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/db/DataSourceConfigController.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/db/DataSourceConfigController.java new file mode 100644 index 0000000..448810e --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/db/DataSourceConfigController.java @@ -0,0 +1,72 @@ +package com.win.module.infra.controller.admin.db; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.infra.controller.admin.db.vo.DataSourceConfigRespVO; +import com.win.module.infra.controller.admin.db.vo.DataSourceConfigSaveReqVO; +import com.win.module.infra.dal.dataobject.db.DataSourceConfigDO; +import com.win.module.infra.service.db.DataSourceConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 数据源配置") +@RestController +@RequestMapping("/infra/data-source-config") +@Validated +public class DataSourceConfigController { + + @Resource + private DataSourceConfigService dataSourceConfigService; + + @PostMapping("/create") + @Operation(summary = "创建数据源配置") + @PreAuthorize("@ss.hasPermission('infra:data-source-config:create')") + public CommonResult createDataSourceConfig(@Valid @RequestBody DataSourceConfigSaveReqVO createReqVO) { + return success(dataSourceConfigService.createDataSourceConfig(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新数据源配置") + @PreAuthorize("@ss.hasPermission('infra:data-source-config:update')") + public CommonResult updateDataSourceConfig(@Valid @RequestBody DataSourceConfigSaveReqVO updateReqVO) { + dataSourceConfigService.updateDataSourceConfig(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除数据源配置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('infra:data-source-config:delete')") + public CommonResult deleteDataSourceConfig(@RequestParam("id") Long id) { + dataSourceConfigService.deleteDataSourceConfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得数据源配置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('infra:data-source-config:query')") + public CommonResult getDataSourceConfig(@RequestParam("id") Long id) { + DataSourceConfigDO config = dataSourceConfigService.getDataSourceConfig(id); + return success(BeanUtils.toBean(config, DataSourceConfigRespVO.class)); + } + + @GetMapping("/list") + @Operation(summary = "获得数据源配置列表") + @PreAuthorize("@ss.hasPermission('infra:data-source-config:query')") + public CommonResult> getDataSourceConfigList() { + List list = dataSourceConfigService.getDataSourceConfigList(); + return success(BeanUtils.toBean(list, DataSourceConfigRespVO.class)); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/db/vo/DataSourceConfigRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/db/vo/DataSourceConfigRespVO.java new file mode 100644 index 0000000..6a2f5de --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/db/vo/DataSourceConfigRespVO.java @@ -0,0 +1,27 @@ +package com.win.module.infra.controller.admin.db.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 数据源配置 Response VO") +@Data +public class DataSourceConfigRespVO { + + @Schema(description = "主键编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Integer id; + + @Schema(description = "数据源名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "test") + private String name; + + @Schema(description = "数据源连接", requiredMode = Schema.RequiredMode.REQUIRED, example = "jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro") + private String url; + + @Schema(description = "用户名", requiredMode = Schema.RequiredMode.REQUIRED, example = "root") + private String username; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/db/vo/DataSourceConfigSaveReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/db/vo/DataSourceConfigSaveReqVO.java new file mode 100644 index 0000000..929a8f5 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/db/vo/DataSourceConfigSaveReqVO.java @@ -0,0 +1,31 @@ +package com.win.module.infra.controller.admin.db.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 数据源配置创建/修改 Request VO") +@Data +public class DataSourceConfigSaveReqVO { + + @Schema(description = "主键编号", example = "1024") + private Long id; + + @Schema(description = "数据源名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "test") + @NotNull(message = "数据源名称不能为空") + private String name; + + @Schema(description = "数据源连接", requiredMode = Schema.RequiredMode.REQUIRED, example = "jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro") + @NotNull(message = "数据源连接不能为空") + private String url; + + @Schema(description = "用户名", requiredMode = Schema.RequiredMode.REQUIRED, example = "root") + @NotNull(message = "用户名不能为空") + private String username; + + @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") + @NotNull(message = "密码不能为空") + private String password; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/Demo01ContactController.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/Demo01ContactController.java new file mode 100644 index 0000000..65d8656 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/Demo01ContactController.java @@ -0,0 +1,93 @@ +package com.win.module.infra.controller.admin.demo.demo01; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.infra.controller.admin.demo.demo01.vo.Demo01ContactPageReqVO; +import com.win.module.infra.controller.admin.demo.demo01.vo.Demo01ContactRespVO; +import com.win.module.infra.controller.admin.demo.demo01.vo.Demo01ContactSaveReqVO; +import com.win.module.infra.dal.dataobject.demo.demo01.Demo01ContactDO; +import com.win.module.infra.service.demo.demo01.Demo01ContactService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 示例联系人") +@RestController +@RequestMapping("/infra/demo01-contact") +@Validated +public class Demo01ContactController { + + @Resource + private Demo01ContactService demo01ContactService; + + @PostMapping("/create") + @Operation(summary = "创建示例联系人") + @PreAuthorize("@ss.hasPermission('infra:demo01-contact:create')") + public CommonResult createDemo01Contact(@Valid @RequestBody Demo01ContactSaveReqVO createReqVO) { + return success(demo01ContactService.createDemo01Contact(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新示例联系人") + @PreAuthorize("@ss.hasPermission('infra:demo01-contact:update')") + public CommonResult updateDemo01Contact(@Valid @RequestBody Demo01ContactSaveReqVO updateReqVO) { + demo01ContactService.updateDemo01Contact(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除示例联系人") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('infra:demo01-contact:delete')") + public CommonResult deleteDemo01Contact(@RequestParam("id") Long id) { + demo01ContactService.deleteDemo01Contact(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得示例联系人") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('infra:demo01-contact:query')") + public CommonResult getDemo01Contact(@RequestParam("id") Long id) { + Demo01ContactDO demo01Contact = demo01ContactService.getDemo01Contact(id); + return success(BeanUtils.toBean(demo01Contact, Demo01ContactRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得示例联系人分页") + @PreAuthorize("@ss.hasPermission('infra:demo01-contact:query')") + public CommonResult> getDemo01ContactPage(@Valid Demo01ContactPageReqVO pageReqVO) { + PageResult pageResult = demo01ContactService.getDemo01ContactPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, Demo01ContactRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出示例联系人 Excel") + @PreAuthorize("@ss.hasPermission('infra:demo01-contact:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportDemo01ContactExcel(@Valid Demo01ContactPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = demo01ContactService.getDemo01ContactPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "示例联系人.xls", "数据", Demo01ContactRespVO.class, + BeanUtils.toBean(list, Demo01ContactRespVO.class)); + } + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/vo/Demo01ContactPageReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/vo/Demo01ContactPageReqVO.java new file mode 100644 index 0000000..3da9dc7 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/vo/Demo01ContactPageReqVO.java @@ -0,0 +1,30 @@ +package com.win.module.infra.controller.admin.demo.demo01.vo; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 示例联系人分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class Demo01ContactPageReqVO extends PageParam { + + @Schema(description = "名字", example = "张三") + private String name; + + @Schema(description = "性别", example = "1") + private Integer sex; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/vo/Demo01ContactRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/vo/Demo01ContactRespVO.java new file mode 100644 index 0000000..23c7c81 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/vo/Demo01ContactRespVO.java @@ -0,0 +1,46 @@ +package com.win.module.infra.controller.admin.demo.demo01.vo; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 示例联系人 Response VO") +@Data +@ExcelIgnoreUnannotated +public class Demo01ContactRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21555") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("名字") + private String name; + + @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "性别", converter = DictConvert.class) + @DictFormat("system_user_sex") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Integer sex; + + @Schema(description = "出生年", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("出生年") + private LocalDateTime birthday; + + @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对") + @ExcelProperty("简介") + private String description; + + @Schema(description = "头像") + @ExcelProperty("头像") + private String avatar; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/vo/Demo01ContactSaveReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/vo/Demo01ContactSaveReqVO.java new file mode 100644 index 0000000..f8dc983 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo01/vo/Demo01ContactSaveReqVO.java @@ -0,0 +1,36 @@ +package com.win.module.infra.controller.admin.demo.demo01.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 示例联系人新增/修改 Request VO") +@Data +public class Demo01ContactSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21555") + private Long id; + + @Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @NotEmpty(message = "名字不能为空") + private String name; + + @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "性别不能为空") + private Integer sex; + + @Schema(description = "出生年", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "出生年不能为空") + private LocalDateTime birthday; + + @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对") + @NotEmpty(message = "简介不能为空") + private String description; + + @Schema(description = "头像") + private String avatar; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/Demo02CategoryController.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/Demo02CategoryController.java new file mode 100644 index 0000000..18d6c40 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/Demo02CategoryController.java @@ -0,0 +1,90 @@ +package com.win.module.infra.controller.admin.demo.demo02; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.infra.controller.admin.demo.demo02.vo.Demo02CategoryListReqVO; +import com.win.module.infra.controller.admin.demo.demo02.vo.Demo02CategoryRespVO; +import com.win.module.infra.controller.admin.demo.demo02.vo.Demo02CategorySaveReqVO; +import com.win.module.infra.dal.dataobject.demo.demo02.Demo02CategoryDO; +import com.win.module.infra.service.demo.demo02.Demo02CategoryService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 示例分类") +@RestController +@RequestMapping("/infra/demo02-category") +@Validated +public class Demo02CategoryController { + + @Resource + private Demo02CategoryService demo02CategoryService; + + @PostMapping("/create") + @Operation(summary = "创建示例分类") + @PreAuthorize("@ss.hasPermission('infra:demo02-category:create')") + public CommonResult createDemo02Category(@Valid @RequestBody Demo02CategorySaveReqVO createReqVO) { + return success(demo02CategoryService.createDemo02Category(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新示例分类") + @PreAuthorize("@ss.hasPermission('infra:demo02-category:update')") + public CommonResult updateDemo02Category(@Valid @RequestBody Demo02CategorySaveReqVO updateReqVO) { + demo02CategoryService.updateDemo02Category(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除示例分类") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('infra:demo02-category:delete')") + public CommonResult deleteDemo02Category(@RequestParam("id") Long id) { + demo02CategoryService.deleteDemo02Category(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得示例分类") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('infra:demo02-category:query')") + public CommonResult getDemo02Category(@RequestParam("id") Long id) { + Demo02CategoryDO demo02Category = demo02CategoryService.getDemo02Category(id); + return success(BeanUtils.toBean(demo02Category, Demo02CategoryRespVO.class)); + } + + @GetMapping("/list") + @Operation(summary = "获得示例分类列表") + @PreAuthorize("@ss.hasPermission('infra:demo02-category:query')") + public CommonResult> getDemo02CategoryList(@Valid Demo02CategoryListReqVO listReqVO) { + List list = demo02CategoryService.getDemo02CategoryList(listReqVO); + return success(BeanUtils.toBean(list, Demo02CategoryRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出示例分类 Excel") + @PreAuthorize("@ss.hasPermission('infra:demo02-category:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportDemo02CategoryExcel(@Valid Demo02CategoryListReqVO listReqVO, + HttpServletResponse response) throws IOException { + List list = demo02CategoryService.getDemo02CategoryList(listReqVO); + // 导出 Excel + ExcelUtils.write(response, "示例分类.xls", "数据", Demo02CategoryRespVO.class, + BeanUtils.toBean(list, Demo02CategoryRespVO.class)); + } + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/vo/Demo02CategoryListReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/vo/Demo02CategoryListReqVO.java new file mode 100644 index 0000000..3635af3 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/vo/Demo02CategoryListReqVO.java @@ -0,0 +1,25 @@ +package com.win.module.infra.controller.admin.demo.demo02.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 示例分类列表 Request VO") +@Data +public class Demo02CategoryListReqVO { + + @Schema(description = "名字", example = "芋艿") + private String name; + + @Schema(description = "父级编号", example = "6080") + private Long parentId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/vo/Demo02CategoryRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/vo/Demo02CategoryRespVO.java new file mode 100644 index 0000000..7b63e24 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/vo/Demo02CategoryRespVO.java @@ -0,0 +1,31 @@ +package com.win.module.infra.controller.admin.demo.demo02.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 示例分类 Response VO") +@Data +@ExcelIgnoreUnannotated +public class Demo02CategoryRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10304") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @ExcelProperty("名字") + private String name; + + @Schema(description = "父级编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "6080") + @ExcelProperty("父级编号") + private Long parentId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/vo/Demo02CategorySaveReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/vo/Demo02CategorySaveReqVO.java new file mode 100644 index 0000000..21f9344 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo02/vo/Demo02CategorySaveReqVO.java @@ -0,0 +1,24 @@ +package com.win.module.infra.controller.admin.demo.demo02.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 示例分类新增/修改 Request VO") +@Data +public class Demo02CategorySaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10304") + private Long id; + + @Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @NotEmpty(message = "名字不能为空") + private String name; + + @Schema(description = "父级编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "6080") + @NotNull(message = "父级编号不能为空") + private Long parentId; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/Demo03StudentController.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/Demo03StudentController.java new file mode 100644 index 0000000..7071448 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/Demo03StudentController.java @@ -0,0 +1,197 @@ +package com.win.module.infra.controller.admin.demo.demo03; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.infra.controller.admin.demo.demo03.vo.Demo03StudentPageReqVO; +import com.win.module.infra.controller.admin.demo.demo03.vo.Demo03StudentRespVO; +import com.win.module.infra.controller.admin.demo.demo03.vo.Demo03StudentSaveReqVO; +import com.win.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO; +import com.win.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO; +import com.win.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO; +import com.win.module.infra.service.demo.demo03.Demo03StudentService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 学生") +@RestController +@RequestMapping("/infra/demo03-student") +@Validated +public class Demo03StudentController { + + @Resource + private Demo03StudentService demo03StudentService; + + @PostMapping("/create") + @Operation(summary = "创建学生") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:create')") + public CommonResult createDemo03Student(@Valid @RequestBody Demo03StudentSaveReqVO createReqVO) { + return success(demo03StudentService.createDemo03Student(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新学生") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:update')") + public CommonResult updateDemo03Student(@Valid @RequestBody Demo03StudentSaveReqVO updateReqVO) { + demo03StudentService.updateDemo03Student(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除学生") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')") + public CommonResult deleteDemo03Student(@RequestParam("id") Long id) { + demo03StudentService.deleteDemo03Student(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得学生") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:query')") + public CommonResult getDemo03Student(@RequestParam("id") Long id) { + Demo03StudentDO demo03Student = demo03StudentService.getDemo03Student(id); + return success(BeanUtils.toBean(demo03Student, Demo03StudentRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得学生分页") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:query')") + public CommonResult> getDemo03StudentPage(@Valid Demo03StudentPageReqVO pageReqVO) { + PageResult pageResult = demo03StudentService.getDemo03StudentPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, Demo03StudentRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出学生 Excel") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportDemo03StudentExcel(@Valid Demo03StudentPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = demo03StudentService.getDemo03StudentPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "学生.xls", "数据", Demo03StudentRespVO.class, + BeanUtils.toBean(list, Demo03StudentRespVO.class)); + } + + // ==================== 子表(学生课程) ==================== + + @GetMapping("/demo03-course/page") + @Operation(summary = "获得学生课程分页") + @Parameter(name = "studentId", description = "学生编号") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:query')") + public CommonResult> getDemo03CoursePage(PageParam pageReqVO, + @RequestParam("studentId") Long studentId) { + return success(demo03StudentService.getDemo03CoursePage(pageReqVO, studentId)); + } + + @PostMapping("/demo03-course/create") + @Operation(summary = "创建学生课程") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:create')") + public CommonResult createDemo03Course(@Valid @RequestBody Demo03CourseDO demo03Course) { + return success(demo03StudentService.createDemo03Course(demo03Course)); + } + + @PutMapping("/demo03-course/update") + @Operation(summary = "更新学生课程") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:update')") + public CommonResult updateDemo03Course(@Valid @RequestBody Demo03CourseDO demo03Course) { + demo03StudentService.updateDemo03Course(demo03Course); + return success(true); + } + + @DeleteMapping("/demo03-course/delete") + @Parameter(name = "id", description = "编号", required = true) + @Operation(summary = "删除学生课程") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')") + public CommonResult deleteDemo03Course(@RequestParam("id") Long id) { + demo03StudentService.deleteDemo03Course(id); + return success(true); + } + + @GetMapping("/demo03-course/get") + @Operation(summary = "获得学生课程") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('infra:demo03-student:query')") + public CommonResult getDemo03Course(@RequestParam("id") Long id) { + return success(demo03StudentService.getDemo03Course(id)); + } + + @GetMapping("/demo03-course/list-by-student-id") + @Operation(summary = "获得学生课程列表") + @Parameter(name = "studentId", description = "学生编号") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:query')") + public CommonResult> getDemo03CourseListByStudentId(@RequestParam("studentId") Long studentId) { + return success(demo03StudentService.getDemo03CourseListByStudentId(studentId)); + } + + // ==================== 子表(学生班级) ==================== + + @GetMapping("/demo03-grade/page") + @Operation(summary = "获得学生班级分页") + @Parameter(name = "studentId", description = "学生编号") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:query')") + public CommonResult> getDemo03GradePage(PageParam pageReqVO, + @RequestParam("studentId") Long studentId) { + return success(demo03StudentService.getDemo03GradePage(pageReqVO, studentId)); + } + + @PostMapping("/demo03-grade/create") + @Operation(summary = "创建学生班级") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:create')") + public CommonResult createDemo03Grade(@Valid @RequestBody Demo03GradeDO demo03Grade) { + return success(demo03StudentService.createDemo03Grade(demo03Grade)); + } + + @PutMapping("/demo03-grade/update") + @Operation(summary = "更新学生班级") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:update')") + public CommonResult updateDemo03Grade(@Valid @RequestBody Demo03GradeDO demo03Grade) { + demo03StudentService.updateDemo03Grade(demo03Grade); + return success(true); + } + + @DeleteMapping("/demo03-grade/delete") + @Parameter(name = "id", description = "编号", required = true) + @Operation(summary = "删除学生班级") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:delete')") + public CommonResult deleteDemo03Grade(@RequestParam("id") Long id) { + demo03StudentService.deleteDemo03Grade(id); + return success(true); + } + + @GetMapping("/demo03-grade/get") + @Operation(summary = "获得学生班级") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('infra:demo03-student:query')") + public CommonResult getDemo03Grade(@RequestParam("id") Long id) { + return success(demo03StudentService.getDemo03Grade(id)); + } + + @GetMapping("/demo03-grade/get-by-student-id") + @Operation(summary = "获得学生班级") + @Parameter(name = "studentId", description = "学生编号") + @PreAuthorize("@ss.hasPermission('infra:demo03-student:query')") + public CommonResult getDemo03GradeByStudentId(@RequestParam("studentId") Long studentId) { + return success(demo03StudentService.getDemo03GradeByStudentId(studentId)); + } + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/package-info.java new file mode 100644 index 0000000..ca08ccf --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/package-info.java @@ -0,0 +1 @@ +package com.win.module.infra.controller.admin.demo.demo03; \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/vo/Demo03StudentPageReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/vo/Demo03StudentPageReqVO.java new file mode 100644 index 0000000..3d4e918 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/vo/Demo03StudentPageReqVO.java @@ -0,0 +1,33 @@ +package com.win.module.infra.controller.admin.demo.demo03.vo; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 学生分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class Demo03StudentPageReqVO extends PageParam { + + @Schema(description = "名字", example = "芋艿") + private String name; + + @Schema(description = "性别") + private Integer sex; + + @Schema(description = "简介", example = "随便") + private String description; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/vo/Demo03StudentRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/vo/Demo03StudentRespVO.java new file mode 100644 index 0000000..e187836 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/vo/Demo03StudentRespVO.java @@ -0,0 +1,42 @@ +package com.win.module.infra.controller.admin.demo.demo03.vo; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 学生 Response VO") +@Data +@ExcelIgnoreUnannotated +public class Demo03StudentRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8525") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @ExcelProperty("名字") + private String name; + + @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty(value = "性别", converter = DictConvert.class) + @DictFormat("system_user_sex") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Integer sex; + + @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("出生日期") + private LocalDateTime birthday; + + @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便") + @ExcelProperty("简介") + private String description; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/vo/Demo03StudentSaveReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/vo/Demo03StudentSaveReqVO.java new file mode 100644 index 0000000..c7b1dd3 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/demo03/vo/Demo03StudentSaveReqVO.java @@ -0,0 +1,41 @@ +package com.win.module.infra.controller.admin.demo.demo03.vo; + +import com.win.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO; +import com.win.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 学生新增/修改 Request VO") +@Data +public class Demo03StudentSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8525") + private Long id; + + @Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @NotEmpty(message = "名字不能为空") + private String name; + + @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "性别不能为空") + private Integer sex; + + @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "出生日期不能为空") + private LocalDateTime birthday; + + @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便") + @NotEmpty(message = "简介不能为空") + private String description; + + + private List demo03Courses; + + private Demo03GradeDO demo03Grade; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/package-info.java new file mode 100644 index 0000000..4fb399a --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/demo/package-info.java @@ -0,0 +1,8 @@ +/** + * 代码生成示例 + * + * 1. demo01:单表(增删改查) + * 2. demo02:单表(树形结构) + * 3. demo03:主子表(标准模式)+ 主子表(ERP 模式)+ 主子表(内嵌模式) + */ +package com.win.module.infra.controller.admin.demo; \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/FileConfigController.http b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/FileConfigController.http new file mode 100644 index 0000000..79b231c --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/FileConfigController.http @@ -0,0 +1,45 @@ +### 请求 /infra/file-config/create 接口 => 成功 +POST {{baseUrl}}/infra/file-config/create +Content-Type: application/json +tenant-id: {{adminTenentId}} +Authorization: Bearer {{token}} + +{ + "name": "S3 - 七牛云", + "remark": "", + "storage": 20, + "config": { + "accessKey": "b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8", + "accessSecret": "kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP", + "bucket": "ruoyi-vue-pro", + "endpoint": "s3-cn-south-1.qiniucs.com", + "domain": "http://test.win.iocoder.cn", + "region": "oss-cn-beijing" + } +} + +### 请求 /infra/file-config/update 接口 => 成功 +PUT {{baseUrl}}/infra/file-config/update +Content-Type: application/json +tenant-id: {{adminTenentId}} +Authorization: Bearer {{token}} + +{ + "id": 2, + "name": "S3 - 七牛云", + "remark": "", + "config": { + "accessKey": "b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8", + "accessSecret": "kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP", + "bucket": "ruoyi-vue-pro", + "endpoint": "s3-cn-south-1.qiniucs.com", + "domain": "http://test.win.iocoder.cn", + "region": "oss-cn-beijing" + } +} + +### 请求 /infra/file-config/test 接口 => 成功 +GET {{baseUrl}}/infra/file-config/test?id=2 +Content-Type: application/json +tenant-id: {{adminTenentId}} +Authorization: Bearer {{token}} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/FileConfigController.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/FileConfigController.java new file mode 100644 index 0000000..1de2fa4 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/FileConfigController.java @@ -0,0 +1,88 @@ +package com.win.module.infra.controller.admin.file; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO; +import com.win.module.infra.controller.admin.file.vo.config.FileConfigRespVO; +import com.win.module.infra.controller.admin.file.vo.config.FileConfigSaveReqVO; +import com.win.module.infra.dal.dataobject.file.FileConfigDO; +import com.win.module.infra.service.file.FileConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 文件配置") +@RestController +@RequestMapping("/infra/file-config") +@Validated +public class FileConfigController { + + @Resource + private FileConfigService fileConfigService; + + @PostMapping("/create") + @Operation(summary = "创建文件配置") + @PreAuthorize("@ss.hasPermission('infra:file-config:create')") + public CommonResult createFileConfig(@Valid @RequestBody FileConfigSaveReqVO createReqVO) { + return success(fileConfigService.createFileConfig(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新文件配置") + @PreAuthorize("@ss.hasPermission('infra:file-config:update')") + public CommonResult updateFileConfig(@Valid @RequestBody FileConfigSaveReqVO updateReqVO) { + fileConfigService.updateFileConfig(updateReqVO); + return success(true); + } + + @PutMapping("/update-master") + @Operation(summary = "更新文件配置为 Master") + @PreAuthorize("@ss.hasPermission('infra:file-config:update')") + public CommonResult updateFileConfigMaster(@RequestParam("id") Long id) { + fileConfigService.updateFileConfigMaster(id); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除文件配置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('infra:file-config:delete')") + public CommonResult deleteFileConfig(@RequestParam("id") Long id) { + fileConfigService.deleteFileConfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得文件配置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('infra:file-config:query')") + public CommonResult getFileConfig(@RequestParam("id") Long id) { + FileConfigDO config = fileConfigService.getFileConfig(id); + return success(BeanUtils.toBean(config, FileConfigRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得文件配置分页") + @PreAuthorize("@ss.hasPermission('infra:file-config:query')") + public CommonResult> getFileConfigPage(@Valid FileConfigPageReqVO pageVO) { + PageResult pageResult = fileConfigService.getFileConfigPage(pageVO); + return success(BeanUtils.toBean(pageResult, FileConfigRespVO.class)); + } + + @GetMapping("/test") + @Operation(summary = "测试文件配置是否正确") + @PreAuthorize("@ss.hasPermission('infra:file-config:query')") + public CommonResult testFileConfig(@RequestParam("id") Long id) throws Exception { + String url = fileConfigService.testFileConfig(id); + return success(url); + } +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/FileController.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/FileController.java new file mode 100644 index 0000000..f3574bf --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/FileController.java @@ -0,0 +1,102 @@ +package com.win.module.infra.controller.admin.file; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.URLUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.infra.controller.admin.file.vo.file.*; +import com.win.module.infra.dal.dataobject.file.FileDO; +import com.win.module.infra.service.file.FileService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.module.infra.framework.file.core.utils.FileTypeUtils.writeAttachment; + +@Tag(name = "管理后台 - 文件存储") +@RestController +@RequestMapping("/infra/file") +@Validated +@Slf4j +public class FileController { + + @Resource + private FileService fileService; + + @PostMapping("/upload") + @Operation(summary = "上传文件", description = "模式一:后端上传文件") + public CommonResult uploadFile(FileUploadReqVO uploadReqVO) throws Exception { + MultipartFile file = uploadReqVO.getFile(); + String path = uploadReqVO.getPath(); + return success(fileService.createFile(file.getOriginalFilename(), path, IoUtil.readBytes(file.getInputStream()))); + } + + @GetMapping("/presigned-url") + @Operation(summary = "获取文件预签名地址", description = "模式二:前端上传文件:用于前端直接上传七牛、阿里云 OSS 等文件存储器") + public CommonResult getFilePresignedUrl(@RequestParam("path") String path) throws Exception { + return success(fileService.getFilePresignedUrl(path)); + } + + @PostMapping("/create") + @Operation(summary = "创建文件", description = "模式二:前端上传文件:配合 presigned-url 接口,记录上传了上传的文件") + public CommonResult createFile(@Valid @RequestBody FileCreateReqVO createReqVO) { + return success(fileService.createFile(createReqVO)); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除文件") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('infra:file:delete')") + public CommonResult deleteFile(@RequestParam("id") Long id) throws Exception { + fileService.deleteFile(id); + return success(true); + } + + @GetMapping("/{configId}/get/**") + @PermitAll + @Operation(summary = "下载文件") + @Parameter(name = "configId", description = "配置编号", required = true) + public void getFileContent(HttpServletRequest request, + HttpServletResponse response, + @PathVariable("configId") Long configId) throws Exception { + // 获取请求的路径 + String path = StrUtil.subAfter(request.getRequestURI(), "/get/", false); + if (StrUtil.isEmpty(path)) { + throw new IllegalArgumentException("结尾的 path 路径必须传递"); + } + // 解码,解决中文路径的问题 https://gitee.com/zhijiantianya/ruoyi-vue-pro/pulls/807/ + path = URLUtil.decode(path); + + // 读取内容 + byte[] content = fileService.getFileContent(configId, path); + if (content == null) { + log.warn("[getFileContent][configId({}) path({}) 文件不存在]", configId, path); + response.setStatus(HttpStatus.NOT_FOUND.value()); + return; + } + writeAttachment(response, path, content); + } + + @GetMapping("/page") + @Operation(summary = "获得文件分页") + @PreAuthorize("@ss.hasPermission('infra:file:query')") + public CommonResult> getFilePage(@Valid FilePageReqVO pageVO) { + PageResult pageResult = fileService.getFilePage(pageVO); + return success(BeanUtils.toBean(pageResult, FileRespVO.class)); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/config/FileConfigPageReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/config/FileConfigPageReqVO.java new file mode 100644 index 0000000..89060e4 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/config/FileConfigPageReqVO.java @@ -0,0 +1,30 @@ +package com.win.module.infra.controller.admin.file.vo.config; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 文件配置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class FileConfigPageReqVO extends PageParam { + + @Schema(description = "配置名", example = "S3 - 阿里云") + private String name; + + @Schema(description = "存储器", example = "1") + private Integer storage; + + @Schema(description = "创建时间", example = "[2022-07-01 00:00:00, 2022-07-01 23:59:59]") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/config/FileConfigRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/config/FileConfigRespVO.java new file mode 100644 index 0000000..ac76d31 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/config/FileConfigRespVO.java @@ -0,0 +1,34 @@ +package com.win.module.infra.controller.admin.file.vo.config; + +import com.win.module.infra.framework.file.core.client.FileClientConfig; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 文件配置 Response VO") +@Data +public class FileConfigRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "配置名", requiredMode = Schema.RequiredMode.REQUIRED, example = "S3 - 阿里云") + private String name; + + @Schema(description = "存储器,参见 FileStorageEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer storage; + + @Schema(description = "是否为主配置", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + private Boolean master; + + @Schema(description = "存储配置", requiredMode = Schema.RequiredMode.REQUIRED) + private FileClientConfig config; + + @Schema(description = "备注", example = "我是备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/config/FileConfigSaveReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/config/FileConfigSaveReqVO.java new file mode 100644 index 0000000..c038efd --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/config/FileConfigSaveReqVO.java @@ -0,0 +1,31 @@ +package com.win.module.infra.controller.admin.file.vo.config; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; +import java.util.Map; + +@Schema(description = "管理后台 - 文件配置创建/修改 Request VO") +@Data +public class FileConfigSaveReqVO { + + @Schema(description = "编号", example = "1") + private Long id; + + @Schema(description = "配置名", requiredMode = Schema.RequiredMode.REQUIRED, example = "S3 - 阿里云") + @NotNull(message = "配置名不能为空") + private String name; + + @Schema(description = "存储器,参见 FileStorageEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "存储器不能为空") + private Integer storage; + + @Schema(description = "存储配置,配置是动态参数,所以使用 Map 接收", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "存储配置不能为空") + private Map config; + + @Schema(description = "备注", example = "我是备注") + private String remark; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FileCreateReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FileCreateReqVO.java new file mode 100644 index 0000000..f19e361 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FileCreateReqVO.java @@ -0,0 +1,33 @@ +package com.win.module.infra.controller.admin.file.vo.file; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Schema(description = "管理后台 - 文件创建 Request VO") +@Data +public class FileCreateReqVO { + + @NotNull(message = "文件配置编号不能为空") + @Schema(description = "文件配置编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11") + private Long configId; + + @NotNull(message = "文件路径不能为空") + @Schema(description = "文件路径", requiredMode = Schema.RequiredMode.REQUIRED, example = "win.jpg") + private String path; + + @NotNull(message = "原文件名不能为空") + @Schema(description = "原文件名", requiredMode = Schema.RequiredMode.REQUIRED, example = "win.jpg") + private String name; + + @NotNull(message = "文件 URL不能为空") + @Schema(description = "文件 URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/win.jpg") + private String url; + + @Schema(description = "文件 MIME 类型", example = "application/octet-stream") + private String type; + + @Schema(description = "文件大小", example = "2048", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer size; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FilePageReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FilePageReqVO.java new file mode 100644 index 0000000..df595ef --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FilePageReqVO.java @@ -0,0 +1,30 @@ +package com.win.module.infra.controller.admin.file.vo.file; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 文件分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class FilePageReqVO extends PageParam { + + @Schema(description = "文件路径,模糊匹配", example = "win") + private String path; + + @Schema(description = "文件类型,模糊匹配", example = "jpg") + private String type; + + @Schema(description = "创建时间", example = "[2022-07-01 00:00:00, 2022-07-01 23:59:59]") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FilePresignedUrlRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FilePresignedUrlRespVO.java new file mode 100644 index 0000000..81ecbfa --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FilePresignedUrlRespVO.java @@ -0,0 +1,29 @@ +package com.win.module.infra.controller.admin.file.vo.file; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Schema(description = "管理后台 - 文件预签名地址 Response VO") +@Data +public class FilePresignedUrlRespVO { + + @Schema(description = "配置编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11") + private Long configId; + + @Schema(description = "文件上传 URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://s3.cn-south-1.qiniucs.com/ruoyi-vue-pro/758d3a5387507358c7236de4c8f96de1c7f5097ff6a7722b34772fb7b76b140f.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS%2F20240217%2Fcn-south-1%2Fs3%2Faws4_request&X-Amz-Date=20240217T123222Z&X-Amz-Expires=600&X-Amz-SignedHeaders=host&X-Amz-Signature=a29f33770ab79bf523ccd4034d0752ac545f3c2a3b17baa1eb4e280cfdccfda5") + private String uploadUrl; + + /** + * 为什么要返回 url 字段? + * + * 前端上传完文件后,需要使用该 URL 进行访问 + */ + @Schema(description = "文件访问 URL", requiredMode = Schema.RequiredMode.REQUIRED, + example = "https://test.win.iocoder.cn/758d3a5387507358c7236de4c8f96de1c7f5097ff6a7722b34772fb7b76b140f.png") + private String url; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FileRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FileRespVO.java new file mode 100644 index 0000000..1b72f8a --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FileRespVO.java @@ -0,0 +1,36 @@ +package com.win.module.infra.controller.admin.file.vo.file; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 文件 Response VO,不返回 content 字段,太大") +@Data +public class FileRespVO { + + @Schema(description = "文件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "配置编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11") + private Long configId; + + @Schema(description = "文件路径", requiredMode = Schema.RequiredMode.REQUIRED, example = "win.jpg") + private String path; + + @Schema(description = "原文件名", requiredMode = Schema.RequiredMode.REQUIRED, example = "win.jpg") + private String name; + + @Schema(description = "文件 URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/win.jpg") + private String url; + + @Schema(description = "文件MIME类型", example = "application/octet-stream") + private String type; + + @Schema(description = "文件大小", example = "2048", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer size; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FileUploadReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FileUploadReqVO.java new file mode 100644 index 0000000..6128f69 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/file/vo/file/FileUploadReqVO.java @@ -0,0 +1,20 @@ +package com.win.module.infra.controller.admin.file.vo.file; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 上传文件 Request VO") +@Data +public class FileUploadReqVO { + + @Schema(description = "文件附件", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "文件附件不能为空") + private MultipartFile file; + + @Schema(description = "文件附件", example = "winyuanma.png") + private String path; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/job/JobController.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/job/JobController.java new file mode 100644 index 0000000..4c5e8be --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/job/JobController.java @@ -0,0 +1,27 @@ +package com.win.module.infra.controller.admin.job; + +import com.win.framework.common.pojo.CommonResult; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import static com.win.framework.common.pojo.CommonResult.error; + +@Tag(name = "管理后台 - 定时任务") +@RestController +@RequestMapping("/infra/job") +@Validated +public class JobController { + + @GetMapping("/page") + @Operation(summary = "获得定时任务分页") + @PreAuthorize("@ss.hasPermission('infra:job:query')") + public CommonResult getJobPage() { + return error(-1, "Cloud 版本使用 XXL-Job 作为定时任务!请参考 https://cloud.iocoder.cn/job/ 文档操作"); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/ApiAccessLogController.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/ApiAccessLogController.java new file mode 100644 index 0000000..d1301f1 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/ApiAccessLogController.java @@ -0,0 +1,60 @@ +package com.win.module.infra.controller.admin.logger; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; +import com.win.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogRespVO; +import com.win.module.infra.dal.dataobject.logger.ApiAccessLogDO; +import com.win.module.infra.service.logger.ApiAccessLogService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - API 访问日志") +@RestController +@RequestMapping("/infra/api-access-log") +@Validated +public class ApiAccessLogController { + + @Resource + private ApiAccessLogService apiAccessLogService; + + @GetMapping("/page") + @Operation(summary = "获得API 访问日志分页") + @PreAuthorize("@ss.hasPermission('infra:api-access-log:query')") + public CommonResult> getApiAccessLogPage(@Valid ApiAccessLogPageReqVO pageReqVO) { + PageResult pageResult = apiAccessLogService.getApiAccessLogPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ApiAccessLogRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出API 访问日志 Excel") + @PreAuthorize("@ss.hasPermission('infra:api-access-log:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportApiAccessLogExcel(@Valid ApiAccessLogPageReqVO exportReqVO, + HttpServletResponse response) throws IOException { + exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = apiAccessLogService.getApiAccessLogPage(exportReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "API 访问日志.xls", "数据", ApiAccessLogRespVO.class, + BeanUtils.toBean(list, ApiAccessLogRespVO.class)); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/ApiErrorLogController.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/ApiErrorLogController.java new file mode 100644 index 0000000..d5e66a3 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/ApiErrorLogController.java @@ -0,0 +1,74 @@ +package com.win.module.infra.controller.admin.logger; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; +import com.win.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogRespVO; +import com.win.module.infra.dal.dataobject.logger.ApiErrorLogDO; +import com.win.module.infra.service.logger.ApiErrorLogService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +@Tag(name = "管理后台 - API 错误日志") +@RestController +@RequestMapping("/infra/api-error-log") +@Validated +public class ApiErrorLogController { + + @Resource + private ApiErrorLogService apiErrorLogService; + + @PutMapping("/update-status") + @Operation(summary = "更新 API 错误日志的状态") + @Parameters({ + @Parameter(name = "id", description = "编号", required = true, example = "1024"), + @Parameter(name = "processStatus", description = "处理状态", required = true, example = "1") + }) + @PreAuthorize("@ss.hasPermission('infra:api-error-log:update-status')") + public CommonResult updateApiErrorLogProcess(@RequestParam("id") Long id, + @RequestParam("processStatus") Integer processStatus) { + apiErrorLogService.updateApiErrorLogProcess(id, processStatus, getLoginUserId()); + return success(true); + } + + @GetMapping("/page") + @Operation(summary = "获得 API 错误日志分页") + @PreAuthorize("@ss.hasPermission('infra:api-error-log:query')") + public CommonResult> getApiErrorLogPage(@Valid ApiErrorLogPageReqVO pageReqVO) { + PageResult pageResult = apiErrorLogService.getApiErrorLogPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ApiErrorLogRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出 API 错误日志 Excel") + @PreAuthorize("@ss.hasPermission('infra:api-error-log:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportApiErrorLogExcel(@Valid ApiErrorLogPageReqVO exportReqVO, + HttpServletResponse response) throws IOException { + exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = apiErrorLogService.getApiErrorLogPage(exportReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "API 错误日志.xls", "数据", ApiErrorLogRespVO.class, + BeanUtils.toBean(list, ApiErrorLogRespVO.class)); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogPageReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogPageReqVO.java new file mode 100644 index 0000000..924a0bc --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogPageReqVO.java @@ -0,0 +1,42 @@ +package com.win.module.infra.controller.admin.logger.vo.apiaccesslog; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - API 访问日志分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ApiAccessLogPageReqVO extends PageParam { + + @Schema(description = "用户编号", example = "666") + private Long userId; + + @Schema(description = "用户类型", example = "2") + private Integer userType; + + @Schema(description = "应用名", example = "dashboard") + private String applicationName; + + @Schema(description = "请求地址,模糊匹配", example = "/xxx/yyy") + private String requestUrl; + + @Schema(description = "开始时间", example = "[2022-07-01 00:00:00, 2022-07-01 23:59:59]") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] beginTime; + + @Schema(description = "执行时长,大于等于,单位:毫秒", example = "100") + private Integer duration; + + @Schema(description = "结果码", example = "0") + private Integer resultCode; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogRespVO.java new file mode 100644 index 0000000..a4d9f49 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogRespVO.java @@ -0,0 +1,99 @@ +package com.win.module.infra.controller.admin.logger.vo.apiaccesslog; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.system.enums.DictTypeConstants; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - API 访问日志 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ApiAccessLogRespVO { + + @Schema(description = "日志主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("日志主键") + private Long id; + + @Schema(description = "链路追踪编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "66600cb6-7852-11eb-9439-0242ac130002") + @ExcelProperty("链路追踪编号") + private String traceId; + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") + @ExcelProperty("用户编号") + private Long userId; + + @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty(value = "用户类型", converter = DictConvert.class) + @DictFormat(DictTypeConstants.USER_TYPE) + private Integer userType; + + @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "dashboard") + @ExcelProperty("应用名") + private String applicationName; + + @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET") + @ExcelProperty("请求方法名") + private String requestMethod; + + @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/xxx/yyy") + @ExcelProperty("请求地址") + private String requestUrl; + + @Schema(description = "请求参数") + @ExcelProperty("请求参数") + private String requestParams; + + @Schema(description = "响应结果") + @ExcelProperty("响应结果") + private String responseBody; + + @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") + @ExcelProperty("用户 IP") + private String userIp; + + @Schema(description = "浏览器 UA", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0") + @ExcelProperty("浏览器 UA") + private String userAgent; + + @Schema(description = "操作模块", requiredMode = Schema.RequiredMode.REQUIRED, example = "商品模块") + @ExcelProperty("操作模块") + private String operateModule; + + @Schema(description = "操作名", requiredMode = Schema.RequiredMode.REQUIRED, example = "创建商品") + @ExcelProperty("操作名") + private String operateName; + + @Schema(description = "操作分类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "操作分类", converter = DictConvert.class) + @DictFormat(com.win.module.infra.enums.DictTypeConstants.OPERATE_TYPE) + private Integer operateType; + + @Schema(description = "开始请求时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("开始请求时间") + private LocalDateTime beginTime; + + @Schema(description = "结束请求时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("结束请求时间") + private LocalDateTime endTime; + + @Schema(description = "执行时长", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + @ExcelProperty("执行时长") + private Integer duration; + + @Schema(description = "结果码", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") + @ExcelProperty("结果码") + private Integer resultCode; + + @Schema(description = "结果提示", example = "芋道源码,牛逼!") + @ExcelProperty("结果提示") + private String resultMsg; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogPageReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogPageReqVO.java new file mode 100644 index 0000000..0514ef5 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogPageReqVO.java @@ -0,0 +1,39 @@ +package com.win.module.infra.controller.admin.logger.vo.apierrorlog; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - API 错误日志分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ApiErrorLogPageReqVO extends PageParam { + + @Schema(description = "用户编号", example = "666") + private Long userId; + + @Schema(description = "用户类型", example = "1") + private Integer userType; + + @Schema(description = "应用名", example = "dashboard") + private String applicationName; + + @Schema(description = "请求地址", example = "/xx/yy") + private String requestUrl; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @Schema(description = "异常发生时间") + private LocalDateTime[] exceptionTime; + + @Schema(description = "处理状态", example = "0") + private Integer processStatus; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogRespVO.java new file mode 100644 index 0000000..f0f5bce --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogRespVO.java @@ -0,0 +1,112 @@ +package com.win.module.infra.controller.admin.logger.vo.apierrorlog; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.infra.enums.DictTypeConstants; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - API 错误日志 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ApiErrorLogRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("编号") + private Integer id; + + @Schema(description = "链路追踪编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "66600cb6-7852-11eb-9439-0242ac130002") + @ExcelProperty("链路追踪编号") + private String traceId; + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") + @ExcelProperty("用户编号") + private Integer userId; + + @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "用户类型", converter = DictConvert.class) + @DictFormat(com.win.module.system.enums.DictTypeConstants.USER_TYPE) + private Integer userType; + + @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "dashboard") + @ExcelProperty("应用名") + private String applicationName; + + @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET") + @ExcelProperty("请求方法名") + private String requestMethod; + + @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/xx/yy") + @ExcelProperty("请求地址") + private String requestUrl; + + @Schema(description = "请求参数", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("请求参数") + private String requestParams; + + @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") + @ExcelProperty("用户 IP") + private String userIp; + + @Schema(description = "浏览器 UA", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0") + @ExcelProperty("浏览器 UA") + private String userAgent; + + @Schema(description = "异常发生时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("异常发生时间") + private LocalDateTime exceptionTime; + + @Schema(description = "异常名", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("异常名") + private String exceptionName; + + @Schema(description = "异常导致的消息", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("异常导致的消息") + private String exceptionMessage; + + @Schema(description = "异常导致的根消息", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("异常导致的根消息") + private String exceptionRootCauseMessage; + + @Schema(description = "异常的栈轨迹", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("异常的栈轨迹") + private String exceptionStackTrace; + + @Schema(description = "异常发生的类全名", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("异常发生的类全名") + private String exceptionClassName; + + @Schema(description = "异常发生的类文件", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("异常发生的类文件") + private String exceptionFileName; + + @Schema(description = "异常发生的方法名", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("异常发生的方法名") + private String exceptionMethodName; + + @Schema(description = "异常发生的方法所在行", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("异常发生的方法所在行") + private Integer exceptionLineNumber; + + @Schema(description = "处理状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") + @ExcelProperty(value = "处理状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.API_ERROR_LOG_PROCESS_STATUS) + private Integer processStatus; + + @Schema(description = "处理时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("处理时间") + private LocalDateTime processTime; + + @Schema(description = "处理用户编号", example = "233") + @ExcelProperty("处理用户编号") + private Integer processUserId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/redis/RedisController.http b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/redis/RedisController.http new file mode 100644 index 0000000..8a0e70f --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/redis/RedisController.http @@ -0,0 +1,4 @@ +### 请求 /infra/redis/get-monitor-info 接口 => 成功 +GET {{baseUrl}}/infra/redis/get-monitor-info +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/redis/RedisController.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/redis/RedisController.java new file mode 100644 index 0000000..62609ba --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/redis/RedisController.java @@ -0,0 +1,43 @@ +package com.win.module.infra.controller.admin.redis; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.infra.controller.admin.redis.vo.RedisMonitorRespVO; +import com.win.module.infra.convert.redis.RedisConvert; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.data.redis.connection.RedisServerCommands; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import java.util.Properties; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - Redis 监控") +@RestController +@RequestMapping("/infra/redis") +public class RedisController { + + @Resource + private StringRedisTemplate stringRedisTemplate; + + @GetMapping("/get-monitor-info") + @Operation(summary = "获得 Redis 监控信息") + @PreAuthorize("@ss.hasPermission('infra:redis:get-monitor-info')") + public CommonResult getRedisMonitorInfo() { + // 获得 Redis 统计信息 + Properties info = stringRedisTemplate.execute((RedisCallback) RedisServerCommands::info); + Long dbSize = stringRedisTemplate.execute(RedisServerCommands::dbSize); + Properties commandStats = stringRedisTemplate.execute(( + RedisCallback) connection -> connection.serverCommands().info("commandstats")); + assert commandStats != null; // 断言,避免警告 + // 拼接结果返回 + return success(RedisConvert.INSTANCE.build(info, dbSize, commandStats)); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/redis/vo/RedisMonitorRespVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/redis/vo/RedisMonitorRespVO.java new file mode 100644 index 0000000..dd19c84 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/admin/redis/vo/RedisMonitorRespVO.java @@ -0,0 +1,43 @@ +package com.win.module.infra.controller.admin.redis.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; + +import java.util.List; +import java.util.Properties; + +@Schema(description = "管理后台 - Redis 监控信息 Response VO") +@Data +@Builder +@AllArgsConstructor +public class RedisMonitorRespVO { + + @Schema(description = "Redis info 指令结果,具体字段,查看 Redis 文档", requiredMode = Schema.RequiredMode.REQUIRED) + private Properties info; + + @Schema(description = "Redis key 数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long dbSize; + + @Schema(description = "CommandStat 数组", requiredMode = Schema.RequiredMode.REQUIRED) + private List commandStats; + + @Schema(description = "Redis 命令统计结果") + @Data + @Builder + @AllArgsConstructor + public static class CommandStat { + + @Schema(description = "Redis 命令", requiredMode = Schema.RequiredMode.REQUIRED, example = "get") + private String command; + + @Schema(description = "调用次数", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long calls; + + @Schema(description = "消耗 CPU 秒数", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") + private Long usec; + + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/app/file/AppFileController.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/app/file/AppFileController.java new file mode 100644 index 0000000..cd36c23 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/app/file/AppFileController.java @@ -0,0 +1,38 @@ +package com.win.module.infra.controller.app.file; + +import cn.hutool.core.io.IoUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.module.infra.controller.app.file.vo.AppFileUploadReqVO; +import com.win.module.infra.service.file.FileService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "用户 App - 文件存储") +@RestController +@RequestMapping("/infra/file") +@Validated +@Slf4j +public class AppFileController { + + @Resource + private FileService fileService; + + @PostMapping("/upload") + @Operation(summary = "上传文件") + public CommonResult uploadFile(AppFileUploadReqVO uploadReqVO) throws Exception { + MultipartFile file = uploadReqVO.getFile(); + String path = uploadReqVO.getPath(); + return success(fileService.createFile(file.getOriginalFilename(), path, IoUtil.readBytes(file.getInputStream()))); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/app/file/vo/AppFileUploadReqVO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/app/file/vo/AppFileUploadReqVO.java new file mode 100644 index 0000000..1f882fb --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/app/file/vo/AppFileUploadReqVO.java @@ -0,0 +1,20 @@ +package com.win.module.infra.controller.app.file.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import jakarta.validation.constraints.NotNull; + +@Schema(description = "用户 App - 上传文件 Request VO") +@Data +public class AppFileUploadReqVO { + + @Schema(description = "文件附件", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "文件附件不能为空") + private MultipartFile file; + + @Schema(description = "文件附件", example = "winyuanma.png") + private String path; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/app/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/app/package-info.java new file mode 100644 index 0000000..60bf46d --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/app/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package com.win.module.infra.controller.app; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/package-info.java new file mode 100644 index 0000000..97529d2 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/controller/package-info.java @@ -0,0 +1,6 @@ +/** + * 提供 RESTful API 给前端: + * 1. admin 包:提供给管理后台 win-ui-admin 前端项目 + * 2. app 包:提供给用户 APP win-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 + */ +package com.win.module.infra.controller; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/codegen/CodegenConvert.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/codegen/CodegenConvert.java new file mode 100644 index 0000000..6219ba6 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/codegen/CodegenConvert.java @@ -0,0 +1,68 @@ +package com.win.module.infra.convert.codegen; + +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.infra.controller.admin.codegen.vo.CodegenDetailRespVO; +import com.win.module.infra.controller.admin.codegen.vo.CodegenPreviewRespVO; +import com.win.module.infra.controller.admin.codegen.vo.column.CodegenColumnRespVO; +import com.win.module.infra.controller.admin.codegen.vo.table.CodegenTableRespVO; +import com.win.module.infra.dal.dataobject.codegen.CodegenColumnDO; +import com.win.module.infra.dal.dataobject.codegen.CodegenTableDO; +import com.baomidou.mybatisplus.generator.config.po.TableField; +import com.baomidou.mybatisplus.generator.config.po.TableInfo; +import org.apache.ibatis.type.JdbcType; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; +import org.mapstruct.Named; +import org.mapstruct.factory.Mappers; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CodegenConvert { + + CodegenConvert INSTANCE = Mappers.getMapper(CodegenConvert.class); + + // ========== TableInfo 相关 ========== + + @Mappings({ + @Mapping(source = "name", target = "tableName"), + @Mapping(source = "comment", target = "tableComment"), + }) + CodegenTableDO convert(TableInfo bean); + + List convertList(List list); + + @Mappings({ + @Mapping(source = "name", target = "columnName"), + @Mapping(source = "metaInfo.jdbcType", target = "dataType", qualifiedByName = "getDataType"), + @Mapping(source = "comment", target = "columnComment"), + @Mapping(source = "metaInfo.nullable", target = "nullable"), + @Mapping(source = "keyFlag", target = "primaryKey"), + @Mapping(source = "columnType.type", target = "javaType"), + @Mapping(source = "propertyName", target = "javaField"), + }) + CodegenColumnDO convert(TableField bean); + + @Named("getDataType") + default String getDataType(JdbcType jdbcType) { + return jdbcType.name(); + } + + // ========== 其它 ========== + + default CodegenDetailRespVO convert(CodegenTableDO table, List columns) { + CodegenDetailRespVO respVO = new CodegenDetailRespVO(); + respVO.setTable(BeanUtils.toBean(table, CodegenTableRespVO.class)); + respVO.setColumns(BeanUtils.toBean(columns, CodegenColumnRespVO.class)); + return respVO; + } + + default List convert(Map codes) { + return CollectionUtils.convertList(codes.entrySet(), + entry -> new CodegenPreviewRespVO().setFilePath(entry.getKey()).setCode(entry.getValue())); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/config/ConfigConvert.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/config/ConfigConvert.java new file mode 100644 index 0000000..66beaa5 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/config/ConfigConvert.java @@ -0,0 +1,28 @@ +package com.win.module.infra.convert.config; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.infra.controller.admin.config.vo.ConfigRespVO; +import com.win.module.infra.controller.admin.config.vo.ConfigSaveReqVO; +import com.win.module.infra.dal.dataobject.config.ConfigDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface ConfigConvert { + + ConfigConvert INSTANCE = Mappers.getMapper(ConfigConvert.class); + + PageResult convertPage(PageResult page); + + List convertList(List list); + + @Mapping(source = "configKey", target = "key") + ConfigRespVO convert(ConfigDO bean); + + @Mapping(source = "key", target = "configKey") + ConfigDO convert(ConfigSaveReqVO bean); + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/file/FileConfigConvert.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/file/FileConfigConvert.java new file mode 100644 index 0000000..1474c5b --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/file/FileConfigConvert.java @@ -0,0 +1,22 @@ +package com.win.module.infra.convert.file; + +import com.win.module.infra.controller.admin.file.vo.config.FileConfigSaveReqVO; +import com.win.module.infra.dal.dataobject.file.FileConfigDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +/** + * 文件配置 Convert + * + * @author 芋道源码 + */ +@Mapper +public interface FileConfigConvert { + + FileConfigConvert INSTANCE = Mappers.getMapper(FileConfigConvert.class); + + @Mapping(target = "config", ignore = true) + FileConfigDO convert(FileConfigSaveReqVO bean); + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/package-info.java new file mode 100644 index 0000000..1853a76 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/package-info.java @@ -0,0 +1,6 @@ +/** + * 提供 POJO 类的实体转换 + * + * 目前使用 MapStruct 框架 + */ +package com.win.module.infra.convert; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/redis/RedisConvert.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/redis/RedisConvert.java new file mode 100644 index 0000000..c1f86ac --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/redis/RedisConvert.java @@ -0,0 +1,29 @@ +package com.win.module.infra.convert.redis; + +import cn.hutool.core.util.StrUtil; +import com.win.module.infra.controller.admin.redis.vo.RedisMonitorRespVO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.ArrayList; +import java.util.Properties; + +@Mapper +public interface RedisConvert { + + RedisConvert INSTANCE = Mappers.getMapper(RedisConvert.class); + + default RedisMonitorRespVO build(Properties info, Long dbSize, Properties commandStats) { + RedisMonitorRespVO respVO = RedisMonitorRespVO.builder().info(info).dbSize(dbSize) + .commandStats(new ArrayList<>(commandStats.size())).build(); + commandStats.forEach((key, value) -> { + respVO.getCommandStats().add(RedisMonitorRespVO.CommandStat.builder() + .command(StrUtil.subAfter((String) key, "cmdstat_", false)) + .calls(Long.valueOf(StrUtil.subBetween((String) value, "calls=", ","))) + .usec(Long.valueOf(StrUtil.subBetween((String) value, "usec=", ","))) + .build()); + }); + return respVO; + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md new file mode 100644 index 0000000..2f05ebd --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md @@ -0,0 +1 @@ + diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/codegen/CodegenColumnDO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/codegen/CodegenColumnDO.java new file mode 100644 index 0000000..db8138c --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/codegen/CodegenColumnDO.java @@ -0,0 +1,136 @@ +package com.win.module.infra.dal.dataobject.codegen; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.infra.enums.codegen.CodegenColumnHtmlTypeEnum; +import com.win.module.infra.enums.codegen.CodegenColumnListConditionEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.generator.config.po.TableField; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 代码生成 column 字段定义 + * + * @author 芋道源码 + */ +@TableName(value = "infra_codegen_column", autoResultMap = true) +@KeySequence("infra_codegen_column_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = true) +public class CodegenColumnDO extends BaseDO { + + /** + * ID 编号 + */ + @TableId + private Long id; + /** + * 表编号 + *

    + * 关联 {@link CodegenTableDO#getId()} + */ + private Long tableId; + + // ========== 表相关字段 ========== + + /** + * 字段名 + * + * 关联 {@link TableField#getName()} + */ + private String columnName; + /** + * 数据库字段类型 + * + * 关联 {@link TableField.MetaInfo#getJdbcType()} + */ + private String dataType; + /** + * 字段描述 + * + * 关联 {@link TableField#getComment()} + */ + private String columnComment; + /** + * 是否允许为空 + * + * 关联 {@link TableField.MetaInfo#isNullable()} + */ + private Boolean nullable; + /** + * 是否主键 + * + * 关联 {@link TableField#isKeyFlag()} + */ + private Boolean primaryKey; + /** + * 排序 + */ + private Integer ordinalPosition; + + // ========== Java 相关字段 ========== + + /** + * Java 属性类型 + * + * 例如说 String、Boolean 等等 + * + * 关联 {@link TableField#getColumnType()} + */ + private String javaType; + /** + * Java 属性名 + * + * 关联 {@link TableField#getPropertyName()} + */ + private String javaField; + /** + * 字典类型 + *

    + * 关联 DictTypeDO 的 type 属性 + */ + private String dictType; + /** + * 数据示例,主要用于生成 Swagger 注解的 example 字段 + */ + private String example; + + // ========== CRUD 相关字段 ========== + + /** + * 是否为 Create 创建操作的字段 + */ + private Boolean createOperation; + /** + * 是否为 Update 更新操作的字段 + */ + private Boolean updateOperation; + /** + * 是否为 List 查询操作的字段 + */ + private Boolean listOperation; + /** + * List 查询操作的条件类型 + *

    + * 枚举 {@link CodegenColumnListConditionEnum} + */ + private String listOperationCondition; + /** + * 是否为 List 查询操作的返回字段 + */ + private Boolean listOperationResult; + + // ========== UI 相关字段 ========== + + /** + * 显示类型 + *

    + * 枚举 {@link CodegenColumnHtmlTypeEnum} + */ + private String htmlType; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/codegen/CodegenTableDO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/codegen/CodegenTableDO.java new file mode 100644 index 0000000..ab42d0d --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/codegen/CodegenTableDO.java @@ -0,0 +1,158 @@ +package com.win.module.infra.dal.dataobject.codegen; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.infra.dal.dataobject.db.DataSourceConfigDO; +import com.win.module.infra.enums.codegen.CodegenFrontTypeEnum; +import com.win.module.infra.enums.codegen.CodegenSceneEnum; +import com.win.module.infra.enums.codegen.CodegenTemplateTypeEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.generator.config.po.TableInfo; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 代码生成 table 表定义 + * + * @author 芋道源码 + */ +@TableName(value = "infra_codegen_table", autoResultMap = true) +@KeySequence("infra_codegen_table_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = true) +public class CodegenTableDO extends BaseDO { + + /** + * ID 编号 + */ + @TableId + private Long id; + + /** + * 数据源编号 + * + * 关联 {@link DataSourceConfigDO#getId()} + */ + private Long dataSourceConfigId; + /** + * 生成场景 + * + * 枚举 {@link CodegenSceneEnum} + */ + private Integer scene; + + // ========== 表相关字段 ========== + + /** + * 表名称 + * + * 关联 {@link TableInfo#getName()} + */ + private String tableName; + /** + * 表描述 + * + * 关联 {@link TableInfo#getComment()} + */ + private String tableComment; + /** + * 备注 + */ + private String remark; + + // ========== 类相关字段 ========== + + /** + * 模块名,即一级目录 + * + * 例如说,system、infra、tool 等等 + */ + private String moduleName; + /** + * 业务名,即二级目录 + * + * 例如说,user、permission、dict 等等 + */ + private String businessName; + /** + * 类名称(首字母大写) + * + * 例如说,SysUser、SysMenu、SysDictData 等等 + */ + private String className; + /** + * 类描述 + */ + private String classComment; + /** + * 作者 + */ + private String author; + + // ========== 生成相关字段 ========== + + /** + * 模板类型 + * + * 枚举 {@link CodegenTemplateTypeEnum} + */ + private Integer templateType; + /** + * 代码生成的前端类型 + * + * 枚举 {@link CodegenFrontTypeEnum} + */ + private Integer frontType; + + // ========== 菜单相关字段 ========== + + /** + * 父菜单编号 + * + * 关联 MenuDO 的 id 属性 + */ + private Long parentMenuId; + + // ========== 主子表相关字段 ========== + + /** + * 主表的编号 + * + * 关联 {@link CodegenTableDO#getId()} + */ + private Long masterTableId; + /** + * 【自己】子表关联主表的字段编号 + * + * 关联 {@link CodegenColumnDO#getId()} + */ + private Long subJoinColumnId; + /** + * 主表与子表是否一对多 + * + * true:一对多 + * false:一对一 + */ + private Boolean subJoinMany; + + // ========== 树表相关字段 ========== + + /** + * 树表的父字段编号 + * + * 关联 {@link CodegenColumnDO#getId()} + */ + private Long treeParentColumnId; + /** + * 树表的名字字段编号 + * + * 名字的用途:新增或修改时,select 框展示的字段 + * + * 关联 {@link CodegenColumnDO#getId()} + */ + private Long treeNameColumnId; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/config/ConfigDO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/config/ConfigDO.java new file mode 100644 index 0000000..02dd439 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/config/ConfigDO.java @@ -0,0 +1,64 @@ +package com.win.module.infra.dal.dataobject.config; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.infra.enums.config.ConfigTypeEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * 参数配置表 + * + * @author 芋道源码 + */ +@TableName("infra_config") +@KeySequence("infra_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ConfigDO extends BaseDO { + + /** + * 参数主键 + */ + @TableId + private Long id; + /** + * 参数分类 + */ + private String category; + /** + * 参数名称 + */ + private String name; + /** + * 参数键名 + * + * 支持多 DB 类型时,无法直接使用 key + @TableField("config_key") 来实现转换,原因是 "config_key" AS key 而存在报错 + */ + private String configKey; + /** + * 参数键值 + */ + private String value; + /** + * 参数类型 + * + * 枚举 {@link ConfigTypeEnum} + */ + private Integer type; + /** + * 是否可见 + * + * 不可见的参数,一般是敏感参数,前端不可获取 + */ + private Boolean visible; + /** + * 备注 + */ + private String remark; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/db/DataSourceConfigDO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/db/DataSourceConfigDO.java new file mode 100644 index 0000000..e04feae --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/db/DataSourceConfigDO.java @@ -0,0 +1,48 @@ +package com.win.module.infra.dal.dataobject.db; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.framework.mybatis.core.type.EncryptTypeHandler; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * 数据源配置 + * + * @author 芋道源码 + */ +@TableName(value = "infra_data_source_config", autoResultMap = true) +@KeySequence("infra_data_source_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +public class DataSourceConfigDO extends BaseDO { + + /** + * 主键编号 - Master 数据源 + */ + public static final Long ID_MASTER = 0L; + + /** + * 主键编号 + */ + private Long id; + /** + * 连接名 + */ + private String name; + + /** + * 数据源连接 + */ + private String url; + /** + * 用户名 + */ + private String username; + /** + * 密码 + */ + @TableField(typeHandler = EncryptTypeHandler.class) + private String password; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo01/Demo01ContactDO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo01/Demo01ContactDO.java new file mode 100644 index 0000000..5e55e0b --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo01/Demo01ContactDO.java @@ -0,0 +1,54 @@ +package com.win.module.infra.dal.dataobject.demo.demo01; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.time.LocalDateTime; + +/** + * 示例联系人 DO + * + * @author 芋道源码 + */ +@TableName("win_demo01_contact") +@KeySequence("win_demo01_contact_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Demo01ContactDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 名字 + */ + private String name; + /** + * 性别 + * + * 枚举 {@link TODO system_user_sex 对应的类} + */ + private Integer sex; + /** + * 出生年 + */ + private LocalDateTime birthday; + /** + * 简介 + */ + private String description; + /** + * 头像 + */ + private String avatar; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo02/Demo02CategoryDO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo02/Demo02CategoryDO.java new file mode 100644 index 0000000..cb67488 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo02/Demo02CategoryDO.java @@ -0,0 +1,40 @@ +package com.win.module.infra.dal.dataobject.demo.demo02; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 示例分类 DO + * + * @author 芋道源码 + */ +@TableName("win_demo02_category") +@KeySequence("win_demo02_category_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Demo02CategoryDO extends BaseDO { + + public static final Long PARENT_ID_ROOT = 0L; + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 名字 + */ + private String name; + /** + * 父级编号 + */ + private Long parentId; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo03/Demo03CourseDO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo03/Demo03CourseDO.java new file mode 100644 index 0000000..57bf7f8 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo03/Demo03CourseDO.java @@ -0,0 +1,42 @@ +package com.win.module.infra.dal.dataobject.demo.demo03; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 学生课程 DO + * + * @author 芋道源码 + */ +@TableName("win_demo03_course") +@KeySequence("win_demo03_course_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Demo03CourseDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 学生编号 + */ + private Long studentId; + /** + * 名字 + */ + private String name; + /** + * 分数 + */ + private Integer score; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo03/Demo03GradeDO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo03/Demo03GradeDO.java new file mode 100644 index 0000000..4021f67 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo03/Demo03GradeDO.java @@ -0,0 +1,42 @@ +package com.win.module.infra.dal.dataobject.demo.demo03; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 学生班级 DO + * + * @author 芋道源码 + */ +@TableName("win_demo03_grade") +@KeySequence("win_demo03_grade_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Demo03GradeDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 学生编号 + */ + private Long studentId; + /** + * 名字 + */ + private String name; + /** + * 班主任 + */ + private String teacher; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo03/Demo03StudentDO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo03/Demo03StudentDO.java new file mode 100644 index 0000000..8a7f37d --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/demo/demo03/Demo03StudentDO.java @@ -0,0 +1,50 @@ +package com.win.module.infra.dal.dataobject.demo.demo03; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.time.LocalDateTime; + +/** + * 学生 DO + * + * @author 芋道源码 + */ +@TableName("win_demo03_student") +@KeySequence("win_demo03_student_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Demo03StudentDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 名字 + */ + private String name; + /** + * 性别 + * + * 枚举 {@link TODO system_user_sex 对应的类} + */ + private Integer sex; + /** + * 出生日期 + */ + private LocalDateTime birthday; + /** + * 简介 + */ + private String description; + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/file/FileConfigDO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/file/FileConfigDO.java new file mode 100644 index 0000000..36e6b00 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/file/FileConfigDO.java @@ -0,0 +1,101 @@ +package com.win.module.infra.dal.dataobject.file; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.infra.framework.file.core.client.FileClientConfig; +import com.win.module.infra.framework.file.core.client.db.DBFileClientConfig; +import com.win.module.infra.framework.file.core.client.ftp.FtpFileClientConfig; +import com.win.module.infra.framework.file.core.client.local.LocalFileClientConfig; +import com.win.module.infra.framework.file.core.client.s3.S3FileClientConfig; +import com.win.module.infra.framework.file.core.client.sftp.SftpFileClientConfig; +import com.win.module.infra.framework.file.core.enums.FileStorageEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler; +import com.fasterxml.jackson.core.type.TypeReference; +import lombok.*; + +/** + * 文件配置表 + * + * @author 芋道源码 + */ +@TableName(value = "infra_file_config", autoResultMap = true) +@KeySequence("infra_file_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FileConfigDO extends BaseDO { + + /** + * 配置编号,数据库自增 + */ + private Long id; + /** + * 配置名 + */ + private String name; + /** + * 存储器 + * + * 枚举 {@link FileStorageEnum} + */ + private Integer storage; + /** + * 备注 + */ + private String remark; + /** + * 是否为主配置 + * + * 由于我们可以配置多个文件配置,默认情况下,使用主配置进行文件的上传 + */ + private Boolean master; + + /** + * 支付渠道配置 + */ + @TableField(typeHandler = FileClientConfigTypeHandler.class) + private FileClientConfig config; + + public static class FileClientConfigTypeHandler extends AbstractJsonTypeHandler { + + @Override + protected Object parse(String json) { + FileClientConfig config = JsonUtils.parseObjectQuietly(json, new TypeReference<>() {}); + if (config != null) { + return config; + } + + // 兼容老版本的包路径 + String className = JsonUtils.parseObject(json, "@class", String.class); + className = StrUtil.subAfter(className, ".", true); + switch (className) { + case "DBFileClientConfig": + return JsonUtils.parseObject2(json, DBFileClientConfig.class); + case "FtpFileClientConfig": + return JsonUtils.parseObject2(json, FtpFileClientConfig.class); + case "LocalFileClientConfig": + return JsonUtils.parseObject2(json, LocalFileClientConfig.class); + case "SftpFileClientConfig": + return JsonUtils.parseObject2(json, SftpFileClientConfig.class); + case "S3FileClientConfig": + return JsonUtils.parseObject2(json, S3FileClientConfig.class); + default: + throw new IllegalArgumentException("未知的 FileClientConfig 类型:" + json); + } + } + + @Override + protected String toJson(Object obj) { + return JsonUtils.toJsonString(obj); + } + + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/file/FileContentDO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/file/FileContentDO.java new file mode 100644 index 0000000..950c84d --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/file/FileContentDO.java @@ -0,0 +1,48 @@ +package com.win.module.infra.dal.dataobject.file; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.infra.framework.file.core.client.db.DBFileClient; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 文件内容表 + * + * 专门用于存储 {@link DBFileClient} 的文件内容 + * + * @author 芋道源码 + */ +@TableName("infra_file_content") +@KeySequence("infra_file_content_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FileContentDO extends BaseDO { + + /** + * 编号,数据库自增 + */ + @TableId(type = IdType.INPUT) + private String id; + /** + * 配置编号 + * + * 关联 {@link FileConfigDO#getId()} + */ + private Long configId; + /** + * 路径,即文件名 + */ + private String path; + /** + * 文件内容 + */ + private byte[] content; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/file/FileDO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/file/FileDO.java new file mode 100644 index 0000000..c5bff8e --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/file/FileDO.java @@ -0,0 +1,55 @@ +package com.win.module.infra.dal.dataobject.file; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 文件表 + * 每次文件上传,都会记录一条记录到该表中 + * + * @author 芋道源码 + */ +@TableName("infra_file") +@KeySequence("infra_file_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FileDO extends BaseDO { + + /** + * 编号,数据库自增 + */ + private Long id; + /** + * 配置编号 + * + * 关联 {@link FileConfigDO#getId()} + */ + private Long configId; + /** + * 原文件名 + */ + private String name; + /** + * 路径,即文件名 + */ + private String path; + /** + * 访问地址 + */ + private String url; + /** + * 文件的 MIME 类型,例如 "application/octet-stream" + */ + private String type; + /** + * 文件大小 + */ + private Integer size; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/logger/ApiAccessLogDO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/logger/ApiAccessLogDO.java new file mode 100644 index 0000000..c7ac2e1 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/logger/ApiAccessLogDO.java @@ -0,0 +1,130 @@ +package com.win.module.infra.dal.dataobject.logger; + +import com.win.framework.apilog.core.enums.OperateTypeEnum; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.time.LocalDateTime; + +/** + * API 访问日志 + * + * @author 芋道源码 + */ +@TableName("infra_api_access_log") +@KeySequence(value = "infra_api_access_log_seq") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ApiAccessLogDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 链路追踪编号 + * + * 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。 + */ + private String traceId; + /** + * 用户编号 + */ + private Long userId; + /** + * 用户类型 + * + * 枚举 {@link UserTypeEnum} + */ + private Integer userType; + /** + * 应用名 + * + * 目前读取 `spring.application.name` 配置项 + */ + private String applicationName; + + // ========== 请求相关字段 ========== + + /** + * 请求方法名 + */ + private String requestMethod; + /** + * 访问地址 + */ + private String requestUrl; + /** + * 请求参数 + * + * query: Query String + * body: Quest Body + */ + private String requestParams; + /** + * 响应结果 + */ + private String responseBody; + /** + * 用户 IP + */ + private String userIp; + /** + * 浏览器 UA + */ + private String userAgent; + + // ========== 执行相关字段 ========== + + /** + * 操作模块 + */ + private String operateModule; + /** + * 操作名 + */ + private String operateName; + /** + * 操作分类 + * + * 枚举 {@link OperateTypeEnum} + */ + private Integer operateType; + + /** + * 开始请求时间 + */ + private LocalDateTime beginTime; + /** + * 结束请求时间 + */ + private LocalDateTime endTime; + /** + * 执行时长,单位:毫秒 + */ + private Integer duration; + + /** + * 结果码 + * + * 目前使用的 {@link CommonResult#getCode()} 属性 + */ + private Integer resultCode; + /** + * 结果提示 + * + * 目前使用的 {@link CommonResult#getMsg()} 属性 + */ + private String resultMsg; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/logger/ApiErrorLogDO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/logger/ApiErrorLogDO.java new file mode 100644 index 0000000..4079cdd --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/dataobject/logger/ApiErrorLogDO.java @@ -0,0 +1,156 @@ +package com.win.module.infra.dal.dataobject.logger; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.infra.enums.logger.ApiErrorLogProcessStatusEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.time.LocalDateTime; + +/** + * API 异常数据 + * + * @author 芋道源码 + */ +@TableName("infra_api_error_log") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@KeySequence(value = "infra_api_error_log_seq") +public class ApiErrorLogDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 用户编号 + */ + private Long userId; + /** + * 链路追踪编号 + * + * 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。 + */ + private String traceId; + /** + * 用户类型 + * + * 枚举 {@link UserTypeEnum} + */ + private Integer userType; + /** + * 应用名 + * + * 目前读取 spring.application.name + */ + private String applicationName; + + // ========== 请求相关字段 ========== + + /** + * 请求方法名 + */ + private String requestMethod; + /** + * 访问地址 + */ + private String requestUrl; + /** + * 请求参数 + * + * query: Query String + * body: Quest Body + */ + private String requestParams; + /** + * 用户 IP + */ + private String userIp; + /** + * 浏览器 UA + */ + private String userAgent; + + // ========== 异常相关字段 ========== + + /** + * 异常发生时间 + */ + private LocalDateTime exceptionTime; + /** + * 异常名 + * + * {@link Throwable#getClass()} 的类全名 + */ + private String exceptionName; + /** + * 异常导致的消息 + * + * {@link cn.hutool.core.exceptions.ExceptionUtil#getMessage(Throwable)} + */ + private String exceptionMessage; + /** + * 异常导致的根消息 + * + * {@link cn.hutool.core.exceptions.ExceptionUtil#getRootCauseMessage(Throwable)} + */ + private String exceptionRootCauseMessage; + /** + * 异常的栈轨迹 + * + * {@link org.apache.commons.lang3.exception.ExceptionUtils#getStackTrace(Throwable)} + */ + private String exceptionStackTrace; + /** + * 异常发生的类全名 + * + * {@link StackTraceElement#getClassName()} + */ + private String exceptionClassName; + /** + * 异常发生的类文件 + * + * {@link StackTraceElement#getFileName()} + */ + private String exceptionFileName; + /** + * 异常发生的方法名 + * + * {@link StackTraceElement#getMethodName()} + */ + private String exceptionMethodName; + /** + * 异常发生的方法所在行 + * + * {@link StackTraceElement#getLineNumber()} + */ + private Integer exceptionLineNumber; + + // ========== 处理相关字段 ========== + + /** + * 处理状态 + * + * 枚举 {@link ApiErrorLogProcessStatusEnum} + */ + private Integer processStatus; + /** + * 处理时间 + */ + private LocalDateTime processTime; + /** + * 处理用户编号 + * + * 关联 com.win.adminserver.modules.system.dal.dataobject.user.SysUserDO.SysUserDO#getId() + */ + private Long processUserId; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/codegen/CodegenColumnMapper.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/codegen/CodegenColumnMapper.java new file mode 100644 index 0000000..8eac5c7 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/codegen/CodegenColumnMapper.java @@ -0,0 +1,24 @@ +package com.win.module.infra.dal.mysql.codegen; + +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.infra.dal.dataobject.codegen.CodegenColumnDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface CodegenColumnMapper extends BaseMapperX { + + default List selectListByTableId(Long tableId) { + return selectList(new LambdaQueryWrapperX() + .eq(CodegenColumnDO::getTableId, tableId) + .orderByAsc(CodegenColumnDO::getId)); + } + + default void deleteListByTableId(Long tableId) { + delete(new LambdaQueryWrapperX() + .eq(CodegenColumnDO::getTableId, tableId)); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/codegen/CodegenTableMapper.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/codegen/CodegenTableMapper.java new file mode 100644 index 0000000..75772d2 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/codegen/CodegenTableMapper.java @@ -0,0 +1,39 @@ +package com.win.module.infra.dal.mysql.codegen; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.infra.controller.admin.codegen.vo.table.CodegenTablePageReqVO; +import com.win.module.infra.dal.dataobject.codegen.CodegenTableDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface CodegenTableMapper extends BaseMapperX { + + default CodegenTableDO selectByTableNameAndDataSourceConfigId(String tableName, Long dataSourceConfigId) { + return selectOne(CodegenTableDO::getTableName, tableName, + CodegenTableDO::getDataSourceConfigId, dataSourceConfigId); + } + + default PageResult selectPage(CodegenTablePageReqVO pageReqVO) { + return selectPage(pageReqVO, new LambdaQueryWrapperX() + .likeIfPresent(CodegenTableDO::getTableName, pageReqVO.getTableName()) + .likeIfPresent(CodegenTableDO::getTableComment, pageReqVO.getTableComment()) + .likeIfPresent(CodegenTableDO::getClassName, pageReqVO.getClassName()) + .betweenIfPresent(CodegenTableDO::getCreateTime, pageReqVO.getCreateTime()) + .orderByDesc(CodegenTableDO::getUpdateTime) + ); + } + + default List selectListByDataSourceConfigId(Long dataSourceConfigId) { + return selectList(CodegenTableDO::getDataSourceConfigId, dataSourceConfigId); + } + + default List selectListByTemplateTypeAndMasterTableId(Integer templateType, Long masterTableId) { + return selectList(CodegenTableDO::getTemplateType, templateType, + CodegenTableDO::getMasterTableId, masterTableId); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/config/ConfigMapper.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/config/ConfigMapper.java new file mode 100644 index 0000000..17b955b --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/config/ConfigMapper.java @@ -0,0 +1,25 @@ +package com.win.module.infra.dal.mysql.config; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.infra.controller.admin.config.vo.ConfigPageReqVO; +import com.win.module.infra.dal.dataobject.config.ConfigDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ConfigMapper extends BaseMapperX { + + default ConfigDO selectByKey(String key) { + return selectOne(ConfigDO::getConfigKey, key); + } + + default PageResult selectPage(ConfigPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(ConfigDO::getName, reqVO.getName()) + .likeIfPresent(ConfigDO::getConfigKey, reqVO.getKey()) + .eqIfPresent(ConfigDO::getType, reqVO.getType()) + .betweenIfPresent(ConfigDO::getCreateTime, reqVO.getCreateTime())); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/db/DataSourceConfigMapper.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/db/DataSourceConfigMapper.java new file mode 100644 index 0000000..5d80ee9 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/db/DataSourceConfigMapper.java @@ -0,0 +1,14 @@ +package com.win.module.infra.dal.mysql.db; + +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.module.infra.dal.dataobject.db.DataSourceConfigDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 数据源配置 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface DataSourceConfigMapper extends BaseMapperX { +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo01/Demo01ContactMapper.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo01/Demo01ContactMapper.java new file mode 100644 index 0000000..4ebd3b9 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo01/Demo01ContactMapper.java @@ -0,0 +1,26 @@ +package com.win.module.infra.dal.mysql.demo.demo01; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.infra.controller.admin.demo.demo01.vo.Demo01ContactPageReqVO; +import com.win.module.infra.dal.dataobject.demo.demo01.Demo01ContactDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 示例联系人 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface Demo01ContactMapper extends BaseMapperX { + + default PageResult selectPage(Demo01ContactPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(Demo01ContactDO::getName, reqVO.getName()) + .eqIfPresent(Demo01ContactDO::getSex, reqVO.getSex()) + .betweenIfPresent(Demo01ContactDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(Demo01ContactDO::getId)); + } + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo02/Demo02CategoryMapper.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo02/Demo02CategoryMapper.java new file mode 100644 index 0000000..4333d09 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo02/Demo02CategoryMapper.java @@ -0,0 +1,35 @@ +package com.win.module.infra.dal.mysql.demo.demo02; + +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.infra.controller.admin.demo.demo02.vo.Demo02CategoryListReqVO; +import com.win.module.infra.dal.dataobject.demo.demo02.Demo02CategoryDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 示例分类 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface Demo02CategoryMapper extends BaseMapperX { + + default List selectList(Demo02CategoryListReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .likeIfPresent(Demo02CategoryDO::getName, reqVO.getName()) + .eqIfPresent(Demo02CategoryDO::getParentId, reqVO.getParentId()) + .betweenIfPresent(Demo02CategoryDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(Demo02CategoryDO::getId)); + } + + default Demo02CategoryDO selectByParentIdAndName(Long parentId, String name) { + return selectOne(Demo02CategoryDO::getParentId, parentId, Demo02CategoryDO::getName, name); + } + + default Long selectCountByParentId(Long parentId) { + return selectCount(Demo02CategoryDO::getParentId, parentId); + } + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo03/Demo03CourseMapper.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo03/Demo03CourseMapper.java new file mode 100644 index 0000000..bd8ed9f --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo03/Demo03CourseMapper.java @@ -0,0 +1,34 @@ +package com.win.module.infra.dal.mysql.demo.demo03; + +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 学生课程 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface Demo03CourseMapper extends BaseMapperX { + + default PageResult selectPage(PageParam reqVO, Long studentId) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(Demo03CourseDO::getStudentId, studentId) + .orderByDesc(Demo03CourseDO::getId)); + } + + default List selectListByStudentId(Long studentId) { + return selectList(Demo03CourseDO::getStudentId, studentId); + } + + default int deleteByStudentId(Long studentId) { + return delete(Demo03CourseDO::getStudentId, studentId); + } + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo03/Demo03GradeMapper.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo03/Demo03GradeMapper.java new file mode 100644 index 0000000..51e7f18 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo03/Demo03GradeMapper.java @@ -0,0 +1,32 @@ +package com.win.module.infra.dal.mysql.demo.demo03; + +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 学生班级 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface Demo03GradeMapper extends BaseMapperX { + + default PageResult selectPage(PageParam reqVO, Long studentId) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(Demo03GradeDO::getStudentId, studentId) + .orderByDesc(Demo03GradeDO::getId)); + } + + default Demo03GradeDO selectByStudentId(Long studentId) { + return selectOne(Demo03GradeDO::getStudentId, studentId); + } + + default int deleteByStudentId(Long studentId) { + return delete(Demo03GradeDO::getStudentId, studentId); + } + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo03/Demo03StudentMapper.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo03/Demo03StudentMapper.java new file mode 100644 index 0000000..f608e64 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/demo/demo03/Demo03StudentMapper.java @@ -0,0 +1,27 @@ +package com.win.module.infra.dal.mysql.demo.demo03; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.infra.controller.admin.demo.demo03.vo.Demo03StudentPageReqVO; +import com.win.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 学生 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface Demo03StudentMapper extends BaseMapperX { + + default PageResult selectPage(Demo03StudentPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(Demo03StudentDO::getName, reqVO.getName()) + .eqIfPresent(Demo03StudentDO::getSex, reqVO.getSex()) + .eqIfPresent(Demo03StudentDO::getDescription, reqVO.getDescription()) + .betweenIfPresent(Demo03StudentDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(Demo03StudentDO::getId)); + } + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/file/FileConfigMapper.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/file/FileConfigMapper.java new file mode 100644 index 0000000..4657b40 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/file/FileConfigMapper.java @@ -0,0 +1,25 @@ +package com.win.module.infra.dal.mysql.file; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO; +import com.win.module.infra.dal.dataobject.file.FileConfigDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface FileConfigMapper extends BaseMapperX { + + default PageResult selectPage(FileConfigPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(FileConfigDO::getName, reqVO.getName()) + .eqIfPresent(FileConfigDO::getStorage, reqVO.getStorage()) + .betweenIfPresent(FileConfigDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(FileConfigDO::getId)); + } + + default FileConfigDO selectByMaster() { + return selectOne(FileConfigDO::getMaster, true); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/file/FileContentMapper.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/file/FileContentMapper.java new file mode 100644 index 0000000..3b4410b --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/file/FileContentMapper.java @@ -0,0 +1,25 @@ +package com.win.module.infra.dal.mysql.file; + +import com.win.module.infra.dal.dataobject.file.FileContentDO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface FileContentMapper extends BaseMapper { + + default void deleteByConfigIdAndPath(Long configId, String path) { + this.delete(new LambdaQueryWrapper() + .eq(FileContentDO::getConfigId, configId) + .eq(FileContentDO::getPath, path)); + } + + default List selectListByConfigIdAndPath(Long configId, String path) { + return selectList(new LambdaQueryWrapper() + .eq(FileContentDO::getConfigId, configId) + .eq(FileContentDO::getPath, path)); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/file/FileMapper.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/file/FileMapper.java new file mode 100644 index 0000000..b2357f4 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/file/FileMapper.java @@ -0,0 +1,26 @@ +package com.win.module.infra.dal.mysql.file; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.infra.controller.admin.file.vo.file.FilePageReqVO; +import com.win.module.infra.dal.dataobject.file.FileDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 文件操作 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface FileMapper extends BaseMapperX { + + default PageResult selectPage(FilePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(FileDO::getPath, reqVO.getPath()) + .likeIfPresent(FileDO::getType, reqVO.getType()) + .betweenIfPresent(FileDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(FileDO::getId)); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/logger/ApiAccessLogMapper.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/logger/ApiAccessLogMapper.java new file mode 100644 index 0000000..ff933c7 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/logger/ApiAccessLogMapper.java @@ -0,0 +1,45 @@ +package com.win.module.infra.dal.mysql.logger; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; +import com.win.module.infra.dal.dataobject.logger.ApiAccessLogDO; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.time.LocalDateTime; + +/** + * API 访问日志 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ApiAccessLogMapper extends BaseMapperX { + + default PageResult selectPage(ApiAccessLogPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ApiAccessLogDO::getUserId, reqVO.getUserId()) + .eqIfPresent(ApiAccessLogDO::getUserType, reqVO.getUserType()) + .eqIfPresent(ApiAccessLogDO::getApplicationName, reqVO.getApplicationName()) + .likeIfPresent(ApiAccessLogDO::getRequestUrl, reqVO.getRequestUrl()) + .betweenIfPresent(ApiAccessLogDO::getBeginTime, reqVO.getBeginTime()) + .geIfPresent(ApiAccessLogDO::getDuration, reqVO.getDuration()) + .eqIfPresent(ApiAccessLogDO::getResultCode, reqVO.getResultCode()) + .orderByDesc(ApiAccessLogDO::getId) + ); + } + + /** + * 物理删除指定时间之前的日志 + * + * @param createTime 最大时间 + * @param limit 删除条数,防止一次删除太多 + * @return 删除条数 + */ + @Delete("DELETE FROM infra_api_access_log WHERE create_time < #{createTime} LIMIT #{limit}") + Integer deleteByCreateTimeLt(@Param("createTime") LocalDateTime createTime, @Param("limit") Integer limit); + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/logger/ApiErrorLogMapper.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/logger/ApiErrorLogMapper.java new file mode 100644 index 0000000..a2a9f67 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/dal/mysql/logger/ApiErrorLogMapper.java @@ -0,0 +1,44 @@ +package com.win.module.infra.dal.mysql.logger; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; +import com.win.module.infra.dal.dataobject.logger.ApiErrorLogDO; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.time.LocalDateTime; + +/** + * API 错误日志 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ApiErrorLogMapper extends BaseMapperX { + + default PageResult selectPage(ApiErrorLogPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ApiErrorLogDO::getUserId, reqVO.getUserId()) + .eqIfPresent(ApiErrorLogDO::getUserType, reqVO.getUserType()) + .eqIfPresent(ApiErrorLogDO::getApplicationName, reqVO.getApplicationName()) + .likeIfPresent(ApiErrorLogDO::getRequestUrl, reqVO.getRequestUrl()) + .betweenIfPresent(ApiErrorLogDO::getExceptionTime, reqVO.getExceptionTime()) + .eqIfPresent(ApiErrorLogDO::getProcessStatus, reqVO.getProcessStatus()) + .orderByDesc(ApiErrorLogDO::getId) + ); + } + + /** + * 物理删除指定时间之前的日志 + * + * @param createTime 最大时间 + * @param limit 删除条数,防止一次删除太多 + * @return 删除条数 + */ + @Delete("DELETE FROM infra_api_error_log WHERE create_time < #{createTime} LIMIT #{limit}") + Integer deleteByCreateTimeLt(@Param("createTime") LocalDateTime createTime, @Param("limit")Integer limit); + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenColumnHtmlTypeEnum.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenColumnHtmlTypeEnum.java new file mode 100644 index 0000000..acc09e2 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenColumnHtmlTypeEnum.java @@ -0,0 +1,29 @@ +package com.win.module.infra.enums.codegen; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 代码生成器的字段 HTML 展示枚举 + */ +@AllArgsConstructor +@Getter +public enum CodegenColumnHtmlTypeEnum { + + INPUT("input"), // 文本框 + TEXTAREA("textarea"), // 文本域 + SELECT("select"), // 下拉框 + RADIO("radio"), // 单选框 + CHECKBOX("checkbox"), // 复选框 + DATETIME("datetime"), // 日期控件 + IMAGE_UPLOAD("imageUpload"), // 上传图片 + FILE_UPLOAD("fileUpload"), // 上传文件 + EDITOR("editor"), // 富文本控件 + ; + + /** + * 条件 + */ + private final String type; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenColumnListConditionEnum.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenColumnListConditionEnum.java new file mode 100644 index 0000000..cc240e9 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenColumnListConditionEnum.java @@ -0,0 +1,27 @@ +package com.win.module.infra.enums.codegen; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 代码生成器的字段过滤条件枚举 + */ +@AllArgsConstructor +@Getter +public enum CodegenColumnListConditionEnum { + + EQ("="), + NE("!="), + GT(">"), + GTE(">="), + LT("<"), + LTE("<="), + LIKE("LIKE"), + BETWEEN("BETWEEN"); + + /** + * 条件 + */ + private final String condition; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenFrontTypeEnum.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenFrontTypeEnum.java new file mode 100644 index 0000000..cf36f31 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenFrontTypeEnum.java @@ -0,0 +1,26 @@ +package com.win.module.infra.enums.codegen; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 代码生成的前端类型枚举 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum CodegenFrontTypeEnum { + + VUE2(10), // Vue2 Element UI 标准模版 + VUE3(20), // Vue3 Element Plus 标准模版 + VUE3_SCHEMA(21), // Vue3 Element Plus Schema 模版 + VUE3_VBEN(30), // Vue3 VBEN 模版 + ; + + /** + * 类型 + */ + private final Integer type; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenSceneEnum.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenSceneEnum.java new file mode 100644 index 0000000..3f03b0c --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenSceneEnum.java @@ -0,0 +1,41 @@ +package com.win.module.infra.enums.codegen; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import static cn.hutool.core.util.ArrayUtil.*; + +/** + * 代码生成的场景枚举 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum CodegenSceneEnum { + + ADMIN(1, "管理后台", "admin", ""), + APP(2, "用户 APP", "app", "App"); + + /** + * 场景 + */ + private final Integer scene; + /** + * 场景名 + */ + private final String name; + /** + * 基础包名 + */ + private final String basePackage; + /** + * Controller 和 VO 类的前缀 + */ + private final String prefixClass; + + public static CodegenSceneEnum valueOf(Integer scene) { + return firstMatch(sceneEnum -> sceneEnum.getScene().equals(scene), values()); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenTemplateTypeEnum.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenTemplateTypeEnum.java new file mode 100644 index 0000000..33b67ed --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/codegen/CodegenTemplateTypeEnum.java @@ -0,0 +1,53 @@ +package com.win.module.infra.enums.codegen; + +import com.win.framework.common.util.object.ObjectUtils; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Objects; + +/** + * 代码生成模板类型 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum CodegenTemplateTypeEnum { + + ONE(1), // 单表(增删改查) + TREE(2), // 树表(增删改查) + + MASTER_NORMAL(10), // 主子表 - 主表 - 普通模式 + MASTER_ERP(11), // 主子表 - 主表 - ERP 模式 + MASTER_INNER(12), // 主子表 - 主表 - 内嵌模式 + SUB(15), // 主子表 - 子表 + ; + + /** + * 类型 + */ + private final Integer type; + + /** + * 是否为主表 + * + * @param type 类型 + * @return 是否主表 + */ + public static boolean isMaster(Integer type) { + return ObjectUtils.equalsAny(type, + MASTER_NORMAL.type, MASTER_ERP.type, MASTER_INNER.type); + } + + /** + * 是否为树表 + * + * @param type 类型 + * @return 是否树表 + */ + public static boolean isTree(Integer type) { + return Objects.equals(type, TREE.type); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/config/ConfigTypeEnum.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/config/ConfigTypeEnum.java new file mode 100644 index 0000000..dd88e2c --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/config/ConfigTypeEnum.java @@ -0,0 +1,21 @@ +package com.win.module.infra.enums.config; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum ConfigTypeEnum { + + /** + * 系统配置 + */ + SYSTEM(1), + /** + * 自定义配置 + */ + CUSTOM(2); + + private final Integer type; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/logger/ApiErrorLogProcessStatusEnum.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/logger/ApiErrorLogProcessStatusEnum.java new file mode 100644 index 0000000..89af004 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/logger/ApiErrorLogProcessStatusEnum.java @@ -0,0 +1,28 @@ +package com.win.module.infra.enums.logger; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * API 异常数据的处理状态 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum ApiErrorLogProcessStatusEnum { + + INIT(0, "未处理"), + DONE(1, "已处理"), + IGNORE(2, "已忽略"); + + /** + * 状态 + */ + private final Integer status; + /** + * 资源类型名 + */ + private final String name; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/package-info.java new file mode 100644 index 0000000..7d9572a --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/enums/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package com.win.module.infra.enums; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/codegen/config/CodegenConfiguration.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/codegen/config/CodegenConfiguration.java new file mode 100644 index 0000000..6283f03 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/codegen/config/CodegenConfiguration.java @@ -0,0 +1,9 @@ +package com.win.module.infra.framework.codegen.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration(proxyBeanMethods = false) +@EnableConfigurationProperties(CodegenProperties.class) +public class CodegenConfiguration { +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/codegen/config/CodegenProperties.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/codegen/config/CodegenProperties.java new file mode 100644 index 0000000..909dc04 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/codegen/config/CodegenProperties.java @@ -0,0 +1,37 @@ +package com.win.module.infra.framework.codegen.config; + +import com.win.module.infra.enums.codegen.CodegenFrontTypeEnum; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.util.Collection; + +@ConfigurationProperties(prefix = "win.codegen") +@Validated +@Data +public class CodegenProperties { + + /** + * 生成的 Java 代码的基础包 + */ + @NotNull(message = "Java 代码的基础包不能为空") + private String basePackage; + + /** + * 数据库名数组 + */ + @NotEmpty(message = "数据库不能为空") + private Collection dbSchemas; + + /** + * 代码生成的前端类型(默认) + * + * 枚举 {@link CodegenFrontTypeEnum#getType()} + */ + @NotNull(message = "代码生成的前端类型不能为空") + private Integer frontType; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/codegen/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/codegen/package-info.java new file mode 100644 index 0000000..87b2b4a --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/codegen/package-info.java @@ -0,0 +1,4 @@ +/** + * 代码生成器 + */ +package com.win.module.infra.framework.codegen; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/config/WinFileAutoConfiguration.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/config/WinFileAutoConfiguration.java new file mode 100644 index 0000000..c364fff --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/config/WinFileAutoConfiguration.java @@ -0,0 +1,21 @@ +package com.win.module.infra.framework.file.config; + +import com.win.module.infra.framework.file.core.client.FileClientFactory; +import com.win.module.infra.framework.file.core.client.FileClientFactoryImpl; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 文件配置类 + * + * @author 芋道源码 + */ +@Configuration(proxyBeanMethods = false) +public class WinFileAutoConfiguration { + + @Bean + public FileClientFactory fileClientFactory() { + return new FileClientFactoryImpl(); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/AbstractFileClient.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/AbstractFileClient.java new file mode 100644 index 0000000..e1f979b --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/AbstractFileClient.java @@ -0,0 +1,69 @@ +package com.win.module.infra.framework.file.core.client; + +import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; + +/** + * 文件客户端的抽象类,提供模板方法,减少子类的冗余代码 + * + * @author 芋道源码 + */ +@Slf4j +public abstract class AbstractFileClient implements FileClient { + + /** + * 配置编号 + */ + private final Long id; + /** + * 文件配置 + */ + protected Config config; + + public AbstractFileClient(Long id, Config config) { + this.id = id; + this.config = config; + } + + /** + * 初始化 + */ + public final void init() { + doInit(); + log.debug("[init][配置({}) 初始化完成]", config); + } + + /** + * 自定义初始化 + */ + protected abstract void doInit(); + + public final void refresh(Config config) { + // 判断是否更新 + if (config.equals(this.config)) { + return; + } + log.info("[refresh][配置({})发生变化,重新初始化]", config); + this.config = config; + // 初始化 + this.init(); + } + + @Override + public Long getId() { + return id; + } + + /** + * 格式化文件的 URL 访问地址 + * 使用场景:local、ftp、db,通过 FileController 的 getFile 来获取文件内容 + * + * @param domain 自定义域名 + * @param path 文件路径 + * @return URL 访问地址 + */ + protected String formatFileUrl(String domain, String path) { + return StrUtil.format("{}/admin-api/infra/file/{}/get/{}", domain, getId(), path); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClient.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClient.java new file mode 100644 index 0000000..6b76c8a --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClient.java @@ -0,0 +1,55 @@ +package com.win.module.infra.framework.file.core.client; + +import com.win.module.infra.framework.file.core.client.s3.FilePresignedUrlRespDTO; + +/** + * 文件客户端 + * + * @author 芋道源码 + */ +public interface FileClient { + + /** + * 获得客户端编号 + * + * @return 客户端编号 + */ + Long getId(); + + /** + * 上传文件 + * + * @param content 文件流 + * @param path 相对路径 + * @return 完整路径,即 HTTP 访问地址 + * @throws Exception 上传文件时,抛出 Exception 异常 + */ + String upload(byte[] content, String path, String type) throws Exception; + + /** + * 删除文件 + * + * @param path 相对路径 + * @throws Exception 删除文件时,抛出 Exception 异常 + */ + void delete(String path) throws Exception; + + /** + * 获得文件的内容 + * + * @param path 相对路径 + * @return 文件的内容 + */ + byte[] getContent(String path) throws Exception; + + /** + * 获得文件预签名地址 + * + * @param path 相对路径 + * @return 文件预签名地址 + */ + default FilePresignedUrlRespDTO getPresignedObjectUrl(String path) throws Exception { + throw new UnsupportedOperationException("不支持的操作"); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClientConfig.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClientConfig.java new file mode 100644 index 0000000..994c03c --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClientConfig.java @@ -0,0 +1,16 @@ +package com.win.module.infra.framework.file.core.client; + +import com.fasterxml.jackson.annotation.JsonTypeInfo; + +/** + * 文件客户端的配置 + * 不同实现的客户端,需要不同的配置,通过子类来定义 + * + * @author 芋道源码 + */ +@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) +// @JsonTypeInfo 注解的作用,Jackson 多态 +// 1. 序列化到时数据库时,增加 @class 属性。 +// 2. 反序列化到内存对象时,通过 @class 属性,可以创建出正确的类型 +public interface FileClientConfig { +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClientFactory.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClientFactory.java new file mode 100644 index 0000000..f460778 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClientFactory.java @@ -0,0 +1,24 @@ +package com.win.module.infra.framework.file.core.client; + +import com.win.module.infra.framework.file.core.enums.FileStorageEnum; + +public interface FileClientFactory { + + /** + * 获得文件客户端 + * + * @param configId 配置编号 + * @return 文件客户端 + */ + FileClient getFileClient(Long configId); + + /** + * 创建文件客户端 + * + * @param configId 配置编号 + * @param storage 存储器的枚举 {@link FileStorageEnum} + * @param config 文件配置 + */ + void createOrUpdateFileClient(Long configId, Integer storage, Config config); + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClientFactoryImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClientFactoryImpl.java new file mode 100644 index 0000000..0f07651 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/FileClientFactoryImpl.java @@ -0,0 +1,56 @@ +package com.win.module.infra.framework.file.core.client; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ReflectUtil; +import com.win.module.infra.framework.file.core.enums.FileStorageEnum; +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +/** + * 文件客户端的工厂实现类 + * + * @author 芋道源码 + */ +@Slf4j +public class FileClientFactoryImpl implements FileClientFactory { + + /** + * 文件客户端 Map + * key:配置编号 + */ + private final ConcurrentMap> clients = new ConcurrentHashMap<>(); + + @Override + public FileClient getFileClient(Long configId) { + AbstractFileClient client = clients.get(configId); + if (client == null) { + log.error("[getFileClient][配置编号({}) 找不到客户端]", configId); + } + return client; + } + + @Override + @SuppressWarnings("unchecked") + public void createOrUpdateFileClient(Long configId, Integer storage, Config config) { + AbstractFileClient client = (AbstractFileClient) clients.get(configId); + if (client == null) { + client = this.createFileClient(configId, storage, config); + client.init(); + clients.put(client.getId(), client); + } else { + client.refresh(config); + } + } + + @SuppressWarnings("unchecked") + private AbstractFileClient createFileClient( + Long configId, Integer storage, Config config) { + FileStorageEnum storageEnum = FileStorageEnum.getByStorage(storage); + Assert.notNull(storageEnum, String.format("文件配置(%s) 为空", storageEnum)); + // 创建客户端 + return (AbstractFileClient) ReflectUtil.newInstance(storageEnum.getClientClass(), configId, config); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/db/DBFileClient.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/db/DBFileClient.java new file mode 100644 index 0000000..3768d28 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/db/DBFileClient.java @@ -0,0 +1,55 @@ +package com.win.module.infra.framework.file.core.client.db; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.extra.spring.SpringUtil; +import com.win.module.infra.dal.dataobject.file.FileContentDO; +import com.win.module.infra.dal.mysql.file.FileContentMapper; +import com.win.module.infra.framework.file.core.client.AbstractFileClient; + +import java.util.Comparator; +import java.util.List; + +/** + * 基于 DB 存储的文件客户端的配置类 + * + * @author 芋道源码 + */ +public class DBFileClient extends AbstractFileClient { + + private FileContentMapper fileContentMapper; + + public DBFileClient(Long id, DBFileClientConfig config) { + super(id, config); + } + + @Override + protected void doInit() { + fileContentMapper = SpringUtil.getBean(FileContentMapper.class); + } + + @Override + public String upload(byte[] content, String path, String type) { + FileContentDO contentDO = new FileContentDO().setConfigId(getId()) + .setPath(path).setContent(content); + fileContentMapper.insert(contentDO); + // 拼接返回路径 + return super.formatFileUrl(config.getDomain(), path); + } + + @Override + public void delete(String path) { + fileContentMapper.deleteByConfigIdAndPath(getId(), path); + } + + @Override + public byte[] getContent(String path) { + List list = fileContentMapper.selectListByConfigIdAndPath(getId(), path); + if (CollUtil.isEmpty(list)) { + return null; + } + // 排序后,拿 id 最大的,即最后上传的 + list.sort(Comparator.comparing(FileContentDO::getId)); + return CollUtil.getLast(list).getContent(); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/db/DBFileClientConfig.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/db/DBFileClientConfig.java new file mode 100644 index 0000000..5e380b9 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/db/DBFileClientConfig.java @@ -0,0 +1,23 @@ +package com.win.module.infra.framework.file.core.client.db; + +import com.win.module.infra.framework.file.core.client.FileClientConfig; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +/** + * 基于 DB 存储的文件客户端的配置类 + * + * @author 芋道源码 + */ +@Data +public class DBFileClientConfig implements FileClientConfig { + + /** + * 自定义域名 + */ + @NotEmpty(message = "domain 不能为空") + @URL(message = "domain 必须是 URL 格式") + private String domain; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/ftp/FtpFileClient.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/ftp/FtpFileClient.java new file mode 100644 index 0000000..144cf7b --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/ftp/FtpFileClient.java @@ -0,0 +1,77 @@ +package com.win.module.infra.framework.file.core.client.ftp; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.ftp.Ftp; +import cn.hutool.extra.ftp.FtpException; +import cn.hutool.extra.ftp.FtpMode; +import com.win.module.infra.framework.file.core.client.AbstractFileClient; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; + +/** + * Ftp 文件客户端 + * + * @author 芋道源码 + */ +public class FtpFileClient extends AbstractFileClient { + + private Ftp ftp; + + public FtpFileClient(Long id, FtpFileClientConfig config) { + super(id, config); + } + + @Override + protected void doInit() { + // 把配置的 \ 替换成 /, 如果路径配置 \a\test, 替换成 /a/test, 替换方法已经处理 null 情况 + config.setBasePath(StrUtil.replace(config.getBasePath(), StrUtil.BACKSLASH, StrUtil.SLASH)); + // ftp的路径是 / 结尾 + if (!config.getBasePath().endsWith(StrUtil.SLASH)) { + config.setBasePath(config.getBasePath() + StrUtil.SLASH); + } + // 初始化 Ftp 对象 + this.ftp = new Ftp(config.getHost(), config.getPort(), config.getUsername(), config.getPassword(), + CharsetUtil.CHARSET_UTF_8, null, null, FtpMode.valueOf(config.getMode())); + } + + @Override + public String upload(byte[] content, String path, String type) { + // 执行写入 + String filePath = getFilePath(path); + String fileName = FileUtil.getName(filePath); + String dir = StrUtil.removeSuffix(filePath, fileName); + ftp.reconnectIfTimeout(); + boolean success = ftp.upload(dir, fileName, new ByteArrayInputStream(content)); + if (!success) { + throw new FtpException(StrUtil.format("上传文件到目标目录 ({}) 失败", filePath)); + } + // 拼接返回路径 + return super.formatFileUrl(config.getDomain(), path); + } + + @Override + public void delete(String path) { + String filePath = getFilePath(path); + ftp.reconnectIfTimeout(); + ftp.delFile(filePath); + } + + @Override + public byte[] getContent(String path) { + String filePath = getFilePath(path); + String fileName = FileUtil.getName(filePath); + String dir = StrUtil.removeSuffix(filePath, fileName); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ftp.reconnectIfTimeout(); + ftp.download(dir, fileName, out); + return out.toByteArray(); + } + + private String getFilePath(String path) { + return config.getBasePath() + path; + } + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/ftp/FtpFileClientConfig.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/ftp/FtpFileClientConfig.java new file mode 100644 index 0000000..c693c96 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/ftp/FtpFileClientConfig.java @@ -0,0 +1,58 @@ +package com.win.module.infra.framework.file.core.client.ftp; + +import com.win.module.infra.framework.file.core.client.FileClientConfig; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +/** + * Ftp 文件客户端的配置类 + * + * @author 芋道源码 + */ +@Data +public class FtpFileClientConfig implements FileClientConfig { + + /** + * 基础路径 + */ + @NotEmpty(message = "基础路径不能为空") + private String basePath; + + /** + * 自定义域名 + */ + @NotEmpty(message = "domain 不能为空") + @URL(message = "domain 必须是 URL 格式") + private String domain; + + /** + * 主机地址 + */ + @NotEmpty(message = "host 不能为空") + private String host; + /** + * 主机端口 + */ + @NotNull(message = "port 不能为空") + private Integer port; + /** + * 用户名 + */ + @NotEmpty(message = "用户名不能为空") + private String username; + /** + * 密码 + */ + @NotEmpty(message = "密码不能为空") + private String password; + /** + * 连接模式 + * + * 使用 {@link cn.hutool.extra.ftp.FtpMode} 对应的字符串 + */ + @NotEmpty(message = "连接模式不能为空") + private String mode; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/local/LocalFileClient.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/local/LocalFileClient.java new file mode 100644 index 0000000..4ec8f61 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/local/LocalFileClient.java @@ -0,0 +1,52 @@ +package com.win.module.infra.framework.file.core.client.local; + +import cn.hutool.core.io.FileUtil; +import com.win.module.infra.framework.file.core.client.AbstractFileClient; + +import java.io.File; + +/** + * 本地文件客户端 + * + * @author 芋道源码 + */ +public class LocalFileClient extends AbstractFileClient { + + public LocalFileClient(Long id, LocalFileClientConfig config) { + super(id, config); + } + + @Override + protected void doInit() { + // 补全风格。例如说 Linux 是 /,Windows 是 \ + if (!config.getBasePath().endsWith(File.separator)) { + config.setBasePath(config.getBasePath() + File.separator); + } + } + + @Override + public String upload(byte[] content, String path, String type) { + // 执行写入 + String filePath = getFilePath(path); + FileUtil.writeBytes(content, filePath); + // 拼接返回路径 + return super.formatFileUrl(config.getDomain(), path); + } + + @Override + public void delete(String path) { + String filePath = getFilePath(path); + FileUtil.del(filePath); + } + + @Override + public byte[] getContent(String path) { + String filePath = getFilePath(path); + return FileUtil.readBytes(filePath); + } + + private String getFilePath(String path) { + return config.getBasePath() + path; + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/local/LocalFileClientConfig.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/local/LocalFileClientConfig.java new file mode 100644 index 0000000..d98e78b --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/local/LocalFileClientConfig.java @@ -0,0 +1,29 @@ +package com.win.module.infra.framework.file.core.client.local; + +import com.win.module.infra.framework.file.core.client.FileClientConfig; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +/** + * 本地文件客户端的配置类 + * + * @author 芋道源码 + */ +@Data +public class LocalFileClientConfig implements FileClientConfig { + + /** + * 基础路径 + */ + @NotEmpty(message = "基础路径不能为空") + private String basePath; + + /** + * 自定义域名 + */ + @NotEmpty(message = "domain 不能为空") + @URL(message = "domain 必须是 URL 格式") + private String domain; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/s3/FilePresignedUrlRespDTO.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/s3/FilePresignedUrlRespDTO.java new file mode 100644 index 0000000..f859281 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/s3/FilePresignedUrlRespDTO.java @@ -0,0 +1,29 @@ +package com.win.module.infra.framework.file.core.client.s3; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 文件预签名地址 Response DTO + * + * @author owen + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class FilePresignedUrlRespDTO { + + /** + * 文件上传 URL(用于上传) + * + * 例如说: + */ + private String uploadUrl; + + /** + * 文件 URL(用于读取、下载等) + */ + private String url; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/s3/S3FileClient.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/s3/S3FileClient.java new file mode 100644 index 0000000..479a874 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/s3/S3FileClient.java @@ -0,0 +1,131 @@ +package com.win.module.infra.framework.file.core.client.s3; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpUtil; +import com.win.module.infra.framework.file.core.client.AbstractFileClient; +import io.minio.*; +import io.minio.http.Method; + +import java.io.ByteArrayInputStream; +import java.util.concurrent.TimeUnit; + +/** + * 基于 S3 协议的文件客户端,实现 MinIO、阿里云、腾讯云、七牛云、华为云等云服务 + *

    + * S3 协议的客户端,采用亚马逊提供的 software.amazon.awssdk.s3 库 + * + * @author 芋道源码 + */ +public class S3FileClient extends AbstractFileClient { + + private MinioClient client; + + public S3FileClient(Long id, S3FileClientConfig config) { + super(id, config); + } + + @Override + protected void doInit() { + // 补全 domain + if (StrUtil.isEmpty(config.getDomain())) { + config.setDomain(buildDomain()); + } + // 初始化客户端 + client = MinioClient.builder() + .endpoint(buildEndpointURL()) // Endpoint URL + .region(buildRegion()) // Region + .credentials(config.getAccessKey(), config.getAccessSecret()) // 认证密钥 + .build(); + } + + /** + * 基于 endpoint 构建调用云服务的 URL 地址 + * + * @return URI 地址 + */ + private String buildEndpointURL() { + // 如果已经是 http 或者 https,则不进行拼接.主要适配 MinIO + if (HttpUtil.isHttp(config.getEndpoint()) || HttpUtil.isHttps(config.getEndpoint())) { + return config.getEndpoint(); + } + return StrUtil.format("https://{}", config.getEndpoint()); + } + + /** + * 基于 bucket + endpoint 构建访问的 Domain 地址 + * + * @return Domain 地址 + */ + private String buildDomain() { + // 如果已经是 http 或者 https,则不进行拼接.主要适配 MinIO + if (HttpUtil.isHttp(config.getEndpoint()) || HttpUtil.isHttps(config.getEndpoint())) { + return StrUtil.format("{}/{}", config.getEndpoint(), config.getBucket()); + } + // 阿里云、腾讯云、华为云都适合。七牛云比较特殊,必须有自定义域名 + return StrUtil.format("https://{}.{}", config.getBucket(), config.getEndpoint()); + } + + /** + * 基于 bucket 构建 region 地区 + * + * @return region 地区 + */ + private String buildRegion() { + // 阿里云必须有 region,否则会报错 + if (config.getEndpoint().contains(S3FileClientConfig.ENDPOINT_ALIYUN)) { + return StrUtil.subBefore(config.getEndpoint(), '.', false) + .replaceAll("-internal", "")// 去除内网 Endpoint 的后缀 + .replaceAll("https://", ""); + } + // 腾讯云必须有 region,否则会报错 + if (config.getEndpoint().contains(S3FileClientConfig.ENDPOINT_TENCENT)) { + return StrUtil.subAfter(config.getEndpoint(), "cos.", false) + .replaceAll("." + S3FileClientConfig.ENDPOINT_TENCENT, ""); // 去除 Endpoint + } + return null; + } + + @Override + public String upload(byte[] content, String path, String type) throws Exception { + // 执行上传 + client.putObject(PutObjectArgs.builder() + .bucket(config.getBucket()) // bucket 必须传递 + .contentType(type) + .object(path) // 相对路径作为 key + .stream(new ByteArrayInputStream(content), content.length, -1) // 文件内容 + .build()); + // 拼接返回路径 + return config.getDomain() + "/" + path; + } + + @Override + public void delete(String path) throws Exception { + client.removeObject(RemoveObjectArgs.builder() + .bucket(config.getBucket()) // bucket 必须传递 + .object(path) // 相对路径作为 key + .build()); + } + + @Override + public byte[] getContent(String path) throws Exception { + GetObjectResponse response = client.getObject(GetObjectArgs.builder() + .bucket(config.getBucket()) // bucket 必须传递 + .object(path) // 相对路径作为 key + .build()); + return IoUtil.readBytes(response); + } + + @Override + public FilePresignedUrlRespDTO getPresignedObjectUrl(String path) throws Exception { + String uploadUrl = client.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder() + .method(Method.PUT) + .bucket(config.getBucket()) + .object(path) + .expiry(10, TimeUnit.MINUTES) // 过期时间(秒数)取值范围:1 秒 ~ 7 天 + .build() + ); + return new FilePresignedUrlRespDTO(uploadUrl, config.getDomain() + "/" + path); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/s3/S3FileClientConfig.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/s3/S3FileClientConfig.java new file mode 100644 index 0000000..5909662 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/s3/S3FileClientConfig.java @@ -0,0 +1,76 @@ +package com.win.module.infra.framework.file.core.client.s3; + +import cn.hutool.core.util.StrUtil; +import com.win.module.infra.framework.file.core.client.FileClientConfig; +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.validation.constraints.AssertTrue; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +/** + * S3 文件客户端的配置类 + * + * @author 芋道源码 + */ +@Data +public class S3FileClientConfig implements FileClientConfig { + + public static final String ENDPOINT_QINIU = "qiniucs.com"; + public static final String ENDPOINT_ALIYUN = "aliyuncs.com"; + public static final String ENDPOINT_TENCENT = "myqcloud.com"; + + /** + * 节点地址 + * 1. MinIO:https://www.iocoder.cn/Spring-Boot/MinIO 。例如说,http://127.0.0.1:9000 + * 2. 阿里云:https://help.aliyun.com/document_detail/31837.html + * 3. 腾讯云:https://cloud.tencent.com/document/product/436/6224 + * 4. 七牛云:https://developer.qiniu.com/kodo/4088/s3-access-domainname + * 5. 华为云:https://developer.huaweicloud.com/endpoint?OBS + */ + @NotNull(message = "endpoint 不能为空") + private String endpoint; + /** + * 自定义域名 + * 1. MinIO:通过 Nginx 配置 + * 2. 阿里云:https://help.aliyun.com/document_detail/31836.html + * 3. 腾讯云:https://cloud.tencent.com/document/product/436/11142 + * 4. 七牛云:https://developer.qiniu.com/kodo/8556/set-the-custom-source-domain-name + * 5. 华为云:https://support.huaweicloud.com/usermanual-obs/obs_03_0032.html + */ + @URL(message = "domain 必须是 URL 格式") + private String domain; + /** + * 存储 Bucket + */ + @NotNull(message = "bucket 不能为空") + private String bucket; + + /** + * 访问 Key + * 1. MinIO:https://www.iocoder.cn/Spring-Boot/MinIO + * 2. 阿里云:https://ram.console.aliyun.com/manage/ak + * 3. 腾讯云:https://console.cloud.tencent.com/cam/capi + * 4. 七牛云:https://portal.qiniu.com/user/key + * 5. 华为云:https://support.huaweicloud.com/qs-obs/obs_qs_0005.html + */ + @NotNull(message = "accessKey 不能为空") + private String accessKey; + /** + * 访问 Secret + */ + @NotNull(message = "accessSecret 不能为空") + private String accessSecret; + + @SuppressWarnings("RedundantIfStatement") + @AssertTrue(message = "domain 不能为空") + @JsonIgnore + public boolean isDomainValid() { + // 如果是七牛,必须带有 domain + if (StrUtil.contains(endpoint, ENDPOINT_QINIU) && StrUtil.isEmpty(domain)) { + return false; + } + return true; + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/sftp/SftpFileClient.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/sftp/SftpFileClient.java new file mode 100644 index 0000000..1956716 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/sftp/SftpFileClient.java @@ -0,0 +1,61 @@ +package com.win.module.infra.framework.file.core.client.sftp; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.extra.ssh.Sftp; +import com.win.framework.common.util.io.FileUtils; +import com.win.module.infra.framework.file.core.client.AbstractFileClient; + +import java.io.File; + +/** + * Sftp 文件客户端 + * + * @author 芋道源码 + */ +public class SftpFileClient extends AbstractFileClient { + + private Sftp sftp; + + public SftpFileClient(Long id, SftpFileClientConfig config) { + super(id, config); + } + + @Override + protected void doInit() { + // 补全风格。例如说 Linux 是 /,Windows 是 \ + if (!config.getBasePath().endsWith(File.separator)) { + config.setBasePath(config.getBasePath() + File.separator); + } + // 初始化 Ftp 对象 + this.sftp = new Sftp(config.getHost(), config.getPort(), config.getUsername(), config.getPassword()); + } + + @Override + public String upload(byte[] content, String path, String type) { + // 执行写入 + String filePath = getFilePath(path); + File file = FileUtils.createTempFile(content); + sftp.upload(filePath, file); + // 拼接返回路径 + return super.formatFileUrl(config.getDomain(), path); + } + + @Override + public void delete(String path) { + String filePath = getFilePath(path); + sftp.delFile(filePath); + } + + @Override + public byte[] getContent(String path) { + String filePath = getFilePath(path); + File destFile = FileUtils.createTempFile(); + sftp.download(filePath, destFile); + return FileUtil.readBytes(destFile); + } + + private String getFilePath(String path) { + return config.getBasePath() + path; + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/sftp/SftpFileClientConfig.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/sftp/SftpFileClientConfig.java new file mode 100644 index 0000000..a8539fd --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/client/sftp/SftpFileClientConfig.java @@ -0,0 +1,51 @@ +package com.win.module.infra.framework.file.core.client.sftp; + +import com.win.module.infra.framework.file.core.client.FileClientConfig; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +/** + * Sftp 文件客户端的配置类 + * + * @author 芋道源码 + */ +@Data +public class SftpFileClientConfig implements FileClientConfig { + + /** + * 基础路径 + */ + @NotEmpty(message = "基础路径不能为空") + private String basePath; + + /** + * 自定义域名 + */ + @NotEmpty(message = "domain 不能为空") + @URL(message = "domain 必须是 URL 格式") + private String domain; + + /** + * 主机地址 + */ + @NotEmpty(message = "host 不能为空") + private String host; + /** + * 主机端口 + */ + @NotNull(message = "port 不能为空") + private Integer port; + /** + * 用户名 + */ + @NotEmpty(message = "用户名不能为空") + private String username; + /** + * 密码 + */ + @NotEmpty(message = "密码不能为空") + private String password; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/enums/FileStorageEnum.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/enums/FileStorageEnum.java new file mode 100644 index 0000000..388ab6e --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/enums/FileStorageEnum.java @@ -0,0 +1,55 @@ +package com.win.module.infra.framework.file.core.enums; + +import cn.hutool.core.util.ArrayUtil; +import com.win.module.infra.framework.file.core.client.FileClient; +import com.win.module.infra.framework.file.core.client.FileClientConfig; +import com.win.module.infra.framework.file.core.client.db.DBFileClient; +import com.win.module.infra.framework.file.core.client.db.DBFileClientConfig; +import com.win.module.infra.framework.file.core.client.ftp.FtpFileClient; +import com.win.module.infra.framework.file.core.client.ftp.FtpFileClientConfig; +import com.win.module.infra.framework.file.core.client.local.LocalFileClient; +import com.win.module.infra.framework.file.core.client.local.LocalFileClientConfig; +import com.win.module.infra.framework.file.core.client.s3.S3FileClient; +import com.win.module.infra.framework.file.core.client.s3.S3FileClientConfig; +import com.win.module.infra.framework.file.core.client.sftp.SftpFileClient; +import com.win.module.infra.framework.file.core.client.sftp.SftpFileClientConfig; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 文件存储器枚举 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum FileStorageEnum { + + DB(1, DBFileClientConfig.class, DBFileClient.class), + + LOCAL(10, LocalFileClientConfig.class, LocalFileClient.class), + FTP(11, FtpFileClientConfig.class, FtpFileClient.class), + SFTP(12, SftpFileClientConfig.class, SftpFileClient.class), + + S3(20, S3FileClientConfig.class, S3FileClient.class), + ; + + /** + * 存储器 + */ + private final Integer storage; + + /** + * 配置类 + */ + private final Class configClass; + /** + * 客户端类 + */ + private final Class clientClass; + + public static FileStorageEnum getByStorage(Integer storage) { + return ArrayUtil.firstMatch(o -> o.getStorage().equals(storage), values()); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/utils/FileTypeUtils.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/utils/FileTypeUtils.java new file mode 100644 index 0000000..e097612 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/core/utils/FileTypeUtils.java @@ -0,0 +1,76 @@ +package com.win.module.infra.framework.file.core.utils; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.ttl.TransmittableThreadLocal; +import jakarta.servlet.http.HttpServletResponse; +import lombok.SneakyThrows; +import org.apache.tika.Tika; + +import java.io.IOException; +import java.net.URLEncoder; + +/** + * 文件类型 Utils + * + * @author 芋道源码 + */ +public class FileTypeUtils { + + private static final ThreadLocal TIKA = TransmittableThreadLocal.withInitial(Tika::new); + + /** + * 获得文件的 mineType,对于doc,jar等文件会有误差 + * + * @param data 文件内容 + * @return mineType 无法识别时会返回“application/octet-stream” + */ + @SneakyThrows + public static String getMineType(byte[] data) { + return TIKA.get().detect(data); + } + + /** + * 已知文件名,获取文件类型,在某些情况下比通过字节数组准确,例如使用jar文件时,通过名字更为准确 + * + * @param name 文件名 + * @return mineType 无法识别时会返回“application/octet-stream” + */ + public static String getMineType(String name) { + return TIKA.get().detect(name); + } + + /** + * 在拥有文件和数据的情况下,最好使用此方法,最为准确 + * + * @param data 文件内容 + * @param name 文件名 + * @return mineType 无法识别时会返回“application/octet-stream” + */ + public static String getMineType(byte[] data, String name) { + return TIKA.get().detect(data, name); + } + + /** + * 返回附件 + * + * @param response 响应 + * @param filename 文件名 + * @param content 附件内容 + */ + public static void writeAttachment(HttpServletResponse response, String filename, byte[] content) throws IOException { + // 设置 header 和 contentType + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); + String contentType = getMineType(content, filename); + response.setContentType(contentType); + // 针对 video 的特殊处理,解决视频地址在移动端播放的兼容性问题 + if (StrUtil.containsIgnoreCase(contentType, "video")) { + response.setHeader("Content-Length", String.valueOf(content.length - 1)); + response.setHeader("Content-Range", String.valueOf(content.length - 1)); + response.setHeader("Accept-Ranges", "bytes"); + } + // 输出附件 + IoUtil.write(response.getOutputStream(), false, content); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/package-info.java new file mode 100644 index 0000000..f99c169 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/file/package-info.java @@ -0,0 +1,12 @@ +/** + * 文件客户端,支持多种存储器 + * + * 1. local:本地磁盘 + * 2. ftp:FTP 服务器 + * 3. sftp:SFTP 服务器 + * 4. db:数据库 + * 5. s3:支持 S3 协议的云存储服务,例如说 MinIO、阿里云、华为云、腾讯云、七牛云等等 + * + * @author 芋道源码 + */ +package com.win.module.infra.framework.file; \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/monitor/config/AdminServerConfiguration.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/monitor/config/AdminServerConfiguration.java new file mode 100644 index 0000000..847b7a1 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/monitor/config/AdminServerConfiguration.java @@ -0,0 +1,9 @@ +package com.win.module.infra.framework.monitor.config; + +import de.codecentric.boot.admin.server.config.EnableAdminServer; +import org.springframework.context.annotation.Configuration; + +@Configuration(proxyBeanMethods = false) +@EnableAdminServer +public class AdminServerConfiguration { +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/monitor/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/monitor/package-info.java new file mode 100644 index 0000000..9f9f730 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/monitor/package-info.java @@ -0,0 +1,4 @@ +/** + * 使用 Spring Boot Admin 实现简单的监控平台 + */ +package com.win.module.infra.framework.monitor; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md new file mode 100644 index 0000000..5641db1 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md @@ -0,0 +1 @@ + diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/package-info.java new file mode 100644 index 0000000..0cb7189 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/package-info.java @@ -0,0 +1,6 @@ +/** + * 属于 infra 模块的 framework 封装 + * + * @author 芋道源码 + */ +package com.win.module.infra.framework; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/rpc/config/RpcConfiguration.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/rpc/config/RpcConfiguration.java new file mode 100644 index 0000000..6609340 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/rpc/config/RpcConfiguration.java @@ -0,0 +1,10 @@ +package com.win.module.infra.framework.rpc.config; + +import com.win.module.system.api.user.AdminUserApi; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; + +@Configuration(proxyBeanMethods = false) +@EnableFeignClients(clients = AdminUserApi.class) +public class RpcConfiguration { +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/rpc/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/rpc/package-info.java new file mode 100644 index 0000000..9f1e74f --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/rpc/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package com.win.module.infra.framework.rpc; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/security/config/SecurityConfiguration.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/security/config/SecurityConfiguration.java new file mode 100644 index 0000000..db1f895 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/security/config/SecurityConfiguration.java @@ -0,0 +1,48 @@ +package com.win.module.infra.framework.security.config; + +import com.win.framework.security.config.AuthorizeRequestsCustomizer; +import com.win.module.infra.enums.ApiConstants; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer; + +/** + * Infra 模块的 Security 配置 + */ +@Configuration(proxyBeanMethods = false, value = "infraSecurityConfiguration") +public class SecurityConfiguration { + + @Value("${spring.boot.admin.context-path:''}") + private String adminSeverContextPath; + + @Bean("infraAuthorizeRequestsCustomizer") + public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { + return new AuthorizeRequestsCustomizer() { + + @Override + public void customize(AuthorizeHttpRequestsConfigurer.AuthorizationManagerRequestMatcherRegistry registry) { + // Swagger 接口文档 + registry.requestMatchers("/v3/api-docs/**").permitAll() // 元数据 + .requestMatchers("/swagger-ui.html").permitAll(); // Swagger UI + // Spring Boot Actuator 的安全配置 + registry.requestMatchers("/actuator").permitAll() + .requestMatchers("/actuator/**").permitAll(); + // Druid 监控 + registry.requestMatchers("/druid/**").permitAll(); + // Spring Boot Admin Server 的安全配置 + registry.requestMatchers(adminSeverContextPath).permitAll() + .requestMatchers(adminSeverContextPath + "/**").permitAll(); + // 文件读取 + registry.requestMatchers(buildAdminApi("/infra/file/*/get/**")).permitAll(); + + // TODO 芋艿:这个每个项目都需要重复配置,得捉摸有没通用的方案 + // RPC 服务的安全配置 + registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll(); + } + + }; + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/security/core/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/security/core/package-info.java new file mode 100644 index 0000000..26f91a7 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/framework/security/core/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package com.win.module.infra.framework.security.core; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/job/logger/AccessLogCleanJob.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/job/logger/AccessLogCleanJob.java new file mode 100644 index 0000000..8726673 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/job/logger/AccessLogCleanJob.java @@ -0,0 +1,40 @@ +package com.win.module.infra.job.logger; + +import com.win.framework.tenant.core.aop.TenantIgnore; +import com.win.module.infra.service.logger.ApiAccessLogService; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import jakarta.annotation.Resource; + +/** + * 物理删除 N 天前的访问日志的 Job + * + * @author j-sentinel + */ +@Component +@Slf4j +public class AccessLogCleanJob { + + @Resource + private ApiAccessLogService apiAccessLogService; + + /** + * 清理超过(14)天的日志 + */ + private static final Integer JOB_CLEAN_RETAIN_DAY = 14; + + /** + * 每次删除间隔的条数,如果值太高可能会造成数据库的压力过大 + */ + private static final Integer DELETE_LIMIT = 100; + + @XxlJob("accessLogCleanJob") + @TenantIgnore + public void execute() { + Integer count = apiAccessLogService.cleanAccessLog(JOB_CLEAN_RETAIN_DAY, DELETE_LIMIT); + log.info("[execute][定时执行清理访问日志数量 ({}) 个]", count); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/job/logger/ErrorLogCleanJob.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/job/logger/ErrorLogCleanJob.java new file mode 100644 index 0000000..eba42eb --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/job/logger/ErrorLogCleanJob.java @@ -0,0 +1,40 @@ +package com.win.module.infra.job.logger; + +import com.win.framework.tenant.core.aop.TenantIgnore; +import com.win.module.infra.service.logger.ApiErrorLogService; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import jakarta.annotation.Resource; + +/** + * 物理删除 N 天前的错误日志的 Job + * + * @author j-sentinel + */ +@Slf4j +@Component +public class ErrorLogCleanJob { + + @Resource + private ApiErrorLogService apiErrorLogService; + + /** + * 清理超过(14)天的日志 + */ + private static final Integer JOB_CLEAN_RETAIN_DAY = 14; + + /** + * 每次删除间隔的条数,如果值太高可能会造成数据库的压力过大 + */ + private static final Integer DELETE_LIMIT = 100; + + @XxlJob("errorLogCleanJob") + @TenantIgnore + public void execute() { + Integer count = apiErrorLogService.cleanErrorLog(JOB_CLEAN_RETAIN_DAY,DELETE_LIMIT); + log.info("[execute][定时执行清理错误日志数量 ({}) 个]", count); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/job/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/job/package-info.java new file mode 100644 index 0000000..0b2722b --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/job/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位,无特殊含义 + */ +package com.win.module.infra.job; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/mq/consumer/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/mq/consumer/package-info.java new file mode 100644 index 0000000..3a24032 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/mq/consumer/package-info.java @@ -0,0 +1,4 @@ +/** + * 消息队列的消费者 + */ +package com.win.module.infra.mq.consumer; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/mq/message/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/mq/message/package-info.java new file mode 100644 index 0000000..02209df --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/mq/message/package-info.java @@ -0,0 +1,4 @@ +/** + * 消息队列的消息 + */ +package com.win.module.infra.mq.message; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/mq/producer/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/mq/producer/package-info.java new file mode 100644 index 0000000..1c75e0d --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/mq/producer/package-info.java @@ -0,0 +1,4 @@ +/** + * 消息队列的生产者 + */ +package com.win.module.infra.mq.producer; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/package-info.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/package-info.java new file mode 100644 index 0000000..70386fc --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/package-info.java @@ -0,0 +1,9 @@ +/** + * infra 模块,主要提供两块能力: + * 1. 我们放基础设施的运维与管理,支撑上层的通用与核心业务。 例如说:定时任务的管理、服务器的信息等等 + * 2. 研发工具,提升研发效率与质量。 例如说:代码生成器、接口文档等等 + * + * 1. Controller URL:以 /infra/ 开头,避免和其它 Module 冲突 + * 2. DataObject 表名:以 infra_ 开头,方便在数据库中区分 + */ +package com.win.module.infra; diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/CodegenService.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/CodegenService.java new file mode 100644 index 0000000..ccb83c4 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/CodegenService.java @@ -0,0 +1,101 @@ +package com.win.module.infra.service.codegen; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.infra.controller.admin.codegen.vo.CodegenCreateListReqVO; +import com.win.module.infra.controller.admin.codegen.vo.CodegenUpdateReqVO; +import com.win.module.infra.controller.admin.codegen.vo.table.CodegenTablePageReqVO; +import com.win.module.infra.controller.admin.codegen.vo.table.DatabaseTableRespVO; +import com.win.module.infra.dal.dataobject.codegen.CodegenColumnDO; +import com.win.module.infra.dal.dataobject.codegen.CodegenTableDO; + +import java.util.List; +import java.util.Map; + +/** + * 代码生成 Service 接口 + * + * @author 芋道源码 + */ +public interface CodegenService { + + /** + * 基于数据库的表结构,创建代码生成器的表定义 + * + * @param userId 用户编号 + * @param reqVO 表信息 + * @return 创建的表定义的编号数组 + */ + List createCodegenList(Long userId, CodegenCreateListReqVO reqVO); + + /** + * 更新数据库的表和字段定义 + * + * @param updateReqVO 更新信息 + */ + void updateCodegen(CodegenUpdateReqVO updateReqVO); + + /** + * 基于数据库的表结构,同步数据库的表和字段定义 + * + * @param tableId 表编号 + */ + void syncCodegenFromDB(Long tableId); + + /** + * 删除数据库的表和字段定义 + * + * @param tableId 数据编号 + */ + void deleteCodegen(Long tableId); + + /** + * 获得表定义列表 + * + * @param dataSourceConfigId 数据源配置的编号 + * @return 表定义列表 + */ + List getCodegenTableList(Long dataSourceConfigId); + + /** + * 获得表定义分页 + * + * @param pageReqVO 分页条件 + * @return 表定义分页 + */ + PageResult getCodegenTablePage(CodegenTablePageReqVO pageReqVO); + + /** + * 获得表定义 + * + * @param id 表编号 + * @return 表定义 + */ + CodegenTableDO getCodegenTable(Long id); + + /** + * 获得指定表的字段定义数组 + * + * @param tableId 表编号 + * @return 字段定义数组 + */ + List getCodegenColumnListByTableId(Long tableId); + + /** + * 执行指定表的代码生成 + * + * @param tableId 表编号 + * @return 生成结果。key 为文件路径,value 为对应的代码内容 + */ + Map generationCodes(Long tableId); + + /** + * 获得数据库自带的表定义列表 + * + * @param dataSourceConfigId 数据源的配置编号 + * @param name 表名称 + * @param comment 表描述 + * @return 表定义列表 + */ + List getDatabaseTableList(Long dataSourceConfigId, String name, String comment); + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/CodegenServiceImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/CodegenServiceImpl.java new file mode 100644 index 0000000..46cf2ab --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/CodegenServiceImpl.java @@ -0,0 +1,288 @@ +package com.win.module.infra.service.codegen; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.infra.controller.admin.codegen.vo.CodegenCreateListReqVO; +import com.win.module.infra.controller.admin.codegen.vo.CodegenUpdateReqVO; +import com.win.module.infra.controller.admin.codegen.vo.table.CodegenTablePageReqVO; +import com.win.module.infra.controller.admin.codegen.vo.table.DatabaseTableRespVO; +import com.win.module.infra.dal.dataobject.codegen.CodegenColumnDO; +import com.win.module.infra.dal.dataobject.codegen.CodegenTableDO; +import com.win.module.infra.dal.mysql.codegen.CodegenColumnMapper; +import com.win.module.infra.dal.mysql.codegen.CodegenTableMapper; +import com.win.module.infra.enums.codegen.CodegenSceneEnum; +import com.win.module.infra.enums.codegen.CodegenTemplateTypeEnum; +import com.win.module.infra.framework.codegen.config.CodegenProperties; +import com.win.module.infra.service.codegen.inner.CodegenBuilder; +import com.win.module.infra.service.codegen.inner.CodegenEngine; +import com.win.module.infra.service.db.DatabaseTableService; +import com.win.module.system.api.user.AdminUserApi; +import com.baomidou.mybatisplus.generator.config.po.TableField; +import com.baomidou.mybatisplus.generator.config.po.TableInfo; +import com.google.common.annotations.VisibleForTesting; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import jakarta.annotation.Resource; +import java.util.*; +import java.util.function.BiPredicate; +import java.util.stream.Collectors; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.collection.CollectionUtils.convertMap; +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; +import static com.win.module.infra.enums.ErrorCodeConstants.*; + +/** + * 代码生成 Service 实现类 + * + * @author 芋道源码 + */ +@Service +public class CodegenServiceImpl implements CodegenService { + + @Resource + private DatabaseTableService databaseTableService; + + @Resource + private CodegenTableMapper codegenTableMapper; + @Resource + private CodegenColumnMapper codegenColumnMapper; + + @Resource + private AdminUserApi userApi; + + @Resource + private CodegenBuilder codegenBuilder; + @Resource + private CodegenEngine codegenEngine; + + @Resource + private CodegenProperties codegenProperties; + + @Override + @Transactional(rollbackFor = Exception.class) + public List createCodegenList(Long userId, CodegenCreateListReqVO reqVO) { + List ids = new ArrayList<>(reqVO.getTableNames().size()); + // 遍历添加。虽然效率会低一点,但是没必要做成完全批量,因为不会这么大量 + reqVO.getTableNames().forEach(tableName -> ids.add(createCodegen(userId, reqVO.getDataSourceConfigId(), tableName))); + return ids; + } + + private Long createCodegen(Long userId, Long dataSourceConfigId, String tableName) { + // 从数据库中,获得数据库表结构 + TableInfo tableInfo = databaseTableService.getTable(dataSourceConfigId, tableName); + // 导入 + return createCodegen0(userId, dataSourceConfigId, tableInfo); + } + + private Long createCodegen0(Long userId, Long dataSourceConfigId, TableInfo tableInfo) { + // 校验导入的表和字段非空 + validateTableInfo(tableInfo); + // 校验是否已经存在 + if (codegenTableMapper.selectByTableNameAndDataSourceConfigId(tableInfo.getName(), + dataSourceConfigId) != null) { + throw exception(CODEGEN_TABLE_EXISTS); + } + + // 构建 CodegenTableDO 对象,插入到 DB 中 + CodegenTableDO table = codegenBuilder.buildTable(tableInfo); + table.setDataSourceConfigId(dataSourceConfigId); + table.setScene(CodegenSceneEnum.ADMIN.getScene()); // 默认配置下,使用管理后台的模板 + table.setFrontType(codegenProperties.getFrontType()); + table.setAuthor(userApi.getUser(userId).getCheckedData().getNickname()); + codegenTableMapper.insert(table); + + // 构建 CodegenColumnDO 数组,插入到 DB 中 + List columns = codegenBuilder.buildColumns(table.getId(), tableInfo.getFields()); + // 如果没有主键,则使用第一个字段作为主键 + if (!tableInfo.isHavePrimaryKey()) { + columns.get(0).setPrimaryKey(true); + } + codegenColumnMapper.insertBatch(columns); + return table.getId(); + } + + @VisibleForTesting + void validateTableInfo(TableInfo tableInfo) { + if (tableInfo == null) { + throw exception(CODEGEN_IMPORT_TABLE_NULL); + } + if (StrUtil.isEmpty(tableInfo.getComment())) { + throw exception(CODEGEN_TABLE_INFO_TABLE_COMMENT_IS_NULL); + } + if (CollUtil.isEmpty(tableInfo.getFields())) { + throw exception(CODEGEN_IMPORT_COLUMNS_NULL); + } + tableInfo.getFields().forEach(field -> { + if (StrUtil.isEmpty(field.getComment())) { + throw exception(CODEGEN_TABLE_INFO_COLUMN_COMMENT_IS_NULL, field.getName()); + } + }); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateCodegen(CodegenUpdateReqVO updateReqVO) { + // 校验是否已经存在 + if (codegenTableMapper.selectById(updateReqVO.getTable().getId()) == null) { + throw exception(CODEGEN_TABLE_NOT_EXISTS); + } + // 校验主表字段存在 + if (Objects.equals(updateReqVO.getTable().getTemplateType(), CodegenTemplateTypeEnum.SUB.getType())) { + if (codegenTableMapper.selectById(updateReqVO.getTable().getMasterTableId()) == null) { + throw exception(CODEGEN_MASTER_TABLE_NOT_EXISTS, updateReqVO.getTable().getMasterTableId()); + } + if (CollUtil.findOne(updateReqVO.getColumns(), // 关联主表的字段不存在 + column -> column.getId().equals(updateReqVO.getTable().getSubJoinColumnId())) == null) { + throw exception(CODEGEN_SUB_COLUMN_NOT_EXISTS, updateReqVO.getTable().getSubJoinColumnId()); + } + } + + // 更新 table 表定义 + CodegenTableDO updateTableObj = BeanUtils.toBean(updateReqVO.getTable(), CodegenTableDO.class); + codegenTableMapper.updateById(updateTableObj); + // 更新 column 字段定义 + List updateColumnObjs = BeanUtils.toBean(updateReqVO.getColumns(), CodegenColumnDO.class); + updateColumnObjs.forEach(updateColumnObj -> codegenColumnMapper.updateById(updateColumnObj)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void syncCodegenFromDB(Long tableId) { + // 校验是否已经存在 + CodegenTableDO table = codegenTableMapper.selectById(tableId); + if (table == null) { + throw exception(CODEGEN_TABLE_NOT_EXISTS); + } + // 从数据库中,获得数据库表结构 + TableInfo tableInfo = databaseTableService.getTable(table.getDataSourceConfigId(), table.getTableName()); + // 执行同步 + syncCodegen0(tableId, tableInfo); + } + + private void syncCodegen0(Long tableId, TableInfo tableInfo) { + // 1. 校验导入的表和字段非空 + validateTableInfo(tableInfo); + List tableFields = tableInfo.getFields(); + + // 2. 构建 CodegenColumnDO 数组,只同步新增的字段 + List codegenColumns = codegenColumnMapper.selectListByTableId(tableId); + Set codegenColumnNames = convertSet(codegenColumns, CodegenColumnDO::getColumnName); + + // 3.1 计算需要【修改】的字段,插入时重新插入,删除时将原来的删除 + Map codegenColumnDOMap = convertMap(codegenColumns, CodegenColumnDO::getColumnName); + BiPredicate primaryKeyPredicate = + (tableField, codegenColumn) -> tableField.getMetaInfo().getJdbcType().name().equals(codegenColumn.getDataType()) + && tableField.getMetaInfo().isNullable() == codegenColumn.getNullable() + && tableField.isKeyFlag() == codegenColumn.getPrimaryKey() + && tableField.getComment().equals(codegenColumn.getColumnComment()); + Set modifyFieldNames = tableFields.stream() + .filter(tableField -> codegenColumnDOMap.get(tableField.getColumnName()) != null + && !primaryKeyPredicate.test(tableField, codegenColumnDOMap.get(tableField.getColumnName()))) + .map(TableField::getColumnName) + .collect(Collectors.toSet()); + // 3.2 计算需要【删除】的字段 + Set tableFieldNames = convertSet(tableFields, TableField::getName); + Set deleteColumnIds = codegenColumns.stream() + .filter(column -> (!tableFieldNames.contains(column.getColumnName())) || modifyFieldNames.contains(column.getColumnName())) + .map(CodegenColumnDO::getId).collect(Collectors.toSet()); + // 移除已经存在的字段 + tableFields.removeIf(column -> codegenColumnNames.contains(column.getColumnName()) && (!modifyFieldNames.contains(column.getColumnName()))); + if (CollUtil.isEmpty(tableFields) && CollUtil.isEmpty(deleteColumnIds)) { + throw exception(CODEGEN_SYNC_NONE_CHANGE); + } + + // 4.1 插入新增的字段 + List columns = codegenBuilder.buildColumns(tableId, tableFields); + codegenColumnMapper.insertBatch(columns); + // 4.2 删除不存在的字段 + if (CollUtil.isNotEmpty(deleteColumnIds)) { + codegenColumnMapper.deleteBatchIds(deleteColumnIds); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteCodegen(Long tableId) { + // 校验是否已经存在 + if (codegenTableMapper.selectById(tableId) == null) { + throw exception(CODEGEN_TABLE_NOT_EXISTS); + } + + // 删除 table 表定义 + codegenTableMapper.deleteById(tableId); + // 删除 column 字段定义 + codegenColumnMapper.deleteListByTableId(tableId); + } + + @Override + public List getCodegenTableList(Long dataSourceConfigId) { + return codegenTableMapper.selectListByDataSourceConfigId(dataSourceConfigId); + } + + @Override + public PageResult getCodegenTablePage(CodegenTablePageReqVO pageReqVO) { + return codegenTableMapper.selectPage(pageReqVO); + } + + @Override + public CodegenTableDO getCodegenTable(Long id) { + return codegenTableMapper.selectById(id); + } + + @Override + public List getCodegenColumnListByTableId(Long tableId) { + return codegenColumnMapper.selectListByTableId(tableId); + } + + @Override + public Map generationCodes(Long tableId) { + // 校验是否已经存在 + CodegenTableDO table = codegenTableMapper.selectById(tableId); + if (table == null) { + throw exception(CODEGEN_TABLE_NOT_EXISTS); + } + List columns = codegenColumnMapper.selectListByTableId(tableId); + if (CollUtil.isEmpty(columns)) { + throw exception(CODEGEN_COLUMN_NOT_EXISTS); + } + + // 如果是主子表,则加载对应的子表信息 + List subTables = null; + List> subColumnsList = null; + if (CodegenTemplateTypeEnum.isMaster(table.getTemplateType())) { + // 校验子表存在 + subTables = codegenTableMapper.selectListByTemplateTypeAndMasterTableId( + CodegenTemplateTypeEnum.SUB.getType(), tableId); + if (CollUtil.isEmpty(subTables)) { + throw exception(CODEGEN_MASTER_GENERATION_FAIL_NO_SUB_TABLE); + } + // 校验子表的关联字段存在 + subColumnsList = new ArrayList<>(); + for (CodegenTableDO subTable : subTables) { + List subColumns = codegenColumnMapper.selectListByTableId(subTable.getId()); + if (CollUtil.findOne(subColumns, column -> column.getId().equals(subTable.getSubJoinColumnId())) == null) { + throw exception(CODEGEN_SUB_COLUMN_NOT_EXISTS, subTable.getId()); + } + subColumnsList.add(subColumns); + } + } + + // 执行生成 + return codegenEngine.execute(table, columns, subTables, subColumnsList); + } + + @Override + public List getDatabaseTableList(Long dataSourceConfigId, String name, String comment) { + List tables = databaseTableService.getTableList(dataSourceConfigId, name, comment); + // 移除在 Codegen 中,已经存在的 + Set existsTables = convertSet( + codegenTableMapper.selectListByDataSourceConfigId(dataSourceConfigId), CodegenTableDO::getTableName); + tables.removeIf(table -> existsTables.contains(table.getName())); + return BeanUtils.toBean(tables, DatabaseTableRespVO.class); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/inner/CodegenBuilder.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/inner/CodegenBuilder.java new file mode 100644 index 0000000..d40a397 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/inner/CodegenBuilder.java @@ -0,0 +1,221 @@ +package com.win.module.infra.service.codegen.inner; + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.infra.convert.codegen.CodegenConvert; +import com.win.module.infra.dal.dataobject.codegen.CodegenColumnDO; +import com.win.module.infra.dal.dataobject.codegen.CodegenTableDO; +import com.win.module.infra.enums.codegen.CodegenColumnHtmlTypeEnum; +import com.win.module.infra.enums.codegen.CodegenColumnListConditionEnum; +import com.win.module.infra.enums.codegen.CodegenTemplateTypeEnum; +import com.baomidou.mybatisplus.generator.config.po.TableField; +import com.baomidou.mybatisplus.generator.config.po.TableInfo; +import com.google.common.collect.Sets; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.*; + +import static cn.hutool.core.text.CharSequenceUtil.*; +import static cn.hutool.core.util.RandomUtil.randomEle; +import static cn.hutool.core.util.RandomUtil.randomInt; + +/** + * 代码生成器的 Builder,负责: + * 1. 将数据库的表 {@link TableInfo} 定义,构建成 {@link CodegenTableDO} + * 2. 将数据库的列 {@link TableField} 构定义,建成 {@link CodegenColumnDO} + */ +@Component +public class CodegenBuilder { + + /** + * 字段名与 {@link CodegenColumnListConditionEnum} 的默认映射 + * 注意,字段的匹配以后缀的方式 + */ + private static final Map COLUMN_LIST_OPERATION_CONDITION_MAPPINGS = + MapUtil.builder() + .put("name", CodegenColumnListConditionEnum.LIKE) + .put("time", CodegenColumnListConditionEnum.BETWEEN) + .put("date", CodegenColumnListConditionEnum.BETWEEN) + .build(); + + /** + * 字段名与 {@link CodegenColumnHtmlTypeEnum} 的默认映射 + * 注意,字段的匹配以后缀的方式 + */ + private static final Map COLUMN_HTML_TYPE_MAPPINGS = + MapUtil.builder() + .put("status", CodegenColumnHtmlTypeEnum.RADIO) + .put("sex", CodegenColumnHtmlTypeEnum.RADIO) + .put("type", CodegenColumnHtmlTypeEnum.SELECT) + .put("image", CodegenColumnHtmlTypeEnum.IMAGE_UPLOAD) + .put("file", CodegenColumnHtmlTypeEnum.FILE_UPLOAD) + .put("content", CodegenColumnHtmlTypeEnum.EDITOR) + .put("description", CodegenColumnHtmlTypeEnum.EDITOR) + .put("demo", CodegenColumnHtmlTypeEnum.EDITOR) + .put("time", CodegenColumnHtmlTypeEnum.DATETIME) + .put("date", CodegenColumnHtmlTypeEnum.DATETIME) + .build(); + + /** + * 多租户编号的字段名 + */ + public static final String TENANT_ID_FIELD = "tenantId"; + /** + * {@link com.win.framework.mybatis.core.dataobject.BaseDO} 的字段 + */ + public static final Set BASE_DO_FIELDS = new HashSet<>(); + /** + * 新增操作,不需要传递的字段 + */ + private static final Set CREATE_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet("id"); + /** + * 修改操作,不需要传递的字段 + */ + private static final Set UPDATE_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet(); + /** + * 列表操作的条件,不需要传递的字段 + */ + private static final Set LIST_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet("id"); + /** + * 列表操作的结果,不需要返回的字段 + */ + private static final Set LIST_OPERATION_RESULT_EXCLUDE_COLUMN = Sets.newHashSet(); + + static { + Arrays.stream(ReflectUtil.getFields(BaseDO.class)).forEach(field -> BASE_DO_FIELDS.add(field.getName())); + BASE_DO_FIELDS.add(TENANT_ID_FIELD); + // 处理 OPERATION 相关的字段 + CREATE_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS); + UPDATE_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS); + LIST_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS); + LIST_OPERATION_EXCLUDE_COLUMN.remove("createTime"); // 创建时间,还是可能需要传递的 + LIST_OPERATION_RESULT_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS); + LIST_OPERATION_RESULT_EXCLUDE_COLUMN.remove("createTime"); // 创建时间,还是需要返回的 + } + + public CodegenTableDO buildTable(TableInfo tableInfo) { + CodegenTableDO table = CodegenConvert.INSTANCE.convert(tableInfo); + initTableDefault(table); + return table; + } + + /** + * 初始化 Table 表的默认字段 + * + * @param table 表定义 + */ + private void initTableDefault(CodegenTableDO table) { + // 以 system_dept 举例子。moduleName 为 system、businessName 为 dept、className 为 Dept + // 如果希望以 System 前缀,则可以手动在【代码生成 - 修改生成配置 - 基本信息】,将实体类名称改为 SystemDept 即可 + String tableName = table.getTableName().toLowerCase(); + // 第一步,_ 前缀的前面,作为 module 名字;第二步,moduleName 必须小写; + table.setModuleName(subBefore(tableName, '_', false).toLowerCase()); + // 第一步,第一个 _ 前缀的后面,作为 module 名字; 第二步,可能存在多个 _ 的情况,转换成驼峰; 第三步,businessName 必须小写; + table.setBusinessName(toCamelCase(subAfter(tableName, '_', false)).toLowerCase()); + // 驼峰 + 首字母大写;第一步,第一个 _ 前缀的后面,作为 class 名字;第二步,驼峰命名 + table.setClassName(upperFirst(toCamelCase(subAfter(tableName, '_', false)))); + // 去除结尾的表,作为类描述 + table.setClassComment(StrUtil.removeSuffixIgnoreCase(table.getTableComment(), "表")); + table.setTemplateType(CodegenTemplateTypeEnum.ONE.getType()); + } + + public List buildColumns(Long tableId, List tableFields) { + List columns = CodegenConvert.INSTANCE.convertList(tableFields); + int index = 1; + for (CodegenColumnDO column : columns) { + column.setTableId(tableId); + column.setOrdinalPosition(index++); + // 特殊处理:Byte => Integer + if (Byte.class.getSimpleName().equals(column.getJavaType())) { + column.setJavaType(Integer.class.getSimpleName()); + } + // 初始化 Column 列的默认字段 + processColumnOperation(column); // 处理 CRUD 相关的字段的默认值 + processColumnUI(column); // 处理 UI 相关的字段的默认值 + processColumnExample(column); // 处理字段的 swagger example 示例 + } + return columns; + } + + private void processColumnOperation(CodegenColumnDO column) { + // 处理 createOperation 字段 + column.setCreateOperation(!CREATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField()) + && !column.getPrimaryKey()); // 对于主键,创建时无需传递 + // 处理 updateOperation 字段 + column.setUpdateOperation(!UPDATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField()) + || column.getPrimaryKey()); // 对于主键,更新时需要传递 + // 处理 listOperation 字段 + column.setListOperation(!LIST_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField()) + && !column.getPrimaryKey()); // 对于主键,列表过滤不需要传递 + // 处理 listOperationCondition 字段 + COLUMN_LIST_OPERATION_CONDITION_MAPPINGS.entrySet().stream() + .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey())) + .findFirst().ifPresent(entry -> column.setListOperationCondition(entry.getValue().getCondition())); + if (column.getListOperationCondition() == null) { + column.setListOperationCondition(CodegenColumnListConditionEnum.EQ.getCondition()); + } + // 处理 listOperationResult 字段 + column.setListOperationResult(!LIST_OPERATION_RESULT_EXCLUDE_COLUMN.contains(column.getJavaField())); + } + + private void processColumnUI(CodegenColumnDO column) { + // 基于后缀进行匹配 + COLUMN_HTML_TYPE_MAPPINGS.entrySet().stream() + .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey())) + .findFirst().ifPresent(entry -> column.setHtmlType(entry.getValue().getType())); + // 如果是 Boolean 类型时,设置为 radio 类型. + if (Boolean.class.getSimpleName().equals(column.getJavaType())) { + column.setHtmlType(CodegenColumnHtmlTypeEnum.RADIO.getType()); + } + // 如果是 LocalDateTime 类型,则设置为 datetime 类型 + if (LocalDateTime.class.getSimpleName().equals(column.getJavaType())) { + column.setHtmlType(CodegenColumnHtmlTypeEnum.DATETIME.getType()); + } + // 兜底,设置默认为 input 类型 + if (column.getHtmlType() == null) { + column.setHtmlType(CodegenColumnHtmlTypeEnum.INPUT.getType()); + } + } + + /** + * 处理字段的 swagger example 示例 + * + * @param column 字段 + */ + private void processColumnExample(CodegenColumnDO column) { + // id、price、count 等可能是整数的后缀 + if (StrUtil.endWithAnyIgnoreCase(column.getJavaField(), "id", "price", "count")) { + column.setExample(String.valueOf(randomInt(1, Short.MAX_VALUE))); + return; + } + // name + if (StrUtil.endWithIgnoreCase(column.getJavaField(), "name")) { + column.setExample(randomEle(new String[]{"张三", "李四", "王五", "赵六", "芋艿"})); + return; + } + // status + if (StrUtil.endWithAnyIgnoreCase(column.getJavaField(), "status", "type")) { + column.setExample(randomEle(new String[]{"1", "2"})); + return; + } + // url + if (StrUtil.endWithIgnoreCase(column.getColumnName(), "url")) { + column.setExample("https://www.iocoder.cn"); + return; + } + // reason + if (StrUtil.endWithIgnoreCase(column.getColumnName(), "reason")) { + column.setExample(randomEle(new String[]{"不喜欢", "不对", "不好", "不香"})); + return; + } + // description、memo、remark + if (StrUtil.endWithAnyIgnoreCase(column.getColumnName(), "description", "memo", "remark")) { + column.setExample(randomEle(new String[]{"你猜", "随便", "你说的对"})); + return; + } + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/inner/CodegenEngine.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/inner/CodegenEngine.java new file mode 100644 index 0000000..f530717 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/codegen/inner/CodegenEngine.java @@ -0,0 +1,518 @@ +package com.win.module.infra.service.codegen.inner; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.template.TemplateConfig; +import cn.hutool.extra.template.TemplateEngine; +import cn.hutool.extra.template.engine.velocity.VelocityEngine; +import cn.hutool.system.SystemUtil; +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.apilog.core.enums.OperateTypeEnum; +import com.win.framework.common.exception.util.ServiceExceptionUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.common.util.date.DateUtils; +import com.win.framework.common.util.date.LocalDateTimeUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.common.util.object.ObjectUtils; +import com.win.framework.common.util.string.StrUtils; +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.infra.dal.dataobject.codegen.CodegenColumnDO; +import com.win.module.infra.dal.dataobject.codegen.CodegenTableDO; +import com.win.module.infra.enums.codegen.CodegenFrontTypeEnum; +import com.win.module.infra.enums.codegen.CodegenSceneEnum; +import com.win.module.infra.enums.codegen.CodegenTemplateTypeEnum; +import com.win.module.infra.framework.codegen.config.CodegenProperties; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableTable; +import com.google.common.collect.Maps; +import com.google.common.collect.Table; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.Setter; +import org.springframework.stereotype.Component; + +import java.util.*; + +import static cn.hutool.core.map.MapUtil.getStr; +import static cn.hutool.core.text.CharSequenceUtil.*; + +/** + * 代码生成的引擎,用于具体生成代码 + * 目前基于 {@link org.apache.velocity.app.Velocity} 模板引擎实现 + * + * 考虑到 Java 模板引擎的框架非常多,Freemarker、Velocity、Thymeleaf 等等,所以我们采用 hutool 封装的 {@link cn.hutool.extra.template.Template} 抽象 + * + * @author 芋道源码 + */ +@Component +public class CodegenEngine { + + /** + * 后端的模板配置 + * + * key:模板在 resources 的地址 + * value:生成的路径 + */ + private static final Map SERVER_TEMPLATES = MapUtil.builder(new LinkedHashMap<>()) // 有序 + // Java module-biz Main + .put(javaTemplatePath("controller/vo/pageReqVO"), javaModuleImplVOFilePath("PageReqVO")) + .put(javaTemplatePath("controller/vo/listReqVO"), javaModuleImplVOFilePath("ListReqVO")) + .put(javaTemplatePath("controller/vo/respVO"), javaModuleImplVOFilePath("RespVO")) + .put(javaTemplatePath("controller/vo/saveReqVO"), javaModuleImplVOFilePath("SaveReqVO")) + .put(javaTemplatePath("controller/controller"), javaModuleImplControllerFilePath()) + .put(javaTemplatePath("dal/do"), + javaModuleImplMainFilePath("dal/dataobject/${table.businessName}/${table.className}DO")) + .put(javaTemplatePath("dal/do_sub"), // 特殊:主子表专属逻辑 + javaModuleImplMainFilePath("dal/dataobject/${table.businessName}/${subTable.className}DO")) + .put(javaTemplatePath("dal/mapper"), + javaModuleImplMainFilePath("dal/mysql/${table.businessName}/${table.className}Mapper")) + .put(javaTemplatePath("dal/mapper_sub"), // 特殊:主子表专属逻辑 + javaModuleImplMainFilePath("dal/mysql/${table.businessName}/${subTable.className}Mapper")) + .put(javaTemplatePath("dal/mapper.xml"), mapperXmlFilePath()) + .put(javaTemplatePath("service/serviceImpl"), + javaModuleImplMainFilePath("service/${table.businessName}/${table.className}ServiceImpl")) + .put(javaTemplatePath("service/service"), + javaModuleImplMainFilePath("service/${table.businessName}/${table.className}Service")) + // Java module-biz Test + .put(javaTemplatePath("test/serviceTest"), + javaModuleImplTestFilePath("service/${table.businessName}/${table.className}ServiceImplTest")) + // Java module-api Main + .put(javaTemplatePath("enums/errorcode"), javaModuleApiMainFilePath("enums/ErrorCodeConstants_手动操作")) + // SQL + .put("codegen/sql/sql.vm", "sql/sql.sql") + .put("codegen/sql/h2.vm", "sql/h2.sql") + .build(); + + /** + * 后端的配置模版 + * + * key1:UI 模版的类型 {@link CodegenFrontTypeEnum#getType()} + * key2:模板在 resources 的地址 + * value:生成的路径 + */ + private static final Table FRONT_TEMPLATES = ImmutableTable.builder() + // Vue2 标准模版 + .put(CodegenFrontTypeEnum.VUE2.getType(), vueTemplatePath("views/index.vue"), + vueFilePath("views/${table.moduleName}/${table.businessName}/index.vue")) + .put(CodegenFrontTypeEnum.VUE2.getType(), vueTemplatePath("api/api.js"), + vueFilePath("api/${table.moduleName}/${table.businessName}/index.js")) + .put(CodegenFrontTypeEnum.VUE2.getType(), vueTemplatePath("views/form.vue"), + vueFilePath("views/${table.moduleName}/${table.businessName}/${simpleClassName}Form.vue")) + .put(CodegenFrontTypeEnum.VUE2.getType(), vueTemplatePath("views/components/form_sub_normal.vue"), // 特殊:主子表专属逻辑 + vueFilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue")) + .put(CodegenFrontTypeEnum.VUE2.getType(), vueTemplatePath("views/components/form_sub_inner.vue"), // 特殊:主子表专属逻辑 + vueFilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue")) + .put(CodegenFrontTypeEnum.VUE2.getType(), vueTemplatePath("views/components/form_sub_erp.vue"), // 特殊:主子表专属逻辑 + vueFilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue")) + .put(CodegenFrontTypeEnum.VUE2.getType(), vueTemplatePath("views/components/list_sub_inner.vue"), // 特殊:主子表专属逻辑 + vueFilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}List.vue")) + .put(CodegenFrontTypeEnum.VUE2.getType(), vueTemplatePath("views/components/list_sub_erp.vue"), // 特殊:主子表专属逻辑 + vueFilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}List.vue")) + // Vue3 标准模版 + .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/index.vue"), + vue3FilePath("views/${table.moduleName}/${table.businessName}/index.vue")) + .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/form.vue"), + vue3FilePath("views/${table.moduleName}/${table.businessName}/${simpleClassName}Form.vue")) + .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/components/form_sub_normal.vue"), // 特殊:主子表专属逻辑 + vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue")) + .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/components/form_sub_inner.vue"), // 特殊:主子表专属逻辑 + vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue")) + .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/components/form_sub_erp.vue"), // 特殊:主子表专属逻辑 + vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue")) + .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/components/list_sub_inner.vue"), // 特殊:主子表专属逻辑 + vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}List.vue")) + .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/components/list_sub_erp.vue"), // 特殊:主子表专属逻辑 + vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}List.vue")) + .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("api/api.ts"), + vue3FilePath("api/${table.moduleName}/${table.businessName}/index.ts")) + // Vue3 Schema 模版 + .put(CodegenFrontTypeEnum.VUE3_SCHEMA.getType(), vue3SchemaTemplatePath("views/data.ts"), + vue3FilePath("views/${table.moduleName}/${table.businessName}/${classNameVar}.data.ts")) + .put(CodegenFrontTypeEnum.VUE3_SCHEMA.getType(), vue3SchemaTemplatePath("views/index.vue"), + vue3FilePath("views/${table.moduleName}/${table.businessName}/index.vue")) + .put(CodegenFrontTypeEnum.VUE3_SCHEMA.getType(), vue3SchemaTemplatePath("views/form.vue"), + vue3FilePath("views/${table.moduleName}/${table.businessName}/${simpleClassName}Form.vue")) + .put(CodegenFrontTypeEnum.VUE3_SCHEMA.getType(), vue3SchemaTemplatePath("api/api.ts"), + vue3FilePath("api/${table.moduleName}/${table.businessName}/index.ts")) + // Vue3 vben 模版 + .put(CodegenFrontTypeEnum.VUE3_VBEN.getType(), vue3VbenTemplatePath("views/data.ts"), + vue3FilePath("views/${table.moduleName}/${table.businessName}/${classNameVar}.data.ts")) + .put(CodegenFrontTypeEnum.VUE3_VBEN.getType(), vue3VbenTemplatePath("views/index.vue"), + vue3FilePath("views/${table.moduleName}/${table.businessName}/index.vue")) + .put(CodegenFrontTypeEnum.VUE3_VBEN.getType(), vue3VbenTemplatePath("views/form.vue"), + vue3FilePath("views/${table.moduleName}/${table.businessName}/${simpleClassName}Modal.vue")) + .put(CodegenFrontTypeEnum.VUE3_VBEN.getType(), vue3VbenTemplatePath("api/api.ts"), + vue3FilePath("api/${table.moduleName}/${table.businessName}/index.ts")) + .build(); + + @Resource + private CodegenProperties codegenProperties; + + /** + * 是否使用 jakarta 包,用于解决 Spring Boot 2.X 和 3.X 的兼容性问题 + * + * true - 使用 jakarta.validation.constraints.* + * false - 使用 javax.validation.constraints.* + */ + @Setter // 允许设置的原因,是因为单测需要手动改变 + private Boolean jakartaEnable; + + /** + * 模板引擎,由 hutool 实现 + */ + private final TemplateEngine templateEngine; + /** + * 全局通用变量映射 + */ + private final Map globalBindingMap = new HashMap<>(); + + public CodegenEngine() { + // 初始化 TemplateEngine 属性 + TemplateConfig config = new TemplateConfig(); + config.setResourceMode(TemplateConfig.ResourceMode.CLASSPATH); + this.templateEngine = new VelocityEngine(config); + // 设置 javaxEnable,按照是否使用 JDK17 来判断 + this.jakartaEnable = SystemUtil.getJavaInfo().isJavaVersionAtLeast(1700); // 17.00 * 100 + } + + @PostConstruct + @VisibleForTesting + void initGlobalBindingMap() { + // 全局配置 + globalBindingMap.put("basePackage", codegenProperties.getBasePackage()); + globalBindingMap.put("baseFrameworkPackage", codegenProperties.getBasePackage() + + '.' + "framework"); // 用于后续获取测试类的 package 地址 + globalBindingMap.put("jakartaPackage", jakartaEnable ? "jakarta" : "javax"); + // 全局 Java Bean + globalBindingMap.put("CommonResultClassName", CommonResult.class.getName()); + globalBindingMap.put("PageResultClassName", PageResult.class.getName()); + // VO 类,独有字段 + globalBindingMap.put("PageParamClassName", PageParam.class.getName()); + globalBindingMap.put("DictFormatClassName", DictFormat.class.getName()); + // DO 类,独有字段 + globalBindingMap.put("BaseDOClassName", BaseDO.class.getName()); + globalBindingMap.put("baseDOFields", CodegenBuilder.BASE_DO_FIELDS); + globalBindingMap.put("QueryWrapperClassName", LambdaQueryWrapperX.class.getName()); + globalBindingMap.put("BaseMapperClassName", BaseMapperX.class.getName()); + // Util 工具类 + globalBindingMap.put("ServiceExceptionUtilClassName", ServiceExceptionUtil.class.getName()); + globalBindingMap.put("DateUtilsClassName", DateUtils.class.getName()); + globalBindingMap.put("ExcelUtilsClassName", ExcelUtils.class.getName()); + globalBindingMap.put("LocalDateTimeUtilsClassName", LocalDateTimeUtils.class.getName()); + globalBindingMap.put("ObjectUtilsClassName", ObjectUtils.class.getName()); + globalBindingMap.put("DictConvertClassName", DictConvert.class.getName()); + globalBindingMap.put("ApiAccessLogClassName", ApiAccessLog.class.getName()); + globalBindingMap.put("OperateTypeEnumClassName", OperateTypeEnum.class.getName()); + globalBindingMap.put("BeanUtils", BeanUtils.class.getName()); + } + + /** + * 生成代码 + * + * @param table 表定义 + * @param columns table 的字段定义数组 + * @param subTables 子表数组,当且仅当主子表时使用 + * @param subColumnsList subTables 的字段定义数组 + * @return 生成的代码,key 是路径,value 是对应代码 + */ + public Map execute(CodegenTableDO table, List columns, + List subTables, List> subColumnsList) { + // 1.1 初始化 bindMap 上下文 + Map bindingMap = initBindingMap(table, columns, subTables, subColumnsList); + // 1.2 获得模版 + Map templates = getTemplates(table.getFrontType()); + + // 2. 执行生成 + Map result = Maps.newLinkedHashMapWithExpectedSize(templates.size()); // 有序 + templates.forEach((vmPath, filePath) -> { + // 2.1 特殊:主子表专属逻辑 + if (isSubTemplate(vmPath)) { + generateSubCode(table, subTables, result, vmPath, filePath, bindingMap); + return; + // 2.2 特殊:树表专属逻辑 + } else if (isPageReqVOTemplate(vmPath)) { + // 减少多余的类生成,例如说 PageVO.java 类 + if (CodegenTemplateTypeEnum.isTree(table.getTemplateType())) { + return; + } + } else if (isListReqVOTemplate(vmPath)) { + // 减少多余的类生成,例如说 ListVO.java 类 + if (!CodegenTemplateTypeEnum.isTree(table.getTemplateType())) { + return; + } + } + // 2.3 默认生成 + generateCode(result, vmPath, filePath, bindingMap); + }); + return result; + } + + private void generateCode(Map result, String vmPath, + String filePath, Map bindingMap) { + filePath = formatFilePath(filePath, bindingMap); + String content = templateEngine.getTemplate(vmPath).render(bindingMap); + // 格式化代码 + content = prettyCode(content); + result.put(filePath, content); + } + + private void generateSubCode(CodegenTableDO table, List subTables, + Map result, String vmPath, + String filePath, Map bindingMap) { + // 没有子表,所以不生成 + if (CollUtil.isEmpty(subTables)) { + return; + } + // 主子表的模式匹配。目的:过滤掉个性化的模版 + if (vmPath.contains("_normal") + && ObjectUtil.notEqual(table.getTemplateType(), CodegenTemplateTypeEnum.MASTER_NORMAL.getType())) { + return; + } + if (vmPath.contains("_erp") + && ObjectUtil.notEqual(table.getTemplateType(), CodegenTemplateTypeEnum.MASTER_ERP.getType())) { + return; + } + if (vmPath.contains("_inner") + && ObjectUtil.notEqual(table.getTemplateType(), CodegenTemplateTypeEnum.MASTER_INNER.getType())) { + return; + } + + // 逐个生成 + for (int i = 0; i < subTables.size(); i++) { + bindingMap.put("subIndex", i); + generateCode(result, vmPath, filePath, bindingMap); + } + bindingMap.remove("subIndex"); + } + + /** + * 格式化生成后的代码 + * + * 因为尽量让 vm 模版简单,所以统一的处理都在这个方法。 + * 如果不处理,Vue 的 Pretty 格式校验可能会报错 + * + * @param content 格式化前的代码 + * @return 格式化后的代码 + */ + private String prettyCode(String content) { + // Vue 界面:去除字段后面多余的 , 逗号,解决前端的 Pretty 代码格式检查的报错 + content = content.replaceAll(",\n}", "\n}").replaceAll(",\n }", "\n }"); + // Vue 界面:去除多的 dateFormatter,只有一个的情况下,说明没使用到 + if (StrUtil.count(content, "dateFormatter") == 1) { + content = StrUtils.removeLineContains(content, "dateFormatter"); + } + // Vue2 界面:修正 $refs + if (StrUtil.count(content, "this.refs") >= 1) { + content = content.replace("this.refs", "this.$refs"); + } + // Vue 界面:去除多的 dict 相关,只有一个的情况下,说明没使用到 + if (StrUtil.count(content, "getIntDictOptions") == 1) { + content = content.replace("getIntDictOptions, ", ""); + } + if (StrUtil.count(content, "getStrDictOptions") == 1) { + content = content.replace("getStrDictOptions, ", ""); + } + if (StrUtil.count(content, "getBoolDictOptions") == 1) { + content = content.replace("getBoolDictOptions, ", ""); + } + if (StrUtil.count(content, "DICT_TYPE.") == 0) { + content = StrUtils.removeLineContains(content, "DICT_TYPE"); + } + return content; + } + + private Map initBindingMap(CodegenTableDO table, List columns, + List subTables, List> subColumnsList) { + // 创建 bindingMap + Map bindingMap = new HashMap<>(globalBindingMap); + bindingMap.put("table", table); + bindingMap.put("columns", columns); + bindingMap.put("primaryColumn", CollectionUtils.findFirst(columns, CodegenColumnDO::getPrimaryKey)); // 主键字段 + bindingMap.put("sceneEnum", CodegenSceneEnum.valueOf(table.getScene())); + + // className 相关 + // 去掉指定前缀,将 TestDictType 转换成 DictType. 因为在 create 等方法后,不需要带上 Test 前缀 + String simpleClassName = removePrefix(table.getClassName(), upperFirst(table.getModuleName())); + bindingMap.put("simpleClassName", simpleClassName); + bindingMap.put("simpleClassName_underlineCase", toUnderlineCase(simpleClassName)); // 将 DictType 转换成 dict_type + bindingMap.put("classNameVar", lowerFirst(simpleClassName)); // 将 DictType 转换成 dictType,用于变量 + // 将 DictType 转换成 dict-type + String simpleClassNameStrikeCase = toSymbolCase(simpleClassName, '-'); + bindingMap.put("simpleClassName_strikeCase", simpleClassNameStrikeCase); + // permission 前缀 + bindingMap.put("permissionPrefix", table.getModuleName() + ":" + simpleClassNameStrikeCase); + + // 特殊:树表专属逻辑 + if (CodegenTemplateTypeEnum.isTree(table.getTemplateType())) { + CodegenColumnDO treeParentColumn = CollUtil.findOne(columns, + column -> Objects.equals(column.getId(), table.getTreeParentColumnId())); + bindingMap.put("treeParentColumn", treeParentColumn); + bindingMap.put("treeParentColumn_javaField_underlineCase", toUnderlineCase(treeParentColumn.getJavaField())); + CodegenColumnDO treeNameColumn = CollUtil.findOne(columns, + column -> Objects.equals(column.getId(), table.getTreeNameColumnId())); + bindingMap.put("treeNameColumn", treeNameColumn); + bindingMap.put("treeNameColumn_javaField_underlineCase", toUnderlineCase(treeNameColumn.getJavaField())); + } + + // 特殊:主子表专属逻辑 + if (CollUtil.isNotEmpty(subTables)) { + // 创建 bindingMap + bindingMap.put("subTables", subTables); + bindingMap.put("subColumnsList", subColumnsList); + List subPrimaryColumns = new ArrayList<>(); + List subJoinColumns = new ArrayList<>(); + List subJoinColumnStrikeCases = new ArrayList<>(); + List subSimpleClassNames = new ArrayList<>(); + List subClassNameVars = new ArrayList<>(); + List simpleClassNameUnderlineCases = new ArrayList<>(); + List subSimpleClassNameStrikeCases = new ArrayList<>(); + for (int i = 0; i < subTables.size(); i++) { + CodegenTableDO subTable = subTables.get(i); + List subColumns = subColumnsList.get(i); + subPrimaryColumns.add(CollectionUtils.findFirst(subColumns, CodegenColumnDO::getPrimaryKey)); // + CodegenColumnDO subColumn = CollectionUtils.findFirst(subColumns, // 关联的字段 + column -> Objects.equals(column.getId(), subTable.getSubJoinColumnId())); + subJoinColumns.add(subColumn); + subJoinColumnStrikeCases.add(toSymbolCase(subColumn.getJavaField(), '-')); // 将 DictType 转换成 dict-type + // className 相关 + String subSimpleClassName = removePrefix(subTable.getClassName(), upperFirst(subTable.getModuleName())); + subSimpleClassNames.add(subSimpleClassName); + simpleClassNameUnderlineCases.add(toUnderlineCase(subSimpleClassName)); // 将 DictType 转换成 dict_type + subClassNameVars.add(lowerFirst(subSimpleClassName)); // 将 DictType 转换成 dictType,用于变量 + subSimpleClassNameStrikeCases.add(toSymbolCase(subSimpleClassName, '-')); // 将 DictType 转换成 dict-type + } + bindingMap.put("subPrimaryColumns", subPrimaryColumns); + bindingMap.put("subJoinColumns", subJoinColumns); + bindingMap.put("subJoinColumn_strikeCases", subJoinColumnStrikeCases); + bindingMap.put("subSimpleClassNames", subSimpleClassNames); + bindingMap.put("simpleClassNameUnderlineCases", simpleClassNameUnderlineCases); + bindingMap.put("subClassNameVars", subClassNameVars); + bindingMap.put("subSimpleClassName_strikeCases", subSimpleClassNameStrikeCases); + } + return bindingMap; + } + + private Map getTemplates(Integer frontType) { + Map templates = new LinkedHashMap<>(); + templates.putAll(SERVER_TEMPLATES); + templates.putAll(FRONT_TEMPLATES.row(frontType)); + return templates; + } + + @SuppressWarnings("unchecked") + private String formatFilePath(String filePath, Map bindingMap) { + filePath = StrUtil.replace(filePath, "${basePackage}", + getStr(bindingMap, "basePackage").replaceAll("\\.", "/")); + filePath = StrUtil.replace(filePath, "${classNameVar}", + getStr(bindingMap, "classNameVar")); + filePath = StrUtil.replace(filePath, "${simpleClassName}", + getStr(bindingMap, "simpleClassName")); + // sceneEnum 包含的字段 + CodegenSceneEnum sceneEnum = (CodegenSceneEnum) bindingMap.get("sceneEnum"); + filePath = StrUtil.replace(filePath, "${sceneEnum.prefixClass}", sceneEnum.getPrefixClass()); + filePath = StrUtil.replace(filePath, "${sceneEnum.basePackage}", sceneEnum.getBasePackage()); + // table 包含的字段 + CodegenTableDO table = (CodegenTableDO) bindingMap.get("table"); + filePath = StrUtil.replace(filePath, "${table.moduleName}", table.getModuleName()); + filePath = StrUtil.replace(filePath, "${table.businessName}", table.getBusinessName()); + filePath = StrUtil.replace(filePath, "${table.className}", table.getClassName()); + // 特殊:主子表专属逻辑 + Integer subIndex = (Integer) bindingMap.get("subIndex"); + if (subIndex != null) { + CodegenTableDO subTable = ((List) bindingMap.get("subTables")).get(subIndex); + filePath = StrUtil.replace(filePath, "${subTable.moduleName}", subTable.getModuleName()); + filePath = StrUtil.replace(filePath, "${subTable.businessName}", subTable.getBusinessName()); + filePath = StrUtil.replace(filePath, "${subTable.className}", subTable.getClassName()); + filePath = StrUtil.replace(filePath, "${subSimpleClassName}", + ((List) bindingMap.get("subSimpleClassNames")).get(subIndex)); + } + return filePath; + } + + private static String javaTemplatePath(String path) { + return "codegen/java/" + path + ".vm"; + } + + private static String javaModuleImplVOFilePath(String path) { + return javaModuleFilePath("controller/${sceneEnum.basePackage}/${table.businessName}/" + + "vo/${sceneEnum.prefixClass}${table.className}" + path, "biz", "main"); + } + + private static String javaModuleImplControllerFilePath() { + return javaModuleFilePath("controller/${sceneEnum.basePackage}/${table.businessName}/" + + "${sceneEnum.prefixClass}${table.className}Controller", "biz", "main"); + } + + private static String javaModuleImplMainFilePath(String path) { + return javaModuleFilePath(path, "biz", "main"); + } + + private static String javaModuleApiMainFilePath(String path) { + return javaModuleFilePath(path, "api", "main"); + } + + private static String javaModuleImplTestFilePath(String path) { + return javaModuleFilePath(path, "biz", "test"); + } + + private static String javaModuleFilePath(String path, String module, String src) { + return "win-module-${table.moduleName}/" + // 顶级模块 + "win-module-${table.moduleName}-" + module + "/" + // 子模块 + "src/" + src + "/java/${basePackage}/module/${table.moduleName}/" + path + ".java"; + } + + private static String mapperXmlFilePath() { + return "win-module-${table.moduleName}/" + // 顶级模块 + "win-module-${table.moduleName}-biz/" + // 子模块 + "src/main/resources/mapper/${table.businessName}/${table.className}Mapper.xml"; + } + + private static String vueTemplatePath(String path) { + return "codegen/vue/" + path + ".vm"; + } + + private static String vueFilePath(String path) { + return "win-ui-${sceneEnum.basePackage}-vue2/" + // 顶级目录 + "src/" + path; + } + + private static String vue3TemplatePath(String path) { + return "codegen/vue3/" + path + ".vm"; + } + + private static String vue3FilePath(String path) { + return "win-ui-${sceneEnum.basePackage}-vue3/" + // 顶级目录 + "src/" + path; + } + + private static String vue3SchemaTemplatePath(String path) { + return "codegen/vue3_schema/" + path + ".vm"; + } + + private static String vue3VbenTemplatePath(String path) { + return "codegen/vue3_vben/" + path + ".vm"; + } + + private static boolean isSubTemplate(String path) { + return path.contains("_sub"); + } + + private static boolean isPageReqVOTemplate(String path) { + return path.contains("pageReqVO"); + } + + private static boolean isListReqVOTemplate(String path) { + return path.contains("listReqVO"); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/config/ConfigService.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/config/ConfigService.java new file mode 100644 index 0000000..090a882 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/config/ConfigService.java @@ -0,0 +1,63 @@ +package com.win.module.infra.service.config; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.infra.controller.admin.config.vo.ConfigPageReqVO; +import com.win.module.infra.controller.admin.config.vo.ConfigSaveReqVO; +import com.win.module.infra.dal.dataobject.config.ConfigDO; + +import jakarta.validation.Valid; + +/** + * 参数配置 Service 接口 + * + * @author 芋道源码 + */ +public interface ConfigService { + + /** + * 创建参数配置 + * + * @param createReqVO 创建信息 + * @return 配置编号 + */ + Long createConfig(@Valid ConfigSaveReqVO createReqVO); + + /** + * 更新参数配置 + * + * @param updateReqVO 更新信息 + */ + void updateConfig(@Valid ConfigSaveReqVO updateReqVO); + + /** + * 删除参数配置 + * + * @param id 配置编号 + */ + void deleteConfig(Long id); + + /** + * 获得参数配置 + * + * @param id 配置编号 + * @return 参数配置 + */ + ConfigDO getConfig(Long id); + + /** + * 根据参数键,获得参数配置 + * + * @param key 配置键 + * @return 参数配置 + */ + ConfigDO getConfigByKey(String key); + + /** + * 获得参数配置分页列表 + * + * @param reqVO 分页条件 + * @return 分页列表 + */ + PageResult getConfigPage(@Valid ConfigPageReqVO reqVO); + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/config/ConfigServiceImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/config/ConfigServiceImpl.java new file mode 100644 index 0000000..5f29c3c --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/config/ConfigServiceImpl.java @@ -0,0 +1,109 @@ +package com.win.module.infra.service.config; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.infra.controller.admin.config.vo.ConfigPageReqVO; +import com.win.module.infra.controller.admin.config.vo.ConfigSaveReqVO; +import com.win.module.infra.convert.config.ConfigConvert; +import com.win.module.infra.dal.dataobject.config.ConfigDO; +import com.win.module.infra.dal.mysql.config.ConfigMapper; +import com.win.module.infra.enums.config.ConfigTypeEnum; +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.infra.enums.ErrorCodeConstants.*; + +/** + * 参数配置 Service 实现类 + */ +@Service +@Slf4j +@Validated +public class ConfigServiceImpl implements ConfigService { + + @Resource + private ConfigMapper configMapper; + + @Override + public Long createConfig(ConfigSaveReqVO createReqVO) { + // 校验参数配置 key 的唯一性 + validateConfigKeyUnique(null, createReqVO.getKey()); + + // 插入参数配置 + ConfigDO config = ConfigConvert.INSTANCE.convert(createReqVO); + config.setType(ConfigTypeEnum.CUSTOM.getType()); + configMapper.insert(config); + return config.getId(); + } + + @Override + public void updateConfig(ConfigSaveReqVO updateReqVO) { + // 校验自己存在 + validateConfigExists(updateReqVO.getId()); + // 校验参数配置 key 的唯一性 + validateConfigKeyUnique(updateReqVO.getId(), updateReqVO.getKey()); + + // 更新参数配置 + ConfigDO updateObj = ConfigConvert.INSTANCE.convert(updateReqVO); + configMapper.updateById(updateObj); + } + + @Override + public void deleteConfig(Long id) { + // 校验配置存在 + ConfigDO config = validateConfigExists(id); + // 内置配置,不允许删除 + if (ConfigTypeEnum.SYSTEM.getType().equals(config.getType())) { + throw exception(CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE); + } + // 删除 + configMapper.deleteById(id); + } + + @Override + public ConfigDO getConfig(Long id) { + return configMapper.selectById(id); + } + + @Override + public ConfigDO getConfigByKey(String key) { + return configMapper.selectByKey(key); + } + + @Override + public PageResult getConfigPage(ConfigPageReqVO pageReqVO) { + return configMapper.selectPage(pageReqVO); + } + + @VisibleForTesting + public ConfigDO validateConfigExists(Long id) { + if (id == null) { + return null; + } + ConfigDO config = configMapper.selectById(id); + if (config == null) { + throw exception(CONFIG_NOT_EXISTS); + } + return config; + } + + @VisibleForTesting + public void validateConfigKeyUnique(Long id, String key) { + ConfigDO config = configMapper.selectByKey(key); + if (config == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的参数配置 + if (id == null) { + throw exception(CONFIG_KEY_DUPLICATE); + } + if (!config.getId().equals(id)) { + throw exception(CONFIG_KEY_DUPLICATE); + } + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DataSourceConfigService.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DataSourceConfigService.java new file mode 100644 index 0000000..9e8bcb9 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DataSourceConfigService.java @@ -0,0 +1,53 @@ +package com.win.module.infra.service.db; + +import com.win.module.infra.controller.admin.db.vo.DataSourceConfigSaveReqVO; +import com.win.module.infra.dal.dataobject.db.DataSourceConfigDO; + +import jakarta.validation.Valid; +import java.util.List; + +/** + * 数据源配置 Service 接口 + * + * @author 芋道源码 + */ +public interface DataSourceConfigService { + + /** + * 创建数据源配置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createDataSourceConfig(@Valid DataSourceConfigSaveReqVO createReqVO); + + /** + * 更新数据源配置 + * + * @param updateReqVO 更新信息 + */ + void updateDataSourceConfig(@Valid DataSourceConfigSaveReqVO updateReqVO); + + /** + * 删除数据源配置 + * + * @param id 编号 + */ + void deleteDataSourceConfig(Long id); + + /** + * 获得数据源配置 + * + * @param id 编号 + * @return 数据源配置 + */ + DataSourceConfigDO getDataSourceConfig(Long id); + + /** + * 获得数据源配置列表 + * + * @return 数据源配置列表 + */ + List getDataSourceConfigList(); + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DataSourceConfigServiceImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DataSourceConfigServiceImpl.java new file mode 100644 index 0000000..15bf894 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DataSourceConfigServiceImpl.java @@ -0,0 +1,106 @@ +package com.win.module.infra.service.db; + +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.mybatis.core.util.JdbcUtils; +import com.win.module.infra.controller.admin.db.vo.DataSourceConfigSaveReqVO; +import com.win.module.infra.dal.dataobject.db.DataSourceConfigDO; +import com.win.module.infra.dal.mysql.db.DataSourceConfigMapper; +import com.baomidou.dynamic.datasource.creator.DataSourceProperty; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.util.List; +import java.util.Objects; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.infra.enums.ErrorCodeConstants.DATA_SOURCE_CONFIG_NOT_EXISTS; +import static com.win.module.infra.enums.ErrorCodeConstants.DATA_SOURCE_CONFIG_NOT_OK; + +/** + * 数据源配置 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class DataSourceConfigServiceImpl implements DataSourceConfigService { + + @Resource + private DataSourceConfigMapper dataSourceConfigMapper; + + @Resource + private DynamicDataSourceProperties dynamicDataSourceProperties; + + @Override + public Long createDataSourceConfig(DataSourceConfigSaveReqVO createReqVO) { + DataSourceConfigDO config = BeanUtils.toBean(createReqVO, DataSourceConfigDO.class); + validateConnectionOK(config); + + // 插入 + dataSourceConfigMapper.insert(config); + // 返回 + return config.getId(); + } + + @Override + public void updateDataSourceConfig(DataSourceConfigSaveReqVO updateReqVO) { + // 校验存在 + validateDataSourceConfigExists(updateReqVO.getId()); + DataSourceConfigDO updateObj = BeanUtils.toBean(updateReqVO, DataSourceConfigDO.class); + validateConnectionOK(updateObj); + + // 更新 + dataSourceConfigMapper.updateById(updateObj); + } + + @Override + public void deleteDataSourceConfig(Long id) { + // 校验存在 + validateDataSourceConfigExists(id); + // 删除 + dataSourceConfigMapper.deleteById(id); + } + + private void validateDataSourceConfigExists(Long id) { + if (dataSourceConfigMapper.selectById(id) == null) { + throw exception(DATA_SOURCE_CONFIG_NOT_EXISTS); + } + } + + @Override + public DataSourceConfigDO getDataSourceConfig(Long id) { + // 如果 id 为 0,默认为 master 的数据源 + if (Objects.equals(id, DataSourceConfigDO.ID_MASTER)) { + return buildMasterDataSourceConfig(); + } + // 从 DB 中读取 + return dataSourceConfigMapper.selectById(id); + } + + @Override + public List getDataSourceConfigList() { + List result = dataSourceConfigMapper.selectList(); + // 补充 master 数据源 + result.add(0, buildMasterDataSourceConfig()); + return result; + } + + private void validateConnectionOK(DataSourceConfigDO config) { + boolean success = JdbcUtils.isConnectionOK(config.getUrl(), config.getUsername(), config.getPassword()); + if (!success) { + throw exception(DATA_SOURCE_CONFIG_NOT_OK); + } + } + + private DataSourceConfigDO buildMasterDataSourceConfig() { + String primary = dynamicDataSourceProperties.getPrimary(); + DataSourceProperty dataSourceProperty = dynamicDataSourceProperties.getDatasource().get(primary); + return new DataSourceConfigDO().setId(DataSourceConfigDO.ID_MASTER).setName(primary) + .setUrl(dataSourceProperty.getUrl()) + .setUsername(dataSourceProperty.getUsername()) + .setPassword(dataSourceProperty.getPassword()); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DatabaseTableService.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DatabaseTableService.java new file mode 100644 index 0000000..342dc8c --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DatabaseTableService.java @@ -0,0 +1,33 @@ +package com.win.module.infra.service.db; + +import com.baomidou.mybatisplus.generator.config.po.TableInfo; + +import java.util.List; + +/** + * 数据库表 Service + * + * @author 芋道源码 + */ +public interface DatabaseTableService { + + /** + * 获得表列表,基于表名称 + 表描述进行模糊匹配 + * + * @param dataSourceConfigId 数据源配置的编号 + * @param nameLike 表名称,模糊匹配 + * @param commentLike 表描述,模糊匹配 + * @return 表列表 + */ + List getTableList(Long dataSourceConfigId, String nameLike, String commentLike); + + /** + * 获得指定表名 + * + * @param dataSourceConfigId 数据源配置的编号 + * @param tableName 表名称 + * @return 表 + */ + TableInfo getTable(Long dataSourceConfigId, String tableName); + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DatabaseTableServiceImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DatabaseTableServiceImpl.java new file mode 100644 index 0000000..042989a --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/db/DatabaseTableServiceImpl.java @@ -0,0 +1,80 @@ +package com.win.module.infra.service.db; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.win.framework.mybatis.core.util.JdbcUtils; +import com.win.module.infra.dal.dataobject.db.DataSourceConfigDO; +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.GlobalConfig; +import com.baomidou.mybatisplus.generator.config.StrategyConfig; +import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder; +import com.baomidou.mybatisplus.generator.config.po.TableInfo; +import com.baomidou.mybatisplus.generator.config.rules.DateType; +import com.baomidou.mybatisplus.generator.query.SQLQuery; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 数据库表 Service 实现类 + * + * @author 芋道源码 + */ +@Service +public class DatabaseTableServiceImpl implements DatabaseTableService { + + @Resource + private DataSourceConfigService dataSourceConfigService; + + @Override + public List getTableList(Long dataSourceConfigId, String nameLike, String commentLike) { + List tables = getTableList0(dataSourceConfigId, null); + return tables.stream().filter(tableInfo -> (StrUtil.isEmpty(nameLike) || tableInfo.getName().contains(nameLike)) + && (StrUtil.isEmpty(commentLike) || tableInfo.getComment().contains(commentLike))) + .collect(Collectors.toList()); + } + + @Override + public TableInfo getTable(Long dataSourceConfigId, String name) { + return CollUtil.getFirst(getTableList0(dataSourceConfigId, name)); + } + + private List getTableList0(Long dataSourceConfigId, String name) { + // 获得数据源配置 + DataSourceConfigDO config = dataSourceConfigService.getDataSourceConfig(dataSourceConfigId); + Assert.notNull(config, "数据源({}) 不存在!", dataSourceConfigId); + DbType dbType = JdbcUtils.getDbType(config.getUrl()); + + // 使用 MyBatis Plus Generator 解析表结构 + DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(config.getUrl(), config.getUsername(), + config.getPassword()); + if (Objects.equals(dbType, DbType.SQL_SERVER)) { // 特殊:SQLServer jdbc 非标准,参见 https://github.com/baomidou/mybatis-plus/issues/5419 + dataSourceConfigBuilder.databaseQueryClass(SQLQuery.class); + } + StrategyConfig.Builder strategyConfig = new StrategyConfig.Builder().enableSkipView(); // 忽略视图,业务上一般用不到 + if (StrUtil.isNotEmpty(name)) { + strategyConfig.addInclude(name); + } else { + // 移除工作流和定时任务前缀的表名 + strategyConfig.addExclude("ACT_[\\S\\s]+|QRTZ_[\\S\\s]+|FLW_[\\S\\s]+"); + // 移除 ORACLE 相关的系统表 + strategyConfig.addExclude("IMPDP_[\\S\\s]+|ALL_[\\S\\s]+|HS_[\\S\\\\s]+"); + strategyConfig.addExclude("[\\S\\s]+\\$[\\S\\s]+|[\\S\\s]+\\$"); // 表里不能有 $,一般有都是系统的表 + } + + GlobalConfig globalConfig = new GlobalConfig.Builder().dateType(DateType.TIME_PACK).build(); // 只使用 LocalDateTime 类型,不使用 LocalDate + ConfigBuilder builder = new ConfigBuilder(null, dataSourceConfigBuilder.build(), strategyConfig.build(), + null, globalConfig, null); + // 按照名字排序 + List tables = builder.getTableInfoList(); + tables.sort(Comparator.comparing(TableInfo::getName)); + return tables; + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo01/Demo01ContactService.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo01/Demo01ContactService.java new file mode 100644 index 0000000..61b0583 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo01/Demo01ContactService.java @@ -0,0 +1,55 @@ +package com.win.module.infra.service.demo.demo01; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.infra.controller.admin.demo.demo01.vo.Demo01ContactPageReqVO; +import com.win.module.infra.controller.admin.demo.demo01.vo.Demo01ContactSaveReqVO; +import com.win.module.infra.dal.dataobject.demo.demo01.Demo01ContactDO; + +import jakarta.validation.Valid; + +/** + * 示例联系人 Service 接口 + * + * @author 芋道源码 + */ +public interface Demo01ContactService { + + /** + * 创建示例联系人 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createDemo01Contact(@Valid Demo01ContactSaveReqVO createReqVO); + + /** + * 更新示例联系人 + * + * @param updateReqVO 更新信息 + */ + void updateDemo01Contact(@Valid Demo01ContactSaveReqVO updateReqVO); + + /** + * 删除示例联系人 + * + * @param id 编号 + */ + void deleteDemo01Contact(Long id); + + /** + * 获得示例联系人 + * + * @param id 编号 + * @return 示例联系人 + */ + Demo01ContactDO getDemo01Contact(Long id); + + /** + * 获得示例联系人分页 + * + * @param pageReqVO 分页查询 + * @return 示例联系人分页 + */ + PageResult getDemo01ContactPage(Demo01ContactPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo01/Demo01ContactServiceImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo01/Demo01ContactServiceImpl.java new file mode 100644 index 0000000..1efb954 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo01/Demo01ContactServiceImpl.java @@ -0,0 +1,71 @@ +package com.win.module.infra.service.demo.demo01; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.infra.controller.admin.demo.demo01.vo.Demo01ContactPageReqVO; +import com.win.module.infra.controller.admin.demo.demo01.vo.Demo01ContactSaveReqVO; +import com.win.module.infra.dal.dataobject.demo.demo01.Demo01ContactDO; +import com.win.module.infra.dal.mysql.demo.demo01.Demo01ContactMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.infra.enums.ErrorCodeConstants.DEMO01_CONTACT_NOT_EXISTS; + +/** + * 示例联系人 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class Demo01ContactServiceImpl implements Demo01ContactService { + + @Resource + private Demo01ContactMapper demo01ContactMapper; + + @Override + public Long createDemo01Contact(Demo01ContactSaveReqVO createReqVO) { + // 插入 + Demo01ContactDO demo01Contact = BeanUtils.toBean(createReqVO, Demo01ContactDO.class); + demo01ContactMapper.insert(demo01Contact); + // 返回 + return demo01Contact.getId(); + } + + @Override + public void updateDemo01Contact(Demo01ContactSaveReqVO updateReqVO) { + // 校验存在 + validateDemo01ContactExists(updateReqVO.getId()); + // 更新 + Demo01ContactDO updateObj = BeanUtils.toBean(updateReqVO, Demo01ContactDO.class); + demo01ContactMapper.updateById(updateObj); + } + + @Override + public void deleteDemo01Contact(Long id) { + // 校验存在 + validateDemo01ContactExists(id); + // 删除 + demo01ContactMapper.deleteById(id); + } + + private void validateDemo01ContactExists(Long id) { + if (demo01ContactMapper.selectById(id) == null) { + throw exception(DEMO01_CONTACT_NOT_EXISTS); + } + } + + @Override + public Demo01ContactDO getDemo01Contact(Long id) { + return demo01ContactMapper.selectById(id); + } + + @Override + public PageResult getDemo01ContactPage(Demo01ContactPageReqVO pageReqVO) { + return demo01ContactMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo02/Demo02CategoryService.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo02/Demo02CategoryService.java new file mode 100644 index 0000000..dd0ca06 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo02/Demo02CategoryService.java @@ -0,0 +1,55 @@ +package com.win.module.infra.service.demo.demo02; + +import com.win.module.infra.controller.admin.demo.demo02.vo.Demo02CategoryListReqVO; +import com.win.module.infra.controller.admin.demo.demo02.vo.Demo02CategorySaveReqVO; +import com.win.module.infra.dal.dataobject.demo.demo02.Demo02CategoryDO; + +import jakarta.validation.Valid; +import java.util.List; + +/** + * 示例分类 Service 接口 + * + * @author 芋道源码 + */ +public interface Demo02CategoryService { + + /** + * 创建示例分类 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createDemo02Category(@Valid Demo02CategorySaveReqVO createReqVO); + + /** + * 更新示例分类 + * + * @param updateReqVO 更新信息 + */ + void updateDemo02Category(@Valid Demo02CategorySaveReqVO updateReqVO); + + /** + * 删除示例分类 + * + * @param id 编号 + */ + void deleteDemo02Category(Long id); + + /** + * 获得示例分类 + * + * @param id 编号 + * @return 示例分类 + */ + Demo02CategoryDO getDemo02Category(Long id); + + /** + * 获得示例分类列表 + * + * @param listReqVO 查询条件 + * @return 示例分类列表 + */ + List getDemo02CategoryList(Demo02CategoryListReqVO listReqVO); + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo02/Demo02CategoryServiceImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo02/Demo02CategoryServiceImpl.java new file mode 100644 index 0000000..58aef94 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo02/Demo02CategoryServiceImpl.java @@ -0,0 +1,134 @@ +package com.win.module.infra.service.demo.demo02; + +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.infra.controller.admin.demo.demo02.vo.Demo02CategoryListReqVO; +import com.win.module.infra.controller.admin.demo.demo02.vo.Demo02CategorySaveReqVO; +import com.win.module.infra.dal.dataobject.demo.demo02.Demo02CategoryDO; +import com.win.module.infra.dal.mysql.demo.demo02.Demo02CategoryMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.util.List; +import java.util.Objects; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.infra.enums.ErrorCodeConstants.*; + +/** + * 示例分类 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class Demo02CategoryServiceImpl implements Demo02CategoryService { + + @Resource + private Demo02CategoryMapper demo02CategoryMapper; + + @Override + public Long createDemo02Category(Demo02CategorySaveReqVO createReqVO) { + // 校验父级编号的有效性 + validateParentDemo02Category(null, createReqVO.getParentId()); + // 校验名字的唯一性 + validateDemo02CategoryNameUnique(null, createReqVO.getParentId(), createReqVO.getName()); + + // 插入 + Demo02CategoryDO demo02Category = BeanUtils.toBean(createReqVO, Demo02CategoryDO.class); + demo02CategoryMapper.insert(demo02Category); + // 返回 + return demo02Category.getId(); + } + + @Override + public void updateDemo02Category(Demo02CategorySaveReqVO updateReqVO) { + // 校验存在 + validateDemo02CategoryExists(updateReqVO.getId()); + // 校验父级编号的有效性 + validateParentDemo02Category(updateReqVO.getId(), updateReqVO.getParentId()); + // 校验名字的唯一性 + validateDemo02CategoryNameUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getName()); + + // 更新 + Demo02CategoryDO updateObj = BeanUtils.toBean(updateReqVO, Demo02CategoryDO.class); + demo02CategoryMapper.updateById(updateObj); + } + + @Override + public void deleteDemo02Category(Long id) { + // 校验存在 + validateDemo02CategoryExists(id); + // 校验是否有子示例分类 + if (demo02CategoryMapper.selectCountByParentId(id) > 0) { + throw exception(DEMO02_CATEGORY_EXITS_CHILDREN); + } + // 删除 + demo02CategoryMapper.deleteById(id); + } + + private void validateDemo02CategoryExists(Long id) { + if (demo02CategoryMapper.selectById(id) == null) { + throw exception(DEMO02_CATEGORY_NOT_EXISTS); + } + } + + private void validateParentDemo02Category(Long id, Long parentId) { + if (parentId == null || Demo02CategoryDO.PARENT_ID_ROOT.equals(parentId)) { + return; + } + // 1. 不能设置自己为父示例分类 + if (Objects.equals(id, parentId)) { + throw exception(DEMO02_CATEGORY_PARENT_ERROR); + } + // 2. 父示例分类不存在 + Demo02CategoryDO parentDemo02Category = demo02CategoryMapper.selectById(parentId); + if (parentDemo02Category == null) { + throw exception(DEMO02_CATEGORY_PARENT_NOT_EXITS); + } + // 3. 递归校验父示例分类,如果父示例分类是自己的子示例分类,则报错,避免形成环路 + if (id == null) { // id 为空,说明新增,不需要考虑环路 + return; + } + for (int i = 0; i < Short.MAX_VALUE; i++) { + // 3.1 校验环路 + parentId = parentDemo02Category.getParentId(); + if (Objects.equals(id, parentId)) { + throw exception(DEMO02_CATEGORY_PARENT_IS_CHILD); + } + // 3.2 继续递归下一级父示例分类 + if (parentId == null || Demo02CategoryDO.PARENT_ID_ROOT.equals(parentId)) { + break; + } + parentDemo02Category = demo02CategoryMapper.selectById(parentId); + if (parentDemo02Category == null) { + break; + } + } + } + + private void validateDemo02CategoryNameUnique(Long id, Long parentId, String name) { + Demo02CategoryDO demo02Category = demo02CategoryMapper.selectByParentIdAndName(parentId, name); + if (demo02Category == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的示例分类 + if (id == null) { + throw exception(DEMO02_CATEGORY_NAME_DUPLICATE); + } + if (!Objects.equals(demo02Category.getId(), id)) { + throw exception(DEMO02_CATEGORY_NAME_DUPLICATE); + } + } + + @Override + public Demo02CategoryDO getDemo02Category(Long id) { + return demo02CategoryMapper.selectById(id); + } + + @Override + public List getDemo02CategoryList(Demo02CategoryListReqVO listReqVO) { + return demo02CategoryMapper.selectList(listReqVO); + } + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo03/Demo03StudentService.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo03/Demo03StudentService.java new file mode 100644 index 0000000..11ef6c8 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo03/Demo03StudentService.java @@ -0,0 +1,158 @@ +package com.win.module.infra.service.demo.demo03; + +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.module.infra.controller.admin.demo.demo03.vo.Demo03StudentPageReqVO; +import com.win.module.infra.controller.admin.demo.demo03.vo.Demo03StudentSaveReqVO; +import com.win.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO; +import com.win.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO; +import com.win.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO; + +import jakarta.validation.Valid; +import java.util.List; + +/** + * 学生 Service 接口 + * + * @author 芋道源码 + */ +public interface Demo03StudentService { + + /** + * 创建学生 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createDemo03Student(@Valid Demo03StudentSaveReqVO createReqVO); + + /** + * 更新学生 + * + * @param updateReqVO 更新信息 + */ + void updateDemo03Student(@Valid Demo03StudentSaveReqVO updateReqVO); + + /** + * 删除学生 + * + * @param id 编号 + */ + void deleteDemo03Student(Long id); + + /** + * 获得学生 + * + * @param id 编号 + * @return 学生 + */ + Demo03StudentDO getDemo03Student(Long id); + + /** + * 获得学生分页 + * + * @param pageReqVO 分页查询 + * @return 学生分页 + */ + PageResult getDemo03StudentPage(Demo03StudentPageReqVO pageReqVO); + + + // ==================== 子表(学生课程) ==================== + + /** + * 获得学生课程列表 + * + * @param studentId 学生编号 + * @return 学生课程列表 + */ + List getDemo03CourseListByStudentId(Long studentId); + + /** + * 获得学生课程分页 + * + * @param pageReqVO 分页查询 + * @param studentId 学生编号 + * @return 学生课程分页 + */ + PageResult getDemo03CoursePage(PageParam pageReqVO, Long studentId); + + /** + * 创建学生课程 + * + * @param demo03Course 创建信息 + * @return 编号 + */ + Long createDemo03Course(@Valid Demo03CourseDO demo03Course); + + /** + * 更新学生课程 + * + * @param demo03Course 更新信息 + */ + void updateDemo03Course(@Valid Demo03CourseDO demo03Course); + + /** + * 删除学生课程 + * + * @param id 编号 + */ + void deleteDemo03Course(Long id); + + /** + * 获得学生课程 + * + * @param id 编号 + * @return 学生课程 + */ + Demo03CourseDO getDemo03Course(Long id); + + // ==================== 子表(学生班级) ==================== + + /** + * 获得学生班级 + * + * @param studentId 学生编号 + * @return 学生班级 + */ + Demo03GradeDO getDemo03GradeByStudentId(Long studentId); + + /** + * 获得学生班级分页 + * + * @param pageReqVO 分页查询 + * @param studentId 学生编号 + * @return 学生班级分页 + */ + PageResult getDemo03GradePage(PageParam pageReqVO, Long studentId); + + /** + * 创建学生班级 + * + * @param demo03Grade 创建信息 + * @return 编号 + */ + Long createDemo03Grade(@Valid Demo03GradeDO demo03Grade); + + /** + * 更新学生班级 + * + * @param demo03Grade 更新信息 + */ + void updateDemo03Grade(@Valid Demo03GradeDO demo03Grade); + + /** + * 删除学生班级 + * + * @param id 编号 + */ + void deleteDemo03Grade(Long id); + + /** + * 获得学生班级 + * + * @param id 编号 + * @return 学生班级 + */ + Demo03GradeDO getDemo03Grade(Long id); + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo03/Demo03StudentServiceImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo03/Demo03StudentServiceImpl.java new file mode 100644 index 0000000..213dfd4 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/demo/demo03/Demo03StudentServiceImpl.java @@ -0,0 +1,217 @@ +package com.win.module.infra.service.demo.demo03; + +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.infra.controller.admin.demo.demo03.vo.Demo03StudentPageReqVO; +import com.win.module.infra.controller.admin.demo.demo03.vo.Demo03StudentSaveReqVO; +import com.win.module.infra.dal.dataobject.demo.demo03.Demo03CourseDO; +import com.win.module.infra.dal.dataobject.demo.demo03.Demo03GradeDO; +import com.win.module.infra.dal.dataobject.demo.demo03.Demo03StudentDO; +import com.win.module.infra.dal.mysql.demo.demo03.Demo03CourseMapper; +import com.win.module.infra.dal.mysql.demo.demo03.Demo03GradeMapper; +import com.win.module.infra.dal.mysql.demo.demo03.Demo03StudentMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.util.List; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.infra.enums.ErrorCodeConstants.*; + +/** + * 学生 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class Demo03StudentServiceImpl implements Demo03StudentService { + + @Resource + private Demo03StudentMapper demo03StudentMapper; + @Resource + private Demo03CourseMapper demo03CourseMapper; + @Resource + private Demo03GradeMapper demo03GradeMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public Long createDemo03Student(Demo03StudentSaveReqVO createReqVO) { + // 插入 + Demo03StudentDO demo03Student = BeanUtils.toBean(createReqVO, Demo03StudentDO.class); + demo03StudentMapper.insert(demo03Student); + + // 插入子表 + createDemo03CourseList(demo03Student.getId(), createReqVO.getDemo03Courses()); + createDemo03Grade(demo03Student.getId(), createReqVO.getDemo03Grade()); + // 返回 + return demo03Student.getId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateDemo03Student(Demo03StudentSaveReqVO updateReqVO) { + // 校验存在 + validateDemo03StudentExists(updateReqVO.getId()); + // 更新 + Demo03StudentDO updateObj = BeanUtils.toBean(updateReqVO, Demo03StudentDO.class); + demo03StudentMapper.updateById(updateObj); + + // 更新子表 + updateDemo03CourseList(updateReqVO.getId(), updateReqVO.getDemo03Courses()); + updateDemo03Grade(updateReqVO.getId(), updateReqVO.getDemo03Grade()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteDemo03Student(Long id) { + // 校验存在 + validateDemo03StudentExists(id); + // 删除 + demo03StudentMapper.deleteById(id); + + // 删除子表 + deleteDemo03CourseByStudentId(id); + deleteDemo03GradeByStudentId(id); + } + + private void validateDemo03StudentExists(Long id) { + if (demo03StudentMapper.selectById(id) == null) { + throw exception(DEMO03_STUDENT_NOT_EXISTS); + } + } + + @Override + public Demo03StudentDO getDemo03Student(Long id) { + return demo03StudentMapper.selectById(id); + } + + @Override + public PageResult getDemo03StudentPage(Demo03StudentPageReqVO pageReqVO) { + return demo03StudentMapper.selectPage(pageReqVO); + } + + // ==================== 子表(学生课程) ==================== + + @Override + public List getDemo03CourseListByStudentId(Long studentId) { + return demo03CourseMapper.selectListByStudentId(studentId); + } + + private void createDemo03CourseList(Long studentId, List list) { + if (list != null) { + list.forEach(o -> o.setStudentId(studentId)); + } + demo03CourseMapper.insertBatch(list); + } + + private void updateDemo03CourseList(Long studentId, List list) { + deleteDemo03CourseByStudentId(studentId); + list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲突;2)updateTime 不更新 + createDemo03CourseList(studentId, list); + } + + private void deleteDemo03CourseByStudentId(Long studentId) { + demo03CourseMapper.deleteByStudentId(studentId); + } + + @Override + public PageResult getDemo03CoursePage(PageParam pageReqVO, Long studentId) { + return demo03CourseMapper.selectPage(pageReqVO, studentId); + } + + @Override + public Long createDemo03Course(Demo03CourseDO demo03Course) { + demo03CourseMapper.insert(demo03Course); + return demo03Course.getId(); + } + + @Override + public void updateDemo03Course(Demo03CourseDO demo03Course) { + demo03CourseMapper.updateById(demo03Course); + } + + @Override + public void deleteDemo03Course(Long id) { + demo03CourseMapper.deleteById(id); + } + + @Override + public Demo03CourseDO getDemo03Course(Long id) { + return demo03CourseMapper.selectById(id); + } + + // ==================== 子表(学生班级) ==================== + + @Override + public Demo03GradeDO getDemo03GradeByStudentId(Long studentId) { + return demo03GradeMapper.selectByStudentId(studentId); + } + + private void createDemo03Grade(Long studentId, Demo03GradeDO demo03Grade) { + if (demo03Grade == null) { + return; + } + demo03Grade.setStudentId(studentId); + demo03GradeMapper.insert(demo03Grade); + } + + private void updateDemo03Grade(Long studentId, Demo03GradeDO demo03Grade) { + if (demo03Grade == null) { + return; + } + demo03Grade.setStudentId(studentId); + demo03Grade.setUpdater(null).setUpdateTime(null); // 解决更新情况下:updateTime 不更新 + demo03GradeMapper.insertOrUpdate(demo03Grade); + } + + private void deleteDemo03GradeByStudentId(Long studentId) { + demo03GradeMapper.deleteByStudentId(studentId); + } + + @Override + public PageResult getDemo03GradePage(PageParam pageReqVO, Long studentId) { + return demo03GradeMapper.selectPage(pageReqVO, studentId); + } + + @Override + public Long createDemo03Grade(Demo03GradeDO demo03Grade) { + // 校验是否已经存在 + if (demo03GradeMapper.selectByStudentId(demo03Grade.getStudentId()) != null) { + throw exception(DEMO03_GRADE_EXISTS); + } + demo03GradeMapper.insert(demo03Grade); + return demo03Grade.getId(); + } + + @Override + public void updateDemo03Grade(Demo03GradeDO demo03Grade) { + // 校验存在 + validateDemo03GradeExists(demo03Grade.getId()); + // 更新 + demo03GradeMapper.updateById(demo03Grade); + } + + @Override + public void deleteDemo03Grade(Long id) { + // 校验存在 + validateDemo03GradeExists(id); + // 删除 + demo03GradeMapper.deleteById(id); + } + + @Override + public Demo03GradeDO getDemo03Grade(Long id) { + return demo03GradeMapper.selectById(id); + } + + private void validateDemo03GradeExists(Long id) { + if (demo03GradeMapper.selectById(id) == null) { + throw exception(DEMO03_GRADE_NOT_EXISTS); + } + } + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileConfigService.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileConfigService.java new file mode 100644 index 0000000..1e6f4ae --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileConfigService.java @@ -0,0 +1,86 @@ +package com.win.module.infra.service.file; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO; +import com.win.module.infra.controller.admin.file.vo.config.FileConfigSaveReqVO; +import com.win.module.infra.dal.dataobject.file.FileConfigDO; + +import com.win.module.infra.framework.file.core.client.FileClient; +import jakarta.validation.Valid; + +/** + * 文件配置 Service 接口 + * + * @author 芋道源码 + */ +public interface FileConfigService { + + /** + * 创建文件配置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createFileConfig(@Valid FileConfigSaveReqVO createReqVO); + + /** + * 更新文件配置 + * + * @param updateReqVO 更新信息 + */ + void updateFileConfig(@Valid FileConfigSaveReqVO updateReqVO); + + /** + * 更新文件配置为 Master + * + * @param id 编号 + */ + void updateFileConfigMaster(Long id); + + /** + * 删除文件配置 + * + * @param id 编号 + */ + void deleteFileConfig(Long id); + + /** + * 获得文件配置 + * + * @param id 编号 + * @return 文件配置 + */ + FileConfigDO getFileConfig(Long id); + + /** + * 获得文件配置分页 + * + * @param pageReqVO 分页查询 + * @return 文件配置分页 + */ + PageResult getFileConfigPage(FileConfigPageReqVO pageReqVO); + + /** + * 测试文件配置是否正确,通过上传文件 + * + * @param id 编号 + * @return 文件 URL + */ + String testFileConfig(Long id) throws Exception; + + /** + * 获得指定编号的文件客户端 + * + * @param id 配置编号 + * @return 文件客户端 + */ + FileClient getFileClient(Long id); + + /** + * 获得 Master 文件客户端 + * + * @return 文件客户端 + */ + FileClient getMasterFileClient(); + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileConfigServiceImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileConfigServiceImpl.java new file mode 100644 index 0000000..487d6c3 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileConfigServiceImpl.java @@ -0,0 +1,189 @@ +package com.win.module.infra.service.file; + +import cn.hutool.core.io.resource.ResourceUtil; +import cn.hutool.core.util.IdUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.json.JsonUtils; +import com.win.framework.common.util.validation.ValidationUtils; +import com.win.module.infra.controller.admin.file.vo.config.FileConfigPageReqVO; +import com.win.module.infra.controller.admin.file.vo.config.FileConfigSaveReqVO; +import com.win.module.infra.convert.file.FileConfigConvert; +import com.win.module.infra.dal.dataobject.file.FileConfigDO; +import com.win.module.infra.dal.mysql.file.FileConfigMapper; +import com.win.module.infra.framework.file.core.client.FileClient; +import com.win.module.infra.framework.file.core.client.FileClientConfig; +import com.win.module.infra.framework.file.core.client.FileClientFactory; +import com.win.module.infra.framework.file.core.enums.FileStorageEnum; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import jakarta.validation.Validator; +import java.time.Duration; +import java.util.Map; +import java.util.Objects; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.cache.CacheUtils.buildAsyncReloadingCache; +import static com.win.module.infra.enums.ErrorCodeConstants.FILE_CONFIG_DELETE_FAIL_MASTER; +import static com.win.module.infra.enums.ErrorCodeConstants.FILE_CONFIG_NOT_EXISTS; + +/** + * 文件配置 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +@Slf4j +public class FileConfigServiceImpl implements FileConfigService { + + private static final Long CACHE_MASTER_ID = 0L; + + /** + * {@link FileClient} 缓存,通过它异步刷新 fileClientFactory + */ + @Getter + private final LoadingCache clientCache = buildAsyncReloadingCache(Duration.ofSeconds(10L), + new CacheLoader() { + + @Override + public FileClient load(Long id) { + FileConfigDO config = Objects.equals(CACHE_MASTER_ID, id) ? + fileConfigMapper.selectByMaster() : fileConfigMapper.selectById(id); + if (config != null) { + fileClientFactory.createOrUpdateFileClient(config.getId(), config.getStorage(), config.getConfig()); + } + return fileClientFactory.getFileClient(null == config ? id : config.getId()); + } + + }); + + @Resource + private FileClientFactory fileClientFactory; + + @Resource + private FileConfigMapper fileConfigMapper; + + @Resource + private Validator validator; + + @Override + public Long createFileConfig(FileConfigSaveReqVO createReqVO) { + FileConfigDO fileConfig = FileConfigConvert.INSTANCE.convert(createReqVO) + .setConfig(parseClientConfig(createReqVO.getStorage(), createReqVO.getConfig())) + .setMaster(false); // 默认非 master + fileConfigMapper.insert(fileConfig); + return fileConfig.getId(); + } + + @Override + public void updateFileConfig(FileConfigSaveReqVO updateReqVO) { + // 校验存在 + FileConfigDO config = validateFileConfigExists(updateReqVO.getId()); + // 更新 + FileConfigDO updateObj = FileConfigConvert.INSTANCE.convert(updateReqVO) + .setConfig(parseClientConfig(config.getStorage(), updateReqVO.getConfig())); + fileConfigMapper.updateById(updateObj); + + // 清空缓存 + clearCache(config.getId(), null); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateFileConfigMaster(Long id) { + // 校验存在 + validateFileConfigExists(id); + // 更新其它为非 master + fileConfigMapper.updateBatch(new FileConfigDO().setMaster(false)); + // 更新 + fileConfigMapper.updateById(new FileConfigDO().setId(id).setMaster(true)); + + // 清空缓存 + clearCache(null, true); + } + + private FileClientConfig parseClientConfig(Integer storage, Map config) { + // 获取配置类 + Class configClass = FileStorageEnum.getByStorage(storage) + .getConfigClass(); + FileClientConfig clientConfig = JsonUtils.parseObject2(JsonUtils.toJsonString(config), configClass); + // 参数校验 + ValidationUtils.validate(validator, clientConfig); + // 设置参数 + return clientConfig; + } + + @Override + public void deleteFileConfig(Long id) { + // 校验存在 + FileConfigDO config = validateFileConfigExists(id); + if (Boolean.TRUE.equals(config.getMaster())) { + throw exception(FILE_CONFIG_DELETE_FAIL_MASTER); + } + // 删除 + fileConfigMapper.deleteById(id); + + // 清空缓存 + clearCache(id, null); + } + + /** + * 清空指定文件配置 + * + * @param id 配置编号 + * @param master 是否主配置 + */ + private void clearCache(Long id, Boolean master) { + if (id != null) { + clientCache.invalidate(id); + } + if (Boolean.TRUE.equals(master)) { + clientCache.invalidate(CACHE_MASTER_ID); + } + } + + private FileConfigDO validateFileConfigExists(Long id) { + FileConfigDO config = fileConfigMapper.selectById(id); + if (config == null) { + throw exception(FILE_CONFIG_NOT_EXISTS); + } + return config; + } + + @Override + public FileConfigDO getFileConfig(Long id) { + return fileConfigMapper.selectById(id); + } + + @Override + public PageResult getFileConfigPage(FileConfigPageReqVO pageReqVO) { + return fileConfigMapper.selectPage(pageReqVO); + } + + @Override + public String testFileConfig(Long id) throws Exception { + // 校验存在 + validateFileConfigExists(id); + // 上传文件 + byte[] content = ResourceUtil.readBytes("file/erweima.jpg"); + return getFileClient(id).upload(content, IdUtil.fastSimpleUUID() + ".jpg", "image/jpeg"); + } + + @Override + public FileClient getFileClient(Long id) { + return clientCache.getUnchecked(id); + } + + @Override + public FileClient getMasterFileClient() { + return clientCache.getUnchecked(CACHE_MASTER_ID); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileService.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileService.java new file mode 100644 index 0000000..e22f7cd --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileService.java @@ -0,0 +1,66 @@ +package com.win.module.infra.service.file; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.infra.controller.admin.file.vo.file.FileCreateReqVO; +import com.win.module.infra.controller.admin.file.vo.file.FilePageReqVO; +import com.win.module.infra.controller.admin.file.vo.file.FilePresignedUrlRespVO; +import com.win.module.infra.dal.dataobject.file.FileDO; + +/** + * 文件 Service 接口 + * + * @author 芋道源码 + */ +public interface FileService { + + /** + * 获得文件分页 + * + * @param pageReqVO 分页查询 + * @return 文件分页 + */ + PageResult getFilePage(FilePageReqVO pageReqVO); + + /** + * 保存文件,并返回文件的访问路径 + * + * @param name 文件名称 + * @param path 文件路径 + * @param content 文件内容 + * @return 文件路径 + */ + String createFile(String name, String path, byte[] content); + + /** + * 创建文件 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createFile(FileCreateReqVO createReqVO); + + /** + * 删除文件 + * + * @param id 编号 + */ + void deleteFile(Long id) throws Exception; + + /** + * 获得文件内容 + * + * @param configId 配置编号 + * @param path 文件路径 + * @return 文件内容 + */ + byte[] getFileContent(Long configId, String path) throws Exception; + + /** + * 生成文件预签名地址信息 + * + * @param path 文件路径 + * @return 预签名地址信息 + */ + FilePresignedUrlRespVO getFilePresignedUrl(String path) throws Exception; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileServiceImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileServiceImpl.java new file mode 100644 index 0000000..d7331c8 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/file/FileServiceImpl.java @@ -0,0 +1,116 @@ +package com.win.module.infra.service.file; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.io.FileUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.infra.controller.admin.file.vo.file.FileCreateReqVO; +import com.win.module.infra.controller.admin.file.vo.file.FilePageReqVO; +import com.win.module.infra.controller.admin.file.vo.file.FilePresignedUrlRespVO; +import com.win.module.infra.dal.dataobject.file.FileDO; +import com.win.module.infra.dal.mysql.file.FileMapper; +import com.win.module.infra.framework.file.core.client.FileClient; +import com.win.module.infra.framework.file.core.client.s3.FilePresignedUrlRespDTO; +import com.win.module.infra.framework.file.core.utils.FileTypeUtils; +import jakarta.annotation.Resource; +import lombok.SneakyThrows; +import org.springframework.stereotype.Service; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.infra.enums.ErrorCodeConstants.FILE_NOT_EXISTS; + +/** + * 文件 Service 实现类 + * + * @author 芋道源码 + */ +@Service +public class FileServiceImpl implements FileService { + + @Resource + private FileConfigService fileConfigService; + + @Resource + private FileMapper fileMapper; + + @Override + public PageResult getFilePage(FilePageReqVO pageReqVO) { + return fileMapper.selectPage(pageReqVO); + } + + @Override + @SneakyThrows + public String createFile(String name, String path, byte[] content) { + // 计算默认的 path 名 + String type = FileTypeUtils.getMineType(content, name); + if (StrUtil.isEmpty(path)) { + path = FileUtils.generatePath(content, name); + } + // 如果 name 为空,则使用 path 填充 + if (StrUtil.isEmpty(name)) { + name = path; + } + + // 上传到文件存储器 + FileClient client = fileConfigService.getMasterFileClient(); + Assert.notNull(client, "客户端(master) 不能为空"); + String url = client.upload(content, path, type); + + // 保存到数据库 + FileDO file = new FileDO(); + file.setConfigId(client.getId()); + file.setName(name); + file.setPath(path); + file.setUrl(url); + file.setType(type); + file.setSize(content.length); + fileMapper.insert(file); + return url; + } + + @Override + public Long createFile(FileCreateReqVO createReqVO) { + FileDO file = BeanUtils.toBean(createReqVO, FileDO.class); + fileMapper.insert(file); + return file.getId(); + } + + @Override + public void deleteFile(Long id) throws Exception { + // 校验存在 + FileDO file = validateFileExists(id); + + // 从文件存储器中删除 + FileClient client = fileConfigService.getFileClient(file.getConfigId()); + Assert.notNull(client, "客户端({}) 不能为空", file.getConfigId()); + client.delete(file.getPath()); + + // 删除记录 + fileMapper.deleteById(id); + } + + private FileDO validateFileExists(Long id) { + FileDO fileDO = fileMapper.selectById(id); + if (fileDO == null) { + throw exception(FILE_NOT_EXISTS); + } + return fileDO; + } + + @Override + public byte[] getFileContent(Long configId, String path) throws Exception { + FileClient client = fileConfigService.getFileClient(configId); + Assert.notNull(client, "客户端({}) 不能为空", configId); + return client.getContent(path); + } + + @Override + public FilePresignedUrlRespVO getFilePresignedUrl(String path) throws Exception { + FileClient fileClient = fileConfigService.getMasterFileClient(); + FilePresignedUrlRespDTO presignedObjectUrl = fileClient.getPresignedObjectUrl(path); + return BeanUtils.toBean(presignedObjectUrl, FilePresignedUrlRespVO.class, + object -> object.setConfigId(fileClient.getId())); + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiAccessLogService.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiAccessLogService.java new file mode 100644 index 0000000..487d464 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiAccessLogService.java @@ -0,0 +1,38 @@ +package com.win.module.infra.service.logger; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; +import com.win.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; +import com.win.module.infra.dal.dataobject.logger.ApiAccessLogDO; + +/** + * API 访问日志 Service 接口 + * + * @author 芋道源码 + */ +public interface ApiAccessLogService { + + /** + * 创建 API 访问日志 + * + * @param createReqDTO API 访问日志 + */ + void createApiAccessLog(ApiAccessLogCreateReqDTO createReqDTO); + + /** + * 获得 API 访问日志分页 + * + * @param pageReqVO 分页查询 + * @return API 访问日志分页 + */ + PageResult getApiAccessLogPage(ApiAccessLogPageReqVO pageReqVO); + + /** + * 清理 exceedDay 天前的访问日志 + * + * @param exceedDay 超过多少天就进行清理 + * @param deleteLimit 清理的间隔条数 + */ + Integer cleanAccessLog(Integer exceedDay, Integer deleteLimit); + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiAccessLogServiceImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiAccessLogServiceImpl.java new file mode 100644 index 0000000..74c5a42 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiAccessLogServiceImpl.java @@ -0,0 +1,57 @@ +package com.win.module.infra.service.logger; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; +import com.win.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; +import com.win.module.infra.dal.dataobject.logger.ApiAccessLogDO; +import com.win.module.infra.dal.mysql.logger.ApiAccessLogMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.time.LocalDateTime; + +/** + * API 访问日志 Service 实现类 + * + * @author 芋道源码 + */ +@Slf4j +@Service +@Validated +public class ApiAccessLogServiceImpl implements ApiAccessLogService { + + @Resource + private ApiAccessLogMapper apiAccessLogMapper; + + @Override + public void createApiAccessLog(ApiAccessLogCreateReqDTO createDTO) { + ApiAccessLogDO apiAccessLog = BeanUtils.toBean(createDTO, ApiAccessLogDO.class); + apiAccessLogMapper.insert(apiAccessLog); + } + + @Override + public PageResult getApiAccessLogPage(ApiAccessLogPageReqVO pageReqVO) { + return apiAccessLogMapper.selectPage(pageReqVO); + } + + @Override + @SuppressWarnings("DuplicatedCode") + public Integer cleanAccessLog(Integer exceedDay, Integer deleteLimit) { + int count = 0; + LocalDateTime expireDate = LocalDateTime.now().minusDays(exceedDay); + // 循环删除,直到没有满足条件的数据 + for (int i = 0; i < Short.MAX_VALUE; i++) { + int deleteCount = apiAccessLogMapper.deleteByCreateTimeLt(expireDate, deleteLimit); + count += deleteCount; + // 达到删除预期条数,说明到底了 + if (deleteCount < deleteLimit) { + break; + } + } + return count; + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiErrorLogService.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiErrorLogService.java new file mode 100644 index 0000000..21b077f --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiErrorLogService.java @@ -0,0 +1,47 @@ +package com.win.module.infra.service.logger; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; +import com.win.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; +import com.win.module.infra.dal.dataobject.logger.ApiErrorLogDO; + +/** + * API 错误日志 Service 接口 + * + * @author 芋道源码 + */ +public interface ApiErrorLogService { + + /** + * 创建 API 错误日志 + * + * @param createReqDTO API 错误日志 + */ + void createApiErrorLog(ApiErrorLogCreateReqDTO createReqDTO); + + /** + * 获得 API 错误日志分页 + * + * @param pageReqVO 分页查询 + * @return API 错误日志分页 + */ + PageResult getApiErrorLogPage(ApiErrorLogPageReqVO pageReqVO); + + /** + * 更新 API 错误日志已处理 + * + * @param id API 日志编号 + * @param processStatus 处理结果 + * @param processUserId 处理人 + */ + void updateApiErrorLogProcess(Long id, Integer processStatus, Long processUserId); + + /** + * 清理 exceedDay 天前的错误日志 + * + * @param exceedDay 超过多少天就进行清理 + * @param deleteLimit 清理的间隔条数 + */ + Integer cleanErrorLog(Integer exceedDay, Integer deleteLimit); + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiErrorLogServiceImpl.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiErrorLogServiceImpl.java new file mode 100644 index 0000000..e6e455b --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/service/logger/ApiErrorLogServiceImpl.java @@ -0,0 +1,77 @@ +package com.win.module.infra.service.logger; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; +import com.win.module.infra.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO; +import com.win.module.infra.dal.dataobject.logger.ApiErrorLogDO; +import com.win.module.infra.dal.mysql.logger.ApiErrorLogMapper; +import com.win.module.infra.enums.logger.ApiErrorLogProcessStatusEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.time.LocalDateTime; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.infra.enums.ErrorCodeConstants.API_ERROR_LOG_NOT_FOUND; +import static com.win.module.infra.enums.ErrorCodeConstants.API_ERROR_LOG_PROCESSED; + +/** + * API 错误日志 Service 实现类 + * + * @author 芋道源码 + */ +@Slf4j +@Service +@Validated +public class ApiErrorLogServiceImpl implements ApiErrorLogService { + + @Resource + private ApiErrorLogMapper apiErrorLogMapper; + + @Override + public void createApiErrorLog(ApiErrorLogCreateReqDTO createDTO) { + ApiErrorLogDO apiErrorLog = BeanUtils.toBean(createDTO, ApiErrorLogDO.class) + .setProcessStatus(ApiErrorLogProcessStatusEnum.INIT.getStatus()); + apiErrorLogMapper.insert(apiErrorLog); + } + + @Override + public PageResult getApiErrorLogPage(ApiErrorLogPageReqVO pageReqVO) { + return apiErrorLogMapper.selectPage(pageReqVO); + } + + @Override + public void updateApiErrorLogProcess(Long id, Integer processStatus, Long processUserId) { + ApiErrorLogDO errorLog = apiErrorLogMapper.selectById(id); + if (errorLog == null) { + throw exception(API_ERROR_LOG_NOT_FOUND); + } + if (!ApiErrorLogProcessStatusEnum.INIT.getStatus().equals(errorLog.getProcessStatus())) { + throw exception(API_ERROR_LOG_PROCESSED); + } + // 标记处理 + apiErrorLogMapper.updateById(ApiErrorLogDO.builder().id(id).processStatus(processStatus) + .processUserId(processUserId).processTime(LocalDateTime.now()).build()); + } + + @Override + @SuppressWarnings("DuplicatedCode") + public Integer cleanErrorLog(Integer exceedDay, Integer deleteLimit) { + int count = 0; + LocalDateTime expireDate = LocalDateTime.now().minusDays(exceedDay); + // 循环删除,直到没有满足条件的数据 + for (int i = 0; i < Short.MAX_VALUE; i++) { + int deleteCount = apiErrorLogMapper.deleteByCreateTimeLt(expireDate, deleteLimit); + count += deleteCount; + // 达到删除预期条数,说明到底了 + if (deleteCount < deleteLimit) { + break; + } + } + return count; + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/websocket/DemoWebSocketMessageListener.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/websocket/DemoWebSocketMessageListener.java new file mode 100644 index 0000000..5153925 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/websocket/DemoWebSocketMessageListener.java @@ -0,0 +1,48 @@ +package com.win.module.infra.websocket; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.websocket.core.listener.WebSocketMessageListener; +import com.win.framework.websocket.core.sender.WebSocketMessageSender; +import com.win.framework.websocket.core.util.WebSocketFrameworkUtils; +import com.win.module.infra.websocket.message.DemoReceiveMessage; +import com.win.module.infra.websocket.message.DemoSendMessage; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.WebSocketSession; + +import jakarta.annotation.Resource; + +/** + * WebSocket 示例:单发消息 + * + * @author 芋道源码 + */ +@Component +public class DemoWebSocketMessageListener implements WebSocketMessageListener { + + @Resource + private WebSocketMessageSender webSocketMessageSender; + + @Override + public void onMessage(WebSocketSession session, DemoSendMessage message) { + Long fromUserId = WebSocketFrameworkUtils.getLoginUserId(session); + // 情况一:单发 + if (message.getToUserId() != null) { + DemoReceiveMessage toMessage = new DemoReceiveMessage().setFromUserId(fromUserId) + .setText(message.getText()).setSingle(true); + webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), message.getToUserId(), // 给指定用户 + "demo-message-receive", toMessage); + return; + } + // 情况二:群发 + DemoReceiveMessage toMessage = new DemoReceiveMessage().setFromUserId(fromUserId) + .setText(message.getText()).setSingle(false); + webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), // 给所有用户 + "demo-message-receive", toMessage); + } + + @Override + public String getType() { + return "demo-message-send"; + } + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/websocket/message/DemoReceiveMessage.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/websocket/message/DemoReceiveMessage.java new file mode 100644 index 0000000..bfdfc67 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/websocket/message/DemoReceiveMessage.java @@ -0,0 +1,27 @@ +package com.win.module.infra.websocket.message; + +import lombok.Data; + +/** + * 示例:server -> client 同步消息 + * + * @author 芋道源码 + */ +@Data +public class DemoReceiveMessage { + + /** + * 接收人的编号 + */ + private Long fromUserId; + /** + * 内容 + */ + private String text; + + /** + * 是否单聊 + */ + private Boolean single; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/websocket/message/DemoSendMessage.java b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/websocket/message/DemoSendMessage.java new file mode 100644 index 0000000..e28fd29 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/java/com/win/module/infra/websocket/message/DemoSendMessage.java @@ -0,0 +1,24 @@ +package com.win.module.infra.websocket.message; + +import lombok.Data; + +/** + * 示例:client -> server 发送消息 + * + * @author 芋道源码 + */ +@Data +public class DemoSendMessage { + + /** + * 发送给谁 + * + * 如果为空,说明发送给所有人 + */ + private Long toUserId; + /** + * 内容 + */ + private String text; + +} diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/application.yaml b/win-module-infra/win-module-infra-biz/src/main/resources/application.yaml new file mode 100644 index 0000000..b4f44c9 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/application.yaml @@ -0,0 +1,162 @@ +spring: + main: + allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 + allow-bean-definition-overriding: true # 允许 Bean 覆盖,例如说 Feign 等会存在重复定义的服务 + + # Servlet 配置 + servlet: + # 文件上传相关配置项 + multipart: + max-file-size: 16MB # 单个文件大小 + max-request-size: 32MB # 设置总上传的文件大小 + mvc: + pathmatch: + matching-strategy: ANT_PATH_MATCHER # 解决 SpringFox 与 SpringBoot 2.6.x 不兼容的问题,参见 SpringFoxHandlerProviderBeanPostProcessor 类 + + # Jackson 配置项 + jackson: + serialization: + write-dates-as-timestamps: true # 设置 LocalDateTime 的格式,使用时间戳 + write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401 + write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳 + fail-on-empty-beans: false # 允许序列化无属性的 Bean + + # Cache 配置项 + cache: + type: REDIS + redis: + time-to-live: 1h # 设置过期时间为 1 小时 + +--- #################### 接口文档配置 #################### + +springdoc: + api-docs: + enabled: true # 1. 是否开启 Swagger 接文档的元数据 + path: /v3/api-docs + swagger-ui: + enabled: true # 2.1 是否开启 Swagger 文档的官方 UI 界面 + path: /swagger-ui.html + default-flat-param-object: true # 参见 https://doc.xiaominfo.com/docs/faq/v4/knife4j-parameterobject-flat-param 文档 + +knife4j: + enable: true # 2.2 是否开启 Swagger 文档的 Knife4j UI 界面 + setting: + language: zh_cn + +# MyBatis Plus 的配置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + global-config: + db-config: + id-type: AUTO # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。 + # id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库 + # id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库 + # id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解 + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + banner: false # 关闭控制台的 Banner 打印 + type-aliases-package: ${win.info.base-package}.dal.dataobject + encryptor: + password: XDV71a+xqStEA3WH # 加解密的秘钥,可使用 https://www.imaegoo.com/2020/aes-key-generator/ 网站生成 + +mybatis-plus-join: + banner: false # 关闭控制台的 Banner 打印 + +# Spring Data Redis 配置 +spring: + data: + redis: + repositories: + enabled: false # 项目未使用到 Spring Data Redis 的 Repository,所以直接禁用,保证启动速度 + +# VO 转换(数据翻译)相关 +easy-trans: + is-enable-global: true # 启用全局翻译(拦截所有 SpringMVC ResponseBody 进行自动翻译 )。如果对于性能要求很高可关闭此配置,或通过 @IgnoreTrans 忽略某个接口 + is-enable-cloud: false # 禁用 TransType.RPC 微服务模式 + +--- #################### RPC 远程调用相关配置 #################### + +--- #################### 消息队列相关 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + # Producer 配置项 + producer: + group: ${spring.application.name}_PRODUCER # 生产者分组 + +spring: + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + # Kafka Producer 配置项 + producer: + acks: 1 # 0-不应答。1-leader 应答。all-所有 leader 和 follower 应答。 + retries: 3 # 发送失败时,重试发送的次数 + value-serializer: org.springframework.kafka.support.serializer.JsonSerializer # 消息的 value 的序列化 + # Kafka Consumer 配置项 + consumer: + auto-offset-reset: earliest # 设置消费者分组最初的消费进度为 earliest 。可参考博客 https://blog.csdn.net/lishuangzhe7047/article/details/74530417 理解 + value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer + properties: + spring.json.trusted.packages: '*' + # Kafka Consumer Listener 监听器配置 + listener: + missing-topics-fatal: false # 消费监听接口监听的主题不存在时,默认会报错。所以通过设置为 false ,解决报错 + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + executor: + appname: ${spring.application.name} # 执行器 AppName + logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径 + accessToken: default_token # 执行器通讯TOKEN + +--- #################### 芋道相关配置 #################### + +win: + info: + version: 1.0.0 + base-package: com.win.module.infra + web: + admin-ui: + url: http://dashboard.win.iocoder.cn # Admin 管理后台 UI 的地址 + websocket: + enable: true # websocket的开关 + path: /infra/ws # 路径 + sender-type: local # 消息发送的类型,可选值为 local、redis、rocketmq、kafka、rabbitmq + sender-rocketmq: + topic: ${spring.application.name}-websocket # 消息发送的 RocketMQ Topic + consumer-group: ${spring.application.name}-websocket-consumer # 消息发送的 RocketMQ Consumer Group + sender-rabbitmq: + exchange: ${spring.application.name}-websocket-exchange # 消息发送的 RabbitMQ Exchange + queue: ${spring.application.name}-websocket-queue # 消息发送的 RabbitMQ Queue + sender-kafka: + topic: ${spring.application.name}-websocket # 消息发送的 Kafka Topic + consumer-group: ${spring.application.name}-websocket-consumer # 消息发送的 Kafka Consumer Group + swagger: + title: 管理后台 + description: 提供管理员管理的所有功能 + version: ${win.info.version} + base-package: ${win.info.base-package} + codegen: + base-package: com.win + db-schemas: ${spring.datasource.dynamic.datasource.master.name} + front-type: 10 # 前端模版的类型,参见 CodegenFrontTypeEnum 枚举类 + tenant: # 多租户相关配置项 + enable: true + ignore-urls: + - /admin-api/infra/file/*/get/** # 获取图片,和租户无关 + ignore-tables: + - infra_codegen_column + - infra_codegen_table + - infra_config + - infra_file_config + - infra_file + - infra_file_content + - infra_job + - infra_job_log + - infra_job_log + - infra_data_source_config + +debug: false diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/bootstrap-local.yaml b/win-module-infra/win-module-infra-biz/src/main/resources/bootstrap-local.yaml new file mode 100644 index 0000000..9dc3425 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/bootstrap-local.yaml @@ -0,0 +1,23 @@ +--- #################### 注册中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.0.103:8848 + discovery: + namespace: win-cloud-dev # 命名空间。这里使用 dev 开发环境 + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + +--- #################### 配置中心相关配置 #################### + +spring: + cloud: + nacos: + # Nacos Config 配置项,对应 NacosConfigProperties 配置属性类 + config: + server-addr: 192.168.0.103:8848 # Nacos 服务器地址 + namespace: win-cloud-dev # 命名空间 dev 的ID,不能直接使用 dev 名称。创建命名空间的时候需要指定ID为 dev,这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + name: ${spring.application.name}-local # 使用的 Nacos 配置集的 dataId,默认为 spring.application.name + file-extension: yaml # 使用的 Nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/bootstrap.yaml b/win-module-infra/win-module-infra-biz/src/main/resources/bootstrap.yaml new file mode 100644 index 0000000..a276ad4 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/bootstrap.yaml @@ -0,0 +1,14 @@ +spring: + application: + name: infra-server + + profiles: + active: local + +server: + port: 48082 + +# 日志文件配置。注意,如果 logging.file.name 不放在 bootstrap.yaml 配置文件,而是放在 application.yaml 中,会导致出现 LOG_FILE_IS_UNDEFINED 文件 +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/controller.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/controller.vm new file mode 100644 index 0000000..a358d7c --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/controller.vm @@ -0,0 +1,233 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}; + +import org.springframework.web.bind.annotation.*; +import ${jakartaPackage}.annotation.Resource; +import org.springframework.validation.annotation.Validated; +#if ($sceneEnum.scene == 1)import org.springframework.security.access.prepost.PreAuthorize;#end + +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import ${jakartaPackage}.validation.constraints.*; +import ${jakartaPackage}.validation.*; +import ${jakartaPackage}.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import ${PageParamClassName}; +import ${PageResultClassName}; +import ${CommonResultClassName}; +import ${BeanUtils}; +import static ${CommonResultClassName}.success; + +import ${ExcelUtilsClassName}; + +import ${ApiAccessLogClassName}; +import static ${OperateTypeEnumClassName}.*; + +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; +#end +import ${basePackage}.module.${table.moduleName}.service.${table.businessName}.${table.className}Service; + +@Tag(name = "${sceneEnum.name} - ${table.classComment}") +@RestController +##二级的 businessName 暂时不算在 HTTP 路径上,可以根据需要写 +@RequestMapping("/${table.moduleName}/${simpleClassName_strikeCase}") +@Validated +public class ${sceneEnum.prefixClass}${table.className}Controller { + + @Resource + private ${table.className}Service ${classNameVar}Service; + + @PostMapping("/create") + @Operation(summary = "创建${table.classComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:create')") +#end + public CommonResult<${primaryColumn.javaType}> create${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO) { + return success(${classNameVar}Service.create${simpleClassName}(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新${table.classComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:update')") +#end + public CommonResult update${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO) { + ${classNameVar}Service.update${simpleClassName}(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除${table.classComment}") + @Parameter(name = "id", description = "编号", required = true) +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:delete')") +#end + public CommonResult delete${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) { + ${classNameVar}Service.delete${simpleClassName}(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得${table.classComment}") + @Parameter(name = "id", description = "编号", required = true, example = "1024") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult<${sceneEnum.prefixClass}${table.className}RespVO> get${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) { + ${table.className}DO ${classNameVar} = ${classNameVar}Service.get${simpleClassName}(id); + return success(BeanUtils.toBean(${classNameVar}, ${sceneEnum.prefixClass}${table.className}RespVO.class)); + } + +#if ( $table.templateType != 2 ) + @GetMapping("/page") + @Operation(summary = "获得${table.classComment}分页") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult> get${simpleClassName}Page(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) { + PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(pageReqVO); + return success(BeanUtils.toBean(pageResult, ${sceneEnum.prefixClass}${table.className}RespVO.class)); + } + +## 特殊:树表专属逻辑(树不需要分页接口) +#else + @GetMapping("/list") + @Operation(summary = "获得${table.classComment}列表") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult> get${simpleClassName}List(@Valid ${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) { + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(listReqVO); + return success(BeanUtils.toBean(list, ${sceneEnum.prefixClass}${table.className}RespVO.class)); + } + +#end + @GetMapping("/export-excel") + @Operation(summary = "导出${table.classComment} Excel") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:export')") +#end + @ApiAccessLog(operateType = EXPORT) +#if ( $table.templateType != 2 ) + public void export${simpleClassName}Excel(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}Page(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${table.className}RespVO.class, + BeanUtils.toBean(list, ${table.className}RespVO.class)); + } +## 特殊:树表专属逻辑(树不需要分页接口) +#else + public void export${simpleClassName}Excel(@Valid ${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO, + HttpServletResponse response) throws IOException { + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(listReqVO); + // 导出 Excel + ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${table.className}RespVO.class, + BeanUtils.toBean(list, ${table.className}RespVO.class)); + } +#end + +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 +#set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index)) +#set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) +#set ($subClassNameVar = $subClassNameVars.get($index)) + // ==================== 子表($subTable.classComment) ==================== + +## 情况一:MASTER_ERP 时,需要分查询页子表 +#if ( $table.templateType == 11 ) + @GetMapping("/${subSimpleClassName_strikeCase}/page") + @Operation(summary = "获得${subTable.classComment}分页") + @Parameter(name = "${subJoinColumn.javaField}", description = "${subJoinColumn.columnComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult> get${subSimpleClassName}Page(PageParam pageReqVO, + @RequestParam("${subJoinColumn.javaField}") ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return success(${classNameVar}Service.get${subSimpleClassName}Page(pageReqVO, ${subJoinColumn.javaField})); + } + +## 情况二:非 MASTER_ERP 时,需要列表查询子表 +#else + #if ( $subTable.subJoinMany ) + @GetMapping("/${subSimpleClassName_strikeCase}/list-by-${subJoinColumn_strikeCase}") + @Operation(summary = "获得${subTable.classComment}列表") + @Parameter(name = "${subJoinColumn.javaField}", description = "${subJoinColumn.columnComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult> get${subSimpleClassName}ListBy${SubJoinColumnName}(@RequestParam("${subJoinColumn.javaField}") ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return success(${classNameVar}Service.get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaField})); + } + + #else + @GetMapping("/${subSimpleClassName_strikeCase}/get-by-${subJoinColumn_strikeCase}") + @Operation(summary = "获得${subTable.classComment}") + @Parameter(name = "${subJoinColumn.javaField}", description = "${subJoinColumn.columnComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult<${subTable.className}DO> get${subSimpleClassName}By${SubJoinColumnName}(@RequestParam("${subJoinColumn.javaField}") ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return success(${classNameVar}Service.get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField})); + } + + #end +#end +## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 +#if ( $table.templateType == 11 ) + @PostMapping("/${subSimpleClassName_strikeCase}/create") + @Operation(summary = "创建${subTable.classComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:create')") +#end + public CommonResult<${subPrimaryColumn.javaType}> create${subSimpleClassName}(@Valid @RequestBody ${subTable.className}DO ${subClassNameVar}) { + return success(${classNameVar}Service.create${subSimpleClassName}(${subClassNameVar})); + } + + @PutMapping("/${subSimpleClassName_strikeCase}/update") + @Operation(summary = "更新${subTable.classComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:update')") +#end + public CommonResult update${subSimpleClassName}(@Valid @RequestBody ${subTable.className}DO ${subClassNameVar}) { + ${classNameVar}Service.update${subSimpleClassName}(${subClassNameVar}); + return success(true); + } + + @DeleteMapping("/${subSimpleClassName_strikeCase}/delete") + @Parameter(name = "id", description = "编号", required = true) + @Operation(summary = "删除${subTable.classComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:delete')") +#end + public CommonResult delete${subSimpleClassName}(@RequestParam("id") ${subPrimaryColumn.javaType} id) { + ${classNameVar}Service.delete${subSimpleClassName}(id); + return success(true); + } + + @GetMapping("/${subSimpleClassName_strikeCase}/get") + @Operation(summary = "获得${subTable.classComment}") + @Parameter(name = "id", description = "编号", required = true) +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult<${subTable.className}DO> get${subSimpleClassName}(@RequestParam("id") ${subPrimaryColumn.javaType} id) { + return success(${classNameVar}Service.get${subSimpleClassName}(id)); + } + +#end +#end +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/listReqVO.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/listReqVO.vm new file mode 100644 index 0000000..46b6a25 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/listReqVO.vm @@ -0,0 +1,45 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import ${PageParamClassName}; +#foreach ($column in $columns) +#if (${column.javaType} == "BigDecimal") +import java.math.BigDecimal; +#break +#end +#end +## 处理 LocalDateTime 字段的引入 +#foreach ($column in $columns) +#if (${column.listOperation} && ${column.javaType} == "LocalDateTime") +import java.time.LocalDateTime; +import org.springframework.format.annotation.DateTimeFormat; + +import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +#break +#end +#end +## 字段模板 +#macro(columnTpl $prefix $prefixStr) + @Schema(description = "${prefixStr}${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) + private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; +#end + +@Schema(description = "${sceneEnum.name} - ${table.classComment}列表 Request VO") +@Data +public class ${sceneEnum.prefixClass}${table.className}ListReqVO { + +#foreach ($column in $columns) +#if (${column.listOperation})##查询操作 +#if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 + @Schema(description = "${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private ${column.javaType}[] ${column.javaField}; +#else##情况二,非 Between 的时间 + #columnTpl('', '') +#end + +#end +#end +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/pageReqVO.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/pageReqVO.vm new file mode 100644 index 0000000..003bac9 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/pageReqVO.vm @@ -0,0 +1,47 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import ${PageParamClassName}; +#foreach ($column in $columns) +#if (${column.javaType} == "BigDecimal") +import java.math.BigDecimal; +#break +#end +#end +## 处理 LocalDateTime 字段的引入 +#foreach ($column in $columns) +#if (${column.listOperationCondition} && ${column.javaType} == "LocalDateTime") +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +#break +#end +#end +## 字段模板 +#macro(columnTpl $prefix $prefixStr) + @Schema(description = "${prefixStr}${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) + private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; +#end + +@Schema(description = "${sceneEnum.name} - ${table.classComment}分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ${sceneEnum.prefixClass}${table.className}PageReqVO extends PageParam { + +#foreach ($column in $columns) +#if (${column.listOperation})##查询操作 +#if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 + @Schema(description = "${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private ${column.javaType}[] ${column.javaField}; +#else##情况二,非 Between 的时间 + #columnTpl('', '') +#end + +#end +#end +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/respVO.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/respVO.vm new file mode 100644 index 0000000..54c1667 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/respVO.vm @@ -0,0 +1,54 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +## 处理 BigDecimal 字段的引入 +import java.util.*; +#foreach ($column in $columns) +#if (${column.javaType} == "BigDecimal") +import java.math.BigDecimal; +#break +#end +#end +## 处理 LocalDateTime 字段的引入 +#foreach ($column in $columns) +#if (${column.listOperationResult} && ${column.javaType} == "LocalDateTime") +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +#break +#end +#end +## 处理 Excel 导出 +import com.alibaba.excel.annotation.*; +#foreach ($column in $columns) +#if ("$!column.dictType" != "")## 有设置数据字典 +import ${DictFormatClassName}; +import ${DictConvertClassName}; +#break +#end +#end + +@Schema(description = "${sceneEnum.name} - ${table.classComment} Response VO") +@Data +@ExcelIgnoreUnannotated +public class ${sceneEnum.prefixClass}${table.className}RespVO { + +## 逐个处理字段 +#foreach ($column in $columns) +#if (${column.listOperationResult}) +## 1. 处理 Swagger 注解 + @Schema(description = "${column.columnComment}"#if (!${column.nullable}), requiredMode = Schema.RequiredMode.REQUIRED#end#if ("$!column.example" != ""), example = "${column.example}"#end) +## 2. 处理 Excel 导出 +#if ("$!column.dictType" != "")##处理枚举值 + @ExcelProperty(value = "${column.columnComment}", converter = DictConvert.class) + @DictFormat("${column.dictType}") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 +#else + @ExcelProperty("${column.columnComment}") +#end +## 3. 处理字段定义 + private ${column.javaType} ${column.javaField}; + +#end +#end +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/saveReqVO.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/saveReqVO.vm new file mode 100644 index 0000000..b432c75 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/controller/vo/saveReqVO.vm @@ -0,0 +1,64 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import ${jakartaPackage}.validation.constraints.*; +## 处理 BigDecimal 字段的引入 +#foreach ($column in $columns) +#if (${column.javaType} == "BigDecimal") +import java.math.BigDecimal; +#break +#end +#end +## 处理 LocalDateTime 字段的引入 +#foreach ($column in $columns) +#if ((${column.createOperation} || ${column.updateOperation}) && ${column.javaType} == "LocalDateTime") +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +#break +#end +#end +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; +#end + +@Schema(description = "${sceneEnum.name} - ${table.classComment}新增/修改 Request VO") +@Data +public class ${sceneEnum.prefixClass}${table.className}SaveReqVO { + +## 逐个处理字段 +#foreach ($column in $columns) +#if (${column.createOperation} || ${column.updateOperation}) +## 1. 处理 Swagger 注解 + @Schema(description = "${column.columnComment}"#if (!${column.nullable}), requiredMode = Schema.RequiredMode.REQUIRED#end#if ("$!column.example" != ""), example = "${column.example}"#end) +## 2. 处理 Validator 参数校验 +#if (!${column.nullable} && !${column.primaryKey}) +#if (${column.javaType} == 'String') + @NotEmpty(message = "${column.columnComment}不能为空") +#else + @NotNull(message = "${column.columnComment}不能为空") +#end +#end +## 3. 处理字段定义 + private ${column.javaType} ${column.javaField}; + +#end +#end +## 特殊:主子表专属逻辑(非 ERP 模式) +#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 ) +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) + #if ( $subTable.subJoinMany) + @Schema(description = "${subTable.classComment}列表") + private List<${subTable.className}DO> ${subClassNameVars.get($index)}s; + + #else + @Schema(description = "${subTable.classComment}") + private ${subTable.className}DO ${subClassNameVars.get($index)}; + + #end +#end +#end +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/do.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/do.vm new file mode 100644 index 0000000..b019d6e --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/do.vm @@ -0,0 +1,52 @@ +package ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}; + +import lombok.*; +import java.util.*; +#foreach ($column in $columns) +#if (${column.javaType} == "BigDecimal") +import java.math.BigDecimal; +#end +#if (${column.javaType} == "LocalDateTime") +import java.time.LocalDateTime; +#end +#end +import com.baomidou.mybatisplus.annotation.*; +import ${BaseDOClassName}; + +/** + * ${table.classComment} DO + * + * @author ${table.author} + */ +@TableName("${table.tableName.toLowerCase()}") +@KeySequence("${table.tableName.toLowerCase()}_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ${table.className}DO extends BaseDO { + +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) + public static final Long ${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT = 0L; + +#end +#foreach ($column in $columns) +#if (!${baseDOFields.contains(${column.javaField})})##排除 BaseDO 的字段 + /** + * ${column.columnComment} + #if ("$!column.dictType" != "")##处理枚举值 + * + * 枚举 {@link TODO ${column.dictType} 对应的类} + #end + */ + #if (${column.primaryKey})##处理主键 + @TableId#if (${column.javaType} == 'String')(type = IdType.INPUT)#end + #end + private ${column.javaType} ${column.javaField}; +#end +#end + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/do_sub.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/do_sub.vm new file mode 100644 index 0000000..16be55e --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/do_sub.vm @@ -0,0 +1,49 @@ +#set ($subTable = $subTables.get($subIndex))##当前表 +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 +package ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}; + +import lombok.*; +import java.util.*; +#foreach ($column in $subColumns) +#if (${column.javaType} == "BigDecimal") +import java.math.BigDecimal; +#end +#if (${column.javaType} == "LocalDateTime") +import java.time.LocalDateTime; +#end +#end +import com.baomidou.mybatisplus.annotation.*; +import ${BaseDOClassName}; + +/** + * ${subTable.classComment} DO + * + * @author ${subTable.author} + */ +@TableName("${subTable.tableName.toLowerCase()}") +@KeySequence("${subTable.tableName.toLowerCase()}_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ${subTable.className}DO extends BaseDO { + +#foreach ($column in $subColumns) +#if (!${baseDOFields.contains(${column.javaField})})##排除 BaseDO 的字段 + /** + * ${column.columnComment} + #if ("$!column.dictType" != "")##处理枚举值 + * + * 枚举 {@link TODO ${column.dictType} 对应的类} + #end + */ + #if (${column.primaryKey})##处理主键 + @TableId#if (${column.javaType} == 'String')(type = IdType.INPUT)#end + #end + private ${column.javaType} ${column.javaField}; +#end +#end + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/mapper.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/mapper.vm new file mode 100644 index 0000000..b98b471 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/mapper.vm @@ -0,0 +1,82 @@ +package ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}; + +import java.util.*; + +import ${PageResultClassName}; +import ${QueryWrapperClassName}; +import ${BaseMapperClassName}; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +import org.apache.ibatis.annotations.Mapper; +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; + +## 字段模板 +#macro(listCondition) +#foreach ($column in $columns) +#if (${column.listOperation}) +#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 +#if (${column.listOperationCondition} == "=")##情况一,= 的时候 + .eqIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "!=")##情况二,!= 的时候 + .neIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == ">")##情况三,> 的时候 + .gtIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == ">=")##情况四,>= 的时候 + .geIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "<")##情况五,< 的时候 + .ltIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "<=")##情况五,<= 的时候 + .leIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "LIKE")##情况七,Like 的时候 + .likeIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "BETWEEN")##情况八,Between 的时候 + .betweenIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#end +#end +#end +/** + * ${table.classComment} Mapper + * + * @author ${table.author} + */ +@Mapper +public interface ${table.className}Mapper extends BaseMapperX<${table.className}DO> { + +## 特殊:树表专属逻辑(树不需要分页接口) +#if ( $table.templateType != 2 ) + default PageResult<${table.className}DO> selectPage(${sceneEnum.prefixClass}${table.className}PageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX<${table.className}DO>() + #listCondition() + .orderByDesc(${table.className}DO::getId));## 大多数情况下,id 倒序 + + } +#else + default List<${table.className}DO> selectList(${sceneEnum.prefixClass}${table.className}ListReqVO reqVO) { + return selectList(new LambdaQueryWrapperX<${table.className}DO>() + #listCondition() + .orderByDesc(${table.className}DO::getId));## 大多数情况下,id 倒序 + + } +#end + +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) +#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 +#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写 + default ${table.className}DO selectBy${TreeParentJavaField}And${TreeNameJavaField}(Long ${treeParentColumn.javaField}, String ${treeNameColumn.javaField}) { + return selectOne(${table.className}DO::get${TreeParentJavaField}, ${treeParentColumn.javaField}, ${table.className}DO::get${TreeNameJavaField}, ${treeNameColumn.javaField}); + } + + default Long selectCountBy${TreeParentJavaField}(${treeParentColumn.javaType} ${treeParentColumn.javaField}) { + return selectCount(${table.className}DO::get${TreeParentJavaField}, ${treeParentColumn.javaField}); + } + +#end +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/mapper.xml.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/mapper.xml.vm new file mode 100644 index 0000000..290378d --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/mapper.xml.vm @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/mapper_sub.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/mapper_sub.vm new file mode 100644 index 0000000..e5589e9 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/dal/mapper_sub.vm @@ -0,0 +1,51 @@ +#set ($subTable = $subTables.get($subIndex))##当前表 +#set ($subColumns = $subJoinColumnsList.get($subIndex))##当前字段数组 +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 +package ${basePackage}.module.${subTable.moduleName}.dal.mysql.${subTable.businessName}; + +import java.util.*; + +import ${PageResultClassName}; +import ${PageParamClassName}; +import ${QueryWrapperClassName}; +import ${BaseMapperClassName}; +import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; +import org.apache.ibatis.annotations.Mapper; + +/** + * ${subTable.classComment} Mapper + * + * @author ${subTable.author} + */ +@Mapper +public interface ${subTable.className}Mapper extends BaseMapperX<${subTable.className}DO> { + +## 情况一:MASTER_ERP 时,需要分查询页子表 +#if ( $table.templateType == 11 ) + default PageResult<${subTable.className}DO> selectPage(PageParam reqVO, ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return selectPage(reqVO, new LambdaQueryWrapperX<${subTable.className}DO>() + .eq(${subTable.className}DO::get${SubJoinColumnName}, ${subJoinColumn.javaField}) + .orderByDesc(${subTable.className}DO::getId));## 大多数情况下,id 倒序 + + } + +## 情况二:非 MASTER_ERP 时,需要列表查询子表 +#else + #if ( $subTable.subJoinMany) + default List<${subTable.className}DO> selectListBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return selectList(${subTable.className}DO::get${SubJoinColumnName}, ${subJoinColumn.javaField}); + } + + #else + default ${subTable.className}DO selectBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return selectOne(${subTable.className}DO::get${SubJoinColumnName}, ${subJoinColumn.javaField}); + } + + #end + #end + default int deleteBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return delete(${subTable.className}DO::get${SubJoinColumnName}, ${subJoinColumn.javaField}); + } + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/enums/errorcode.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/enums/errorcode.vm new file mode 100644 index 0000000..4097daa --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/enums/errorcode.vm @@ -0,0 +1,22 @@ +// TODO 待办:请将下面的错误码复制到 win-module-${table.moduleName}-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! +// ========== ${table.classComment} TODO 补充编号 ========== +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS = new ErrorCode(TODO 补充编号, "${table.classComment}不存在"); +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_EXITS_CHILDREN = new ErrorCode(TODO 补充编号, "存在存在子${table.classComment},无法删除"); +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_PARENT_NOT_EXITS = new ErrorCode(TODO 补充编号,"父级${table.classComment}不存在"); +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_PARENT_ERROR = new ErrorCode(TODO 补充编号, "不能设置自己为父${table.classComment}"); +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE = new ErrorCode(TODO 补充编号, "已经存在该${treeNameColumn.columnComment}的${table.classComment}"); +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_PARENT_IS_CHILD = new ErrorCode(TODO 补充编号, "不能设置自己的子${table.className}为父${table.className}"); +#end +## 特殊:主子表专属逻辑 +#if ( $table.templateType == 11 )## 特殊:ERP 情况 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($simpleClassNameUnderlineCase = $simpleClassNameUnderlineCases.get($index)) +ErrorCode ${simpleClassNameUnderlineCase.toUpperCase()}_NOT_EXISTS = new ErrorCode(TODO 补充编号, "${subTable.classComment}不存在"); +#if ( !$subTable.subJoinMany ) +ErrorCode ${simpleClassNameUnderlineCase.toUpperCase()}_EXISTS = new ErrorCode(TODO 补充编号, "${subTable.classComment}已存在"); +#end +#end +#end \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/service/service.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/service/service.vm new file mode 100644 index 0000000..c4ee4f0 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/service/service.vm @@ -0,0 +1,147 @@ +package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; + +import java.util.*; +import ${jakartaPackage}.validation.*; +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; +#end +import ${PageResultClassName}; +import ${PageParamClassName}; + +/** + * ${table.classComment} Service 接口 + * + * @author ${table.author} + */ +public interface ${table.className}Service { + + /** + * 创建${table.classComment} + * + * @param createReqVO 创建信息 + * @return 编号 + */ + ${primaryColumn.javaType} create${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO); + + /** + * 更新${table.classComment} + * + * @param updateReqVO 更新信息 + */ + void update${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO); + + /** + * 删除${table.classComment} + * + * @param id 编号 + */ + void delete${simpleClassName}(${primaryColumn.javaType} id); + + /** + * 获得${table.classComment} + * + * @param id 编号 + * @return ${table.classComment} + */ + ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id); + +## 特殊:树表专属逻辑(树不需要分页接口) +#if ( $table.templateType != 2 ) + /** + * 获得${table.classComment}分页 + * + * @param pageReqVO 分页查询 + * @return ${table.classComment}分页 + */ + PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO); +#else + /** + * 获得${table.classComment}列表 + * + * @param listReqVO 查询条件 + * @return ${table.classComment}列表 + */ + List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO); +#end + +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 +#set ($subClassNameVar = $subClassNameVars.get($index)) + // ==================== 子表($subTable.classComment) ==================== + +## 情况一:MASTER_ERP 时,需要分查询页子表 +#if ( $table.templateType == 11 ) + /** + * 获得${subTable.classComment}分页 + * + * @param pageReqVO 分页查询 + * @param ${subJoinColumn.javaField} ${subJoinColumn.columnComment} + * @return ${subTable.classComment}分页 + */ + PageResult<${subTable.className}DO> get${subSimpleClassName}Page(PageParam pageReqVO, ${subJoinColumn.javaType} ${subJoinColumn.javaField}); + +## 情况二:非 MASTER_ERP 时,需要列表查询子表 +#else + #if ( $subTable.subJoinMany ) + /** + * 获得${subTable.classComment}列表 + * + * @param ${subJoinColumn.javaField} ${subJoinColumn.columnComment} + * @return ${subTable.classComment}列表 + */ + List<${subTable.className}DO> get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}); + + #else + /** + * 获得${subTable.classComment} + * + * @param ${subJoinColumn.javaField} ${subJoinColumn.columnComment} + * @return ${subTable.classComment} + */ + ${subTable.className}DO get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}); + + #end +#end +## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 +#if ( $table.templateType == 11 ) + /** + * 创建${subTable.classComment} + * + * @param ${subClassNameVar} 创建信息 + * @return 编号 + */ + ${subPrimaryColumn.javaType} create${subSimpleClassName}(@Valid ${subTable.className}DO ${subClassNameVar}); + + /** + * 更新${subTable.classComment} + * + * @param ${subClassNameVar} 更新信息 + */ + void update${subSimpleClassName}(@Valid ${subTable.className}DO ${subClassNameVar}); + + /** + * 删除${subTable.classComment} + * + * @param id 编号 + */ + void delete${subSimpleClassName}(${subPrimaryColumn.javaType} id); + + /** + * 获得${subTable.classComment} + * + * @param id 编号 + * @return ${subTable.classComment} + */ + ${subTable.className}DO get${subSimpleClassName}(${subPrimaryColumn.javaType} id); + +#end +#end +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/service/serviceImpl.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/service/serviceImpl.vm new file mode 100644 index 0000000..a8184e4 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/service/serviceImpl.vm @@ -0,0 +1,350 @@ +package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; + +import org.springframework.stereotype.Service; +import ${jakartaPackage}.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; +#end +import ${PageResultClassName}; +import ${PageParamClassName}; +import ${BeanUtils}; + +import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +import ${basePackage}.module.${subTable.moduleName}.dal.mysql.${subTable.businessName}.${subTable.className}Mapper; +#end + +import static ${ServiceExceptionUtilClassName}.exception; +import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*; + +/** + * ${table.classComment} Service 实现类 + * + * @author ${table.author} + */ +@Service +@Validated +public class ${table.className}ServiceImpl implements ${table.className}Service { + + @Resource + private ${table.className}Mapper ${classNameVar}Mapper; +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) + @Resource + private ${subTable.className}Mapper ${subClassNameVars.get($index)}Mapper; +#end + + @Override +## 特殊:主子表专属逻辑(非 ERP 模式) +#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 ) + @Transactional(rollbackFor = Exception.class) +#end + public ${primaryColumn.javaType} create${simpleClassName}(${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO) { +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) +#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 +#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写 + // 校验${treeParentColumn.columnComment}的有效性 + validateParent${simpleClassName}(null, createReqVO.get${TreeParentJavaField}()); + // 校验${treeNameColumn.columnComment}的唯一性 + validate${simpleClassName}${TreeNameJavaField}Unique(null, createReqVO.get${TreeParentJavaField}(), createReqVO.get${TreeNameJavaField}()); + +#end + // 插入 + ${table.className}DO ${classNameVar} = BeanUtils.toBean(createReqVO, ${table.className}DO.class); + ${classNameVar}Mapper.insert(${classNameVar}); +## 特殊:主子表专属逻辑(非 ERP 模式) +#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 ) + + // 插入子表 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + #if ( $subTable.subJoinMany) + create${subSimpleClassName}List(${classNameVar}.getId(), createReqVO.get${subSimpleClassNames.get($index)}s()); + #else + create${subSimpleClassName}(${classNameVar}.getId(), createReqVO.get${subSimpleClassNames.get($index)}()); + #end +#end +#end + // 返回 + return ${classNameVar}.getId(); + } + + @Override +## 特殊:主子表专属逻辑(非 ERP 模式) +#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 ) + @Transactional(rollbackFor = Exception.class) +#end + public void update${simpleClassName}(${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO) { + // 校验存在 + validate${simpleClassName}Exists(updateReqVO.getId()); +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) +#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 +#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写 + // 校验${treeParentColumn.columnComment}的有效性 + validateParent${simpleClassName}(updateReqVO.getId(), updateReqVO.get${TreeParentJavaField}()); + // 校验${treeNameColumn.columnComment}的唯一性 + validate${simpleClassName}${TreeNameJavaField}Unique(updateReqVO.getId(), updateReqVO.get${TreeParentJavaField}(), updateReqVO.get${TreeNameJavaField}()); + +#end + // 更新 + ${table.className}DO updateObj = BeanUtils.toBean(updateReqVO, ${table.className}DO.class); + ${classNameVar}Mapper.updateById(updateObj); +## 特殊:主子表专属逻辑(非 ERP 模式) +#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11) + + // 更新子表 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + #if ( $subTable.subJoinMany) + update${subSimpleClassName}List(updateReqVO.getId(), updateReqVO.get${subSimpleClassNames.get($index)}s()); + #else + update${subSimpleClassName}(updateReqVO.getId(), updateReqVO.get${subSimpleClassNames.get($index)}()); + #end +#end +#end + } + + @Override +## 特殊:主子表专属逻辑 +#if ( $subTables && $subTables.size() > 0) + @Transactional(rollbackFor = Exception.class) +#end + public void delete${simpleClassName}(${primaryColumn.javaType} id) { + // 校验存在 + validate${simpleClassName}Exists(id); +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) +#set ($ParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 + // 校验是否有子${table.classComment} + if (${classNameVar}Mapper.selectCountBy${ParentJavaField}(id) > 0) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_EXITS_CHILDREN); + } +#end + // 删除 + ${classNameVar}Mapper.deleteById(id); +## 特殊:主子表专属逻辑 +#if ( $subTables && $subTables.size() > 0) + + // 删除子表 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + delete${subSimpleClassName}By${SubJoinColumnName}(id); +#end +#end + } + + private void validate${simpleClassName}Exists(${primaryColumn.javaType} id) { + if (${classNameVar}Mapper.selectById(id) == null) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); + } + } + +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) +#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 +#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写 + private void validateParent${simpleClassName}(Long id, Long ${treeParentColumn.javaField}) { + if (${treeParentColumn.javaField} == null || ${simpleClassName}DO.${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT.equals(${treeParentColumn.javaField})) { + return; + } + // 1. 不能设置自己为父${table.classComment} + if (Objects.equals(id, ${treeParentColumn.javaField})) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_ERROR); + } + // 2. 父${table.classComment}不存在 + ${simpleClassName}DO parent${simpleClassName} = ${classNameVar}Mapper.selectById(${treeParentColumn.javaField}); + if (parent${simpleClassName} == null) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_NOT_EXITS); + } + // 3. 递归校验父${table.classComment},如果父${table.classComment}是自己的子${table.classComment},则报错,避免形成环路 + if (id == null) { // id 为空,说明新增,不需要考虑环路 + return; + } + for (int i = 0; i < Short.MAX_VALUE; i++) { + // 3.1 校验环路 + ${treeParentColumn.javaField} = parent${simpleClassName}.get${TreeParentJavaField}(); + if (Objects.equals(id, ${treeParentColumn.javaField})) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_IS_CHILD); + } + // 3.2 继续递归下一级父${table.classComment} + if (${treeParentColumn.javaField} == null || ${simpleClassName}DO.${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT.equals(${treeParentColumn.javaField})) { + break; + } + parent${simpleClassName} = ${classNameVar}Mapper.selectById(${treeParentColumn.javaField}); + if (parent${simpleClassName} == null) { + break; + } + } + } + + private void validate${simpleClassName}${TreeNameJavaField}Unique(Long id, Long ${treeParentColumn.javaField}, String ${treeNameColumn.javaField}) { + ${simpleClassName}DO ${classNameVar} = ${classNameVar}Mapper.selectBy${TreeParentJavaField}And${TreeNameJavaField}(${treeParentColumn.javaField}, ${treeNameColumn.javaField}); + if (${classNameVar} == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的${table.classComment} + if (id == null) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE); + } + if (!Objects.equals(${classNameVar}.getId(), id)) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE); + } + } + +#end + @Override + public ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id) { + return ${classNameVar}Mapper.selectById(id); + } + +## 特殊:树表专属逻辑(树不需要分页接口) +#if ( $table.templateType != 2 ) + @Override + public PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) { + return ${classNameVar}Mapper.selectPage(pageReqVO); + } +#else + @Override + public List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) { + return ${classNameVar}Mapper.selectList(listReqVO); + } +#end + +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($simpleClassNameUnderlineCase = $simpleClassNameUnderlineCases.get($index)) +#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 +#set ($subClassNameVar = $subClassNameVars.get($index)) + // ==================== 子表($subTable.classComment) ==================== + +## 情况一:MASTER_ERP 时,需要分查询页子表 +#if ( $table.templateType == 11 ) + @Override + public PageResult<${subTable.className}DO> get${subSimpleClassName}Page(PageParam pageReqVO, ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return ${subClassNameVars.get($index)}Mapper.selectPage(pageReqVO, ${subJoinColumn.javaField}); + } + +## 情况二:非 MASTER_ERP 时,需要列表查询子表 +#else + #if ( $subTable.subJoinMany ) + @Override + public List<${subTable.className}DO> get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return ${subClassNameVars.get($index)}Mapper.selectListBy${SubJoinColumnName}(${subJoinColumn.javaField}); + } + + #else + @Override + public ${subTable.className}DO get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return ${subClassNameVars.get($index)}Mapper.selectBy${SubJoinColumnName}(${subJoinColumn.javaField}); + } + + #end +#end +## 情况一:MASTER_ERP 时,支持单个的新增、修改、删除操作 +#if ( $table.templateType == 11 ) + @Override + public ${subPrimaryColumn.javaType} create${subSimpleClassName}(${subTable.className}DO ${subClassNameVar}) { +## 特殊:一对一时,需要保证只有一条,不能重复插入 +#if ( !$subTable.subJoinMany) + // 校验是否已经存在 + if (${subClassNameVars.get($index)}Mapper.selectBy${SubJoinColumnName}(${subClassNameVar}.get${SubJoinColumnName}()) != null) { + throw exception(${simpleClassNameUnderlineCase.toUpperCase()}_EXISTS); + } + // 插入 +#end + ${subClassNameVars.get($index)}Mapper.insert(${subClassNameVar}); + return ${subClassNameVar}.getId(); + } + + @Override + public void update${subSimpleClassName}(${subTable.className}DO ${subClassNameVar}) { + // 校验存在 + validate${subSimpleClassName}Exists(${subClassNameVar}.getId()); + // 更新 + ${subClassNameVars.get($index)}Mapper.updateById(${subClassNameVar}); + } + + @Override + public void delete${subSimpleClassName}(${subPrimaryColumn.javaType} id) { + // 校验存在 + validate${subSimpleClassName}Exists(id); + // 删除 + ${subClassNameVars.get($index)}Mapper.deleteById(id); + } + + @Override + public ${subTable.className}DO get${subSimpleClassName}(${subPrimaryColumn.javaType} id) { + return ${subClassNameVars.get($index)}Mapper.selectById(id); + } + + private void validate${subSimpleClassName}Exists(${subPrimaryColumn.javaType} id) { + if (${subClassNameVar}Mapper.selectById(id) == null) { + throw exception(${simpleClassNameUnderlineCase.toUpperCase()}_NOT_EXISTS); + } + } + +## 情况二:非 MASTER_ERP 时,支持批量的新增、修改操作 +#else + #if ( $subTable.subJoinMany) + private void create${subSimpleClassName}List(${primaryColumn.javaType} ${subJoinColumn.javaField}, List<${subTable.className}DO> list) { + list.forEach(o -> o.set$SubJoinColumnName(${subJoinColumn.javaField})); + ${subClassNameVars.get($index)}Mapper.insertBatch(list); + } + + private void update${subSimpleClassName}List(${primaryColumn.javaType} ${subJoinColumn.javaField}, List<${subTable.className}DO> list) { + delete${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField}); + list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲突;2)updateTime 不更新 + create${subSimpleClassName}List(${subJoinColumn.javaField}, list); + } + + #else + private void create${subSimpleClassName}(${primaryColumn.javaType} ${subJoinColumn.javaField}, ${subTable.className}DO ${subClassNameVar}) { + if (${subClassNameVar} == null) { + return; + } + ${subClassNameVar}.set$SubJoinColumnName(${subJoinColumn.javaField}); + ${subClassNameVars.get($index)}Mapper.insert(${subClassNameVar}); + } + + private void update${subSimpleClassName}(${primaryColumn.javaType} ${subJoinColumn.javaField}, ${subTable.className}DO ${subClassNameVar}) { + if (${subClassNameVar} == null) { + return; + } + ${subClassNameVar}.set$SubJoinColumnName(${subJoinColumn.javaField}); + ${subClassNameVar}.setUpdater(null).setUpdateTime(null); // 解决更新情况下:updateTime 不更新 + ${subClassNameVars.get($index)}Mapper.insertOrUpdate(${subClassNameVar}); + } + + #end +#end + private void delete${subSimpleClassName}By${SubJoinColumnName}(${primaryColumn.javaType} ${subJoinColumn.javaField}) { + ${subClassNameVars.get($index)}Mapper.deleteBy${SubJoinColumnName}(${subJoinColumn.javaField}); + } + +#end +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/test/serviceTest.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/test/serviceTest.vm new file mode 100644 index 0000000..bfd4600 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/java/test/serviceTest.vm @@ -0,0 +1,168 @@ +package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import ${jakartaPackage}.annotation.Resource; + +import ${baseFrameworkPackage}.test.core.ut.BaseDbUnitTest; + +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; +import ${PageResultClassName}; + +import ${jakartaPackage}.annotation.Resource; +import org.springframework.context.annotation.Import; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*; +import static ${baseFrameworkPackage}.test.core.util.AssertUtils.*; +import static ${baseFrameworkPackage}.test.core.util.RandomUtils.*; +import static ${LocalDateTimeUtilsClassName}.*; +import static ${ObjectUtilsClassName}.*; +import static ${DateUtilsClassName}.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +## 字段模板 +#macro(getPageCondition $VO) + // mock 数据 + ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class, o -> { // 等会查询到 + #foreach ($column in $columns) + #if (${column.listOperation}) + #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 + o.set$JavaField(null); + #end + #end + }); + ${classNameVar}Mapper.insert(db${simpleClassName}); + #foreach ($column in $columns) + #if (${column.listOperation}) + #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 + // 测试 ${column.javaField} 不匹配 + ${classNameVar}Mapper.insert(cloneIgnoreId(db${simpleClassName}, o -> o.set$JavaField(null))); + #end + #end + // 准备参数 + ${sceneEnum.prefixClass}${table.className}${VO} reqVO = new ${sceneEnum.prefixClass}${table.className}${VO}(); + #foreach ($column in $columns) + #if (${column.listOperation}) + #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 + #if (${column.listOperationCondition} == "BETWEEN")## BETWEEN 的情况 + reqVO.set${JavaField}(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + #else + reqVO.set$JavaField(null); + #end + #end + #end +#end +/** + * {@link ${table.className}ServiceImpl} 的单元测试类 + * + * @author ${table.author} + */ +@Import(${table.className}ServiceImpl.class) +public class ${table.className}ServiceImplTest extends BaseDbUnitTest { + + @Resource + private ${table.className}ServiceImpl ${classNameVar}Service; + + @Resource + private ${table.className}Mapper ${classNameVar}Mapper; + + @Test + public void testCreate${simpleClassName}_success() { + // 准备参数 + ${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class).setId(null); + + // 调用 + ${primaryColumn.javaType} ${classNameVar}Id = ${classNameVar}Service.create${simpleClassName}(createReqVO); + // 断言 + assertNotNull(${classNameVar}Id); + // 校验记录的属性是否正确 + ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(${classNameVar}Id); + assertPojoEquals(createReqVO, ${classNameVar}, "id"); + } + + @Test + public void testUpdate${simpleClassName}_success() { + // mock 数据 + ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class); + ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据 + // 准备参数 + ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class, o -> { + o.setId(db${simpleClassName}.getId()); // 设置更新的 ID + }); + + // 调用 + ${classNameVar}Service.update${simpleClassName}(updateReqVO); + // 校验是否更新正确 + ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, ${classNameVar}); + } + + @Test + public void testUpdate${simpleClassName}_notExists() { + // 准备参数 + ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> ${classNameVar}Service.update${simpleClassName}(updateReqVO), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); + } + + @Test + public void testDelete${simpleClassName}_success() { + // mock 数据 + ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class); + ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据 + // 准备参数 + ${primaryColumn.javaType} id = db${simpleClassName}.getId(); + + // 调用 + ${classNameVar}Service.delete${simpleClassName}(id); + // 校验数据不存在了 + assertNull(${classNameVar}Mapper.selectById(id)); + } + + @Test + public void testDelete${simpleClassName}_notExists() { + // 准备参数 + ${primaryColumn.javaType} id = random${primaryColumn.javaType}Id(); + + // 调用, 并断言异常 + assertServiceException(() -> ${classNameVar}Service.delete${simpleClassName}(id), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); + } + +## 特殊:树表专属逻辑(树不需要分页接口) +#if ( $table.templateType != 2 ) + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGet${simpleClassName}Page() { + #getPageCondition("PageReqVO") + + // 调用 + PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(db${simpleClassName}, pageResult.getList().get(0)); + } +#else + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGet${simpleClassName}List() { + #getPageCondition("ListReqVO") + + // 调用 + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(reqVO); + // 断言 + assertEquals(1, list.size()); + assertPojoEquals(db${simpleClassName}, list.get(0)); + } +#end + +} \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/sql/h2.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/sql/h2.vm new file mode 100644 index 0000000..77dec0e --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/sql/h2.vm @@ -0,0 +1,37 @@ +-- 将该建表 SQL 语句,添加到 win-module-${table.moduleName}-biz 模块的 test/resources/sql/create_tables.sql 文件里 +CREATE TABLE IF NOT EXISTS "${table.tableName.toLowerCase()}" ( +#foreach ($column in $columns) +#if (${column.javaType} == 'Long') + #set ($dataType='bigint') +#elseif (${column.javaType} == 'Integer') + #set ($dataType='int') +#elseif (${column.javaType} == 'Boolean') + #set ($dataType='bit') +#elseif (${column.javaType} == 'Date') + #set ($dataType='datetime') +#else + #set ($dataType='varchar') +#end + #if (${column.primaryKey})##处理主键 + "${column.javaField}"#if (${column.javaType} == 'String') ${dataType} NOT NULL#else ${dataType} NOT NULL GENERATED BY DEFAULT AS IDENTITY#end, + #else + #if (${column.columnName} == 'create_time') + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + #elseif (${column.columnName} == 'update_time') + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + #elseif (${column.columnName} == 'creator' || ${column.columnName} == 'updater') + "${column.columnName}" ${dataType} DEFAULT '', + #elseif (${column.columnName} == 'deleted') + "deleted" bit NOT NULL DEFAULT FALSE, + #elseif (${column.columnName} == 'tenantId') + "tenant_id" bigint NOT NULL DEFAULT 0, + #else + "${column.columnName.toLowerCase()}" ${dataType}#if (${column.nullable} == false) NOT NULL#end, + #end + #end +#end + PRIMARY KEY ("${primaryColumn.columnName.toLowerCase()}") +) COMMENT '${table.tableComment}'; + +-- 将该删表 SQL 语句,添加到 win-module-${table.moduleName}-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "${table.tableName}"; \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/sql/sql.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/sql/sql.vm new file mode 100644 index 0000000..41b107d --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/sql/sql.vm @@ -0,0 +1,28 @@ +-- 菜单 SQL +INSERT INTO system_menu( + name, permission, type, sort, parent_id, + path, icon, component, status, component_name +) +VALUES ( + '${table.classComment}管理', '', 2, 0, ${table.parentMenuId}, + '${simpleClassName_strikeCase}', '', '${table.moduleName}/${table.businessName}/index', 0, '${table.className}' +); + +-- 按钮父菜单ID +-- 暂时只支持 MySQL。如果你是 Oracle、PostgreSQL、SQLServer 的话,需要手动修改 @parentId 的部分的代码 +SELECT @parentId := LAST_INSERT_ID(); + +-- 按钮 SQL +#set ($functionNames = ['查询', '创建', '更新', '删除', '导出']) +#set ($functionOps = ['query', 'create', 'update', 'delete', 'export']) +#foreach ($functionName in $functionNames) +#set ($index = $foreach.count - 1) +INSERT INTO system_menu( + name, permission, type, sort, parent_id, + path, icon, component, status +) +VALUES ( + '${table.classComment}${functionName}', '${permissionPrefix}:${functionOps.get($index)}', 3, $foreach.count, @parentId, + '', '', '', 0 +); +#end \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/api/api.js.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/api/api.js.vm new file mode 100644 index 0000000..835c019 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/api/api.js.vm @@ -0,0 +1,141 @@ +import request from '@/utils/request' +#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") + +// 创建${table.classComment} +export function create${simpleClassName}(data) { + return request({ + url: '${baseURL}/create', + method: 'post', + data: data + }) +} + +// 更新${table.classComment} +export function update${simpleClassName}(data) { + return request({ + url: '${baseURL}/update', + method: 'put', + data: data + }) +} + +// 删除${table.classComment} +export function delete${simpleClassName}(id) { + return request({ + url: '${baseURL}/delete?id=' + id, + method: 'delete' + }) +} + +// 获得${table.classComment} +export function get${simpleClassName}(id) { + return request({ + url: '${baseURL}/get?id=' + id, + method: 'get' + }) +} + +#if ( $table.templateType != 2 ) +// 获得${table.classComment}分页 +export function get${simpleClassName}Page(params) { + return request({ + url: '${baseURL}/page', + method: 'get', + params + }) +} +#else +// 获得${table.classComment}列表 +export function get${simpleClassName}List(params) { + return request({ + url: '${baseURL}/list', + method: 'get', + params + }) +} +#end +// 导出${table.classComment} Excel +export function export${simpleClassName}Excel(params) { + return request({ + url: '${baseURL}/export-excel', + method: 'get', + params, + responseType: 'blob' + }) +} +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) + #set ($index = $foreach.count - 1) + #set ($subSimpleClassName = $subSimpleClassNames.get($index)) + #set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 + #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 + #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index)) + #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) + #set ($subClassNameVar = $subClassNameVars.get($index)) + +// ==================== 子表($subTable.classComment) ==================== + ## 情况一:MASTER_ERP 时,需要分查询页子表 + #if ($table.templateType == 11) + // 获得${subTable.classComment}分页 + export function get${subSimpleClassName}Page(params) { + return request({ + url: '${baseURL}/${subSimpleClassName_strikeCase}/page', + method: 'get', + params + }) + } + ## 情况二:非 MASTER_ERP 时,需要列表查询子表 + #else + #if ($subTable.subJoinMany) + // 获得${subTable.classComment}列表 + export function get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaField}) { + return request({ + url: '${baseURL}/${subSimpleClassName_strikeCase}/list-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=' + ${subJoinColumn.javaField}, + method: 'get' + }) + } + #else + // 获得${subTable.classComment} + export function get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField}) { + return request({ + url: '${baseURL}/${subSimpleClassName_strikeCase}/get-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=' + ${subJoinColumn.javaField}, + method: 'get' + }) + } + #end + #end + ## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 + #if ($table.templateType == 11) + // 新增${subTable.classComment} + export function create${subSimpleClassName}(data) { + return request({ + url: '${baseURL}/${subSimpleClassName_strikeCase}/create', + method: 'post', + data + }) + } + // 修改${subTable.classComment} + export function update${subSimpleClassName}(data) { + return request({ + url: '${baseURL}/${subSimpleClassName_strikeCase}/update', + method: 'post', + data + }) + } + // 删除${subTable.classComment} + export function delete${subSimpleClassName}(id) { + return request({ + url: '${baseURL}/${subSimpleClassName_strikeCase}/delete?id=' + id, + method: 'delete' + }) + } + // 获得${subTable.classComment} + export function get${subSimpleClassName}(id) { + return request({ + url: '${baseURL}/${subSimpleClassName_strikeCase}/get?id=' + id, + method: 'get' + }) + } + #end +#end \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/form_sub_erp.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/form_sub_erp.vue.vm new file mode 100644 index 0000000..99aa91a --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/form_sub_erp.vue.vm @@ -0,0 +1,205 @@ +#set ($subTable = $subTables.get($subIndex))##当前表 +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 +#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 + + + diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/form_sub_inner.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/form_sub_inner.vue.vm new file mode 100644 index 0000000..ca266be --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/form_sub_inner.vue.vm @@ -0,0 +1,2 @@ +## 主表的 normal 和 inner 使用相同的 form 表单 +#parse("codegen/vue/views/components/form_sub_normal.vue.vm") \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/form_sub_normal.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/form_sub_normal.vue.vm new file mode 100644 index 0000000..48a404a --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/form_sub_normal.vue.vm @@ -0,0 +1,347 @@ +#set ($subTable = $subTables.get($subIndex))##当前表 +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + + + diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/list_sub_erp.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/list_sub_erp.vue.vm new file mode 100644 index 0000000..589736b --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/list_sub_erp.vue.vm @@ -0,0 +1,165 @@ +#set ($subTable = $subTables.get($subIndex))##当前表 +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + + + diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/list_sub_inner.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/list_sub_inner.vue.vm new file mode 100644 index 0000000..90b8e41 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/components/list_sub_inner.vue.vm @@ -0,0 +1,4 @@ +## 子表的 erp 和 inner 使用相似的 list 列表,差异主要两点: +## 1)inner 使用 list 不分页,erp 使用 page 分页 +## 2)erp 支持单个子表的新增、修改、删除,inner 不支持 +#parse("codegen/vue/views/components/list_sub_erp.vue.vm") \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/form.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/form.vue.vm new file mode 100644 index 0000000..634d05d --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/form.vue.vm @@ -0,0 +1,320 @@ + + + diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/index.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/index.vue.vm new file mode 100644 index 0000000..2328007 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue/views/index.vue.vm @@ -0,0 +1,340 @@ + + + diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm new file mode 100644 index 0000000..c3044fb --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm @@ -0,0 +1,115 @@ +import request from '@/config/axios' +#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") + +// ${table.classComment} VO +export interface ${simpleClassName}VO { +#foreach ($column in $columns) +#if ($column.createOperation || $column.updateOperation) +#if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "short" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal") + ${column.javaField}: number // ${column.columnComment} +#elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdate" || ${column.javaType.toLowerCase()} == "localdatetime") + ${column.javaField}: Date // ${column.columnComment} +#else + ${column.javaField}: ${column.javaType.toLowerCase()} // ${column.columnComment} +#end +#end +#end +} + +// ${table.classComment} API +export const ${simpleClassName}Api = { +#if ( $table.templateType != 2 ) + // 查询${table.classComment}分页 + get${simpleClassName}Page: async (params: any) => { + return await request.get({ url: `${baseURL}/page`, params }) + }, +#else + // 查询${table.classComment}列表 + get${simpleClassName}List: async (params) => { + return await request.get({ url: `${baseURL}/list`, params }) + }, +#end + + // 查询${table.classComment}详情 + get${simpleClassName}: async (id: number) => { + return await request.get({ url: `${baseURL}/get?id=` + id }) + }, + + // 新增${table.classComment} + create${simpleClassName}: async (data: ${simpleClassName}VO) => { + return await request.post({ url: `${baseURL}/create`, data }) + }, + + // 修改${table.classComment} + update${simpleClassName}: async (data: ${simpleClassName}VO) => { + return await request.put({ url: `${baseURL}/update`, data }) + }, + + // 删除${table.classComment} + delete${simpleClassName}: async (id: number) => { + return await request.delete({ url: `${baseURL}/delete?id=` + id }) + }, + + // 导出${table.classComment} Excel + export${simpleClassName}: async (params) => { + return await request.download({ url: `${baseURL}/export-excel`, params }) + }, +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 +#set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index)) +#set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) +#set ($subClassNameVar = $subClassNameVars.get($index)) + +// ==================== 子表($subTable.classComment) ==================== +## 情况一:MASTER_ERP 时,需要分查询页子表 +#if ( $table.templateType == 11 ) + + // 获得${subTable.classComment}分页 + get${subSimpleClassName}Page: async (params) => { + return await request.get({ url: `${baseURL}/${subSimpleClassName_strikeCase}/page`, params }) + }, +## 情况二:非 MASTER_ERP 时,需要列表查询子表 +#else + #if ( $subTable.subJoinMany ) + + // 获得${subTable.classComment}列表 + get${subSimpleClassName}ListBy${SubJoinColumnName}: async (${subJoinColumn.javaField}) => { + return await request.get({ url: `${baseURL}/${subSimpleClassName_strikeCase}/list-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=` + ${subJoinColumn.javaField} }) + }, + #else + + // 获得${subTable.classComment} + get${subSimpleClassName}By${SubJoinColumnName}: async (${subJoinColumn.javaField}) => { + return await request.get({ url: `${baseURL}/${subSimpleClassName_strikeCase}/get-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=` + ${subJoinColumn.javaField} }) + }, + #end +#end +## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 +#if ( $table.templateType == 11 ) + // 新增${subTable.classComment} + create${subSimpleClassName}: async (data) => { + return await request.post({ url: `${baseURL}/${subSimpleClassName_strikeCase}/create`, data }) + }, + + // 修改${subTable.classComment} + update${subSimpleClassName}: async (data) => { + return await request.put({ url: `${baseURL}/${subSimpleClassName_strikeCase}/update`, data }) + }, + + // 删除${subTable.classComment} + delete${subSimpleClassName}: async (id: number) => { + return await request.delete({ url: `${baseURL}/${subSimpleClassName_strikeCase}/delete?id=` + id }) + }, + + // 获得${subTable.classComment} + get${subSimpleClassName}: async (id: number) => { + return await request.get({ url: `${baseURL}/${subSimpleClassName_strikeCase}/get?id=` + id }) + }, +#end +#end +} diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_erp.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_erp.vue.vm new file mode 100644 index 0000000..3996a9c --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_erp.vue.vm @@ -0,0 +1,205 @@ +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 +#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 + + \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_inner.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_inner.vue.vm new file mode 100644 index 0000000..d8542c3 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_inner.vue.vm @@ -0,0 +1,2 @@ +## 主表的 normal 和 inner 使用相同的 form 表单 +#parse("codegen/vue3/views/components/form_sub_normal.vue.vm") \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_normal.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_normal.vue.vm new file mode 100644 index 0000000..dbd0356 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_normal.vue.vm @@ -0,0 +1,362 @@ +#set ($subTable = $subTables.get($subIndex))##当前表 +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + + \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/list_sub_erp.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/list_sub_erp.vue.vm new file mode 100644 index 0000000..3f0710e --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/list_sub_erp.vue.vm @@ -0,0 +1,184 @@ +#set ($subTable = $subTables.get($subIndex))##当前表 +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + + \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/list_sub_inner.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/list_sub_inner.vue.vm new file mode 100644 index 0000000..3fe6488 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/components/list_sub_inner.vue.vm @@ -0,0 +1,4 @@ +## 子表的 erp 和 inner 使用相似的 list 列表,差异主要两点: +## 1)inner 使用 list 不分页,erp 使用 page 分页 +## 2)erp 支持单个子表的新增、修改、删除,inner 不支持 +#parse("codegen/vue3/views/components/list_sub_erp.vue.vm") \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/form.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/form.vue.vm new file mode 100644 index 0000000..8e3596b --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/form.vue.vm @@ -0,0 +1,301 @@ + + \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm new file mode 100644 index 0000000..361d379 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm @@ -0,0 +1,374 @@ + + + \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/api/api.ts.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/api/api.ts.vm new file mode 100644 index 0000000..48cd542 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/api/api.ts.vm @@ -0,0 +1,46 @@ +import request from '@/config/axios' +#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") + +export interface ${simpleClassName}VO { + #foreach ($column in $columns) + #if ($column.createOperation || $column.updateOperation) + #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal") + ${column.javaField}: number + #elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdatetime") + ${column.javaField}: Date + #else + ${column.javaField}: ${column.javaType.toLowerCase()} + #end + #end + #end +} + +// 查询${table.classComment}列表 +export const get${simpleClassName}Page = async (params) => { + return await request.get({ url: '${baseURL}/page', params }) +} + +// 查询${table.classComment}详情 +export const get${simpleClassName} = async (id: number) => { + return await request.get({ url: '${baseURL}/get?id=' + id }) +} + +// 新增${table.classComment} +export const create${simpleClassName} = async (data: ${simpleClassName}VO) => { + return await request.post({ url: '${baseURL}/create', data }) +} + +// 修改${table.classComment} +export const update${simpleClassName} = async (data: ${simpleClassName}VO) => { + return await request.put({ url: '${baseURL}/update', data }) +} + +// 删除${table.classComment} +export const delete${simpleClassName} = async (id: number) => { + return await request.delete({ url: '${baseURL}/delete?id=' + id }) +} + +// 导出${table.classComment} Excel +export const export${simpleClassName}Api = async (params) => { + return await request.download({ url: '${baseURL}/export-excel', params }) +} diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/views/data.ts.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/views/data.ts.vm new file mode 100644 index 0000000..ff4fa81 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/views/data.ts.vm @@ -0,0 +1,124 @@ +import type { CrudSchema } from '@/hooks/web/useCrudSchemas' +import { dateFormatter } from '@/utils/formatTime' + +// 表单校验 +export const rules = reactive({ +#foreach ($column in $columns) +#if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键 +#set($comment=$column.columnComment) + $column.javaField: [required], +#end +#end +}) + +// CrudSchema https://doc.iocoder.cn/vue3/crud-schema/ +const crudSchemas = reactive([ +#foreach($column in $columns) +#if ($column.listOperation || $column.listOperationResult || $column.createOperation || $column.updateOperation) +#set ($dictType = $column.dictType) +#set ($javaField = $column.javaField) +#set ($javaType = $column.javaType) + { + label: '${column.columnComment}', + field: '${column.javaField}', +## ========= 字典部分 ========= + #if ("" != $dictType)## 有数据字典 + dictType: DICT_TYPE.$dictType.toUpperCase(), + #if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short") + dictClass: 'number', + #elseif ($javaType == "String") + dictClass: 'string', + #elseif ($javaType == "Boolean") + dictClass: 'boolean', + #end + #end +## ========= Table 表格部分 ========= + #if (!$column.listOperationResult) + isTable: false, + #else + #if ($column.htmlType == "datetime") + formatter: dateFormatter, + #end + #end +## ========= Search 表格部分 ========= + #if ($column.listOperation) + isSearch: true, + #if ($column.htmlType == "datetime") + search: { + component: 'DatePicker', + componentProps: { + valueFormat: 'YYYY-MM-DD HH:mm:ss', + type: 'daterange', + defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')] + } + }, + #end + #end +## ========= Form 表单部分 ========= + #if ((!$column.createOperation && !$column.updateOperation) || $column.primaryKey) + isForm: false, + #else + #if($column.htmlType == "imageUpload")## 图片上传 + form: { + component: 'UploadImg' + }, + #elseif($column.htmlType == "fileUpload")## 文件上传 + form: { + component: 'UploadFile' + }, + #elseif($column.htmlType == "editor")## 文本编辑器 + form: { + component: 'Editor', + componentProps: { + valueHtml: '', + height: 200 + } + }, + #elseif($column.htmlType == "select")## 下拉框 + form: { + component: 'SelectV2' + }, + #elseif($column.htmlType == "checkbox")## 多选框 + form: { + component: 'Checkbox' + }, + #elseif($column.htmlType == "radio")## 单选框 + form: { + component: 'Radio' + }, + #elseif($column.htmlType == "datetime")## 时间框 + form: { + component: 'DatePicker', + componentProps: { + type: 'datetime', + valueFormat: 'x' + } + }, + #elseif($column.htmlType == "textarea")## 文本框 + form: { + component: 'Input', + componentProps: { + type: 'textarea', + rows: 4 + }, + colProps: { + span: 24 + } + }, + #elseif(${javaType.toLowerCase()} == "long" || ${javaType.toLowerCase()} == "integer")## 文本框 + form: { + component: 'InputNumber', + value: 0 + }, + #end + #end + }, +#end +#end + { + label: '操作', + field: 'action', + isForm: false + } +]) +export const { allSchemas } = useCrudSchemas(crudSchemas) diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/views/form.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/views/form.vue.vm new file mode 100644 index 0000000..52f20a2 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/views/form.vue.vm @@ -0,0 +1,65 @@ + + diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/views/index.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/views/index.vue.vm new file mode 100644 index 0000000..6e8f140 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_schema/views/index.vue.vm @@ -0,0 +1,85 @@ + + diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/api/api.ts.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/api/api.ts.vm new file mode 100644 index 0000000..b7f2651 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/api/api.ts.vm @@ -0,0 +1,32 @@ +import { defHttp } from '@/utils/http/axios' +#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") + +// 查询${table.classComment}列表 +export function get${simpleClassName}Page(params) { + return defHttp.get({ url: '${baseURL}/page', params }) +} + +// 查询${table.classComment}详情 +export function get${simpleClassName}(id: number) { + return defHttp.get({ url: `${baseURL}/get?id=${id}` }) +} + +// 新增${table.classComment} +export function create${simpleClassName}(data) { + return defHttp.post({ url: '${baseURL}/create', data }) +} + +// 修改${table.classComment} +export function update${simpleClassName}(data) { + return defHttp.put({ url: '${baseURL}/update', data }) +} + +// 删除${table.classComment} +export function delete${simpleClassName}(id: number) { + return defHttp.delete({ url: `${baseURL}/delete?id=${id}` }) +} + +// 导出${table.classComment} Excel +export function export${simpleClassName}(params) { + return defHttp.download({ url: '${baseURL}/export-excel', params }, '${table.classComment}.xls') +} diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/views/data.ts.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/views/data.ts.vm new file mode 100644 index 0000000..92d3b2d --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/views/data.ts.vm @@ -0,0 +1,236 @@ +import type {BasicColumn, FormSchema} from '@/components/Table' +import {useRender} from '@/components/Table' +import {DICT_TYPE, getDictOptions} from '@/utils/dict' + +export const columns: BasicColumn[] = [ +#foreach($column in $columns) +#if ($column.listOperationResult) + #set ($dictType=$column.dictType) + #set ($javaField = $column.javaField) + #set ($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + #set ($comment=$column.columnComment) +#if ($column.javaType == "LocalDateTime")## 时间类型 + { + title: '${comment}', + dataIndex: '${javaField}', + width: 180, + customRender: ({ text }) => { + return useRender.renderDate(text) + }, + }, +#elseif("" != $column.dictType)## 数据字典 + { + title: '${comment}', + dataIndex: '${javaField}', + width: 180, + customRender: ({ text }) => { + return useRender.renderDict(text, DICT_TYPE.$dictType.toUpperCase()) + }, + }, +#else + { + title: '${comment}', + dataIndex: '${javaField}', + width: 160, + }, +#end +#end +#end +] + +export const searchFormSchema: FormSchema[] = [ +#foreach($column in $columns) +#if ($column.listOperation) + #set ($dictType=$column.dictType) + #set ($javaField = $column.javaField) + #set ($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + #set ($comment=$column.columnComment) + { + label: '${comment}', + field: '${javaField}', + #if ($column.htmlType == "input") + component: 'Input', + #elseif ($column.htmlType == "select") + component: 'Select', + componentProps: { + #if ("" != $dictType)## 设置了 dictType 数据字典的情况 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase()), + #else## 未设置 dictType 数据字典的情况 + options: [], + #end + }, + #elseif ($column.htmlType == "radio") + component: 'Radio', + componentProps: { + #if ("" != $dictType)## 设置了 dictType 数据字典的情况 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase()), + #else## 未设置 dictType 数据字典的情况 + options: [], + #end + }, + #elseif($column.htmlType == "datetime") + component: 'RangePicker', + #end + colProps: { span: 8 }, + }, +#end +#end +] + +export const createFormSchema: FormSchema[] = [ + { + label: '编号', + field: 'id', + show: false, + component: 'Input', + }, +#foreach($column in $columns) +#if ($column.createOperation) + #set ($dictType = $column.dictType) + #set ($javaField = $column.javaField) + #set ($AttrName = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + #set ($comment = $column.columnComment) +#if (!$column.primaryKey)## 忽略主键,不用在表单里 + { + label: '${comment}', + field: '${javaField}', + #if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键 + required: true, + #end + #if ($column.htmlType == "input") + component: 'Input', + #elseif($column.htmlType == "imageUpload")## 图片上传 + component: 'FileUpload', + componentProps: { + fileType: 'image', + maxCount: 1, + }, + #elseif($column.htmlType == "fileUpload")## 文件上传 + component: 'FileUpload', + componentProps: { + fileType: 'file', + maxCount: 1, + }, + #elseif($column.htmlType == "editor")## 文本编辑器 + component: 'Editor', + #elseif($column.htmlType == "select")## 下拉框 + component: 'Select', + componentProps: { + #if ("" != $dictType)## 有数据字典 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'), + #else##没数据字典 + options:[], + #end + }, + #elseif($column.htmlType == "checkbox")## 多选框 + component: 'Checkbox', + componentProps: { + #if ("" != $dictType)## 有数据字典 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'), + #else##没数据字典 + options:[], + #end + }, + #elseif($column.htmlType == "radio")## 单选框 + component: 'RadioButtonGroup', + componentProps: { + #if ("" != $dictType)## 有数据字典 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'), + #else##没数据字典 + options:[], + #end + }, + #elseif($column.htmlType == "datetime")## 时间框 + component: 'DatePicker', + componentProps: { + showTime: true, + format: 'YYYY-MM-DD HH:mm:ss', + valueFormat: 'x', + }, + #elseif($column.htmlType == "textarea")## 文本域 + component: 'InputTextArea', + #end + }, +#end +#end +#end +] + +export const updateFormSchema: FormSchema[] = [ + { + label: '编号', + field: 'id', + show: false, + component: 'Input', + }, +#foreach($column in $columns) +#if ($column.updateOperation) +#set ($dictType = $column.dictType) +#set ($javaField = $column.javaField) +#set ($AttrName = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#set ($comment = $column.columnComment) + #if (!$column.primaryKey)## 忽略主键,不用在表单里 + { + label: '${comment}', + field: '${javaField}', + #if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键 + required: true, + #end + #if ($column.htmlType == "input") + component: 'Input', + #elseif($column.htmlType == "imageUpload")## 图片上传 + component: 'FileUpload', + componentProps: { + fileType: 'image', + maxCount: 1, + }, + #elseif($column.htmlType == "fileUpload")## 文件上传 + component: 'FileUpload', + componentProps: { + fileType: 'file', + maxCount: 1, + }, + #elseif($column.htmlType == "editor")## 文本编辑器 + component: 'Editor', + #elseif($column.htmlType == "select")## 下拉框 + component: 'Select', + componentProps: { + #if ("" != $dictType)## 有数据字典 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'), + #else##没数据字典 + options:[], + #end + }, + #elseif($column.htmlType == "checkbox")## 多选框 + component: 'Checkbox', + componentProps: { + #if ("" != $dictType)## 有数据字典 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'), + #else##没数据字典 + options:[], + #end + }, + #elseif($column.htmlType == "radio")## 单选框 + component: 'RadioButtonGroup', + componentProps: { + #if ("" != $dictType)## 有数据字典 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'), + #else##没数据字典 + options:[], + #end + }, + #elseif($column.htmlType == "datetime")## 时间框 + component: 'DatePicker', + componentProps: { + showTime: true, + format: 'YYYY-MM-DD HH:mm:ss', + valueFormat: 'x', + }, + #elseif($column.htmlType == "textarea")## 文本域 + component: 'InputTextArea', + #end + }, + #end +#end +#end +] \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/views/form.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/views/form.vue.vm new file mode 100644 index 0000000..1804365 --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/views/form.vue.vm @@ -0,0 +1,58 @@ + + \ No newline at end of file diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/views/index.vue.vm b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/views/index.vue.vm new file mode 100644 index 0000000..84ec4bf --- /dev/null +++ b/win-module-infra/win-module-infra-biz/src/main/resources/codegen/vue3_vben/views/index.vue.vm @@ -0,0 +1,91 @@ + + diff --git a/win-module-infra/win-module-infra-biz/src/main/resources/file/erweima.jpg b/win-module-infra/win-module-infra-biz/src/main/resources/file/erweima.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1447283cdf1b49b51c1204a160e01cb789e957a8 GIT binary patch literal 18385 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 pEwzL`>i*8R__Kv1*C}gmHZq>QI%40h(qzO + + + + + + + + +       + + + ${PATTERN_DEFAULT} + + + + + + + + + + ${PATTERN_DEFAULT} + + + + ${LOG_FILE} + + + ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz} + + ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false} + + ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB} + + ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0} + + ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30} + + + + + + 0 + + 256 + + + + + + + + ${PATTERN_DEFAULT} + + + + + + + + + + + + + + + + + + + + + + diff --git a/win-module-mes/pom.xml b/win-module-mes/pom.xml new file mode 100644 index 0000000..bed9f87 --- /dev/null +++ b/win-module-mes/pom.xml @@ -0,0 +1,24 @@ + + + + com.win + win + ${revision} + + 4.0.0 + + win-module-mes-api + win-module-mes-biz + + win-module-mes + pom + + ${project.artifactId} + + system 模块下,我们放通用业务,支撑上层的核心业务。 + 例如说:用户、部门、权限、数据字典等等 + + + diff --git a/win-module-mes/win-module-mes-api/pom.xml b/win-module-mes/win-module-mes-api/pom.xml new file mode 100644 index 0000000..73d5c68 --- /dev/null +++ b/win-module-mes/win-module-mes-api/pom.xml @@ -0,0 +1,48 @@ + + + + com.win + win-module-mes + ${revision} + + 4.0.0 + win-module-mes-api + jar + + ${project.artifactId} + + system 模块 API,暴露给其它模块调用 + + + + + com.win + win-common + + + + + org.springdoc + springdoc-openapi-starter-webmvc-api + provided + + + + + org.springframework.boot + spring-boot-starter-validation + true + + + + + org.springframework.cloud + spring-cloud-starter-openfeign + true + + + + + diff --git a/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/api/package-info.java b/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/api/package-info.java new file mode 100644 index 0000000..85a0da3 --- /dev/null +++ b/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/api/package-info.java @@ -0,0 +1,4 @@ +/** + * erp API 包,定义暴露给其它模块的 API + */ +package com.win.module.erp.api; diff --git a/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/ApiConstants.java b/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/ApiConstants.java new file mode 100644 index 0000000..768b167 --- /dev/null +++ b/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/ApiConstants.java @@ -0,0 +1,23 @@ +package com.win.module.mes.enums; + +import com.win.framework.common.enums.RpcConstants; + +/** + * API 相关的枚举 + * + * @author 芋道源码 + */ +public class ApiConstants { + + /** + * 服务名 + * + * 注意,需要保证和 spring.application.name 保持一致 + */ + public static final String NAME = "mes-server"; + + public static final String PREFIX = RpcConstants.RPC_API_PREFIX + "/mes"; + + public static final String VERSION = "1.0.0"; + +} diff --git a/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/DictTypeConstants.java b/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/DictTypeConstants.java new file mode 100644 index 0000000..f4d2d50 --- /dev/null +++ b/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/DictTypeConstants.java @@ -0,0 +1,34 @@ +package com.win.module.mes.enums; + +public interface DictTypeConstants { + + String QUALIFY_STATUS = "qualify_status";// 质检状态 + + String QUALIFY_ITEM_DATA_TYPE = "qualify_item_data_type";// 质检项目数据类型 + + String QUALIFY_ITEM_VERIFY_MODE= "qualify_item_verify_mode";// 质检项目校验方式 + + String PROCESS_TYPE = "process_type";//工序类型 + + String TRUE_FALSE = "true_false";// 是否 + + String REWORK_STATUS = "rework_status";//返工返修状态:待返修,返修中,返修完成 + + String REWORK_TYPE = "rework_type";//工作类型:返工登记、返修登记 + + String REWORK_REPLACE_FLAG = "rework_replace_flag";//是否有替换件 + + String MES_DO_STATUS="mes_do_status";// 工单执行状态 + String MES_WORKBILL_MODEL="mes_workbill_model";// 工单模式 + String MES_TASK_MODE="mes_task_mode";// 生产模式 + String MES_PLANDO_STATUS="mes_plando_status";// 计划执行状态 + String PLAN_TYPE_MES="plan_type_mes";// 计划类型(大类) + + String MES_PROCESS_STATUS="mes_process_status";// MES生产工单工序的状态 + String MES_REQUEST_TYPE="mes_request_type";// 生产物料申请类型 + + String OPERSTEP_COLLECT_TYPE="operstep_collect_type";//操作步骤采集方式 + + + +} diff --git a/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/ErrorCodeConstants.java b/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/ErrorCodeConstants.java new file mode 100644 index 0000000..5c1bd3e --- /dev/null +++ b/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/ErrorCodeConstants.java @@ -0,0 +1,184 @@ +package com.win.module.mes.enums; + + +import com.win.framework.common.exception.ErrorCode; + +/** + * mes 错误码枚举类 + * + * mes 系统,使用 2-001-000-000 段 + */ +public interface ErrorCodeConstants { + + // ========== 参数配置 1-001-000-000 ========== + ErrorCode WORKSTATION_NOT_EXISTS = new ErrorCode(1_006_000_001, "工位不存在"); + ErrorCode WORKSTATION_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_002, "工位导入数据列表为空"); + ErrorCode EQUIPMENT_NOT_EXISTS = new ErrorCode(1_006_000_003, "设备不存在"); + ErrorCode EQUIPMENT_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_004, "设备导入数据列表为空"); + ErrorCode WORKSTATION_ORDER_NOT_EXISTS = new ErrorCode(1_006_000_005, "工单不存在"); + ErrorCode WORKSTATION_ORDER_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_006, "工单导入数据列表为空"); + ErrorCode WORKSTATION_ORDER_HISTORY_NOT_EXISTS = new ErrorCode(1_006_000_007, "工单历史不存在"); + ErrorCode WORKSTATION_ORDER_HISTORY_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_008, "工单历史导入数据列表为空"); + ErrorCode PRODUCTION_PROCESS_NOT_EXISTS = new ErrorCode(1_006_000_009, "工序不存在"); + ErrorCode PRODUCTION_PROCESS_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_010, "工序导入数据列表为空"); + ErrorCode PROCESSROUTE_NODE_DETAIL_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_011, "工艺路线导入数据列表为空!"); + ErrorCode PROCESSROUTE_NODE_DETAIL_NOT_EXISTS = new ErrorCode(1_006_000_012, "工艺路线节点数据为空!"); + ErrorCode PROCESSROUTE_NOT_EXISTS = new ErrorCode(1_006_000_013, "工艺路线不存在!"); + ErrorCode PROCESSROUTE_EXISTS = new ErrorCode(1_006_000_14, "工艺路线已经存在,请更换编号!!"); + + ErrorCode PROCESSROUTE_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_015, "工艺路线导入数据内容为空!"); + ErrorCode TEAM_NOT_EXISTS = new ErrorCode(1_006_000_016, "班组不存在!"); + ErrorCode TEAM_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_017, "班组导入数据内容为空!"); + ErrorCode PRODUCTION_PLAN_NOT_EXISTS = new ErrorCode(1_006_000_018, "排产计划不存在!"); + + ErrorCode PRODUCTION_PLAN_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_019, "排产计划导入数据内容为空!"); + ErrorCode TEAM_SETTING_NOT_EXISTS = new ErrorCode(1_006_000_020, "班组不存在!"); + ErrorCode TEAM_SETTING_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_021, "班组导入数据内容为空!"); + ErrorCode ORDER_DAY_NOT_EXISTS = new ErrorCode(1_006_000_022, "日计划单号不能为空!!"); + ErrorCode ORDER_DAY_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_023, "日计划导入数据不存在!"); + ErrorCode WORK_SCHEDULING_NOT_EXISTS = new ErrorCode(1_006_000_024, "工单内容不存在!"); + ErrorCode WORK_SCHEDULING_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_025, "工单导入内容不存在!"); + ErrorCode MES_WORKSTATION_OPERSTEPS_NOT_EXISTS = new ErrorCode(1_006_000_026, "操作步骤不存在"); + ErrorCode MES_WORKSTATION_OPERSTEPS_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_027, "操作步骤导入数据列表为空"); + ErrorCode MES_ORDER_MONTH_MAIN_NOT_EXISTS = new ErrorCode(1_006_000_028, "订单月计划主计划不存在!"); + ErrorCode MES_ORDER_MONTH_MAIN_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_029, "订单月计划主计划数据内容为空!"); + ErrorCode MES_ORDER_MONTH_SUB_NOT_EXISTS = new ErrorCode(1_006_000_030, "订单月计划子计划不存在!"); + ErrorCode MES_ORDER_MONTH_SUB_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_000_031, "订单月计划子计划数据内容为空!"); + ErrorCode ORDER_SCHEDULED = new ErrorCode(1_006_000_032, "计划已排产,无法删除!"); + ErrorCode PLAN_SCHEDULED_DATA_ISEMPTY = new ErrorCode(1_006_000_033, "计划中缺少人,机,工位等数据的配置!"); + ErrorCode PLAN_SCHEDULED_EXISTS = new ErrorCode(1_006_000_034, "计划已经排产,不能重复排产!"); + ErrorCode PLAN_START_ALREADY_CANNOT_BE_TERMINATE = new ErrorCode(1_006_000_035, "计划已经开工,不能被终止!请先终止所有开工的工单!"); + ErrorCode REPORTP_STORE_NOT_EXISTS = new ErrorCode(1_006_000_036, "报工库存记录不存在!"); + ErrorCode ORDER_DAY_IS_EXISTS = new ErrorCode(1_006_000_037, "已经存在相同日计划!"); + + // ========== 能力配置 1-006-001-000 ========== + ErrorCode ABILITY_INFO_LIST_IS_EMPTY = new ErrorCode(1_006_001_001, "能力矩阵信息不存在!"); + ErrorCode ABILITY_INFO_IS_EXIT = new ErrorCode(1_006_001_002, "已存在能力矩阵编码!"); + ErrorCode ABILITY_INFO_IS_NOT_EXIT = new ErrorCode(1_006_001_006, "能力矩阵编码不存在!"); + + ErrorCode ABILITY_INFO_IS_EMPTY = new ErrorCode(1_006_001_003, "能力矩阵信息为空!"); + ErrorCode ABILITY_INFO_ERROR = new ErrorCode(1_006_001_004, "能力矩阵信息异常!"); + ErrorCode ABILITY_INFO_ERRORMODE = new ErrorCode(1_006_001_005, "未知的导入模式"); + + ErrorCode ABILITY_OPER_DECIMAL_POINT = new ErrorCode(1_006_001_007, "操作时长小数位不能超过1"); + ErrorCode ABILITY_TRAIN_DECIMAL_POINT = new ErrorCode(1_006_001_008, "培训时长小数位不能超过1"); + ErrorCode HR_PERSON_ABILITY_NOT_EXISTS = new ErrorCode(1_006_001_009, "人员能力信息不存在"); + ErrorCode HR_PERSON_ABILITY_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_001_011, "人员能力信息查询为空"); + ErrorCode HR_PERSON_ABILITY_IS_EXISTS = new ErrorCode(1_006_001_012, "人员能力信息已经存在"); + ErrorCode HR_PERSON_ABILITY_ERROR = new ErrorCode(1_006_001_013, "人员能力信息异常!"); + ErrorCode HR_PERSON_ABILITY_INPUT2 = new ErrorCode(1_006_001_014, "人员编码不能为空!"); + ErrorCode ABILITY_WORK_DECIMAL_POINT = new ErrorCode(1_006_001_015, "工作时长小数位不能超过1"); + ErrorCode ABILITY_STUDY_DECIMAL_POINT = new ErrorCode(1_006_001_016, "学习时长小数位不能超过1"); + ErrorCode HR_PERSON_ABILITY_INPUT3 = new ErrorCode(1_006_001_017, "能力编码不能为空!"); + + // ========== 操作步骤 1-006-002-000 ========== + ErrorCode OPERSTEPS_TYPE_NOT_EXISTS = new ErrorCode(1_006_002_001, "操作步骤类型不存在!"); + ErrorCode OPERSTEPS_TYPE_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_002_002, "导入操作步骤类型数据为空!"); + ErrorCode OPERSTEPS_TYPE_IS_EXISTS = new ErrorCode(1_006_002_003, "操作步骤类型已经存在!"); + ErrorCode OPERSTEPS_TYPE_ERROR = new ErrorCode(1_006_002_004, "操作步骤类型异常!"); + ErrorCode OPERSTEPS_TYPE_ERRORMODE = new ErrorCode(1_006_002_005, "未知的导入模式!"); + ErrorCode MES_OPERSTEPS_NOT_EXISTS = new ErrorCode(1_006_002_006, "MES操作步骤不存在!"); + ErrorCode OPERSTEPS_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_002_007, "MES操作步骤导入数据为空!"); + ErrorCode MES_OPERSTEPS_IS_EXISTS = new ErrorCode(1_006_002_008, "MES操作步骤已经存在!"); + ErrorCode MES_OPERSTEPS_ERROR = new ErrorCode(1_006_002_009, "MES操作步骤异常!"); + + ErrorCode HOLIDAY_SETTING_NOT_EXISTS = new ErrorCode(1_006_003_001, "节假日不存在!"); + ErrorCode HOLIDAY_SETTING_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_003_002, "节假日导入数据内容为空!"); + + + // ========== 质检 1-006-004-000 ========== + ErrorCode QUALITYCLASS_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_004_001, "质量类别导入数据为空!"); + ErrorCode QUALITYCLASS_IS_NOTEXISTS = new ErrorCode(1_006_004_017, "质检类别数据不存在!"); + ErrorCode QUALITYCLASS_IS_INUSE= new ErrorCode(1_006_004_018, "质检类别已经被使用!"); + ErrorCode QUALITYCLASS_LIST_IS_EXIT = new ErrorCode(1_006_004_002, "已存在质量类别编码"); + ErrorCode QUALITYCLASS_ERRORMODE = new ErrorCode(1_006_004_003, "未知的导入模式"); + ErrorCode QUALITYCLASS_ERROR = new ErrorCode(1_006_004_004, "质检系统异常"); + ErrorCode QUALITYGROUP_LIST_IS_EXIT = new ErrorCode(1_006_004_005, "已存在质检分组编码"); + ErrorCode QUALITYGROUP_IS_NOT_EXIST = new ErrorCode(1_006_004_016, "质检分组信息不存在"); + ErrorCode QUALITYGROUP_IS_INUSE = new ErrorCode(1_006_004_016, "质检分组信息已经被使用!"); + ErrorCode QUALITYGROUP_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_004_006, "导入的质检分组信息为空!"); + ErrorCode QUALITYITEM_LIST_IS_EXIT = new ErrorCode(1_006_004_007, "已存在质检项目编码"); + ErrorCode QUALITYITEM_LIST_IS_EMPTY = new ErrorCode(1_006_004_008, "质检项目基本信息不存在"); + ErrorCode QUALITYFORM_LIST_IS_EXIT = new ErrorCode(1_006_004_009, "已存在质检表单编码"); + ErrorCode QUALITYFORM_LIST_IS_EMPTY = new ErrorCode(1_006_004_010, "质检表单基本信息不存在"); + ErrorCode QUALITYFORMDETAIL_NOT_EXISTS = new ErrorCode(1_006_004_011, "质检表单明细基本信息不存在"); + ErrorCode QUALITYFORMDETAIL_IS_LASTONE = new ErrorCode(1_006_004_012, "至少有一项质检表单明细"); + ErrorCode QUALITYITEM_IS_NOCHANGE = new ErrorCode(1_006_004_013, "质检项目无变化"); + ErrorCode QUALITYITEM_IS_ONE = new ErrorCode(1_006_004_014, "请选择这一条数据"); + ErrorCode MES_CONFIG_INFO_NOT_EXISTS = new ErrorCode(1_006_004_015, "MES基本参数配置信息不存在"); + + // ========== 单件批量返工返修配置 1-006-005-000 ========== + ErrorCode REWORK_SINGLE_NOT_EXISTS = new ErrorCode(1_006_005_040, "单件返工登记信息不存在"); + ErrorCode SYSTEM_ERROR = new ErrorCode(1_006_005_043, "系统异常"); + ErrorCode REWORK_BATCH_NOT_EXISTS = new ErrorCode(1_006_005_044, "批量返工登记信息不存在"); + ErrorCode REWORK_BATCH_COUNT_IS_ZERO = new ErrorCode(1_006_005_046, "批量返工返修数量不能为零"); + ErrorCode DISMANTLING_MAIN_NOT_EXISTS = new ErrorCode(1_006_005_047, "报废拆解工单不存在"); + ErrorCode DISMANTLING_DETAIL_NOT_EXISTS = new ErrorCode(1_006_005_049, "报废拆解工单明细不存在"); + ErrorCode DISMANTLING_DETAIL_CREATE_MATERIAL_STATUS = new ErrorCode(1_006_005_050, "报废拆解新增明细工单处理状态不能为已完成"); + + // ========== 模具配置 1-006-006-000 ========== + ErrorCode PATTERN_TYPE_NOT_EXISTS = new ErrorCode(1_006_006_001, "模具类型信息不存在"); + ErrorCode PATTERN_TYPE_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_006_002, "模具类型信息为空"); + ErrorCode PATTERN_TYPE_ERROR = new ErrorCode(1_006_006_003, "模具类型模块异常"); + ErrorCode PATTERN_NOT_EXISTS = new ErrorCode(1_006_006_004, "模具信息不存在"); + ErrorCode PATTERN_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_006_005, "模具信息为空"); + ErrorCode PATTERN_TYPE_IS_EXISTS = new ErrorCode(1_006_006_006, "模具类型信息已经存在"); + ErrorCode PATTERN_IS_EXISTS = new ErrorCode(1_006_006_007, "模具信息已经存在"); + ErrorCode PATTERN_ERROR = new ErrorCode(1_006_006_008, "模具信息模块异常"); + + + + ErrorCode ORDER_DAY_BOM_NOT_EXISTS=new ErrorCode(1_006_005_001, "产品生产BOM不存在!"); + ErrorCode ORDER_DAY_BOM_IMPORT_LIST_IS_EMPTY=new ErrorCode(1_006_005_002, "日计划导入BOM不存在!"); + ErrorCode ORDER_DAY_EQUIPMENT_NOT_EXISTS=new ErrorCode(1_006_005_003, "日计划设备配置不存在!"); + ErrorCode ORDER_DAY_EQUIPMENT_IMPORT_LIST_IS_EMPTY=new ErrorCode(1_006_005_004, "日计划导入的设备配置不存在!"); + ErrorCode ORDER_DAY_ROUTE_NOT_EXISTS=new ErrorCode(1_006_005_005, "日计划工艺路线不存在!"); + ErrorCode ORDER_DAY_ROUTE_PROCESS_NOT_EXISTS=new ErrorCode(1_006_005_105, "产品工艺路线未配置,或者缺少工序!"); + ErrorCode ORDER_DAY_ROUTE_IMPORT_LIST_IS_EMPTY=new ErrorCode(1_006_005_006, "日计划工艺路线导入数据不存在!"); + ErrorCode ORDER_DAY_ROUTESUB_NOT_EXISTS=new ErrorCode(1_006_005_007, "日计划工序不存在!"); + ErrorCode ORDER_DAY_ROUTESUB_IMPORT_LIST_IS_EMPTY=new ErrorCode(1_006_005_008, "日计划导入的工序数据不存在!"); + ErrorCode ORDER_DAY_WORKER_NOT_EXISTS=new ErrorCode(1_006_005_009, "日计划工人配置不存在!"); + ErrorCode ORDER_DAY_WORKER_IMPORT_LIST_IS_EMPTY=new ErrorCode(1_006_005_010, "日计划导入的工人数据不存在!"); + ErrorCode ORDER_DAY_WORKSTATION_NOT_EXISTS=new ErrorCode(1_006_005_011, "日计划工位配置不存在!"); + ErrorCode ORDER_DAY_WORKSTATION_IMPORT_LIST_IS_EMPTY=new ErrorCode(1_006_005_012, "日计划导入的工位数据不存在!"); + ErrorCode ORDER_OPER_LOG_NOT_EXISTS=new ErrorCode(1_006_005_013, "日计划操作日志记录不存在!"); + ErrorCode ORDER_OPER_LOG_IMPORT_LIST_IS_EMPTY=new ErrorCode(1_006_005_014, "日计划操作日志记录导入的数据不存在!"); + + ErrorCode WORK_SCHEDULING_DETAIL_NOT_EXISTS = new ErrorCode(1_006_005_015, "工单任务明细不存在或已经完成"); + ErrorCode WORK_SCHEDULING_DETAIL_REPORT_COUNT_GREATER_THAN_PLAN = new ErrorCode(1_006_005_016, "报工数量大于计划数量"); + ErrorCode JOB_REPORT_PERSON_VALIDATE_FAIL = new ErrorCode(1_006_005_017, "使用了不在人员验证组中人员"); + + // ======================= 工序配置 ======================= 工序配置======================= 工序配置======================= + ErrorCode MES_PROCESS_PRODUCTIONLINE_NOT_EXISTS = new ErrorCode(1_006_007_001, "工序与产线数据不存在!"); + ErrorCode MES_PROCESS_PRODUCTIONLINE_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_007_002, "工序与产线导入的数据不能为空!"); + ErrorCode MES_PROCESS_PATTERN_NOT_EXISTS = new ErrorCode(1_006_007_003, "工序与模具关联不存在!"); + ErrorCode MES_PROCESS_PATTERN_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_007_004, "工序与模具关联导入的数据不能为空!"); + ErrorCode MES_PROCESS_ITEMBASIC_NOT_EXISTS = new ErrorCode(1_006_007_005, "工序与物料关联不存在!"); + ErrorCode MES_PROCESS_ITEMBASIC_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_007_006, "工序与物料关联导入的数据不能为空!"); + ErrorCode PRODUCT_OFFLINE_NOT_EXISTS = new ErrorCode(1_006_007_007, "产品离线数据不存在!"); + ErrorCode PRODUCT_OFFLINE_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_007_008, "产品离线导入的数据不能为空!"); + ErrorCode PRODUCT_BACKLINE_NOT_EXISTS = new ErrorCode(1_006_007_009, "产品返线数据不存在!"); + ErrorCode PRODUCT_BACKLINE_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_007_010, "产品返线数据导入的数据不能为空!"); + ErrorCode DEVICE_INFO_NOT_EXISTS = new ErrorCode(1_006_007_011, "设备基本信息不存在!"); + ErrorCode DEVICE_INFO_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_007_012, "设备基本信息导入的数据不能为空!"); + + ErrorCode REPORTFINISH_STORE_NOT_EXISTS = new ErrorCode(1_006_007_013, "完工库存中间不存在!"); + ErrorCode REPORTFINISH_STORE_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_006_007_014, "完工库存中间表导入的数据不能为空!"); + ErrorCode COMPLETE_HANDLE_PROCESS_NOT_END = new ErrorCode(1_006_007_015, "当前工序不是最后工序!"); + ErrorCode COMPLETE_HANDLE_PRODUCT_IS_EMPTY = new ErrorCode(1_006_007_016, "产品信息不存在!"); + ErrorCode COMPLETE_HANDLE__IS_FAILED = new ErrorCode(1_006_007_017, "产品信息不存在!"); + ErrorCode HAVING_UNFINISHED_PRE_TASK = new ErrorCode(1_006_007_018, "有未完成的前置工序任务!"); + //========== 工作日历2-001-000-000 ========== + ErrorCode HOLIDAY_CALENDAR_NOT_EXISTS=new ErrorCode(1_006_006_001, "节假日信息不存在!"); + ErrorCode HOLIDAY_CALENDAR_EXISTS=new ErrorCode(1_006_006_002, "节假日信息已经存在!"); + ErrorCode HOLIDAY_CALENDAR_IMPORT_LIST_IS_EMPTY=new ErrorCode(1_006_006_003, "节假日导入的数据不存在!"); + ErrorCode SCHEUDLE_CALENDAR__NOT_EXISTS=new ErrorCode(1_006_006_004, "排班日历内容不存在!"); + ErrorCode SCHEUDLE_CALENDAR_IMPORT_LIST_IS_EMPTY=new ErrorCode(1_006_006_005, "排班日历导入的数据不存在!"); + //========== 工位配置 ========== + ErrorCode WORKSTATION_POST_NOT_EXISTS=new ErrorCode(1_006_008_001, "工位岗位关联关系不存在!"); + ErrorCode WORKSTATION_ABILITY_NOT_EXISTS=new ErrorCode(1_006_008_002, "工位技能关联关系不存在!"); + + + + +} diff --git a/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/LogRecordConstants.java b/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/LogRecordConstants.java new file mode 100644 index 0000000..9941e8c --- /dev/null +++ b/win-module-mes/win-module-mes-api/src/main/java/com/win/module/mes/enums/LogRecordConstants.java @@ -0,0 +1,12 @@ +package com.win.module.mes.enums; + +/** + * 操作日志枚举 + * 目的:统一管理,也减少 Service 里各种“复杂”字符串 + * + * @author 芋道源码 + */ +public interface LogRecordConstants { + + +} diff --git a/win-module-mes/win-module-mes-biz/Dockerfile b/win-module-mes/win-module-mes-biz/Dockerfile new file mode 100644 index 0000000..0f6721d --- /dev/null +++ b/win-module-mes/win-module-mes-biz/Dockerfile @@ -0,0 +1,19 @@ +## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性 +## 感谢复旦核博士的建议!灰子哥,牛皮! +FROM eclipse-temurin:8-jre + +## 创建目录,并使用它作为工作目录 +RUN mkdir -p /win-module-mes-biz +WORKDIR /win-module-mes-biz +## 将后端项目的 Jar 文件,复制到镜像中 +COPY ./target/win-module-mes-biz.jar app.jar + +## 设置 TZ 时区 +## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖 +ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m" + +## 暴露后端项目的 48088 端口 +EXPOSE 48083 + +## 启动后端项目 +CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar diff --git a/win-module-mes/win-module-mes-biz/pom.xml b/win-module-mes/win-module-mes-biz/pom.xml new file mode 100644 index 0000000..9d5f24e --- /dev/null +++ b/win-module-mes/win-module-mes-biz/pom.xml @@ -0,0 +1,218 @@ + + + + com.win + win-module-mes + ${revision} + + 4.0.0 + win-module-mes-biz + jar + + ${project.artifactId} + + system 模块下,我们放通用业务,支撑上层的核心业务。 + 例如说:用户、部门、权限、数据字典等等 + + + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + com.win + win-spring-boot-starter-env + + + + + + + + + + + + + + + + com.win + win-spring-boot-starter-biz-data-permission + + + com.win + win-spring-boot-starter-biz-tenant + + + com.win + win-spring-boot-starter-biz-ip + + + + + com.win + win-spring-boot-starter-security + + + + + com.win + win-spring-boot-starter-mybatis + + + + com.win + win-spring-boot-starter-redis + + + + + com.win + win-spring-boot-starter-rpc + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.win + win-spring-boot-starter-job + + + + + com.win + win-spring-boot-starter-mq + + + + + + + + + + + com.win + win-spring-boot-starter-excel + + + + org.springframework.boot + spring-boot-starter-mail + + + + + com.win + win-spring-boot-starter-monitor + + + + + com.xingyuv + spring-boot-starter-justauth + + + + com.github.binarywang + wx-java-mp-spring-boot-starter + + + com.github.binarywang + wx-java-miniapp-spring-boot-starter + + + + com.aliyun + aliyun-java-sdk-core + + + com.aliyun + aliyun-java-sdk-dysmsapi + + + com.tencentcloudapi + tencentcloud-sdk-java-sms + + + + com.xingyuv + spring-boot-starter-captcha-plus + + + + org.dromara.hutool + hutool-extra + + + cn.hutool + hutool-all + + + com.win + win-module-mes-api + 2.1.0-snapshot + compile + + + com.win + win-module-system-biz + 2.1.0-snapshot + compile + + + com.win + win-module-system-biz + 2.1.0-snapshot + compile + + + com.win + win-module-system-biz + 2.1.0-snapshot + compile + + + org.postgresql + postgresql + + + + + + ${project.artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + + + repackage + + + + + + + + diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/MesServerApplication.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/MesServerApplication.java new file mode 100644 index 0000000..e418db9 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/MesServerApplication.java @@ -0,0 +1,11 @@ +package com.win.module.mes; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class MesServerApplication { + public static void main(String[] args) { + SpringApplication.run(MesServerApplication.class, args); + } +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/DemoGenController.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/DemoGenController.java new file mode 100644 index 0000000..36c9c52 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/DemoGenController.java @@ -0,0 +1,98 @@ +package com.win.module.mes.controller.admin.demo; + +import com.win.framework.datapermission.core.annotation.DataPermission; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import jakarta.validation.*; +import jakarta.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import static com.win.framework.common.pojo.CommonResult.success; + +import com.win.framework.excel.core.util.ExcelUtils; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import static com.win.framework.apilog.core.enums.OperateTypeEnum.*; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUser; + +import com.win.module.mes.controller.admin.demo.vo.*; +import com.win.module.mes.dal.dataobject.demo.DemoGenDO; +import com.win.module.mes.service.demo.DemoGenService; + +@Tag(name = "管理后台 - 测试") +@RestController +@RequestMapping("/mes/demo") +@Validated +public class DemoGenController { + + @Resource + private DemoGenService demoGenService; + + @PostMapping("/create") + @Operation(summary = "创建测试") + @PreAuthorize("@ss.hasPermission('mes:demo-gen:create')") + public CommonResult createDemoGen(@Valid @RequestBody DemoGenSaveReqVO createReqVO) { + getLoginUser().getInfo().keySet().forEach(item->System.out.println(item)); + return success(demoGenService.createDemoGen(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新测试") + @PreAuthorize("@ss.hasPermission('mes:demo-gen:update')") + public CommonResult updateDemoGen(@Valid @RequestBody DemoGenSaveReqVO updateReqVO) { + demoGenService.updateDemoGen(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除测试") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:demo-gen:delete')") + public CommonResult deleteDemoGen(@RequestParam("id") Long id) { + demoGenService.deleteDemoGen(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得测试") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @DataPermission(enable = false) + @PreAuthorize("@ss.hasPermission('mes:demo-gen:query')") + public CommonResult getDemoGen(@RequestParam("id") Long id) { + DemoGenDO demoGen = demoGenService.getDemoGen(id); + return success(BeanUtils.toBean(demoGen, DemoGenRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得测试分页") + @PreAuthorize("@ss.hasPermission('mes:demo-gen:query')") + public CommonResult> getDemoGenPage(@Valid DemoGenPageReqVO pageReqVO) { + PageResult pageResult = demoGenService.getDemoGenPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, DemoGenRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出测试 Excel") + @PreAuthorize("@ss.hasPermission('mes:demo-gen:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportDemoGenExcel(@Valid DemoGenPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = demoGenService.getDemoGenPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "测试.xls", "数据", DemoGenRespVO.class, + BeanUtils.toBean(list, DemoGenRespVO.class)); + } + +} \ No newline at end of file diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/vo/DemoGenPageReqVO.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/vo/DemoGenPageReqVO.java new file mode 100644 index 0000000..2270f11 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/vo/DemoGenPageReqVO.java @@ -0,0 +1,34 @@ +package com.win.module.mes.controller.admin.demo.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.win.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 测试分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class DemoGenPageReqVO extends PageParam { + + @Schema(description = "名字", example = "张三") + private String name; + + @Schema(description = "性别") + private Integer sex; + + @Schema(description = "出生日期") + private LocalDateTime birthday; + + @Schema(description = "简介", example = "随便") + private String description; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/vo/DemoGenRespVO.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/vo/DemoGenRespVO.java new file mode 100644 index 0000000..8671b86 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/vo/DemoGenRespVO.java @@ -0,0 +1,40 @@ +package com.win.module.mes.controller.admin.demo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 测试 Response VO") +@Data +@ExcelIgnoreUnannotated +public class DemoGenRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "29987") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("名字") + private String name; + + @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("性别") + private Integer sex; + + @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("出生日期") + private LocalDateTime birthday; + + @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便") + @ExcelProperty("简介") + private String description; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/vo/DemoGenSaveReqVO.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/vo/DemoGenSaveReqVO.java new file mode 100644 index 0000000..1bf9e06 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/admin/demo/vo/DemoGenSaveReqVO.java @@ -0,0 +1,33 @@ +package com.win.module.mes.controller.admin.demo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 测试新增/修改 Request VO") +@Data +public class DemoGenSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "29987") + private Long id; + + @Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @NotEmpty(message = "名字不能为空") + private String name; + + @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "性别不能为空") + private Integer sex; + + @Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "出生日期不能为空") + private LocalDateTime birthday; + + @Schema(description = "简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便") + @NotEmpty(message = "简介不能为空") + private String description; + +} \ No newline at end of file diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/SchedulingcalendarController.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/SchedulingcalendarController.java new file mode 100644 index 0000000..2138487 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/SchedulingcalendarController.java @@ -0,0 +1,217 @@ +package com.win.module.mes.controller.schedulingcalendar; + + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.mes.controller.schedulingcalendar.vo.*; +import com.win.module.mes.convert.schedulingcalendar.SchedulingcalendarConvert; +import com.win.module.mes.dal.dataobject.schedulingcalendar.SchedulingcalendarDO; +import com.win.module.mes.enums.ErrorCodeConstants; +import com.win.module.mes.service.schedulingcalendar.SchedulingcalendarService; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + + + +import io.swagger.v3.oas.annotations.Parameters; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.web.bind.annotation.*; + +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.io.IOException; +import java.util.stream.Collectors; + +import org.springframework.web.multipart.MultipartFile; + +import static com.win.framework.common.pojo.CommonResult.error; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 生产日历") +@RestController +@RequestMapping("/mes/schedulingcalendar") +@Validated +public class SchedulingcalendarController { + + @Resource + private SchedulingcalendarService schedulingcalendarService; + + @PostMapping("/create") + @Operation(summary = "创建生产日历") + @PreAuthorize("@ss.hasPermission('mes:schedulingcalendar:create')") + public CommonResult createSchedulingcalendar(@Valid @RequestBody SchedulingcalendarCreateReqVO createReqVO) { + return success(schedulingcalendarService.createSchedulingcalendar(createReqVO)); + } + //根据前端生成的数据列表生成日历 + @PostMapping("/createBatch") + @Operation(summary = "创建生产日历") + @PreAuthorize("@ss.hasPermission('mes:schedulingcalendar:create')") + public CommonResult createSchedulingcalendar(@Valid @RequestBody List list) { + schedulingcalendarService.insertBatch(list); + return success(0); + } + //根据json对象创建工作日历 + @PostMapping("/createObj") + @Operation(summary = "创建生产日历") + @PreAuthorize("@ss.hasPermission('mes:schedulingcalendar:create')") + public CommonResult createSchedulingcalendar(@Valid @RequestBody JSONObject object) { + Date startDate = object.getDate("startDate"); + Date endDate = object.getDate("endDate"); + String teamCode = object.getString("teamCode"); + String teamName = object.getString("teamName"); + String teamType = object.getString("teamType"); + JSONArray shiftData = object.getJSONArray("shiftData"); + Date date=startDate; + List list=new ArrayList<>(); + while(date.before(endDate)){ + String keyDate=DateUtil.format(date,"yyyyMMdd"); + LocalDateTime localDateTime = DateUtil.toLocalDateTime(date); + for(int i=0;i updateSchedulingcalendar(@Valid @RequestBody SchedulingcalendarUpdateReqVO updateReqVO) { + int result = schedulingcalendarService.updateSchedulingcalendar(updateReqVO); + return success(result > 0); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除生产日历") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:schedulingcalendar:delete')") + public CommonResult deleteSchedulingcalendar(@RequestParam("id") Integer id) { + int result = schedulingcalendarService.deleteSchedulingcalendar(id); + return success(result > 0); + } + + @PostMapping("/deleteTeam") + @Operation(summary = "删除班组日历") + @Parameter(name = "data", description = "数据对象", required = true, example = "") + public CommonResult deleteTeam(@RequestBody JSONObject data) { + // @RequestParam("code") String code, @RequestParam("startTime") String startTime,@RequestParam("endTime") String endTime + if(CollUtil.isNotEmpty(data)){ + String code=data.getString("code"); + LocalDateTime start=LocalDateTime.parse(data.getString("startTime")+" 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + LocalDateTime end=LocalDateTime.parse(data.getString("endTime")+" 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + return success(schedulingcalendarService.deleteTeamData(code,start,end)); + }else{ + return error(ErrorCodeConstants.SYSTEM_ERROR); + } + } + @GetMapping("/get") + @Operation(summary = "获得生产日历") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + + public CommonResult getSchedulingcalendar(@RequestParam("id") Integer id) { + SchedulingcalendarDO schedulingcalendar = schedulingcalendarService.getSchedulingcalendar(id); + return success(SchedulingcalendarConvert.INSTANCE.convert(schedulingcalendar)); + } + @GetMapping("/getList") + @Operation(summary = "获得班组的生产日历") + @Parameter(name = "code", description = "班组编号", required = true, example = "") + @Parameter(name = "startTime", description = "开始时间", required = true, example = "") + @Parameter(name = "endTime", description = "开始时间", required = true, example = "") + public CommonResult< Map>> getSchedulingcalendarListByTeam(@RequestParam("code") String code, @RequestParam("startTime") String startTime,@RequestParam("endTime") String endTime) { + QueryWrapper queryWrapper=new QueryWrapper<>(); + queryWrapper.eq("team_code",code); + queryWrapper.between("work_date",startTime,endTime); + List schedulingcalendarListResp = schedulingcalendarService.getSchedulingcalendarListResp(queryWrapper); + if(CollUtil.isNotEmpty(schedulingcalendarListResp)){ + Map> collect = schedulingcalendarListResp.stream().collect(Collectors.groupingBy(SchedulingcalendarDO::getKeyDate)); + return success(collect); + }else{ + return success(new HashMap<>()); + } + + } + @GetMapping("/page") + @Operation(summary = "获得生产日历分页") + public CommonResult> getSchedulingcalendarPage(@Valid SchedulingcalendarPageReqVO pageVO) { + PageResult pageResult = schedulingcalendarService.getSchedulingcalendarPage(pageVO); + return success(SchedulingcalendarConvert.INSTANCE.convertPage(pageResult)); + } + +// @PostMapping("/senior") +// @Operation(summary = "高级搜索获得检验任务主分页") +// +// public CommonResult> getSchedulingcalendarSenior(@Valid @RequestBody CustomConditions conditions) { +// PageResult pageResult = schedulingcalendarService.getSchedulingcalendarSenior(conditions); +// return success(SchedulingcalendarConvert.INSTANCE.convertPage(pageResult)); +// } + + @GetMapping("/export-excel") + @Operation(summary = "导出生产日历 Excel") + @PreAuthorize("@ss.hasPermission('mes:schedulingcalendar:export')") +// @OperateLog(type = EXPORT) + public void exportSchedulingcalendarExcel(@Valid SchedulingcalendarExportReqVO exportReqVO, HttpServletResponse response) throws IOException { + List list = schedulingcalendarService.getSchedulingcalendarList(exportReqVO); + // 导出 Excel + List datas = SchedulingcalendarConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "生产日历.xls", "数据", SchedulingcalendarExcelVO.class, datas); + } + + @GetMapping("/get-import-template") + @Operation(summary = "获得导入生产日历模板") + public void importTemplate(HttpServletResponse response) throws IOException { + List list = Arrays.asList(); + // 输出 + ExcelUtils.write(response, "生产日历基本信息导入模板.xls", "生产日历基本信息列表", SchedulingcalendarExcelVO.class, list); + } + + @PostMapping("/import") + @Operation(summary = "导入生产日历基本信息") + @Parameters({ + @Parameter(name = "file", description = "Excel 文件", required = true), + @Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"), + @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") + }) + @PreAuthorize("@ss.hasPermission('mes:schedulingcalendar:import')") + public CommonResult> importExcel(HttpServletResponse response, + @RequestParam("file") MultipartFile file, + @RequestParam(value = "mode") Integer mode, + @RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception { + List list = ExcelUtils.read(file, SchedulingcalendarExcelVO.class); + List errorList = schedulingcalendarService.importSchedulingcalendarList(list, mode, updatePart); + Map returnMap = new HashMap<>(); + returnMap.put("errorCount", errorList.size()); + if(!errorList.isEmpty()) { + String url = "";//ExcelUtils.writeLocalFile("生产日历基本信息导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xlsx", "错误列表", errorList); + returnMap.put("errorFile", url); + } + return success(returnMap); + } +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarBaseVO.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarBaseVO.java new file mode 100644 index 0000000..7fb5bb4 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarBaseVO.java @@ -0,0 +1,61 @@ +package com.win.module.mes.controller.schedulingcalendar.vo; + + + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.*; +import java.time.LocalDateTime; + +import org.springframework.format.annotation.DateTimeFormat; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; + + +/** + * 生产日历 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class SchedulingcalendarBaseVO { + + @Schema(description = "日期KEY", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "日期KEY不能为空") + private String keyDate; + + @Schema(description = "班组编码") + private String teamCode; + + @Schema(description = "班组名称", example = "赵六") + private String teamName; + + @Schema(description = "班组类别", example = "1") + private String teamType; + + @Schema(description = "班次名称", example = "芋艿") + private String shiftName; + + @Schema(description = "班次编码") + private String shiftCode; + + @Schema(description = "上班时间") + private String startTime; + + @Schema(description = "下班时间") + private String endTime; + + @Schema(description = "状态", example = "2") + private String status; + + @Schema(description = "工作日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) + private LocalDateTime workDate; + + @Schema(description = "倒班规则") + private String shiftRule; + + @Schema(description = "倒班类型") + private String shiftRate; + + +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarCreateReqVO.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarCreateReqVO.java new file mode 100644 index 0000000..f2b1a41 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarCreateReqVO.java @@ -0,0 +1,24 @@ +package com.win.module.mes.controller.schedulingcalendar.vo; + +import lombok.*; +import io.swagger.v3.oas.annotations.media.Schema; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Schema(description = "管理后台 - 生产日历创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SchedulingcalendarCreateReqVO extends SchedulingcalendarBaseVO { + //增加的字符串对象,解决数组传入时时间格式无法传入 + private String workDateString; + + public void setWorkDateString(String workDateString) { + if(null !=workDateString && null==getWorkDate()){ + workDateString=workDateString; + setWorkDate(LocalDateTime.parse(workDateString+" 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))) ; + } + } + +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarExcelVO.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarExcelVO.java new file mode 100644 index 0000000..a4920fb --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarExcelVO.java @@ -0,0 +1,60 @@ +package com.win.module.mes.controller.schedulingcalendar.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; + +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * 生产日历 Excel VO + * + * @author zhousq + */ +@Data +public class SchedulingcalendarExcelVO { + + @ExcelProperty("日期KEY") + private String keyDate; + + @ExcelProperty("班组编码") + private String teamCode; + + @ExcelProperty("班组名称") + private String teamName; + + @ExcelProperty("班组类别") + private String teamType; + + @ExcelProperty("班次名称") + private String shiftName; + + @ExcelProperty("班次编码") + private String shiftCode; + + @ExcelProperty("上班时间") + private String startTime; + + @ExcelProperty("下班时间") + private String endTime; + + @ExcelProperty("主键") + private Integer id; + + @ExcelProperty("状态") + private String status; + + @ExcelProperty("工作日期") + private LocalDateTime workDate; + + @ExcelProperty("倒班规则") + private String shiftRule; + + @ExcelProperty("倒班类型") + private String shiftRate; + +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarExportReqVO.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarExportReqVO.java new file mode 100644 index 0000000..7a18dbc --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarExportReqVO.java @@ -0,0 +1,57 @@ +package com.win.module.mes.controller.schedulingcalendar.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; + +import java.time.LocalDateTime; +import org.springframework.format.annotation.DateTimeFormat; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + + +@Schema(description = "管理后台 - 生产日历 Excel 导出 Request VO,参数和 SchedulingcalendarPageReqVO 是一致的") +@Data +public class SchedulingcalendarExportReqVO { + + @Schema(description = "日期KEY") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private String[] keyDate; + + @Schema(description = "班组编码") + private String teamCode; + + @Schema(description = "班组名称", example = "赵六") + private String teamName; + + @Schema(description = "班组类别", example = "1") + private String teamType; + + @Schema(description = "班次名称", example = "芋艿") + private String shiftName; + + @Schema(description = "班次编码") + private String shiftCode; + + @Schema(description = "上班时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private String[] startTime; + + @Schema(description = "下班时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private String[] endTime; + + @Schema(description = "状态", example = "2") + private String status; + + @Schema(description = "工作日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] workDate; + + @Schema(description = "倒班规则") + private String shiftRule; + + @Schema(description = "倒班类型") + private String shiftRate; + +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarPageReqVO.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarPageReqVO.java new file mode 100644 index 0000000..d37a86d --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarPageReqVO.java @@ -0,0 +1,59 @@ +package com.win.module.mes.controller.schedulingcalendar.vo; + +import com.win.framework.common.pojo.PageParam; +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; + +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 生产日历分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SchedulingcalendarPageReqVO extends PageParam { + + @Schema(description = "日期KEY") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private String[] keyDate; + + @Schema(description = "班组编码") + private String teamCode; + + @Schema(description = "班组名称", example = "赵六") + private String teamName; + + @Schema(description = "班组类别", example = "1") + private String teamType; + + @Schema(description = "班次名称", example = "芋艿") + private String shiftName; + + @Schema(description = "班次编码") + private String shiftCode; + + @Schema(description = "上班时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private String[] startTime; + + @Schema(description = "下班时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private String[] endTime; + + @Schema(description = "状态", example = "2") + private String status; + + @Schema(description = "工作日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] workDate; + + @Schema(description = "倒班规则") + private String shiftRule; + + @Schema(description = "倒班类型") + private String shiftRate; + +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarRespVO.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarRespVO.java new file mode 100644 index 0000000..832d210 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarRespVO.java @@ -0,0 +1,15 @@ +package com.win.module.mes.controller.schedulingcalendar.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +@Schema(description = "管理后台 - 生产日历 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SchedulingcalendarRespVO extends SchedulingcalendarBaseVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "28316") + private Integer id; + +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarUpdateReqVO.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarUpdateReqVO.java new file mode 100644 index 0000000..bb1b902 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/controller/schedulingcalendar/vo/SchedulingcalendarUpdateReqVO.java @@ -0,0 +1,18 @@ +package com.win.module.mes.controller.schedulingcalendar.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.*; + + +@Schema(description = "管理后台 - 生产日历更新 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SchedulingcalendarUpdateReqVO extends SchedulingcalendarBaseVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "28316") + @NotNull(message = "主键不能为空") + private Integer id; + +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/convert/schedulingcalendar/SchedulingcalendarConvert.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/convert/schedulingcalendar/SchedulingcalendarConvert.java new file mode 100644 index 0000000..af77795 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/convert/schedulingcalendar/SchedulingcalendarConvert.java @@ -0,0 +1,38 @@ +package com.win.module.mes.convert.schedulingcalendar; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.mes.controller.schedulingcalendar.vo.SchedulingcalendarCreateReqVO; +import com.win.module.mes.controller.schedulingcalendar.vo.SchedulingcalendarExcelVO; +import com.win.module.mes.controller.schedulingcalendar.vo.SchedulingcalendarRespVO; +import com.win.module.mes.controller.schedulingcalendar.vo.SchedulingcalendarUpdateReqVO; +import com.win.module.mes.dal.dataobject.schedulingcalendar.SchedulingcalendarDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + + +/** + * 生产日历 Convert + * + * @author zhousq + */ +@Mapper +public interface SchedulingcalendarConvert { + + SchedulingcalendarConvert INSTANCE = Mappers.getMapper(SchedulingcalendarConvert.class); + + SchedulingcalendarDO convert(SchedulingcalendarCreateReqVO bean); + + SchedulingcalendarDO convert(SchedulingcalendarUpdateReqVO bean); + SchedulingcalendarDO convert(SchedulingcalendarExcelVO bean); + + SchedulingcalendarRespVO convert(SchedulingcalendarDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + List convertList03(List list); +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/dataobject/demo/DemoGenDO.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/dataobject/demo/DemoGenDO.java new file mode 100644 index 0000000..0cb4f62 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/dataobject/demo/DemoGenDO.java @@ -0,0 +1,48 @@ +package com.win.module.mes.dal.dataobject.demo; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.win.framework.mybatis.core.dataobject.BaseDO; + +/** + * 测试 DO + * + * @author 芋道源码 + */ +@TableName("win_demo03_student") +@KeySequence("win_demo03_student_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DemoGenDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 名字 + */ + private String name; + /** + * 性别 + */ + private Integer sex; + /** + * 出生日期 + */ + private LocalDateTime birthday; + /** + * 简介 + */ + private String description; + +} \ No newline at end of file diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/dataobject/schedulingcalendar/SchedulingcalendarDO.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/dataobject/schedulingcalendar/SchedulingcalendarDO.java new file mode 100644 index 0000000..064ea0b --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/dataobject/schedulingcalendar/SchedulingcalendarDO.java @@ -0,0 +1,99 @@ +package com.win.module.mes.dal.dataobject.schedulingcalendar; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; + +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; + + +/** + * 生产日历 DO + * + * @author zhousq + */ +@TableName("basic_schedulingcalendar") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SchedulingcalendarDO extends BaseDO { + + /** + * 日期KEY + */ + private String keyDate; + /** + * 班组编码 + */ + private String teamCode; + /** + * 班组名称 + */ + private String teamName; + /** + * 班组类别 + */ + private String teamType; + /** + * 班次名称 + */ + private String shiftName; + /** + * 班次编码 + */ + private String shiftCode; + /** + * 上班时间 + */ + private String startTime; + /** + * 下班时间 + */ + private String endTime; + /** + * 删除时间 + */ + private LocalDateTime deleteTime; + /** + * 主键 + */ + @TableId + private Integer id; + /** + * 状态 + */ + private String status; + /** + * 并发乐观锁 + */ + private Integer concurrencyStamp; + /** + * 备注 + */ + private String remark; + /** + * 删除用户名 + */ + private String deleter; + /** + * 位置ID + */ + private String siteId; + /** + * 工作日期 + */ + private LocalDateTime workDate; + /** + * 倒班规则 + */ + private String shiftRule; + /** + * 倒班类型 + */ + private String shiftRate; + +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/mysql/demo/DemoGenMapper.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/mysql/demo/DemoGenMapper.java new file mode 100644 index 0000000..dd8026d --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/mysql/demo/DemoGenMapper.java @@ -0,0 +1,31 @@ +package com.win.module.mes.dal.mysql.demo; + +import java.util.*; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.module.mes.dal.dataobject.demo.DemoGenDO; +import org.apache.ibatis.annotations.Mapper; +import com.win.module.mes.controller.admin.demo.vo.*; + +/** + * 测试 Mapper + * + * @author 芋道源码 + */ +@Mapper + +public interface DemoGenMapper extends BaseMapperX { + + default PageResult selectPage(DemoGenPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(DemoGenDO::getName, reqVO.getName()) + .eqIfPresent(DemoGenDO::getSex, reqVO.getSex()) + .eqIfPresent(DemoGenDO::getBirthday, reqVO.getBirthday()) + .eqIfPresent(DemoGenDO::getDescription, reqVO.getDescription()) + .betweenIfPresent(DemoGenDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(DemoGenDO::getId)); + } + +} \ No newline at end of file diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/mysql/schedulingcalendar/SchedulingcalendarMapper.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/mysql/schedulingcalendar/SchedulingcalendarMapper.java new file mode 100644 index 0000000..35ef669 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/dal/mysql/schedulingcalendar/SchedulingcalendarMapper.java @@ -0,0 +1,67 @@ +package com.win.module.mes.dal.mysql.schedulingcalendar; + +import java.time.LocalDateTime; +import java.util.*; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.mes.controller.schedulingcalendar.vo.SchedulingcalendarExportReqVO; +import com.win.module.mes.controller.schedulingcalendar.vo.SchedulingcalendarPageReqVO; +import com.win.module.mes.dal.dataobject.schedulingcalendar.SchedulingcalendarDO; +import org.apache.ibatis.annotations.CacheNamespace; +import org.apache.ibatis.annotations.Mapper; + +/** + * 生产日历 Mapper + * + * @author zhousq + */ +@Mapper +@CacheNamespace(flushInterval = 300000, size = 4096) +public interface SchedulingcalendarMapper extends BaseMapperX { + + default PageResult selectPage(SchedulingcalendarPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .betweenIfPresent(SchedulingcalendarDO::getKeyDate, reqVO.getKeyDate()) + .eqIfPresent(SchedulingcalendarDO::getTeamCode, reqVO.getTeamCode()) + .likeIfPresent(SchedulingcalendarDO::getTeamName, reqVO.getTeamName()) + .eqIfPresent(SchedulingcalendarDO::getTeamType, reqVO.getTeamType()) + .likeIfPresent(SchedulingcalendarDO::getShiftName, reqVO.getShiftName()) + .eqIfPresent(SchedulingcalendarDO::getShiftCode, reqVO.getShiftCode()) + .betweenIfPresent(SchedulingcalendarDO::getStartTime, reqVO.getStartTime()) + .betweenIfPresent(SchedulingcalendarDO::getEndTime, reqVO.getEndTime()) + .eqIfPresent(SchedulingcalendarDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(SchedulingcalendarDO::getWorkDate, reqVO.getWorkDate()) + .eqIfPresent(SchedulingcalendarDO::getShiftRule, reqVO.getShiftRule()) + .eqIfPresent(SchedulingcalendarDO::getShiftRate, reqVO.getShiftRate()) + .orderByDesc(SchedulingcalendarDO::getId)); + } +// +// default PageResult selectSenior(CustomConditions conditions) { +// return selectPage(conditions, QueryWrapperUtils.structure(conditions)); +// } + + default List selectList(SchedulingcalendarExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .betweenIfPresent(SchedulingcalendarDO::getKeyDate, reqVO.getKeyDate()) + .eqIfPresent(SchedulingcalendarDO::getTeamCode, reqVO.getTeamCode()) + .likeIfPresent(SchedulingcalendarDO::getTeamName, reqVO.getTeamName()) + .eqIfPresent(SchedulingcalendarDO::getTeamType, reqVO.getTeamType()) + .likeIfPresent(SchedulingcalendarDO::getShiftName, reqVO.getShiftName()) + .eqIfPresent(SchedulingcalendarDO::getShiftCode, reqVO.getShiftCode()) + .betweenIfPresent(SchedulingcalendarDO::getStartTime, reqVO.getStartTime()) + .betweenIfPresent(SchedulingcalendarDO::getEndTime, reqVO.getEndTime()) + .eqIfPresent(SchedulingcalendarDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(SchedulingcalendarDO::getWorkDate, reqVO.getWorkDate()) + .eqIfPresent(SchedulingcalendarDO::getShiftRule, reqVO.getShiftRule()) + .eqIfPresent(SchedulingcalendarDO::getShiftRate, reqVO.getShiftRate()) + .orderByDesc(SchedulingcalendarDO::getId)); + } + default SchedulingcalendarDO selectByCode(String code){ + return selectOne("keyDate",code); + } + + Integer deleteTeamData(List dateList,String teamCode); + Integer deleteTeamData2(String code, LocalDateTime startTime, LocalDateTime endTime); +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/config/DataPermissionConfiguration.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/config/DataPermissionConfiguration.java new file mode 100644 index 0000000..a6f19de --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/config/DataPermissionConfiguration.java @@ -0,0 +1,34 @@ +package com.win.module.mes.framework.config; + +import com.win.framework.datapermission.core.rule.dept.DeptDataPermissionRuleCustomizer; +import com.win.module.mes.dal.dataobject.demo.DemoGenDO; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +/** + * 独立的mudle 如果需要支持数据权限的使用 都需要实现此配置类; + * 数据权限是根据表定义的,而且是默认开启的 + * 禁用数据权限的方式:1、配置类中不添加表的Do对象 + * 2、使用@DataPermission(enable = false) 注解方式关闭,controler方法前使用 + * 3、完全不支持数据权限,则不启用数据权限配置类 + * 问题:如果表很多的情况下配置的rule会不会疯掉? + * @DataPermission 的三个属性 1、enabled= true:false 启用:停用 + * 2、includeRules 属性,配置生效的 DataPermissionRule (opens new window) 数据权限规则。例如说,项目里有 10 种 DataPermissionRule 规则,某个方法只想其中的 1 种生效,则可以使用该属性。 + * 3、excludeRules 属性,配置排除的 DataPermissionRule (opens new window) 数据权限规则。例如说,项目里有 10 种 DataPermissionRule 规则,某个方法不想其中的 1 种生效,则可以使用该属性。 + * **/ +@Configuration(proxyBeanMethods = false) +public class DataPermissionConfiguration { + + @Bean + public DeptDataPermissionRuleCustomizer sysDeptDataPermissionRuleCustomizer() { + return rule -> { + // dept 基于部门的数据权限 + // rule.addDeptColumn(AdminUserDO.class); // WHERE dept_id = ? + //rule.addDeptColumn(DeptDO.class, "id"); // WHERE id = ? + rule.addDeptColumn(DemoGenDO.class); // WHERE dept_id = ? + // user 基于用户的数据权限 + rule.addUserColumn(DemoGenDO.class, "creator"); // WHERE id = ? +// rule.addUserColumn(OrderDO.class); // WHERE user_id = ? + }; + } + +} \ No newline at end of file diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/config/MesConfiguration.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/config/MesConfiguration.java new file mode 100644 index 0000000..2bd166b --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/config/MesConfiguration.java @@ -0,0 +1,18 @@ +package com.win.module.mes.framework.config; + + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +/** + * + * + * @author 芋道源码 + */ +@Configuration +@ComponentScan(basePackages = "com.win.module.mes") // 扫描包 +public class MesConfiguration { + + + +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/rpc/config/RpcConfiguration.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/rpc/config/RpcConfiguration.java new file mode 100644 index 0000000..ed439c9 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/rpc/config/RpcConfiguration.java @@ -0,0 +1,10 @@ +package com.win.module.mes.framework.rpc.config; + +import com.win.module.system.api.user.AdminUserApi; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; + +@Configuration(proxyBeanMethods = false) +//@EnableFeignClients(clients = AdminUserApi.class) +public class RpcConfiguration { +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/rpc/package-info.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/rpc/package-info.java new file mode 100644 index 0000000..2473975 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/rpc/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package com.win.module.mes.framework.rpc; diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/rule/CustomDataPermissionRule.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/rule/CustomDataPermissionRule.java new file mode 100644 index 0000000..41b12f2 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/rule/CustomDataPermissionRule.java @@ -0,0 +1,40 @@ +package com.win.module.mes.framework.rule; + +import com.win.framework.datapermission.core.rule.DataPermissionRule; +import com.win.framework.mybatis.core.util.MyBatisUtils; +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import com.google.common.collect.Sets; +import net.sf.jsqlparser.expression.Alias; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.LongValue; +import net.sf.jsqlparser.expression.operators.relational.EqualsTo; +import org.springframework.stereotype.Component; + +import java.util.Set; + +/** + * 自定义数据权限方式******样例代码 启用的话需要@Component 开启************* + *针对 system_dict_type 表,它的创建人 creator 要是当前用户。 + * 针对 system_post 表,它的更新人 updater 要是当前用户 + * + * */ +//@Component +public class CustomDataPermissionRule implements DataPermissionRule { + @Override + public Set getTableNames() { + return Sets.newHashSet("system_dict_type", "system_post"); //表名 + } + + @Override + public Expression getExpression(String tableName, Alias tableAlias) { + Long userId = SecurityFrameworkUtils.getLoginUserId(); + assert userId != null; + switch (tableName) { + case "system_dict_type": + return new EqualsTo(MyBatisUtils.buildColumn(tableName, tableAlias, "creator"), new LongValue(userId)); + case "system_post": + return new EqualsTo(MyBatisUtils.buildColumn(tableName, tableAlias, "updater"), new LongValue(userId)); + default: return null; + } + } +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/security/config/SecurityConfiguration.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/security/config/SecurityConfiguration.java new file mode 100644 index 0000000..36d4803 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/security/config/SecurityConfiguration.java @@ -0,0 +1,41 @@ +package com.win.module.mes.framework.security.config; + +import com.win.framework.security.config.AuthorizeRequestsCustomizer; +import com.win.module.mes.enums.ApiConstants; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer; + + +/** + * 模块的 Security 配置 + */ +@Configuration("mesSecurityConfiguration") +public class SecurityConfiguration { + +// @Value("${spring.boot.admin.context-path:''}") +// private String adminSeverContextPath; + @Bean("mesAuthorizeRequestsCustomizer") + public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { + return new AuthorizeRequestsCustomizer() { + + @Override + public void customize(AuthorizeHttpRequestsConfigurer.AuthorizationManagerRequestMatcherRegistry registry) { + // TODO 芋艿:这个每个项目都需要重复配置,得捉摸有没通用的方案 + // Swagger 接口文档 + registry.requestMatchers("/v3/api-docs/**").permitAll() // 元数据 + .requestMatchers("/swagger-ui.html").permitAll(); // Swagger UI + // Druid 监控 + registry.requestMatchers("/druid/**").permitAll(); + // Spring Boot Actuator 的安全配置 + registry.requestMatchers("/actuator").permitAll() + .requestMatchers("/actuator/**").permitAll(); + // RPC 服务的安全配置 + registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll(); + } + + }; + } +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/security/core/package-info.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/security/core/package-info.java new file mode 100644 index 0000000..e2a61f0 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/framework/security/core/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package com.win.module.mes.framework.security.core; diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/demo/DemoGenService.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/demo/DemoGenService.java new file mode 100644 index 0000000..d3e3e3a --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/demo/DemoGenService.java @@ -0,0 +1,55 @@ +package com.win.module.mes.service.demo; + +import java.util.*; +import jakarta.validation.*; +import com.win.module.mes.controller.admin.demo.vo.*; +import com.win.module.mes.dal.dataobject.demo.DemoGenDO; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.pojo.PageParam; + +/** + * 测试 Service 接口 + * + * @author 芋道源码 + */ +public interface DemoGenService { + + /** + * 创建测试 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createDemoGen(@Valid DemoGenSaveReqVO createReqVO); + + /** + * 更新测试 + * + * @param updateReqVO 更新信息 + */ + void updateDemoGen(@Valid DemoGenSaveReqVO updateReqVO); + + /** + * 删除测试 + * + * @param id 编号 + */ + void deleteDemoGen(Long id); + + /** + * 获得测试 + * + * @param id 编号 + * @return 测试 + */ + DemoGenDO getDemoGen(Long id); + + /** + * 获得测试分页 + * + * @param pageReqVO 分页查询 + * @return 测试分页 + */ + PageResult getDemoGenPage(DemoGenPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/demo/DemoGenServiceImpl.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/demo/DemoGenServiceImpl.java new file mode 100644 index 0000000..1ad1efd --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/demo/DemoGenServiceImpl.java @@ -0,0 +1,75 @@ +package com.win.module.mes.service.demo; + +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.win.module.mes.controller.admin.demo.vo.*; +import com.win.module.mes.dal.dataobject.demo.DemoGenDO; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.util.object.BeanUtils; + +import com.win.module.mes.dal.mysql.demo.DemoGenMapper; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.mes.enums.ErrorCodeConstants.*; + +/** + * 测试 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class DemoGenServiceImpl implements DemoGenService { + + @Resource + private DemoGenMapper demoGenMapper; + + @Override + + public Long createDemoGen(DemoGenSaveReqVO createReqVO) { + // 插入 + DemoGenDO demoGen = BeanUtils.toBean(createReqVO, DemoGenDO.class); + demoGenMapper.insert(demoGen); + // 返回 + return demoGen.getId(); + } + + @Override + public void updateDemoGen(DemoGenSaveReqVO updateReqVO) { + // 校验存在 + validateDemoGenExists(updateReqVO.getId()); + // 更新 + DemoGenDO updateObj = BeanUtils.toBean(updateReqVO, DemoGenDO.class); + demoGenMapper.updateById(updateObj); + } + + @Override + public void deleteDemoGen(Long id) { + // 校验存在 + validateDemoGenExists(id); + // 删除 + demoGenMapper.deleteById(id); + } + + private void validateDemoGenExists(Long id) { + if (demoGenMapper.selectById(id) == null) { + throw exception(SCHEUDLE_CALENDAR__NOT_EXISTS); + } + } + + @Override + public DemoGenDO getDemoGen(Long id) { + return demoGenMapper.selectById(id); + } + + @Override + public PageResult getDemoGenPage(DemoGenPageReqVO pageReqVO) { + return demoGenMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/schedulingcalendar/SchedulingcalendarService.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/schedulingcalendar/SchedulingcalendarService.java new file mode 100644 index 0000000..014f9c7 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/schedulingcalendar/SchedulingcalendarService.java @@ -0,0 +1,87 @@ +package com.win.module.mes.service.schedulingcalendar; + +import java.time.LocalDateTime; +import java.util.List; + + +import com.win.framework.common.pojo.PageResult; +import com.win.module.mes.controller.schedulingcalendar.vo.*; +import com.win.module.mes.dal.dataobject.schedulingcalendar.SchedulingcalendarDO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import jakarta.validation.Valid; + + +/** + * 生产日历 Service 接口 + * + * @author zhousq + */ +public interface SchedulingcalendarService { + + /** + * 创建生产日历 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createSchedulingcalendar(@Valid SchedulingcalendarCreateReqVO createReqVO); + + /** + * 更新生产日历 + * + * @param updateReqVO 更新信息 + */ + Integer updateSchedulingcalendar(@Valid SchedulingcalendarUpdateReqVO updateReqVO); + + /** + * 删除生产日历 + * + * @param id 编号 + */ + Integer deleteSchedulingcalendar(Integer id); + Integer deleteTeamData(String code, LocalDateTime startTime, LocalDateTime endTime); + /** + * 获得生产日历 + * + * @param id 编号 + * @return 生产日历 + */ + SchedulingcalendarDO getSchedulingcalendar(Integer id); + + /** + * 获得生产日历分页 + * + * @param pageReqVO 分页查询 + * @return 生产日历分页 + */ + PageResult getSchedulingcalendarPage(SchedulingcalendarPageReqVO pageReqVO); + + /** + * 获得用高级搜索生产日历分页列表 + * + * @param conditions 分页、排序和自定义条件 + * @return 分页列表 + */ + //PageResult getSchedulingcalendarSenior(CustomConditions conditions); + + /** + * 获得生产日历列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return 生产日历列表 + */ + List getSchedulingcalendarList(SchedulingcalendarExportReqVO exportReqVO); + List getSchedulingcalendarListResp(QueryWrapper queryWrapper); + + /** + * 导入生产日历主信息 + * + * @param datas 导入生产日历主信息列表 + * @param mode 导入模式1更新2追加3覆盖 + * @param updatePart 是否支持更新 + * @return 导入结果 + */ + List importSchedulingcalendarList(List datas, Integer mode, boolean updatePart); + void insertBatch(List list); + +} diff --git a/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/schedulingcalendar/SchedulingcalendarServiceImpl.java b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/schedulingcalendar/SchedulingcalendarServiceImpl.java new file mode 100644 index 0000000..3ec6ea1 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/java/com/win/module/mes/service/schedulingcalendar/SchedulingcalendarServiceImpl.java @@ -0,0 +1,131 @@ +package com.win.module.mes.service.schedulingcalendar; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.module.mes.controller.schedulingcalendar.vo.*; +import com.win.module.mes.convert.schedulingcalendar.SchedulingcalendarConvert; +import com.win.module.mes.dal.dataobject.schedulingcalendar.SchedulingcalendarDO; +import com.win.module.mes.dal.mysql.schedulingcalendar.SchedulingcalendarMapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import org.springframework.validation.annotation.Validated; + +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.mes.enums.ErrorCodeConstants.SCHEUDLE_CALENDAR_IMPORT_LIST_IS_EMPTY; +import static com.win.module.mes.enums.ErrorCodeConstants.SCHEUDLE_CALENDAR__NOT_EXISTS; + + +/** + * 生产日历 Service 实现类 + * + * @author zhousq + */ +@Service +@Validated +public class SchedulingcalendarServiceImpl implements SchedulingcalendarService { + + @Resource + private SchedulingcalendarMapper schedulingcalendarMapper; + + @Override + public Integer createSchedulingcalendar(SchedulingcalendarCreateReqVO createReqVO) { + // 插入 + SchedulingcalendarDO schedulingcalendar = SchedulingcalendarConvert.INSTANCE.convert(createReqVO); + schedulingcalendarMapper.insert(schedulingcalendar); + // 返回 + return schedulingcalendar.getId(); + } + + @Override + public Integer updateSchedulingcalendar(SchedulingcalendarUpdateReqVO updateReqVO) { + // 校验存在 + validateSchedulingcalendarExists(updateReqVO.getId()); + // 更新 + SchedulingcalendarDO updateObj = SchedulingcalendarConvert.INSTANCE.convert(updateReqVO); + return schedulingcalendarMapper.updateById(updateObj); + } + + @Override + public Integer deleteSchedulingcalendar(Integer id) { + // 校验存在 + validateSchedulingcalendarExists(id); + // 删除 + return schedulingcalendarMapper.deleteById(id); + } + + private void validateSchedulingcalendarExists(Integer id) { + if (schedulingcalendarMapper.selectById(id) == null) { + throw exception(SCHEUDLE_CALENDAR__NOT_EXISTS); + } + } + + @Override + public SchedulingcalendarDO getSchedulingcalendar(Integer id) { + return schedulingcalendarMapper.selectById(id); + } + + @Override + public PageResult getSchedulingcalendarPage(SchedulingcalendarPageReqVO pageReqVO) { + return schedulingcalendarMapper.selectPage(pageReqVO); + } + +// @Override +// public PageResult getSchedulingcalendarSenior(CustomConditions conditions) { +// return schedulingcalendarMapper.selectSenior(conditions); +// } + + @Override + public List getSchedulingcalendarList(SchedulingcalendarExportReqVO exportReqVO) { + return schedulingcalendarMapper.selectList(exportReqVO); + } + @Override + public List getSchedulingcalendarListResp(QueryWrapper queryWrapper){ + return schedulingcalendarMapper.selectList(queryWrapper); + } + + @Override + public List importSchedulingcalendarList(List datas, Integer mode, boolean updatePart) { + if (CollUtil.isEmpty(datas)) { + throw exception(SCHEUDLE_CALENDAR_IMPORT_LIST_IS_EMPTY); + } + List errorList = new ArrayList<>(); + datas.forEach(item -> { + if(errorList == null){ + // 判断如果不存在,在进行插入 + SchedulingcalendarDO obj = schedulingcalendarMapper.selectByCode(item.getKeyDate()); + if (obj == null&& mode != 3) { + schedulingcalendarMapper.insert(SchedulingcalendarConvert.INSTANCE.convert(item)); + } + else if (obj != null && mode != 2) {// 如果存在,判断是否允许更新 + SchedulingcalendarDO schedulingcalendarDO = SchedulingcalendarConvert.INSTANCE.convert(item); + schedulingcalendarDO.setId(obj.getId()); + schedulingcalendarMapper.updateById(obj); + } + } + }); + + return errorList; + } + @Override + public void insertBatch(List list){ + List schedulingcalendarDOS = SchedulingcalendarConvert.INSTANCE.convertList03(list); + if(CollUtil.isNotEmpty(schedulingcalendarDOS)){ + List dateList = schedulingcalendarDOS.stream().map(item -> item.getKeyDate()).collect(Collectors.toList()); + String teamCode = schedulingcalendarDOS.get(0).getTeamCode(); + schedulingcalendarMapper.deleteTeamData(dateList,teamCode); + schedulingcalendarMapper.insertBatch(schedulingcalendarDOS); + } + } + @Override + public Integer deleteTeamData(String code, LocalDateTime startTime, LocalDateTime endTime){ + return schedulingcalendarMapper.deleteTeamData2(code,startTime,endTime); + } +} diff --git a/win-module-mes/win-module-mes-biz/src/main/resources/application-local.yaml b/win-module-mes/win-module-mes-biz/src/main/resources/application-local.yaml new file mode 100644 index 0000000..11928a0 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/resources/application-local.yaml @@ -0,0 +1,197 @@ +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + #url: jdbc:mysql://dev.ccwin-in.com:23113/sfms_cloud_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:postgresql://localhost:5432/huaxiang-cloud-dev?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai + # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 + # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + username: postgres + password: psql123 + # username: sa # SQL Server 连接的示例 + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 + # username: SYSDBA # DM 连接的示例 + # password: SYSDBA # DM 连接的示例 + slave: # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms_cloud_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: sfms + password: Microsoft@2023 + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: dev.ccwin-in.com # 地址 + port: 23114 # 端口 + database: 12 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + name-server: 127.0.0.1:9876 # RocketMQ Namesrv + +spring: + # RabbitMQ 配置项,对应 RabbitProperties 配置类 + rabbitmq: + host: 127.0.0.1 # RabbitMQ 服务的地址 + port: 5672 # RabbitMQ 服务的端口 + username: guest # RabbitMQ 服务的账号 + password: guest # RabbitMQ 服务的密码 + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + enabled: false # 是否开启调度中心,默认为 true 开启 + admin: + addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + com.win.module.mes.dal.mysql: debug + com.win.module.mes.dal.mysql.sensitiveword.SensitiveWordMapper: INFO # 配置 SensitiveWordMapper 的日志级别为 info + com.win.module.mes.dal.mysql.sms.SmsChannelMapper: INFO # 配置 SmsChannelMapper 的日志级别为 info + + +--- #################### 微信公众号、小程序相关配置 #################### +wx: + mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 + # app-id: wx041349c6f39b268b # 测试号(牛希尧提供的) + # secret: 5abee519483bc9f8cb37ce280e814bd0 + app-id: wx5b23ba7a5589ecbb # 测试号(自己的) + secret: 2a7b3b20c537e52e74afd395eb85f61f + # app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的) + # secret: bd4f9fab889591b62aeac0d7b8d8b4a0 + # 存储配置,解决 AccessToken 的跨节点的共享 + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wx # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 + # appid: wx62056c0d5e8db250 # 测试号(牛希尧提供的) + # secret: 333ae72f41552af1e998fe1f54e1584a + appid: wx63c280fe3248a3e7 # wenhualian的接口测试号 + secret: 6f270509224a7ae1296bbf1c8cb97aed + # appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的) + # secret: 4a1a04e07f6a4a0751b39c3064a92c8b + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wa # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +win: + env: # 多环境的配置项 + tag: ${HOSTNAME} + captcha: + enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试 + security: + mock-enable: true + xss: + enable: false + exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 + - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + pay: + pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify + pay-return-url: http://niubi.natapp1.cc/api/pay/order/return + refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify + access-log: # 访问日志的配置项 + enable: false + demo: false # 关闭演示模式 + +justauth: + enabled: true + type: + DINGTALK: # 钉钉 + client-id: dingvrnreaje3yqvzhxg + client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI + ignore-check-redirect-uri: true + WECHAT_ENTERPRISE: # 企业微信 + client-id: wwd411c69a39ad2e54 + client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw + agent-id: 1000004 + ignore-check-redirect-uri: true + WECHAT_MP: # 微信公众号 + client-id: ${wx.mp.app-id} + client-secret: ${wx.mp.secret} + ignore-check-redirect-uri: true + cache: + type: REDIS + prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: + timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 diff --git a/win-module-mes/win-module-mes-biz/src/main/resources/application-test.yaml b/win-module-mes/win-module-mes-biz/src/main/resources/application-test.yaml new file mode 100644 index 0000000..24b3aae --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/resources/application-test.yaml @@ -0,0 +1,196 @@ +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms_cloud_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 + # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + username: sfms + password: Microsoft@2023 + # username: sa # SQL Server 连接的示例 + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 + # username: SYSDBA # DM 连接的示例 + # password: SYSDBA # DM 连接的示例 + slave: # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms_cloud_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: sfms + password: Microsoft@2023 + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: dev.ccwin-in.com # 地址 + port: 23114 # 端口 + database: 12 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + name-server: 127.0.0.1:9876 # RocketMQ Namesrv + +spring: + # RabbitMQ 配置项,对应 RabbitProperties 配置类 + rabbitmq: + host: 127.0.0.1 # RabbitMQ 服务的地址 + port: 5672 # RabbitMQ 服务的端口 + username: guest # RabbitMQ 服务的账号 + password: guest # RabbitMQ 服务的密码 + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + enabled: false # 是否开启调度中心,默认为 true 开启 + admin: + addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + com.win.module.mes.dal.mysql: debug + com.win.module.mes.dal.mysql.sensitiveword.SensitiveWordMapper: INFO # 配置 SensitiveWordMapper 的日志级别为 info + com.win.module.mes.dal.mysql.sms.SmsChannelMapper: INFO # 配置 SmsChannelMapper 的日志级别为 info + + +--- #################### 微信公众号、小程序相关配置 #################### +wx: + mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 + # app-id: wx041349c6f39b268b # 测试号(牛希尧提供的) + # secret: 5abee519483bc9f8cb37ce280e814bd0 + app-id: wx5b23ba7a5589ecbb # 测试号(自己的) + secret: 2a7b3b20c537e52e74afd395eb85f61f + # app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的) + # secret: bd4f9fab889591b62aeac0d7b8d8b4a0 + # 存储配置,解决 AccessToken 的跨节点的共享 + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wx # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 + # appid: wx62056c0d5e8db250 # 测试号(牛希尧提供的) + # secret: 333ae72f41552af1e998fe1f54e1584a + appid: wx63c280fe3248a3e7 # wenhualian的接口测试号 + secret: 6f270509224a7ae1296bbf1c8cb97aed + # appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的) + # secret: 4a1a04e07f6a4a0751b39c3064a92c8b + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wa # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +win: + env: # 多环境的配置项 + tag: ${HOSTNAME} + captcha: + enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试 + security: + mock-enable: true + xss: + enable: false + exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 + - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + pay: + pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify + pay-return-url: http://niubi.natapp1.cc/api/pay/order/return + refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify + access-log: # 访问日志的配置项 + enable: false + demo: false # 关闭演示模式 + +justauth: + enabled: true + type: + DINGTALK: # 钉钉 + client-id: dingvrnreaje3yqvzhxg + client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI + ignore-check-redirect-uri: true + WECHAT_ENTERPRISE: # 企业微信 + client-id: wwd411c69a39ad2e54 + client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw + agent-id: 1000004 + ignore-check-redirect-uri: true + WECHAT_MP: # 微信公众号 + client-id: ${wx.mp.app-id} + client-secret: ${wx.mp.secret} + ignore-check-redirect-uri: true + cache: + type: REDIS + prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: + timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 diff --git a/win-module-mes/win-module-mes-biz/src/main/resources/application.yaml b/win-module-mes/win-module-mes-biz/src/main/resources/application.yaml new file mode 100644 index 0000000..096628e --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/resources/application.yaml @@ -0,0 +1,168 @@ +spring: + main: + allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 + allow-bean-definition-overriding: true # 允许 Bean 覆盖,例如说 Feign 等会存在重复定义的服务 + + # Servlet 配置 + servlet: + # 文件上传相关配置项 + multipart: + max-file-size: 16MB # 单个文件大小 + max-request-size: 32MB # 设置总上传的文件大小 + mvc: + pathmatch: + matching-strategy: ANT_PATH_MATCHER # 解决 SpringFox 与 SpringBoot 2.6.x 不兼容的问题,参见 SpringFoxHandlerProviderBeanPostProcessor 类 + + # Jackson 配置项 + jackson: + serialization: + write-dates-as-timestamps: true # 设置 LocalDateTime 的格式,使用时间戳 + write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401 + write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳 + fail-on-empty-beans: false # 允许序列化无属性的 Bean + + # Cache 配置项 + cache: + type: REDIS + redis: + time-to-live: 1h # 设置过期时间为 1 小时 + +--- #################### 接口文档配置 #################### + +springdoc: + api-docs: + enabled: true # 1. 是否开启 Swagger 接文档的元数据 + path: /v3/api-docs + swagger-ui: + enabled: true # 2.1 是否开启 Swagger 文档的官方 UI 界面 + path: /swagger-ui.html + default-flat-param-object: true # 参见 https://doc.xiaominfo.com/docs/faq/v4/knife4j-parameterobject-flat-param 文档 + +knife4j: + enable: true # 2.2 是否开启 Swagger 文档的 Knife4j UI 界面 + setting: + language: zh_cn + +# MyBatis Plus 的配置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + global-config: + db-config: + id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。 + # id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库 + # id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库 + # id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解 + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + banner: false # 关闭控制台的 Banner 打印 + type-aliases-package: ${win.info.base-package}.dal.dataobject + encryptor: + password: XDV71a+xqStEA3WH # 加解密的秘钥,可使用 https://www.imaegoo.com/2020/aes-key-generator/ 网站生成 + +mybatis-plus-join: + banner: false # 关闭控制台的 Banner 打印 + +# Spring Data Redis 配置 +spring: + data: + redis: + repositories: + enabled: false # 项目未使用到 Spring Data Redis 的 Repository,所以直接禁用,保证启动速度 + +# VO 转换(数据翻译)相关 +easy-trans: + is-enable-global: true # 启用全局翻译(拦截所有 SpringMVC ResponseBody 进行自动翻译 )。如果对于性能要求很高可关闭此配置,或通过 @IgnoreTrans 忽略某个接口 + is-enable-cloud: false # 禁用 TransType.RPC 微服务模式 + +--- #################### RPC 远程调用相关配置 #################### + +--- #################### 消息队列相关 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + # Producer 配置项 + producer: + group: ${spring.application.name}_PRODUCER # 生产者分组 + +spring: + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + # Kafka Producer 配置项 + producer: + acks: 1 # 0-不应答。1-leader 应答。all-所有 leader 和 follower 应答。 + retries: 3 # 发送失败时,重试发送的次数 + value-serializer: org.springframework.kafka.support.serializer.JsonSerializer # 消息的 value 的序列化 + # Kafka Consumer 配置项 + consumer: + auto-offset-reset: earliest # 设置消费者分组最初的消费进度为 earliest 。可参考博客 https://blog.csdn.net/lishuangzhe7047/article/details/74530417 理解 + value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer + properties: + spring.json.trusted.packages: '*' + # Kafka Consumer Listener 监听器配置 + listener: + missing-topics-fatal: false # 消费监听接口监听的主题不存在时,默认会报错。所以通过设置为 false ,解决报错 + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + executor: + appname: ${spring.application.name} # 执行器 AppName + logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径 + accessToken: default_token # 执行器通讯TOKEN + + + +--- #################### 芋道相关配置 #################### + +win: + info: + version: 1.0.0 + base-package: com.win.module.mes + web: + admin-ui: + url: http://dashboard.win.iocoder.cn # Admin 管理后台 UI 的地址 + swagger: + title: 管理后台 + description: 提供管理员管理的所有功能 + version: ${win.info.version} + base-package: ${win.info.base-package} + captcha: + enable: true # 验证码的开关,默认为 true; + tenant: # 多租户相关配置项 + enable: true + ignore-urls: + - /admin-api/system/tenant/get-id-by-name # 基于名字获取租户,不许带租户编号 + - /admin-api/system/tenant/get-by-website # 基于域名获取租户,不许带租户编号 + - /admin-api/system/captcha/get-image # 获取图片验证码,和租户无关 + - /admin-api/system/captcha/get # 获取图片验证码,和租户无关 + - /admin-api/system/captcha/check # 校验图片验证码,和租户无关 + - /admin-api/system/sms/callback/* # 短信回调接口,无法带上租户编号 + - /rpc-api/system/tenant/valid # 防止递归。避免调用 /rpc-api/system/tenant/valid 接口时,又去触发 /rpc-api/system/tenant/valid 去校验 + - /rpc-api/system/tenant/id-list # 获得租户列表的时候,无需传递租户编号 + - /rpc-api/system/oauth2/token/check # 访问令牌校验时,无需传递租户编号;主要解决上传文件的场景,前端不会传递 tenant-id! + ignore-tables: + - system_tenant + - system_tenant_package + - system_dict_data + - system_dict_type + - system_error_code + - system_menu + - system_sms_channel + - system_sms_template + - system_sms_log + - system_sensitive_word + - system_oauth2_client + - system_mail_account + - system_mail_template + - system_mail_log + - system_notify_template + sms-code: # 短信验证码相关的配置项 + expire-times: 10m + send-frequency: 1m + send-maximum-quantity-per-day: 10 + begin-code: 9999 # 这里配置 9999 的原因是,测试方便。 + end-code: 9999 # 这里配置 9999 的原因是,测试方便。 + +debug: false diff --git a/win-module-mes/win-module-mes-biz/src/main/resources/bootstrap-local.yaml b/win-module-mes/win-module-mes-biz/src/main/resources/bootstrap-local.yaml new file mode 100644 index 0000000..cd948e3 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/resources/bootstrap-local.yaml @@ -0,0 +1,23 @@ +--- #################### 注册中心相关配置 #################### +spring: + cloud: + nacos: + server-addr: 192.168.0.103:8848 + discovery: + namespace: win-cloud-dev # 命名空间。这里使用 dev 开发环境 + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 +server: + port: 48083 +--- #################### 配置中心相关配置 #################### + +spring: + cloud: + nacos: + # Nacos Config 配置项,对应 NacosConfigProperties 配置属性类 + config: + server-addr: 192.168.0.103:8848 # Nacos 服务器地址 + namespace: win-cloud-dev # 命名空间 dev 的ID,不能直接使用 dev 名称。创建命名空间的时候需要指定ID为 dev,这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + name: ${spring.application.name} # 使用的 Nacos 配置集的 dataId,默认为 spring.application.name + file-extension: yaml # 使用的 Nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties diff --git a/win-module-mes/win-module-mes-biz/src/main/resources/bootstrap-test.yaml b/win-module-mes/win-module-mes-biz/src/main/resources/bootstrap-test.yaml new file mode 100644 index 0000000..f11efc7 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/resources/bootstrap-test.yaml @@ -0,0 +1,23 @@ +--- #################### 注册中心相关配置 #################### +spring: + cloud: + nacos: + server-addr: 192.168.0.103:8848 + discovery: + namespace: win-cloud-dev # 命名空间。这里使用 dev 开发环境 + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 +server: + port: 48086 +--- #################### 配置中心相关配置 #################### + +spring: + cloud: + nacos: + # Nacos Config 配置项,对应 NacosConfigProperties 配置属性类 + config: + server-addr: 192.168.0.103:8848 # Nacos 服务器地址 + namespace: win-cloud-dev # 命名空间 dev 的ID,不能直接使用 dev 名称。创建命名空间的时候需要指定ID为 dev,这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + name: ${spring.application.name} # 使用的 Nacos 配置集的 dataId,默认为 spring.application.name + file-extension: yaml # 使用的 Nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties diff --git a/win-module-mes/win-module-mes-biz/src/main/resources/bootstrap.yaml b/win-module-mes/win-module-mes-biz/src/main/resources/bootstrap.yaml new file mode 100644 index 0000000..1dca395 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/resources/bootstrap.yaml @@ -0,0 +1,13 @@ +spring: + application: + name: mes-server + + profiles: + active: local + + + +# 日志文件配置。注意,如果 logging.file.name 不放在 bootstrap.yaml 配置文件,而是放在 application.yaml 中,会导致出现 LOG_FILE_IS_UNDEFINED 文件 +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 diff --git a/win-module-mes/win-module-mes-biz/src/main/resources/demo/DemoGenMapper.xml b/win-module-mes/win-module-mes-biz/src/main/resources/demo/DemoGenMapper.xml new file mode 100644 index 0000000..856ab5a --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/resources/demo/DemoGenMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/win-module-mes/win-module-mes-biz/src/main/resources/schedulingcalendar/SchedulingcalendarMapper.xml b/win-module-mes/win-module-mes-biz/src/main/resources/schedulingcalendar/SchedulingcalendarMapper.xml new file mode 100644 index 0000000..2a3bbf9 --- /dev/null +++ b/win-module-mes/win-module-mes-biz/src/main/resources/schedulingcalendar/SchedulingcalendarMapper.xml @@ -0,0 +1,22 @@ + + + + + + + delete from basic_schedulingcalendar where team_code=#{param2} and key_date in + + #{item} + + + + + delete from basic_schedulingcalendar where team_code=#{param1} and work_date between #{param2} and #{param3} + + + diff --git a/win-module-report/pom.xml b/win-module-report/pom.xml new file mode 100644 index 0000000..ec84c4c --- /dev/null +++ b/win-module-report/pom.xml @@ -0,0 +1,23 @@ + + + + com.win + win + ${revision} + + 4.0.0 + + win-module-report-api + win-module-report-biz + + win-module-report + pom + + ${project.artifactId} + + report 模块,主要实现数据可视化报表等功能。 + + + diff --git a/win-module-report/win-module-report-api/pom.xml b/win-module-report/win-module-report-api/pom.xml new file mode 100644 index 0000000..6a78699 --- /dev/null +++ b/win-module-report/win-module-report-api/pom.xml @@ -0,0 +1,26 @@ + + + + com.win + win-module-report + ${revision} + + 4.0.0 + + win-module-report-api + jar + + ${project.artifactId} + + report 模块 API,暴露给其它模块调用 + + + + + com.win + win-common + + + diff --git a/win-module-report/win-module-report-api/src/main/java/com/win/module/report/api/package-info.java b/win-module-report/win-module-report-api/src/main/java/com/win/module/report/api/package-info.java new file mode 100644 index 0000000..152552f --- /dev/null +++ b/win-module-report/win-module-report-api/src/main/java/com/win/module/report/api/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位,避免 api 目录无文件时,git 无法提交 + */ +package com.win.module.report.api; diff --git a/win-module-report/win-module-report-api/src/main/java/com/win/module/report/enums/ErrorCodeConstants.java b/win-module-report/win-module-report-api/src/main/java/com/win/module/report/enums/ErrorCodeConstants.java new file mode 100644 index 0000000..fab50dd --- /dev/null +++ b/win-module-report/win-module-report-api/src/main/java/com/win/module/report/enums/ErrorCodeConstants.java @@ -0,0 +1,15 @@ +package com.win.module.report.enums; + +import com.win.framework.common.exception.ErrorCode; + +/** + * Report 错误码枚举类 + * + * report 系统,使用 1-003-000-000 段 + */ +public interface ErrorCodeConstants { + + // ========== GoView 模块 1-003-000-000 ========== + ErrorCode GO_VIEW_PROJECT_NOT_EXISTS = new ErrorCode(1_003_000_000, "GoView 项目不存在"); + +} diff --git a/win-module-report/win-module-report-biz/Dockerfile b/win-module-report/win-module-report-biz/Dockerfile new file mode 100644 index 0000000..9b6adaf --- /dev/null +++ b/win-module-report/win-module-report-biz/Dockerfile @@ -0,0 +1,19 @@ +## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性 +## 感谢复旦核博士的建议!灰子哥,牛皮! +FROM eclipse-temurin:21-jre + +## 创建目录,并使用它作为工作目录 +RUN mkdir -p /win-module-report-biz +WORKDIR /win-module-report-biz +## 将后端项目的 Jar 文件,复制到镜像中 +COPY ./target/win-module-report-biz.jar app.jar + +## 设置 TZ 时区 +## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖 +ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m" + +## 暴露后端项目的 48080 端口 +EXPOSE 48084 + +## 启动后端项目 +CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar diff --git a/win-module-report/win-module-report-biz/pom.xml b/win-module-report/win-module-report-biz/pom.xml new file mode 100644 index 0000000..37fa1b2 --- /dev/null +++ b/win-module-report/win-module-report-biz/pom.xml @@ -0,0 +1,144 @@ + + + + com.win + win-module-report + ${revision} + + 4.0.0 + + win-module-report-biz + jar + + ${project.artifactId} + + report 模块,主要实现数据可视化报表等功能: + 1. 基于「积木报表」实现,打印设计、报表设计、图形设计、大屏设计等。 + + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + + com.win + win-module-report-api + ${revision} + + + + com.win + win-module-system-api + ${revision} + + + com.win + win-module-infra-api + ${revision} + + + + + com.win + win-spring-boot-starter-biz-tenant + + + + + com.win + win-spring-boot-starter-security + + + + + com.win + win-spring-boot-starter-mybatis + + + + com.win + win-spring-boot-starter-redis + + + + + com.win + win-spring-boot-starter-rpc + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + + + + + + + + + + + + com.win + win-spring-boot-starter-monitor + + + + + + + + org.jeecgframework.jimureport + jimureport-spring-boot3-starter-fastjson2 + 1.7.32 + + + jsqlparser + com.github.jsqlparser + + + + + + xerces + xercesImpl + + + + + + ${project.artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + + + repackage + + + + + + + diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/ReportServerApplication.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/ReportServerApplication.java new file mode 100644 index 0000000..76df278 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/ReportServerApplication.java @@ -0,0 +1,30 @@ +package com.win.module.report; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 项目的启动类 + * + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * + * @author 芋道源码 + */ +@SpringBootApplication +public class ReportServerApplication { + + public static void main(String[] args) { + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + + SpringApplication.run(ReportServerApplication.class, args); + + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + } + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/ajreport/package-info.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/ajreport/package-info.java new file mode 100644 index 0000000..2896991 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/ajreport/package-info.java @@ -0,0 +1 @@ +package com.win.module.report.controller.admin.ajreport; diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/GoViewDataController.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/GoViewDataController.java new file mode 100644 index 0000000..60200fb --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/GoViewDataController.java @@ -0,0 +1,63 @@ +package com.win.module.report.controller.admin.goview; + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.RandomUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.module.report.controller.admin.goview.vo.data.GoViewDataGetBySqlReqVO; +import com.win.module.report.controller.admin.goview.vo.data.GoViewDataRespVO; +import com.win.module.report.service.goview.GoViewDataService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import java.util.*; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - GoView 数据", description = "提供 SQL、HTTP 等数据查询的能力") +@RestController +@RequestMapping("/report/go-view/data") +@Validated +public class GoViewDataController { + + @Resource + private GoViewDataService goViewDataService; + + @RequestMapping("/get-by-sql") + @Operation(summary = "使用 SQL 查询数据") + @PreAuthorize("@ss.hasPermission('report:go-view-data:get-by-sql')") + public CommonResult getDataBySQL(@Valid @RequestBody GoViewDataGetBySqlReqVO reqVO) { + return success(goViewDataService.getDataBySQL(reqVO.getSql())); + } + + @RequestMapping("/get-by-http") + @Operation(summary = "使用 HTTP 查询数据", description = "这个只是示例接口,实际应该每个查询,都要写一个接口") + @PreAuthorize("@ss.hasPermission('report:go-view-data:get-by-http')") + public CommonResult getDataByHttp( + @RequestParam(required = false) Map params, + @RequestBody(required = false) String body) { // params、body 按照需要去接收,这里仅仅是示例 + GoViewDataRespVO respVO = new GoViewDataRespVO(); + // 1. 数据维度 + respVO.setDimensions(Arrays.asList("日期", "PV", "UV")); // PV 是每天访问次数;UV 是每天访问人数 + // 2. 明细数据列表 + // 目前通过随机的方式生成。一般来说,这里你可以写逻辑来实现数据的返回 + respVO.setSource(new LinkedList<>()); + for (int i = 1; i <= 12; i++) { + String date = "2021-" + (i < 10 ? "0" + i : i); + Integer pv = RandomUtil.randomInt(1000, 10000); + Integer uv = RandomUtil.randomInt(100, 1000); + respVO.getSource().add(MapUtil.builder().put("日期", date) + .put("PV", pv).put("UV", uv).build()); + } + return success(respVO); + } + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/GoViewProjectController.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/GoViewProjectController.java new file mode 100644 index 0000000..6ada35c --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/GoViewProjectController.java @@ -0,0 +1,76 @@ +package com.win.module.report.controller.admin.goview; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.module.report.controller.admin.goview.vo.project.GoViewProjectCreateReqVO; +import com.win.module.report.controller.admin.goview.vo.project.GoViewProjectRespVO; +import com.win.module.report.controller.admin.goview.vo.project.GoViewProjectUpdateReqVO; +import com.win.module.report.convert.goview.GoViewProjectConvert; +import com.win.module.report.dal.dataobject.goview.GoViewProjectDO; +import com.win.module.report.service.goview.GoViewProjectService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +@Tag(name = "管理后台 - GoView 项目") +@RestController +@RequestMapping("/report/go-view/project") +@Validated +public class GoViewProjectController { + + @Resource + private GoViewProjectService goViewProjectService; + + @PostMapping("/create") + @Operation(summary = "创建项目") + @PreAuthorize("@ss.hasPermission('report:go-view-project:create')") + public CommonResult createProject(@Valid @RequestBody GoViewProjectCreateReqVO createReqVO) { + return success(goViewProjectService.createProject(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新项目") + @PreAuthorize("@ss.hasPermission('report:go-view-project:update')") + public CommonResult updateProject(@Valid @RequestBody GoViewProjectUpdateReqVO updateReqVO) { + goViewProjectService.updateProject(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除 GoView 项目") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('report:go-view-project:delete')") + public CommonResult deleteProject(@RequestParam("id") Long id) { + goViewProjectService.deleteProject(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得项目") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('report:go-view-project:query')") + public CommonResult getProject(@RequestParam("id") Long id) { + GoViewProjectDO project = goViewProjectService.getProject(id); + return success(GoViewProjectConvert.INSTANCE.convert(project)); + } + + @GetMapping("/my-page") + @Operation(summary = "获得我的项目分页") + @PreAuthorize("@ss.hasPermission('report:go-view-project:query')") + public CommonResult> getMyProjectPage(@Valid PageParam pageVO) { + PageResult pageResult = goViewProjectService.getMyProjectPage( + pageVO, getLoginUserId()); + return success(GoViewProjectConvert.INSTANCE.convertPage(pageResult)); + } + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/data/GoViewDataGetBySqlReqVO.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/data/GoViewDataGetBySqlReqVO.java new file mode 100644 index 0000000..9b8584a --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/data/GoViewDataGetBySqlReqVO.java @@ -0,0 +1,16 @@ +package com.win.module.report.controller.admin.goview.vo.data; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; + +@Schema(description = "管理后台 - GoView 使用 SQL 查询数据 Request VO") +@Data +public class GoViewDataGetBySqlReqVO { + + @Schema(description = "SQL 语句", requiredMode = Schema.RequiredMode.REQUIRED, example = "SELECT * FROM user") + @NotEmpty(message = "SQL 语句不能为空") + private String sql; + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/data/GoViewDataRespVO.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/data/GoViewDataRespVO.java new file mode 100644 index 0000000..00a2624 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/data/GoViewDataRespVO.java @@ -0,0 +1,19 @@ +package com.win.module.report.controller.admin.goview.vo.data; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Schema(description = "管理后台 - GoView 数据 Response VO") +@Data +public class GoViewDataRespVO { + + @Schema(description = "数据维度", requiredMode = Schema.RequiredMode.REQUIRED, example = "['product', 'data1', 'data2']") + private List dimensions; + + @Schema(description = "数据明细列表", requiredMode = Schema.RequiredMode.REQUIRED) + private List> source; + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/project/GoViewProjectCreateReqVO.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/project/GoViewProjectCreateReqVO.java new file mode 100644 index 0000000..1f0798d --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/project/GoViewProjectCreateReqVO.java @@ -0,0 +1,15 @@ +package com.win.module.report.controller.admin.goview.vo.project; + +import lombok.*; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.*; + +@Schema(description = "管理后台 - GoView 项目创建 Request VO") +@Data +public class GoViewProjectCreateReqVO { + + @Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @NotEmpty(message = "项目名称不能为空") + private String name; + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/project/GoViewProjectRespVO.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/project/GoViewProjectRespVO.java new file mode 100644 index 0000000..47b3f10 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/project/GoViewProjectRespVO.java @@ -0,0 +1,36 @@ +package com.win.module.report.controller.admin.goview.vo.project; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - GoView 项目 Response VO") +@Data +public class GoViewProjectRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18993") + private Long id; + + @Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + private String name; + + @Schema(description = "发布状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; + + @Schema(description = "报表内容") // JSON 格式 + private String content; + + @Schema(description = "预览图片 URL", example = "https://www.iocoder.cn") + private String picUrl; + + @Schema(description = "项目备注", example = "你猜") + private String remark; + + @Schema(description = "创建人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private String creator; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/project/GoViewProjectUpdateReqVO.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/project/GoViewProjectUpdateReqVO.java new file mode 100644 index 0000000..c8a6424 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/admin/goview/vo/project/GoViewProjectUpdateReqVO.java @@ -0,0 +1,34 @@ +package com.win.module.report.controller.admin.goview.vo.project; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.validation.InEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import jakarta.validation.constraints.*; + +@Schema(description = "管理后台 - GoView 项目更新 Request VO") +@Data +public class GoViewProjectUpdateReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18993") + @NotNull(message = "编号不能为空") + private Long id; + + @Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + private String name; + + @Schema(description = "发布状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @InEnum(value = CommonStatusEnum.class, message = "发布状态必须是 {value}") + private Integer status; + + @Schema(description = "报表内容") // JSON 格式 + private String content; + + @Schema(description = "预览图片 URL", example = "https://www.iocoder.cn") + private String picUrl; + + @Schema(description = "项目备注", example = "你猜") + private String remark; + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/package-info.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/package-info.java new file mode 100644 index 0000000..2f99e82 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/controller/package-info.java @@ -0,0 +1,6 @@ +/** + * 提供 RESTful API 给前端: + * 1. admin 包:提供给管理后台 win-ui-admin 前端项目 + * 2. app 包:提供给用户 APP win-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 + */ +package com.win.module.report.controller; diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/convert/ajreport/package-info.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/convert/ajreport/package-info.java new file mode 100644 index 0000000..3f73468 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/convert/ajreport/package-info.java @@ -0,0 +1,4 @@ +/** + * TODO 占位,后续删除 + */ +package com.win.module.report.convert.ajreport; diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/convert/goview/GoViewProjectConvert.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/convert/goview/GoViewProjectConvert.java new file mode 100644 index 0000000..c24c163 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/convert/goview/GoViewProjectConvert.java @@ -0,0 +1,24 @@ +package com.win.module.report.convert.goview; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.report.controller.admin.goview.vo.project.GoViewProjectCreateReqVO; +import com.win.module.report.controller.admin.goview.vo.project.GoViewProjectRespVO; +import com.win.module.report.controller.admin.goview.vo.project.GoViewProjectUpdateReqVO; +import com.win.module.report.dal.dataobject.goview.GoViewProjectDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface GoViewProjectConvert { + + GoViewProjectConvert INSTANCE = Mappers.getMapper(GoViewProjectConvert.class); + + GoViewProjectDO convert(GoViewProjectCreateReqVO bean); + + GoViewProjectDO convert(GoViewProjectUpdateReqVO bean); + + GoViewProjectRespVO convert(GoViewProjectDO bean); + + PageResult convertPage(PageResult page); + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/dataobject/ajreport/package-info.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/dataobject/ajreport/package-info.java new file mode 100644 index 0000000..b807c4d --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/dataobject/ajreport/package-info.java @@ -0,0 +1,4 @@ +/** + * TODO 芋艿:占位,待删除 + */ +package com.win.module.report.dal.dataobject.ajreport; diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/dataobject/goview/GoViewProjectDO.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/dataobject/goview/GoViewProjectDO.java new file mode 100644 index 0000000..7fd0a1b --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/dataobject/goview/GoViewProjectDO.java @@ -0,0 +1,57 @@ +package com.win.module.report.dal.dataobject.goview; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * GoView 项目表 + * + * 每个大屏图标,对应一个项目 + * + * @author 芋道源码 + */ +@TableName(value = "report_go_view_project", autoResultMap = true) // 由于 SQL Server 的 system_user 是关键字,所以使用 system_users +@KeySequence("report_go_view_project_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class GoViewProjectDO extends BaseDO { + + /** + * 编号,数据库自增 + */ + @TableId + private Long id; + /** + * 项目名称 + */ + private String name; + /** + * 预览图片 URL + */ + private String picUrl; + /** + * 报表内容 + * + * JSON 配置,使用字符串存储 + */ + private String content; + /** + * 发布状态 + * + * 0 - 已发布 + * 1 - 未发布 + * + * 枚举 {@link com.win.framework.common.enums.CommonStatusEnum} + */ + private Integer status; + /** + * 项目备注 + */ + private String remark; +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/mysql/ajreport/package-info.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/mysql/ajreport/package-info.java new file mode 100644 index 0000000..be8b06c --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/mysql/ajreport/package-info.java @@ -0,0 +1,4 @@ +/** + * TODO 芋艿:占位,待删除 + */ +package com.win.module.report.dal.mysql.ajreport; diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/mysql/goview/GoViewProjectMapper.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/mysql/goview/GoViewProjectMapper.java new file mode 100644 index 0000000..bebfa58 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/dal/mysql/goview/GoViewProjectMapper.java @@ -0,0 +1,19 @@ +package com.win.module.report.dal.mysql.goview; + +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.report.dal.dataobject.goview.GoViewProjectDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface GoViewProjectMapper extends BaseMapperX { + + default PageResult selectPage(PageParam reqVO, Long userId) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(GoViewProjectDO::getCreator, userId) + .orderByDesc(GoViewProjectDO::getId)); + } + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/jmreport/config/JmReportConfiguration.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/jmreport/config/JmReportConfiguration.java new file mode 100644 index 0000000..4d66776 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/jmreport/config/JmReportConfiguration.java @@ -0,0 +1,29 @@ +package com.win.module.report.framework.jmreport.config; + +import com.win.framework.security.config.SecurityProperties; +import com.win.module.system.api.oauth2.OAuth2TokenApi; +import com.win.module.report.framework.jmreport.core.service.JmReportTokenServiceImpl; +import com.win.module.system.api.permission.PermissionApi; +import org.jeecg.modules.jmreport.api.JmReportTokenServiceI; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +/** + * 积木报表的配置类 + * + * @author 芋道源码 + */ +@Configuration(proxyBeanMethods = false) +@ComponentScan(basePackages = "org.jeecg.modules.jmreport") // 扫描积木报表的包 +public class JmReportConfiguration { + + @Bean + @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") + public JmReportTokenServiceI jmReportTokenService(OAuth2TokenApi oAuth2TokenApi, + PermissionApi permissionApi, + SecurityProperties securityProperties) { + return new JmReportTokenServiceImpl(oAuth2TokenApi, permissionApi, securityProperties); + } + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/jmreport/core/service/JmReportTokenServiceImpl.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/jmreport/core/service/JmReportTokenServiceImpl.java new file mode 100644 index 0000000..ac7b9bf --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/jmreport/core/service/JmReportTokenServiceImpl.java @@ -0,0 +1,153 @@ +package com.win.module.report.framework.jmreport.core.service; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.exception.ServiceException; +import com.win.framework.common.util.servlet.ServletUtils; +import com.win.framework.security.config.SecurityProperties; +import com.win.framework.security.core.LoginUser; +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import com.win.framework.tenant.core.context.TenantContextHolder; +import com.win.framework.web.core.util.WebFrameworkUtils; +import com.win.module.system.api.oauth2.OAuth2TokenApi; +import com.win.module.system.api.oauth2.dto.OAuth2AccessTokenCheckRespDTO; +import com.win.module.system.api.permission.PermissionApi; +import com.win.module.system.enums.permission.RoleCodeEnum; +import lombok.RequiredArgsConstructor; +import org.jeecg.modules.jmreport.api.JmReportTokenServiceI; +import org.springframework.http.HttpHeaders; + +import jakarta.servlet.http.HttpServletRequest; +import java.util.Objects; + +/** + * {@link JmReportTokenServiceI} 实现类,提供积木报表的 Token 校验、用户信息的查询等功能 + * + * @author 随心 + */ +@RequiredArgsConstructor +public class JmReportTokenServiceImpl implements JmReportTokenServiceI { + + /** + * 积木 token head 头 + */ + private static final String JM_TOKEN_HEADER = "X-Access-Token"; + /** + * auth 相关格式 + */ + private static final String AUTHORIZATION_FORMAT = SecurityFrameworkUtils.AUTHORIZATION_BEARER + " %s"; + + private final OAuth2TokenApi oauth2TokenApi; + private final PermissionApi permissionApi; + + private final SecurityProperties securityProperties; + + /** + * 自定义 API 数据集appian自定义 Header,解决 Token 传递。 + * 参考 api数据集token机制详解 文档 + * + * @return 新 head + */ + @Override + public HttpHeaders customApiHeader() { + // 读取积木标标系统的 token + HttpServletRequest request = ServletUtils.getRequest(); + String token = request.getHeader(JM_TOKEN_HEADER); + + // 设置到 win 系统的 token + HttpHeaders headers = new HttpHeaders(); + headers.add(securityProperties.getTokenHeader(), String.format(AUTHORIZATION_FORMAT, token)); + return headers; + } + + /** + * 校验 Token 是否有效,即验证通过 + * + * @param token JmReport 前端传递的 token + * @return 是否认证通过 + */ + @Override + public Boolean verifyToken(String token) { + Long userId = SecurityFrameworkUtils.getLoginUserId(); + if (!Objects.isNull(userId)) { + return true; + } + return buildLoginUserByToken(token) != null; + } + + /** + * 获得用户编号 + *

    + * 虽然方法名获得的是 username,实际对应到项目中是用户编号 + * + * @param token JmReport 前端传递的 token + * @return 用户编号 + */ + @Override + public String getUsername(String token) { + Long userId = SecurityFrameworkUtils.getLoginUserId(); + if (ObjectUtil.isNotNull(userId)) { + return String.valueOf(userId); + } + LoginUser user = buildLoginUserByToken(token); + return user == null ? null : String.valueOf(user.getId()); + } + + /** + * 基于 token 构建登录用户 + * + * @param token token + * @return 返回 token 对应的用户信息 + */ + private LoginUser buildLoginUserByToken(String token) { + if (StrUtil.isEmpty(token)) { + return null; + } + // TODO 如下的实现不算特别优雅,主要咱是不想搞的太复杂,所以参考对应的 Filter 先实现了 + + // ① 参考 TokenAuthenticationFilter 的认证逻辑(Security 的上下文清理,交给 Spring Security 完成) + // 目的:实现基于 JmReport 前端传递的 token,实现认证 + TenantContextHolder.setIgnore(true); // 忽略租户,保证可查询到 token 信息 + LoginUser user = null; + try { + OAuth2AccessTokenCheckRespDTO accessToken = oauth2TokenApi.checkAccessToken(token).getCheckedData(); + if (accessToken == null) { + return null; + } + user = new LoginUser().setId(accessToken.getUserId()).setUserType(accessToken.getUserType()) + .setTenantId(accessToken.getTenantId()).setScopes(accessToken.getScopes()); + } catch (ServiceException ignored) { + // do nothing:如果报错,说明认证失败,则返回 false 即可 + } + if (user == null) { + return null; + } + SecurityFrameworkUtils.setLoginUser(user, WebFrameworkUtils.getRequest()); + + // ② 参考 TenantContextWebFilter 实现(Tenant 的上下文清理,交给 TenantContextWebFilter 完成) + // 目的:基于 LoginUser 获得到的租户编号,设置到 Tenant 上下文,避免查询数据库时的报错 + TenantContextHolder.setIgnore(false); + TenantContextHolder.setTenantId(user.getTenantId()); + return user; + } + + @Override + public String[] getRoles(String token) { + // 参见文档 https://help.jeecg.com/jimureport/prodSafe.html 文档 + // 适配:如果是本系统的管理员,则转换成 jimu 报表的管理员 + Long userId = SecurityFrameworkUtils.getLoginUserId(); + return permissionApi.hasAnyRoles(userId, RoleCodeEnum.SUPER_ADMIN.getCode()).getCheckedData() + ? new String[]{"admin"} : null; + } + + @Override + public String getTenantId() { + // 补充说明:不能直接通过 TenantContext 获取,因为 jimu 报表前端请求时,没有带上 tenant-id Header + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + if (loginUser == null) { + return null; + } + return StrUtil.toStringOrNull(loginUser.getTenantId()); + } + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/jmreport/core/web/package-info.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/jmreport/core/web/package-info.java new file mode 100644 index 0000000..d062126 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/jmreport/core/web/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位,后续会基于 Filter 实现积木报表的认证等功能,替代 {@link com.win.module.report.framework.jmreport.core.service.JmReportTokenServiceImpl} + */ +package com.win.module.report.framework.jmreport.core.web; diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/package-info.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/package-info.java new file mode 100644 index 0000000..241bd84 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/package-info.java @@ -0,0 +1,6 @@ +/** + * 属于 report 模块的 framework 封装 + * + * @author 芋道源码 + */ +package com.win.module.report.framework; diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/security/config/SecurityConfiguration.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/security/config/SecurityConfiguration.java new file mode 100644 index 0000000..5505f1f --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/security/config/SecurityConfiguration.java @@ -0,0 +1,37 @@ +package com.win.module.report.framework.security.config; + +import com.win.framework.security.config.AuthorizeRequestsCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer; +import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; + +/** + * Report 模块的 Security 配置 + */ +@Configuration("reportSecurityConfiguration") +public class SecurityConfiguration { + + @Bean("reportAuthorizeRequestsCustomizer") + public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { + return new AuthorizeRequestsCustomizer() { + + @Override + public void customize(AuthorizeHttpRequestsConfigurer.AuthorizationManagerRequestMatcherRegistry registry) { + // Swagger 接口文档 + registry.requestMatchers("/v3/api-docs/**").permitAll() // 元数据 + .requestMatchers("/swagger-ui.html").permitAll(); // Swagger UI + // Spring Boot Actuator 的安全配置 + registry.requestMatchers("/actuator").permitAll() + .requestMatchers("/actuator/**").permitAll(); + // Druid 监控 + registry.requestMatchers("/druid/**").permitAll(); + // 积木报表 + registry.requestMatchers("/jmreport/**").permitAll(); + } + + }; + } + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/security/core/package-info.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/security/core/package-info.java new file mode 100644 index 0000000..32d8202 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/framework/security/core/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package com.win.module.report.framework.security.core; diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/package-info.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/package-info.java new file mode 100644 index 0000000..3eb95eb --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/package-info.java @@ -0,0 +1,9 @@ +/** + * report 模块,主要实现数据可视化报表等功能: + * 1. 基于「积木报表」实现,打印设计、报表设计、图形设计、大屏设计等。URL 前缀是 /jmreport,表名前缀是 jimu_ + * + * 由于「积木报表」的大屏设计器需要收费,后续会自研,对应的是: + * 1. Controller URL:以 /report/ 开头,避免和其它 Module 冲突 + * 2. DataObject 表名:以 report_ 开头,方便在数据库中区分 + */ +package com.win.module.report; diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/ajreport/package-info.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/ajreport/package-info.java new file mode 100644 index 0000000..450b595 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/ajreport/package-info.java @@ -0,0 +1,4 @@ +/** + * TODO 芋艿:占位,待删除 + */ +package com.win.module.report.service.ajreport; diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewDataService.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewDataService.java new file mode 100644 index 0000000..c7b0c3b --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewDataService.java @@ -0,0 +1,20 @@ +package com.win.module.report.service.goview; + +import com.win.module.report.controller.admin.goview.vo.data.GoViewDataRespVO; + +/** + * GoView 数据 Service 接口 + * + * @author 芋道源码 + */ +public interface GoViewDataService { + + /** + * 使用 SQL 查询数据 + * + * @param sql SQL 语句 + * @return 数据 + */ + GoViewDataRespVO getDataBySQL(String sql); + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewDataServiceImpl.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewDataServiceImpl.java new file mode 100644 index 0000000..eae6d54 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewDataServiceImpl.java @@ -0,0 +1,55 @@ +package com.win.module.report.service.goview; + +import com.win.module.report.controller.admin.goview.vo.data.GoViewDataRespVO; +import com.google.common.collect.Maps; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.support.rowset.SqlRowSet; +import org.springframework.jdbc.support.rowset.SqlRowSetMetaData; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.Map; + +/** + * GoView 数据 Service 实现类 + * + * 补充说明: + * 1. 目前默认使用 jdbcTemplate 查询项目配置的数据源。如果你想查询其它数据源,可以新建对应数据源的 jdbcTemplate 来实现。 + * 2. 默认数据源是 MySQL 关系数据源,可能数据量比较大的情况下,会比较慢,可以考虑后续使用 Click House 等等。 + * + * @author 芋道源码 + */ +@Service +@Validated +public class GoViewDataServiceImpl implements GoViewDataService { + + @Resource + private JdbcTemplate jdbcTemplate; + + @Override + public GoViewDataRespVO getDataBySQL(String sql) { + // 1. 执行查询 + SqlRowSet sqlRowSet = jdbcTemplate.queryForRowSet(sql); + + // 2. 构建返回结果 + GoViewDataRespVO respVO = new GoViewDataRespVO(); + // 2.1 解析元数据 + SqlRowSetMetaData metaData = sqlRowSet.getMetaData(); + String[] columnNames = metaData.getColumnNames(); + respVO.setDimensions(Arrays.asList(columnNames)); + // 2.2 解析数据明细 + respVO.setSource(new LinkedList<>()); // 由于数据量不确认,使用 LinkedList 虽然内存占用大一点,但是不存在扩容复制的问题 + while (sqlRowSet.next()) { + Map data = Maps.newHashMapWithExpectedSize(columnNames.length); + for (String columnName : columnNames) { + data.put(columnName, sqlRowSet.getObject(columnName)); + } + respVO.getSource().add(data); + } + return respVO; + } + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewProjectService.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewProjectService.java new file mode 100644 index 0000000..c1d2c8d --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewProjectService.java @@ -0,0 +1,57 @@ +package com.win.module.report.service.goview; + +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.module.report.controller.admin.goview.vo.project.GoViewProjectCreateReqVO; +import com.win.module.report.controller.admin.goview.vo.project.GoViewProjectUpdateReqVO; +import com.win.module.report.dal.dataobject.goview.GoViewProjectDO; + +import jakarta.validation.Valid; + +/** + * GoView 项目 Service 接口 + * + * @author 芋道源码 + */ +public interface GoViewProjectService { + + /** + * 创建项目 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProject(@Valid GoViewProjectCreateReqVO createReqVO); + + /** + * 更新项目 + * + * @param updateReqVO 更新信息 + */ + void updateProject(@Valid GoViewProjectUpdateReqVO updateReqVO); + + /** + * 删除项目 + * + * @param id 编号 + */ + void deleteProject(Long id); + + /** + * 获得项目 + * + * @param id 编号 + * @return 项目 + */ + GoViewProjectDO getProject(Long id); + + /** + * 获得我的项目分页 + * + * @param pageReqVO 分页查询 + * @param userId 用户编号 + * @return GoView 项目分页 + */ + PageResult getMyProjectPage(PageParam pageReqVO, Long userId); + +} diff --git a/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewProjectServiceImpl.java b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewProjectServiceImpl.java new file mode 100644 index 0000000..4d6cb5b --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/java/com/win/module/report/service/goview/GoViewProjectServiceImpl.java @@ -0,0 +1,74 @@ +package com.win.module.report.service.goview; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.module.report.controller.admin.goview.vo.project.GoViewProjectCreateReqVO; +import com.win.module.report.controller.admin.goview.vo.project.GoViewProjectUpdateReqVO; +import com.win.module.report.convert.goview.GoViewProjectConvert; +import com.win.module.report.dal.dataobject.goview.GoViewProjectDO; +import com.win.module.report.dal.mysql.goview.GoViewProjectMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.report.enums.ErrorCodeConstants.GO_VIEW_PROJECT_NOT_EXISTS; + +/** + * GoView 项目 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class GoViewProjectServiceImpl implements GoViewProjectService { + + @Resource + private GoViewProjectMapper goViewProjectMapper; + + @Override + public Long createProject(GoViewProjectCreateReqVO createReqVO) { + // 插入 + GoViewProjectDO goViewProject = GoViewProjectConvert.INSTANCE.convert(createReqVO) + .setStatus(CommonStatusEnum.DISABLE.getStatus()); + goViewProjectMapper.insert(goViewProject); + // 返回 + return goViewProject.getId(); + } + + @Override + public void updateProject(GoViewProjectUpdateReqVO updateReqVO) { + // 校验存在 + validateProjectExists(updateReqVO.getId()); + // 更新 + GoViewProjectDO updateObj = GoViewProjectConvert.INSTANCE.convert(updateReqVO); + goViewProjectMapper.updateById(updateObj); + } + + @Override + public void deleteProject(Long id) { + // 校验存在 + validateProjectExists(id); + // 删除 + goViewProjectMapper.deleteById(id); + } + + private void validateProjectExists(Long id) { + if (goViewProjectMapper.selectById(id) == null) { + throw exception(GO_VIEW_PROJECT_NOT_EXISTS); + } + } + + @Override + public GoViewProjectDO getProject(Long id) { + return goViewProjectMapper.selectById(id); + } + + @Override + public PageResult getMyProjectPage(PageParam pageReqVO, Long userId) { + return goViewProjectMapper.selectPage(pageReqVO, userId); + } + +} diff --git a/win-module-report/win-module-report-biz/src/main/resources/application-dev.yaml b/win-module-report/win-module-report-biz/src/main/resources/application-dev.yaml new file mode 100644 index 0000000..5749842 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/resources/application-dev.yaml @@ -0,0 +1,97 @@ +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 5 # 初始连接数 + min-idle: 10 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: 123456 + slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: 123456 + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: 400-infra.server.iocoder.cn # 地址 + port: 6379 # 端口 + database: 1 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +win: + xss: + enable: false + exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 + - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + demo: true # 开启演示模式 diff --git a/win-module-report/win-module-report-biz/src/main/resources/application-local.yaml b/win-module-report/win-module-report-biz/src/main/resources/application-local.yaml new file mode 100644 index 0000000..864cbe1 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/resources/application-local.yaml @@ -0,0 +1,198 @@ +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + #url: jdbc:mysql://dev.ccwin-in.com:23113/sfms_cloud_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:postgresql://localhost:5432/huaxiang-cloud-dev?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai + # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 + # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + username: postgres + password: psql123 + # username: sa # SQL Server 连接的示例 + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 + # username: SYSDBA # DM 连接的示例 + # password: SYSDBA # DM 连接的示例 + slave: # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms_cloud_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: sfms + password: Microsoft@2023 + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: dev.ccwin-in.com # 地址 + port: 23114 # 端口 + database: 12 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + name-server: 127.0.0.1:9876 # RocketMQ Namesrv + +spring: + # RabbitMQ 配置项,对应 RabbitProperties 配置类 + rabbitmq: + host: 127.0.0.1 # RabbitMQ 服务的地址 + port: 5672 # RabbitMQ 服务的端口 + username: guest # RabbitMQ 服务的账号 + password: guest # RabbitMQ 服务的密码 + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + enabled: false # 是否开启调度中心,默认为 true 开启 + admin: + addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + com.win.module.system.dal.mysql: debug + com.win.module.system.dal.mysql.sensitiveword.SensitiveWordMapper: INFO # 配置 SensitiveWordMapper 的日志级别为 info + com.win.module.system.dal.mysql.sms.SmsChannelMapper: INFO # 配置 SmsChannelMapper 的日志级别为 info + +--- #################### 微信公众号、小程序相关配置 #################### +wx: + mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 + # app-id: wx041349c6f39b268b # 测试号(牛希尧提供的) + # secret: 5abee519483bc9f8cb37ce280e814bd0 + app-id: wx5b23ba7a5589ecbb # 测试号(自己的) + secret: 2a7b3b20c537e52e74afd395eb85f61f + # app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的) + # secret: bd4f9fab889591b62aeac0d7b8d8b4a0 + # 存储配置,解决 AccessToken 的跨节点的共享 + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wx # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 + # appid: wx62056c0d5e8db250 # 测试号(牛希尧提供的) + # secret: 333ae72f41552af1e998fe1f54e1584a + appid: wx63c280fe3248a3e7 # wenhualian的接口测试号 + secret: 6f270509224a7ae1296bbf1c8cb97aed + # appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的) + # secret: 4a1a04e07f6a4a0751b39c3064a92c8b + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wa # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +win: + env: # 多环境的配置项 + tag: ${HOSTNAME} + captcha: + enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试 + security: + mock-enable: true + xss: + enable: false + exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 + - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + access-log: # 访问日志的配置项 + enable: false + demo: true # 关闭演示模式 + +justauth: + enabled: true + type: + DINGTALK: # 钉钉 + client-id: dingvrnreaje3yqvzhxg + client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI + ignore-check-redirect-uri: true + WECHAT_ENTERPRISE: # 企业微信 + client-id: wwd411c69a39ad2e54 + client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw + agent-id: 1000004 + ignore-check-redirect-uri: true + # noinspection SpringBootApplicationYaml + WECHAT_MINI_APP: # 微信小程序 + client-id: ${wx.miniapp.appid} + client-secret: ${wx.miniapp.secret} + ignore-check-redirect-uri: true + ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验 + WECHAT_MP: # 微信公众号 + client-id: ${wx.mp.app-id} + client-secret: ${wx.mp.secret} + ignore-check-redirect-uri: true + cache: + type: REDIS + prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: + timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 diff --git a/win-module-report/win-module-report-biz/src/main/resources/application.yaml b/win-module-report/win-module-report-biz/src/main/resources/application.yaml new file mode 100644 index 0000000..d98d1c9 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/resources/application.yaml @@ -0,0 +1,105 @@ +spring: + main: + allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 + allow-bean-definition-overriding: true # 允许 Bean 覆盖,例如说 Feign 等会存在重复定义的服务 + # Servlet 配置 + servlet: + # 文件上传相关配置项 + multipart: + max-file-size: 16MB # 单个文件大小 + max-request-size: 32MB # 设置总上传的文件大小 + mvc: + pathmatch: + matching-strategy: ANT_PATH_MATCHER # 解决 SpringFox 与 SpringBoot 2.6.x 不兼容的问题,参见 SpringFoxHandlerProviderBeanPostProcessor 类 + + # Jackson 配置项 + jackson: + serialization: + write-dates-as-timestamps: true # 设置 LocalDateTime 的格式,使用时间戳 + write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401 + write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳 + fail-on-empty-beans: false # 允许序列化无属性的 Bean + + # Cache 配置项 + cache: + type: REDIS + redis: + time-to-live: 1h # 设置过期时间为 1 小时 + +--- #################### 接口文档配置 #################### + +springdoc: + api-docs: + enabled: true # 1. 是否开启 Swagger 接文档的元数据 + path: /v3/api-docs + swagger-ui: + enabled: true # 2.1 是否开启 Swagger 文档的官方 UI 界面 + path: /swagger-ui.html + default-flat-param-object: true # 参见 https://doc.xiaominfo.com/docs/faq/v4/knife4j-parameterobject-flat-param 文档 + +knife4j: + enable: true # 2.2 是否开启 Swagger 文档的 Knife4j UI 界面 + setting: + language: zh_cn + +# MyBatis Plus 的配置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + global-config: + db-config: + id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。 + # id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库 + # id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库 + # id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解 + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + banner: false # 关闭控制台的 Banner 打印 + type-aliases-package: ${win.info.base-package}.dal.dataobject + encryptor: + password: XDV71a+xqStEA3WH # 加解密的秘钥,可使用 https://www.imaegoo.com/2020/aes-key-generator/ 网站生成 + +mybatis-plus-join: + banner: false # 关闭控制台的 Banner 打印 + +# Spring Data Redis 配置 +spring: + data: + redis: + repositories: + enabled: false # 项目未使用到 Spring Data Redis 的 Repository,所以直接禁用,保证启动速度 + +# VO 转换(数据翻译)相关 +easy-trans: + is-enable-global: true # 启用全局翻译(拦截所有 SpringMVC ResponseBody 进行自动翻译 )。如果对于性能要求很高可关闭此配置,或通过 @IgnoreTrans 忽略某个接口 + is-enable-cloud: false # 禁用 TransType.RPC 微服务模式 + +--- #################### RPC 远程调用相关配置 #################### + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### + +# 积木报表配置 +jeecg: + jmreport: + saas-mode: tenant + +--- #################### 芋道相关配置 #################### + +win: + info: + version: 1.0.0 + base-package: com.win.module.report + web: + admin-ui: + url: http://dashboard.win.iocoder.cn # Admin 管理后台 UI 的地址 + swagger: + title: 管理后台 + description: 提供管理员管理的所有功能 + version: ${win.info.version} + base-package: ${win.info.base-package} + tenant: # 多租户相关配置项 + enable: true + +debug: false diff --git a/win-module-report/win-module-report-biz/src/main/resources/bootstrap-local.yaml b/win-module-report/win-module-report-biz/src/main/resources/bootstrap-local.yaml new file mode 100644 index 0000000..e861abb --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/resources/bootstrap-local.yaml @@ -0,0 +1,23 @@ +--- #################### 注册中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.0.103:8848 + discovery: + namespace: win-cloud-dev # 命名空间。这里使用 dev 开发环境 + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + +--- #################### 配置中心相关配置 #################### + +spring: + cloud: + nacos: + # Nacos Config 配置项,对应 NacosConfigProperties 配置属性类 + config: + server-addr: 192.168.0.103:8848 # Nacos 服务器地址 + namespace: win-cloud-dev # 命名空间 dev 的ID,不能直接使用 dev 名称。创建命名空间的时候需要指定ID为 dev,这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + name: ${spring.application.name} # 使用的 Nacos 配置集的 dataId,默认为 spring.application.name + file-extension: yaml # 使用的 Nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties diff --git a/win-module-report/win-module-report-biz/src/main/resources/bootstrap.yaml b/win-module-report/win-module-report-biz/src/main/resources/bootstrap.yaml new file mode 100644 index 0000000..2301682 --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/resources/bootstrap.yaml @@ -0,0 +1,14 @@ +spring: + application: + name: report-server + + profiles: + active: local + +server: + port: 48085 + +# 日志文件配置。注意,如果 logging.file.name 不放在 bootstrap.yaml 配置文件,而是放在 application.yaml 中,会导致出现 LOG_FILE_IS_UNDEFINED 文件 +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 diff --git a/win-module-report/win-module-report-biz/src/main/resources/logback-spring.xml b/win-module-report/win-module-report-biz/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..ce034da --- /dev/null +++ b/win-module-report/win-module-report-biz/src/main/resources/logback-spring.xml @@ -0,0 +1,76 @@ + + + + + + + + + +       + + + ${PATTERN_DEFAULT} + + + + + + + + + + ${PATTERN_DEFAULT} + + + + ${LOG_FILE} + + + ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz} + + ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false} + + ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB} + + ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0} + + ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30} + + + + + + 0 + + 256 + + + + + + + + ${PATTERN_DEFAULT} + + + + + + + + + + + + + + + + + + + + + + diff --git a/win-module-scp/pom.xml b/win-module-scp/pom.xml new file mode 100644 index 0000000..8013836 --- /dev/null +++ b/win-module-scp/pom.xml @@ -0,0 +1,24 @@ + + + + com.win + win + ${revision} + + 4.0.0 + + win-module-scp-api + win-module-scp-biz + + win-module-scp + pom + + ${project.artifactId} + + system 模块下,我们放通用业务,支撑上层的核心业务。 + 例如说:用户、部门、权限、数据字典等等 + + + diff --git a/win-module-scp/win-module-scp-api/pom.xml b/win-module-scp/win-module-scp-api/pom.xml new file mode 100644 index 0000000..0407652 --- /dev/null +++ b/win-module-scp/win-module-scp-api/pom.xml @@ -0,0 +1,48 @@ + + + + com.win + win-module-scp + ${revision} + + 4.0.0 + win-module-scp-api + jar + + ${project.artifactId} + + system 模块 API,暴露给其它模块调用 + + + + + com.win + win-common + + + + + org.springdoc + springdoc-openapi-starter-webmvc-api + provided + + + + + org.springframework.boot + spring-boot-starter-validation + true + + + + + org.springframework.cloud + spring-cloud-starter-openfeign + true + + + + + diff --git a/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/api/package-info.java b/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/api/package-info.java new file mode 100644 index 0000000..fe80bd0 --- /dev/null +++ b/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/api/package-info.java @@ -0,0 +1,4 @@ +/** + * System API 包,定义暴露给其它模块的 API + */ +package com.win.module.eam.api; diff --git a/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/ApiConstants.java b/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/ApiConstants.java new file mode 100644 index 0000000..e955011 --- /dev/null +++ b/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/ApiConstants.java @@ -0,0 +1,23 @@ +package com.win.module.scp.enums; + +import com.win.framework.common.enums.RpcConstants; + +/** + * API 相关的枚举 + * + * @author 芋道源码 + */ +public class ApiConstants { + + /** + * 服务名 + * + * 注意,需要保证和 spring.application.name 保持一致 + */ + public static final String NAME = "scp-server"; + + public static final String PREFIX = RpcConstants.RPC_API_PREFIX + "/scp"; + + public static final String VERSION = "1.0.0"; + +} diff --git a/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/DictTypeConstants.java b/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/DictTypeConstants.java new file mode 100644 index 0000000..888bac8 --- /dev/null +++ b/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/DictTypeConstants.java @@ -0,0 +1,5 @@ +package com.win.module.eam.enums; + +public interface DictTypeConstants { + +} diff --git a/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/ErrorCodeConstants.java b/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/ErrorCodeConstants.java new file mode 100644 index 0000000..c8adff9 --- /dev/null +++ b/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/ErrorCodeConstants.java @@ -0,0 +1,12 @@ +package com.win.module.eam.enums; + +import com.win.framework.common.exception.ErrorCode; + +/** + * System 错误码枚举类 + *

    + * system 系统,使用 1-002-000-000 段 + */ +public interface ErrorCodeConstants { + +} diff --git a/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/LogRecordConstants.java b/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/LogRecordConstants.java new file mode 100644 index 0000000..72da344 --- /dev/null +++ b/win-module-scp/win-module-scp-api/src/main/java/com/win/module/scp/enums/LogRecordConstants.java @@ -0,0 +1,12 @@ +package com.win.module.scp.enums; + +/** + * 操作日志枚举 + * 目的:统一管理,也减少 Service 里各种“复杂”字符串 + * + * @author 芋道源码 + */ +public interface LogRecordConstants { + + +} diff --git a/win-module-scp/win-module-scp-biz/pom.xml b/win-module-scp/win-module-scp-biz/pom.xml new file mode 100644 index 0000000..30a1c98 --- /dev/null +++ b/win-module-scp/win-module-scp-biz/pom.xml @@ -0,0 +1,211 @@ + + + + com.win + win-module-scp + ${revision} + + 4.0.0 + win-module-scp-biz + jar + + ${project.artifactId} + + system 模块下,我们放通用业务,支撑上层的核心业务。 + 例如说:用户、部门、权限、数据字典等等 + + + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + com.win + win-spring-boot-starter-env + + + + + + + + + + + + + + + + com.win + win-spring-boot-starter-biz-data-permission + + + com.win + win-spring-boot-starter-biz-tenant + + + com.win + win-spring-boot-starter-biz-ip + + + + + com.win + win-spring-boot-starter-security + + + + + com.win + win-spring-boot-starter-mybatis + + + + com.win + win-spring-boot-starter-redis + + + + + com.win + win-spring-boot-starter-rpc + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.win + win-spring-boot-starter-job + + + + + com.win + win-spring-boot-starter-mq + + + + + + + + + + + com.win + win-spring-boot-starter-excel + + + + org.springframework.boot + spring-boot-starter-mail + + + + + com.win + win-spring-boot-starter-monitor + + + + + com.xingyuv + spring-boot-starter-justauth + + + + com.github.binarywang + wx-java-mp-spring-boot-starter + + + com.github.binarywang + wx-java-miniapp-spring-boot-starter + + + + com.aliyun + aliyun-java-sdk-core + + + com.aliyun + aliyun-java-sdk-dysmsapi + + + com.tencentcloudapi + tencentcloud-sdk-java-sms + + + + com.xingyuv + spring-boot-starter-captcha-plus + + + + org.dromara.hutool + hutool-extra + + + com.win + win-module-mes-api + 2.1.0-snapshot + compile + + + com.win + win-module-system-biz + 2.1.0-snapshot + compile + + + com.win + win-module-system-biz + 2.1.0-snapshot + compile + + + com.win + win-module-system-biz + 2.1.0-snapshot + compile + + + + + + + ${project.artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + + + repackage + + + + + + + + diff --git a/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/ScpServerApplication.java b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/ScpServerApplication.java new file mode 100644 index 0000000..c483df3 --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/ScpServerApplication.java @@ -0,0 +1,11 @@ +package com.win.module.scp; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ScpServerApplication { + public static void main(String[] args) { + SpringApplication.run(ScpServerApplication.class, args); + } +} diff --git a/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/controller/package-info.java b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/controller/package-info.java new file mode 100644 index 0000000..9192566 --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/controller/package-info.java @@ -0,0 +1,4 @@ +/** + * System API 包,定义暴露给其它模块的 API + */ +package com.win.module.eam.controller; diff --git a/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/convert/package-info.java b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/convert/package-info.java new file mode 100644 index 0000000..11a5830 --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/convert/package-info.java @@ -0,0 +1,4 @@ +/** + * System API 包,定义暴露给其它模块的 API + */ +package com.win.module.eam.convert; diff --git a/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/dal/dataobject/package-info.java b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/dal/dataobject/package-info.java new file mode 100644 index 0000000..64081ba --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/dal/dataobject/package-info.java @@ -0,0 +1,4 @@ +/** + * System API 包,定义暴露给其它模块的 API + */ +package com.win.module.eam.dal; diff --git a/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/dal/mysql/package-info.java b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/dal/mysql/package-info.java new file mode 100644 index 0000000..64081ba --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/dal/mysql/package-info.java @@ -0,0 +1,4 @@ +/** + * System API 包,定义暴露给其它模块的 API + */ +package com.win.module.eam.dal; diff --git a/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/config/DataPermissionConfiguration.java b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/config/DataPermissionConfiguration.java new file mode 100644 index 0000000..a8ed0b3 --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/config/DataPermissionConfiguration.java @@ -0,0 +1,31 @@ +package com.win.module.scp.framework.config; + +import com.win.framework.datapermission.core.rule.dept.DeptDataPermissionRuleCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +/** + * 独立的mudle 如果需要支持数据权限的使用 都需要实现此配置类; + * 数据权限是根据表定义的,而且是默认开启的 + * 禁用数据权限的方式:1、配置类中不添加表的Do对象 + * 2、使用@DataPermission(enable = false) 注解方式关闭,controler方法前使用 + * 3、完全不支持数据权限,则不启用数据权限配置类 + * 问题:如果表很多的情况下配置的rule会不会疯掉? + * @DataPermission 的三个属性 1、enabled= true:false 启用:停用 + * 2、includeRules 属性,配置生效的 DataPermissionRule (opens new window) 数据权限规则。例如说,项目里有 10 种 DataPermissionRule 规则,某个方法只想其中的 1 种生效,则可以使用该属性。 + * 3、excludeRules 属性,配置排除的 DataPermissionRule (opens new window) 数据权限规则。例如说,项目里有 10 种 DataPermissionRule 规则,某个方法不想其中的 1 种生效,则可以使用该属性。 + * **/ +@Configuration(proxyBeanMethods = false) +public class DataPermissionConfiguration { + + @Bean + public DeptDataPermissionRuleCustomizer sysDeptDataPermissionRuleCustomizer() { + return rule -> { + // dept 基于部门的数据权限 + // rule.addDeptColumn(AdminUserDO.class); // WHERE dept_id = ? + //rule.addDeptColumn(DeptDO.class, "id"); // WHERE id = ? + // user 基于用户的数据权限 +// rule.addUserColumn(OrderDO.class); // WHERE user_id = ? + }; + } + +} \ No newline at end of file diff --git a/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/config/ScpConfiguration.java b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/config/ScpConfiguration.java new file mode 100644 index 0000000..268576e --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/config/ScpConfiguration.java @@ -0,0 +1,18 @@ +package com.win.module.scp.framework.config; + + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +/** + * + * + * @author 芋道源码 + */ +@Configuration +@ComponentScan(basePackages = "com.win.module.scp") // 扫描包 +public class ScpConfiguration { + + + +} diff --git a/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/rpc/config/RpcConfiguration.java b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/rpc/config/RpcConfiguration.java new file mode 100644 index 0000000..a99305c --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/rpc/config/RpcConfiguration.java @@ -0,0 +1,8 @@ +package com.win.module.scp.framework.rpc.config; + +import org.springframework.context.annotation.Configuration; + +@Configuration(proxyBeanMethods = false) +//@EnableFeignClients(clients = AdminUserApi.class) +public class RpcConfiguration { +} diff --git a/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/rpc/package-info.java b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/rpc/package-info.java new file mode 100644 index 0000000..fca299d --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/rpc/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package com.win.module.scp.framework.rpc; diff --git a/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/rule/CustomDataPermissionRule.java b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/rule/CustomDataPermissionRule.java new file mode 100644 index 0000000..5b08d0e --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/rule/CustomDataPermissionRule.java @@ -0,0 +1,39 @@ +package com.win.module.scp.framework.rule; + +import com.win.framework.datapermission.core.rule.DataPermissionRule; +import com.win.framework.mybatis.core.util.MyBatisUtils; +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import com.google.common.collect.Sets; +import net.sf.jsqlparser.expression.Alias; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.LongValue; +import net.sf.jsqlparser.expression.operators.relational.EqualsTo; + +import java.util.Set; + +/** + * 自定义数据权限方式******样例代码 启用的话需要@Component 开启************* + *针对 system_dict_type 表,它的创建人 creator 要是当前用户。 + * 针对 system_post 表,它的更新人 updater 要是当前用户 + * + * */ +//@Component +public class CustomDataPermissionRule implements DataPermissionRule { + @Override + public Set getTableNames() { + return Sets.newHashSet("system_dict_type", "system_post"); //表名 + } + + @Override + public Expression getExpression(String tableName, Alias tableAlias) { + Long userId = SecurityFrameworkUtils.getLoginUserId(); + assert userId != null; + switch (tableName) { + case "system_dict_type": + return new EqualsTo(MyBatisUtils.buildColumn(tableName, tableAlias, "creator"), new LongValue(userId)); + case "system_post": + return new EqualsTo(MyBatisUtils.buildColumn(tableName, tableAlias, "updater"), new LongValue(userId)); + default: return null; + } + } +} diff --git a/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/security/config/SecurityConfiguration.java b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/security/config/SecurityConfiguration.java new file mode 100644 index 0000000..93c0edd --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/security/config/SecurityConfiguration.java @@ -0,0 +1,40 @@ +package com.win.module.scp.framework.security.config; + +import com.win.framework.security.config.AuthorizeRequestsCustomizer; +import com.win.module.mes.enums.ApiConstants; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer; + + +/** + * 模块的 Security 配置 + */ +@Configuration("scpSecurityConfiguration") +public class SecurityConfiguration { + +// @Value("${spring.boot.admin.context-path:''}") +// private String adminSeverContextPath; + @Bean("scpAuthorizeRequestsCustomizer") + public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { + return new AuthorizeRequestsCustomizer() { + + @Override + public void customize(AuthorizeHttpRequestsConfigurer.AuthorizationManagerRequestMatcherRegistry registry) { + // TODO 芋艿:这个每个项目都需要重复配置,得捉摸有没通用的方案 + // Swagger 接口文档 + registry.requestMatchers("/v3/api-docs/**").permitAll() // 元数据 + .requestMatchers("/swagger-ui.html").permitAll(); // Swagger UI + // Druid 监控 + registry.requestMatchers("/druid/**").permitAll(); + // Spring Boot Actuator 的安全配置 + registry.requestMatchers("/actuator").permitAll() + .requestMatchers("/actuator/**").permitAll(); + // RPC 服务的安全配置 + registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll(); + } + + }; + } +} diff --git a/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/security/core/package-info.java b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/security/core/package-info.java new file mode 100644 index 0000000..9a148ea --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/framework/security/core/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package com.win.module.scp.framework.security.core; diff --git a/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/service/package-info.java b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/service/package-info.java new file mode 100644 index 0000000..11266d5 --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/service/package-info.java @@ -0,0 +1,4 @@ +/** + * System API 包,定义暴露给其它模块的 API + */ +package com.win.module.eam.service; diff --git a/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/util/package-info.java b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/util/package-info.java new file mode 100644 index 0000000..11266d5 --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/java/com/win/module/scp/util/package-info.java @@ -0,0 +1,4 @@ +/** + * System API 包,定义暴露给其它模块的 API + */ +package com.win.module.eam.service; diff --git a/win-module-scp/win-module-scp-biz/src/main/resources/application-local.yaml b/win-module-scp/win-module-scp-biz/src/main/resources/application-local.yaml new file mode 100644 index 0000000..24b3aae --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/resources/application-local.yaml @@ -0,0 +1,196 @@ +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms_cloud_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 + # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + username: sfms + password: Microsoft@2023 + # username: sa # SQL Server 连接的示例 + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 + # username: SYSDBA # DM 连接的示例 + # password: SYSDBA # DM 连接的示例 + slave: # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms_cloud_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: sfms + password: Microsoft@2023 + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: dev.ccwin-in.com # 地址 + port: 23114 # 端口 + database: 12 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + name-server: 127.0.0.1:9876 # RocketMQ Namesrv + +spring: + # RabbitMQ 配置项,对应 RabbitProperties 配置类 + rabbitmq: + host: 127.0.0.1 # RabbitMQ 服务的地址 + port: 5672 # RabbitMQ 服务的端口 + username: guest # RabbitMQ 服务的账号 + password: guest # RabbitMQ 服务的密码 + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + enabled: false # 是否开启调度中心,默认为 true 开启 + admin: + addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + com.win.module.mes.dal.mysql: debug + com.win.module.mes.dal.mysql.sensitiveword.SensitiveWordMapper: INFO # 配置 SensitiveWordMapper 的日志级别为 info + com.win.module.mes.dal.mysql.sms.SmsChannelMapper: INFO # 配置 SmsChannelMapper 的日志级别为 info + + +--- #################### 微信公众号、小程序相关配置 #################### +wx: + mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 + # app-id: wx041349c6f39b268b # 测试号(牛希尧提供的) + # secret: 5abee519483bc9f8cb37ce280e814bd0 + app-id: wx5b23ba7a5589ecbb # 测试号(自己的) + secret: 2a7b3b20c537e52e74afd395eb85f61f + # app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的) + # secret: bd4f9fab889591b62aeac0d7b8d8b4a0 + # 存储配置,解决 AccessToken 的跨节点的共享 + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wx # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 + # appid: wx62056c0d5e8db250 # 测试号(牛希尧提供的) + # secret: 333ae72f41552af1e998fe1f54e1584a + appid: wx63c280fe3248a3e7 # wenhualian的接口测试号 + secret: 6f270509224a7ae1296bbf1c8cb97aed + # appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的) + # secret: 4a1a04e07f6a4a0751b39c3064a92c8b + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wa # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +win: + env: # 多环境的配置项 + tag: ${HOSTNAME} + captcha: + enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试 + security: + mock-enable: true + xss: + enable: false + exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 + - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + pay: + pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify + pay-return-url: http://niubi.natapp1.cc/api/pay/order/return + refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify + access-log: # 访问日志的配置项 + enable: false + demo: false # 关闭演示模式 + +justauth: + enabled: true + type: + DINGTALK: # 钉钉 + client-id: dingvrnreaje3yqvzhxg + client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI + ignore-check-redirect-uri: true + WECHAT_ENTERPRISE: # 企业微信 + client-id: wwd411c69a39ad2e54 + client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw + agent-id: 1000004 + ignore-check-redirect-uri: true + WECHAT_MP: # 微信公众号 + client-id: ${wx.mp.app-id} + client-secret: ${wx.mp.secret} + ignore-check-redirect-uri: true + cache: + type: REDIS + prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: + timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 diff --git a/win-module-scp/win-module-scp-biz/src/main/resources/application-test.yaml b/win-module-scp/win-module-scp-biz/src/main/resources/application-test.yaml new file mode 100644 index 0000000..24b3aae --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/resources/application-test.yaml @@ -0,0 +1,196 @@ +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms_cloud_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 + # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + username: sfms + password: Microsoft@2023 + # username: sa # SQL Server 连接的示例 + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 + # username: SYSDBA # DM 连接的示例 + # password: SYSDBA # DM 连接的示例 + slave: # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms_cloud_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: sfms + password: Microsoft@2023 + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: dev.ccwin-in.com # 地址 + port: 23114 # 端口 + database: 12 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + name-server: 127.0.0.1:9876 # RocketMQ Namesrv + +spring: + # RabbitMQ 配置项,对应 RabbitProperties 配置类 + rabbitmq: + host: 127.0.0.1 # RabbitMQ 服务的地址 + port: 5672 # RabbitMQ 服务的端口 + username: guest # RabbitMQ 服务的账号 + password: guest # RabbitMQ 服务的密码 + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + enabled: false # 是否开启调度中心,默认为 true 开启 + admin: + addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + com.win.module.mes.dal.mysql: debug + com.win.module.mes.dal.mysql.sensitiveword.SensitiveWordMapper: INFO # 配置 SensitiveWordMapper 的日志级别为 info + com.win.module.mes.dal.mysql.sms.SmsChannelMapper: INFO # 配置 SmsChannelMapper 的日志级别为 info + + +--- #################### 微信公众号、小程序相关配置 #################### +wx: + mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 + # app-id: wx041349c6f39b268b # 测试号(牛希尧提供的) + # secret: 5abee519483bc9f8cb37ce280e814bd0 + app-id: wx5b23ba7a5589ecbb # 测试号(自己的) + secret: 2a7b3b20c537e52e74afd395eb85f61f + # app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的) + # secret: bd4f9fab889591b62aeac0d7b8d8b4a0 + # 存储配置,解决 AccessToken 的跨节点的共享 + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wx # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 + # appid: wx62056c0d5e8db250 # 测试号(牛希尧提供的) + # secret: 333ae72f41552af1e998fe1f54e1584a + appid: wx63c280fe3248a3e7 # wenhualian的接口测试号 + secret: 6f270509224a7ae1296bbf1c8cb97aed + # appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的) + # secret: 4a1a04e07f6a4a0751b39c3064a92c8b + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wa # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +win: + env: # 多环境的配置项 + tag: ${HOSTNAME} + captcha: + enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试 + security: + mock-enable: true + xss: + enable: false + exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 + - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + pay: + pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify + pay-return-url: http://niubi.natapp1.cc/api/pay/order/return + refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify + access-log: # 访问日志的配置项 + enable: false + demo: false # 关闭演示模式 + +justauth: + enabled: true + type: + DINGTALK: # 钉钉 + client-id: dingvrnreaje3yqvzhxg + client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI + ignore-check-redirect-uri: true + WECHAT_ENTERPRISE: # 企业微信 + client-id: wwd411c69a39ad2e54 + client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw + agent-id: 1000004 + ignore-check-redirect-uri: true + WECHAT_MP: # 微信公众号 + client-id: ${wx.mp.app-id} + client-secret: ${wx.mp.secret} + ignore-check-redirect-uri: true + cache: + type: REDIS + prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: + timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 diff --git a/win-module-scp/win-module-scp-biz/src/main/resources/application.yaml b/win-module-scp/win-module-scp-biz/src/main/resources/application.yaml new file mode 100644 index 0000000..bb51432 --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/resources/application.yaml @@ -0,0 +1,168 @@ +spring: + main: + allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 + allow-bean-definition-overriding: true # 允许 Bean 覆盖,例如说 Feign 等会存在重复定义的服务 + + # Servlet 配置 + servlet: + # 文件上传相关配置项 + multipart: + max-file-size: 16MB # 单个文件大小 + max-request-size: 32MB # 设置总上传的文件大小 + mvc: + pathmatch: + matching-strategy: ANT_PATH_MATCHER # 解决 SpringFox 与 SpringBoot 2.6.x 不兼容的问题,参见 SpringFoxHandlerProviderBeanPostProcessor 类 + + # Jackson 配置项 + jackson: + serialization: + write-dates-as-timestamps: true # 设置 LocalDateTime 的格式,使用时间戳 + write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401 + write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳 + fail-on-empty-beans: false # 允许序列化无属性的 Bean + + # Cache 配置项 + cache: + type: REDIS + redis: + time-to-live: 1h # 设置过期时间为 1 小时 + +--- #################### 接口文档配置 #################### + +springdoc: + api-docs: + enabled: true # 1. 是否开启 Swagger 接文档的元数据 + path: /v3/api-docs + swagger-ui: + enabled: true # 2.1 是否开启 Swagger 文档的官方 UI 界面 + path: /swagger-ui.html + default-flat-param-object: true # 参见 https://doc.xiaominfo.com/docs/faq/v4/knife4j-parameterobject-flat-param 文档 + +knife4j: + enable: true # 2.2 是否开启 Swagger 文档的 Knife4j UI 界面 + setting: + language: zh_cn + +# MyBatis Plus 的配置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + global-config: + db-config: + id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。 + # id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库 + # id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库 + # id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解 + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + banner: false # 关闭控制台的 Banner 打印 + type-aliases-package: ${win.info.base-package}.dal.dataobject + encryptor: + password: XDV71a+xqStEA3WH # 加解密的秘钥,可使用 https://www.imaegoo.com/2020/aes-key-generator/ 网站生成 + +mybatis-plus-join: + banner: false # 关闭控制台的 Banner 打印 + +# Spring Data Redis 配置 +spring: + data: + redis: + repositories: + enabled: false # 项目未使用到 Spring Data Redis 的 Repository,所以直接禁用,保证启动速度 + +# VO 转换(数据翻译)相关 +easy-trans: + is-enable-global: true # 启用全局翻译(拦截所有 SpringMVC ResponseBody 进行自动翻译 )。如果对于性能要求很高可关闭此配置,或通过 @IgnoreTrans 忽略某个接口 + is-enable-cloud: false # 禁用 TransType.RPC 微服务模式 + +--- #################### RPC 远程调用相关配置 #################### + +--- #################### 消息队列相关 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + # Producer 配置项 + producer: + group: ${spring.application.name}_PRODUCER # 生产者分组 + +spring: + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + # Kafka Producer 配置项 + producer: + acks: 1 # 0-不应答。1-leader 应答。all-所有 leader 和 follower 应答。 + retries: 3 # 发送失败时,重试发送的次数 + value-serializer: org.springframework.kafka.support.serializer.JsonSerializer # 消息的 value 的序列化 + # Kafka Consumer 配置项 + consumer: + auto-offset-reset: earliest # 设置消费者分组最初的消费进度为 earliest 。可参考博客 https://blog.csdn.net/lishuangzhe7047/article/details/74530417 理解 + value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer + properties: + spring.json.trusted.packages: '*' + # Kafka Consumer Listener 监听器配置 + listener: + missing-topics-fatal: false # 消费监听接口监听的主题不存在时,默认会报错。所以通过设置为 false ,解决报错 + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + executor: + appname: ${spring.application.name} # 执行器 AppName + logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径 + accessToken: default_token # 执行器通讯TOKEN + + + +--- #################### 芋道相关配置 #################### + +win: + info: + version: 1.0.0 + base-package: com.win.module.scp + web: + admin-ui: + url: http://dashboard.win.iocoder.cn # Admin 管理后台 UI 的地址 + swagger: + title: 管理后台 + description: 提供管理员管理的所有功能 + version: ${win.info.version} + base-package: ${win.info.base-package} + captcha: + enable: true # 验证码的开关,默认为 true; + tenant: # 多租户相关配置项 + enable: true + ignore-urls: + - /admin-api/system/tenant/get-id-by-name # 基于名字获取租户,不许带租户编号 + - /admin-api/system/tenant/get-by-website # 基于域名获取租户,不许带租户编号 + - /admin-api/system/captcha/get-image # 获取图片验证码,和租户无关 + - /admin-api/system/captcha/get # 获取图片验证码,和租户无关 + - /admin-api/system/captcha/check # 校验图片验证码,和租户无关 + - /admin-api/system/sms/callback/* # 短信回调接口,无法带上租户编号 + - /rpc-api/system/tenant/valid # 防止递归。避免调用 /rpc-api/system/tenant/valid 接口时,又去触发 /rpc-api/system/tenant/valid 去校验 + - /rpc-api/system/tenant/id-list # 获得租户列表的时候,无需传递租户编号 + - /rpc-api/system/oauth2/token/check # 访问令牌校验时,无需传递租户编号;主要解决上传文件的场景,前端不会传递 tenant-id! + ignore-tables: + - system_tenant + - system_tenant_package + - system_dict_data + - system_dict_type + - system_error_code + - system_menu + - system_sms_channel + - system_sms_template + - system_sms_log + - system_sensitive_word + - system_oauth2_client + - system_mail_account + - system_mail_template + - system_mail_log + - system_notify_template + sms-code: # 短信验证码相关的配置项 + expire-times: 10m + send-frequency: 1m + send-maximum-quantity-per-day: 10 + begin-code: 9999 # 这里配置 9999 的原因是,测试方便。 + end-code: 9999 # 这里配置 9999 的原因是,测试方便。 + +debug: false diff --git a/win-module-scp/win-module-scp-biz/src/main/resources/bootstrap-local.yaml b/win-module-scp/win-module-scp-biz/src/main/resources/bootstrap-local.yaml new file mode 100644 index 0000000..cd948e3 --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/resources/bootstrap-local.yaml @@ -0,0 +1,23 @@ +--- #################### 注册中心相关配置 #################### +spring: + cloud: + nacos: + server-addr: 192.168.0.103:8848 + discovery: + namespace: win-cloud-dev # 命名空间。这里使用 dev 开发环境 + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 +server: + port: 48083 +--- #################### 配置中心相关配置 #################### + +spring: + cloud: + nacos: + # Nacos Config 配置项,对应 NacosConfigProperties 配置属性类 + config: + server-addr: 192.168.0.103:8848 # Nacos 服务器地址 + namespace: win-cloud-dev # 命名空间 dev 的ID,不能直接使用 dev 名称。创建命名空间的时候需要指定ID为 dev,这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + name: ${spring.application.name} # 使用的 Nacos 配置集的 dataId,默认为 spring.application.name + file-extension: yaml # 使用的 Nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties diff --git a/win-module-scp/win-module-scp-biz/src/main/resources/bootstrap-test.yaml b/win-module-scp/win-module-scp-biz/src/main/resources/bootstrap-test.yaml new file mode 100644 index 0000000..f11efc7 --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/resources/bootstrap-test.yaml @@ -0,0 +1,23 @@ +--- #################### 注册中心相关配置 #################### +spring: + cloud: + nacos: + server-addr: 192.168.0.103:8848 + discovery: + namespace: win-cloud-dev # 命名空间。这里使用 dev 开发环境 + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 +server: + port: 48086 +--- #################### 配置中心相关配置 #################### + +spring: + cloud: + nacos: + # Nacos Config 配置项,对应 NacosConfigProperties 配置属性类 + config: + server-addr: 192.168.0.103:8848 # Nacos 服务器地址 + namespace: win-cloud-dev # 命名空间 dev 的ID,不能直接使用 dev 名称。创建命名空间的时候需要指定ID为 dev,这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + name: ${spring.application.name} # 使用的 Nacos 配置集的 dataId,默认为 spring.application.name + file-extension: yaml # 使用的 Nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties diff --git a/win-module-scp/win-module-scp-biz/src/main/resources/bootstrap.yaml b/win-module-scp/win-module-scp-biz/src/main/resources/bootstrap.yaml new file mode 100644 index 0000000..a421e0c --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/resources/bootstrap.yaml @@ -0,0 +1,13 @@ +spring: + application: + name: scp-server + + profiles: + active: local + + + +# 日志文件配置。注意,如果 logging.file.name 不放在 bootstrap.yaml 配置文件,而是放在 application.yaml 中,会导致出现 LOG_FILE_IS_UNDEFINED 文件 +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 diff --git a/win-module-scp/win-module-scp-biz/src/main/resources/i18n/scp.properties b/win-module-scp/win-module-scp-biz/src/main/resources/i18n/scp.properties new file mode 100644 index 0000000..6882c29 --- /dev/null +++ b/win-module-scp/win-module-scp-biz/src/main/resources/i18n/scp.properties @@ -0,0 +1 @@ +#\u6B64\u6587\u4EF6\u4E0D\u9700\u8981\u586B\u5199 \ No newline at end of file diff --git a/win-module-scp/win-module-scp-biz/src/main/resources/i18n/scp_en_US.properties b/win-module-scp/win-module-scp-biz/src/main/resources/i18n/scp_en_US.properties new file mode 100644 index 0000000..e69de29 diff --git a/win-module-scp/win-module-scp-biz/src/main/resources/i18n/scp_zh_CN.properties b/win-module-scp/win-module-scp-biz/src/main/resources/i18n/scp_zh_CN.properties new file mode 100644 index 0000000..e69de29 diff --git a/win-module-system/pom.xml b/win-module-system/pom.xml new file mode 100644 index 0000000..99ca127 --- /dev/null +++ b/win-module-system/pom.xml @@ -0,0 +1,24 @@ + + + + com.win + win + ${revision} + + 4.0.0 + + win-module-system-api + win-module-system-biz + + win-module-system + pom + + ${project.artifactId} + + system 模块下,我们放通用业务,支撑上层的核心业务。 + 例如说:用户、部门、权限、数据字典等等 + + + diff --git a/win-module-system/win-module-system-api/pom.xml b/win-module-system/win-module-system-api/pom.xml new file mode 100644 index 0000000..767eab4 --- /dev/null +++ b/win-module-system/win-module-system-api/pom.xml @@ -0,0 +1,48 @@ + + + + com.win + win-module-system + ${revision} + + 4.0.0 + win-module-system-api + jar + + ${project.artifactId} + + system 模块 API,暴露给其它模块调用 + + + + + com.win + win-common + + + + + org.springdoc + springdoc-openapi-starter-webmvc-api + provided + + + + + org.springframework.boot + spring-boot-starter-validation + true + + + + + org.springframework.cloud + spring-cloud-starter-openfeign + true + + + + + diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/DeptApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/DeptApi.java new file mode 100644 index 0000000..2eae293 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/DeptApi.java @@ -0,0 +1,56 @@ +package com.win.module.system.api.dept; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.module.system.api.dept.dto.DeptRespDTO; +import com.win.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 部门") +public interface DeptApi { + + String PREFIX = ApiConstants.PREFIX + "/dept"; + + @GetMapping(PREFIX + "/get") + @Operation(summary = "获得部门信息") + @Parameter(name = "id", description = "部门编号", example = "1024", required = true) + CommonResult getDept(@RequestParam("id") Long id); + + @GetMapping(PREFIX + "/list") + @Operation(summary = "获得部门信息数组") + @Parameter(name = "ids", description = "部门编号数组", example = "1,2", required = true) + CommonResult> getDeptList(@RequestParam("ids") Collection ids); + + @GetMapping(PREFIX + "/valid") + @Operation(summary = "校验部门是否合法") + @Parameter(name = "ids", description = "部门编号数组", example = "1,2", required = true) + CommonResult validateDeptList(@RequestParam("ids") Collection ids); + + /** + * 获得指定编号的部门 Map + * + * @param ids 部门编号数组 + * @return 部门 Map + */ + default Map getDeptMap(Collection ids) { + List list = getDeptList(ids).getCheckedData(); + return CollectionUtils.convertMap(list, DeptRespDTO::getId); + } + + @GetMapping(PREFIX + "/list-child") + @Operation(summary = "获得指定部门的所有子部门") + @Parameter(name = "id", description = "部门编号", example = "1024", required = true) + CommonResult> getChildDeptList(@RequestParam("id") Long id); + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/PostApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/PostApi.java new file mode 100644 index 0000000..0120da0 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/PostApi.java @@ -0,0 +1,45 @@ +package com.win.module.system.api.dept; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.module.system.api.dept.dto.PostRespDTO; +import com.win.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 岗位") +public interface PostApi { + + String PREFIX = ApiConstants.PREFIX + "/post"; + + @GetMapping(PREFIX + "/valid") + @Operation(summary = "校验岗位是否合法") + @Parameter(name = "ids", description = "岗位编号数组", example = "1,2", required = true) + CommonResult validPostList(@RequestParam("ids") Collection ids); + + @GetMapping(PREFIX + "/list") + @Operation(summary = "获得岗位列表") + @Parameter(name = "ids", description = "岗位编号数组", example = "1,2", required = true) + CommonResult> getPostList(@RequestParam("ids") Collection ids); + + default Map getPostMap(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return MapUtil.empty(); + } + + List list = getPostList(ids).getData(); + return CollectionUtils.convertMap(list, PostRespDTO::getId); + } + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/dto/DeptRespDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/dto/DeptRespDTO.java new file mode 100644 index 0000000..6593cab --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/dto/DeptRespDTO.java @@ -0,0 +1,25 @@ +package com.win.module.system.api.dept.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "RPC 服务 - 部门 Response DTO") +@Data +public class DeptRespDTO { + + @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "研发部") + private String name; + + @Schema(description = "父部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long parentId; + + @Schema(description = "负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long leaderUserId; + + @Schema(description = "部门状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; // 参见 CommonStatusEnum 枚举 + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/dto/PostRespDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/dto/PostRespDTO.java new file mode 100644 index 0000000..3a26075 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dept/dto/PostRespDTO.java @@ -0,0 +1,30 @@ +package com.win.module.system.api.dept.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 岗位 Response DTO + * + * @author 芋道源码 + */ +@Schema(description = "RPC 服务 - 岗位 Response DTO") +@Data +public class PostRespDTO { + + @Schema(description = "岗位编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "岗位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "小土豆") + private String name; + + @Schema(description = "岗位编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + private String code; + + @Schema(description = "岗位排序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer sort; + + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; // 参见 CommonStatusEnum 枚举 + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dict/DictDataApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dict/DictDataApi.java new file mode 100644 index 0000000..1dc31e6 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dict/DictDataApi.java @@ -0,0 +1,68 @@ +package com.win.module.system.api.dict; + +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.Operation; +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.dict.dto.DictDataRespDTO; +import com.win.module.system.enums.ApiConstants; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.Collection; +import java.util.List; + +import static com.win.framework.common.util.collection.CollectionUtils.convertList; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 字典数据") +public interface DictDataApi { + + String PREFIX = ApiConstants.PREFIX + "/dict-data"; + + @GetMapping(PREFIX + "/valid") + @Operation(summary = "校验字典数据们是否有效") + @Parameters({ + @Parameter(name = "dictType", description = "字典类型", example = "SEX", required = true), + @Parameter(name = "descriptions", description = "字典数据值的数组", example = "1,2", required = true) + }) + CommonResult validateDictDataList(@RequestParam("dictType") String dictType, + @RequestParam("values") Collection values); + + @GetMapping(PREFIX + "/get") + @Operation(summary = "获得指定的字典数据") + @Parameters({ + @Parameter(name = "dictType", description = "字典类型", example = "SEX", required = true), + @Parameter(name = "description", description = "字典数据值", example = "1", required = true) + }) + CommonResult getDictData(@RequestParam("dictType") String dictType, + @RequestParam("value") String value); + + @GetMapping(PREFIX + "/parse") + @Operation(summary = "解析获得指定的字典数据") + @Parameters({ + @Parameter(name = "dictType", description = "字典类型", example = "SEX", required = true), + @Parameter(name = "label", description = "字典标签", example = "男", required = true) + }) + CommonResult parseDictData(@RequestParam("dictType") String dictType, + @RequestParam("label") String label); + + @GetMapping(PREFIX + "/list") + @Operation(summary = "获得指定字典类型的字典数据列表") + @Parameter(name = "dictType", description = "字典类型", example = "SEX", required = true) + CommonResult> getDictDataList(@RequestParam("dictType") String dictType); + + /** + * 获得字典数据标签列表 + * + * @param dictType 字典类型 + * @return 字典数据标签列表 + */ + default List getDictDataLabelList(String dictType) { + List list = getDictDataList(dictType).getData(); + return convertList(list, DictDataRespDTO::getLabel); + } + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dict/dto/DictDataRespDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dict/dto/DictDataRespDTO.java new file mode 100644 index 0000000..10ef287 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/dict/dto/DictDataRespDTO.java @@ -0,0 +1,22 @@ +package com.win.module.system.api.dict.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "RPC 服务 - 字典数据 Response DTO") +@Data +public class DictDataRespDTO { + + @Schema(description = "字典标签", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String label; + + @Schema(description = "字典值", requiredMode = Schema.RequiredMode.REQUIRED, example = "iocoder") + private String value; + + @Schema(description = "字典类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "sys_common_sex") + private String dictType; + + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; // 参见 CommonStatusEnum 枚举 + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/LoginLogApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/LoginLogApi.java new file mode 100644 index 0000000..c0fac0e --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/LoginLogApi.java @@ -0,0 +1,24 @@ +package com.win.module.system.api.logger; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.logger.dto.LoginLogCreateReqDTO; +import com.win.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import jakarta.validation.Valid; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 登录日志") +public interface LoginLogApi { + + String PREFIX = ApiConstants.PREFIX + "/login-log"; + + @PostMapping(PREFIX + "/create") + @Operation(summary = "创建登录日志") + CommonResult createLoginLog(@Valid @RequestBody LoginLogCreateReqDTO reqDTO); + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/OperateLogApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/OperateLogApi.java new file mode 100644 index 0000000..46a681f --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/OperateLogApi.java @@ -0,0 +1,32 @@ +package com.win.module.system.api.logger; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.api.logger.dto.OperateLogCreateReqDTO; +import com.win.module.system.api.logger.dto.OperateLogPageReqDTO; +import com.win.module.system.api.logger.dto.OperateLogRespDTO; +import com.win.module.system.enums.ApiConstants; +import feign.QueryMap; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import jakarta.validation.Valid; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 操作日志") +public interface OperateLogApi { + + String PREFIX = ApiConstants.PREFIX + "/operate-log"; + + @PostMapping(PREFIX + "/create") + @Operation(summary = "创建操作日志") + CommonResult createOperateLog(@Valid @RequestBody OperateLogCreateReqDTO createReqDTO); + + @PostMapping(PREFIX + "/page") + @Operation(summary = "获取指定模块的指定数据的操作日志分页") + CommonResult> getOperateLogPage(@QueryMap OperateLogPageReqDTO pageReqVO); + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/LoginLogCreateReqDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/LoginLogCreateReqDTO.java new file mode 100644 index 0000000..12b7f6e --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/LoginLogCreateReqDTO.java @@ -0,0 +1,43 @@ +package com.win.module.system.api.logger.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; + +@Schema(description = "RPC 服务 - 登录日志创建 Request DTO") +@Data +public class LoginLogCreateReqDTO { + + @Schema(description = "日志类型,参见 LoginLogTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1" ) + @NotNull(message = "日志类型不能为空") + private Integer logType; + + @Schema(description = "链路追踪编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "89aca178-a370-411c-ae02-3f0d672be4ab") + private String traceId; + + @Schema(description = "用户编号", example = "666") + private Long userId; + @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "2" ) + @NotNull(message = "用户类型不能为空") + private Integer userType; + @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + @NotBlank(message = "用户账号不能为空") + @Size(max = 30, message = "用户账号长度不能超过30个字符") + private String username; + + @Schema(description = "登录结果,参见 LoginResultEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "登录结果不能为空") + private Integer result; + + @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") + @NotEmpty(message = "用户 IP 不能为空") + private String userIp; + + @Schema(description = "浏览器 UserAgent", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0") + private String userAgent; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/OperateLogCreateReqDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/OperateLogCreateReqDTO.java new file mode 100644 index 0000000..8c4a5c6 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/OperateLogCreateReqDTO.java @@ -0,0 +1,50 @@ +package com.win.module.system.api.logger.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Schema(name = "RPC 服务 - 系统操作日志 Create Request DTO") +@Data +public class OperateLogCreateReqDTO { + + @Schema(description = "链路追踪编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "89aca178-a370-411c-ae02-3f0d672be4ab") + private String traceId; + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") + @NotNull(message = "用户编号不能为空") + private Long userId; + @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "2" ) + @NotNull(message = "用户类型不能为空") + private Integer userType; + @Schema(description = "操作模块类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "订单") + @NotEmpty(message = "操作模块类型不能为空") + private String type; + @Schema(description = "操作名", requiredMode = Schema.RequiredMode.REQUIRED, example = "创建订单") + @NotEmpty(message = "操作名不能为空") + private String subType; + @Schema(description = "操作模块业务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "188") + @NotNull(message = "操作模块业务编号不能为空") + private Long bizId; + @Schema(description = "操作内容", requiredMode = Schema.RequiredMode.REQUIRED, + example = "修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码") + @NotEmpty(message = "操作内容不能为空") + private String action; + @Schema(description = "拓展字段", example = "{\"orderId\": \"1\"}") + private String extra; + + @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET") + @NotEmpty(message = "请求方法名不能为空") + private String requestMethod; + @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/order/get") + @NotEmpty(message = "请求地址不能为空") + private String requestUrl; + @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") + @NotEmpty(message = "用户 IP 不能为空") + private String userIp; + @Schema(description = "浏览器 UserAgent", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0") + @NotEmpty(message = "浏览器 UA 不能为空") + private String userAgent; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/OperateLogPageReqDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/OperateLogPageReqDTO.java new file mode 100644 index 0000000..e4d4fbf --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/OperateLogPageReqDTO.java @@ -0,0 +1,20 @@ +package com.win.module.system.api.logger.dto; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(name = "RPC 服务 - 操作日志分页 Request DTO") +@Data +public class OperateLogPageReqDTO extends PageParam { + + @Schema(description = "模块类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "订单") + private String type; + + @Schema(description = "模块数据编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "188") + private Long bizId; + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") + private Long userId; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/OperateLogRespDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/OperateLogRespDTO.java new file mode 100644 index 0000000..16133aa --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/logger/dto/OperateLogRespDTO.java @@ -0,0 +1,52 @@ +package com.win.module.system.api.logger.dto; + +import com.fhs.core.trans.anno.Trans; +import com.fhs.core.trans.constant.TransType; +import com.fhs.core.trans.vo.VO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(name = "RPC 服务 - 系统操作日志 Response DTO") +@Data +public class OperateLogRespDTO implements VO { + + @Schema(description = "日志编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "链路追踪编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "89aca178-a370-411c-ae02-3f0d672be4ab") + private String traceId; + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") + @Trans(type = TransType.RPC, targetClassName = "com.win.module.system.dal.dataobject.user.AdminUserDO", + fields = "nickname", ref = "userName") + private Long userId; + @Schema(description = "用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String userName; + @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "2" ) + private Integer userType; + @Schema(description = "操作模块类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "订单") + private String type; + @Schema(description = "操作名", requiredMode = Schema.RequiredMode.REQUIRED, example = "创建订单") + private String subType; + @Schema(description = "操作模块业务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "188") + private Long bizId; + @Schema(description = "操作内容", requiredMode = Schema.RequiredMode.REQUIRED, + example = "修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码") + private String action; + @Schema(description = "拓展字段", example = "{\"orderId\": \"1\"}") + private String extra; + + @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET") + private String requestMethod; + @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/order/get") + private String requestUrl; + @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") + private String userIp; + @Schema(description = "浏览器 UserAgent", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0") + private String userAgent; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/mail/MailSendApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/mail/MailSendApi.java new file mode 100644 index 0000000..5504e57 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/mail/MailSendApi.java @@ -0,0 +1,28 @@ +package com.win.module.system.api.mail; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.mail.dto.MailSendSingleToUserReqDTO; +import com.win.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +import jakarta.validation.Valid; +import org.springframework.web.bind.annotation.RequestBody; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 邮件发送") +public interface MailSendApi { + + String PREFIX = ApiConstants.PREFIX + "/mail/send"; + + @PostMapping(PREFIX + "/send-single-admin") + @Operation(summary = "发送单条邮件给 Admin 用户", description = "在 mail 为空时,使用 userId 加载对应 Admin 的邮箱") + CommonResult sendSingleMailToAdmin(@Valid @RequestBody MailSendSingleToUserReqDTO reqDTO); + + @PostMapping(PREFIX + "/send-single-member") + @Operation(summary = "发送单条邮件给 Member 用户", description = "在 mail 为空时,使用 userId 加载对应 Member 的邮箱") + CommonResult sendSingleMailToMember(@Valid @RequestBody MailSendSingleToUserReqDTO reqDTO); + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/mail/dto/MailSendSingleToUserReqDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/mail/dto/MailSendSingleToUserReqDTO.java new file mode 100644 index 0000000..aaa61d1 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/mail/dto/MailSendSingleToUserReqDTO.java @@ -0,0 +1,27 @@ +package com.win.module.system.api.mail.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotNull; +import java.util.Map; + +@Schema(description = "RPC 服务 - 邮件发送给 Admin 或者 Member 用户 Request DTO") +@Data +public class MailSendSingleToUserReqDTO { + + @Schema(description = "用户编号", example = "1024") + private Long userId; + @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") + @Email + private String mail; + + @Schema(description = "邮件模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "USER_SEND") + @NotNull(message = "邮件模板编号不能为空") + private String templateCode; + + @Schema(description = "邮件模板参数") + private Map templateParams; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/notify/NotifyMessageSendApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/notify/NotifyMessageSendApi.java new file mode 100644 index 0000000..e79e110 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/notify/NotifyMessageSendApi.java @@ -0,0 +1,28 @@ +package com.win.module.system.api.notify; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.notify.dto.NotifySendSingleToUserReqDTO; +import com.win.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +import jakarta.validation.Valid; +import org.springframework.web.bind.annotation.RequestBody; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 站内信发送") +public interface NotifyMessageSendApi { + + String PREFIX = ApiConstants.PREFIX + "/notify/send"; + + @PostMapping(PREFIX + "/send-single-admin") + @Operation(summary = "发送单条站内信给 Admin 用户") + CommonResult sendSingleMessageToAdmin(@Valid @RequestBody NotifySendSingleToUserReqDTO reqDTO); + + @PostMapping(PREFIX + "/send-single-member") + @Operation(summary = "发送单条站内信给 Member 用户") + CommonResult sendSingleMessageToMember(@Valid @RequestBody NotifySendSingleToUserReqDTO reqDTO); + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/notify/dto/NotifySendSingleToUserReqDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/notify/dto/NotifySendSingleToUserReqDTO.java new file mode 100644 index 0000000..b79b06a --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/notify/dto/NotifySendSingleToUserReqDTO.java @@ -0,0 +1,23 @@ +package com.win.module.system.api.notify.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.util.Map; + +@Schema(description = "RPC 服务 - 站内信发送给 Admin 或者 Member 用户 Request DTO") +@Data +public class NotifySendSingleToUserReqDTO { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "用户编号不能为空") + private Long userId; + + @Schema(description = "站内信模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "USER_SEND") + @NotEmpty(message = "站内信模板编号不能为空") + private String templateCode; + @Schema(description = "邮件模板参数") + private Map templateParams; +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/OAuth2TokenApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/OAuth2TokenApi.java new file mode 100644 index 0000000..d32795c --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/OAuth2TokenApi.java @@ -0,0 +1,52 @@ +package com.win.module.system.api.oauth2; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.oauth2.dto.OAuth2AccessTokenCheckRespDTO; +import com.win.module.system.api.oauth2.dto.OAuth2AccessTokenCreateReqDTO; +import com.win.module.system.api.oauth2.dto.OAuth2AccessTokenRespDTO; +import com.win.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +import jakarta.validation.Valid; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - OAuth2.0 令牌") +public interface OAuth2TokenApi { + + String PREFIX = ApiConstants.PREFIX + "/oauth2/token"; + + /** + * 校验 Token 的 URL 地址,主要是提供给 Gateway 使用 + */ + @SuppressWarnings("HttpUrlsUsage") + String URL_CHECK = "http://" + ApiConstants.NAME + PREFIX + "/check"; + + @PostMapping(PREFIX + "/create") + @Operation(summary = "创建访问令牌") + CommonResult createAccessToken(@Valid @RequestBody OAuth2AccessTokenCreateReqDTO reqDTO); + + @GetMapping(PREFIX + "/check") + @Operation(summary = "校验访问令牌") + @Parameter(name = "accessToken", description = "访问令牌", required = true, example = "tudou") + CommonResult checkAccessToken(@RequestParam("accessToken") String accessToken); + + @DeleteMapping(PREFIX + "/remove") + @Operation(summary = "移除访问令牌") + @Parameter(name = "accessToken", description = "访问令牌", required = true, example = "tudou") + CommonResult removeAccessToken(@RequestParam("accessToken") String accessToken); + + @PutMapping(PREFIX + "/refresh") + @Operation(summary = "刷新访问令牌") + @Parameters({ + @Parameter(name = "refreshToken", description = "刷新令牌", required = true, example = "haha"), + @Parameter(name = "clientId", description = "客户端编号", required = true, example = "winyuanma") + }) + CommonResult refreshAccessToken(@RequestParam("refreshToken") String refreshToken, + @RequestParam("clientId") String clientId); + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/dto/OAuth2AccessTokenCheckRespDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/dto/OAuth2AccessTokenCheckRespDTO.java new file mode 100644 index 0000000..2dd39e1 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/dto/OAuth2AccessTokenCheckRespDTO.java @@ -0,0 +1,29 @@ +package com.win.module.system.api.oauth2.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +@Schema(description = "RPC 服务 - OAuth2 访问令牌的校验 Response DTO") +@Data +public class OAuth2AccessTokenCheckRespDTO implements Serializable { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + private Long userId; + + @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer userType; + + @Schema(description = "用户信息", example = "{\"nickname\": \"芋道\"}") + private Map userInfo; + + @Schema(description = "租户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long tenantId; + + @Schema(description = "授权范围的数组", example = "user_info") + private List scopes; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java new file mode 100644 index 0000000..77e6e21 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java @@ -0,0 +1,32 @@ +package com.win.module.system.api.oauth2.dto; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.validation.InEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.List; + +@Schema(description = "RPC 服务 - OAuth2 访问令牌创建 Request DTO") +@Data +public class OAuth2AccessTokenCreateReqDTO implements Serializable { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + @NotNull(message = "用户编号不能为空") + private Long userId; + + @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "用户类型不能为空") + @InEnum(value = UserTypeEnum.class, message = "用户类型必须是 {value}") + private Integer userType; + + @Schema(description = "客户端编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "winyuanma") + @NotNull(message = "客户端编号不能为空") + private String clientId; + + @Schema(description = "授权范围的数组", example = "user_info") + private List scopes; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/dto/OAuth2AccessTokenRespDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/dto/OAuth2AccessTokenRespDTO.java new file mode 100644 index 0000000..e77147c --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/oauth2/dto/OAuth2AccessTokenRespDTO.java @@ -0,0 +1,30 @@ +package com.win.module.system.api.oauth2.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Schema(description = "RPC 服务 - OAuth2 访问令牌的信息 Response DTO") +@Data +@Accessors(chain = true) +public class OAuth2AccessTokenRespDTO implements Serializable { + + @Schema(description = "访问令牌", requiredMode = Schema.RequiredMode.REQUIRED, example = "tudou") + private String accessToken; + + @Schema(description = "刷新令牌", requiredMode = Schema.RequiredMode.REQUIRED, example = "haha") + private String refreshToken; + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + private Long userId; + + @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1" ) + private Integer userType; + + @Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime expiresTime; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/package-info.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/package-info.java new file mode 100644 index 0000000..0723902 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/package-info.java @@ -0,0 +1,4 @@ +/** + * System API 包,定义暴露给其它模块的 API + */ +package com.win.module.system.api; diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/PermissionApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/PermissionApi.java new file mode 100644 index 0000000..c457930 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/PermissionApi.java @@ -0,0 +1,51 @@ +package com.win.module.system.api.permission; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.permission.dto.DeptDataPermissionRespDTO; +import com.win.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.Collection; +import java.util.Set; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 权限") +public interface PermissionApi { + + String PREFIX = ApiConstants.PREFIX + "/permission"; + + @GetMapping(PREFIX + "/user-role-id-list-by-role-id") + @Operation(summary = "获得拥有多个角色的用户编号集合") + @Parameter(name = "roleIds", description = "角色编号集合", example = "1,2", required = true) + CommonResult> getUserRoleIdListByRoleIds(@RequestParam("roleIds") Collection roleIds); + + @GetMapping(PREFIX + "/has-any-permissions") + @Operation(summary = "判断是否有权限,任一一个即可") + @Parameters({ + @Parameter(name = "userId", description = "用户编号", example = "1", required = true), + @Parameter(name = "permissions", description = "权限", example = "read,write", required = true) + }) + CommonResult hasAnyPermissions(@RequestParam("userId") Long userId, + @RequestParam("permissions") String... permissions); + + @GetMapping(PREFIX + "/has-any-roles") + @Operation(summary = "判断是否有角色,任一一个即可") + @Parameters({ + @Parameter(name = "userId", description = "用户编号", example = "1", required = true), + @Parameter(name = "roles", description = "角色数组", example = "2", required = true) + }) + CommonResult hasAnyRoles(@RequestParam("userId") Long userId, + @RequestParam("roles") String... roles); + + @GetMapping(PREFIX + "/get-dept-data-permission") + @Operation(summary = "获得登陆用户的部门数据权限") + @Parameter(name = "userId", description = "用户编号", example = "2", required = true) + CommonResult getDeptDataPermission(@RequestParam("userId") Long userId); + +} \ No newline at end of file diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/RoleApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/RoleApi.java new file mode 100644 index 0000000..73be3fc --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/RoleApi.java @@ -0,0 +1,25 @@ +package com.win.module.system.api.permission; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.Collection; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 角色") +public interface RoleApi { + + String PREFIX = ApiConstants.PREFIX + "/role"; + + @GetMapping(PREFIX + "/valid") + @Operation(summary = "校验角色是否合法") + @Parameter(name = "ids", description = "角色编号数组", example = "1,2", required = true) + CommonResult validRoleList(@RequestParam("ids") Collection ids); + +} \ No newline at end of file diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/dto/DeptDataPermissionRespDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/dto/DeptDataPermissionRespDTO.java new file mode 100644 index 0000000..8fea3e5 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/dto/DeptDataPermissionRespDTO.java @@ -0,0 +1,28 @@ +package com.win.module.system.api.permission.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.HashSet; +import java.util.Set; + +@Schema(description = "RPC 服务 - 部门的数据权限 Response DTO") +@Data +public class DeptDataPermissionRespDTO { + + @Schema(description = "是否可查看全部数据", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + private Boolean all; + + @Schema(description = "是否可查看自己的数据", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + private Boolean self; + + @Schema(description = "可查看的部门编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1, 3]") + private Set deptIds; + + public DeptDataPermissionRespDTO() { + this.all = false; + this.self = false; + this.deptIds = new HashSet<>(); + } + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/SmsCodeApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/SmsCodeApi.java new file mode 100644 index 0000000..dc6afa8 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/SmsCodeApi.java @@ -0,0 +1,36 @@ +package com.win.module.system.api.sms; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.sms.dto.code.SmsCodeValidateReqDTO; +import com.win.module.system.api.sms.dto.code.SmsCodeSendReqDTO; +import com.win.module.system.api.sms.dto.code.SmsCodeUseReqDTO; +import com.win.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import jakarta.validation.Valid; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 短信验证码") +public interface SmsCodeApi { + + String PREFIX = ApiConstants.PREFIX + "/oauth2/sms/code"; + + @PostMapping(PREFIX + "/send") + @Operation(summary = "创建短信验证码,并进行发送") + CommonResult sendSmsCode(@Valid @RequestBody SmsCodeSendReqDTO reqDTO); + + @PutMapping(PREFIX + "/use") + @Operation(summary = "验证短信验证码,并进行使用") + CommonResult useSmsCode(@Valid @RequestBody SmsCodeUseReqDTO reqDTO); + + @GetMapping(PREFIX + "/validate") + @Operation(summary = "检查验证码是否有效") + CommonResult validateSmsCode(@Valid @RequestBody SmsCodeValidateReqDTO reqDTO); + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/SmsSendApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/SmsSendApi.java new file mode 100644 index 0000000..187bf03 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/SmsSendApi.java @@ -0,0 +1,28 @@ +package com.win.module.system.api.sms; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.sms.dto.send.SmsSendSingleToUserReqDTO; +import com.win.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import jakarta.validation.Valid; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 短信发送") +public interface SmsSendApi { + + String PREFIX = ApiConstants.PREFIX + "/sms/send"; + + @PostMapping(PREFIX + "/send-single-admin") + @Operation(summary = "发送单条短信给 Admin 用户", description = "在 mobile 为空时,使用 userId 加载对应 Admin 的手机号") + CommonResult sendSingleSmsToAdmin(@Valid @RequestBody SmsSendSingleToUserReqDTO reqDTO); + + @PostMapping(PREFIX + "/send-single-member") + @Operation(summary = "发送单条短信给 Member 用户", description = "在 mobile 为空时,使用 userId 加载对应 Member 的手机号") + CommonResult sendSingleSmsToMember(@Valid @RequestBody SmsSendSingleToUserReqDTO reqDTO); + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java new file mode 100644 index 0000000..049f1eb --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java @@ -0,0 +1,30 @@ +package com.win.module.system.api.sms.dto.code; + +import com.win.framework.common.validation.InEnum; +import com.win.framework.common.validation.Mobile; +import com.win.module.system.enums.sms.SmsSceneEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "RPC 服务 - 短信验证码的发送 Request DTO") +@Data +public class SmsCodeSendReqDTO { + + @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") + @Mobile + @NotEmpty(message = "手机号不能为空") + private String mobile; + + @Schema(description = "发送场景", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "发送场景不能为空") + @InEnum(SmsSceneEnum.class) + + private Integer scene; + @Schema(description = "发送 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "10.20.30.40") + @NotEmpty(message = "发送 IP 不能为空") + private String createIp; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/code/SmsCodeUseReqDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/code/SmsCodeUseReqDTO.java new file mode 100644 index 0000000..5306237 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/code/SmsCodeUseReqDTO.java @@ -0,0 +1,34 @@ +package com.win.module.system.api.sms.dto.code; + +import com.win.framework.common.validation.InEnum; +import com.win.framework.common.validation.Mobile; +import com.win.module.system.enums.sms.SmsSceneEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "RPC 服务 - 短信验证码的使用 Request DTO") +@Data +public class SmsCodeUseReqDTO { + + @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") + @Mobile + @NotEmpty(message = "手机号不能为空") + private String mobile; + + @Schema(description = "发送场景", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "发送场景不能为空") + @InEnum(SmsSceneEnum.class) + private Integer scene; + + @Schema(description = "验证码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "验证码") + private String code; + + @Schema(description = "发送 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "10.20.30.40") + @NotEmpty(message = "使用 IP 不能为空") + private String usedIp; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/code/SmsCodeValidateReqDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/code/SmsCodeValidateReqDTO.java new file mode 100644 index 0000000..65e4760 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/code/SmsCodeValidateReqDTO.java @@ -0,0 +1,30 @@ +package com.win.module.system.api.sms.dto.code; + +import com.win.framework.common.validation.InEnum; +import com.win.framework.common.validation.Mobile; +import com.win.module.system.enums.sms.SmsSceneEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "RPC 服务 - 短信验证码的校验 Request DTO") +@Data +public class SmsCodeValidateReqDTO { + + @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") + @Mobile + @NotEmpty(message = "手机号不能为空") + private String mobile; + + @Schema(description = "发送场景", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "发送场景不能为空") + @InEnum(SmsSceneEnum.class) + private Integer scene; + + @Schema(description = "验证码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "验证码") + private String code; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/send/SmsSendSingleToUserReqDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/send/SmsSendSingleToUserReqDTO.java new file mode 100644 index 0000000..f275714 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/sms/dto/send/SmsSendSingleToUserReqDTO.java @@ -0,0 +1,26 @@ +package com.win.module.system.api.sms.dto.send; + +import com.win.framework.common.validation.Mobile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import java.util.Map; + +@Schema(description = "RPC 服务 - 短信发送给 Admin 或者 Member 用户 Request DTO") +@Data +public class SmsSendSingleToUserReqDTO { + + @Schema(description = "用户编号", example = "1024") + private Long userId; + @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") + @Mobile + private String mobile; + + @Schema(description = "短信模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "USER_SEND") + @NotEmpty(message = "短信模板编号不能为空") + private String templateCode; + @Schema(description = "短信模板参数") + private Map templateParams; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/SocialClientApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/SocialClientApi.java new file mode 100644 index 0000000..d14cdc4 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/SocialClientApi.java @@ -0,0 +1,50 @@ +package com.win.module.system.api.social; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.social.dto.SocialWxJsapiSignatureRespDTO; +import com.win.module.system.api.social.dto.SocialWxPhoneNumberInfoRespDTO; +import com.win.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 社交应用") +public interface SocialClientApi { + + String PREFIX = ApiConstants.PREFIX + "/social-client"; + + @GetMapping(PREFIX + "/get-authorize-url") + @Operation(summary = "获得社交平台的授权 URL") + @Parameters({ + @Parameter(name = "socialType", description = "社交平台的类型", example = "1", required = true), + @Parameter(name = "userType", description = "用户类型", example = "1", required = true), + @Parameter(name = "redirectUri", description = "重定向 URL", example = "https://www.iocoder.cn", required = true) + }) + CommonResult getAuthorizeUrl(@RequestParam("socialType") Integer socialType, + @RequestParam("userType") Integer userType, + @RequestParam("redirectUri") String redirectUri); + + @GetMapping(PREFIX + "/create-wx-mp-jsapi-signature") + @Operation(summary = "创建微信公众号 JS SDK 初始化所需的签名") + @Parameters({ + @Parameter(name = "userType", description = "用户类型", example = "1", required = true), + @Parameter(name = "url", description = "访问 URL", example = "https://www.iocoder.cn", required = true) + }) + CommonResult createWxMpJsapiSignature(@RequestParam("userType") Integer userType, + @RequestParam("url") String url); + + @GetMapping(PREFIX + "/create-wx-ma-phone-number-info") + @Operation(summary = "获得微信小程序的手机信息") + @Parameters({ + @Parameter(name = "userType", description = "用户类型", example = "1", required = true), + @Parameter(name = "phoneCode", description = "手机授权码", example = "win11", required = true) + }) + CommonResult getWxMaPhoneNumberInfo(@RequestParam("userType") Integer userType, + @RequestParam("phoneCode") String phoneCode); + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/SocialUserApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/SocialUserApi.java new file mode 100644 index 0000000..3ec1da4 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/SocialUserApi.java @@ -0,0 +1,56 @@ +package com.win.module.system.api.social; + +import com.win.framework.common.exception.ServiceException; +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.social.dto.SocialUserBindReqDTO; +import com.win.module.system.api.social.dto.SocialUserRespDTO; +import com.win.module.system.api.social.dto.SocialUserUnbindReqDTO; +import com.win.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +import jakarta.validation.Valid; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 社交用户") +public interface SocialUserApi { + + String PREFIX = ApiConstants.PREFIX + "/social-user"; + + @PostMapping(PREFIX + "/bind") + @Operation(summary = "绑定社交用户") + CommonResult bindSocialUser(@Valid @RequestBody SocialUserBindReqDTO reqDTO); + + @DeleteMapping(PREFIX + "/unbind") + @Operation(summary = "取消绑定社交用户") + CommonResult unbindSocialUser(@Valid @RequestBody SocialUserUnbindReqDTO reqDTO); + + @GetMapping(PREFIX + "/get-by-user-id") + @Operation(summary = "获得社交用户,基于 userId") + @Parameters({ + @Parameter(name = "userType", description = "用户类型", example = "2", required = true), + @Parameter(name = "userId", description = "用户编号", example = "1024", required = true), + @Parameter(name = "socialType", description = "社交平台的类型", example = "1", required = true), + }) + CommonResult getSocialUserByUserId(@RequestParam("userType") Integer userType, + @RequestParam("userId") Long userId, + @RequestParam("socialType") Integer socialType); + + @GetMapping(PREFIX + "/get-by-code") + @Operation(summary = "获得社交用") // 在认证信息不正确的情况下,也会抛出 {@link ServiceException} 业务异常 + @Parameters({ + @Parameter(name = "userType", description = "用户类型", example = "2", required = true), + @Parameter(name = "socialType", description = "社交平台的类型", example = "1", required = true), + @Parameter(name = "code", description = "授权码", example = "88888", required = true), + @Parameter(name = "state", description = "state", example = "666", required = true), + }) + CommonResult getSocialUserByCode(@RequestParam("userType") Integer userType, + @RequestParam("socialType") Integer socialType, + @RequestParam("code") String code, + @RequestParam("state") String state); + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialUserBindReqDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialUserBindReqDTO.java new file mode 100644 index 0000000..5b124fd --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialUserBindReqDTO.java @@ -0,0 +1,39 @@ +package com.win.module.system.api.social.dto; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.validation.InEnum; +import com.win.module.system.enums.social.SocialTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "RPC 服务 - 取消绑定社交用户 Request DTO") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SocialUserBindReqDTO { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "用户编号不能为空") + private Long userId; + @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @InEnum(UserTypeEnum.class) + @NotNull(message = "用户类型不能为空") + private Integer userType; + + @Schema(description = "社交平台的类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @InEnum(SocialTypeEnum.class) + @NotNull(message = "社交平台的类型不能为空") + private Integer socialType; + @Schema(description = "授权码", requiredMode = Schema.RequiredMode.REQUIRED, example = "zsw") + @NotEmpty(message = "授权码不能为空") + private String code; + @Schema(description = "state", requiredMode = Schema.RequiredMode.REQUIRED, example = "qtw") + @NotEmpty(message = "state 不能为空") + private String state; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialUserRespDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialUserRespDTO.java new file mode 100644 index 0000000..10b6966 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialUserRespDTO.java @@ -0,0 +1,26 @@ +package com.win.module.system.api.social.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Schema(description = "RPC 服务 - 社交用户 Response DTO") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SocialUserRespDTO { + + @Schema(description = "社交用户 openid", requiredMode = Schema.RequiredMode.REQUIRED, example = "zsw") + private String openid; + + @Schema(description = "社交用户的昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码") + private String nickname; + + @Schema(description = "社交用户的头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.jpg") + private String avatar; + + @Schema(description = "关联的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long userId; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialUserUnbindReqDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialUserUnbindReqDTO.java new file mode 100644 index 0000000..67b2686 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialUserUnbindReqDTO.java @@ -0,0 +1,36 @@ +package com.win.module.system.api.social.dto; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.validation.InEnum; +import com.win.module.system.enums.social.SocialTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.NoArgsConstructor; + +@Schema(description = "RPC 服务 - 取消绑定社交用户 Request DTO") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SocialUserUnbindReqDTO { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "用户编号不能为空") + private Long userId; + @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @InEnum(UserTypeEnum.class) + @NotNull(message = "用户类型不能为空") + private Integer userType; + + @Schema(description = "社交平台的类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @InEnum(SocialTypeEnum.class) + @NotNull(message = "社交平台的类型不能为空") + private Integer socialType; + @Schema(description = "社交平台的 openid", requiredMode = Schema.RequiredMode.REQUIRED, example = "zsw") + @NotEmpty(message = "社交平台的 openid 不能为空") + private String openid; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialWxJsapiSignatureRespDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialWxJsapiSignatureRespDTO.java new file mode 100644 index 0000000..030622c --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialWxJsapiSignatureRespDTO.java @@ -0,0 +1,25 @@ +package com.win.module.system.api.social.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "RPC 服务 - 微信公众号 JSAPI 签名 Response DTO") +@Data +public class SocialWxJsapiSignatureRespDTO { + + @Schema(description = "微信公众号的 appId", requiredMode = Schema.RequiredMode.REQUIRED, example = "wx123456") + private String appId; + + @Schema(description = "匿名串", requiredMode = Schema.RequiredMode.REQUIRED, example = "zsw") + private String nonceStr; + + @Schema(description = "时间戳", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456789") + private Long timestamp; + + @Schema(description = "URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn") + private String url; + + @Schema(description = "签名", requiredMode = Schema.RequiredMode.REQUIRED, example = "zsw") + private String signature; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialWxPhoneNumberInfoRespDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialWxPhoneNumberInfoRespDTO.java new file mode 100644 index 0000000..a356221 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/social/dto/SocialWxPhoneNumberInfoRespDTO.java @@ -0,0 +1,18 @@ +package com.win.module.system.api.social.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "RPC 服务 - 微信小程序的手机信息 Response DTO") +@Data +public class SocialWxPhoneNumberInfoRespDTO { + + @Schema(description = "用户绑定的手机号(国外手机号会有区号)", requiredMode = Schema.RequiredMode.REQUIRED, example = "021-13579246810") + private String phoneNumber; + + @Schema(description = "没有区号的手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13579246810") + private String purePhoneNumber; + @Schema(description = "区号", requiredMode = Schema.RequiredMode.REQUIRED, example = "021") + private String countryCode; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/tenant/TenantApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/tenant/TenantApi.java new file mode 100644 index 0000000..b8258d4 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/tenant/TenantApi.java @@ -0,0 +1,29 @@ +package com.win.module.system.api.tenant; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 多租户") +public interface TenantApi { + + String PREFIX = ApiConstants.PREFIX + "/tenant"; + + @GetMapping(PREFIX + "/id-list") + @Operation(summary = "获得所有租户编号") + CommonResult> getTenantIdList(); + + @GetMapping(PREFIX + "/valid") + @Operation(summary = "校验租户是否合法") + @Parameter(name = "id", description = "租户编号", required = true, example = "1024") + CommonResult validTenant(@RequestParam("id") Long id); + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/user/AdminUserApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/user/AdminUserApi.java new file mode 100644 index 0000000..6ffef46 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/user/AdminUserApi.java @@ -0,0 +1,93 @@ +package com.win.module.system.api.user; + +import cn.hutool.core.convert.Convert; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import com.win.module.system.enums.ApiConstants; +import com.fhs.trans.service.AutoTransable; +import feign.FeignIgnore; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 管理员用户") +//@AutoTrans(namespace = PREFIX, fields = {"nickname"}) // TODO @芋艿:需要 easy-trans 做个 bugfix +public interface AdminUserApi extends AutoTransable { + + String PREFIX = ApiConstants.PREFIX + "/user"; + + @GetMapping(PREFIX + "/get") + @Operation(summary = "通过用户 ID 查询用户") + @Parameter(name = "id", description = "用户编号", example = "1", required = true) + CommonResult getUser(@RequestParam("id") Long id); + + @GetMapping(PREFIX + "/list-by-subordinate") + @Operation(summary = "通过用户 ID 查询用户下属") + @Parameter(name = "id", description = "用户编号", example = "1", required = true) + CommonResult> getUserListBySubordinate(@RequestParam("id") Long id); + + @GetMapping(PREFIX + "/list") + @Operation(summary = "通过用户 ID 查询用户们") + @Parameter(name = "ids", description = "部门编号数组", example = "1,2", required = true) + CommonResult> getUserList(@RequestParam("ids") Collection ids); + + @GetMapping(PREFIX + "/list-by-dept-id") + @Operation(summary = "获得指定部门的用户数组") + @Parameter(name = "deptIds", description = "部门编号数组", example = "1,2", required = true) + CommonResult> getUserListByDeptIds(@RequestParam("deptIds") Collection deptIds); + + @GetMapping(PREFIX + "/list-by-post-id") + @Operation(summary = "获得指定岗位的用户数组") + @Parameter(name = "postIds", description = "岗位编号数组", example = "2,3", required = true) + CommonResult> getUserListByPostIds(@RequestParam("postIds") Collection postIds); + + /** + * 获得用户 Map + * + * @param ids 用户编号数组 + * @return 用户 Map + */ + default Map getUserMap(Collection ids) { + List users = getUserList(ids).getCheckedData(); + return CollectionUtils.convertMap(users, AdminUserRespDTO::getId); + } + + /** + * 校验用户是否有效。如下情况,视为无效: + * 1. 用户编号不存在 + * 2. 用户被禁用 + * + * @param id 用户编号 + */ + default void validateUser(Long id) { + validateUserList(Collections.singleton(id)); + } + + @GetMapping(PREFIX + "/valid") + @Operation(summary = "校验用户们是否有效") + @Parameter(name = "ids", description = "用户编号数组", example = "3,5", required = true) + CommonResult validateUserList(@RequestParam("ids") Collection ids); + + @Override + @FeignIgnore + default List selectByIds(List ids) { + return getUserList(Convert.toList(Long.class, ids)).getCheckedData(); + } + + @Override + @FeignIgnore + default AdminUserRespDTO selectById(Object id) { + return getUser(Convert.toLong(id)).getCheckedData(); + } + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/user/dto/AdminUserRespDTO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/user/dto/AdminUserRespDTO.java new file mode 100644 index 0000000..476e3e2 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/user/dto/AdminUserRespDTO.java @@ -0,0 +1,31 @@ +package com.win.module.system.api.user.dto; + +import com.fhs.core.trans.vo.VO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Set; + +@Schema(description = "RPC 服务 - Admin 用户 Response DTO") +@Data +public class AdminUserRespDTO implements VO { + + @Schema(description = "用户 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "小王") + private String nickname; + + @Schema(description = "帐号状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; // 参见 CommonStatusEnum 枚举 + + @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long deptId; + + @Schema(description = "岗位编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1, 3]") + private Set postIds; + + @Schema(description = "手机号码", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") + private String mobile; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/ApiConstants.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/ApiConstants.java new file mode 100644 index 0000000..94604ba --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/ApiConstants.java @@ -0,0 +1,23 @@ +package com.win.module.system.enums; + +import com.win.framework.common.enums.RpcConstants; + +/** + * API 相关的枚举 + * + * @author 芋道源码 + */ +public class ApiConstants { + + /** + * 服务名 + * + * 注意,需要保证和 spring.application.name 保持一致 + */ + public static final String NAME = "system-server"; + + public static final String PREFIX = RpcConstants.RPC_API_PREFIX + "/system"; + + public static final String VERSION = "1.0.0"; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/DictTypeConstants.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/DictTypeConstants.java new file mode 100644 index 0000000..8e6d994 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/DictTypeConstants.java @@ -0,0 +1,27 @@ +package com.win.module.system.enums; + +/** + * System 字典类型的枚举类 + * + * @author 芋道源码 + */ +public interface DictTypeConstants { + + String USER_TYPE = "user_type"; // 用户类型 + String COMMON_STATUS = "common_status"; // 系统状态 + + // ========== SYSTEM 模块 ========== + + String USER_SEX = "system_user_sex"; // 用户性别 + + String LOGIN_TYPE = "system_login_type"; // 登录日志的类型 + String LOGIN_RESULT = "system_login_result"; // 登录结果 + + String ERROR_CODE_TYPE = "system_error_code_type"; // 错误码的类型枚举 + + String SMS_CHANNEL_CODE = "system_sms_channel_code"; // 短信渠道编码 + String SMS_TEMPLATE_TYPE = "system_sms_template_type"; // 短信模板类型 + String SMS_SEND_STATUS = "system_sms_send_status"; // 短信发送状态 + String SMS_RECEIVE_STATUS = "system_sms_receive_status"; // 短信接收状态 + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/ErrorCodeConstants.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/ErrorCodeConstants.java new file mode 100644 index 0000000..ea9464a --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/ErrorCodeConstants.java @@ -0,0 +1,166 @@ +package com.win.module.system.enums; + +import com.win.framework.common.exception.ErrorCode; + +/** + * System 错误码枚举类 + * + * system 系统,使用 1-002-000-000 段 + */ +public interface ErrorCodeConstants { + + // ========== AUTH 模块 1-002-000-000 ========== + ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1_002_000_000, "登录失败,账号密码不正确"); + ErrorCode AUTH_LOGIN_USER_DISABLED = new ErrorCode(1_002_000_001, "登录失败,账号被禁用"); + ErrorCode AUTH_LOGIN_CAPTCHA_CODE_ERROR = new ErrorCode(1_002_000_004, "验证码不正确,原因:{}"); + ErrorCode AUTH_THIRD_LOGIN_NOT_BIND = new ErrorCode(1_002_000_005, "未绑定账号,需要进行绑定"); + ErrorCode AUTH_TOKEN_EXPIRED = new ErrorCode(1_002_000_006, "Token 已经过期"); + ErrorCode AUTH_MOBILE_NOT_EXISTS = new ErrorCode(1_002_000_007, "手机号不存在"); + + // ========== 菜单模块 1-002-001-000 ========== + ErrorCode MENU_NAME_DUPLICATE = new ErrorCode(1_002_001_000, "已经存在该名字的菜单"); + ErrorCode MENU_PARENT_NOT_EXISTS = new ErrorCode(1_002_001_001, "父菜单不存在"); + ErrorCode MENU_PARENT_ERROR = new ErrorCode(1_002_001_002, "不能设置自己为父菜单"); + ErrorCode MENU_NOT_EXISTS = new ErrorCode(1_002_001_003, "菜单不存在"); + ErrorCode MENU_EXISTS_CHILDREN = new ErrorCode(1_002_001_004, "存在子菜单,无法删除"); + ErrorCode MENU_PARENT_NOT_DIR_OR_MENU = new ErrorCode(1_002_001_005, "父菜单的类型必须是目录或者菜单"); + + // ========== 角色模块 1-002-002-000 ========== + ErrorCode ROLE_NOT_EXISTS = new ErrorCode(1_002_002_000, "角色不存在"); + ErrorCode ROLE_NAME_DUPLICATE = new ErrorCode(1_002_002_001, "已经存在名为【{}】的角色"); + ErrorCode ROLE_CODE_DUPLICATE = new ErrorCode(1_002_002_002, "已经存在编码为【{}】的角色"); + ErrorCode ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE = new ErrorCode(1_002_002_003, "不能操作类型为系统内置的角色"); + ErrorCode ROLE_IS_DISABLE = new ErrorCode(1_002_002_004, "名字为【{}】的角色已被禁用"); + ErrorCode ROLE_ADMIN_CODE_ERROR = new ErrorCode(1_002_002_005, "编码【{}】不能使用"); + + // ========== 用户模块 1-002-003-000 ========== + ErrorCode USER_USERNAME_EXISTS = new ErrorCode(1_002_003_000, "用户账号已经存在"); + ErrorCode USER_MOBILE_EXISTS = new ErrorCode(1_002_003_001, "手机号已经存在"); + ErrorCode USER_EMAIL_EXISTS = new ErrorCode(1_002_003_002, "邮箱已经存在"); + ErrorCode USER_NOT_EXISTS = new ErrorCode(1_002_003_003, "用户不存在"); + ErrorCode USER_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_002_003_004, "导入用户数据不能为空!"); + ErrorCode USER_PASSWORD_FAILED = new ErrorCode(1_002_003_005, "用户密码校验失败"); + ErrorCode USER_IS_DISABLE = new ErrorCode(1_002_003_006, "名字为【{}】的用户已被禁用"); + ErrorCode USER_COUNT_MAX = new ErrorCode(1_002_003_008, "创建用户失败,原因:超过租户最大租户配额({})!"); + + // ========== 部门模块 1-002-004-000 ========== + ErrorCode DEPT_NAME_DUPLICATE = new ErrorCode(1_002_004_000, "已经存在该名字的部门"); + ErrorCode DEPT_PARENT_NOT_EXITS = new ErrorCode(1_002_004_001,"父级部门不存在"); + ErrorCode DEPT_NOT_FOUND = new ErrorCode(1_002_004_002, "当前部门不存在"); + ErrorCode DEPT_EXITS_CHILDREN = new ErrorCode(1_002_004_003, "存在子部门,无法删除"); + ErrorCode DEPT_PARENT_ERROR = new ErrorCode(1_002_004_004, "不能设置自己为父部门"); + ErrorCode DEPT_EXISTS_USER = new ErrorCode(1_002_004_005, "部门中存在员工,无法删除"); + ErrorCode DEPT_NOT_ENABLE = new ErrorCode(1_002_004_006, "部门({})不处于开启状态,不允许选择"); + ErrorCode DEPT_PARENT_IS_CHILD = new ErrorCode(1_002_004_007, "不能设置自己的子部门为父部门"); + + // ========== 岗位模块 1-002-005-000 ========== + ErrorCode POST_NOT_FOUND = new ErrorCode(1_002_005_000, "当前岗位不存在"); + ErrorCode POST_NOT_ENABLE = new ErrorCode(1_002_005_001, "岗位({}) 不处于开启状态,不允许选择"); + ErrorCode POST_NAME_DUPLICATE = new ErrorCode(1_002_005_002, "已经存在该名字的岗位"); + ErrorCode POST_CODE_DUPLICATE = new ErrorCode(1_002_005_003, "已经存在该标识的岗位"); + + // ========== 字典类型 1-002-006-000 ========== + ErrorCode DICT_TYPE_NOT_EXISTS = new ErrorCode(1_002_006_001, "当前字典类型不存在"); + ErrorCode DICT_TYPE_NOT_ENABLE = new ErrorCode(1_002_006_002, "字典类型不处于开启状态,不允许选择"); + ErrorCode DICT_TYPE_NAME_DUPLICATE = new ErrorCode(1_002_006_003, "已经存在该名字的字典类型"); + ErrorCode DICT_TYPE_TYPE_DUPLICATE = new ErrorCode(1_002_006_004, "已经存在该类型的字典类型"); + ErrorCode DICT_TYPE_HAS_CHILDREN = new ErrorCode(1_002_006_005, "无法删除,该字典类型还有字典数据"); + + // ========== 字典数据 1-002-007-000 ========== + ErrorCode DICT_DATA_NOT_EXISTS = new ErrorCode(1_002_007_001, "当前字典数据不存在"); + ErrorCode DICT_DATA_NOT_ENABLE = new ErrorCode(1_002_007_002, "字典数据({})不处于开启状态,不允许选择"); + ErrorCode DICT_DATA_VALUE_DUPLICATE = new ErrorCode(1_002_007_003, "已经存在该值的字典数据"); + + // ========== 通知公告 1-002-008-000 ========== + ErrorCode NOTICE_NOT_FOUND = new ErrorCode(1_002_008_001, "当前通知公告不存在"); + + // ========== 短信渠道 1-002-011-000 ========== + ErrorCode SMS_CHANNEL_NOT_EXISTS = new ErrorCode(1_002_011_000, "短信渠道不存在"); + ErrorCode SMS_CHANNEL_DISABLE = new ErrorCode(1_002_011_001, "短信渠道不处于开启状态,不允许选择"); + ErrorCode SMS_CHANNEL_HAS_CHILDREN = new ErrorCode(1_002_011_002, "无法删除,该短信渠道还有短信模板"); + + // ========== 短信模板 1-002-012-000 ========== + ErrorCode SMS_TEMPLATE_NOT_EXISTS = new ErrorCode(1_002_012_000, "短信模板不存在"); + ErrorCode SMS_TEMPLATE_CODE_DUPLICATE = new ErrorCode(1_002_012_001, "已经存在编码为【{}】的短信模板"); + ErrorCode SMS_TEMPLATE_API_ERROR = new ErrorCode(1_002_012_002, "短信 API 模板调用失败,原因是:{}"); + ErrorCode SMS_TEMPLATE_API_AUDIT_CHECKING = new ErrorCode(1_002_012_003, "短信 API 模版无法使用,原因:审批中"); + ErrorCode SMS_TEMPLATE_API_AUDIT_FAIL = new ErrorCode(1_002_012_004, "短信 API 模版无法使用,原因:审批不通过,{}"); + ErrorCode SMS_TEMPLATE_API_NOT_FOUND = new ErrorCode(1_002_012_005, "短信 API 模版无法使用,原因:模版不存在"); + + // ========== 短信发送 1-002-013-000 ========== + ErrorCode SMS_SEND_MOBILE_NOT_EXISTS = new ErrorCode(1_002_013_000, "手机号不存在"); + ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1_002_013_001, "模板参数({})缺失"); + ErrorCode SMS_SEND_TEMPLATE_NOT_EXISTS = new ErrorCode(1_002_013_002, "短信模板不存在"); + + // ========== 短信验证码 1-002-014-000 ========== + ErrorCode SMS_CODE_NOT_FOUND = new ErrorCode(1_002_014_000, "验证码不存在"); + ErrorCode SMS_CODE_EXPIRED = new ErrorCode(1_002_014_001, "验证码已过期"); + ErrorCode SMS_CODE_USED = new ErrorCode(1_002_014_002, "验证码已使用"); + ErrorCode SMS_CODE_NOT_CORRECT = new ErrorCode(1_002_014_003, "验证码不正确"); + ErrorCode SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY = new ErrorCode(1_002_014_004, "超过每日短信发送数量"); + ErrorCode SMS_CODE_SEND_TOO_FAST = new ErrorCode(1_002_014_005, "短信发送过于频繁"); + ErrorCode SMS_CODE_IS_EXISTS = new ErrorCode(1_002_014_006, "手机号已被使用"); + ErrorCode SMS_CODE_IS_UNUSED = new ErrorCode(1_002_014_007, "验证码未被使用"); + + // ========== 租户信息 1-002-015-000 ========== + ErrorCode TENANT_NOT_EXISTS = new ErrorCode(1_002_015_000, "租户不存在"); + ErrorCode TENANT_DISABLE = new ErrorCode(1_002_015_001, "名字为【{}】的租户已被禁用"); + ErrorCode TENANT_EXPIRE = new ErrorCode(1_002_015_002, "名字为【{}】的租户已过期"); + ErrorCode TENANT_CAN_NOT_UPDATE_SYSTEM = new ErrorCode(1_002_015_003, "系统租户不能进行修改、删除等操作!"); + ErrorCode TENANT_NAME_DUPLICATE = new ErrorCode(1_002_015_004, "名字为【{}】的租户已存在"); + ErrorCode TENANT_WEBSITE_DUPLICATE = new ErrorCode(1_002_015_005, "域名为【{}】的租户已存在"); + + // ========== 租户套餐 1-002-016-000 ========== + ErrorCode TENANT_PACKAGE_NOT_EXISTS = new ErrorCode(1_002_016_000, "租户套餐不存在"); + ErrorCode TENANT_PACKAGE_USED = new ErrorCode(1_002_016_001, "租户正在使用该套餐,请给租户重新设置套餐后再尝试删除"); + ErrorCode TENANT_PACKAGE_DISABLE = new ErrorCode(1_002_016_002, "名字为【{}】的租户套餐已被禁用"); + + // ========== 社交用户 1-002-018-000 ========== + ErrorCode SOCIAL_USER_AUTH_FAILURE = new ErrorCode(1_002_018_000, "社交授权失败,原因是:{}"); + ErrorCode SOCIAL_USER_NOT_FOUND = new ErrorCode(1_002_018_001, "社交授权失败,找不到对应的用户"); + + ErrorCode SOCIAL_CLIENT_WEIXIN_MINI_APP_PHONE_CODE_ERROR = new ErrorCode(1_002_018_200, "获得手机号失败"); + ErrorCode SOCIAL_CLIENT_NOT_EXISTS = new ErrorCode(1_002_018_201, "社交客户端不存在"); + ErrorCode SOCIAL_CLIENT_UNIQUE = new ErrorCode(1_002_018_202, "社交客户端已存在配置"); + + // ========== OAuth2 客户端 1-002-020-000 ========= + ErrorCode OAUTH2_CLIENT_NOT_EXISTS = new ErrorCode(1_002_020_000, "OAuth2 客户端不存在"); + ErrorCode OAUTH2_CLIENT_EXISTS = new ErrorCode(1_002_020_001, "OAuth2 客户端编号已存在"); + ErrorCode OAUTH2_CLIENT_DISABLE = new ErrorCode(1_002_020_002, "OAuth2 客户端已禁用"); + ErrorCode OAUTH2_CLIENT_AUTHORIZED_GRANT_TYPE_NOT_EXISTS = new ErrorCode(1_002_020_003, "不支持该授权类型"); + ErrorCode OAUTH2_CLIENT_SCOPE_OVER = new ErrorCode(1_002_020_004, "授权范围过大"); + ErrorCode OAUTH2_CLIENT_REDIRECT_URI_NOT_MATCH = new ErrorCode(1_002_020_005, "无效 redirect_uri: {}"); + ErrorCode OAUTH2_CLIENT_CLIENT_SECRET_ERROR = new ErrorCode(1_002_020_006, "无效 client_secret: {}"); + + // ========== OAuth2 授权 1-002-021-000 ========= + ErrorCode OAUTH2_GRANT_CLIENT_ID_MISMATCH = new ErrorCode(1_002_021_000, "client_id 不匹配"); + ErrorCode OAUTH2_GRANT_REDIRECT_URI_MISMATCH = new ErrorCode(1_002_021_001, "redirect_uri 不匹配"); + ErrorCode OAUTH2_GRANT_STATE_MISMATCH = new ErrorCode(1_002_021_002, "state 不匹配"); + ErrorCode OAUTH2_GRANT_CODE_NOT_EXISTS = new ErrorCode(1_002_021_003, "code 不存在"); + + // ========== OAuth2 授权 1-002-022-000 ========= + ErrorCode OAUTH2_CODE_NOT_EXISTS = new ErrorCode(1_002_022_000, "code 不存在"); + ErrorCode OAUTH2_CODE_EXPIRE = new ErrorCode(1_002_022_001, "code 已过期"); + + // ========== 邮箱账号 1-002-023-000 ========== + ErrorCode MAIL_ACCOUNT_NOT_EXISTS = new ErrorCode(1_002_023_000, "邮箱账号不存在"); + ErrorCode MAIL_ACCOUNT_RELATE_TEMPLATE_EXISTS = new ErrorCode(1_002_023_001, "无法删除,该邮箱账号还有邮件模板"); + + // ========== 邮件模版 1-002-024-000 ========== + ErrorCode MAIL_TEMPLATE_NOT_EXISTS = new ErrorCode(1_002_024_000, "邮件模版不存在"); + ErrorCode MAIL_TEMPLATE_CODE_EXISTS = new ErrorCode(1_002_024_001, "邮件模版 code({}) 已存在"); + + // ========== 邮件发送 1-002-025-000 ========== + ErrorCode MAIL_SEND_TEMPLATE_PARAM_MISS = new ErrorCode(1_002_025_000, "模板参数({})缺失"); + ErrorCode MAIL_SEND_MAIL_NOT_EXISTS = new ErrorCode(1_002_025_001, "邮箱不存在"); + + // ========== 站内信模版 1-002-026-000 ========== + ErrorCode NOTIFY_TEMPLATE_NOT_EXISTS = new ErrorCode(1_002_026_000, "站内信模版不存在"); + ErrorCode NOTIFY_TEMPLATE_CODE_DUPLICATE = new ErrorCode(1_002_026_001, "已经存在编码为【{}】的站内信模板"); + + // ========== 站内信模版 1-002-027-000 ========== + + // ========== 站内信发送 1-002-028-000 ========== + ErrorCode NOTIFY_SEND_TEMPLATE_PARAM_MISS = new ErrorCode(1_002_028_000, "模板参数({})缺失"); + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/LogRecordConstants.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/LogRecordConstants.java new file mode 100644 index 0000000..3309b2e --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/LogRecordConstants.java @@ -0,0 +1,33 @@ +package com.win.module.system.enums; + +/** + * System 操作日志枚举 + * 目的:统一管理,也减少 Service 里各种“复杂”字符串 + * + * @author 芋道源码 + */ +public interface LogRecordConstants { + + // ======================= SYSTEM_USER 用户 ======================= + + String SYSTEM_USER_TYPE = "SYSTEM 用户"; + String SYSTEM_USER_CREATE_SUB_TYPE = "创建用户"; + String SYSTEM_USER_CREATE_SUCCESS = "创建了用户【{{#user.nickname}}】"; + String SYSTEM_USER_UPDATE_SUB_TYPE = "更新用户"; + String SYSTEM_USER_UPDATE_SUCCESS = "更新了用户【{{#user.nickname}}】: {_DIFF{#updateReqVO}}"; + String SYSTEM_USER_DELETE_SUB_TYPE = "删除用户"; + String SYSTEM_USER_DELETE_SUCCESS = "删除了用户【{{#user.nickname}}】"; + String SYSTEM_USER_UPDATE_PASSWORD_SUB_TYPE = "重置用户密码"; + String SYSTEM_USER_UPDATE_PASSWORD_SUCCESS = "将用户【{{#user.nickname}}】的密码从【{{#user.password}}】重置为【{{#newPassword}}】"; + + // ======================= SYSTEM_ROLE 角色 ======================= + + String SYSTEM_ROLE_TYPE = "SYSTEM 角色"; + String SYSTEM_ROLE_CREATE_SUB_TYPE = "创建角色"; + String SYSTEM_ROLE_CREATE_SUCCESS = "创建了角色【{{#role.name}}】"; + String SYSTEM_ROLE_UPDATE_SUB_TYPE = "更新角色"; + String SYSTEM_ROLE_UPDATE_SUCCESS = "更新了角色【{{#role.name}}】: {_DIFF{#updateReqVO}}"; + String SYSTEM_ROLE_DELETE_SUB_TYPE = "删除角色"; + String SYSTEM_ROLE_DELETE_SUCCESS = "删除了角色【{{#role.name}}】"; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/common/SexEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/common/SexEnum.java new file mode 100644 index 0000000..b5e5fae --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/common/SexEnum.java @@ -0,0 +1,27 @@ +package com.win.module.system.enums.common; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 性别的枚举值 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum SexEnum { + + /** 男 */ + MALE(1), + /** 女 */ + FEMALE(2), + /* 未知 */ + UNKNOWN(3); + + /** + * 性别 + */ + private final Integer sex; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/logger/LoginLogTypeEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/logger/LoginLogTypeEnum.java new file mode 100644 index 0000000..cd041ef --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/logger/LoginLogTypeEnum.java @@ -0,0 +1,27 @@ +package com.win.module.system.enums.logger; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 登录日志的类型枚举 + */ +@Getter +@AllArgsConstructor +public enum LoginLogTypeEnum { + + LOGIN_USERNAME(100), // 使用账号登录 + LOGIN_SOCIAL(101), // 使用社交登录 + LOGIN_MOBILE(103), // 使用手机登陆 + LOGIN_SMS(104), // 使用短信登陆 + + LOGOUT_SELF(200), // 自己主动登出 + LOGOUT_DELETE(202), // 强制退出 + ; + + /** + * 日志类型 + */ + private final Integer type; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/logger/LoginResultEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/logger/LoginResultEnum.java new file mode 100644 index 0000000..8248e4d --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/logger/LoginResultEnum.java @@ -0,0 +1,26 @@ +package com.win.module.system.enums.logger; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 登录结果的枚举类 + */ +@Getter +@AllArgsConstructor +public enum LoginResultEnum { + + SUCCESS(0), // 成功 + BAD_CREDENTIALS(10), // 账号或密码不正确 + USER_DISABLED(20), // 用户被禁用 + CAPTCHA_NOT_FOUND(30), // 图片验证码不存在 + CAPTCHA_CODE_ERROR(31), // 图片验证码不正确 + + ; + + /** + * 结果 + */ + private final Integer result; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/mail/MailSendStatusEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/mail/MailSendStatusEnum.java new file mode 100644 index 0000000..8dad6a4 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/mail/MailSendStatusEnum.java @@ -0,0 +1,24 @@ +package com.win.module.system.enums.mail; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 邮件的发送状态枚举 + * + * @author wangjingyi + * @since 2022/4/10 13:39 + */ +@Getter +@AllArgsConstructor +public enum MailSendStatusEnum { + + INIT(0), // 初始化 + SUCCESS(10), // 发送成功 + FAILURE(20), // 发送失败 + IGNORE(30), // 忽略,即不发送 + ; + + private final int status; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/notice/NoticeTypeEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/notice/NoticeTypeEnum.java new file mode 100644 index 0000000..a320e2f --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/notice/NoticeTypeEnum.java @@ -0,0 +1,23 @@ +package com.win.module.system.enums.notice; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 通知类型 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum NoticeTypeEnum { + + NOTICE(1), + ANNOUNCEMENT(2); + + /** + * 类型 + */ + private final Integer type; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/notify/NotifyTemplateTypeEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/notify/NotifyTemplateTypeEnum.java new file mode 100644 index 0000000..50fcb96 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/notify/NotifyTemplateTypeEnum.java @@ -0,0 +1,26 @@ +package com.win.module.system.enums.notify; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 通知模板类型枚举 + * + * @author HUIHUI + */ +@Getter +@AllArgsConstructor +public enum NotifyTemplateTypeEnum { + + /** + * 系统消息 + */ + SYSTEM_MESSAGE(2), + /** + * 通知消息 + */ + NOTIFICATION_MESSAGE(1); + + private final Integer type; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/oauth2/OAuth2ClientConstants.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/oauth2/OAuth2ClientConstants.java new file mode 100644 index 0000000..64a4bc6 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/oauth2/OAuth2ClientConstants.java @@ -0,0 +1,12 @@ +package com.win.module.system.enums.oauth2; + +/** + * OAuth2.0 客户端的通用枚举 + * + * @author 芋道源码 + */ +public interface OAuth2ClientConstants { + + String CLIENT_ID_DEFAULT = "default"; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/oauth2/OAuth2GrantTypeEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/oauth2/OAuth2GrantTypeEnum.java new file mode 100644 index 0000000..aec62b8 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/oauth2/OAuth2GrantTypeEnum.java @@ -0,0 +1,29 @@ +package com.win.module.system.enums.oauth2; + +import cn.hutool.core.util.ArrayUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * OAuth2 授权类型(模式)的枚举 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum OAuth2GrantTypeEnum { + + PASSWORD("password"), // 密码模式 + AUTHORIZATION_CODE("authorization_code"), // 授权码模式 + IMPLICIT("implicit"), // 简化模式 + CLIENT_CREDENTIALS("client_credentials"), // 客户端模式 + REFRESH_TOKEN("refresh_token"), // 刷新模式 + ; + + private final String grantType; + + public static OAuth2GrantTypeEnum getByGranType(String grantType) { + return ArrayUtil.firstMatch(o -> o.getGrantType().equals(grantType), values()); + } + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/DataScopeEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/DataScopeEnum.java new file mode 100644 index 0000000..cd4d1ad --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/DataScopeEnum.java @@ -0,0 +1,40 @@ +package com.win.module.system.enums.permission; + +import com.win.framework.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 数据范围枚举类 + * + * 用于实现数据级别的权限 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum DataScopeEnum implements IntArrayValuable { + + ALL(1), // 全部数据权限 + + DEPT_CUSTOM(2), // 指定部门数据权限 + DEPT_ONLY(3), // 部门数据权限 + DEPT_AND_CHILD(4), // 部门及以下数据权限 + + SELF(5); // 仅本人数据权限 + + /** + * 范围 + */ + private final Integer scope; + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(DataScopeEnum::getScope).toArray(); + + @Override + public int[] array() { + return ARRAYS; + } + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/MenuTypeEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/MenuTypeEnum.java new file mode 100644 index 0000000..e812c94 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/MenuTypeEnum.java @@ -0,0 +1,25 @@ +package com.win.module.system.enums.permission; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 菜单类型枚举类 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum MenuTypeEnum { + + DIR(1), // 目录 + MENU(2), // 菜单 + BUTTON(3) // 按钮 + ; + + /** + * 类型 + */ + private final Integer type; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/RoleCodeEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/RoleCodeEnum.java new file mode 100644 index 0000000..7870cb0 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/RoleCodeEnum.java @@ -0,0 +1,32 @@ +package com.win.module.system.enums.permission; + +import com.win.framework.common.util.object.ObjectUtils; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 角色标识枚举 + */ +@Getter +@AllArgsConstructor +public enum RoleCodeEnum { + + SUPER_ADMIN("super_admin", "超级管理员"), + TENANT_ADMIN("tenant_admin", "租户管理员"), + CRM_ADMIN("crm_admin", "CRM 管理员"); // CRM 系统专用 + ; + + /** + * 角色编码 + */ + private final String code; + /** + * 名字 + */ + private final String name; + + public static boolean isSuperAdmin(String code) { + return ObjectUtils.equalsAny(code, SUPER_ADMIN.getCode()); + } + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/RoleTypeEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/RoleTypeEnum.java new file mode 100644 index 0000000..9636cf7 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/permission/RoleTypeEnum.java @@ -0,0 +1,21 @@ +package com.win.module.system.enums.permission; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum RoleTypeEnum { + + /** + * 内置角色 + */ + SYSTEM(1), + /** + * 自定义角色 + */ + CUSTOM(2); + + private final Integer type; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsReceiveStatusEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsReceiveStatusEnum.java new file mode 100644 index 0000000..ab00f97 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsReceiveStatusEnum.java @@ -0,0 +1,23 @@ +package com.win.module.system.enums.sms; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 短信的接收状态枚举 + * + * @author 芋道源码 + * @date 2021/2/1 13:39 + */ +@Getter +@AllArgsConstructor +public enum SmsReceiveStatusEnum { + + INIT(0), // 初始化 + SUCCESS(10), // 接收成功 + FAILURE(20), // 接收失败 + ; + + private final int status; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsSceneEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsSceneEnum.java new file mode 100644 index 0000000..d8a2e1d --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsSceneEnum.java @@ -0,0 +1,51 @@ +package com.win.module.system.enums.sms; + +import cn.hutool.core.util.ArrayUtil; +import com.win.framework.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 用户短信验证码发送场景的枚举 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum SmsSceneEnum implements IntArrayValuable { + + MEMBER_LOGIN(1, "user-sms-login", "会员用户 - 手机号登陆"), + MEMBER_UPDATE_MOBILE(2, "user-update-mobile", "会员用户 - 修改手机"), + MEMBER_UPDATE_PASSWORD(3, "user-update-password", "会员用户 - 修改密码"), + MEMBER_RESET_PASSWORD(4, "user-reset-password", "会员用户 - 忘记密码"), + + ADMIN_MEMBER_LOGIN(21, "admin-sms-login", "后台用户 - 手机号登录"); + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SmsSceneEnum::getScene).toArray(); + + /** + * 验证场景的编号 + */ + private final Integer scene; + /** + * 模版编码 + */ + private final String templateCode; + /** + * 描述 + */ + private final String description; + + @Override + public int[] array() { + return ARRAYS; + } + + public static SmsSceneEnum getCodeByScene(Integer scene) { + return ArrayUtil.firstMatch(sceneEnum -> sceneEnum.getScene().equals(scene), + values()); + } + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsSendStatusEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsSendStatusEnum.java new file mode 100644 index 0000000..d09c6c2 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsSendStatusEnum.java @@ -0,0 +1,24 @@ +package com.win.module.system.enums.sms; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 短信的发送状态枚举 + * + * @author zzf + * @date 2021/2/1 13:39 + */ +@Getter +@AllArgsConstructor +public enum SmsSendStatusEnum { + + INIT(0), // 初始化 + SUCCESS(10), // 发送成功 + FAILURE(20), // 发送失败 + IGNORE(30), // 忽略,即不发送 + ; + + private final int status; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsTemplateTypeEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsTemplateTypeEnum.java new file mode 100644 index 0000000..c0d6554 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/sms/SmsTemplateTypeEnum.java @@ -0,0 +1,25 @@ +package com.win.module.system.enums.sms; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 短信的模板类型枚举 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum SmsTemplateTypeEnum { + + VERIFICATION_CODE(1), // 验证码 + NOTICE(2), // 通知 + PROMOTION(3), // 营销 + ; + + /** + * 类型 + */ + private final int type; + +} diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/social/SocialTypeEnum.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/social/SocialTypeEnum.java new file mode 100644 index 0000000..f0600a9 --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/social/SocialTypeEnum.java @@ -0,0 +1,78 @@ +package com.win.module.system.enums.social; + +import cn.hutool.core.util.ArrayUtil; +import com.win.framework.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 社交平台的类型枚举 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum SocialTypeEnum implements IntArrayValuable { + + /** + * Gitee + * + * @see 接入文档 + */ + GITEE(10, "GITEE"), + /** + * 钉钉 + * + * @see 接入文档 + */ + DINGTALK(20, "DINGTALK"), + + /** + * 企业微信 + * + * @see 接入文档 + */ + WECHAT_ENTERPRISE(30, "WECHAT_ENTERPRISE"), + /** + * 微信公众平台 - 移动端 H5 + * + * @see 接入文档 + */ + WECHAT_MP(31, "WECHAT_MP"), + /** + * 微信开放平台 - 网站应用 PC 端扫码授权登录 + * + * @see 接入文档 + */ + WECHAT_OPEN(32, "WECHAT_OPEN"), + /** + * 微信小程序 + * + * @see 接入文档 + */ + WECHAT_MINI_APP(34, "WECHAT_MINI_APP"), + ; + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SocialTypeEnum::getType).toArray(); + + /** + * 类型 + */ + private final Integer type; + /** + * 类型的标识 + */ + private final String source; + + @Override + public int[] array() { + return ARRAYS; + } + + public static SocialTypeEnum valueOfType(Integer type) { + return ArrayUtil.firstMatch(o -> o.getType().equals(type), values()); + } + +} diff --git a/win-module-system/win-module-system-biz/Dockerfile b/win-module-system/win-module-system-biz/Dockerfile new file mode 100644 index 0000000..62248be --- /dev/null +++ b/win-module-system/win-module-system-biz/Dockerfile @@ -0,0 +1,19 @@ +## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性 +## 感谢复旦核博士的建议!灰子哥,牛皮! +FROM eclipse-temurin:21-jre + +## 创建目录,并使用它作为工作目录 +RUN mkdir -p /win-module-system-biz +WORKDIR /win-module-system-biz +## 将后端项目的 Jar 文件,复制到镜像中 +COPY ./target/win-module-system-biz.jar app.jar + +## 设置 TZ 时区 +## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖 +ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m" + +## 暴露后端项目的 48080 端口 +EXPOSE 48081 + +## 启动后端项目 +CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar diff --git a/win-module-system/win-module-system-biz/pom.xml b/win-module-system/win-module-system-biz/pom.xml new file mode 100644 index 0000000..02012ae --- /dev/null +++ b/win-module-system/win-module-system-biz/pom.xml @@ -0,0 +1,191 @@ + + + + com.win + win-module-system + ${revision} + + 4.0.0 + win-module-system-biz + jar + + ${project.artifactId} + + system 模块下,我们放通用业务,支撑上层的核心业务。 + 例如说:用户、部门、权限、数据字典等等 + + + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + com.win + win-spring-boot-starter-env + + + + + com.win + win-module-system-api + ${revision} + + + com.win + win-module-infra-api + ${revision} + + + + + com.win + win-spring-boot-starter-biz-data-permission + + + com.win + win-spring-boot-starter-biz-tenant + + + com.win + win-spring-boot-starter-biz-ip + + + + + com.win + win-spring-boot-starter-security + + + + + com.win + win-spring-boot-starter-mybatis + + + + com.win + win-spring-boot-starter-redis + + + + + com.win + win-spring-boot-starter-rpc + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.win + win-spring-boot-starter-job + + + + + com.win + win-spring-boot-starter-mq + + + + + + + + + + + com.win + win-spring-boot-starter-excel + + + + org.springframework.boot + spring-boot-starter-mail + + + + + com.win + win-spring-boot-starter-monitor + + + + + com.xingyuv + spring-boot-starter-justauth + + + + com.github.binarywang + wx-java-mp-spring-boot-starter + + + com.github.binarywang + wx-java-miniapp-spring-boot-starter + + + + com.aliyun + aliyun-java-sdk-core + + + com.aliyun + aliyun-java-sdk-dysmsapi + + + com.tencentcloudapi + tencentcloud-sdk-java-sms + + + + com.xingyuv + spring-boot-starter-captcha-plus + + + + org.dromara.hutool + hutool-extra + + + org.postgresql + postgresql + + + + + + ${project.artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + + + repackage + + + + + + + + diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/SystemServerApplication.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/SystemServerApplication.java new file mode 100644 index 0000000..ea2f316 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/SystemServerApplication.java @@ -0,0 +1,30 @@ +package com.win.module.system; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 项目的启动类 + * + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * + * @author 芋道源码 + */ +@SpringBootApplication +public class SystemServerApplication { + + public static void main(String[] args) { + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到 启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + + SpringApplication.run(SystemServerApplication.class, args); + + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/dept/DeptApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/dept/DeptApiImpl.java new file mode 100644 index 0000000..e3ff13b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/dept/DeptApiImpl.java @@ -0,0 +1,49 @@ +package com.win.module.system.api.dept; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.api.dept.dto.DeptRespDTO; +import com.win.module.system.dal.dataobject.dept.DeptDO; +import com.win.module.system.service.dept.DeptService; +import org.springframework.context.annotation.Bean; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import java.util.Collection; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class DeptApiImpl implements DeptApi { + + @Resource + private DeptService deptService; + + @Override + public CommonResult getDept(Long id) { + DeptDO dept = deptService.getDept(id); + return success(BeanUtils.toBean(dept, DeptRespDTO.class)); + } + + @Override + public CommonResult> getDeptList(Collection ids) { + List depts = deptService.getDeptList(ids); + return success(BeanUtils.toBean(depts, DeptRespDTO.class)); + } + + @Override + public CommonResult validateDeptList(Collection ids) { + deptService.validateDeptList(ids); + return success(true); + } + + @Override + public CommonResult> getChildDeptList(Long id) { + List depts = deptService.getChildDeptList(id); + return success(BeanUtils.toBean(depts, DeptRespDTO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/dept/PostApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/dept/PostApiImpl.java new file mode 100644 index 0000000..9ae3246 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/dept/PostApiImpl.java @@ -0,0 +1,36 @@ +package com.win.module.system.api.dept; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.api.dept.dto.PostRespDTO; +import com.win.module.system.dal.dataobject.dept.PostDO; +import com.win.module.system.service.dept.PostService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import java.util.Collection; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class PostApiImpl implements PostApi { + + @Resource + private PostService postService; + + @Override + public CommonResult validPostList(Collection ids) { + postService.validatePostList(ids); + return success(true); + } + + @Override + public CommonResult> getPostList(Collection ids) { + List list = postService.getPostList(ids); + return success(BeanUtils.toBean(list, PostRespDTO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/dict/DictDataApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/dict/DictDataApiImpl.java new file mode 100644 index 0000000..12a935d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/dict/DictDataApiImpl.java @@ -0,0 +1,48 @@ +package com.win.module.system.api.dict; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.api.dict.dto.DictDataRespDTO; +import com.win.module.system.dal.dataobject.dict.DictDataDO; +import com.win.module.system.service.dict.DictDataService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import java.util.Collection; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class DictDataApiImpl implements DictDataApi { + + @Resource + private DictDataService dictDataService; + + @Override + public CommonResult validateDictDataList(String dictType, Collection values) { + dictDataService.validateDictDataList(dictType, values); + return success(true); + } + + @Override + public CommonResult getDictData(String dictType, String value) { + DictDataDO dictData = dictDataService.getDictData(dictType, value); + return success(BeanUtils.toBean(dictData, DictDataRespDTO.class)); + } + + @Override + public CommonResult parseDictData(String dictType, String label) { + DictDataDO dictData = dictDataService.parseDictData(dictType, label); + return success(BeanUtils.toBean(dictData, DictDataRespDTO.class)); + } + + @Override + public CommonResult> getDictDataList(String dictType) { + List list = dictDataService.getDictDataListByDictType(dictType); + return success(BeanUtils.toBean(list, DictDataRespDTO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/logger/LoginLogApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/logger/LoginLogApiImpl.java new file mode 100644 index 0000000..a652e7e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/logger/LoginLogApiImpl.java @@ -0,0 +1,26 @@ +package com.win.module.system.api.logger; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.logger.dto.LoginLogCreateReqDTO; +import com.win.module.system.service.logger.LoginLogService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class LoginLogApiImpl implements LoginLogApi { + + @Resource + private LoginLogService loginLogService; + + @Override + public CommonResult createLoginLog(LoginLogCreateReqDTO reqDTO) { + loginLogService.createLoginLog(reqDTO); + return success(true); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/logger/OperateLogApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/logger/OperateLogApiImpl.java new file mode 100644 index 0000000..7077576 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/logger/OperateLogApiImpl.java @@ -0,0 +1,36 @@ +package com.win.module.system.api.logger; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.api.logger.dto.OperateLogCreateReqDTO; +import com.win.module.system.api.logger.dto.OperateLogPageReqDTO; +import com.win.module.system.api.logger.dto.OperateLogRespDTO; +import com.win.module.system.dal.dataobject.logger.OperateLogDO; +import com.win.module.system.service.logger.OperateLogService; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class OperateLogApiImpl implements OperateLogApi { + + @Resource + private OperateLogService operateLogService; + + @Override + public CommonResult createOperateLog(OperateLogCreateReqDTO createReqDTO) { + operateLogService.createOperateLog(createReqDTO); + return success(true); + } + + @Override + public CommonResult> getOperateLogPage(OperateLogPageReqDTO pageReqVO) { + PageResult operateLogPage = operateLogService.getOperateLogPage(pageReqVO); + return success(BeanUtils.toBean(operateLogPage, OperateLogRespDTO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/mail/MailSendApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/mail/MailSendApiImpl.java new file mode 100644 index 0000000..d0ed968 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/mail/MailSendApiImpl.java @@ -0,0 +1,32 @@ +package com.win.module.system.api.mail; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.mail.dto.MailSendSingleToUserReqDTO; +import com.win.module.system.service.mail.MailSendService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class MailSendApiImpl implements MailSendApi { + + @Resource + private MailSendService mailSendService; + + @Override + public CommonResult sendSingleMailToAdmin(MailSendSingleToUserReqDTO reqDTO) { + return success(mailSendService.sendSingleMailToAdmin(reqDTO.getMail(), reqDTO.getUserId(), + reqDTO.getTemplateCode(), reqDTO.getTemplateParams())); + } + + @Override + public CommonResult sendSingleMailToMember(MailSendSingleToUserReqDTO reqDTO) { + return success(mailSendService.sendSingleMailToMember(reqDTO.getMail(), reqDTO.getUserId(), + reqDTO.getTemplateCode(), reqDTO.getTemplateParams())); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/notify/NotifyMessageSendApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/notify/NotifyMessageSendApiImpl.java new file mode 100644 index 0000000..1c8ccdf --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/notify/NotifyMessageSendApiImpl.java @@ -0,0 +1,32 @@ +package com.win.module.system.api.notify; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.notify.dto.NotifySendSingleToUserReqDTO; +import com.win.module.system.service.notify.NotifySendService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class NotifyMessageSendApiImpl implements NotifyMessageSendApi { + + @Resource + private NotifySendService notifySendService; + + @Override + public CommonResult sendSingleMessageToAdmin(NotifySendSingleToUserReqDTO reqDTO) { + return success(notifySendService.sendSingleNotifyToAdmin(reqDTO.getUserId(), + reqDTO.getTemplateCode(), reqDTO.getTemplateParams())); + } + + @Override + public CommonResult sendSingleMessageToMember(NotifySendSingleToUserReqDTO reqDTO) { + return success(notifySendService.sendSingleNotifyToMember(reqDTO.getUserId(), + reqDTO.getTemplateCode(), reqDTO.getTemplateParams())); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/oauth2/OAuth2TokenApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/oauth2/OAuth2TokenApiImpl.java new file mode 100644 index 0000000..ff84ac5 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/oauth2/OAuth2TokenApiImpl.java @@ -0,0 +1,51 @@ +package com.win.module.system.api.oauth2; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.api.oauth2.dto.OAuth2AccessTokenCheckRespDTO; +import com.win.module.system.api.oauth2.dto.OAuth2AccessTokenCreateReqDTO; +import com.win.module.system.api.oauth2.dto.OAuth2AccessTokenRespDTO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; +import com.win.module.system.service.oauth2.OAuth2TokenService; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class OAuth2TokenApiImpl implements OAuth2TokenApi { + + @Resource + private OAuth2TokenService oauth2TokenService; + + @Override + @Operation(description = "创建访问令牌") + public CommonResult createAccessToken(OAuth2AccessTokenCreateReqDTO reqDTO) { + OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.createAccessToken( + reqDTO.getUserId(), reqDTO.getUserType(), reqDTO.getClientId(), reqDTO.getScopes()); + return success(BeanUtils.toBean(accessTokenDO, OAuth2AccessTokenRespDTO.class)); + } + + @Override + public CommonResult checkAccessToken(String accessToken) { + OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.checkAccessToken(accessToken); + return success(BeanUtils.toBean(accessTokenDO, OAuth2AccessTokenCheckRespDTO.class)); + } + + @Override + public CommonResult removeAccessToken(String accessToken) { + OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.removeAccessToken(accessToken); + return success(BeanUtils.toBean(accessTokenDO, OAuth2AccessTokenRespDTO.class)); + } + + @Override + public CommonResult refreshAccessToken(String refreshToken, String clientId) { + OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.refreshAccessToken(refreshToken, clientId); + return success(BeanUtils.toBean(accessTokenDO, OAuth2AccessTokenRespDTO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/permission/PermissionApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/permission/PermissionApiImpl.java new file mode 100644 index 0000000..f9b041c --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/permission/PermissionApiImpl.java @@ -0,0 +1,42 @@ +package com.win.module.system.api.permission; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.permission.dto.DeptDataPermissionRespDTO; +import com.win.module.system.service.permission.PermissionService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import java.util.Collection; +import java.util.Set; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class PermissionApiImpl implements PermissionApi { + + @Resource + private PermissionService permissionService; + + @Override + public CommonResult> getUserRoleIdListByRoleIds(Collection roleIds) { + return success(permissionService.getUserRoleIdListByRoleId(roleIds)); + } + + @Override + public CommonResult hasAnyPermissions(Long userId, String... permissions) { + return success(permissionService.hasAnyPermissions(userId, permissions)); + } + + @Override + public CommonResult hasAnyRoles(Long userId, String... roles) { + return success(permissionService.hasAnyRoles(userId, roles)); + } + + @Override + public CommonResult getDeptDataPermission(Long userId) { + return success(permissionService.getDeptDataPermission(userId)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/permission/RoleApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/permission/RoleApiImpl.java new file mode 100644 index 0000000..e7690d1 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/permission/RoleApiImpl.java @@ -0,0 +1,25 @@ +package com.win.module.system.api.permission; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.service.permission.RoleService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import java.util.Collection; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class RoleApiImpl implements RoleApi { + + @Resource + private RoleService roleService; + + @Override + public CommonResult validRoleList(Collection ids) { + roleService.validateRoleList(ids); + return success(true); + } +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/sms/SmsCodeApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/sms/SmsCodeApiImpl.java new file mode 100644 index 0000000..1df0c12 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/sms/SmsCodeApiImpl.java @@ -0,0 +1,40 @@ +package com.win.module.system.api.sms; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.sms.dto.code.SmsCodeSendReqDTO; +import com.win.module.system.api.sms.dto.code.SmsCodeUseReqDTO; +import com.win.module.system.api.sms.dto.code.SmsCodeValidateReqDTO; +import com.win.module.system.service.sms.SmsCodeService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class SmsCodeApiImpl implements SmsCodeApi { + + @Resource + private SmsCodeService smsCodeService; + + @Override + public CommonResult sendSmsCode(SmsCodeSendReqDTO reqDTO) { + smsCodeService.sendSmsCode(reqDTO); + return success(true); + } + + @Override + public CommonResult useSmsCode(SmsCodeUseReqDTO reqDTO) { + smsCodeService.useSmsCode(reqDTO); + return success(true); + } + + @Override + public CommonResult validateSmsCode(SmsCodeValidateReqDTO reqDTO) { + smsCodeService.validateSmsCode(reqDTO); + return success(true); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/sms/SmsSendApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/sms/SmsSendApiImpl.java new file mode 100644 index 0000000..a18c22a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/sms/SmsSendApiImpl.java @@ -0,0 +1,32 @@ +package com.win.module.system.api.sms; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.sms.dto.send.SmsSendSingleToUserReqDTO; +import com.win.module.system.service.sms.SmsSendService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class SmsSendApiImpl implements SmsSendApi { + + @Resource + private SmsSendService smsSendService; + + @Override + public CommonResult sendSingleSmsToAdmin(SmsSendSingleToUserReqDTO reqDTO) { + return success(smsSendService.sendSingleSmsToAdmin(reqDTO.getMobile(), reqDTO.getUserId(), + reqDTO.getTemplateCode(), reqDTO.getTemplateParams())); + } + + @Override + public CommonResult sendSingleSmsToMember(SmsSendSingleToUserReqDTO reqDTO) { + return success(smsSendService.sendSingleSmsToMember(reqDTO.getMobile(), reqDTO.getUserId(), + reqDTO.getTemplateCode(), reqDTO.getTemplateParams())); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/social/SocialClientApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/social/SocialClientApiImpl.java new file mode 100644 index 0000000..b16d82c --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/social/SocialClientApiImpl.java @@ -0,0 +1,46 @@ +package com.win.module.system.api.social; + +import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.api.social.dto.SocialWxJsapiSignatureRespDTO; +import com.win.module.system.api.social.dto.SocialWxPhoneNumberInfoRespDTO; +import com.win.module.system.service.social.SocialClientService; +import me.chanjar.weixin.common.bean.WxJsapiSignature; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.pojo.CommonResult.success; + +/** + * 社交应用的 API 实现类 + * + * @author 芋道源码 + */ +@RestController +@Validated +public class SocialClientApiImpl implements SocialClientApi { + + @Resource + private SocialClientService socialClientService; + + @Override + public CommonResult getAuthorizeUrl(Integer socialType, Integer userType, String redirectUri) { + return success(socialClientService.getAuthorizeUrl(socialType, userType, redirectUri)); + } + + @Override + public CommonResult createWxMpJsapiSignature(Integer userType, String url) { + WxJsapiSignature signature = socialClientService.createWxMpJsapiSignature(userType, url); + return success(BeanUtils.toBean(signature, SocialWxJsapiSignatureRespDTO.class)); + } + + @Override + public CommonResult getWxMaPhoneNumberInfo(Integer userType, String phoneCode) { + WxMaPhoneNumberInfo info = socialClientService.getWxMaPhoneNumberInfo(userType, phoneCode); + return success(BeanUtils.toBean(info, SocialWxPhoneNumberInfoRespDTO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/social/SocialUserApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/social/SocialUserApiImpl.java new file mode 100644 index 0000000..a058a14 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/social/SocialUserApiImpl.java @@ -0,0 +1,44 @@ +package com.win.module.system.api.social; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.api.social.dto.SocialUserBindReqDTO; +import com.win.module.system.api.social.dto.SocialUserRespDTO; +import com.win.module.system.api.social.dto.SocialUserUnbindReqDTO; +import com.win.module.system.service.social.SocialUserService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class SocialUserApiImpl implements SocialUserApi { + + @Resource + private SocialUserService socialUserService; + + @Override + public CommonResult bindSocialUser(SocialUserBindReqDTO reqDTO) { + return success(socialUserService.bindSocialUser(reqDTO)); + } + + @Override + public CommonResult unbindSocialUser(SocialUserUnbindReqDTO reqDTO) { + socialUserService.unbindSocialUser(reqDTO.getUserId(), reqDTO.getUserType(), + reqDTO.getSocialType(), reqDTO.getOpenid()); + return success(true); + } + + @Override + public CommonResult getSocialUserByUserId(Integer userType, Long userId, Integer socialType) { + return success(socialUserService.getSocialUserByUserId(userType, userId, socialType)); + } + + @Override + public CommonResult getSocialUserByCode(Integer userType, Integer socialType, String code, String state) { + return success(socialUserService.getSocialUserByCode(userType, socialType, code, state)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/tenant/TenantApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/tenant/TenantApiImpl.java new file mode 100644 index 0000000..0f8a8a8 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/tenant/TenantApiImpl.java @@ -0,0 +1,31 @@ +package com.win.module.system.api.tenant; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.service.tenant.TenantService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class TenantApiImpl implements TenantApi { + + @Resource + private TenantService tenantService; + + @Override + public CommonResult> getTenantIdList() { + return success(tenantService.getTenantIdList()); + } + + @Override + public CommonResult validTenant(Long id) { + tenantService.validTenant(id); + return success(true); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/user/AdminUserApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/user/AdminUserApiImpl.java new file mode 100644 index 0000000..f0f786e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/user/AdminUserApiImpl.java @@ -0,0 +1,89 @@ +package com.win.module.system.api.user; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.api.user.dto.AdminUserRespDTO; +import com.win.module.system.dal.dataobject.dept.DeptDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.module.system.service.dept.DeptService; +import com.win.module.system.service.user.AdminUserService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; + +import java.util.*; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class AdminUserApiImpl implements AdminUserApi { + + @Resource + private AdminUserService userService; + @Resource + private DeptService deptService; + + @Override + public CommonResult getUser(Long id) { + AdminUserDO user = userService.getUser(id); + return success(BeanUtils.toBean(user, AdminUserRespDTO.class)); + } + + @Override + public CommonResult> getUserListBySubordinate(Long id) { + // 1.1 获取用户负责的部门 + AdminUserDO user = userService.getUser(id); + if (user == null) { + return success(Collections.emptyList()); + } + ArrayList deptIds = new ArrayList<>(); + DeptDO dept = deptService.getDept(user.getDeptId()); + if (dept == null) { + return success(Collections.emptyList()); + } + if (ObjUtil.notEqual(dept.getLeaderUserId(), id)) { // 校验为负责人 + return success(Collections.emptyList()); + } + deptIds.add(dept.getId()); + // 1.2 获取所有子部门 + List childDeptList = deptService.getChildDeptList(dept.getId()); + if (CollUtil.isNotEmpty(childDeptList)) { + deptIds.addAll(convertSet(childDeptList, DeptDO::getId)); + } + + // 2. 获取部门对应的用户信息 + List users = userService.getUserListByDeptIds(deptIds); + users.removeIf(item -> ObjUtil.equal(item.getId(), id)); // 排除自己 + return success(BeanUtils.toBean(users, AdminUserRespDTO.class)); + } + + @Override + public CommonResult> getUserList(Collection ids) { + List users = userService.getUserList(ids); + return success(BeanUtils.toBean(users, AdminUserRespDTO.class)); + } + + @Override + public CommonResult> getUserListByDeptIds(Collection deptIds) { + List users = userService.getUserListByDeptIds(deptIds); + return success(BeanUtils.toBean(users, AdminUserRespDTO.class)); + } + + @Override + public CommonResult> getUserListByPostIds(Collection postIds) { + List users = userService.getUserListByPostIds(postIds); + return success(BeanUtils.toBean(users, AdminUserRespDTO.class)); + } + + @Override + public CommonResult validateUserList(Collection ids) { + userService.validateUserList(ids); + return success(true); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/AuthController.http b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/AuthController.http new file mode 100644 index 0000000..00ae2ba --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/AuthController.http @@ -0,0 +1,33 @@ +### 请求 /login 接口 => 成功 +POST {{baseUrl}}/system/auth/login +Content-Type: application/json +tenant-id: {{adminTenentId}} +tag: Yunai.local + +{ + "username": "admin", + "password": "admin123", + "uuid": "3acd87a09a4f48fb9118333780e94883", + "code": "1024" +} + +### 请求 /login 接口 => 成功(无验证码) +POST {{baseUrl}}/system/auth/login +Content-Type: application/json +tenant-id: {{adminTenentId}} + +{ + "username": "admin", + "password": "admin123" +} + +### 请求 /get-permission-info 接口 => 成功 +GET {{baseUrl}}/system/auth/get-permission-info +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} + +### 请求 /list-menus 接口 => 成功 +GET {{baseUrl}}/system/list-menus +Authorization: Bearer {{token}} +#Authorization: Bearer a6aa7714a2e44c95aaa8a2c5adc2a67a +tenant-id: {{adminTenentId}} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/AuthController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/AuthController.java new file mode 100644 index 0000000..5cbba87 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/AuthController.java @@ -0,0 +1,157 @@ +package com.win.module.system.controller.admin.auth; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.security.config.SecurityProperties; +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import com.win.module.system.controller.admin.auth.vo.*; +import com.win.module.system.convert.auth.AuthConvert; +import com.win.module.system.dal.dataobject.permission.MenuDO; +import com.win.module.system.dal.dataobject.permission.RoleDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.module.system.enums.logger.LoginLogTypeEnum; +import com.win.module.system.service.auth.AdminAuthService; +import com.win.module.system.service.permission.MenuService; +import com.win.module.system.service.permission.PermissionService; +import com.win.module.system.service.permission.RoleService; +import com.win.module.system.service.social.SocialClientService; +import com.win.module.system.service.user.AdminUserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +@Tag(name = "管理后台 - 认证") +@RestController +@RequestMapping("/system/auth") +@Validated +@Slf4j +public class AuthController { + + @Resource + private AdminAuthService authService; + @Resource + private AdminUserService userService; + @Resource + private RoleService roleService; + @Resource + private MenuService menuService; + @Resource + private PermissionService permissionService; + @Resource + private SocialClientService socialClientService; + + @Resource + private SecurityProperties securityProperties; + + @PostMapping("/login") + @PermitAll + @Operation(summary = "使用账号密码登录") + public CommonResult login(@RequestBody @Valid AuthLoginReqVO reqVO) { + return success(authService.login(reqVO)); + } + + @PostMapping("/logout") + @PermitAll + @Operation(summary = "登出系统") + public CommonResult logout(HttpServletRequest request) { + String token = SecurityFrameworkUtils.obtainAuthorization(request, + securityProperties.getTokenHeader(), securityProperties.getTokenParameter()); + if (StrUtil.isNotBlank(token)) { + authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType()); + } + return success(true); + } + + @PostMapping("/refresh-token") + @PermitAll + @Operation(summary = "刷新令牌") + @Parameter(name = "refreshToken", description = "刷新令牌", required = true) + public CommonResult refreshToken(@RequestParam("refreshToken") String refreshToken) { + return success(authService.refreshToken(refreshToken)); + } + + @GetMapping("/get-permission-info") + @Operation(summary = "获取登录用户的权限信息") + public CommonResult getPermissionInfo() { + // 1.1 获得用户信息 + AdminUserDO user = userService.getUser(getLoginUserId()); + if (user == null) { + return success(null); + } + + // 1.2 获得角色列表 + Set roleIds = permissionService.getUserRoleIdListByUserId(getLoginUserId()); + if (CollUtil.isEmpty(roleIds)) { + return success(AuthConvert.INSTANCE.convert(user, Collections.emptyList(), Collections.emptyList())); + } + List roles = roleService.getRoleList(roleIds); + roles.removeIf(role -> !CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())); // 移除禁用的角色 + + // 1.3 获得菜单列表 + Set menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId)); + List menuList = menuService.getMenuList(menuIds); + menuList.removeIf(menu -> !CommonStatusEnum.ENABLE.getStatus().equals(menu.getStatus())); // 移除禁用的菜单 + + // 2. 拼接结果返回 + return success(AuthConvert.INSTANCE.convert(user, roles, menuList)); + } + + // ========== 短信登录相关 ========== + + @PostMapping("/sms-login") + @PermitAll + @Operation(summary = "使用短信验证码登录") + public CommonResult smsLogin(@RequestBody @Valid AuthSmsLoginReqVO reqVO) { + return success(authService.smsLogin(reqVO)); + } + + @PostMapping("/send-sms-code") + @PermitAll + @Operation(summary = "发送手机验证码") + public CommonResult sendLoginSmsCode(@RequestBody @Valid AuthSmsSendReqVO reqVO) { + authService.sendSmsCode(reqVO); + return success(true); + } + + // ========== 社交登录相关 ========== + + @GetMapping("/social-auth-redirect") + @PermitAll + @Operation(summary = "社交授权的跳转") + @Parameters({ + @Parameter(name = "type", description = "社交类型", required = true), + @Parameter(name = "redirectUri", description = "回调路径") + }) + public CommonResult socialLogin(@RequestParam("type") Integer type, + @RequestParam("redirectUri") String redirectUri) { + return success(socialClientService.getAuthorizeUrl( + type, UserTypeEnum.ADMIN.getValue(), redirectUri)); + } + + @PostMapping("/social-login") + @PermitAll + @Operation(summary = "社交快捷登录,使用 code 授权码", description = "适合未登录的用户,但是社交账号已绑定用户") + public CommonResult socialQuickLogin(@RequestBody @Valid AuthSocialLoginReqVO reqVO) { + return success(authService.socialLogin(reqVO)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthLoginReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthLoginReqVO.java new file mode 100644 index 0000000..7262bbb --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthLoginReqVO.java @@ -0,0 +1,69 @@ +package com.win.module.system.controller.admin.auth.vo; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.validation.InEnum; +import com.win.module.system.enums.social.SocialTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import jakarta.validation.constraints.AssertTrue; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; + +@Schema(description = "管理后台 - 账号密码登录 Request VO,如果登录并绑定社交用户,需要传递 social 开头的参数") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AuthLoginReqVO { + + @Schema(description = "账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "winyuanma") + @NotEmpty(message = "登录账号不能为空") + @Length(min = 4, max = 16, message = "账号长度为 4-16 位") + @Pattern(regexp = "^[A-Za-z0-9]+$", message = "账号格式为数字以及字母") + private String username; + + @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "buzhidao") + @NotEmpty(message = "密码不能为空") + @Length(min = 4, max = 16, message = "密码长度为 4-16 位") + private String password; + + // ========== 图片验证码相关 ========== + + @Schema(description = "验证码,验证码开启时,需要传递", requiredMode = Schema.RequiredMode.REQUIRED, + example = "PfcH6mgr8tpXuMWFjvW6YVaqrswIuwmWI5dsVZSg7sGpWtDCUbHuDEXl3cFB1+VvCC/rAkSwK8Fad52FSuncVg==") + @NotEmpty(message = "验证码不能为空", groups = CodeEnableGroup.class) + private String captchaVerification; + + // ========== 绑定社交登录时,需要传递如下参数 ========== + + @Schema(description = "社交平台的类型,参见 SocialTypeEnum 枚举值", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + @InEnum(SocialTypeEnum.class) + private Integer socialType; + + @Schema(description = "授权码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private String socialCode; + + @Schema(description = "state", requiredMode = Schema.RequiredMode.REQUIRED, example = "9b2ffbc1-7425-4155-9894-9d5c08541d62") + private String socialState; + + /** + * 开启验证码的 Group + */ + public interface CodeEnableGroup {} + + @AssertTrue(message = "授权码不能为空") + public boolean isSocialCodeValid() { + return socialType == null || StrUtil.isNotEmpty(socialCode); + } + + @AssertTrue(message = "授权 state 不能为空") + public boolean isSocialState() { + return socialType == null || StrUtil.isNotEmpty(socialState); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthLoginRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthLoginRespVO.java new file mode 100644 index 0000000..ef68096 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthLoginRespVO.java @@ -0,0 +1,30 @@ +package com.win.module.system.controller.admin.auth.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 登录 Response VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AuthLoginRespVO { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long userId; + + @Schema(description = "访问令牌", requiredMode = Schema.RequiredMode.REQUIRED, example = "happy") + private String accessToken; + + @Schema(description = "刷新令牌", requiredMode = Schema.RequiredMode.REQUIRED, example = "nice") + private String refreshToken; + + @Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime expiresTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthMenuRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthMenuRespVO.java new file mode 100644 index 0000000..11d35af --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthMenuRespVO.java @@ -0,0 +1,53 @@ +package com.win.module.system.controller.admin.auth.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Schema(description = "管理后台 - 登录用户的菜单信息 Response VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AuthMenuRespVO { + + @Schema(description = "菜单名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private Long id; + + @Schema(description = "父菜单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long parentId; + + @Schema(description = "菜单名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + + @Schema(description = "路由地址,仅菜单类型为菜单或者目录时,才需要传", example = "post") + private String path; + + @Schema(description = "组件路径,仅菜单类型为菜单时,才需要传", example = "system/post/index") + private String component; + + @Schema(description = "组件名", example = "SystemUser") + private String componentName; + + @Schema(description = "菜单图标,仅菜单类型为菜单或者目录时,才需要传", example = "/menu/list") + private String icon; + + @Schema(description = "是否可见", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") + private Boolean visible; + + @Schema(description = "是否缓存", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") + private Boolean keepAlive; + + @Schema(description = "是否总是显示", example = "false") + private Boolean alwaysShow; + + /** + * 子路由 + */ + private List children; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java new file mode 100644 index 0000000..4c6c0c0 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java @@ -0,0 +1,96 @@ +package com.win.module.system.controller.admin.auth.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Set; + +@Schema(description = "管理后台 - 登录用户的权限信息 Response VO,额外包括用户信息和角色列表") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AuthPermissionInfoRespVO { + + @Schema(description = "用户信息", requiredMode = Schema.RequiredMode.REQUIRED) + private UserVO user; + + @Schema(description = "角色标识数组", requiredMode = Schema.RequiredMode.REQUIRED) + private Set roles; + + @Schema(description = "操作权限数组", requiredMode = Schema.RequiredMode.REQUIRED) + private Set permissions; + + @Schema(description = "菜单树", requiredMode = Schema.RequiredMode.REQUIRED) + private List menus; + + @Schema(description = "用户信息 VO") + @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class UserVO { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码") + private String nickname; + + @Schema(description = "用户头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xx.jpg") + private String avatar; + + @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") + private Long deptId; + + } + + @Schema(description = "管理后台 - 登录用户的菜单信息 Response VO") + @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class MenuVO { + + @Schema(description = "菜单名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private Long id; + + @Schema(description = "父菜单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long parentId; + + @Schema(description = "菜单名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + + @Schema(description = "路由地址,仅菜单类型为菜单或者目录时,才需要传", example = "post") + private String path; + + @Schema(description = "组件路径,仅菜单类型为菜单时,才需要传", example = "system/post/index") + private String component; + + @Schema(description = "组件名", example = "SystemUser") + private String componentName; + + @Schema(description = "菜单图标,仅菜单类型为菜单或者目录时,才需要传", example = "/menu/list") + private String icon; + + @Schema(description = "是否可见", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") + private Boolean visible; + + @Schema(description = "是否缓存", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") + private Boolean keepAlive; + + @Schema(description = "是否总是显示", example = "false") + private Boolean alwaysShow; + + /** + * 子路由 + */ + private List children; + + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthSmsLoginReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthSmsLoginReqVO.java new file mode 100644 index 0000000..35a52a9 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthSmsLoginReqVO.java @@ -0,0 +1,28 @@ +package com.win.module.system.controller.admin.auth.vo; + +import com.win.framework.common.validation.Mobile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import jakarta.validation.constraints.NotEmpty; + +@Schema(description = "管理后台 - 短信验证码的登录 Request VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AuthSmsLoginReqVO { + + @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "winyuanma") + @NotEmpty(message = "手机号不能为空") + @Mobile + private String mobile; + + @Schema(description = "短信验证码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "验证码不能为空") + private String code; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthSmsSendReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthSmsSendReqVO.java new file mode 100644 index 0000000..6b378ee --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthSmsSendReqVO.java @@ -0,0 +1,32 @@ +package com.win.module.system.controller.admin.auth.vo; + +import com.win.framework.common.validation.InEnum; +import com.win.framework.common.validation.Mobile; +import com.win.module.system.enums.sms.SmsSceneEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 发送手机验证码 Request VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AuthSmsSendReqVO { + + @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "winyuanma") + @NotEmpty(message = "手机号不能为空") + @Mobile + private String mobile; + + @Schema(description = "短信场景", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "发送场景不能为空") + @InEnum(SmsSceneEnum.class) + private Integer scene; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthSocialLoginReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthSocialLoginReqVO.java new file mode 100644 index 0000000..81ad2f1 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/auth/vo/AuthSocialLoginReqVO.java @@ -0,0 +1,34 @@ +package com.win.module.system.controller.admin.auth.vo; + +import com.win.framework.common.validation.InEnum; +import com.win.module.system.enums.social.SocialTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 社交绑定登录 Request VO,使用 code 授权码 + 账号密码") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AuthSocialLoginReqVO { + + @Schema(description = "社交平台的类型,参见 UserSocialTypeEnum 枚举值", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + @InEnum(SocialTypeEnum.class) + @NotNull(message = "社交平台的类型不能为空") + private Integer type; + + @Schema(description = "授权码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "授权码不能为空") + private String code; + + @Schema(description = "state", requiredMode = Schema.RequiredMode.REQUIRED, example = "9b2ffbc1-7425-4155-9894-9d5c08541d62") + @NotEmpty(message = "state 不能为空") + private String state; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/captcha/CaptchaController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/captcha/CaptchaController.java new file mode 100644 index 0000000..5b459a8 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/captcha/CaptchaController.java @@ -0,0 +1,53 @@ +package com.win.module.system.controller.admin.captcha; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.util.servlet.ServletUtils; +import com.xingyuv.captcha.model.common.ResponseModel; +import com.xingyuv.captcha.model.vo.CaptchaVO; +import com.xingyuv.captcha.service.CaptchaService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; +import jakarta.servlet.http.HttpServletRequest; + +@Tag(name = "管理后台 - 验证码") +@RestController("adminCaptchaController") +@RequestMapping("/system/captcha") +public class CaptchaController { + + @Resource + private CaptchaService captchaService; + + @PostMapping({"/get"}) + @Operation(summary = "获得验证码") + @PermitAll + public ResponseModel get(@RequestBody CaptchaVO data, HttpServletRequest request) { + assert request.getRemoteHost() != null; + data.setBrowserInfo(getRemoteId(request)); + return captchaService.get(data); + } + + @PostMapping("/check") + @Operation(summary = "校验验证码") + @PermitAll + public ResponseModel check(@RequestBody CaptchaVO data, HttpServletRequest request) { + data.setBrowserInfo(getRemoteId(request)); + return captchaService.check(data); + } + + public static String getRemoteId(HttpServletRequest request) { + String ip = ServletUtils.getClientIP(request); + String ua = request.getHeader("user-agent"); + if (StrUtil.isNotBlank(ip)) { + return ip + ua; + } + return request.getRemoteAddr() + ua; + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/DeptController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/DeptController.java new file mode 100644 index 0000000..bd72bed --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/DeptController.java @@ -0,0 +1,84 @@ +package com.win.module.system.controller.admin.dept; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.dept.vo.dept.DeptListReqVO; +import com.win.module.system.controller.admin.dept.vo.dept.DeptRespVO; +import com.win.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO; +import com.win.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO; +import com.win.module.system.dal.dataobject.dept.DeptDO; +import com.win.module.system.service.dept.DeptService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 部门") +@RestController +@RequestMapping("/system/dept") +@Validated +public class DeptController { + + @Resource + private DeptService deptService; + + @PostMapping("create") + @Operation(summary = "创建部门") + @PreAuthorize("@ss.hasPermission('system:dept:create')") + public CommonResult createDept(@Valid @RequestBody DeptSaveReqVO createReqVO) { + Long deptId = deptService.createDept(createReqVO); + return success(deptId); + } + + @PutMapping("update") + @Operation(summary = "更新部门") + @PreAuthorize("@ss.hasPermission('system:dept:update')") + public CommonResult updateDept(@Valid @RequestBody DeptSaveReqVO updateReqVO) { + deptService.updateDept(updateReqVO); + return success(true); + } + + @DeleteMapping("delete") + @Operation(summary = "删除部门") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:dept:delete')") + public CommonResult deleteDept(@RequestParam("id") Long id) { + deptService.deleteDept(id); + return success(true); + } + + @GetMapping("/list") + @Operation(summary = "获取部门列表") + @PreAuthorize("@ss.hasPermission('system:dept:query')") + public CommonResult> getDeptList(DeptListReqVO reqVO) { + List list = deptService.getDeptList(reqVO); + return success(BeanUtils.toBean(list, DeptRespVO.class)); + } + + @GetMapping(value = {"/list-all-simple", "/simple-list"}) + @Operation(summary = "获取部门精简信息列表", description = "只包含被开启的部门,主要用于前端的下拉选项") + public CommonResult> getSimpleDeptList() { + List list = deptService.getDeptList( + new DeptListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus())); + return success(BeanUtils.toBean(list, DeptSimpleRespVO.class)); + } + + @GetMapping("/get") + @Operation(summary = "获得部门信息") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:dept:query')") + public CommonResult getDept(@RequestParam("id") Long id) { + DeptDO dept = deptService.getDept(id); + return success(BeanUtils.toBean(dept, DeptRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/PostController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/PostController.java new file mode 100644 index 0000000..8a7ae21 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/PostController.java @@ -0,0 +1,106 @@ +package com.win.module.system.controller.admin.dept; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.system.controller.admin.dept.vo.post.PostPageReqVO; +import com.win.module.system.controller.admin.dept.vo.post.PostRespVO; +import com.win.module.system.controller.admin.dept.vo.post.PostSaveReqVO; +import com.win.module.system.controller.admin.dept.vo.post.PostSimpleRespVO; +import com.win.module.system.dal.dataobject.dept.PostDO; +import com.win.module.system.service.dept.PostService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 岗位") +@RestController +@RequestMapping("/system/post") +@Validated +public class PostController { + + @Resource + private PostService postService; + + @PostMapping("/create") + @Operation(summary = "创建岗位") + @PreAuthorize("@ss.hasPermission('system:post:create')") + public CommonResult createPost(@Valid @RequestBody PostSaveReqVO createReqVO) { + Long postId = postService.createPost(createReqVO); + return success(postId); + } + + @PutMapping("/update") + @Operation(summary = "修改岗位") + @PreAuthorize("@ss.hasPermission('system:post:update')") + public CommonResult updatePost(@Valid @RequestBody PostSaveReqVO updateReqVO) { + postService.updatePost(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除岗位") + @PreAuthorize("@ss.hasPermission('system:post:delete')") + public CommonResult deletePost(@RequestParam("id") Long id) { + postService.deletePost(id); + return success(true); + } + + @GetMapping(value = "/get") + @Operation(summary = "获得岗位信息") + @Parameter(name = "id", description = "岗位编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:post:query')") + public CommonResult getPost(@RequestParam("id") Long id) { + PostDO post = postService.getPost(id); + return success(BeanUtils.toBean(post, PostRespVO.class)); + } + + @GetMapping(value = {"/list-all-simple", "simple-list"}) + @Operation(summary = "获取岗位全列表", description = "只包含被开启的岗位,主要用于前端的下拉选项") + public CommonResult> getSimplePostList() { + // 获得岗位列表,只要开启状态的 + List list = postService.getPostList(null, Collections.singleton(CommonStatusEnum.ENABLE.getStatus())); + // 排序后,返回给前端 + list.sort(Comparator.comparing(PostDO::getSort)); + return success(BeanUtils.toBean(list, PostSimpleRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得岗位分页列表") + @PreAuthorize("@ss.hasPermission('system:post:query')") + public CommonResult> getPostPage(@Validated PostPageReqVO pageReqVO) { + PageResult pageResult = postService.getPostPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PostRespVO.class)); + } + + @GetMapping("/export") + @Operation(summary = "岗位管理") + @PreAuthorize("@ss.hasPermission('system:post:export')") + @ApiAccessLog(operateType = EXPORT) + public void export(HttpServletResponse response, @Validated PostPageReqVO reqVO) throws IOException { + reqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = postService.getPostPage(reqVO).getList(); + // 输出 + ExcelUtils.write(response, "岗位数据.xls", "岗位列表", PostRespVO.class, + BeanUtils.toBean(list, PostRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java new file mode 100644 index 0000000..f8dfdff --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java @@ -0,0 +1,16 @@ +package com.win.module.system.controller.admin.dept.vo.dept; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 部门列表 Request VO") +@Data +public class DeptListReqVO { + + @Schema(description = "部门名称,模糊匹配", example = "芋道") + private String name; + + @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1") + private Integer status; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptRespVO.java new file mode 100644 index 0000000..d881162 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptRespVO.java @@ -0,0 +1,39 @@ +package com.win.module.system.controller.admin.dept.vo.dept; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 部门信息 Response VO") +@Data +public class DeptRespVO { + + @Schema(description = "部门编号", example = "1024") + private Long id; + + @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + + @Schema(description = "父部门 ID", example = "1024") + private Long parentId; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Integer sort; + + @Schema(description = "负责人的用户编号", example = "2048") + private Long leaderUserId; + + @Schema(description = "联系电话", example = "15601691000") + private String phone; + + @Schema(description = "邮箱", example = "win@iocoder.cn") + private String email; + + @Schema(description = "状态,见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java new file mode 100644 index 0000000..aaba572 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java @@ -0,0 +1,48 @@ +package com.win.module.system.controller.admin.dept.vo.dept; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.validation.InEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +@Schema(description = "管理后台 - 部门创建/修改 Request VO") +@Data +public class DeptSaveReqVO { + + @Schema(description = "部门编号", example = "1024") + private Long id; + + @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + @NotBlank(message = "部门名称不能为空") + @Size(max = 30, message = "部门名称长度不能超过 30 个字符") + private String name; + + @Schema(description = "父部门 ID", example = "1024") + private Long parentId; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "显示顺序不能为空") + private Integer sort; + + @Schema(description = "负责人的用户编号", example = "2048") + private Long leaderUserId; + + @Schema(description = "联系电话", example = "15601691000") + @Size(max = 11, message = "联系电话长度不能超过11个字符") + private String phone; + + @Schema(description = "邮箱", example = "win@iocoder.cn") + @Email(message = "邮箱格式不正确") + @Size(max = 50, message = "邮箱长度不能超过 50 个字符") + private String email; + + @Schema(description = "状态,见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}") + private Integer status; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptSimpleRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptSimpleRespVO.java new file mode 100644 index 0000000..166f10b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/dept/DeptSimpleRespVO.java @@ -0,0 +1,23 @@ +package com.win.module.system.controller.admin.dept.vo.dept; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Schema(description = "管理后台 - 部门精简信息 Response VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DeptSimpleRespVO { + + @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + + @Schema(description = "父部门 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long parentId; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostPageReqVO.java new file mode 100644 index 0000000..d6af34e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostPageReqVO.java @@ -0,0 +1,22 @@ +package com.win.module.system.controller.admin.dept.vo.post; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Schema(description = "管理后台 - 岗位分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class PostPageReqVO extends PageParam { + + @Schema(description = "岗位编码,模糊匹配", example = "win") + private String code; + + @Schema(description = "岗位名称,模糊匹配", example = "芋道") + private String name; + + @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1") + private Integer status; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostRespVO.java new file mode 100644 index 0000000..29de9d4 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostRespVO.java @@ -0,0 +1,45 @@ +package com.win.module.system.controller.admin.dept.vo.post; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.system.enums.DictTypeConstants; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 岗位信息 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PostRespVO { + + @Schema(description = "岗位序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("岗位序号") + private Long id; + + @Schema(description = "岗位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "小土豆") + @ExcelProperty("岗位名称") + private String name; + + @Schema(description = "岗位编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + @ExcelProperty("岗位编码") + private String code; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("岗位排序") + private Integer sort; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.COMMON_STATUS) + private Integer status; + + @Schema(description = "备注", example = "快乐的备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostSaveReqVO.java new file mode 100644 index 0000000..eab114e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostSaveReqVO.java @@ -0,0 +1,39 @@ +package com.win.module.system.controller.admin.dept.vo.post; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.validation.InEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +@Schema(description = "管理后台 - 岗位创建/修改 Request VO") +@Data +public class PostSaveReqVO { + + @Schema(description = "岗位编号", example = "1024") + private Long id; + + @Schema(description = "岗位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "小土豆") + @NotBlank(message = "岗位名称不能为空") + @Size(max = 50, message = "岗位名称长度不能超过 50 个字符") + private String name; + + @Schema(description = "岗位编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + @NotBlank(message = "岗位编码不能为空") + @Size(max = 64, message = "岗位编码长度不能超过64个字符") + private String code; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "显示顺序不能为空") + private Integer sort; + + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @InEnum(CommonStatusEnum.class) + private Integer status; + + @Schema(description = "备注", example = "快乐的备注") + private String remark; + +} \ No newline at end of file diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostSimpleRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostSimpleRespVO.java new file mode 100644 index 0000000..254695a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dept/vo/post/PostSimpleRespVO.java @@ -0,0 +1,19 @@ +package com.win.module.system.controller.admin.dept.vo.post; + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 岗位信息的精简 Response VO") +@Data +public class PostSimpleRespVO { + + @Schema(description = "岗位序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("岗位序号") + private Long id; + + @Schema(description = "岗位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "小土豆") + @ExcelProperty("岗位名称") + private String name; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/DictDataController.http b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/DictDataController.http new file mode 100644 index 0000000..f524315 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/DictDataController.http @@ -0,0 +1,4 @@ +### 请求 /menu/list 接口 => 成功 +GET {{baseUrl}}/system/dict-data/list-all-simple +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/DictDataController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/DictDataController.java new file mode 100644 index 0000000..9c2c9bd --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/DictDataController.java @@ -0,0 +1,104 @@ +package com.win.module.system.controller.admin.dict; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; +import com.win.module.system.controller.admin.dict.vo.data.DictDataRespVO; +import com.win.module.system.controller.admin.dict.vo.data.DictDataSaveReqVO; +import com.win.module.system.controller.admin.dict.vo.data.DictDataSimpleRespVO; +import com.win.module.system.dal.dataobject.dict.DictDataDO; +import com.win.module.system.service.dict.DictDataService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 字典数据") +@RestController +@RequestMapping("/system/dict-data") +@Validated +public class DictDataController { + + @Resource + private DictDataService dictDataService; + + @PostMapping("/create") + @Operation(summary = "新增字典数据") + @PreAuthorize("@ss.hasPermission('system:dict:create')") + public CommonResult createDictData(@Valid @RequestBody DictDataSaveReqVO createReqVO) { + Long dictDataId = dictDataService.createDictData(createReqVO); + return success(dictDataId); + } + + @PutMapping("/update") + @Operation(summary = "修改字典数据") + @PreAuthorize("@ss.hasPermission('system:dict:update')") + public CommonResult updateDictData(@Valid @RequestBody DictDataSaveReqVO updateReqVO) { + dictDataService.updateDictData(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除字典数据") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:dict:delete')") + public CommonResult deleteDictData(Long id) { + dictDataService.deleteDictData(id); + return success(true); + } + + @GetMapping(value = {"/list-all-simple", "simple-list"}) + @Operation(summary = "获得全部字典数据列表", description = "一般用于管理后台缓存字典数据在本地") + // 无需添加权限认证,因为前端全局都需要 + public CommonResult> getSimpleDictDataList() { + List list = dictDataService.getDictDataList( + CommonStatusEnum.ENABLE.getStatus(), null); + return success(BeanUtils.toBean(list, DictDataSimpleRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "/获得字典类型的分页列表") + @PreAuthorize("@ss.hasPermission('system:dict:query')") + public CommonResult> getDictTypePage(@Valid DictDataPageReqVO pageReqVO) { + PageResult pageResult = dictDataService.getDictDataPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, DictDataRespVO.class)); + } + + @GetMapping(value = "/get") + @Operation(summary = "/查询字典数据详细") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:dict:query')") + public CommonResult getDictData(@RequestParam("id") Long id) { + DictDataDO dictData = dictDataService.getDictData(id); + return success(BeanUtils.toBean(dictData, DictDataRespVO.class)); + } + + @GetMapping("/export") + @Operation(summary = "导出字典数据") + @PreAuthorize("@ss.hasPermission('system:dict:export')") + @ApiAccessLog(operateType = EXPORT) + public void export(HttpServletResponse response, @Valid DictDataPageReqVO exportReqVO) throws IOException { + exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = dictDataService.getDictDataPage(exportReqVO).getList(); + // 输出 + ExcelUtils.write(response, "字典数据.xls", "数据", DictDataRespVO.class, + BeanUtils.toBean(list, DictDataRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/DictTypeController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/DictTypeController.java new file mode 100644 index 0000000..3aaefac --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/DictTypeController.java @@ -0,0 +1,102 @@ +package com.win.module.system.controller.admin.dict; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.system.controller.admin.dict.vo.type.DictTypePageReqVO; +import com.win.module.system.controller.admin.dict.vo.type.DictTypeRespVO; +import com.win.module.system.controller.admin.dict.vo.type.DictTypeSaveReqVO; +import com.win.module.system.controller.admin.dict.vo.type.DictTypeSimpleRespVO; +import com.win.module.system.dal.dataobject.dict.DictTypeDO; +import com.win.module.system.service.dict.DictTypeService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 字典类型") +@RestController +@RequestMapping("/system/dict-type") +@Validated +public class DictTypeController { + + @Resource + private DictTypeService dictTypeService; + + @PostMapping("/create") + @Operation(summary = "创建字典类型") + @PreAuthorize("@ss.hasPermission('system:dict:create')") + public CommonResult createDictType(@Valid @RequestBody DictTypeSaveReqVO createReqVO) { + Long dictTypeId = dictTypeService.createDictType(createReqVO); + return success(dictTypeId); + } + + @PutMapping("/update") + @Operation(summary = "修改字典类型") + @PreAuthorize("@ss.hasPermission('system:dict:update')") + public CommonResult updateDictType(@Valid @RequestBody DictTypeSaveReqVO updateReqVO) { + dictTypeService.updateDictType(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除字典类型") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:dict:delete')") + public CommonResult deleteDictType(Long id) { + dictTypeService.deleteDictType(id); + return success(true); + } + + @GetMapping("/page") + @Operation(summary = "获得字典类型的分页列表") + @PreAuthorize("@ss.hasPermission('system:dict:query')") + public CommonResult> pageDictTypes(@Valid DictTypePageReqVO pageReqVO) { + PageResult pageResult = dictTypeService.getDictTypePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, DictTypeRespVO.class)); + } + + @Operation(summary = "/查询字典类型详细") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @GetMapping(value = "/get") + @PreAuthorize("@ss.hasPermission('system:dict:query')") + public CommonResult getDictType(@RequestParam("id") Long id) { + DictTypeDO dictType = dictTypeService.getDictType(id); + return success(BeanUtils.toBean(dictType, DictTypeRespVO.class)); + } + + @GetMapping(value = {"/list-all-simple", "simple-list"}) + @Operation(summary = "获得全部字典类型列表", description = "包括开启 + 禁用的字典类型,主要用于前端的下拉选项") + // 无需添加权限认证,因为前端全局都需要 + public CommonResult> getSimpleDictTypeList() { + List list = dictTypeService.getDictTypeList(); + return success(BeanUtils.toBean(list, DictTypeSimpleRespVO.class)); + } + + @Operation(summary = "导出数据类型") + @GetMapping("/export") + @PreAuthorize("@ss.hasPermission('system:dict:query')") + @ApiAccessLog(operateType = EXPORT) + public void export(HttpServletResponse response, @Valid DictTypePageReqVO exportReqVO) throws IOException { + exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = dictTypeService.getDictTypePage(exportReqVO).getList(); + // 导出 + ExcelUtils.write(response, "字典类型.xls", "数据", DictTypeRespVO.class, + BeanUtils.toBean(list, DictTypeRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java new file mode 100644 index 0000000..487318a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataPageReqVO.java @@ -0,0 +1,28 @@ +package com.win.module.system.controller.admin.dict.vo.data; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.validation.InEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Size; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Schema(description = "管理后台 - 字典类型分页列表 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class DictDataPageReqVO extends PageParam { + + @Schema(description = "字典标签", example = "芋道") + @Size(max = 100, message = "字典标签长度不能超过100个字符") + private String label; + + @Schema(description = "字典类型,模糊匹配", example = "sys_common_sex") + @Size(max = 100, message = "字典类型类型长度不能超过100个字符") + private String dictType; + + @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1") + @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}") + private Integer status; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataRespVO.java new file mode 100644 index 0000000..4b6911e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataRespVO.java @@ -0,0 +1,55 @@ +package com.win.module.system.controller.admin.dict.vo.data; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.system.enums.DictTypeConstants; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 字典数据信息 Response VO") +@Data +@ExcelIgnoreUnannotated +public class DictDataRespVO { + + @Schema(description = "字典数据编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("字典编码") + private Long id; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("字典排序") + private Integer sort; + + @Schema(description = "字典标签", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + @ExcelProperty("字典标签") + private String label; + + @Schema(description = "字典值", requiredMode = Schema.RequiredMode.REQUIRED, example = "iocoder") + @ExcelProperty("字典键值") + private String value; + + @Schema(description = "字典类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "sys_common_sex") + @ExcelProperty("字典类型") + private String dictType; + + @Schema(description = "状态,见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.COMMON_STATUS) + private Integer status; + + @Schema(description = "颜色类型,default、primary、success、info、warning、danger", example = "default") + private String colorType; + + @Schema(description = "css 样式", example = "btn-visible") + private String cssClass; + + @Schema(description = "备注", example = "我是一个角色") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataSaveReqVO.java new file mode 100644 index 0000000..028e557 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataSaveReqVO.java @@ -0,0 +1,51 @@ +package com.win.module.system.controller.admin.dict.vo.data; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.validation.InEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +@Schema(description = "管理后台 - 字典数据创建/修改 Request VO") +@Data +public class DictDataSaveReqVO { + + @Schema(description = "字典数据编号", example = "1024") + private Long id; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "显示顺序不能为空") + private Integer sort; + + @Schema(description = "字典标签", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + @NotBlank(message = "字典标签不能为空") + @Size(max = 100, message = "字典标签长度不能超过100个字符") + private String label; + + @Schema(description = "字典值", requiredMode = Schema.RequiredMode.REQUIRED, example = "iocoder") + @NotBlank(message = "字典键值不能为空") + @Size(max = 100, message = "字典键值长度不能超过100个字符") + private String value; + + @Schema(description = "字典类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "sys_common_sex") + @NotBlank(message = "字典类型不能为空") + @Size(max = 100, message = "字典类型长度不能超过100个字符") + private String dictType; + + @Schema(description = "状态,见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}") + private Integer status; + + @Schema(description = "颜色类型,default、primary、success、info、warning、danger", example = "default") + private String colorType; + + @Schema(description = "css 样式", example = "btn-visible") + private String cssClass; + + @Schema(description = "备注", example = "我是一个角色") + private String remark; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataSimpleRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataSimpleRespVO.java new file mode 100644 index 0000000..8cf5234 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/data/DictDataSimpleRespVO.java @@ -0,0 +1,25 @@ +package com.win.module.system.controller.admin.dict.vo.data; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 数据字典精简 Response VO") +@Data +public class DictDataSimpleRespVO { + + @Schema(description = "字典类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "gender") + private String dictType; + + @Schema(description = "字典键值", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private String value; + + @Schema(description = "字典标签", requiredMode = Schema.RequiredMode.REQUIRED, example = "男") + private String label; + + @Schema(description = "颜色类型,default、primary、success、info、warning、danger", example = "default") + private String colorType; + + @Schema(description = "css 样式", example = "btn-visible") + private String cssClass; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java new file mode 100644 index 0000000..345f3df --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypePageReqVO.java @@ -0,0 +1,33 @@ +package com.win.module.system.controller.admin.dict.vo.type; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import jakarta.validation.constraints.Size; +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 字典类型分页列表 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class DictTypePageReqVO extends PageParam { + + @Schema(description = "字典类型名称,模糊匹配", example = "芋道") + private String name; + + @Schema(description = "字典类型,模糊匹配", example = "sys_common_sex") + @Size(max = 100, message = "字典类型类型长度不能超过100个字符") + private String type; + + @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1") + private Integer status; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @Schema(description = "创建时间") + private LocalDateTime[] createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypeRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypeRespVO.java new file mode 100644 index 0000000..45296f9 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypeRespVO.java @@ -0,0 +1,41 @@ +package com.win.module.system.controller.admin.dict.vo.type; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.system.enums.DictTypeConstants; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 字典类型信息 Response VO") +@Data +@ExcelIgnoreUnannotated +public class DictTypeRespVO { + + @Schema(description = "字典类型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("字典主键") + private Long id; + + @Schema(description = "字典名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "性别") + @ExcelProperty("字典名称") + private String name; + + @Schema(description = "字典类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "sys_common_sex") + @ExcelProperty("字典类型") + private String type; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.COMMON_STATUS) + private Integer status; + + @Schema(description = "备注", example = "快乐的备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypeSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypeSaveReqVO.java new file mode 100644 index 0000000..853e593 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypeSaveReqVO.java @@ -0,0 +1,34 @@ +package com.win.module.system.controller.admin.dict.vo.type; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; + +@Schema(description = "管理后台 - 字典类型创建/修改 Request VO") +@Data +public class DictTypeSaveReqVO { + + @Schema(description = "字典类型编号", example = "1024") + private Long id; + + @Schema(description = "字典名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "性别") + @NotBlank(message = "字典名称不能为空") + @Size(max = 100, message = "字典类型名称长度不能超过100个字符") + private String name; + + @Schema(description = "字典类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "sys_common_sex") + @NotNull(message = "字典类型不能为空") + @Size(max = 100, message = "字典类型类型长度不能超过 100 个字符") + private String type; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + private Integer status; + + @Schema(description = "备注", example = "快乐的备注") + private String remark; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypeSimpleRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypeSimpleRespVO.java new file mode 100644 index 0000000..92810d0 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/dict/vo/type/DictTypeSimpleRespVO.java @@ -0,0 +1,19 @@ +package com.win.module.system.controller.admin.dict.vo.type; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 字典类型精简信息 Response VO") +@Data +public class DictTypeSimpleRespVO { + + @Schema(description = "字典类型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "字典类型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + + @Schema(description = "字典类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "sys_common_sex") + private String type; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/ip/AreaController.http b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/ip/AreaController.http new file mode 100644 index 0000000..f1b893d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/ip/AreaController.http @@ -0,0 +1,5 @@ +### 获得地区树 +GET {{baseUrl}}/system/area/tree +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} + diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/ip/AreaController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/ip/AreaController.java new file mode 100644 index 0000000..f2e0c35 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/ip/AreaController.java @@ -0,0 +1,50 @@ +package com.win.module.system.controller.admin.ip; + +import cn.hutool.core.lang.Assert; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.ip.core.Area; +import com.win.framework.ip.core.utils.AreaUtils; +import com.win.framework.ip.core.utils.IPUtils; +import com.win.module.system.controller.admin.ip.vo.AreaNodeRespVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 地区") +@RestController +@RequestMapping("/system/area") +@Validated +public class AreaController { + + @GetMapping("/tree") + @Operation(summary = "获得地区树") + public CommonResult> getAreaTree() { + Area area = AreaUtils.getArea(Area.ID_CHINA); + Assert.notNull(area, "获取不到中国"); + return success(BeanUtils.toBean(area.getChildren(), AreaNodeRespVO.class)); + } + + @GetMapping("/get-by-ip") + @Operation(summary = "获得 IP 对应的地区名") + @Parameter(name = "ip", description = "IP", required = true) + public CommonResult getAreaByIp(@RequestParam("ip") String ip) { + // 获得城市 + Area area = IPUtils.getArea(ip); + if (area == null) { + return success("未知"); + } + // 格式化返回 + return success(AreaUtils.format(area.getId())); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/ip/vo/AreaNodeRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/ip/vo/AreaNodeRespVO.java new file mode 100644 index 0000000..5836679 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/ip/vo/AreaNodeRespVO.java @@ -0,0 +1,23 @@ +package com.win.module.system.controller.admin.ip.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Schema(description = "管理后台 - 地区节点 Response VO") +@Data +public class AreaNodeRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "110000") + private Integer id; + + @Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "北京") + private String name; + + /** + * 子节点 + */ + private List children; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/LoginLogController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/LoginLogController.java new file mode 100644 index 0000000..de6528d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/LoginLogController.java @@ -0,0 +1,59 @@ +package com.win.module.system.controller.admin.logger; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; +import com.win.module.system.controller.admin.logger.vo.loginlog.LoginLogRespVO; +import com.win.module.system.dal.dataobject.logger.LoginLogDO; +import com.win.module.system.service.logger.LoginLogService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 登录日志") +@RestController +@RequestMapping("/system/login-log") +@Validated +public class LoginLogController { + + @Resource + private LoginLogService loginLogService; + + @GetMapping("/page") + @Operation(summary = "获得登录日志分页列表") + @PreAuthorize("@ss.hasPermission('system:login-log:query')") + public CommonResult> getLoginLogPage(@Valid LoginLogPageReqVO pageReqVO) { + PageResult pageResult = loginLogService.getLoginLogPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, LoginLogRespVO.class)); + } + + @GetMapping("/export") + @Operation(summary = "导出登录日志 Excel") + @PreAuthorize("@ss.hasPermission('system:login-log:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportLoginLog(HttpServletResponse response, @Valid LoginLogPageReqVO exportReqVO) throws IOException { + exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = loginLogService.getLoginLogPage(exportReqVO).getList(); + // 输出 + ExcelUtils.write(response, "登录日志.xls", "数据列表", LoginLogRespVO.class, + BeanUtils.toBean(list, LoginLogRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/OperateLogController.http b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/OperateLogController.http new file mode 100644 index 0000000..068436a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/OperateLogController.http @@ -0,0 +1,4 @@ +### 请求 /system/operate-log/page 接口 => 成功 +GET {{systemBaseUrl}}/system/operate-log/page +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/OperateLogController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/OperateLogController.java new file mode 100644 index 0000000..67267da --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/OperateLogController.java @@ -0,0 +1,59 @@ +package com.win.module.system.controller.admin.logger; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.framework.translate.core.TranslateUtils; +import com.win.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; +import com.win.module.system.controller.admin.logger.vo.operatelog.OperateLogRespVO; +import com.win.module.system.dal.dataobject.logger.OperateLogDO; +import com.win.module.system.service.logger.OperateLogService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 操作日志") +@RestController +@RequestMapping("/system/operate-log") +@Validated +public class OperateLogController { + + @Resource + private OperateLogService operateLogService; + + @GetMapping("/page") + @Operation(summary = "查看操作日志分页列表") + @PreAuthorize("@ss.hasPermission('system:operate-log:query')") + public CommonResult> pageOperateLog(@Valid OperateLogPageReqVO pageReqVO) { + PageResult pageResult = operateLogService.getOperateLogPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, OperateLogRespVO.class)); + } + + @Operation(summary = "导出操作日志") + @GetMapping("/export") + @PreAuthorize("@ss.hasPermission('system:operate-log:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportOperateLog(HttpServletResponse response, @Valid OperateLogPageReqVO exportReqVO) throws IOException { + exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = operateLogService.getOperateLogPage(exportReqVO).getList(); + ExcelUtils.write(response, "操作日志.xls", "数据列表", OperateLogRespVO.class, + TranslateUtils.translate(BeanUtils.toBean(list, OperateLogRespVO.class))); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/loginlog/LoginLogPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/loginlog/LoginLogPageReqVO.java new file mode 100644 index 0000000..b5a7b0c --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/loginlog/LoginLogPageReqVO.java @@ -0,0 +1,31 @@ +package com.win.module.system.controller.admin.logger.vo.loginlog; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 登录日志分页列表 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class LoginLogPageReqVO extends PageParam { + + @Schema(description = "用户 IP,模拟匹配", example = "127.0.0.1") + private String userIp; + + @Schema(description = "用户账号,模拟匹配", example = "芋道") + private String username; + + @Schema(description = "操作状态", example = "true") + private Boolean status; + + @Schema(description = "登录时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/loginlog/LoginLogRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/loginlog/LoginLogRespVO.java new file mode 100644 index 0000000..24972a5 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/loginlog/LoginLogRespVO.java @@ -0,0 +1,57 @@ +package com.win.module.system.controller.admin.logger.vo.loginlog; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.system.enums.DictTypeConstants; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 登录日志 Response VO") +@Data +@ExcelIgnoreUnannotated +public class LoginLogRespVO { + + @Schema(description = "日志编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("日志主键") + private Long id; + + @Schema(description = "日志类型,参见 LoginLogTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "日志类型", converter = DictConvert.class) + @DictFormat(DictTypeConstants.LOGIN_TYPE) + private Integer logType; + + @Schema(description = "用户编号", example = "666") + private Long userId; + + @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer userType; + + @Schema(description = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab") + private String traceId; + + @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + @ExcelProperty("用户账号") + private String username; + + @Schema(description = "登录结果,参见 LoginResultEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "登录结果", converter = DictConvert.class) + @DictFormat(DictTypeConstants.LOGIN_RESULT) + private Integer result; + + @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") + @ExcelProperty("登录 IP") + private String userIp; + + @Schema(description = "浏览器 UserAgent", example = "Mozilla/5.0") + @ExcelProperty("浏览器 UA") + private String userAgent; + + @Schema(description = "登录时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("登录时间") + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/operatelog/OperateLogPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/operatelog/OperateLogPageReqVO.java new file mode 100644 index 0000000..830e6b1 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/operatelog/OperateLogPageReqVO.java @@ -0,0 +1,35 @@ +package com.win.module.system.controller.admin.logger.vo.operatelog; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 操作日志分页列表 Request VO") +@Data +public class OperateLogPageReqVO extends PageParam { + + @Schema(description = "用户编号", example = "芋道") + private Long userId; + + @Schema(description = "操作模块业务编号", example = "1") + private Long bizId; + + @Schema(description = "操作模块,模拟匹配", example = "订单") + private String type; + + @Schema(description = "操作名,模拟匹配", example = "创建订单") + private String subType; + + @Schema(description = "操作明细,模拟匹配", example = "修改编号为 1 的用户信息") + private String action; + + @Schema(description = "开始时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/operatelog/OperateLogRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/operatelog/OperateLogRespVO.java new file mode 100644 index 0000000..8bc182e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/logger/vo/operatelog/OperateLogRespVO.java @@ -0,0 +1,68 @@ +package com.win.module.system.controller.admin.logger.vo.operatelog; + +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.fhs.core.trans.anno.Trans; +import com.fhs.core.trans.constant.TransType; +import com.fhs.core.trans.vo.VO; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 操作日志 Response VO") +@Data +@ExcelIgnoreUnannotated +public class OperateLogRespVO implements VO { + + @Schema(description = "日志编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("日志编号") + private Long id; + + @Schema(description = "链路追踪编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "89aca178-a370-411c-ae02-3f0d672be4ab") + private String traceId; + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @Trans(type = TransType.SIMPLE, target = AdminUserDO.class, fields = "nickname", ref = "userName") + private Long userId; + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @ExcelProperty("操作人") + private String userName; + + @Schema(description = "操作模块类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "订单") + @ExcelProperty("操作模块类型") + private String type; + + @Schema(description = "操作名", requiredMode = Schema.RequiredMode.REQUIRED, example = "创建订单") + @ExcelProperty("操作名") + private String subType; + + @Schema(description = "操作模块业务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("操作模块业务编号") + private Long bizId; + + @Schema(description = "操作明细", example = "修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。") + private String action; + + @Schema(description = "拓展字段", example = "{'orderId': 1}") + private String extra; + + @Schema(description = "请求方法名", requiredMode = Schema.RequiredMode.REQUIRED, example = "GET") + @NotEmpty(message = "请求方法名不能为空") + private String requestMethod; + + @Schema(description = "请求地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "/xxx/yyy") + private String requestUrl; + + @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1") + private String userIp; + + @Schema(description = "浏览器 UserAgent", requiredMode = Schema.RequiredMode.REQUIRED, example = "Mozilla/5.0") + private String userAgent; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailAccountController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailAccountController.java new file mode 100644 index 0000000..6b7618e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailAccountController.java @@ -0,0 +1,81 @@ +package com.win.module.system.controller.admin.mail; + + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; +import com.win.module.system.controller.admin.mail.vo.account.MailAccountRespVO; +import com.win.module.system.controller.admin.mail.vo.account.MailAccountSaveReqVO; +import com.win.module.system.controller.admin.mail.vo.account.MailAccountSimpleRespVO; +import com.win.module.system.dal.dataobject.mail.MailAccountDO; +import com.win.module.system.service.mail.MailAccountService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 邮箱账号") +@RestController +@RequestMapping("/system/mail-account") +public class MailAccountController { + + @Resource + private MailAccountService mailAccountService; + + @PostMapping("/create") + @Operation(summary = "创建邮箱账号") + @PreAuthorize("@ss.hasPermission('system:mail-account:create')") + public CommonResult createMailAccount(@Valid @RequestBody MailAccountSaveReqVO createReqVO) { + return success(mailAccountService.createMailAccount(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "修改邮箱账号") + @PreAuthorize("@ss.hasPermission('system:mail-account:update')") + public CommonResult updateMailAccount(@Valid @RequestBody MailAccountSaveReqVO updateReqVO) { + mailAccountService.updateMailAccount(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除邮箱账号") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('system:mail-account:delete')") + public CommonResult deleteMailAccount(@RequestParam Long id) { + mailAccountService.deleteMailAccount(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得邮箱账号") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:mail-account:query')") + public CommonResult getMailAccount(@RequestParam("id") Long id) { + MailAccountDO account = mailAccountService.getMailAccount(id); + return success(BeanUtils.toBean(account, MailAccountRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得邮箱账号分页") + @PreAuthorize("@ss.hasPermission('system:mail-account:query')") + public CommonResult> getMailAccountPage(@Valid MailAccountPageReqVO pageReqVO) { + PageResult pageResult = mailAccountService.getMailAccountPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, MailAccountRespVO.class)); + } + + @GetMapping({"/list-all-simple", "simple-list"}) + @Operation(summary = "获得邮箱账号精简列表") + public CommonResult> getSimpleMailAccountList() { + List list = mailAccountService.getMailAccountList(); + return success(BeanUtils.toBean(list, MailAccountSimpleRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailLogController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailLogController.java new file mode 100644 index 0000000..0c05cce --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailLogController.java @@ -0,0 +1,49 @@ +package com.win.module.system.controller.admin.mail; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.mail.vo.log.MailLogPageReqVO; +import com.win.module.system.controller.admin.mail.vo.log.MailLogRespVO; +import com.win.module.system.dal.dataobject.mail.MailLogDO; +import com.win.module.system.service.mail.MailLogService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 邮件日志") +@RestController +@RequestMapping("/system/mail-log") +public class MailLogController { + + @Resource + private MailLogService mailLogService; + + @GetMapping("/page") + @Operation(summary = "获得邮箱日志分页") + @PreAuthorize("@ss.hasPermission('system:mail-log:query')") + public CommonResult> getMailLogPage(@Valid MailLogPageReqVO pageVO) { + PageResult pageResult = mailLogService.getMailLogPage(pageVO); + return success(BeanUtils.toBean(pageResult, MailLogRespVO.class)); + } + + @GetMapping("/get") + @Operation(summary = "获得邮箱日志") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:mail-log:query')") + public CommonResult getMailTemplate(@RequestParam("id") Long id) { + MailLogDO log = mailLogService.getMailLog(id); + return success(BeanUtils.toBean(log, MailLogRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailTemplateController.http b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailTemplateController.http new file mode 100644 index 0000000..f3c47f5 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailTemplateController.http @@ -0,0 +1,14 @@ +### 请求 /system/mail-template/send-mail 接口 => 成功 +POST {{baseUrl}}/system/mail-template/send-mail +Authorization: Bearer {{token}} +Content-Type: application/json +tenant-id: {{adminTenentId}} + +{ + "templateCode": "test_01", + "mail": "7685413@qq.com", + "templateParams": { + "key01": "value01", + "key02": "value02" + } +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailTemplateController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailTemplateController.java new file mode 100644 index 0000000..a26836b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/MailTemplateController.java @@ -0,0 +1,89 @@ +package com.win.module.system.controller.admin.mail; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.mail.vo.template.*; +import com.win.module.system.dal.dataobject.mail.MailTemplateDO; +import com.win.module.system.service.mail.MailSendService; +import com.win.module.system.service.mail.MailTemplateService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +@Tag(name = "管理后台 - 邮件模版") +@RestController +@RequestMapping("/system/mail-template") +public class MailTemplateController { + + @Resource + private MailTemplateService mailTempleService; + @Resource + private MailSendService mailSendService; + + @PostMapping("/create") + @Operation(summary = "创建邮件模版") + @PreAuthorize("@ss.hasPermission('system:mail-template:create')") + public CommonResult createMailTemplate(@Valid @RequestBody MailTemplateSaveReqVO createReqVO){ + return success(mailTempleService.createMailTemplate(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "修改邮件模版") + @PreAuthorize("@ss.hasPermission('system:mail-template:update')") + public CommonResult updateMailTemplate(@Valid @RequestBody MailTemplateSaveReqVO updateReqVO){ + mailTempleService.updateMailTemplate(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除邮件模版") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:mail-template:delete')") + public CommonResult deleteMailTemplate(@RequestParam("id") Long id) { + mailTempleService.deleteMailTemplate(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得邮件模版") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:mail-template:query')") + public CommonResult getMailTemplate(@RequestParam("id") Long id) { + MailTemplateDO template = mailTempleService.getMailTemplate(id); + return success(BeanUtils.toBean(template, MailTemplateRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得邮件模版分页") + @PreAuthorize("@ss.hasPermission('system:mail-template:query')") + public CommonResult> getMailTemplatePage(@Valid MailTemplatePageReqVO pageReqVO) { + PageResult pageResult = mailTempleService.getMailTemplatePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, MailTemplateRespVO.class)); + } + + @GetMapping({"/list-all-simple", "simple-list"}) + @Operation(summary = "获得邮件模版精简列表") + public CommonResult> getSimpleTemplateList() { + List list = mailTempleService.getMailTemplateList(); + return success(BeanUtils.toBean(list, MailTemplateSimpleRespVO.class)); + } + + @PostMapping("/send-mail") + @Operation(summary = "发送短信") + @PreAuthorize("@ss.hasPermission('system:mail-template:send-mail')") + public CommonResult sendMail(@Valid @RequestBody MailTemplateSendReqVO sendReqVO) { + return success(mailSendService.sendSingleMailToAdmin(sendReqVO.getMail(), getLoginUserId(), + sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams())); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountPageReqVO.java new file mode 100644 index 0000000..1e7f709 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountPageReqVO.java @@ -0,0 +1,21 @@ +package com.win.module.system.controller.admin.mail.vo.account; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Schema(description = "管理后台 - 邮箱账号分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MailAccountPageReqVO extends PageParam { + + @Schema(description = "邮箱", requiredMode = Schema.RequiredMode.REQUIRED, example = "winyuanma@123.com") + private String mail; + + @Schema(description = "用户名" , requiredMode = Schema.RequiredMode.REQUIRED , example = "win") + private String username; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountRespVO.java new file mode 100644 index 0000000..4a7aa1a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountRespVO.java @@ -0,0 +1,39 @@ +package com.win.module.system.controller.admin.mail.vo.account; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 邮箱账号 Response VO") +@Data +public class MailAccountRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "邮箱", requiredMode = Schema.RequiredMode.REQUIRED, example = "winyuanma@123.com") + private String mail; + + @Schema(description = "用户名", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + private String username; + + @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") + private String password; + + @Schema(description = "SMTP 服务器域名", requiredMode = Schema.RequiredMode.REQUIRED, example = "www.iocoder.cn") + private String host; + + @Schema(description = "SMTP 服务器端口", requiredMode = Schema.RequiredMode.REQUIRED, example = "80") + private Integer port; + + @Schema(description = "是否开启 ssl", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + private Boolean sslEnable; + + @Schema(description = "是否开启 starttls", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + private Boolean starttlsEnable; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountSaveReqVO.java new file mode 100644 index 0000000..2109cf8 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountSaveReqVO.java @@ -0,0 +1,44 @@ +package com.win.module.system.controller.admin.mail.vo.account; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Schema(description = "管理后台 - 邮箱账号创建/修改 Request VO") +@Data +public class MailAccountSaveReqVO { + + @Schema(description = "编号", example = "1024") + private Long id; + + @Schema(description = "邮箱", requiredMode = Schema.RequiredMode.REQUIRED, example = "winyuanma@123.com") + @NotNull(message = "邮箱不能为空") + @Email(message = "必须是 Email 格式") + private String mail; + + @Schema(description = "用户名", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + @NotNull(message = "用户名不能为空") + private String username; + + @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") + @NotNull(message = "密码必填") + private String password; + + @Schema(description = "SMTP 服务器域名", requiredMode = Schema.RequiredMode.REQUIRED, example = "www.iocoder.cn") + @NotNull(message = "SMTP 服务器域名不能为空") + private String host; + + @Schema(description = "SMTP 服务器端口", requiredMode = Schema.RequiredMode.REQUIRED, example = "80") + @NotNull(message = "SMTP 服务器端口不能为空") + private Integer port; + + @Schema(description = "是否开启 ssl", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + @NotNull(message = "是否开启 ssl 必填") + private Boolean sslEnable; + + @Schema(description = "是否开启 starttls", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + @NotNull(message = "是否开启 starttls 必填") + private Boolean starttlsEnable; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountSimpleRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountSimpleRespVO.java new file mode 100644 index 0000000..2c8d9fa --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/account/MailAccountSimpleRespVO.java @@ -0,0 +1,16 @@ +package com.win.module.system.controller.admin.mail.vo.account; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 邮箱账号的精简 Response VO") +@Data +public class MailAccountSimpleRespVO { + + @Schema(description = "邮箱编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "邮箱", requiredMode = Schema.RequiredMode.REQUIRED, example = "768541388@qq.com") + private String mail; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/log/MailLogPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/log/MailLogPageReqVO.java new file mode 100644 index 0000000..fe7e543 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/log/MailLogPageReqVO.java @@ -0,0 +1,42 @@ +package com.win.module.system.controller.admin.mail.vo.log; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 邮箱日志分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MailLogPageReqVO extends PageParam { + + @Schema(description = "用户编号", example = "30883") + private Long userId; + + @Schema(description = "用户类型,参见 UserTypeEnum 枚举", example = "2") + private Integer userType; + + @Schema(description = "接收邮箱地址,模糊匹配", example = "76854@qq.com") + private String toMail; + + @Schema(description = "邮箱账号编号", example = "18107") + private Long accountId; + + @Schema(description = "模板编号", example = "5678") + private Long templateId; + + @Schema(description = "发送状态,参见 MailSendStatusEnum 枚举", example = "1") + private Integer sendStatus; + + @Schema(description = "发送时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] sendTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/log/MailLogRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/log/MailLogRespVO.java new file mode 100644 index 0000000..a9c7da2 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/log/MailLogRespVO.java @@ -0,0 +1,64 @@ +package com.win.module.system.controller.admin.mail.vo.log; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Map; + +@Schema(description = "管理后台 - 邮件日志 Response VO") +@Data +public class MailLogRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "31020") + private Long id; + + @Schema(description = "用户编号", example = "30883") + private Long userId; + + @Schema(description = "用户类型,参见 UserTypeEnum 枚举", example = "2") + private Byte userType; + + @Schema(description = "接收邮箱地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "76854@qq.com") + private String toMail; + + @Schema(description = "邮箱账号编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18107") + private Long accountId; + + @Schema(description = "发送邮箱地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "85757@qq.com") + private String fromMail; + + @Schema(description = "模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5678") + private Long templateId; + + @Schema(description = "模板编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "test_01") + private String templateCode; + + @Schema(description = "模版发送人名称", example = "李四") + private String templateNickname; + + @Schema(description = "邮件标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试标题") + private String templateTitle; + + @Schema(description = "邮件内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试内容") + private String templateContent; + + @Schema(description = "邮件参数", requiredMode = Schema.RequiredMode.REQUIRED) + private Map templateParams; + + @Schema(description = "发送状态,参见 MailSendStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Byte sendStatus; + + @Schema(description = "发送时间") + private LocalDateTime sendTime; + + @Schema(description = "发送返回的消息 ID", example = "28568") + private String sendMessageId; + + @Schema(description = "发送异常") + private String sendException; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplatePageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplatePageReqVO.java new file mode 100644 index 0000000..9ba0e45 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplatePageReqVO.java @@ -0,0 +1,36 @@ +package com.win.module.system.controller.admin.mail.vo.template; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 邮件模版分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MailTemplatePageReqVO extends PageParam { + + @Schema(description = "状态,参见 CommonStatusEnum 枚举", example = "1") + private Integer status; + + @Schema(description = "标识,模糊匹配", example = "code_1024") + private String code; + + @Schema(description = "名称,模糊匹配", example = "芋头") + private String name; + + @Schema(description = "账号编号", example = "2048") + private Long accountId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateRespVO.java new file mode 100644 index 0000000..36279c2 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateRespVO.java @@ -0,0 +1,46 @@ +package com.win.module.system.controller.admin.mail.vo.template; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 邮件末班 Response VO") +@Data +public class MailTemplateRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "模版名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试名字") + private String name; + + @Schema(description = "模版编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "test") + private String code; + + @Schema(description = "发送的邮箱账号编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long accountId; + + @Schema(description = "发送人名称", example = "芋头") + private String nickname; + + @Schema(description = "标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "注册成功") + private String title; + + @Schema(description = "内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好,注册成功啦") + private String content; + + @Schema(description = "参数数组", example = "name,code") + private List params; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; + + @Schema(description = "备注", example = "奥特曼") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateSaveReqVO.java new file mode 100644 index 0000000..aa30fa9 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateSaveReqVO.java @@ -0,0 +1,46 @@ +package com.win.module.system.controller.admin.mail.vo.template; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 邮件模版创建/修改 Request VO") +@Data +public class MailTemplateSaveReqVO { + + @Schema(description = "编号", example = "1024") + private Long id; + + @Schema(description = "模版名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试名字") + @NotNull(message = "名称不能为空") + private String name; + + @Schema(description = "模版编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "test") + @NotNull(message = "模版编号不能为空") + private String code; + + @Schema(description = "发送的邮箱账号编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "发送的邮箱账号编号不能为空") + private Long accountId; + + @Schema(description = "发送人名称", example = "芋头") + private String nickname; + + @Schema(description = "标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "注册成功") + @NotEmpty(message = "标题不能为空") + private String title; + + @Schema(description = "内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好,注册成功啦") + @NotEmpty(message = "内容不能为空") + private String content; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + private Integer status; + + @Schema(description = "备注", example = "奥特曼") + private String remark; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateSendReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateSendReqVO.java new file mode 100644 index 0000000..5eff69c --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateSendReqVO.java @@ -0,0 +1,25 @@ +package com.win.module.system.controller.admin.mail.vo.template; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.util.Map; + +@Schema(description = "管理后台 - 邮件发送 Req VO") +@Data +public class MailTemplateSendReqVO { + + @Schema(description = "接收邮箱", requiredMode = Schema.RequiredMode.REQUIRED, example = "7685413@qq.com") + @NotEmpty(message = "接收邮箱不能为空") + private String mail; + + @Schema(description = "模板编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "test_01") + @NotNull(message = "模板编码不能为空") + private String templateCode; + + @Schema(description = "模板参数") + private Map templateParams; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateSimpleRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateSimpleRespVO.java new file mode 100644 index 0000000..09bca31 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/mail/vo/template/MailTemplateSimpleRespVO.java @@ -0,0 +1,16 @@ +package com.win.module.system.controller.admin.mail.vo.template; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 邮件模版的精简 Response VO") +@Data +public class MailTemplateSimpleRespVO { + + @Schema(description = "模版编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "模版名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "哒哒哒") + private String name; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/NoticeController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/NoticeController.java new file mode 100644 index 0000000..c7a1143 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/NoticeController.java @@ -0,0 +1,92 @@ +package com.win.module.system.controller.admin.notice; + +import cn.hutool.core.lang.Assert; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.infra.api.websocket.WebSocketSenderApi; +import com.win.module.system.controller.admin.notice.vo.NoticePageReqVO; +import com.win.module.system.controller.admin.notice.vo.NoticeRespVO; +import com.win.module.system.controller.admin.notice.vo.NoticeSaveReqVO; +import com.win.module.system.dal.dataobject.notice.NoticeDO; +import com.win.module.system.service.notice.NoticeService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 通知公告") +@RestController +@RequestMapping("/system/notice") +@Validated +public class NoticeController { + + @Resource + private NoticeService noticeService; + + @Resource + private WebSocketSenderApi webSocketSenderApi; + + @PostMapping("/create") + @Operation(summary = "创建通知公告") + @PreAuthorize("@ss.hasPermission('system:notice:create')") + public CommonResult createNotice(@Valid @RequestBody NoticeSaveReqVO createReqVO) { + Long noticeId = noticeService.createNotice(createReqVO); + return success(noticeId); + } + + @PutMapping("/update") + @Operation(summary = "修改通知公告") + @PreAuthorize("@ss.hasPermission('system:notice:update')") + public CommonResult updateNotice(@Valid @RequestBody NoticeSaveReqVO updateReqVO) { + noticeService.updateNotice(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除通知公告") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:notice:delete')") + public CommonResult deleteNotice(@RequestParam("id") Long id) { + noticeService.deleteNotice(id); + return success(true); + } + + @GetMapping("/page") + @Operation(summary = "获取通知公告列表") + @PreAuthorize("@ss.hasPermission('system:notice:query')") + public CommonResult> getNoticePage(@Validated NoticePageReqVO pageReqVO) { + PageResult pageResult = noticeService.getNoticePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, NoticeRespVO.class)); + } + + @GetMapping("/get") + @Operation(summary = "获得通知公告") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:notice:query')") + public CommonResult getNotice(@RequestParam("id") Long id) { + NoticeDO notice = noticeService.getNotice(id); + return success(BeanUtils.toBean(notice, NoticeRespVO.class)); + } + + @PostMapping("/push") + @Operation(summary = "推送通知公告", description = "只发送给 websocket 连接在线的用户") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:notice:update')") + public CommonResult push(@RequestParam("id") Long id) { + NoticeDO notice = noticeService.getNotice(id); + Assert.notNull(notice, "公告不能为空"); + // 通过 websocket 推送给在线的用户 + webSocketSenderApi.sendObject(UserTypeEnum.ADMIN.getValue(), "notice-push", notice); + return success(true); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/vo/NoticePageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/vo/NoticePageReqVO.java new file mode 100644 index 0000000..9ac3c4d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/vo/NoticePageReqVO.java @@ -0,0 +1,19 @@ +package com.win.module.system.controller.admin.notice.vo; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Schema(description = "管理后台 - 通知公告分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class NoticePageReqVO extends PageParam { + + @Schema(description = "通知公告名称,模糊匹配", example = "芋道") + private String title; + + @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1") + private Integer status; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/vo/NoticeRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/vo/NoticeRespVO.java new file mode 100644 index 0000000..b444a6e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/vo/NoticeRespVO.java @@ -0,0 +1,30 @@ +package com.win.module.system.controller.admin.notice.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 通知公告信息 Response VO") +@Data +public class NoticeRespVO { + + @Schema(description = "通知公告序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "公告标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "小博主") + private String title; + + @Schema(description = "公告类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "小博主") + private Integer type; + + @Schema(description = "公告内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "半生编码") + private String content; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/vo/NoticeSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/vo/NoticeSaveReqVO.java new file mode 100644 index 0000000..80c250f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notice/vo/NoticeSaveReqVO.java @@ -0,0 +1,32 @@ +package com.win.module.system.controller.admin.notice.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; + +@Schema(description = "管理后台 - 通知公告创建/修改 Request VO") +@Data +public class NoticeSaveReqVO { + + @Schema(description = "岗位公告编号", example = "1024") + private Long id; + + @Schema(description = "公告标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "小博主") + @NotBlank(message = "公告标题不能为空") + @Size(max = 50, message = "公告标题不能超过50个字符") + private String title; + + @Schema(description = "公告类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "小博主") + @NotNull(message = "公告类型不能为空") + private Integer type; + + @Schema(description = "公告内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "半生编码") + private String content; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/NotifyMessageController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/NotifyMessageController.java new file mode 100644 index 0000000..399bdfd --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/NotifyMessageController.java @@ -0,0 +1,98 @@ +package com.win.module.system.controller.admin.notify; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.notify.vo.message.NotifyMessageMyPageReqVO; +import com.win.module.system.controller.admin.notify.vo.message.NotifyMessagePageReqVO; +import com.win.module.system.controller.admin.notify.vo.message.NotifyMessageRespVO; +import com.win.module.system.dal.dataobject.notify.NotifyMessageDO; +import com.win.module.system.service.notify.NotifyMessageService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +@Tag(name = "管理后台 - 我的站内信") +@RestController +@RequestMapping("/system/notify-message") +@Validated +public class NotifyMessageController { + + @Resource + private NotifyMessageService notifyMessageService; + + // ========== 管理所有的站内信 ========== + + @GetMapping("/get") + @Operation(summary = "获得站内信") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:notify-message:query')") + public CommonResult getNotifyMessage(@RequestParam("id") Long id) { + NotifyMessageDO message = notifyMessageService.getNotifyMessage(id); + return success(BeanUtils.toBean(message, NotifyMessageRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得站内信分页") + @PreAuthorize("@ss.hasPermission('system:notify-message:query')") + public CommonResult> getNotifyMessagePage(@Valid NotifyMessagePageReqVO pageVO) { + PageResult pageResult = notifyMessageService.getNotifyMessagePage(pageVO); + return success(BeanUtils.toBean(pageResult, NotifyMessageRespVO.class)); + } + + // ========== 查看自己的站内信 ========== + + @GetMapping("/my-page") + @Operation(summary = "获得我的站内信分页") + public CommonResult> getMyMyNotifyMessagePage(@Valid NotifyMessageMyPageReqVO pageVO) { + PageResult pageResult = notifyMessageService.getMyMyNotifyMessagePage(pageVO, + getLoginUserId(), UserTypeEnum.ADMIN.getValue()); + return success(BeanUtils.toBean(pageResult, NotifyMessageRespVO.class)); + } + + @PutMapping("/update-read") + @Operation(summary = "标记站内信为已读") + @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048") + public CommonResult updateNotifyMessageRead(@RequestParam("ids") List ids) { + notifyMessageService.updateNotifyMessageRead(ids, getLoginUserId(), UserTypeEnum.ADMIN.getValue()); + return success(Boolean.TRUE); + } + + @PutMapping("/update-all-read") + @Operation(summary = "标记所有站内信为已读") + public CommonResult updateAllNotifyMessageRead() { + notifyMessageService.updateAllNotifyMessageRead(getLoginUserId(), UserTypeEnum.ADMIN.getValue()); + return success(Boolean.TRUE); + } + + @GetMapping("/get-unread-list") + @Operation(summary = "获取当前用户的最新站内信列表,默认 10 条") + @Parameter(name = "size", description = "10") + public CommonResult> getUnreadNotifyMessageList( + @RequestParam(name = "size", defaultValue = "10") Integer size) { + List list = notifyMessageService.getUnreadNotifyMessageList( + getLoginUserId(), UserTypeEnum.ADMIN.getValue(), size); + return success(BeanUtils.toBean(list, NotifyMessageRespVO.class)); + } + + @GetMapping("/get-unread-count") + @Operation(summary = "获得当前用户的未读站内信数量") + @ApiAccessLog(enable = false) // 由于前端会不断轮询该接口,记录日志没有意义 + public CommonResult getUnreadNotifyMessageCount() { + return success(notifyMessageService.getUnreadNotifyMessageCount( + getLoginUserId(), UserTypeEnum.ADMIN.getValue())); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/NotifyTemplateController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/NotifyTemplateController.java new file mode 100644 index 0000000..6349e1b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/NotifyTemplateController.java @@ -0,0 +1,91 @@ +package com.win.module.system.controller.admin.notify; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.notify.vo.template.NotifyTemplatePageReqVO; +import com.win.module.system.controller.admin.notify.vo.template.NotifyTemplateRespVO; +import com.win.module.system.controller.admin.notify.vo.template.NotifyTemplateSaveReqVO; +import com.win.module.system.controller.admin.notify.vo.template.NotifyTemplateSendReqVO; +import com.win.module.system.dal.dataobject.notify.NotifyTemplateDO; +import com.win.module.system.service.notify.NotifySendService; +import com.win.module.system.service.notify.NotifyTemplateService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 站内信模版") +@RestController +@RequestMapping("/system/notify-template") +@Validated +public class NotifyTemplateController { + + @Resource + private NotifyTemplateService notifyTemplateService; + + @Resource + private NotifySendService notifySendService; + + @PostMapping("/create") + @Operation(summary = "创建站内信模版") + @PreAuthorize("@ss.hasPermission('system:notify-template:create')") + public CommonResult createNotifyTemplate(@Valid @RequestBody NotifyTemplateSaveReqVO createReqVO) { + return success(notifyTemplateService.createNotifyTemplate(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新站内信模版") + @PreAuthorize("@ss.hasPermission('system:notify-template:update')") + public CommonResult updateNotifyTemplate(@Valid @RequestBody NotifyTemplateSaveReqVO updateReqVO) { + notifyTemplateService.updateNotifyTemplate(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除站内信模版") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('system:notify-template:delete')") + public CommonResult deleteNotifyTemplate(@RequestParam("id") Long id) { + notifyTemplateService.deleteNotifyTemplate(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得站内信模版") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:notify-template:query')") + public CommonResult getNotifyTemplate(@RequestParam("id") Long id) { + NotifyTemplateDO template = notifyTemplateService.getNotifyTemplate(id); + return success(BeanUtils.toBean(template, NotifyTemplateRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得站内信模版分页") + @PreAuthorize("@ss.hasPermission('system:notify-template:query')") + public CommonResult> getNotifyTemplatePage(@Valid NotifyTemplatePageReqVO pageVO) { + PageResult pageResult = notifyTemplateService.getNotifyTemplatePage(pageVO); + return success(BeanUtils.toBean(pageResult, NotifyTemplateRespVO.class)); + } + + @PostMapping("/send-notify") + @Operation(summary = "发送站内信") + @PreAuthorize("@ss.hasPermission('system:notify-template:send-notify')") + public CommonResult sendNotify(@Valid @RequestBody NotifyTemplateSendReqVO sendReqVO) { + if (UserTypeEnum.MEMBER.getValue().equals(sendReqVO.getUserType())) { + return success(notifySendService.sendSingleNotifyToMember(sendReqVO.getUserId(), + sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams())); + } else { + return success(notifySendService.sendSingleNotifyToAdmin(sendReqVO.getUserId(), + sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams())); + } + } +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/message/NotifyMessageMyPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/message/NotifyMessageMyPageReqVO.java new file mode 100644 index 0000000..277707d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/message/NotifyMessageMyPageReqVO.java @@ -0,0 +1,27 @@ +package com.win.module.system.controller.admin.notify.vo.message; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 站内信分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class NotifyMessageMyPageReqVO extends PageParam { + + @Schema(description = "是否已读", example = "true") + private Boolean readStatus; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/message/NotifyMessagePageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/message/NotifyMessagePageReqVO.java new file mode 100644 index 0000000..a7c46b5 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/message/NotifyMessagePageReqVO.java @@ -0,0 +1,36 @@ +package com.win.module.system.controller.admin.notify.vo.message; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 站内信分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class NotifyMessagePageReqVO extends PageParam { + + @Schema(description = "用户编号", example = "25025") + private Long userId; + + @Schema(description = "用户类型", example = "1") + private Integer userType; + + @Schema(description = "模板编码", example = "test_01") + private String templateCode; + + @Schema(description = "模版类型", example = "2") + private Integer templateType; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/message/NotifyMessageRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/message/NotifyMessageRespVO.java new file mode 100644 index 0000000..aa906d5 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/message/NotifyMessageRespVO.java @@ -0,0 +1,49 @@ +package com.win.module.system.controller.admin.notify.vo.message; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Map; + +@Schema(description = "管理后台 - 站内信 Response VO") +@Data +public class NotifyMessageRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25025") + private Long userId; + + @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Byte userType; + + @Schema(description = "模版编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13013") + private Long templateId; + + @Schema(description = "模板编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "test_01") + private String templateCode; + + @Schema(description = "模版发送人名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + private String templateNickname; + + @Schema(description = "模版内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试内容") + private String templateContent; + + @Schema(description = "模版类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer templateType; + + @Schema(description = "模版参数", requiredMode = Schema.RequiredMode.REQUIRED) + private Map templateParams; + + @Schema(description = "是否已读", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + private Boolean readStatus; + + @Schema(description = "阅读时间") + private LocalDateTime readTime; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplatePageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplatePageReqVO.java new file mode 100644 index 0000000..94ebc58 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplatePageReqVO.java @@ -0,0 +1,33 @@ +package com.win.module.system.controller.admin.notify.vo.template; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 站内信模版分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class NotifyTemplatePageReqVO extends PageParam { + + @Schema(description = "模版编码", example = "test_01") + private String code; + + @Schema(description = "模版名称", example = "我是名称") + private String name; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举类", example = "1") + private Integer status; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplateRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplateRespVO.java new file mode 100644 index 0000000..3d8632a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplateRespVO.java @@ -0,0 +1,43 @@ +package com.win.module.system.controller.admin.notify.vo.template; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 站内信模版 Response VO") +@Data +public class NotifyTemplateRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "模版名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试模版") + private String name; + + @Schema(description = "模版编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "SEND_TEST") + private String code; + + @Schema(description = "模版类型,对应 system_notify_template_type 字典", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer type; + + @Schema(description = "发送人名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "土豆") + private String nickname; + + @Schema(description = "模版内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是模版内容") + private String content; + + @Schema(description = "参数数组", example = "name,code") + private List params; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; + + @Schema(description = "备注", example = "我是备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplateSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplateSaveReqVO.java new file mode 100644 index 0000000..69d3b0b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplateSaveReqVO.java @@ -0,0 +1,46 @@ +package com.win.module.system.controller.admin.notify.vo.template; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.validation.InEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 站内信模版创建/修改 Request VO") +@Data +public class NotifyTemplateSaveReqVO { + + @Schema(description = "ID", example = "1024") + private Long id; + + @Schema(description = "模版名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "测试模版") + @NotEmpty(message = "模版名称不能为空") + private String name; + + @Schema(description = "模版编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "SEND_TEST") + @NotNull(message = "模版编码不能为空") + private String code; + + @Schema(description = "模版类型,对应 system_notify_template_type 字典", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "模版类型不能为空") + private Integer type; + + @Schema(description = "发送人名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "土豆") + @NotEmpty(message = "发送人名称不能为空") + private String nickname; + + @Schema(description = "模版内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是模版内容") + @NotEmpty(message = "模版内容不能为空") + private String content; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + @InEnum(value = CommonStatusEnum.class, message = "状态必须是 {value}") + private Integer status; + + @Schema(description = "备注", example = "我是备注") + private String remark; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplateSendReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplateSendReqVO.java new file mode 100644 index 0000000..7d63715 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/notify/vo/template/NotifyTemplateSendReqVO.java @@ -0,0 +1,29 @@ +package com.win.module.system.controller.admin.notify.vo.template; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.util.Map; + +@Schema(description = "管理后台 - 站内信模板的发送 Request VO") +@Data +public class NotifyTemplateSendReqVO { + + @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "01") + @NotNull(message = "用户id不能为空") + private Long userId; + + @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "用户类型不能为空") + private Integer userType; + + @Schema(description = "模板编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "01") + @NotEmpty(message = "模板编码不能为空") + private String templateCode; + + @Schema(description = "模板参数") + private Map templateParams; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2ClientController.http b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2ClientController.http new file mode 100644 index 0000000..dcf60a6 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2ClientController.http @@ -0,0 +1,23 @@ +### 请求 /login 接口 => 成功 +POST {{baseUrl}}/system/oauth2-client/create +Content-Type: application/json +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} + +{ + "id": "1", + "secret": "admin123", + "name": "芋道源码", + "logo": "https://www.iocoder.cn/images/favicon.ico", + "description": "我是描述", + "status": 0, + "accessTokenValiditySeconds": 180, + "refreshTokenValiditySeconds": 8640, + "redirectUris": ["https://www.iocoder.cn"], + "autoApprove": true, + "authorizedGrantTypes": ["password"], + "scopes": ["user_info"], + "authorities": ["system:user:query"], + "resource_ids": ["1024"], + "additionalInformation": "{}" +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2ClientController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2ClientController.java new file mode 100644 index 0000000..50349b8 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2ClientController.java @@ -0,0 +1,73 @@ +package com.win.module.system.controller.admin.oauth2; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.oauth2.vo.client.OAuth2ClientPageReqVO; +import com.win.module.system.controller.admin.oauth2.vo.client.OAuth2ClientRespVO; +import com.win.module.system.controller.admin.oauth2.vo.client.OAuth2ClientSaveReqVO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2ClientDO; +import com.win.module.system.service.oauth2.OAuth2ClientService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - OAuth2 客户端") +@RestController +@RequestMapping("/system/oauth2-client") +@Validated +public class OAuth2ClientController { + + @Resource + private OAuth2ClientService oAuth2ClientService; + + @PostMapping("/create") + @Operation(summary = "创建 OAuth2 客户端") + @PreAuthorize("@ss.hasPermission('system:oauth2-client:create')") + public CommonResult createOAuth2Client(@Valid @RequestBody OAuth2ClientSaveReqVO createReqVO) { + return success(oAuth2ClientService.createOAuth2Client(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新 OAuth2 客户端") + @PreAuthorize("@ss.hasPermission('system:oauth2-client:update')") + public CommonResult updateOAuth2Client(@Valid @RequestBody OAuth2ClientSaveReqVO updateReqVO) { + oAuth2ClientService.updateOAuth2Client(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除 OAuth2 客户端") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('system:oauth2-client:delete')") + public CommonResult deleteOAuth2Client(@RequestParam("id") Long id) { + oAuth2ClientService.deleteOAuth2Client(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得 OAuth2 客户端") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:oauth2-client:query')") + public CommonResult getOAuth2Client(@RequestParam("id") Long id) { + OAuth2ClientDO client = oAuth2ClientService.getOAuth2Client(id); + return success(BeanUtils.toBean(client, OAuth2ClientRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得 OAuth2 客户端分页") + @PreAuthorize("@ss.hasPermission('system:oauth2-client:query')") + public CommonResult> getOAuth2ClientPage(@Valid OAuth2ClientPageReqVO pageVO) { + PageResult pageResult = oAuth2ClientService.getOAuth2ClientPage(pageVO); + return success(BeanUtils.toBean(pageResult, OAuth2ClientRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2OpenController.http b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2OpenController.http new file mode 100644 index 0000000..725a5d4 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2OpenController.http @@ -0,0 +1,54 @@ +### 请求 /system/oauth2/authorize 接口 => 成功 +GET {{baseUrl}}/system/oauth2/authorize?clientId=default +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} + +### 请求 /system/oauth2/authorize + token 接口 => 成功 +POST {{baseUrl}}/system/oauth2/authorize +Content-Type: application/x-www-form-urlencoded +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} + +response_type=token&client_id=default&scope={"user.read": true}&redirect_uri=https://www.iocoder.cn&auto_approve=true + +### 请求 /system/oauth2/authorize + code 接口 => 成功 +POST {{baseUrl}}/system/oauth2/authorize +Content-Type: application/x-www-form-urlencoded +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} + +response_type=code&client_id=default&scope={"user.read": true}&redirect_uri=https://www.iocoder.cn&auto_approve=false + +### 请求 /system/oauth2/token + code 接口 => 成功 +POST {{baseUrl}}/system/oauth2/token +Content-Type: application/x-www-form-urlencoded +Authorization: Basic ZGVmYXVsdDphZG1pbjEyMw== +tenant-id: {{adminTenentId}} + +grant_type=authorization_code&redirect_uri=https://www.iocoder.cn&code=189956c07a174588a97157eabef2f93a + +### 请求 /system/oauth2/token + password 接口 => 成功 +POST {{baseUrl}}/system/oauth2/token +Content-Type: application/x-www-form-urlencoded +Authorization: Basic ZGVmYXVsdDphZG1pbjEyMw== +tenant-id: {{adminTenentId}} + +grant_type=password&username=admin&password=admin123&scope=user.read + +### 请求 /system/oauth2/token + refresh_token 接口 => 成功 +POST {{baseUrl}}/system/oauth2/token +Content-Type: application/x-www-form-urlencoded +Authorization: Basic ZGVmYXVsdDphZG1pbjEyMw== +tenant-id: {{adminTenentId}} + +grant_type=refresh_token&refresh_token=00895465d6994f72a9d926ceeed0f588 + +### 请求 /system/oauth2/token + DELETE 接口 => 成功 +DELETE {{baseUrl}}/system/oauth2/token?token=ca8a188f464441d6949c51493a2b7596 +Authorization: Basic ZGVmYXVsdDphZG1pbjEyMw== +tenant-id: {{adminTenentId}} + +### 请求 /system/oauth2/check-token 接口 => 成功 +POST {{baseUrl}}/system/oauth2/check-token?token=620d307c5b4148df8a98dd6c6c547106 +Authorization: Basic ZGVmYXVsdDphZG1pbjEyMw== +tenant-id: {{adminTenentId}} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2OpenController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2OpenController.java new file mode 100644 index 0000000..9e2e6c0 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2OpenController.java @@ -0,0 +1,297 @@ +package com.win.module.system.controller.admin.oauth2; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.http.HttpUtils; +import com.win.framework.common.util.json.JsonUtils; +import com.win.module.system.controller.admin.oauth2.vo.open.OAuth2OpenAccessTokenRespVO; +import com.win.module.system.controller.admin.oauth2.vo.open.OAuth2OpenAuthorizeInfoRespVO; +import com.win.module.system.controller.admin.oauth2.vo.open.OAuth2OpenCheckTokenRespVO; +import com.win.module.system.convert.oauth2.OAuth2OpenConvert; +import com.win.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2ApproveDO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2ClientDO; +import com.win.module.system.enums.oauth2.OAuth2GrantTypeEnum; +import com.win.module.system.service.oauth2.OAuth2ApproveService; +import com.win.module.system.service.oauth2.OAuth2ClientService; +import com.win.module.system.service.oauth2.OAuth2GrantService; +import com.win.module.system.service.oauth2.OAuth2TokenService; +import com.win.module.system.util.oauth2.OAuth2Utils; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; +import jakarta.servlet.http.HttpServletRequest; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static com.win.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST; +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception0; +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.common.util.collection.CollectionUtils.convertList; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +/** + * 提供给外部应用调用为主 + * + * 一般来说,管理后台的 /system-api/* 是不直接提供给外部应用使用,主要是外部应用能够访问的数据与接口是有限的,而管理后台的 RBAC 无法很好的控制。 + * 参考大量的开放平台,都是独立的一套 OpenAPI,对应到【本系统】就是在 Controller 下新建 open 包,实现 /open-api/* 接口,然后通过 scope 进行控制。 + * 另外,一个公司如果有多个管理后台,它们 client_id 产生的 access token 相互之间是无法互通的,即无法访问它们系统的 API 接口,直到两个 client_id 产生信任授权。 + * + * 考虑到【本系统】暂时不想做的过于复杂,默认只有获取到 access token 之后,可以访问【本系统】管理后台的 /system-api/* 所有接口,除非手动添加 scope 控制。 + * scope 的使用示例,可见 {@link OAuth2UserController} 类 + * + * @author 芋道源码 + */ +@Tag(name = "管理后台 - OAuth2.0 授权") +@RestController +@RequestMapping("/system/oauth2") +@Validated +@Slf4j +public class OAuth2OpenController { + + @Resource + private OAuth2GrantService oauth2GrantService; + @Resource + private OAuth2ClientService oauth2ClientService; + @Resource + private OAuth2ApproveService oauth2ApproveService; + @Resource + private OAuth2TokenService oauth2TokenService; + + /** + * 对应 Spring Security OAuth 的 TokenEndpoint 类的 postAccessToken 方法 + * + * 授权码 authorization_code 模式时:code + redirectUri + state 参数 + * 密码 password 模式时:username + password + scope 参数 + * 刷新 refresh_token 模式时:refreshToken 参数 + * 客户端 client_credentials 模式:scope 参数 + * 简化 implicit 模式时:不支持 + * + * 注意,默认需要传递 client_id + client_secret 参数 + */ + @PostMapping("/token") + @PermitAll + @Operation(summary = "获得访问令牌", description = "适合 code 授权码模式,或者 implicit 简化模式;在 sso.vue 单点登录界面被【获取】调用") + @Parameters({ + @Parameter(name = "grant_type", required = true, description = "授权类型", example = "code"), + @Parameter(name = "code", description = "授权范围", example = "userinfo.read"), + @Parameter(name = "redirect_uri", description = "重定向 URI", example = "https://www.iocoder.cn"), + @Parameter(name = "state", description = "状态", example = "1"), + @Parameter(name = "username", example = "tudou"), + @Parameter(name = "password", example = "cai"), // 多个使用空格分隔 + @Parameter(name = "scope", example = "user_info"), + @Parameter(name = "refresh_token", example = "123424233"), + }) + public CommonResult postAccessToken(HttpServletRequest request, + @RequestParam("grant_type") String grantType, + @RequestParam(value = "code", required = false) String code, // 授权码模式 + @RequestParam(value = "redirect_uri", required = false) String redirectUri, // 授权码模式 + @RequestParam(value = "state", required = false) String state, // 授权码模式 + @RequestParam(value = "username", required = false) String username, // 密码模式 + @RequestParam(value = "password", required = false) String password, // 密码模式 + @RequestParam(value = "scope", required = false) String scope, // 密码模式 + @RequestParam(value = "refresh_token", required = false) String refreshToken) { // 刷新模式 + List scopes = OAuth2Utils.buildScopes(scope); + // 1.1 校验授权类型 + OAuth2GrantTypeEnum grantTypeEnum = OAuth2GrantTypeEnum.getByGranType(grantType); + if (grantTypeEnum == null) { + throw exception0(BAD_REQUEST.getCode(), StrUtil.format("未知授权类型({})", grantType)); + } + if (grantTypeEnum == OAuth2GrantTypeEnum.IMPLICIT) { + throw exception0(BAD_REQUEST.getCode(), "Token 接口不支持 implicit 授权模式"); + } + + // 1.2 校验客户端 + String[] clientIdAndSecret = obtainBasicAuthorization(request); + OAuth2ClientDO client = oauth2ClientService.validOAuthClientFromCache(clientIdAndSecret[0], clientIdAndSecret[1], + grantType, scopes, redirectUri); + + // 2. 根据授权模式,获取访问令牌 + OAuth2AccessTokenDO accessTokenDO; + switch (grantTypeEnum) { + case AUTHORIZATION_CODE: + accessTokenDO = oauth2GrantService.grantAuthorizationCodeForAccessToken(client.getClientId(), code, redirectUri, state); + break; + case PASSWORD: + accessTokenDO = oauth2GrantService.grantPassword(username, password, client.getClientId(), scopes); + break; + case CLIENT_CREDENTIALS: + accessTokenDO = oauth2GrantService.grantClientCredentials(client.getClientId(), scopes); + break; + case REFRESH_TOKEN: + accessTokenDO = oauth2GrantService.grantRefreshToken(refreshToken, client.getClientId()); + break; + default: + throw new IllegalArgumentException("未知授权类型:" + grantType); + } + Assert.notNull(accessTokenDO, "访问令牌不能为空"); // 防御性检查 + return success(OAuth2OpenConvert.INSTANCE.convert(accessTokenDO)); + } + + @DeleteMapping("/token") + @PermitAll + @Operation(summary = "删除访问令牌") + @Parameter(name = "token", required = true, description = "访问令牌", example = "biu") + public CommonResult revokeToken(HttpServletRequest request, + @RequestParam("token") String token) { + // 校验客户端 + String[] clientIdAndSecret = obtainBasicAuthorization(request); + OAuth2ClientDO client = oauth2ClientService.validOAuthClientFromCache(clientIdAndSecret[0], clientIdAndSecret[1], + null, null, null); + + // 删除访问令牌 + return success(oauth2GrantService.revokeToken(client.getClientId(), token)); + } + + /** + * 对应 Spring Security OAuth 的 CheckTokenEndpoint 类的 checkToken 方法 + */ + @PostMapping("/check-token") + @PermitAll + @Operation(summary = "校验访问令牌") + @Parameter(name = "token", required = true, description = "访问令牌", example = "biu") + public CommonResult checkToken(HttpServletRequest request, + @RequestParam("token") String token) { + // 校验客户端 + String[] clientIdAndSecret = obtainBasicAuthorization(request); + oauth2ClientService.validOAuthClientFromCache(clientIdAndSecret[0], clientIdAndSecret[1], + null, null, null); + + // 校验令牌 + OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.checkAccessToken(token); + Assert.notNull(accessTokenDO, "访问令牌不能为空"); // 防御性检查 + return success(OAuth2OpenConvert.INSTANCE.convert2(accessTokenDO)); + } + + /** + * 对应 Spring Security OAuth 的 AuthorizationEndpoint 类的 authorize 方法 + */ + @GetMapping("/authorize") + @Operation(summary = "获得授权信息", description = "适合 code 授权码模式,或者 implicit 简化模式;在 sso.vue 单点登录界面被【获取】调用") + @Parameter(name = "clientId", required = true, description = "客户端编号", example = "tudou") + public CommonResult authorize(@RequestParam("clientId") String clientId) { + // 0. 校验用户已经登录。通过 Spring Security 实现 + + // 1. 获得 Client 客户端的信息 + OAuth2ClientDO client = oauth2ClientService.validOAuthClientFromCache(clientId); + // 2. 获得用户已经授权的信息 + List approves = oauth2ApproveService.getApproveList(getLoginUserId(), getUserType(), clientId); + // 拼接返回 + return success(OAuth2OpenConvert.INSTANCE.convert(client, approves)); + } + + /** + * 对应 Spring Security OAuth 的 AuthorizationEndpoint 类的 approveOrDeny 方法 + * + * 场景一:【自动授权 autoApprove = true】 + * 刚进入 sso.vue 界面,调用该接口,用户历史已经给该应用做过对应的授权,或者 OAuth2Client 支持该 scope 的自动授权 + * 场景二:【手动授权 autoApprove = false】 + * 在 sso.vue 界面,用户选择好 scope 授权范围,调用该接口,进行授权。此时,approved 为 true 或者 false + * + * 因为前后端分离,Axios 无法很好的处理 302 重定向,所以和 Spring Security OAuth 略有不同,返回结果是重定向的 URL,剩余交给前端处理 + */ + @PostMapping("/authorize") + @Operation(summary = "申请授权", description = "适合 code 授权码模式,或者 implicit 简化模式;在 sso.vue 单点登录界面被【提交】调用") + @Parameters({ + @Parameter(name = "response_type", required = true, description = "响应类型", example = "code"), + @Parameter(name = "client_id", required = true, description = "客户端编号", example = "tudou"), + @Parameter(name = "scope", description = "授权范围", example = "userinfo.read"), // 使用 Map 格式,Spring MVC 暂时不支持这么接收参数 + @Parameter(name = "redirect_uri", required = true, description = "重定向 URI", example = "https://www.iocoder.cn"), + @Parameter(name = "auto_approve", required = true, description = "用户是否接受", example = "true"), + @Parameter(name = "state", example = "1") + }) + public CommonResult approveOrDeny(@RequestParam("response_type") String responseType, + @RequestParam("client_id") String clientId, + @RequestParam(value = "scope", required = false) String scope, + @RequestParam("redirect_uri") String redirectUri, + @RequestParam(value = "auto_approve") Boolean autoApprove, + @RequestParam(value = "state", required = false) String state) { + @SuppressWarnings("unchecked") + Map scopes = JsonUtils.parseObject(scope, Map.class); + scopes = ObjectUtil.defaultIfNull(scopes, Collections.emptyMap()); + // 0. 校验用户已经登录。通过 Spring Security 实现 + + // 1.1 校验 responseType 是否满足 code 或者 token 值 + OAuth2GrantTypeEnum grantTypeEnum = getGrantTypeEnum(responseType); + // 1.2 校验 redirectUri 重定向域名是否合法 + 校验 scope 是否在 Client 授权范围内 + OAuth2ClientDO client = oauth2ClientService.validOAuthClientFromCache(clientId, null, + grantTypeEnum.getGrantType(), scopes.keySet(), redirectUri); + + // 2.1 假设 approved 为 null,说明是场景一 + if (Boolean.TRUE.equals(autoApprove)) { + // 如果无法自动授权通过,则返回空 url,前端不进行跳转 + if (!oauth2ApproveService.checkForPreApproval(getLoginUserId(), getUserType(), clientId, scopes.keySet())) { + return success(null); + } + } else { // 2.2 假设 approved 非 null,说明是场景二 + // 如果计算后不通过,则跳转一个错误链接 + if (!oauth2ApproveService.updateAfterApproval(getLoginUserId(), getUserType(), clientId, scopes)) { + return success(OAuth2Utils.buildUnsuccessfulRedirect(redirectUri, responseType, state, + "access_denied", "User denied access")); + } + } + + // 3.1 如果是 code 授权码模式,则发放 code 授权码,并重定向 + List approveScopes = convertList(scopes.entrySet(), Map.Entry::getKey, Map.Entry::getValue); + if (grantTypeEnum == OAuth2GrantTypeEnum.AUTHORIZATION_CODE) { + return success(getAuthorizationCodeRedirect(getLoginUserId(), client, approveScopes, redirectUri, state)); + } + // 3.2 如果是 token 则是 implicit 简化模式,则发送 accessToken 访问令牌,并重定向 + return success(getImplicitGrantRedirect(getLoginUserId(), client, approveScopes, redirectUri, state)); + } + + private static OAuth2GrantTypeEnum getGrantTypeEnum(String responseType) { + if (StrUtil.equals(responseType, "code")) { + return OAuth2GrantTypeEnum.AUTHORIZATION_CODE; + } + if (StrUtil.equalsAny(responseType, "token")) { + return OAuth2GrantTypeEnum.IMPLICIT; + } + throw exception0(BAD_REQUEST.getCode(), "response_type 参数值只允许 code 和 token"); + } + + private String getImplicitGrantRedirect(Long userId, OAuth2ClientDO client, + List scopes, String redirectUri, String state) { + // 1. 创建 access token 访问令牌 + OAuth2AccessTokenDO accessTokenDO = oauth2GrantService.grantImplicit(userId, getUserType(), client.getClientId(), scopes); + Assert.notNull(accessTokenDO, "访问令牌不能为空"); // 防御性检查 + // 2. 拼接重定向的 URL + // noinspection unchecked + return OAuth2Utils.buildImplicitRedirectUri(redirectUri, accessTokenDO.getAccessToken(), state, accessTokenDO.getExpiresTime(), + scopes, JsonUtils.parseObject(client.getAdditionalInformation(), Map.class)); + } + + private String getAuthorizationCodeRedirect(Long userId, OAuth2ClientDO client, + List scopes, String redirectUri, String state) { + // 1. 创建 code 授权码 + String authorizationCode = oauth2GrantService.grantAuthorizationCodeForCode(userId, getUserType(), client.getClientId(), scopes, + redirectUri, state); + // 2. 拼接重定向的 URL + return OAuth2Utils.buildAuthorizationCodeRedirectUri(redirectUri, authorizationCode, state); + } + + private Integer getUserType() { + return UserTypeEnum.ADMIN.getValue(); + } + + private String[] obtainBasicAuthorization(HttpServletRequest request) { + String[] clientIdAndSecret = HttpUtils.obtainBasicAuthorization(request); + if (ArrayUtil.isEmpty(clientIdAndSecret) || clientIdAndSecret.length != 2) { + throw exception0(BAD_REQUEST.getCode(), "client_id 或 client_secret 未正确传递"); + } + return clientIdAndSecret; + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2TokenController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2TokenController.java new file mode 100644 index 0000000..2c8e013 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2TokenController.java @@ -0,0 +1,50 @@ +package com.win.module.system.controller.admin.oauth2; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.oauth2.vo.token.OAuth2AccessTokenPageReqVO; +import com.win.module.system.controller.admin.oauth2.vo.token.OAuth2AccessTokenRespVO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; +import com.win.module.system.enums.logger.LoginLogTypeEnum; +import com.win.module.system.service.auth.AdminAuthService; +import com.win.module.system.service.oauth2.OAuth2TokenService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - OAuth2.0 令牌") +@RestController +@RequestMapping("/system/oauth2-token") +public class OAuth2TokenController { + + @Resource + private OAuth2TokenService oauth2TokenService; + @Resource + private AdminAuthService authService; + + @GetMapping("/page") + @Operation(summary = "获得访问令牌分页", description = "只返回有效期内的") + @PreAuthorize("@ss.hasPermission('system:oauth2-token:page')") + public CommonResult> getAccessTokenPage(@Valid OAuth2AccessTokenPageReqVO reqVO) { + PageResult pageResult = oauth2TokenService.getAccessTokenPage(reqVO); + return success(BeanUtils.toBean(pageResult, OAuth2AccessTokenRespVO.class)); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除访问令牌") + @Parameter(name = "accessToken", description = "访问令牌", required = true, example = "tudou") + @PreAuthorize("@ss.hasPermission('system:oauth2-token:delete')") + public CommonResult deleteAccessToken(@RequestParam("accessToken") String accessToken) { + authService.logout(accessToken, LoginLogTypeEnum.LOGOUT_DELETE.getType()); + return success(true); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2UserController.http b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2UserController.http new file mode 100644 index 0000000..13c8545 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2UserController.http @@ -0,0 +1,14 @@ +### 请求 /system/oauth2/user/get 接口 => 成功 +GET {{baseUrl}}/system/oauth2/user/get +Authorization: Bearer 47f9c74ec11041f193b777ebb95c3b0d +tenant-id: {{adminTenentId}} + +### 请求 /system/oauth2/user/update 接口 => 成功 +PUT {{baseUrl}}/system/oauth2/user/update +Content-Type: application/json +Authorization: Bearer 47f9c74ec11041f193b777ebb95c3b0d +tenant-id: {{adminTenentId}} + +{ + "nickname": "芋道源码" +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2UserController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2UserController.java new file mode 100644 index 0000000..0d49945 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/OAuth2UserController.java @@ -0,0 +1,81 @@ +package com.win.module.system.controller.admin.oauth2; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.oauth2.vo.user.OAuth2UserInfoRespVO; +import com.win.module.system.controller.admin.oauth2.vo.user.OAuth2UserUpdateReqVO; +import com.win.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import com.win.module.system.dal.dataobject.dept.DeptDO; +import com.win.module.system.dal.dataobject.dept.PostDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.module.system.service.dept.DeptService; +import com.win.module.system.service.dept.PostService; +import com.win.module.system.service.user.AdminUserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +/** + * 提供给外部应用调用为主 + * + * 1. 在 getUserInfo 方法上,添加 @PreAuthorize("@ss.hasScope('user.read')") 注解,声明需要满足 scope = user.read + * 2. 在 updateUserInfo 方法上,添加 @PreAuthorize("@ss.hasScope('user.write')") 注解,声明需要满足 scope = user.write + * + * @author 芋道源码 + */ +@Tag(name = "管理后台 - OAuth2.0 用户") +@RestController +@RequestMapping("/system/oauth2/user") +@Validated +@Slf4j +public class OAuth2UserController { + + @Resource + private AdminUserService userService; + @Resource + private DeptService deptService; + @Resource + private PostService postService; + + @GetMapping("/get") + @Operation(summary = "获得用户基本信息") + @PreAuthorize("@ss.hasScope('user.read')") // + public CommonResult getUserInfo() { + // 获得用户基本信息 + AdminUserDO user = userService.getUser(getLoginUserId()); + OAuth2UserInfoRespVO resp = BeanUtils.toBean(user, OAuth2UserInfoRespVO.class); + // 获得部门信息 + if (user.getDeptId() != null) { + DeptDO dept = deptService.getDept(user.getDeptId()); + resp.setDept(BeanUtils.toBean(dept, OAuth2UserInfoRespVO.Dept.class)); + } + // 获得岗位信息 + if (CollUtil.isNotEmpty(user.getPostIds())) { + List posts = postService.getPostList(user.getPostIds()); + resp.setPosts(BeanUtils.toBean(posts, OAuth2UserInfoRespVO.Post.class)); + } + return success(resp); + } + + @PutMapping("/update") + @Operation(summary = "更新用户基本信息") + @PreAuthorize("@ss.hasScope('user.write')") + public CommonResult updateUserInfo(@Valid @RequestBody OAuth2UserUpdateReqVO reqVO) { + // 这里将 UserProfileUpdateReqVO =》UserProfileUpdateReqVO 对象,实现接口的复用。 + // 主要是,AdminUserService 没有自己的 BO 对象,所以复用只能这么做 + userService.updateUserProfile(getLoginUserId(), BeanUtils.toBean(reqVO, UserProfileUpdateReqVO.class)); + return success(true); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/client/OAuth2ClientPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/client/OAuth2ClientPageReqVO.java new file mode 100644 index 0000000..6c1c2b4 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/client/OAuth2ClientPageReqVO.java @@ -0,0 +1,21 @@ +package com.win.module.system.controller.admin.oauth2.vo.client; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Schema(description = "管理后台 - OAuth2 客户端分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class OAuth2ClientPageReqVO extends PageParam { + + @Schema(description = "应用名,模糊匹配", example = "土豆") + private String name; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举", example = "1") + private Integer status; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/client/OAuth2ClientRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/client/OAuth2ClientRespVO.java new file mode 100644 index 0000000..3dfea77 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/client/OAuth2ClientRespVO.java @@ -0,0 +1,64 @@ +package com.win.module.system.controller.admin.oauth2.vo.client; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - OAuth2 客户端 Response VO") +@Data +public class OAuth2ClientRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "客户端编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "tudou") + private String clientId; + + @Schema(description = "客户端密钥", requiredMode = Schema.RequiredMode.REQUIRED, example = "fan") + private String secret; + + @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "土豆") + private String name; + + @Schema(description = "应用图标", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xx.png") + private String logo; + + @Schema(description = "应用描述", example = "我是一个应用") + private String description; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; + + @Schema(description = "访问令牌的有效期", requiredMode = Schema.RequiredMode.REQUIRED, example = "8640") + private Integer accessTokenValiditySeconds; + + @Schema(description = "刷新令牌的有效期", requiredMode = Schema.RequiredMode.REQUIRED, example = "8640000") + private Integer refreshTokenValiditySeconds; + + @Schema(description = "可重定向的 URI 地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn") + private List redirectUris; + + @Schema(description = "授权类型,参见 OAuth2GrantTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "password") + private List authorizedGrantTypes; + + @Schema(description = "授权范围", example = "user_info") + private List scopes; + + @Schema(description = "自动通过的授权范围", example = "user_info") + private List autoApproveScopes; + + @Schema(description = "权限", example = "system:user:query") + private List authorities; + + @Schema(description = "资源", example = "1024") + private List resourceIds; + + @Schema(description = "附加信息", example = "{yunai: true}") + private String additionalInformation; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/client/OAuth2ClientSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/client/OAuth2ClientSaveReqVO.java new file mode 100644 index 0000000..507b53e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/client/OAuth2ClientSaveReqVO.java @@ -0,0 +1,81 @@ +package com.win.module.system.controller.admin.oauth2.vo.client; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.util.json.JsonUtils; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +import jakarta.validation.constraints.AssertTrue; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.util.List; + +@Schema(description = "管理后台 - OAuth2 客户端创建/修改 Request VO") +@Data +public class OAuth2ClientSaveReqVO { + + @Schema(description = "编号", example = "1024") + private Long id; + + @Schema(description = "客户端编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "tudou") + @NotNull(message = "客户端编号不能为空") + private String clientId; + + @Schema(description = "客户端密钥", requiredMode = Schema.RequiredMode.REQUIRED, example = "fan") + @NotNull(message = "客户端密钥不能为空") + private String secret; + + @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "土豆") + @NotNull(message = "应用名不能为空") + private String name; + + @Schema(description = "应用图标", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xx.png") + @NotNull(message = "应用图标不能为空") + @URL(message = "应用图标的地址不正确") + private String logo; + + @Schema(description = "应用描述", example = "我是一个应用") + private String description; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + private Integer status; + + @Schema(description = "访问令牌的有效期", requiredMode = Schema.RequiredMode.REQUIRED, example = "8640") + @NotNull(message = "访问令牌的有效期不能为空") + private Integer accessTokenValiditySeconds; + + @Schema(description = "刷新令牌的有效期", requiredMode = Schema.RequiredMode.REQUIRED, example = "8640000") + @NotNull(message = "刷新令牌的有效期不能为空") + private Integer refreshTokenValiditySeconds; + + @Schema(description = "可重定向的 URI 地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn") + @NotNull(message = "可重定向的 URI 地址不能为空") + private List<@NotEmpty(message = "重定向的 URI 不能为空") @URL(message = "重定向的 URI 格式不正确") String> redirectUris; + + @Schema(description = "授权类型,参见 OAuth2GrantTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "password") + @NotNull(message = "授权类型不能为空") + private List authorizedGrantTypes; + + @Schema(description = "授权范围", example = "user_info") + private List scopes; + + @Schema(description = "自动通过的授权范围", example = "user_info") + private List autoApproveScopes; + + @Schema(description = "权限", example = "system:user:query") + private List authorities; + + @Schema(description = "资源", example = "1024") + private List resourceIds; + + @Schema(description = "附加信息", example = "{yunai: true}") + private String additionalInformation; + + @AssertTrue(message = "附加信息必须是 JSON 格式") + public boolean isAdditionalInformationJson() { + return StrUtil.isEmpty(additionalInformation) || JsonUtils.isJson(additionalInformation); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/open/OAuth2OpenAccessTokenRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/open/OAuth2OpenAccessTokenRespVO.java new file mode 100644 index 0000000..24bd50a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/open/OAuth2OpenAccessTokenRespVO.java @@ -0,0 +1,34 @@ +package com.win.module.system.controller.admin.oauth2.vo.open; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Schema(description = "管理后台 - 【开放接口】访问令牌 Response VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OAuth2OpenAccessTokenRespVO { + + @Schema(description = "访问令牌", requiredMode = Schema.RequiredMode.REQUIRED, example = "tudou") + @JsonProperty("access_token") + private String accessToken; + + @Schema(description = "刷新令牌", requiredMode = Schema.RequiredMode.REQUIRED, example = "nice") + @JsonProperty("refresh_token") + private String refreshToken; + + @Schema(description = "令牌类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "bearer") + @JsonProperty("token_type") + private String tokenType; + + @Schema(description = "过期时间,单位:秒", requiredMode = Schema.RequiredMode.REQUIRED, example = "42430") + @JsonProperty("expires_in") + private Long expiresIn; + + @Schema(description = "授权范围,如果多个授权范围,使用空格分隔", example = "user_info") + private String scope; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/open/OAuth2OpenAuthorizeInfoRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/open/OAuth2OpenAuthorizeInfoRespVO.java new file mode 100644 index 0000000..bdb8a45 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/open/OAuth2OpenAuthorizeInfoRespVO.java @@ -0,0 +1,38 @@ +package com.win.module.system.controller.admin.oauth2.vo.open; + +import com.win.framework.common.core.KeyValue; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Schema(description = "管理后台 - 授权页的信息 Response VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OAuth2OpenAuthorizeInfoRespVO { + + /** + * 客户端 + */ + private Client client; + + @Schema(description = "scope 的选中信息,使用 List 保证有序性,Key 是 scope,Value 为是否选中", requiredMode = Schema.RequiredMode.REQUIRED) + private List> scopes; + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class Client { + + @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "土豆") + private String name; + + @Schema(description = "应用图标", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xx.png") + private String logo; + + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/open/OAuth2OpenCheckTokenRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/open/OAuth2OpenCheckTokenRespVO.java new file mode 100644 index 0000000..fb90351 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/open/OAuth2OpenCheckTokenRespVO.java @@ -0,0 +1,40 @@ +package com.win.module.system.controller.admin.oauth2.vo.open; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Schema(description = "管理后台 - 【开放接口】校验令牌 Response VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OAuth2OpenCheckTokenRespVO { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") + @JsonProperty("user_id") + private Long userId; + @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @JsonProperty("user_type") + private Integer userType; + @Schema(description = "租户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @JsonProperty("tenant_id") + private Long tenantId; + + @Schema(description = "客户端编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "car") + @JsonProperty("client_id") + private String clientId; + @Schema(description = "授权范围", requiredMode = Schema.RequiredMode.REQUIRED, example = "user_info") + private List scopes; + + @Schema(description = "访问令牌", requiredMode = Schema.RequiredMode.REQUIRED, example = "tudou") + @JsonProperty("access_token") + private String accessToken; + + @Schema(description = "过期时间,时间戳 / 1000,即单位:秒", requiredMode = Schema.RequiredMode.REQUIRED, example = "1593092157") + private Long exp; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/token/OAuth2AccessTokenPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/token/OAuth2AccessTokenPageReqVO.java new file mode 100644 index 0000000..f29fc99 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/token/OAuth2AccessTokenPageReqVO.java @@ -0,0 +1,22 @@ +package com.win.module.system.controller.admin.oauth2.vo.token; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Schema(description = "管理后台 - 访问令牌分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class OAuth2AccessTokenPageReqVO extends PageParam { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") + private Long userId; + + @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer userType; + + @Schema(description = "客户端编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private String clientId; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/token/OAuth2AccessTokenRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/token/OAuth2AccessTokenRespVO.java new file mode 100644 index 0000000..a7f74cc --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/token/OAuth2AccessTokenRespVO.java @@ -0,0 +1,40 @@ +package com.win.module.system.controller.admin.oauth2.vo.token; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 访问令牌 Response VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OAuth2AccessTokenRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "访问令牌", requiredMode = Schema.RequiredMode.REQUIRED, example = "tudou") + private String accessToken; + + @Schema(description = "刷新令牌", requiredMode = Schema.RequiredMode.REQUIRED, example = "nice") + private String refreshToken; + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") + private Long userId; + + @Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer userType; + + @Schema(description = "客户端编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private String clientId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + + @Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime expiresTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/user/OAuth2UserInfoRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/user/OAuth2UserInfoRespVO.java new file mode 100644 index 0000000..c5755a7 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/user/OAuth2UserInfoRespVO.java @@ -0,0 +1,70 @@ +package com.win.module.system.controller.admin.oauth2.vo.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Schema(description = "管理后台 - OAuth2 获得用户基本信息 Response VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OAuth2UserInfoRespVO { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + private String username; + + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String nickname; + + @Schema(description = "用户邮箱", example = "win@iocoder.cn") + private String email; + @Schema(description = "手机号码", example = "15601691300") + private String mobile; + + @Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1") + private Integer sex; + + @Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.png") + private String avatar; + + /** + * 所在部门 + */ + private Dept dept; + + /** + * 所属岗位数组 + */ + private List posts; + + @Schema(description = "部门") + @Data + public static class Dept { + + @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "研发部") + private String name; + + } + + @Schema(description = "岗位") + @Data + public static class Post { + + @Schema(description = "岗位编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "岗位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "开发") + private String name; + + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/user/OAuth2UserUpdateReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/user/OAuth2UserUpdateReqVO.java new file mode 100644 index 0000000..a908dea --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/oauth2/vo/user/OAuth2UserUpdateReqVO.java @@ -0,0 +1,34 @@ +package com.win.module.system.controller.admin.oauth2.vo.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.Size; + +@Schema(description = "管理后台 - OAuth2 更新用户基本信息 Request VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OAuth2UserUpdateReqVO { + + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @Size(max = 30, message = "用户昵称长度不能超过 30 个字符") + private String nickname; + + @Schema(description = "用户邮箱", example = "win@iocoder.cn") + @Email(message = "邮箱格式不正确") + @Size(max = 50, message = "邮箱长度不能超过 50 个字符") + private String email; + + @Schema(description = "手机号码", example = "15601691300") + @Length(min = 11, max = 11, message = "手机号长度必须 11 位") + private String mobile; + + @Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1") + private Integer sex; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/MenuController.http b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/MenuController.http new file mode 100644 index 0000000..a90d8b8 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/MenuController.http @@ -0,0 +1,4 @@ +### 请求 /menu/list 接口 => 成功 +GET {{baseUrl}}/system/menu/list +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/MenuController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/MenuController.java new file mode 100644 index 0000000..f30671b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/MenuController.java @@ -0,0 +1,87 @@ +package com.win.module.system.controller.admin.permission; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.permission.vo.menu.MenuListReqVO; +import com.win.module.system.controller.admin.permission.vo.menu.MenuRespVO; +import com.win.module.system.controller.admin.permission.vo.menu.MenuSaveVO; +import com.win.module.system.controller.admin.permission.vo.menu.MenuSimpleRespVO; +import com.win.module.system.dal.dataobject.permission.MenuDO; +import com.win.module.system.service.permission.MenuService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import java.util.Comparator; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 菜单") +@RestController +@RequestMapping("/system/menu") +@Validated +public class MenuController { + + @Resource + private MenuService menuService; + + @PostMapping("/create") + @Operation(summary = "创建菜单") + @PreAuthorize("@ss.hasPermission('system:menu:create')") + public CommonResult createMenu(@Valid @RequestBody MenuSaveVO createReqVO) { + Long menuId = menuService.createMenu(createReqVO); + return success(menuId); + } + + @PutMapping("/update") + @Operation(summary = "修改菜单") + @PreAuthorize("@ss.hasPermission('system:menu:update')") + public CommonResult updateMenu(@Valid @RequestBody MenuSaveVO updateReqVO) { + menuService.updateMenu(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除菜单") + @Parameter(name = "id", description = "菜单编号", required= true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:menu:delete')") + public CommonResult deleteMenu(@RequestParam("id") Long id) { + menuService.deleteMenu(id); + return success(true); + } + + @GetMapping("/list") + @Operation(summary = "获取菜单列表", description = "用于【菜单管理】界面") + @PreAuthorize("@ss.hasPermission('system:menu:query')") + public CommonResult> getMenuList(MenuListReqVO reqVO) { + List list = menuService.getMenuList(reqVO); + list.sort(Comparator.comparing(MenuDO::getSort)); + return success(BeanUtils.toBean(list, MenuRespVO.class)); + } + + @GetMapping({"/list-all-simple", "simple-list"}) + @Operation(summary = "获取菜单精简信息列表", description = "只包含被开启的菜单,用于【角色分配菜单】功能的选项。" + + "在多租户的场景下,会只返回租户所在套餐有的菜单") + public CommonResult> getSimpleMenuList() { + List list = menuService.getMenuListByTenant( + new MenuListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus())); + list.sort(Comparator.comparing(MenuDO::getSort)); + return success(BeanUtils.toBean(list, MenuSimpleRespVO.class)); + } + + @GetMapping("/get") + @Operation(summary = "获取菜单信息") + @PreAuthorize("@ss.hasPermission('system:menu:query')") + public CommonResult getMenu(Long id) { + MenuDO menu = menuService.getMenu(id); + return success(BeanUtils.toBean(menu, MenuRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/PermissionController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/PermissionController.java new file mode 100644 index 0000000..a1f5b89 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/PermissionController.java @@ -0,0 +1,82 @@ +package com.win.module.system.controller.admin.permission; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.pojo.CommonResult; +import com.win.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleDataScopeReqVO; +import com.win.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuReqVO; +import com.win.module.system.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO; +import com.win.module.system.service.permission.PermissionService; +import com.win.module.system.service.tenant.TenantService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import java.util.Set; + +import static com.win.framework.common.pojo.CommonResult.success; + +/** + * 权限 Controller,提供赋予用户、角色的权限的 API 接口 + * + * @author 芋道源码 + */ +@Tag(name = "管理后台 - 权限") +@RestController +@RequestMapping("/system/permission") +public class PermissionController { + + @Resource + private PermissionService permissionService; + @Resource + private TenantService tenantService; + + @Operation(summary = "获得角色拥有的菜单编号") + @Parameter(name = "roleId", description = "角色编号", required = true) + @GetMapping("/list-role-menus") + @PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')") + public CommonResult> getRoleMenuList(Long roleId) { + return success(permissionService.getRoleMenuListByRoleId(roleId)); + } + + @PostMapping("/assign-role-menu") + @Operation(summary = "赋予角色菜单") + @PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')") + public CommonResult assignRoleMenu(@Validated @RequestBody PermissionAssignRoleMenuReqVO reqVO) { + // 开启多租户的情况下,需要过滤掉未开通的菜单 + tenantService.handleTenantMenu(menuIds -> reqVO.getMenuIds().removeIf(menuId -> !CollUtil.contains(menuIds, menuId))); + + // 执行菜单的分配 + permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenuIds()); + return success(true); + } + + @PostMapping("/assign-role-data-scope") + @Operation(summary = "赋予角色数据权限") + @PreAuthorize("@ss.hasPermission('system:permission:assign-role-data-scope')") + public CommonResult assignRoleDataScope(@Valid @RequestBody PermissionAssignRoleDataScopeReqVO reqVO) { + permissionService.assignRoleDataScope(reqVO.getRoleId(), reqVO.getDataScope(), reqVO.getDataScopeDeptIds()); + return success(true); + } + + @Operation(summary = "获得管理员拥有的角色编号列表") + @Parameter(name = "userId", description = "用户编号", required = true) + @GetMapping("/list-user-roles") + @PreAuthorize("@ss.hasPermission('system:permission:assign-user-role')") + public CommonResult> listAdminRoles(@RequestParam("userId") Long userId) { + return success(permissionService.getUserRoleIdListByUserId(userId)); + } + + @Operation(summary = "赋予用户角色") + @PostMapping("/assign-user-role") + @PreAuthorize("@ss.hasPermission('system:permission:assign-user-role')") + public CommonResult assignUserRole(@Validated @RequestBody PermissionAssignUserRoleReqVO reqVO) { + permissionService.assignUserRole(reqVO.getUserId(), reqVO.getRoleIds()); + return success(true); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/RoleController.http b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/RoleController.http new file mode 100644 index 0000000..c68b86b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/RoleController.http @@ -0,0 +1,42 @@ +### /role/create 成功 +POST {{baseUrl}}/system/role/create +Authorization: Bearer {{token}} +Content-Type: application/json +tenant-id: {{adminTenentId}} + +{ + "name": "测试角色", + "code": "test", + "sort": 0 +} + +### /role/update 成功 +POST {{baseUrl}}/system/role/update +Authorization: Bearer {{token}} +Content-Type: application/json +tenant-id: {{adminTenentId}} + +{ + "id": 100, + "name": "测试角色", + "code": "test", + "sort": 10 +} +### /resource/delete 成功 +POST {{baseUrl}}/system/role/delete +Content-Type: application/x-www-form-urlencoded +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} + +roleId=14 + +### /role/get 成功 +GET {{baseUrl}}/system/role/get?id=100 +Content-Type: application/x-www-form-urlencoded +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} + +### /role/page 成功 +GET {{baseUrl}}/system/role/page?pageNo=1&pageSize=10 +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/RoleController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/RoleController.java new file mode 100644 index 0000000..eab4684 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/RoleController.java @@ -0,0 +1,100 @@ +package com.win.module.system.controller.admin.permission; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.system.controller.admin.permission.vo.role.*; +import com.win.module.system.dal.dataobject.permission.RoleDO; +import com.win.module.system.service.permission.RoleService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.Comparator; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; +import static java.util.Collections.singleton; + +@Tag(name = "管理后台 - 角色") +@RestController +@RequestMapping("/system/role") +@Validated +public class RoleController { + + @Resource + private RoleService roleService; + + @PostMapping("/create") + @Operation(summary = "创建角色") + @PreAuthorize("@ss.hasPermission('system:role:create')") + public CommonResult createRole(@Valid @RequestBody RoleSaveReqVO createReqVO) { + return success(roleService.createRole(createReqVO, null)); + } + + @PutMapping("/update") + @Operation(summary = "修改角色") + @PreAuthorize("@ss.hasPermission('system:role:update')") + public CommonResult updateRole(@Valid @RequestBody RoleSaveReqVO updateReqVO) { + roleService.updateRole(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除角色") + @Parameter(name = "id", description = "角色编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:role:delete')") + public CommonResult deleteRole(@RequestParam("id") Long id) { + roleService.deleteRole(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得角色信息") + @PreAuthorize("@ss.hasPermission('system:role:query')") + public CommonResult getRole(@RequestParam("id") Long id) { + RoleDO role = roleService.getRole(id); + return success(BeanUtils.toBean(role, RoleRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得角色分页") + @PreAuthorize("@ss.hasPermission('system:role:query')") + public CommonResult> getRolePage(RolePageReqVO pageReqVO) { + PageResult pageResult = roleService.getRolePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, RoleRespVO.class)); + } + + @GetMapping({"/list-all-simple", "/simple-list"}) + @Operation(summary = "获取角色精简信息列表", description = "只包含被开启的角色,主要用于前端的下拉选项") + public CommonResult> getSimpleRoleList() { + List list = roleService.getRoleListByStatus(singleton(CommonStatusEnum.ENABLE.getStatus())); + list.sort(Comparator.comparing(RoleDO::getSort)); + return success(BeanUtils.toBean(list, RoleRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出角色 Excel") + @ApiAccessLog(operateType = EXPORT) + @PreAuthorize("@ss.hasPermission('system:role:export')") + public void export(HttpServletResponse response, @Validated RolePageReqVO exportReqVO) throws IOException { + exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = roleService.getRolePage(exportReqVO).getList(); + // 输出 + ExcelUtils.write(response, "角色数据.xls", "数据", RoleRespVO.class, + BeanUtils.toBean(list, RoleRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuListReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuListReqVO.java new file mode 100644 index 0000000..db2fd59 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuListReqVO.java @@ -0,0 +1,16 @@ +package com.win.module.system.controller.admin.permission.vo.menu; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 菜单列表 Request VO") +@Data +public class MenuListReqVO { + + @Schema(description = "菜单名称,模糊匹配", example = "芋道") + private String name; + + @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1") + private Integer status; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuRespVO.java new file mode 100644 index 0000000..63f355d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuRespVO.java @@ -0,0 +1,69 @@ +package com.win.module.system.controller.admin.permission.vo.menu; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 菜单信息 Response VO") +@Data +public class MenuRespVO { + + @Schema(description = "菜单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "菜单名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + @NotBlank(message = "菜单名称不能为空") + @Size(max = 50, message = "菜单名称长度不能超过50个字符") + private String name; + + @Schema(description = "权限标识,仅菜单类型为按钮时,才需要传递", example = "sys:menu:add") + @Size(max = 100) + private String permission; + + @Schema(description = "类型,参见 MenuTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "菜单类型不能为空") + private Integer type; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "显示顺序不能为空") + private Integer sort; + + @Schema(description = "父菜单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "父菜单 ID 不能为空") + private Long parentId; + + @Schema(description = "路由地址,仅菜单类型为菜单或者目录时,才需要传", example = "post") + @Size(max = 200, message = "路由地址不能超过200个字符") + private String path; + + @Schema(description = "菜单图标,仅菜单类型为菜单或者目录时,才需要传", example = "/menu/list") + private String icon; + + @Schema(description = "组件路径,仅菜单类型为菜单时,才需要传", example = "system/post/index") + @Size(max = 200, message = "组件路径不能超过255个字符") + private String component; + + @Schema(description = "组件名", example = "SystemUser") + private String componentName; + + @Schema(description = "状态,见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + private Integer status; + + @Schema(description = "是否可见", example = "false") + private Boolean visible; + + @Schema(description = "是否缓存", example = "false") + private Boolean keepAlive; + + @Schema(description = "是否总是显示", example = "false") + private Boolean alwaysShow; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuSaveVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuSaveVO.java new file mode 100644 index 0000000..e55acf8 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuSaveVO.java @@ -0,0 +1,64 @@ +package com.win.module.system.controller.admin.permission.vo.menu; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +@Schema(description = "管理后台 - 菜单创建/修改 Request VO") +@Data +public class MenuSaveVO { + + @Schema(description = "菜单编号", example = "1024") + private Long id; + + @Schema(description = "菜单名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + @NotBlank(message = "菜单名称不能为空") + @Size(max = 50, message = "菜单名称长度不能超过50个字符") + private String name; + + @Schema(description = "权限标识,仅菜单类型为按钮时,才需要传递", example = "sys:menu:add") + @Size(max = 100) + private String permission; + + @Schema(description = "类型,参见 MenuTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "菜单类型不能为空") + private Integer type; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "显示顺序不能为空") + private Integer sort; + + @Schema(description = "父菜单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "父菜单 ID 不能为空") + private Long parentId; + + @Schema(description = "路由地址,仅菜单类型为菜单或者目录时,才需要传", example = "post") + @Size(max = 200, message = "路由地址不能超过200个字符") + private String path; + + @Schema(description = "菜单图标,仅菜单类型为菜单或者目录时,才需要传", example = "/menu/list") + private String icon; + + @Schema(description = "组件路径,仅菜单类型为菜单时,才需要传", example = "system/post/index") + @Size(max = 200, message = "组件路径不能超过255个字符") + private String component; + + @Schema(description = "组件名", example = "SystemUser") + private String componentName; + + @Schema(description = "状态,见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + private Integer status; + + @Schema(description = "是否可见", example = "false") + private Boolean visible; + + @Schema(description = "是否缓存", example = "false") + private Boolean keepAlive; + + @Schema(description = "是否总是显示", example = "false") + private Boolean alwaysShow; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuSimpleRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuSimpleRespVO.java new file mode 100644 index 0000000..c5ae2d2 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/menu/MenuSimpleRespVO.java @@ -0,0 +1,22 @@ +package com.win.module.system.controller.admin.permission.vo.menu; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 菜单精简信息 Response VO") +@Data +public class MenuSimpleRespVO { + + @Schema(description = "菜单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "菜单名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + + @Schema(description = "父菜单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long parentId; + + @Schema(description = "类型,参见 MenuTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer type; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java new file mode 100644 index 0000000..71ab8bd --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleDataScopeReqVO.java @@ -0,0 +1,28 @@ +package com.win.module.system.controller.admin.permission.vo.permission; + +import com.win.framework.common.validation.InEnum; +import com.win.module.system.enums.permission.DataScopeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; +import java.util.Collections; +import java.util.Set; + +@Schema(description = "管理后台 - 赋予角色数据权限 Request VO") +@Data +public class PermissionAssignRoleDataScopeReqVO { + + @Schema(description = "角色编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "角色编号不能为空") + private Long roleId; + + @Schema(description = "数据范围,参见 DataScopeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "数据范围不能为空") + @InEnum(value = DataScopeEnum.class, message = "数据范围必须是 {value}") + private Integer dataScope; + + @Schema(description = "部门编号列表,只有范围类型为 DEPT_CUSTOM 时,该字段才需要", example = "1,3,5") + private Set dataScopeDeptIds = Collections.emptySet(); // 兜底 + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java new file mode 100644 index 0000000..69926a2 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java @@ -0,0 +1,21 @@ +package com.win.module.system.controller.admin.permission.vo.permission; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; +import java.util.Collections; +import java.util.Set; + +@Schema(description = "管理后台 - 赋予角色菜单 Request VO") +@Data +public class PermissionAssignRoleMenuReqVO { + + @Schema(description = "角色编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "角色编号不能为空") + private Long roleId; + + @Schema(description = "菜单编号列表", example = "1,3,5") + private Set menuIds = Collections.emptySet(); // 兜底 + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java new file mode 100644 index 0000000..156d838 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java @@ -0,0 +1,21 @@ +package com.win.module.system.controller.admin.permission.vo.permission; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; +import java.util.Collections; +import java.util.Set; + +@Schema(description = "管理后台 - 赋予用户角色 Request VO") +@Data +public class PermissionAssignUserRoleReqVO { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "用户编号不能为空") + private Long userId; + + @Schema(description = "角色编号列表", example = "1,3,5") + private Set roleIds = Collections.emptySet(); // 兜底 + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RolePageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RolePageReqVO.java new file mode 100644 index 0000000..00a30d0 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RolePageReqVO.java @@ -0,0 +1,31 @@ +package com.win.module.system.controller.admin.permission.vo.role; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 角色分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class RolePageReqVO extends PageParam { + + @Schema(description = "角色名称,模糊匹配", example = "芋道") + private String name; + + @Schema(description = "角色标识,模糊匹配", example = "win") + private String code; + + @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1") + private Integer status; + + @Schema(description = "创建时间", example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RoleRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RoleRespVO.java new file mode 100644 index 0000000..a0813b6 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RoleRespVO.java @@ -0,0 +1,58 @@ +package com.win.module.system.controller.admin.permission.vo.role; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.system.enums.DictTypeConstants; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Set; + +@Schema(description = "管理后台 - 角色信息 Response VO") +@Data +@ExcelIgnoreUnannotated +public class RoleRespVO { + + @Schema(description = "角色编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("角色序号") + private Long id; + + @Schema(description = "角色名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "管理员") + @ExcelProperty("角色名称") + private String name; + + @Schema(description = "角色标志", requiredMode = Schema.RequiredMode.REQUIRED, example = "admin") + @NotBlank(message = "角色标志不能为空") + @ExcelProperty("角色标志") + private String code; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("角色排序") + private Integer sort; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "角色状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.COMMON_STATUS) + private Integer status; + + @Schema(description = "角色类型,参见 RoleTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer type; + + @Schema(description = "备注", example = "我是一个角色") + private String remark; + + @Schema(description = "数据范围,参见 DataScopeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("数据范围") + private Integer dataScope; + + @Schema(description = "数据范围(指定部门数组)", example = "1") + private Set dataScopeDeptIds; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RoleSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RoleSaveReqVO.java new file mode 100644 index 0000000..dd5af26 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RoleSaveReqVO.java @@ -0,0 +1,38 @@ +package com.win.module.system.controller.admin.permission.vo.role; + +import com.mzt.logapi.starter.annotation.DiffLogField; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +@Schema(description = "管理后台 - 角色创建/更新 Request VO") +@Data +public class RoleSaveReqVO { + + @Schema(description = "角色编号", example = "1") + private Long id; + + @Schema(description = "角色名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "管理员") + @NotBlank(message = "角色名称不能为空") + @Size(max = 30, message = "角色名称长度不能超过 30 个字符") + @DiffLogField(name = "角色名称") + private String name; + + @NotBlank(message = "角色标志不能为空") + @Size(max = 100, message = "角色标志长度不能超过 100 个字符") + @Schema(description = "角色编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "ADMIN") + @DiffLogField(name = "角色标志") + private String code; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "显示顺序不能为空") + @DiffLogField(name = "显示顺序") + private Integer sort; + + @Schema(description = "备注", example = "我是一个角色") + @DiffLogField(name = "备注") + private String remark; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RoleSimpleRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RoleSimpleRespVO.java new file mode 100644 index 0000000..2dfcc4f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/permission/vo/role/RoleSimpleRespVO.java @@ -0,0 +1,16 @@ +package com.win.module.system.controller.admin.permission.vo.role; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 角色精简信息 Response VO") +@Data +public class RoleSimpleRespVO { + + @Schema(description = "角色编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "角色名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsCallbackController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsCallbackController.java new file mode 100644 index 0000000..cc87163 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsCallbackController.java @@ -0,0 +1,45 @@ +package com.win.module.system.controller.admin.sms; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.servlet.ServletUtils; +import com.win.module.system.framework.sms.core.enums.SmsChannelEnum; +import com.win.module.system.service.sms.SmsSendService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; +import jakarta.servlet.http.HttpServletRequest; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 短信回调") +@RestController +@RequestMapping("/system/sms/callback") +public class SmsCallbackController { + + @Resource + private SmsSendService smsSendService; + + @PostMapping("/aliyun") + @PermitAll + @Operation(summary = "阿里云短信的回调", description = "参见 https://help.aliyun.com/zh/sms/developer-reference/configure-delivery-receipts-1 文档") + public CommonResult receiveAliyunSmsStatus(HttpServletRequest request) throws Throwable { + String text = ServletUtils.getBody(request); + smsSendService.receiveSmsStatus(SmsChannelEnum.ALIYUN.getCode(), text); + return success(true); + } + + @PostMapping("/tencent") + @PermitAll + @Operation(summary = "腾讯云短信的回调", description = "参见 https://cloud.tencent.com/document/product/382/59178 文档") + public CommonResult receiveTencentSmsStatus(HttpServletRequest request) throws Throwable { + String text = ServletUtils.getBody(request); + smsSendService.receiveSmsStatus(SmsChannelEnum.TENCENT.getCode(), text); + return success(true); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsChannelController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsChannelController.java new file mode 100644 index 0000000..41363a7 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsChannelController.java @@ -0,0 +1,82 @@ +package com.win.module.system.controller.admin.sms; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; +import com.win.module.system.controller.admin.sms.vo.channel.SmsChannelRespVO; +import com.win.module.system.controller.admin.sms.vo.channel.SmsChannelSaveReqVO; +import com.win.module.system.controller.admin.sms.vo.channel.SmsChannelSimpleRespVO; +import com.win.module.system.dal.dataobject.sms.SmsChannelDO; +import com.win.module.system.service.sms.SmsChannelService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import java.util.Comparator; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 短信渠道") +@RestController +@RequestMapping("system/sms-channel") +public class SmsChannelController { + + @Resource + private SmsChannelService smsChannelService; + + @PostMapping("/create") + @Operation(summary = "创建短信渠道") + @PreAuthorize("@ss.hasPermission('system:sms-channel:create')") + public CommonResult createSmsChannel(@Valid @RequestBody SmsChannelSaveReqVO createReqVO) { + return success(smsChannelService.createSmsChannel(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新短信渠道") + @PreAuthorize("@ss.hasPermission('system:sms-channel:update')") + public CommonResult updateSmsChannel(@Valid @RequestBody SmsChannelSaveReqVO updateReqVO) { + smsChannelService.updateSmsChannel(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除短信渠道") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('system:sms-channel:delete')") + public CommonResult deleteSmsChannel(@RequestParam("id") Long id) { + smsChannelService.deleteSmsChannel(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得短信渠道") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:sms-channel:query')") + public CommonResult getSmsChannel(@RequestParam("id") Long id) { + SmsChannelDO channel = smsChannelService.getSmsChannel(id); + return success(BeanUtils.toBean(channel, SmsChannelRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得短信渠道分页") + @PreAuthorize("@ss.hasPermission('system:sms-channel:query')") + public CommonResult> getSmsChannelPage(@Valid SmsChannelPageReqVO pageVO) { + PageResult pageResult = smsChannelService.getSmsChannelPage(pageVO); + return success(BeanUtils.toBean(pageResult, SmsChannelRespVO.class)); + } + + @GetMapping({"/list-all-simple", "/simple-list"}) + @Operation(summary = "获得短信渠道精简列表", description = "包含被禁用的短信渠道") + public CommonResult> getSimpleSmsChannelList() { + List list = smsChannelService.getSmsChannelList(); + list.sort(Comparator.comparing(SmsChannelDO::getId)); + return success(BeanUtils.toBean(list, SmsChannelSimpleRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsLogController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsLogController.java new file mode 100644 index 0000000..eed083e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsLogController.java @@ -0,0 +1,60 @@ +package com.win.module.system.controller.admin.sms; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; +import com.win.module.system.controller.admin.sms.vo.log.SmsLogRespVO; +import com.win.module.system.dal.dataobject.sms.SmsLogDO; +import com.win.module.system.service.sms.SmsLogService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 短信日志") +@RestController +@RequestMapping("/system/sms-log") +@Validated +public class SmsLogController { + + @Resource + private SmsLogService smsLogService; + + @GetMapping("/page") + @Operation(summary = "获得短信日志分页") + @PreAuthorize("@ss.hasPermission('system:sms-log:query')") + public CommonResult> getSmsLogPage(@Valid SmsLogPageReqVO pageReqVO) { + PageResult pageResult = smsLogService.getSmsLogPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, SmsLogRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出短信日志 Excel") + @PreAuthorize("@ss.hasPermission('system:sms-log:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportSmsLogExcel(@Valid SmsLogPageReqVO exportReqVO, + HttpServletResponse response) throws IOException { + exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = smsLogService.getSmsLogPage(exportReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "短信日志.xls", "数据", SmsLogRespVO.class, + BeanUtils.toBean(list, SmsLogRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsTemplateController.http b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsTemplateController.http new file mode 100644 index 0000000..ee24e92 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsTemplateController.http @@ -0,0 +1,14 @@ +### 请求 /system/sms-template/send-sms 接口 => 成功 +POST {{baseUrl}}/system/sms-template/send-sms +Authorization: Bearer {{token}} +Content-Type: application/json +tenant-id: {{adminTenentId}} + +{ + "templateCode": "test_01", + "mobile": "15601691390", + "templateParams": { + "operation": "value01", + "code": "value02" + } +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsTemplateController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsTemplateController.java new file mode 100644 index 0000000..8fca01c --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/SmsTemplateController.java @@ -0,0 +1,103 @@ +package com.win.module.system.controller.admin.sms; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; +import com.win.module.system.controller.admin.sms.vo.template.SmsTemplateRespVO; +import com.win.module.system.controller.admin.sms.vo.template.SmsTemplateSaveReqVO; +import com.win.module.system.controller.admin.sms.vo.template.SmsTemplateSendReqVO; +import com.win.module.system.dal.dataobject.sms.SmsTemplateDO; +import com.win.module.system.service.sms.SmsSendService; +import com.win.module.system.service.sms.SmsTemplateService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 短信模板") +@RestController +@RequestMapping("/system/sms-template") +public class SmsTemplateController { + + @Resource + private SmsTemplateService smsTemplateService; + @Resource + private SmsSendService smsSendService; + + @PostMapping("/create") + @Operation(summary = "创建短信模板") + @PreAuthorize("@ss.hasPermission('system:sms-template:create')") + public CommonResult createSmsTemplate(@Valid @RequestBody SmsTemplateSaveReqVO createReqVO) { + return success(smsTemplateService.createSmsTemplate(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新短信模板") + @PreAuthorize("@ss.hasPermission('system:sms-template:update')") + public CommonResult updateSmsTemplate(@Valid @RequestBody SmsTemplateSaveReqVO updateReqVO) { + smsTemplateService.updateSmsTemplate(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除短信模板") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('system:sms-template:delete')") + public CommonResult deleteSmsTemplate(@RequestParam("id") Long id) { + smsTemplateService.deleteSmsTemplate(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得短信模板") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:sms-template:query')") + public CommonResult getSmsTemplate(@RequestParam("id") Long id) { + SmsTemplateDO template = smsTemplateService.getSmsTemplate(id); + return success(BeanUtils.toBean(template, SmsTemplateRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得短信模板分页") + @PreAuthorize("@ss.hasPermission('system:sms-template:query')") + public CommonResult> getSmsTemplatePage(@Valid SmsTemplatePageReqVO pageVO) { + PageResult pageResult = smsTemplateService.getSmsTemplatePage(pageVO); + return success(BeanUtils.toBean(pageResult, SmsTemplateRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出短信模板 Excel") + @PreAuthorize("@ss.hasPermission('system:sms-template:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportSmsTemplateExcel(@Valid SmsTemplatePageReqVO exportReqVO, + HttpServletResponse response) throws IOException { + exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = smsTemplateService.getSmsTemplatePage(exportReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "短信模板.xls", "数据", SmsTemplateRespVO.class, + BeanUtils.toBean(list, SmsTemplateRespVO.class)); + } + + @PostMapping("/send-sms") + @Operation(summary = "发送短信") + @PreAuthorize("@ss.hasPermission('system:sms-template:send-sms')") + public CommonResult sendSms(@Valid @RequestBody SmsTemplateSendReqVO sendReqVO) { + return success(smsSendService.sendSingleSmsToAdmin(sendReqVO.getMobile(), null, + sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams())); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelPageReqVO.java new file mode 100644 index 0000000..15dc756 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelPageReqVO.java @@ -0,0 +1,30 @@ +package com.win.module.system.controller.admin.sms.vo.channel; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 短信渠道分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SmsChannelPageReqVO extends PageParam { + + @Schema(description = "任务状态", example = "1") + private Integer status; + + @Schema(description = "短信签名,模糊匹配", example = "芋道源码") + private String signature; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @Schema(description = "创建时间") + private LocalDateTime[] createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelRespVO.java new file mode 100644 index 0000000..953ce03 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelRespVO.java @@ -0,0 +1,45 @@ +package com.win.module.system.controller.admin.sms.vo.channel; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 短信渠道 Response VO") +@Data +public class SmsChannelRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "短信签名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码") + @NotNull(message = "短信签名不能为空") + private String signature; + + @Schema(description = "渠道编码,参见 SmsChannelEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "YUN_PIAN") + private String code; + + @Schema(description = "启用状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "启用状态不能为空") + private Integer status; + + @Schema(description = "备注", example = "好吃!") + private String remark; + + @Schema(description = "短信 API 的账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + @NotNull(message = "短信 API 的账号不能为空") + private String apiKey; + + @Schema(description = "短信 API 的密钥", example = "yuanma") + private String apiSecret; + + @Schema(description = "短信发送回调 URL", example = "https://www.iocoder.cn") + @URL(message = "回调 URL 格式不正确") + private String callbackUrl; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelSaveReqVO.java new file mode 100644 index 0000000..f6595c1 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelSaveReqVO.java @@ -0,0 +1,42 @@ +package com.win.module.system.controller.admin.sms.vo.channel; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 短信渠道创建/修改 Request VO") +@Data +public class SmsChannelSaveReqVO { + + @Schema(description = "编号", example = "1024") + private Long id; + + @Schema(description = "短信签名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码") + @NotNull(message = "短信签名不能为空") + private String signature; + + @Schema(description = "渠道编码,参见 SmsChannelEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "YUN_PIAN") + @NotNull(message = "渠道编码不能为空") + private String code; + + @Schema(description = "启用状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "启用状态不能为空") + private Integer status; + + @Schema(description = "备注", example = "好吃!") + private String remark; + + @Schema(description = "短信 API 的账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + @NotNull(message = "短信 API 的账号不能为空") + private String apiKey; + + @Schema(description = "短信 API 的密钥", example = "yuanma") + private String apiSecret; + + @Schema(description = "短信发送回调 URL", example = "http://www.iocoder.cn") + @URL(message = "回调 URL 格式不正确") + private String callbackUrl; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelSimpleRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelSimpleRespVO.java new file mode 100644 index 0000000..175f26d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/channel/SmsChannelSimpleRespVO.java @@ -0,0 +1,19 @@ +package com.win.module.system.controller.admin.sms.vo.channel; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 短信渠道精简 Response VO") +@Data +public class SmsChannelSimpleRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "短信签名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码") + private String signature; + + @Schema(description = "渠道编码,参见 SmsChannelEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "YUN_PIAN") + private String code; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/log/SmsLogPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/log/SmsLogPageReqVO.java new file mode 100644 index 0000000..5791d86 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/log/SmsLogPageReqVO.java @@ -0,0 +1,43 @@ +package com.win.module.system.controller.admin.sms.vo.log; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 短信日志分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SmsLogPageReqVO extends PageParam { + + @Schema(description = "短信渠道编号", example = "10") + private Long channelId; + + @Schema(description = "模板编号", example = "20") + private Long templateId; + + @Schema(description = "手机号", example = "15601691300") + private String mobile; + + @Schema(description = "发送状态,参见 SmsSendStatusEnum 枚举类", example = "1") + private Integer sendStatus; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @Schema(description = "发送时间") + private LocalDateTime[] sendTime; + + @Schema(description = "接收状态,参见 SmsReceiveStatusEnum 枚举类", example = "0") + private Integer receiveStatus; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @Schema(description = "接收时间") + private LocalDateTime[] receiveTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/log/SmsLogRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/log/SmsLogRespVO.java new file mode 100644 index 0000000..40a4084 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/log/SmsLogRespVO.java @@ -0,0 +1,116 @@ +package com.win.module.system.controller.admin.sms.vo.log; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.framework.excel.core.convert.JsonConvert; +import com.win.module.system.enums.DictTypeConstants; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Map; + +@Schema(description = "管理后台 - 短信日志 Response VO") +@Data +@ExcelIgnoreUnannotated +public class SmsLogRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "短信渠道编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + @ExcelProperty("短信渠道编号") + private Long channelId; + + @Schema(description = "短信渠道编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "ALIYUN") + @ExcelProperty("短信渠道编码") + private String channelCode; + + @Schema(description = "模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20") + @ExcelProperty("模板编号") + private Long templateId; + + @Schema(description = "模板编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "test-01") + @ExcelProperty("模板编码") + private String templateCode; + + @Schema(description = "短信类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "短信类型", converter = DictConvert.class) + @DictFormat(DictTypeConstants.SMS_TEMPLATE_TYPE) + private Integer templateType; + + @Schema(description = "短信内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好,你的验证码是 1024") + @ExcelProperty("短信内容") + private String templateContent; + + @Schema(description = "短信参数", requiredMode = Schema.RequiredMode.REQUIRED, example = "name,code") + @ExcelProperty(value = "短信参数", converter = JsonConvert.class) + private Map templateParams; + + @Schema(description = "短信 API 的模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "SMS_207945135") + @ExcelProperty("短信 API 的模板编号") + private String apiTemplateId; + + @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") + @ExcelProperty("手机号") + private String mobile; + + @Schema(description = "用户编号", example = "10") + @ExcelProperty("用户编号") + private Long userId; + + @Schema(description = "用户类型", example = "1") + @ExcelProperty(value = "用户类型", converter = DictConvert.class) + @DictFormat(DictTypeConstants.USER_TYPE) + private Integer userType; + + @Schema(description = "发送状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "发送状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.SMS_SEND_STATUS) + private Integer sendStatus; + + @Schema(description = "发送时间") + @ExcelProperty("发送时间") + private LocalDateTime sendTime; + + @Schema(description = "短信 API 发送结果的编码", example = "SUCCESS") + @ExcelProperty("短信 API 发送结果的编码") + private String apiSendCode; + + @Schema(description = "短信 API 发送失败的提示", example = "成功") + @ExcelProperty("短信 API 发送失败的提示") + private String apiSendMsg; + + @Schema(description = "短信 API 发送返回的唯一请求 ID", example = "3837C6D3-B96F-428C-BBB2-86135D4B5B99") + @ExcelProperty("短信 API 发送返回的唯一请求 ID") + private String apiRequestId; + + @Schema(description = "短信 API 发送返回的序号", example = "62923244790") + @ExcelProperty("短信 API 发送返回的序号") + private String apiSerialNo; + + @Schema(description = "接收状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") + @ExcelProperty(value = "接收状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.SMS_RECEIVE_STATUS) + private Integer receiveStatus; + + @Schema(description = "接收时间") + @ExcelProperty("接收时间") + private LocalDateTime receiveTime; + + @Schema(description = "API 接收结果的编码", example = "DELIVRD") + @ExcelProperty("API 接收结果的编码") + private String apiReceiveCode; + + @Schema(description = "API 接收结果的说明", example = "用户接收成功") + @ExcelProperty("API 接收结果的说明") + private String apiReceiveMsg; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplatePageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplatePageReqVO.java new file mode 100644 index 0000000..d9dd0ee --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplatePageReqVO.java @@ -0,0 +1,42 @@ +package com.win.module.system.controller.admin.sms.vo.template; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 短信模板分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SmsTemplatePageReqVO extends PageParam { + + @Schema(description = "短信签名", example = "1") + private Integer type; + + @Schema(description = "开启状态", example = "1") + private Integer status; + + @Schema(description = "模板编码,模糊匹配", example = "test_01") + private String code; + + @Schema(description = "模板内容,模糊匹配", example = "你好,{name}。你长的太{like}啦!") + private String content; + + @Schema(description = "短信 API 的模板编号,模糊匹配", example = "4383920") + private String apiTemplateId; + + @Schema(description = "短信渠道编号", example = "10") + private Long channelId; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @Schema(description = "创建时间") + private LocalDateTime[] createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplateRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplateRespVO.java new file mode 100644 index 0000000..f98f5c5 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplateRespVO.java @@ -0,0 +1,69 @@ +package com.win.module.system.controller.admin.sms.vo.template; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.system.enums.DictTypeConstants; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 短信模板 Response VO") +@Data +@ExcelIgnoreUnannotated +public class SmsTemplateRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "短信类型,参见 SmsTemplateTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "短信签名", converter = DictConvert.class) + @DictFormat(DictTypeConstants.SMS_TEMPLATE_TYPE) + private Integer type; + + @Schema(description = "开启状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "开启状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.COMMON_STATUS) + private Integer status; + + @Schema(description = "模板编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "test_01") + @ExcelProperty("模板编码") + private String code; + + @Schema(description = "模板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + @ExcelProperty("模板名称") + private String name; + + @Schema(description = "模板内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好,{name}。你长的太{like}啦!") + @ExcelProperty("模板内容") + private String content; + + @Schema(description = "参数数组", example = "name,code") + private List params; + + @Schema(description = "备注", example = "哈哈哈") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "短信 API 的模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4383920") + @ExcelProperty("短信 API 的模板编号") + private String apiTemplateId; + + @Schema(description = "短信渠道编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + @ExcelProperty("短信渠道编号") + private Long channelId; + + @Schema(description = "短信渠道编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "ALIYUN") + @ExcelProperty(value = "短信渠道编码", converter = DictConvert.class) + @DictFormat(DictTypeConstants.SMS_CHANNEL_CODE) + private String channelCode; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplateSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplateSaveReqVO.java new file mode 100644 index 0000000..cfcef7d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplateSaveReqVO.java @@ -0,0 +1,46 @@ +package com.win.module.system.controller.admin.sms.vo.template; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 短信模板创建/修改 Request VO") +@Data +public class SmsTemplateSaveReqVO { + + @Schema(description = "编号", example = "1024") + private Long id; + + @Schema(description = "短信类型,参见 SmsTemplateTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "短信类型不能为空") + private Integer type; + + @Schema(description = "开启状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "开启状态不能为空") + private Integer status; + + @Schema(description = "模板编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "test_01") + @NotNull(message = "模板编码不能为空") + private String code; + + @Schema(description = "模板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + @NotNull(message = "模板名称不能为空") + private String name; + + @Schema(description = "模板内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好,{name}。你长的太{like}啦!") + @NotNull(message = "模板内容不能为空") + private String content; + + @Schema(description = "备注", example = "哈哈哈") + private String remark; + + @Schema(description = "短信 API 的模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4383920") + @NotNull(message = "短信 API 的模板编号不能为空") + private String apiTemplateId; + + @Schema(description = "短信渠道编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + @NotNull(message = "短信渠道编号不能为空") + private Long channelId; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplateSendReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplateSendReqVO.java new file mode 100644 index 0000000..fa2f6ba --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/sms/vo/template/SmsTemplateSendReqVO.java @@ -0,0 +1,24 @@ +package com.win.module.system.controller.admin.sms.vo.template; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; +import java.util.Map; + +@Schema(description = "管理后台 - 短信模板的发送 Request VO") +@Data +public class SmsTemplateSendReqVO { + + @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") + @NotNull(message = "手机号不能为空") + private String mobile; + + @Schema(description = "模板编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "test_01") + @NotNull(message = "模板编码不能为空") + private String templateCode; + + @Schema(description = "模板参数") + private Map templateParams; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/SocialClientController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/SocialClientController.java new file mode 100644 index 0000000..a9a5042 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/SocialClientController.java @@ -0,0 +1,73 @@ +package com.win.module.system.controller.admin.socail; + +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; +import com.win.module.system.controller.admin.socail.vo.client.SocialClientRespVO; +import com.win.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO; +import com.win.module.system.dal.dataobject.social.SocialClientDO; +import com.win.module.system.service.social.SocialClientService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 社交客户端") +@RestController +@RequestMapping("/system/social-client") +@Validated +public class SocialClientController { + + @Resource + private SocialClientService socialClientService; + + @PostMapping("/create") + @Operation(summary = "创建社交客户端") + @PreAuthorize("@ss.hasPermission('system:social-client:create')") + public CommonResult createSocialClient(@Valid @RequestBody SocialClientSaveReqVO createReqVO) { + return success(socialClientService.createSocialClient(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新社交客户端") + @PreAuthorize("@ss.hasPermission('system:social-client:update')") + public CommonResult updateSocialClient(@Valid @RequestBody SocialClientSaveReqVO updateReqVO) { + socialClientService.updateSocialClient(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除社交客户端") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('system:social-client:delete')") + public CommonResult deleteSocialClient(@RequestParam("id") Long id) { + socialClientService.deleteSocialClient(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得社交客户端") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:social-client:query')") + public CommonResult getSocialClient(@RequestParam("id") Long id) { + SocialClientDO client = socialClientService.getSocialClient(id); + return success(BeanUtils.toBean(client, SocialClientRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得社交客户端分页") + @PreAuthorize("@ss.hasPermission('system:social-client:query')") + public CommonResult> getSocialClientPage(@Valid SocialClientPageReqVO pageVO) { + PageResult pageResult = socialClientService.getSocialClientPage(pageVO); + return success(BeanUtils.toBean(pageResult, SocialClientRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/SocialUserController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/SocialUserController.java new file mode 100644 index 0000000..fdf398b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/SocialUserController.java @@ -0,0 +1,70 @@ +package com.win.module.system.controller.admin.socail; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.socail.vo.user.SocialUserBindReqVO; +import com.win.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO; +import com.win.module.system.controller.admin.socail.vo.user.SocialUserRespVO; +import com.win.module.system.controller.admin.socail.vo.user.SocialUserUnbindReqVO; +import com.win.module.system.convert.social.SocialUserConvert; +import com.win.module.system.dal.dataobject.social.SocialUserDO; +import com.win.module.system.service.social.SocialUserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +@Tag(name = "管理后台 - 社交用户") +@RestController +@RequestMapping("/system/social-user") +@Validated +public class SocialUserController { + + @Resource + private SocialUserService socialUserService; + + @PostMapping("/bind") + @Operation(summary = "社交绑定,使用 code 授权码") + public CommonResult socialBind(@RequestBody @Valid SocialUserBindReqVO reqVO) { + socialUserService.bindSocialUser(SocialUserConvert.INSTANCE.convert( + getLoginUserId(), UserTypeEnum.ADMIN.getValue(), reqVO)); + return CommonResult.success(true); + } + + @DeleteMapping("/unbind") + @Operation(summary = "取消社交绑定") + public CommonResult socialUnbind(@RequestBody SocialUserUnbindReqVO reqVO) { + socialUserService.unbindSocialUser(getLoginUserId(), UserTypeEnum.ADMIN.getValue(), reqVO.getType(), reqVO.getOpenid()); + return CommonResult.success(true); + } + + // ==================== 社交用户 CRUD ==================== + + @GetMapping("/get") + @Operation(summary = "获得社交用户") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:social-user:query')") + public CommonResult getSocialUser(@RequestParam("id") Long id) { + SocialUserDO socialUser = socialUserService.getSocialUser(id); + return success(BeanUtils.toBean(socialUser, SocialUserRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得社交用户分页") + @PreAuthorize("@ss.hasPermission('system:social-user:query')") + public CommonResult> getSocialUserPage(@Valid SocialUserPageReqVO pageVO) { + PageResult pageResult = socialUserService.getSocialUserPage(pageVO); + return success(BeanUtils.toBean(pageResult, SocialUserRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/client/SocialClientPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/client/SocialClientPageReqVO.java new file mode 100644 index 0000000..927f904 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/client/SocialClientPageReqVO.java @@ -0,0 +1,30 @@ +package com.win.module.system.controller.admin.socail.vo.client; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Schema(description = "管理后台 - 社交客户端分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SocialClientPageReqVO extends PageParam { + + @Schema(description = "应用名", example = "win商城") + private String name; + + @Schema(description = "社交平台的类型", example = "31") + private Integer socialType; + + @Schema(description = "用户类型", example = "2") + private Integer userType; + + @Schema(description = "客户端编号", example = "145442115") + private String clientId; + + @Schema(description = "状态", example = "1") + private Integer status; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/client/SocialClientRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/client/SocialClientRespVO.java new file mode 100644 index 0000000..fe1dd1f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/client/SocialClientRespVO.java @@ -0,0 +1,39 @@ +package com.win.module.system.controller.admin.socail.vo.client; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 社交客户端 Response VO") +@Data +public class SocialClientRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "27162") + private Long id; + + @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "win商城") + private String name; + + @Schema(description = "社交平台的类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "31") + private Integer socialType; + + @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer userType; + + @Schema(description = "客户端编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "wwd411c69a39ad2e54") + private String clientId; + + @Schema(description = "客户端密钥", requiredMode = Schema.RequiredMode.REQUIRED, example = "peter") + private String clientSecret; + + @Schema(description = "授权方的网页应用编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2000045") + private String agentId; + + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/client/SocialClientSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/client/SocialClientSaveReqVO.java new file mode 100644 index 0000000..21c6a78 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/client/SocialClientSaveReqVO.java @@ -0,0 +1,61 @@ +package com.win.module.system.controller.admin.socail.vo.client; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.validation.InEnum; +import com.win.module.system.enums.social.SocialTypeEnum; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.AssertTrue; +import jakarta.validation.constraints.NotNull; +import java.util.Objects; + +@Schema(description = "管理后台 - 社交客户端创建/修改 Request VO") +@Data +public class SocialClientSaveReqVO { + + @Schema(description = "编号", example = "27162") + private Long id; + + @Schema(description = "应用名", requiredMode = Schema.RequiredMode.REQUIRED, example = "win商城") + @NotNull(message = "应用名不能为空") + private String name; + + @Schema(description = "社交平台的类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "31") + @NotNull(message = "社交平台的类型不能为空") + @InEnum(SocialTypeEnum.class) + private Integer socialType; + + @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "用户类型不能为空") + @InEnum(UserTypeEnum.class) + private Integer userType; + + @Schema(description = "客户端编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "wwd411c69a39ad2e54") + @NotNull(message = "客户端编号不能为空") + private String clientId; + + @Schema(description = "客户端密钥", requiredMode = Schema.RequiredMode.REQUIRED, example = "peter") + @NotNull(message = "客户端密钥不能为空") + private String clientSecret; + + @Schema(description = "授权方的网页应用编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2000045") + private String agentId; + + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + @InEnum(CommonStatusEnum.class) + private Integer status; + + @AssertTrue(message = "agentId 不能为空") + @JsonIgnore + public boolean isAgentIdValid() { + // 如果是企业微信,必须填写 agentId 属性 + return !Objects.equals(socialType, SocialTypeEnum.WECHAT_ENTERPRISE.getType()) + || !StrUtil.isEmpty(agentId); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserBindReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserBindReqVO.java new file mode 100644 index 0000000..72486bd --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserBindReqVO.java @@ -0,0 +1,34 @@ +package com.win.module.system.controller.admin.socail.vo.user; + +import com.win.framework.common.validation.InEnum; +import com.win.module.system.enums.social.SocialTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 社交绑定 Request VO,使用 code 授权码") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class SocialUserBindReqVO { + + @Schema(description = "社交平台的类型,参见 UserSocialTypeEnum 枚举值", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + @InEnum(SocialTypeEnum.class) + @NotNull(message = "社交平台的类型不能为空") + private Integer type; + + @Schema(description = "授权码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "授权码不能为空") + private String code; + + @Schema(description = "state", requiredMode = Schema.RequiredMode.REQUIRED, example = "9b2ffbc1-7425-4155-9894-9d5c08541d62") + @NotEmpty(message = "state 不能为空") + private String state; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserPageReqVO.java new file mode 100644 index 0000000..54ee6e8 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserPageReqVO.java @@ -0,0 +1,33 @@ +package com.win.module.system.controller.admin.socail.vo.user; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 社交用户分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SocialUserPageReqVO extends PageParam { + + @Schema(description = "社交平台的类型", example = "30") + private Integer type; + + @Schema(description = "用户昵称", example = "李四") + private String nickname; + + @Schema(description = "社交 openid", example = "oz-Jdt0kd_jdhUxJHQdBJMlOFN7w") + private String openid; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserRespVO.java new file mode 100644 index 0000000..9a7ce23 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserRespVO.java @@ -0,0 +1,48 @@ +package com.win.module.system.controller.admin.socail.vo.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 社交用户 Response VO") +@Data +public class SocialUserRespVO { + + @Schema(description = "主键(自增策略)", requiredMode = Schema.RequiredMode.REQUIRED, example = "14569") + private Long id; + + @Schema(description = "社交平台的类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "30") + private Integer type; + + @Schema(description = "社交 openid", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") + private String openid; + + @Schema(description = "社交 token", requiredMode = Schema.RequiredMode.REQUIRED, example = "666") + private String token; + + @Schema(description = "原始 Token 数据,一般是 JSON 格式", requiredMode = Schema.RequiredMode.REQUIRED, example = "{}") + private String rawTokenInfo; + + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + private String nickname; + + @Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.png") + private String avatar; + + @Schema(description = "原始用户数据,一般是 JSON 格式", requiredMode = Schema.RequiredMode.REQUIRED, example = "{}") + private String rawUserInfo; + + @Schema(description = "最后一次的认证 code", requiredMode = Schema.RequiredMode.REQUIRED, example = "666666") + private String code; + + @Schema(description = "最后一次的认证 state", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") + private String state; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + + @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime updateTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserUnbindReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserUnbindReqVO.java new file mode 100644 index 0000000..b1c3986 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/socail/vo/user/SocialUserUnbindReqVO.java @@ -0,0 +1,30 @@ +package com.win.module.system.controller.admin.socail.vo.user; + +import com.win.framework.common.validation.InEnum; +import com.win.module.system.enums.social.SocialTypeEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 取消社交绑定 Request VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class SocialUserUnbindReqVO { + + @Schema(description = "社交平台的类型,参见 UserSocialTypeEnum 枚举值", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + @InEnum(SocialTypeEnum.class) + @NotNull(message = "社交平台的类型不能为空") + private Integer type; + + @Schema(description = "社交用户的 openid", requiredMode = Schema.RequiredMode.REQUIRED, example = "IPRmJ0wvBptiPIlGEZiPewGwiEiE") + @NotEmpty(message = "社交用户的 openid 不能为空") + private String openid; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/TenantController.http b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/TenantController.http new file mode 100644 index 0000000..a4d5173 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/TenantController.http @@ -0,0 +1,21 @@ +### 获取租户编号 /admin-api/system/get-id-by-name +GET {{baseUrl}}/system/tenant/get-id-by-name?name=芋道源码 + +### 创建租户 /admin-api/system/tenant/create +POST {{baseUrl}}/system/tenant/create +Content-Type: application/json +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} + +{ + "name": "芋道", + "contactName": "芋艿", + "contactMobile": "15601691300", + "status": 0, + "domain": "https://www.iocoder.cn", + "packageId": 110, + "expireTime": 1699545600000, + "accountCount": 20, + "username": "admin", + "password": "123321" +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/TenantController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/TenantController.java new file mode 100644 index 0000000..09470e6 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/TenantController.java @@ -0,0 +1,111 @@ +package com.win.module.system.controller.admin.tenant; + +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO; +import com.win.module.system.controller.admin.tenant.vo.tenant.TenantRespVO; +import com.win.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO; +import com.win.module.system.controller.admin.tenant.vo.tenant.TenantSimpleRespVO; +import com.win.module.system.dal.dataobject.tenant.TenantDO; +import com.win.module.system.service.tenant.TenantService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 租户") +@RestController +@RequestMapping("/system/tenant") +public class TenantController { + + @Resource + private TenantService tenantService; + + @GetMapping("/get-id-by-name") + @PermitAll + @Operation(summary = "使用租户名,获得租户编号", description = "登录界面,根据用户的租户名,获得租户编号") + @Parameter(name = "name", description = "租户名", required = true, example = "1024") + public CommonResult getTenantIdByName(@RequestParam("name") String name) { + TenantDO tenant = tenantService.getTenantByName(name); + return success(tenant != null ? tenant.getId() : null); + } + + @GetMapping("/get-by-website") + @PermitAll + @Operation(summary = "使用域名,获得租户信息", description = "登录界面,根据用户的域名,获得租户信息") + @Parameter(name = "website", description = "域名", required = true, example = "www.iocoder.cn") + public CommonResult getTenantByWebsite(@RequestParam("website") String website) { + TenantDO tenant = tenantService.getTenantByWebsite(website); + return success(BeanUtils.toBean(tenant, TenantSimpleRespVO.class)); + } + + @PostMapping("/create") + @Operation(summary = "创建租户") + @PreAuthorize("@ss.hasPermission('system:tenant:create')") + public CommonResult createTenant(@Valid @RequestBody TenantSaveReqVO createReqVO) { + return success(tenantService.createTenant(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新租户") + @PreAuthorize("@ss.hasPermission('system:tenant:update')") + public CommonResult updateTenant(@Valid @RequestBody TenantSaveReqVO updateReqVO) { + tenantService.updateTenant(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除租户") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:tenant:delete')") + public CommonResult deleteTenant(@RequestParam("id") Long id) { + tenantService.deleteTenant(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得租户") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:tenant:query')") + public CommonResult getTenant(@RequestParam("id") Long id) { + TenantDO tenant = tenantService.getTenant(id); + return success(BeanUtils.toBean(tenant, TenantRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得租户分页") + @PreAuthorize("@ss.hasPermission('system:tenant:query')") + public CommonResult> getTenantPage(@Valid TenantPageReqVO pageVO) { + PageResult pageResult = tenantService.getTenantPage(pageVO); + return success(BeanUtils.toBean(pageResult, TenantRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出租户 Excel") + @PreAuthorize("@ss.hasPermission('system:tenant:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportTenantExcel(@Valid TenantPageReqVO exportReqVO, + HttpServletResponse response) throws IOException { + exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = tenantService.getTenantPage(exportReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "租户.xls", "数据", TenantRespVO.class, + BeanUtils.toBean(list, TenantRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/TenantPackageController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/TenantPackageController.java new file mode 100644 index 0000000..330f1c2 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/TenantPackageController.java @@ -0,0 +1,83 @@ +package com.win.module.system.controller.admin.tenant; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.tenant.vo.packages.TenantPackagePageReqVO; +import com.win.module.system.controller.admin.tenant.vo.packages.TenantPackageRespVO; +import com.win.module.system.controller.admin.tenant.vo.packages.TenantPackageSaveReqVO; +import com.win.module.system.controller.admin.tenant.vo.packages.TenantPackageSimpleRespVO; +import com.win.module.system.dal.dataobject.tenant.TenantPackageDO; +import com.win.module.system.service.tenant.TenantPackageService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 租户套餐") +@RestController +@RequestMapping("/system/tenant-package") +@Validated +public class TenantPackageController { + + @Resource + private TenantPackageService tenantPackageService; + + @PostMapping("/create") + @Operation(summary = "创建租户套餐") + @PreAuthorize("@ss.hasPermission('system:tenant-package:create')") + public CommonResult createTenantPackage(@Valid @RequestBody TenantPackageSaveReqVO createReqVO) { + return success(tenantPackageService.createTenantPackage(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新租户套餐") + @PreAuthorize("@ss.hasPermission('system:tenant-package:update')") + public CommonResult updateTenantPackage(@Valid @RequestBody TenantPackageSaveReqVO updateReqVO) { + tenantPackageService.updateTenantPackage(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除租户套餐") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('system:tenant-package:delete')") + public CommonResult deleteTenantPackage(@RequestParam("id") Long id) { + tenantPackageService.deleteTenantPackage(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得租户套餐") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:tenant-package:query')") + public CommonResult getTenantPackage(@RequestParam("id") Long id) { + TenantPackageDO tenantPackage = tenantPackageService.getTenantPackage(id); + return success(BeanUtils.toBean(tenantPackage, TenantPackageRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得租户套餐分页") + @PreAuthorize("@ss.hasPermission('system:tenant-package:query')") + public CommonResult> getTenantPackagePage(@Valid TenantPackagePageReqVO pageVO) { + PageResult pageResult = tenantPackageService.getTenantPackagePage(pageVO); + return success(BeanUtils.toBean(pageResult, TenantPackageRespVO.class)); + } + + @GetMapping({"/get-simple-list", "simple-list"}) + @Operation(summary = "获取租户套餐精简信息列表", description = "只包含被开启的租户套餐,主要用于前端的下拉选项") + public CommonResult> getTenantPackageList() { + List list = tenantPackageService.getTenantPackageListByStatus(CommonStatusEnum.ENABLE.getStatus()); + return success(BeanUtils.toBean(list, TenantPackageSimpleRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackagePageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackagePageReqVO.java new file mode 100644 index 0000000..b2e7bba --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackagePageReqVO.java @@ -0,0 +1,32 @@ +package com.win.module.system.controller.admin.tenant.vo.packages; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 租户套餐分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class TenantPackagePageReqVO extends PageParam { + + @Schema(description = "套餐名", example = "VIP") + private String name; + + @Schema(description = "状态", example = "1") + private Integer status; + + @Schema(description = "备注", example = "好") + private String remark; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @Schema(description = "创建时间") + private LocalDateTime[] createTime; +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackageRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackageRespVO.java new file mode 100644 index 0000000..ec3c39a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackageRespVO.java @@ -0,0 +1,31 @@ +package com.win.module.system.controller.admin.tenant.vo.packages; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Set; + +@Schema(description = "管理后台 - 租户套餐 Response VO") +@Data +public class TenantPackageRespVO { + + @Schema(description = "套餐编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "套餐名", requiredMode = Schema.RequiredMode.REQUIRED, example = "VIP") + private String name; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; + + @Schema(description = "备注", example = "好") + private String remark; + + @Schema(description = "关联的菜单编号", requiredMode = Schema.RequiredMode.REQUIRED) + private Set menuIds; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackageSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackageSaveReqVO.java new file mode 100644 index 0000000..907f9e1 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackageSaveReqVO.java @@ -0,0 +1,35 @@ +package com.win.module.system.controller.admin.tenant.vo.packages; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.validation.InEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.util.Set; + +@Schema(description = "管理后台 - 租户套餐创建/修改 Request VO") +@Data +public class TenantPackageSaveReqVO { + + @Schema(description = "套餐编号", example = "1024") + private Long id; + + @Schema(description = "套餐名", requiredMode = Schema.RequiredMode.REQUIRED, example = "VIP") + @NotEmpty(message = "套餐名不能为空") + private String name; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + @InEnum(value = CommonStatusEnum.class, message = "状态必须是 {value}") + private Integer status; + + @Schema(description = "备注", example = "好") + private String remark; + + @Schema(description = "关联的菜单编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "关联的菜单编号不能为空") + private Set menuIds; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackageSimpleRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackageSimpleRespVO.java new file mode 100644 index 0000000..ba7413f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/packages/TenantPackageSimpleRespVO.java @@ -0,0 +1,20 @@ +package com.win.module.system.controller.admin.tenant.vo.packages; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 租户套餐精简 Response VO") +@Data +public class TenantPackageSimpleRespVO { + + @Schema(description = "套餐编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "套餐编号不能为空") + private Long id; + + @Schema(description = "套餐名", requiredMode = Schema.RequiredMode.REQUIRED, example = "VIP") + @NotNull(message = "套餐名不能为空") + private String name; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantPageReqVO.java new file mode 100644 index 0000000..5eb25c5 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantPageReqVO.java @@ -0,0 +1,36 @@ +package com.win.module.system.controller.admin.tenant.vo.tenant; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 租户分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class TenantPageReqVO extends PageParam { + + @Schema(description = "租户名", example = "芋道") + private String name; + + @Schema(description = "联系人", example = "芋艿") + private String contactName; + + @Schema(description = "联系手机", example = "15601691300") + private String contactMobile; + + @Schema(description = "租户状态(0正常 1停用)", example = "1") + private Integer status; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @Schema(description = "创建时间") + private LocalDateTime[] createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantRespVO.java new file mode 100644 index 0000000..0f5fb0d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantRespVO.java @@ -0,0 +1,55 @@ +package com.win.module.system.controller.admin.tenant.vo.tenant; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.system.enums.DictTypeConstants; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 租户 Response VO") +@Data +@ExcelIgnoreUnannotated +public class TenantRespVO { + + @Schema(description = "租户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @ExcelProperty("租户编号") + private Long id; + + @Schema(description = "租户名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + @ExcelProperty("租户名") + private String name; + + @Schema(description = "联系人", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @ExcelProperty("联系人") + private String contactName; + + @Schema(description = "联系手机", example = "15601691300") + @ExcelProperty("联系手机") + private String contactMobile; + + @Schema(description = "租户状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.COMMON_STATUS) + private Integer status; + + @Schema(description = "绑定域名", example = "https://www.iocoder.cn") + private String website; + + @Schema(description = "租户套餐编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long packageId; + + @Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime expireTime; + + @Schema(description = "账号数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Integer accountCount; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantSaveReqVO.java new file mode 100644 index 0000000..eff3845 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantSaveReqVO.java @@ -0,0 +1,70 @@ +package com.win.module.system.controller.admin.tenant.vo.tenant; + +import cn.hutool.core.util.ObjectUtil; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import jakarta.validation.constraints.AssertTrue; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 租户创建/修改 Request VO") +@Data +public class TenantSaveReqVO { + + @Schema(description = "租户编号", example = "1024") + private Long id; + + @Schema(description = "租户名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + @NotNull(message = "租户名不能为空") + private String name; + + @Schema(description = "联系人", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @NotNull(message = "联系人不能为空") + private String contactName; + + @Schema(description = "联系手机", example = "15601691300") + private String contactMobile; + + @Schema(description = "租户状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "租户状态") + private Integer status; + + @Schema(description = "绑定域名", example = "https://www.iocoder.cn") + private String website; + + @Schema(description = "租户套餐编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "租户套餐编号不能为空") + private Long packageId; + + @Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "过期时间不能为空") + private LocalDateTime expireTime; + + @Schema(description = "账号数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "账号数量不能为空") + private Integer accountCount; + + // ========== 仅【创建】时,需要传递的字段 ========== + + @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + @Pattern(regexp = "^[a-zA-Z0-9]{4,30}$", message = "用户账号由 数字、字母 组成") + @Size(min = 4, max = 30, message = "用户账号长度为 4-30 个字符") + private String username; + + @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") + @Length(min = 4, max = 16, message = "密码长度为 4-16 位") + private String password; + + @AssertTrue(message = "用户账号、密码不能为空") + @JsonIgnore + public boolean isUsernameValid() { + return id != null // 修改时,不需要传递 + || (ObjectUtil.isAllNotEmpty(username, password)); // 新增时,必须都传递 username、password + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantSimpleRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantSimpleRespVO.java new file mode 100644 index 0000000..3c0d68d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/tenant/vo/tenant/TenantSimpleRespVO.java @@ -0,0 +1,16 @@ +package com.win.module.system.controller.admin.tenant.vo.tenant; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 租户精简 Response VO") +@Data +public class TenantSimpleRespVO { + + @Schema(description = "租户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "租户名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String name; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserController.http b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserController.http new file mode 100644 index 0000000..6d9cea8 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserController.http @@ -0,0 +1,4 @@ +### 请求 /system/user/page 接口 => 没有权限 +GET {{baseUrl}}/system/user/page?pageNo=1&pageSize=10 +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserController.java new file mode 100644 index 0000000..16403f1 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserController.java @@ -0,0 +1,169 @@ +package com.win.module.system.controller.admin.user; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.apilog.core.annotation.ApiAccessLog; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.pojo.PageParam; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.excel.core.util.ExcelUtils; +import com.win.module.system.controller.admin.user.vo.user.*; +import com.win.module.system.convert.user.UserConvert; +import com.win.module.system.dal.dataobject.dept.DeptDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.module.system.enums.common.SexEnum; +import com.win.module.system.service.dept.DeptService; +import com.win.module.system.service.user.AdminUserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import static com.win.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.common.util.collection.CollectionUtils.convertList; + +@Tag(name = "管理后台 - 用户") +@RestController +@RequestMapping("/system/user") +@Validated +public class UserController { + + @Resource + private AdminUserService userService; + @Resource + private DeptService deptService; + + @PostMapping("/create") + @Operation(summary = "新增用户") + @PreAuthorize("@ss.hasPermission('system:user:create')") + public CommonResult createUser(@Valid @RequestBody UserSaveReqVO reqVO) { + Long id = userService.createUser(reqVO); + return success(id); + } + + @PutMapping("update") + @Operation(summary = "修改用户") + @PreAuthorize("@ss.hasPermission('system:user:update')") + public CommonResult updateUser(@Valid @RequestBody UserSaveReqVO reqVO) { + userService.updateUser(reqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除用户") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:user:delete')") + public CommonResult deleteUser(@RequestParam("id") Long id) { + userService.deleteUser(id); + return success(true); + } + + @PutMapping("/update-password") + @Operation(summary = "重置用户密码") + @PreAuthorize("@ss.hasPermission('system:user:update-password')") + public CommonResult updateUserPassword(@Valid @RequestBody UserUpdatePasswordReqVO reqVO) { + userService.updateUserPassword(reqVO.getId(), reqVO.getPassword()); + return success(true); + } + + @PutMapping("/update-status") + @Operation(summary = "修改用户状态") + @PreAuthorize("@ss.hasPermission('system:user:update')") + public CommonResult updateUserStatus(@Valid @RequestBody UserUpdateStatusReqVO reqVO) { + userService.updateUserStatus(reqVO.getId(), reqVO.getStatus()); + return success(true); + } + + @GetMapping("/page") + @Operation(summary = "获得用户分页列表") + @PreAuthorize("@ss.hasPermission('system:user:list')") + public CommonResult> getUserPage(@Valid UserPageReqVO pageReqVO) { + // 获得用户分页列表 + PageResult pageResult = userService.getUserPage(pageReqVO); + if (CollUtil.isEmpty(pageResult.getList())) { + return success(new PageResult<>(pageResult.getTotal())); + } + // 拼接数据 + Map deptMap = deptService.getDeptMap( + convertList(pageResult.getList(), AdminUserDO::getDeptId)); + return success(new PageResult<>(UserConvert.INSTANCE.convertList(pageResult.getList(), deptMap), + pageResult.getTotal())); + } + + @GetMapping({"/list-all-simple", "/simple-list"}) + @Operation(summary = "获取用户精简信息列表", description = "只包含被开启的用户,主要用于前端的下拉选项") + public CommonResult> getSimpleUserList() { + List list = userService.getUserListByStatus(CommonStatusEnum.ENABLE.getStatus()); + // 拼接数据 + Map deptMap = deptService.getDeptMap( + convertList(list, AdminUserDO::getDeptId)); + return success(UserConvert.INSTANCE.convertSimpleList(list, deptMap)); + } + + @GetMapping("/get") + @Operation(summary = "获得用户详情") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:user:query')") + public CommonResult getUser(@RequestParam("id") Long id) { + AdminUserDO user = userService.getUser(id); + // 拼接数据 + DeptDO dept = deptService.getDept(user.getDeptId()); + return success(UserConvert.INSTANCE.convert(user, dept)); + } + + @GetMapping("/export") + @Operation(summary = "导出用户") + @PreAuthorize("@ss.hasPermission('system:user:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportUserList(@Validated UserPageReqVO exportReqVO, + HttpServletResponse response) throws IOException { + exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = userService.getUserPage(exportReqVO).getList(); + // 输出 Excel + Map deptMap = deptService.getDeptMap( + convertList(list, AdminUserDO::getDeptId)); + ExcelUtils.write(response, "用户数据.xls", "数据", UserRespVO.class, + UserConvert.INSTANCE.convertList(list, deptMap)); + } + + @GetMapping("/get-import-template") + @Operation(summary = "获得导入用户模板") + public void importTemplate(HttpServletResponse response) throws IOException { + // 手动创建导出 demo + List list = Arrays.asList( + UserImportExcelVO.builder().username("yunai").deptId(1L).email("yunai@iocoder.cn").mobile("15601691300") + .nickname("芋道").status(CommonStatusEnum.ENABLE.getStatus()).sex(SexEnum.MALE.getSex()).build(), + UserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@iocoder.cn").mobile("15601701300") + .nickname("源码").status(CommonStatusEnum.DISABLE.getStatus()).sex(SexEnum.FEMALE.getSex()).build() + ); + // 输出 + ExcelUtils.write(response, "用户导入模板.xls", "用户列表", UserImportExcelVO.class, list); + } + + @PostMapping("/import") + @Operation(summary = "导入用户") + @Parameters({ + @Parameter(name = "file", description = "Excel 文件", required = true), + @Parameter(name = "updateSupport", description = "是否支持更新,默认为 false", example = "true") + }) + @PreAuthorize("@ss.hasPermission('system:user:import')") + public CommonResult importExcel(@RequestParam("file") MultipartFile file, + @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception { + List list = ExcelUtils.read(file, UserImportExcelVO.class); + return success(userService.importUserList(list, updateSupport)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserProfileController.http b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserProfileController.http new file mode 100644 index 0000000..f06037b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserProfileController.http @@ -0,0 +1,4 @@ +### 请求 /system/user/profile/get 接口 => 没有权限 +GET {{baseUrl}}/system/user/profile/get +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserProfileController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserProfileController.java new file mode 100644 index 0000000..2c21ce9 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/UserProfileController.java @@ -0,0 +1,100 @@ +package com.win.module.system.controller.admin.user; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.datapermission.core.annotation.DataPermission; +import com.win.module.system.controller.admin.user.vo.profile.UserProfileRespVO; +import com.win.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import com.win.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import com.win.module.system.convert.user.UserConvert; +import com.win.module.system.dal.dataobject.dept.DeptDO; +import com.win.module.system.dal.dataobject.dept.PostDO; +import com.win.module.system.dal.dataobject.permission.RoleDO; +import com.win.module.system.dal.dataobject.social.SocialUserDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.module.system.service.dept.DeptService; +import com.win.module.system.service.dept.PostService; +import com.win.module.system.service.permission.PermissionService; +import com.win.module.system.service.permission.RoleService; +import com.win.module.system.service.social.SocialUserService; +import com.win.module.system.service.user.AdminUserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import java.util.List; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; +import static com.win.module.infra.enums.ErrorCodeConstants.FILE_IS_EMPTY; + +@Tag(name = "管理后台 - 用户个人中心") +@RestController +@RequestMapping("/system/user/profile") +@Validated +@Slf4j +public class UserProfileController { + + @Resource + private AdminUserService userService; + @Resource + private DeptService deptService; + @Resource + private PostService postService; + @Resource + private PermissionService permissionService; + @Resource + private RoleService roleService; + @Resource + private SocialUserService socialService; + + @GetMapping("/get") + @Operation(summary = "获得登录用户信息") + @DataPermission(enable = false) // 关闭数据权限,避免只查看自己时,查询不到部门。 + public CommonResult getUserProfile() { + // 获得用户基本信息 + AdminUserDO user = userService.getUser(getLoginUserId()); + // 获得用户角色 + List userRoles = roleService.getRoleListFromCache(permissionService.getUserRoleIdListByUserId(user.getId())); + // 获得部门信息 + DeptDO dept = user.getDeptId() != null ? deptService.getDept(user.getDeptId()) : null; + // 获得岗位信息 + List posts = CollUtil.isNotEmpty(user.getPostIds()) ? postService.getPostList(user.getPostIds()) : null; + // 获得社交用户信息 + List socialUsers = socialService.getSocialUserList(user.getId(), UserTypeEnum.ADMIN.getValue()); + return success(UserConvert.INSTANCE.convert(user, userRoles, dept, posts, socialUsers)); + } + + @PutMapping("/update") + @Operation(summary = "修改用户个人信息") + public CommonResult updateUserProfile(@Valid @RequestBody UserProfileUpdateReqVO reqVO) { + userService.updateUserProfile(getLoginUserId(), reqVO); + return success(true); + } + + @PutMapping("/update-password") + @Operation(summary = "修改用户个人密码") + public CommonResult updateUserProfilePassword(@Valid @RequestBody UserProfileUpdatePasswordReqVO reqVO) { + userService.updateUserPassword(getLoginUserId(), reqVO); + return success(true); + } + + @RequestMapping(value = "/update-avatar", + method = {RequestMethod.POST, RequestMethod.PUT}) // 解决 uni-app 不支持 Put 上传文件的问题 + @Operation(summary = "上传用户个人头像") + public CommonResult updateUserAvatar(@RequestParam("avatarFile") MultipartFile file) throws Exception { + if (file.isEmpty()) { + throw exception(FILE_IS_EMPTY); + } + String avatar = userService.updateUserAvatar(getLoginUserId(), file.getInputStream()); + return success(avatar); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java new file mode 100644 index 0000000..7c4aad0 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java @@ -0,0 +1,75 @@ +package com.win.module.system.controller.admin.user.vo.profile; + +import com.win.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO; +import com.win.module.system.controller.admin.dept.vo.post.PostSimpleRespVO; +import com.win.module.system.controller.admin.permission.vo.role.RoleSimpleRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +@Schema(description = "管理后台 - 用户个人中心信息 Response VO") +public class UserProfileRespVO { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + private String username; + + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + private String nickname; + + @Schema(description = "用户邮箱", example = "win@iocoder.cn") + private String email; + + @Schema(description = "手机号码", example = "15601691300") + private String mobile; + + @Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1") + private Integer sex; + + @Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.png") + private String avatar; + + @Schema(description = "最后登录 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "192.168.1.1") + private String loginIp; + + @Schema(description = "最后登录时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") + private LocalDateTime loginDate; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") + private LocalDateTime createTime; + + /** + * 所属角色 + */ + private List roles; + /** + * 所在部门 + */ + private DeptSimpleRespVO dept; + /** + * 所属岗位数组 + */ + private List posts; + /** + * 社交用户数组 + */ + private List socialUsers; + + @Schema(description = "社交用户") + @Data + public static class SocialUser { + + @Schema(description = "社交平台的类型,参见 SocialTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + private Integer type; + + @Schema(description = "社交用户的 openid", requiredMode = Schema.RequiredMode.REQUIRED, example = "IPRmJ0wvBptiPIlGEZiPewGwiEiE") + private String openid; + + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java new file mode 100644 index 0000000..f2eb406 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java @@ -0,0 +1,23 @@ +package com.win.module.system.controller.admin.user.vo.profile; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import jakarta.validation.constraints.NotEmpty; + +@Schema(description = "管理后台 - 用户个人中心更新密码 Request VO") +@Data +public class UserProfileUpdatePasswordReqVO { + + @Schema(description = "旧密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") + @NotEmpty(message = "旧密码不能为空") + @Length(min = 4, max = 16, message = "密码长度为 4-16 位") + private String oldPassword; + + @Schema(description = "新密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "654321") + @NotEmpty(message = "新密码不能为空") + @Length(min = 4, max = 16, message = "密码长度为 4-16 位") + private String newPassword; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java new file mode 100644 index 0000000..40cb9c2 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java @@ -0,0 +1,31 @@ +package com.win.module.system.controller.admin.user.vo.profile; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.Size; + + +@Schema(description = "管理后台 - 用户个人信息更新 Request VO") +@Data +public class UserProfileUpdateReqVO { + + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @Size(max = 30, message = "用户昵称长度不能超过 30 个字符") + private String nickname; + + @Schema(description = "用户邮箱", example = "win@iocoder.cn") + @Email(message = "邮箱格式不正确") + @Size(max = 50, message = "邮箱长度不能超过 50 个字符") + private String email; + + @Schema(description = "手机号码", example = "15601691300") + @Length(min = 11, max = 11, message = "手机号长度必须 11 位") + private String mobile; + + @Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1") + private Integer sex; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserImportExcelVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserImportExcelVO.java new file mode 100644 index 0000000..0844338 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserImportExcelVO.java @@ -0,0 +1,46 @@ +package com.win.module.system.controller.admin.user.vo.user; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.system.enums.DictTypeConstants; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 用户 Excel 导入 VO + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题 +public class UserImportExcelVO { + + @ExcelProperty("登录名称") + private String username; + + @ExcelProperty("用户名称") + private String nickname; + + @ExcelProperty("部门编号") + private Long deptId; + + @ExcelProperty("用户邮箱") + private String email; + + @ExcelProperty("手机号码") + private String mobile; + + @ExcelProperty(value = "用户性别", converter = DictConvert.class) + @DictFormat(DictTypeConstants.USER_SEX) + private Integer sex; + + @ExcelProperty(value = "账号状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.COMMON_STATUS) + private Integer status; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserImportRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserImportRespVO.java new file mode 100644 index 0000000..4a2525f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserImportRespVO.java @@ -0,0 +1,24 @@ +package com.win.module.system.controller.admin.user.vo.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Schema(description = "管理后台 - 用户导入 Response VO") +@Data +@Builder +public class UserImportRespVO { + + @Schema(description = "创建成功的用户名数组", requiredMode = Schema.RequiredMode.REQUIRED) + private List createUsernames; + + @Schema(description = "更新成功的用户名数组", requiredMode = Schema.RequiredMode.REQUIRED) + private List updateUsernames; + + @Schema(description = "导入失败的用户集合,key 为用户名,value 为失败原因", requiredMode = Schema.RequiredMode.REQUIRED) + private Map failureUsernames; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserPageReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserPageReqVO.java new file mode 100644 index 0000000..2d49bef --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserPageReqVO.java @@ -0,0 +1,38 @@ +package com.win.module.system.controller.admin.user.vo.user; + +import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 用户分页 Request VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class UserPageReqVO extends PageParam { + + @Schema(description = "用户账号,模糊匹配", example = "win") + private String username; + + @Schema(description = "手机号码,模糊匹配", example = "win") + private String mobile; + + @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1") + private Integer status; + + @Schema(description = "创建时间", example = "[2022-07-01 00:00:00, 2022-07-01 23:59:59]") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "部门编号,同时筛选子部门", example = "1024") + private Long deptId; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserRespVO.java new file mode 100644 index 0000000..07bf9f1 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserRespVO.java @@ -0,0 +1,75 @@ +package com.win.module.system.controller.admin.user.vo.user; + +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.system.enums.DictTypeConstants; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Set; + +@Schema(description = "管理后台 - 用户信息 Response VO") +@Data +@ExcelIgnoreUnannotated +public class UserRespVO{ + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("用户编号") + private Long id; + + @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + @ExcelProperty("用户名称") + private String username; + + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @ExcelProperty("用户昵称") + private String nickname; + + @Schema(description = "备注", example = "我是一个用户") + private String remark; + + @Schema(description = "部门ID", example = "我是一个用户") + private Long deptId; + @Schema(description = "部门名称", example = "IT 部") + @ExcelProperty("部门名称") + private String deptName; + + @Schema(description = "岗位编号数组", example = "1") + private Set postIds; + + @Schema(description = "用户邮箱", example = "win@iocoder.cn") + @ExcelProperty("用户邮箱") + private String email; + + @Schema(description = "手机号码", example = "15601691300") + @ExcelProperty("手机号码") + private String mobile; + + @Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1") + @ExcelProperty(value = "用户性别", converter = DictConvert.class) + @DictFormat(DictTypeConstants.USER_SEX) + private Integer sex; + + @Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.png") + private String avatar; + + @Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "帐号状态", converter = DictConvert.class) + @DictFormat(DictTypeConstants.COMMON_STATUS) + private Integer status; + + @Schema(description = "最后登录 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "192.168.1.1") + @ExcelProperty("最后登录IP") + private String loginIp; + + @Schema(description = "最后登录时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") + @ExcelProperty("最后登录时间") + private LocalDateTime loginDate; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") + private LocalDateTime createTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserSaveReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserSaveReqVO.java new file mode 100644 index 0000000..9af7d3a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserSaveReqVO.java @@ -0,0 +1,80 @@ +package com.win.module.system.controller.admin.user.vo.user; + +import cn.hutool.core.util.ObjectUtil; +import com.win.framework.common.validation.Mobile; +import com.win.module.system.framework.operatelog.core.DeptParseFunction; +import com.win.module.system.framework.operatelog.core.PostParseFunction; +import com.win.module.system.framework.operatelog.core.SexParseFunction; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.mzt.logapi.starter.annotation.DiffLogField; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.*; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import java.util.Set; + +@Schema(description = "管理后台 - 用户创建/修改 Request VO") +@Data +public class UserSaveReqVO { + + @Schema(description = "用户编号", example = "1024") + private Long id; + + @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "win") + @NotBlank(message = "用户账号不能为空") + @Pattern(regexp = "^[a-zA-Z0-9]{4,30}$", message = "用户账号由 数字、字母 组成") + @Size(min = 4, max = 30, message = "用户账号长度为 4-30 个字符") + @DiffLogField(name = "用户账号") + private String username; + + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @Size(max = 30, message = "用户昵称长度不能超过30个字符") + @DiffLogField(name = "用户昵称") + private String nickname; + + @Schema(description = "备注", example = "我是一个用户") + @DiffLogField(name = "备注") + private String remark; + + @Schema(description = "部门编号", example = "我是一个用户") + @DiffLogField(name = "部门", function = DeptParseFunction.NAME) + private Long deptId; + + @Schema(description = "岗位编号数组", example = "1") + @DiffLogField(name = "岗位", function = PostParseFunction.NAME) + private Set postIds; + + @Schema(description = "用户邮箱", example = "win@iocoder.cn") + @Email(message = "邮箱格式不正确") + @Size(max = 50, message = "邮箱长度不能超过 50 个字符") + @DiffLogField(name = "用户邮箱") + private String email; + + @Schema(description = "手机号码", example = "15601691300") + @Mobile + @DiffLogField(name = "手机号码") + private String mobile; + + @Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1") + @DiffLogField(name = "用户性别", function = SexParseFunction.NAME) + private Integer sex; + + @Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.png") + @DiffLogField(name = "用户头像") + private String avatar; + + // ========== 仅【创建】时,需要传递的字段 ========== + + @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") + @Length(min = 4, max = 16, message = "密码长度为 4-16 位") + private String password; + + @AssertTrue(message = "密码不能为空") + @JsonIgnore + public boolean isPasswordValid() { + return id != null // 修改时,不需要传递 + || (ObjectUtil.isAllNotEmpty(password)); // 新增时,必须都传递 password + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserSimpleRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserSimpleRespVO.java new file mode 100644 index 0000000..c8d9daa --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserSimpleRespVO.java @@ -0,0 +1,25 @@ +package com.win.module.system.controller.admin.user.vo.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Schema(description = "管理后台 - 用户精简信息 Response VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserSimpleRespVO { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String nickname; + + @Schema(description = "部门ID", example = "我是一个用户") + private Long deptId; + @Schema(description = "部门名称", example = "IT 部") + private String deptName; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java new file mode 100644 index 0000000..9ff0d1b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java @@ -0,0 +1,23 @@ +package com.win.module.system.controller.admin.user.vo.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 用户更新密码 Request VO") +@Data +public class UserUpdatePasswordReqVO { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "用户编号不能为空") + private Long id; + + @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") + @NotEmpty(message = "密码不能为空") + @Length(min = 4, max = 16, message = "密码长度为 4-16 位") + private String password; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserUpdateStatusReqVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserUpdateStatusReqVO.java new file mode 100644 index 0000000..f505291 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/user/vo/user/UserUpdateStatusReqVO.java @@ -0,0 +1,23 @@ +package com.win.module.system.controller.admin.user.vo.user; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.validation.InEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 用户更新状态 Request VO") +@Data +public class UserUpdateStatusReqVO { + + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "角色编号不能为空") + private Long id; + + @Schema(description = "状态,见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}") + private Integer status; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/dict/AppDictDataController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/dict/AppDictDataController.java new file mode 100644 index 0000000..115ccd6 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/dict/AppDictDataController.java @@ -0,0 +1,41 @@ +package com.win.module.system.controller.app.dict; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.app.dict.vo.AppDictDataRespVO; +import com.win.module.system.dal.dataobject.dict.DictDataDO; +import com.win.module.system.service.dict.DictDataService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.annotation.Resource; +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "用户 App - 字典数据") +@RestController +@RequestMapping("/system/dict-data") +@Validated +public class AppDictDataController { + + @Resource + private DictDataService dictDataService; + + @GetMapping("/type") + @Operation(summary = "根据字典类型查询字典数据信息") + @Parameter(name = "type", description = "字典类型", required = true, example = "common_status") + public CommonResult> getDictDataListByType(@RequestParam("type") String type) { + List list = dictDataService.getDictDataList( + CommonStatusEnum.ENABLE.getStatus(), type); + return success(BeanUtils.toBean(list, AppDictDataRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/dict/vo/AppDictDataRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/dict/vo/AppDictDataRespVO.java new file mode 100644 index 0000000..2829f8e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/dict/vo/AppDictDataRespVO.java @@ -0,0 +1,26 @@ +package com.win.module.system.controller.app.dict.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Schema(description = "用户 App - 字典数据信息 Response VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AppDictDataRespVO { + + @Schema(description = "字典数据编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "字典标签", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道") + private String label; + + @Schema(description = "字典值", requiredMode = Schema.RequiredMode.REQUIRED, example = "iocoder") + private String value; + + @Schema(description = "字典类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "sys_common_sex") + private String dictType; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/ip/AppAreaController.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/ip/AppAreaController.java new file mode 100644 index 0000000..2156531 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/ip/AppAreaController.java @@ -0,0 +1,34 @@ +package com.win.module.system.controller.app.ip; + +import cn.hutool.core.lang.Assert; +import com.win.framework.common.pojo.CommonResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.ip.core.Area; +import com.win.framework.ip.core.utils.AreaUtils; +import com.win.module.system.controller.app.ip.vo.AppAreaNodeRespVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "用户 App - 地区") +@RestController +@RequestMapping("/system/area") +@Validated +public class AppAreaController { + + @GetMapping("/tree") + @Operation(summary = "获得地区树") + public CommonResult> getAreaTree() { + Area area = AreaUtils.getArea(Area.ID_CHINA); + Assert.notNull(area, "获取不到中国"); + return success(BeanUtils.toBean(area.getChildren(), AppAreaNodeRespVO.class)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/ip/vo/AppAreaNodeRespVO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/ip/vo/AppAreaNodeRespVO.java new file mode 100644 index 0000000..c62f462 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/ip/vo/AppAreaNodeRespVO.java @@ -0,0 +1,23 @@ +package com.win.module.system.controller.app.ip.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Schema(description = "用户 App - 地区节点 Response VO") +@Data +public class AppAreaNodeRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "110000") + private Integer id; + + @Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "北京") + private String name; + + /** + * 子节点 + */ + private List children; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/package-info.java new file mode 100644 index 0000000..1a9ad0a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/app/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位,避免 package 无法提交到 Git 仓库 + */ +package com.win.module.system.controller.app; diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/package-info.java new file mode 100644 index 0000000..f7da06a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/package-info.java @@ -0,0 +1,6 @@ +/** + * 提供 RESTful API 给前端: + * 1. admin 包:提供给管理后台 win-ui-admin 前端项目 + * 2. app 包:提供给用户 APP win-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 + */ +package com.win.module.system.controller; diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/auth/AuthConvert.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/auth/AuthConvert.java new file mode 100644 index 0000000..6d52108 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/auth/AuthConvert.java @@ -0,0 +1,88 @@ +package com.win.module.system.convert.auth; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.api.sms.dto.code.SmsCodeSendReqDTO; +import com.win.module.system.api.sms.dto.code.SmsCodeUseReqDTO; +import com.win.module.system.api.social.dto.SocialUserBindReqDTO; +import com.win.module.system.controller.admin.auth.vo.*; +import com.win.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; +import com.win.module.system.dal.dataobject.permission.MenuDO; +import com.win.module.system.dal.dataobject.permission.RoleDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.module.system.enums.permission.MenuTypeEnum; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.slf4j.LoggerFactory; + +import java.util.*; + +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; +import static com.win.framework.common.util.collection.CollectionUtils.filterList; +import static com.win.module.system.dal.dataobject.permission.MenuDO.ID_ROOT; + +@Mapper +public interface AuthConvert { + + AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class); + + AuthLoginRespVO convert(OAuth2AccessTokenDO bean); + + default AuthPermissionInfoRespVO convert(AdminUserDO user, List roleList, List menuList) { + return AuthPermissionInfoRespVO.builder() + .user(BeanUtils.toBean(user, AuthPermissionInfoRespVO.UserVO.class)) + .roles(convertSet(roleList, RoleDO::getCode)) + // 权限标识信息 + .permissions(convertSet(menuList, MenuDO::getPermission)) + // 菜单树 + .menus(buildMenuTree(menuList)) + .build(); + } + + AuthPermissionInfoRespVO.MenuVO convertTreeNode(MenuDO menu); + + /** + * 将菜单列表,构建成菜单树 + * + * @param menuList 菜单列表 + * @return 菜单树 + */ + default List buildMenuTree(List menuList) { + if (CollUtil.isEmpty(menuList)) { + return Collections.emptyList(); + } + // 移除按钮 + menuList.removeIf(menu -> menu.getType().equals(MenuTypeEnum.BUTTON.getType())); + // 排序,保证菜单的有序性 + menuList.sort(Comparator.comparing(MenuDO::getSort)); + + // 构建菜单树 + // 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。 + Map treeNodeMap = new LinkedHashMap<>(); + menuList.forEach(menu -> treeNodeMap.put(menu.getId(), AuthConvert.INSTANCE.convertTreeNode(menu))); + // 处理父子关系 + treeNodeMap.values().stream().filter(node -> !node.getParentId().equals(ID_ROOT)).forEach(childNode -> { + // 获得父节点 + AuthPermissionInfoRespVO.MenuVO parentNode = treeNodeMap.get(childNode.getParentId()); + if (parentNode == null) { + LoggerFactory.getLogger(getClass()).error("[buildRouterTree][resource({}) 找不到父资源({})]", + childNode.getId(), childNode.getParentId()); + return; + } + // 将自己添加到父节点中 + if (parentNode.getChildren() == null) { + parentNode.setChildren(new ArrayList<>()); + } + parentNode.getChildren().add(childNode); + }); + // 获得到所有的根节点 + return filterList(treeNodeMap.values(), node -> ID_ROOT.equals(node.getParentId())); + } + + SocialUserBindReqDTO convert(Long userId, Integer userType, AuthSocialLoginReqVO reqVO); + + SmsCodeSendReqDTO convert(AuthSmsSendReqVO reqVO); + + SmsCodeUseReqDTO convert(AuthSmsLoginReqVO reqVO, Integer scene, String usedIp); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/oauth2/OAuth2OpenConvert.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/oauth2/OAuth2OpenConvert.java new file mode 100644 index 0000000..b9a8954 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/oauth2/OAuth2OpenConvert.java @@ -0,0 +1,56 @@ +package com.win.module.system.convert.oauth2; + +import cn.hutool.core.date.LocalDateTimeUtil; +import com.win.framework.common.core.KeyValue; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.security.core.util.SecurityFrameworkUtils; +import com.win.module.system.controller.admin.oauth2.vo.open.OAuth2OpenAccessTokenRespVO; +import com.win.module.system.controller.admin.oauth2.vo.open.OAuth2OpenAuthorizeInfoRespVO; +import com.win.module.system.controller.admin.oauth2.vo.open.OAuth2OpenCheckTokenRespVO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2ApproveDO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2ClientDO; +import com.win.module.system.util.oauth2.OAuth2Utils; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Mapper +public interface OAuth2OpenConvert { + + OAuth2OpenConvert INSTANCE = Mappers.getMapper(OAuth2OpenConvert.class); + + default OAuth2OpenAccessTokenRespVO convert(OAuth2AccessTokenDO bean) { + OAuth2OpenAccessTokenRespVO respVO = BeanUtils.toBean(bean, OAuth2OpenAccessTokenRespVO.class); + respVO.setTokenType(SecurityFrameworkUtils.AUTHORIZATION_BEARER.toLowerCase()); + respVO.setExpiresIn(OAuth2Utils.getExpiresIn(bean.getExpiresTime())); + respVO.setScope(OAuth2Utils.buildScopeStr(bean.getScopes())); + return respVO; + } + + default OAuth2OpenCheckTokenRespVO convert2(OAuth2AccessTokenDO bean) { + OAuth2OpenCheckTokenRespVO respVO = BeanUtils.toBean(bean, OAuth2OpenCheckTokenRespVO.class); + respVO.setExp(LocalDateTimeUtil.toEpochMilli(bean.getExpiresTime()) / 1000L); + respVO.setUserType(UserTypeEnum.ADMIN.getValue()); + return respVO; + } + + default OAuth2OpenAuthorizeInfoRespVO convert(OAuth2ClientDO client, List approves) { + // 构建 scopes + List> scopes = new ArrayList<>(client.getScopes().size()); + Map approveMap = CollectionUtils.convertMap(approves, OAuth2ApproveDO::getScope); + client.getScopes().forEach(scope -> { + OAuth2ApproveDO approve = approveMap.get(scope); + scopes.add(new KeyValue<>(scope, approve != null ? approve.getApproved() : false)); + }); + // 拼接返回 + return new OAuth2OpenAuthorizeInfoRespVO( + new OAuth2OpenAuthorizeInfoRespVO.Client(client.getName(), client.getLogo()), scopes); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/package-info.java new file mode 100644 index 0000000..5baeb0b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/package-info.java @@ -0,0 +1,6 @@ +/** + * 提供 POJO 类的实体转换 + * + * 目前使用 MapStruct 框架 + */ +package com.win.module.system.convert; diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/social/SocialUserConvert.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/social/SocialUserConvert.java new file mode 100644 index 0000000..f0f3183 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/social/SocialUserConvert.java @@ -0,0 +1,17 @@ +package com.win.module.system.convert.social; + +import com.win.module.system.api.social.dto.SocialUserBindReqDTO; +import com.win.module.system.controller.admin.socail.vo.user.SocialUserBindReqVO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface SocialUserConvert { + + SocialUserConvert INSTANCE = Mappers.getMapper(SocialUserConvert.class); + + @Mapping(source = "reqVO.type", target = "socialType") + SocialUserBindReqDTO convert(Long userId, Integer userType, SocialUserBindReqVO reqVO); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/tenant/TenantConvert.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/tenant/TenantConvert.java new file mode 100644 index 0000000..e90dde0 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/tenant/TenantConvert.java @@ -0,0 +1,26 @@ +package com.win.module.system.convert.tenant; + +import com.win.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO; +import com.win.module.system.controller.admin.user.vo.user.UserSaveReqVO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 租户 Convert + * + * @author 芋道源码 + */ +@Mapper +public interface TenantConvert { + + TenantConvert INSTANCE = Mappers.getMapper(TenantConvert.class); + + default UserSaveReqVO convert02(TenantSaveReqVO bean) { + UserSaveReqVO reqVO = new UserSaveReqVO(); + reqVO.setUsername(bean.getUsername()); + reqVO.setPassword(bean.getPassword()); + reqVO.setNickname(bean.getContactName()).setMobile(bean.getContactMobile()); + return reqVO; + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/user/UserConvert.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/user/UserConvert.java new file mode 100644 index 0000000..1607668 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/user/UserConvert.java @@ -0,0 +1,58 @@ +package com.win.module.system.convert.user; + +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.common.util.collection.MapUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO; +import com.win.module.system.controller.admin.dept.vo.post.PostSimpleRespVO; +import com.win.module.system.controller.admin.permission.vo.role.RoleSimpleRespVO; +import com.win.module.system.controller.admin.user.vo.profile.UserProfileRespVO; +import com.win.module.system.controller.admin.user.vo.user.UserRespVO; +import com.win.module.system.controller.admin.user.vo.user.UserSimpleRespVO; +import com.win.module.system.dal.dataobject.dept.DeptDO; +import com.win.module.system.dal.dataobject.dept.PostDO; +import com.win.module.system.dal.dataobject.permission.RoleDO; +import com.win.module.system.dal.dataobject.social.SocialUserDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface UserConvert { + + UserConvert INSTANCE = Mappers.getMapper(UserConvert.class); + + default List convertList(List list, Map deptMap) { + return CollectionUtils.convertList(list, user -> convert(user, deptMap.get(user.getDeptId()))); + } + + default UserRespVO convert(AdminUserDO user, DeptDO dept) { + UserRespVO userVO = BeanUtils.toBean(user, UserRespVO.class); + if (dept != null) { + userVO.setDeptName(dept.getName()); + } + return userVO; + } + + default List convertSimpleList(List list, Map deptMap) { + return CollectionUtils.convertList(list, user -> { + UserSimpleRespVO userVO = BeanUtils.toBean(user, UserSimpleRespVO.class); + MapUtils.findAndThen(deptMap, user.getDeptId(), dept -> userVO.setDeptName(dept.getName())); + return userVO; + }); + } + + default UserProfileRespVO convert(AdminUserDO user, List userRoles, + DeptDO dept, List posts, List socialUsers) { + UserProfileRespVO userVO = BeanUtils.toBean(user, UserProfileRespVO.class); + userVO.setRoles(BeanUtils.toBean(userRoles, RoleSimpleRespVO.class)); + userVO.setDept(BeanUtils.toBean(dept, DeptSimpleRespVO.class)); + userVO.setPosts(BeanUtils.toBean(posts, PostSimpleRespVO.class)); + userVO.setSocialUsers(BeanUtils.toBean(socialUsers, UserProfileRespVO.SocialUser.class)); + return userVO; + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md new file mode 100644 index 0000000..2f05ebd --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md @@ -0,0 +1 @@ + diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dept/DeptDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dept/DeptDO.java new file mode 100644 index 0000000..b1c04d4 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dept/DeptDO.java @@ -0,0 +1,66 @@ +package com.win.module.system.dal.dataobject.dept; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.tenant.core.db.TenantBaseDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 部门表 + * + * @author ruoyi + * @author 芋道源码 + */ +@TableName("system_dept") +@KeySequence("system_dept_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class DeptDO extends TenantBaseDO { + + public static final Long PARENT_ID_ROOT = 0L; + + /** + * 部门ID + */ + @TableId + private Long id; + /** + * 部门名称 + */ + private String name; + /** + * 父部门ID + * + * 关联 {@link #id} + */ + private Long parentId; + /** + * 显示顺序 + */ + private Integer sort; + /** + * 负责人 + * + * 关联 {@link AdminUserDO#getId()} + */ + private Long leaderUserId; + /** + * 联系电话 + */ + private String phone; + /** + * 邮箱 + */ + private String email; + /** + * 部门状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dept/PostDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dept/PostDO.java new file mode 100644 index 0000000..3efe1c5 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dept/PostDO.java @@ -0,0 +1,50 @@ +package com.win.module.system.dal.dataobject.dept; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 岗位表 + * + * @author ruoyi + */ +@TableName("system_post") +@KeySequence("system_post_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class PostDO extends BaseDO { + + /** + * 岗位序号 + */ + @TableId + private Long id; + /** + * 岗位名称 + */ + private String name; + /** + * 岗位编码 + */ + private String code; + /** + * 岗位排序 + */ + private Integer sort; + /** + * 状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 备注 + */ + private String remark; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dept/UserPostDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dept/UserPostDO.java new file mode 100644 index 0000000..974c919 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dept/UserPostDO.java @@ -0,0 +1,40 @@ +package com.win.module.system.dal.dataobject.dept; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户和岗位关联 + * + * @author ruoyi + */ +@TableName("system_user_post") +@KeySequence("system_user_post_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class UserPostDO extends BaseDO { + + /** + * 自增主键 + */ + @TableId + private Long id; + /** + * 用户 ID + * + * 关联 {@link AdminUserDO#getId()} + */ + private Long userId; + /** + * 角色 ID + * + * 关联 {@link PostDO#getId()} + */ + private Long postId; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dict/DictDataDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dict/DictDataDO.java new file mode 100644 index 0000000..0baf05e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dict/DictDataDO.java @@ -0,0 +1,65 @@ +package com.win.module.system.dal.dataobject.dict; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 字典数据表 + * + * @author ruoyi + */ +@TableName("system_dict_data") +@KeySequence("system_dict_data_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class DictDataDO extends BaseDO { + + /** + * 字典数据编号 + */ + @TableId + private Long id; + /** + * 字典排序 + */ + private Integer sort; + /** + * 字典标签 + */ + private String label; + /** + * 字典值 + */ + private String value; + /** + * 字典类型 + * + * 冗余 {@link DictDataDO#getDictType()} + */ + private String dictType; + /** + * 状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 颜色类型 + * + * 对应到 element-ui 为 default、primary、success、info、warning、danger + */ + private String colorType; + /** + * css 样式 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String cssClass; + /** + * 备注 + */ + private String remark; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dict/DictTypeDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dict/DictTypeDO.java new file mode 100644 index 0000000..237b539 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/dict/DictTypeDO.java @@ -0,0 +1,56 @@ +package com.win.module.system.dal.dataobject.dict; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.time.LocalDateTime; + +/** + * 字典类型表 + * + * @author ruoyi + */ +@TableName("system_dict_type") +@KeySequence("system_dict_type_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DictTypeDO extends BaseDO { + + /** + * 字典主键 + */ + @TableId + private Long id; + /** + * 字典名称 + */ + private String name; + /** + * 字典类型 + */ + private String type; + /** + * 状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 备注 + */ + private String remark; + + /** + * 删除时间 + */ + private LocalDateTime deletedTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/logger/LoginLogDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/logger/LoginLogDO.java new file mode 100644 index 0000000..1a1f7d7 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/logger/LoginLogDO.java @@ -0,0 +1,72 @@ +package com.win.module.system.dal.dataobject.logger; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.system.enums.logger.LoginLogTypeEnum; +import com.win.module.system.enums.logger.LoginResultEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * 登录日志表 + * + * 注意,包括登录和登出两种行为 + * + * @author 芋道源码 + */ +@TableName("system_login_log") +@KeySequence("system_login_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class LoginLogDO extends BaseDO { + + /** + * 日志主键 + */ + private Long id; + /** + * 日志类型 + * + * 枚举 {@link LoginLogTypeEnum} + */ + private Integer logType; + /** + * 链路追踪编号 + */ + private String traceId; + /** + * 用户编号 + */ + private Long userId; + /** + * 用户类型 + * + * 枚举 {@link UserTypeEnum} + */ + private Integer userType; + /** + * 用户账号 + * + * 冗余,因为账号可以变更 + */ + private String username; + /** + * 登录结果 + * + * 枚举 {@link LoginResultEnum} + */ + private Integer result; + /** + * 用户 IP + */ + private String userIp; + /** + * 浏览器 UA + */ + private String userAgent; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/logger/OperateLogDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/logger/OperateLogDO.java new file mode 100644 index 0000000..2e15896 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/logger/OperateLogDO.java @@ -0,0 +1,85 @@ +package com.win.module.system.dal.dataobject.logger; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * 操作日志表 + * + * @author 芋道源码 + */ +@TableName(value = "system_operate_log", autoResultMap = true) +@KeySequence("system_operate_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +public class OperateLogDO extends BaseDO { + + /** + * 日志主键 + */ + @TableId + private Long id; + /** + * 链路追踪编号 + * + * 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。 + */ + private String traceId; + /** + * 用户编号 + * + * 关联 MemberUserDO 的 id 属性,或者 AdminUserDO 的 id 属性 + */ + private Long userId; + /** + * 用户类型 + * + * 关联 {@link UserTypeEnum} + */ + private Integer userType; + /** + * 操作模块类型 + */ + private String type; + /** + * 操作名 + */ + private String subType; + /** + * 操作模块业务编号 + */ + private Long bizId; + /** + * 日志内容,记录整个操作的明细 + * + * 例如说,修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。 + */ + private String action; + /** + * 拓展字段,有些复杂的业务,需要记录一些字段 ( JSON 格式 ) + * + * 例如说,记录订单编号,{ orderId: "1"} + */ + private String extra; + + /** + * 请求方法名 + */ + private String requestMethod; + /** + * 请求地址 + */ + private String requestUrl; + /** + * 用户 IP + */ + private String userIp; + /** + * 浏览器 UA + */ + private String userAgent; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/mail/MailAccountDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/mail/MailAccountDO.java new file mode 100644 index 0000000..978b1d6 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/mail/MailAccountDO.java @@ -0,0 +1,57 @@ +package com.win.module.system.dal.dataobject.mail; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 邮箱账号 DO + * + * 用途:配置发送邮箱的账号 + * + * @author wangjingyi + * @since 2022-03-21 + */ +@TableName(value = "system_mail_account", autoResultMap = true) +@Data +@EqualsAndHashCode(callSuper = true) +public class MailAccountDO extends BaseDO { + + /** + * 主键 + */ + @TableId + private Long id; + /** + * 邮箱 + */ + private String mail; + + /** + * 用户名 + */ + private String username; + /** + * 密码 + */ + private String password; + /** + * SMTP 服务器域名 + */ + private String host; + /** + * SMTP 服务器端口 + */ + private Integer port; + /** + * 是否开启 SSL + */ + private Boolean sslEnable; + /** + * 是否开启 STARTTLS + */ + private Boolean starttlsEnable; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/mail/MailLogDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/mail/MailLogDO.java new file mode 100644 index 0000000..290d93c --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/mail/MailLogDO.java @@ -0,0 +1,122 @@ +package com.win.module.system.dal.dataobject.mail; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.system.enums.mail.MailSendStatusEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.*; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Map; + +/** + * 邮箱日志 DO + * 记录每一次邮件的发送 + * + * @author wangjingyi + * @since 2022-03-21 + */ +@TableName(value = "system_mail_log", autoResultMap = true) +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MailLogDO extends BaseDO implements Serializable { + + /** + * 日志编号,自增 + */ + private Long id; + + /** + * 用户编码 + */ + private Long userId; + /** + * 用户类型 + * + * 枚举 {@link UserTypeEnum} + */ + private Integer userType; + /** + * 接收邮箱地址 + */ + private String toMail; + + /** + * 邮箱账号编号 + * + * 关联 {@link MailAccountDO#getId()} + */ + private Long accountId; + /** + * 发送邮箱地址 + * + * 冗余 {@link MailAccountDO#getMail()} + */ + private String fromMail; + + // ========= 模板相关字段 ========= + /** + * 模版编号 + * + * 关联 {@link MailTemplateDO#getId()} + */ + private Long templateId; + /** + * 模版编码 + * + * 冗余 {@link MailTemplateDO#getCode()} + */ + private String templateCode; + /** + * 模版发送人名称 + * + * 冗余 {@link MailTemplateDO#getNickname()} + */ + private String templateNickname; + /** + * 模版标题 + */ + private String templateTitle; + /** + * 模版内容 + * + * 基于 {@link MailTemplateDO#getContent()} 格式化后的内容 + */ + private String templateContent; + /** + * 模版参数 + * + * 基于 {@link MailTemplateDO#getParams()} 输入后的参数 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private Map templateParams; + + // ========= 发送相关字段 ========= + /** + * 发送状态 + * + * 枚举 {@link MailSendStatusEnum} + */ + private Integer sendStatus; + /** + * 发送时间 + */ + private LocalDateTime sendTime; + /** + * 发送返回的消息 ID + */ + private String sendMessageId; + /** + * 发送异常 + */ + private String sendException; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/mail/MailTemplateDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/mail/MailTemplateDO.java new file mode 100644 index 0000000..6da6966 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/mail/MailTemplateDO.java @@ -0,0 +1,71 @@ +package com.win.module.system.dal.dataobject.mail; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * 邮件模版 DO + * + * @author wangjingyi + * @since 2022-03-21 + */ +@TableName(value = "system_mail_template", autoResultMap = true) +@Data +@EqualsAndHashCode(callSuper = true) +public class MailTemplateDO extends BaseDO { + + /** + * 主键 + */ + private Long id; + /** + * 模版名称 + */ + private String name; + /** + * 模版编号 + */ + private String code; + /** + * 发送的邮箱账号编号 + * + * 关联 {@link MailAccountDO#getId()} + */ + private Long accountId; + + /** + * 发送人名称 + */ + private String nickname; + /** + * 标题 + */ + private String title; + /** + * 内容 + */ + private String content; + /** + * 参数数组(自动根据内容生成) + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List params; + /** + * 状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 备注 + */ + private String remark; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/notice/NoticeDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/notice/NoticeDO.java new file mode 100644 index 0000000..7950a0c --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/notice/NoticeDO.java @@ -0,0 +1,47 @@ +package com.win.module.system.dal.dataobject.notice; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.system.enums.notice.NoticeTypeEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 通知公告表 + * + * @author ruoyi + */ +@TableName("system_notice") +@KeySequence("system_notice_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class NoticeDO extends BaseDO { + + /** + * 公告ID + */ + private Long id; + /** + * 公告标题 + */ + private String title; + /** + * 公告类型 + * + * 枚举 {@link NoticeTypeEnum} + */ + private Integer type; + /** + * 公告内容 + */ + private String content; + /** + * 公告状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/notify/NotifyMessageDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/notify/NotifyMessageDO.java new file mode 100644 index 0000000..4d753f9 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/notify/NotifyMessageDO.java @@ -0,0 +1,99 @@ +package com.win.module.system.dal.dataobject.notify; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.*; + +import java.time.LocalDateTime; +import java.util.Map; + +/** + * 站内信 DO + * + * @author xrcoder + */ +@TableName(value = "system_notify_message", autoResultMap = true) +@KeySequence("system_notify_message_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class NotifyMessageDO extends BaseDO { + + /** + * 站内信编号,自增 + */ + @TableId + private Long id; + /** + * 用户编号 + * + * 关联 MemberUserDO 的 id 字段、或者 AdminUserDO 的 id 字段 + */ + private Long userId; + /** + * 用户类型 + * + * 枚举 {@link UserTypeEnum} + */ + private Integer userType; + + // ========= 模板相关字段 ========= + + /** + * 模版编号 + * + * 关联 {@link NotifyTemplateDO#getId()} + */ + private Long templateId; + /** + * 模版编码 + * + * 关联 {@link NotifyTemplateDO#getCode()} + */ + private String templateCode; + /** + * 模版类型 + * + * 冗余 {@link NotifyTemplateDO#getType()} + */ + private Integer templateType; + /** + * 模版发送人名称 + * + * 冗余 {@link NotifyTemplateDO#getNickname()} + */ + private String templateNickname; + /** + * 模版内容 + * + * 基于 {@link NotifyTemplateDO#getContent()} 格式化后的内容 + */ + private String templateContent; + /** + * 模版参数 + * + * 基于 {@link NotifyTemplateDO#getParams()} 输入后的参数 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private Map templateParams; + + // ========= 读取相关字段 ========= + + /** + * 是否已读 + */ + private Boolean readStatus; + /** + * 阅读时间 + */ + private LocalDateTime readTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/notify/NotifyTemplateDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/notify/NotifyTemplateDO.java new file mode 100644 index 0000000..5fa6909 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/notify/NotifyTemplateDO.java @@ -0,0 +1,72 @@ +package com.win.module.system.dal.dataobject.notify; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.*; + +import java.util.List; + +/** + * 站内信模版 DO + * + * @author xrcoder + */ +@TableName(value = "system_notify_template", autoResultMap = true) +@KeySequence("system_notify_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class NotifyTemplateDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 模版名称 + */ + private String name; + /** + * 模版编码 + */ + private String code; + /** + * 模版类型 + * + * 对应 system_notify_template_type 字典 + */ + private Integer type; + /** + * 发送人名称 + */ + private String nickname; + /** + * 模版内容 + */ + private String content; + /** + * 参数数组 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List params; + /** + * 状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 备注 + */ + private String remark; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java new file mode 100644 index 0000000..d0b5f43 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java @@ -0,0 +1,75 @@ +package com.win.module.system.dal.dataobject.oauth2; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.tenant.core.db.TenantBaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +/** + * OAuth2 访问令牌 DO + * + * 如下字段,暂时未使用,暂时不支持: + * user_name、authentication(用户信息) + * + * @author 芋道源码 + */ +@TableName(value = "system_oauth2_access_token", autoResultMap = true) +@KeySequence("system_oauth2_access_token_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class OAuth2AccessTokenDO extends TenantBaseDO { + + /** + * 编号,数据库递增 + */ + @TableId + private Long id; + /** + * 访问令牌 + */ + private String accessToken; + /** + * 刷新令牌 + */ + private String refreshToken; + /** + * 用户编号 + */ + private Long userId; + /** + * 用户类型 + * + * 枚举 {@link UserTypeEnum} + */ + private Integer userType; + /** + * 用户信息 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private Map userInfo; + /** + * 客户端编号 + * + * 关联 {@link OAuth2ClientDO#getId()} + */ + private String clientId; + /** + * 授权范围 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List scopes; + /** + * 过期时间 + */ + private LocalDateTime expiresTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2ApproveDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2ApproveDO.java new file mode 100644 index 0000000..b181d34 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2ApproveDO.java @@ -0,0 +1,63 @@ +package com.win.module.system.dal.dataobject.oauth2; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * OAuth2 批准 DO + * + * 用户在 sso.vue 界面时,记录接受的 scope 列表 + * + * @author 芋道源码 + */ +@TableName(value = "system_oauth2_approve", autoResultMap = true) +@KeySequence("system_oauth2_approve_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class OAuth2ApproveDO extends BaseDO { + + /** + * 编号,数据库自增 + */ + @TableId + private Long id; + /** + * 用户编号 + */ + private Long userId; + /** + * 用户类型 + * + * 枚举 {@link UserTypeEnum} + */ + private Integer userType; + /** + * 客户端编号 + * + * 关联 {@link OAuth2ClientDO#getId()} + */ + private String clientId; + /** + * 授权范围 + */ + private String scope; + /** + * 是否接受 + * + * true - 接受 + * false - 拒绝 + */ + private Boolean approved; + /** + * 过期时间 + */ + private LocalDateTime expiresTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2ClientDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2ClientDO.java new file mode 100644 index 0000000..19cfe32 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2ClientDO.java @@ -0,0 +1,107 @@ +package com.win.module.system.dal.dataobject.oauth2; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.system.enums.oauth2.OAuth2GrantTypeEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * OAuth2 客户端 DO + * + * @author 芋道源码 + */ +@TableName(value = "system_oauth2_client", autoResultMap = true) +@KeySequence("system_oauth2_client_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class OAuth2ClientDO extends BaseDO { + + /** + * 编号,数据库自增 + * + * 由于 SQL Server 在存储 String 主键有点问题,所以暂时使用 Long 类型 + */ + @TableId + private Long id; + /** + * 客户端编号 + */ + private String clientId; + /** + * 客户端密钥 + */ + private String secret; + /** + * 应用名 + */ + private String name; + /** + * 应用图标 + */ + private String logo; + /** + * 应用描述 + */ + private String description; + /** + * 状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 访问令牌的有效期 + */ + private Integer accessTokenValiditySeconds; + /** + * 刷新令牌的有效期 + */ + private Integer refreshTokenValiditySeconds; + /** + * 可重定向的 URI 地址 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List redirectUris; + /** + * 授权类型(模式) + * + * 枚举 {@link OAuth2GrantTypeEnum} + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List authorizedGrantTypes; + /** + * 授权范围 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List scopes; + /** + * 自动授权的 Scope + * + * code 授权时,如果 scope 在这个范围内,则自动通过 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List autoApproveScopes; + /** + * 权限 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List authorities; + /** + * 资源 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List resourceIds; + /** + * 附加信息,JSON 格式 + */ + private String additionalInformation; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2CodeDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2CodeDO.java new file mode 100644 index 0000000..a23ccdf --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2CodeDO.java @@ -0,0 +1,68 @@ +package com.win.module.system.dal.dataobject.oauth2; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * OAuth2 授权码 DO + * + * @author 芋道源码 + */ +@TableName(value = "system_oauth2_code", autoResultMap = true) +@KeySequence("system_oauth2_code_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class OAuth2CodeDO extends BaseDO { + + /** + * 编号,数据库递增 + */ + private Long id; + /** + * 授权码 + */ + private String code; + /** + * 用户编号 + */ + private Long userId; + /** + * 用户类型 + * + * 枚举 {@link UserTypeEnum} + */ + private Integer userType; + /** + * 客户端编号 + * + * 关联 {@link OAuth2ClientDO#getClientId()} + */ + private String clientId; + /** + * 授权范围 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List scopes; + /** + * 重定向地址 + */ + private String redirectUri; + /** + * 状态 + */ + private String state; + /** + * 过期时间 + */ + private LocalDateTime expiresTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2RefreshTokenDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2RefreshTokenDO.java new file mode 100644 index 0000000..58ffd24 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/oauth2/OAuth2RefreshTokenDO.java @@ -0,0 +1,63 @@ +package com.win.module.system.dal.dataobject.oauth2; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * OAuth2 刷新令牌 + * + * @author 芋道源码 + */ +@TableName(value = "system_oauth2_refresh_token", autoResultMap = true) +// 由于 Oracle 的 SEQ 的名字长度有限制,所以就先用 system_oauth2_access_token_seq 吧,反正也没啥问题 +@KeySequence("system_oauth2_access_token_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +public class OAuth2RefreshTokenDO extends BaseDO { + + /** + * 编号,数据库字典 + */ + private Long id; + /** + * 刷新令牌 + */ + private String refreshToken; + /** + * 用户编号 + */ + private Long userId; + /** + * 用户类型 + * + * 枚举 {@link UserTypeEnum} + */ + private Integer userType; + /** + * 客户端编号 + * + * 关联 {@link OAuth2ClientDO#getId()} + */ + private String clientId; + /** + * 授权范围 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List scopes; + /** + * 过期时间 + */ + private LocalDateTime expiresTime; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/MenuDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/MenuDO.java new file mode 100644 index 0000000..943722d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/MenuDO.java @@ -0,0 +1,107 @@ +package com.win.module.system.dal.dataobject.permission; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.system.enums.permission.MenuTypeEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 菜单 DO + * + * @author ruoyi + */ +@TableName("system_menu") +@KeySequence("system_menu_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class MenuDO extends BaseDO { + + /** + * 菜单编号 - 根节点 + */ + public static final Long ID_ROOT = 0L; + + /** + * 菜单编号 + */ + @TableId + private Long id; + /** + * 菜单名称 + */ + private String name; + /** + * 权限标识 + * + * 一般格式为:${系统}:${模块}:${操作} + * 例如说:system:admin:add,即 system 服务的添加管理员。 + * + * 当我们把该 MenuDO 赋予给角色后,意味着该角色有该资源: + * - 对于后端,配合 @PreAuthorize 注解,配置 API 接口需要该权限,从而对 API 接口进行权限控制。 + * - 对于前端,配合前端标签,配置按钮是否展示,避免用户没有该权限时,结果可以看到该操作。 + */ + private String permission; + /** + * 菜单类型 + * + * 枚举 {@link MenuTypeEnum} + */ + private Integer type; + /** + * 显示顺序 + */ + private Integer sort; + /** + * 父菜单ID + */ + private Long parentId; + /** + * 路由地址 + * + * 如果 path 为 http(s) 时,则它是外链 + */ + private String path; + /** + * 菜单图标 + */ + private String icon; + /** + * 组件路径 + */ + private String component; + /** + * 组件名 + */ + private String componentName; + /** + * 状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 是否可见 + * + * 只有菜单、目录使用 + * 当设置为 true 时,该菜单不会展示在侧边栏,但是路由还是存在。例如说,一些独立的编辑页面 /edit/1024 等等 + */ + private Boolean visible; + /** + * 是否缓存 + * + * 只有菜单、目录使用,否使用 Vue 路由的 keep-alive 特性 + * 注意:如果开启缓存,则必须填写 {@link #componentName} 属性,否则无法缓存 + */ + private Boolean keepAlive; + /** + * 是否总是显示 + * + * 如果为 false 时,当该菜单只有一个子菜单时,不展示自己,直接展示子菜单 + */ + private Boolean alwaysShow; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/RoleDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/RoleDO.java new file mode 100644 index 0000000..978658d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/RoleDO.java @@ -0,0 +1,78 @@ +package com.win.module.system.dal.dataobject.permission; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.type.JsonLongSetTypeHandler; +import com.win.module.system.enums.permission.DataScopeEnum; +import com.win.framework.tenant.core.db.TenantBaseDO; +import com.win.module.system.enums.permission.RoleTypeEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Set; + +/** + * 角色 DO + * + * @author ruoyi + */ +@TableName(value = "system_role", autoResultMap = true) +@KeySequence("system_role_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class RoleDO extends TenantBaseDO { + + /** + * 角色ID + */ + @TableId + private Long id; + /** + * 角色名称 + */ + private String name; + /** + * 角色标识 + * + * 枚举 + */ + private String code; + /** + * 角色排序 + */ + private Integer sort; + /** + * 角色状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 角色类型 + * + * 枚举 {@link RoleTypeEnum} + */ + private Integer type; + /** + * 备注 + */ + private String remark; + + /** + * 数据范围 + * + * 枚举 {@link DataScopeEnum} + */ + private Integer dataScope; + /** + * 数据范围(指定部门数组) + * + * 适用于 {@link #dataScope} 的值为 {@link DataScopeEnum#DEPT_CUSTOM} 时 + */ + @TableField(typeHandler = JsonLongSetTypeHandler.class) + private Set dataScopeDeptIds; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/RoleMenuDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/RoleMenuDO.java new file mode 100644 index 0000000..068d87c --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/RoleMenuDO.java @@ -0,0 +1,35 @@ +package com.win.module.system.dal.dataobject.permission; + +import com.win.framework.tenant.core.db.TenantBaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 角色和菜单关联 + * + * @author ruoyi + */ +@TableName("system_role_menu") +@KeySequence("system_role_menu_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class RoleMenuDO extends TenantBaseDO { + + /** + * 自增主键 + */ + @TableId + private Long id; + /** + * 角色ID + */ + private Long roleId; + /** + * 菜单ID + */ + private Long menuId; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/UserRoleDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/UserRoleDO.java new file mode 100644 index 0000000..ea9a950 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/permission/UserRoleDO.java @@ -0,0 +1,35 @@ +package com.win.module.system.dal.dataobject.permission; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户和角色关联 + * + * @author ruoyi + */ +@TableName("system_user_role") +@KeySequence("system_user_role_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class UserRoleDO extends BaseDO { + + /** + * 自增主键 + */ + @TableId + private Long id; + /** + * 用户 ID + */ + private Long userId; + /** + * 角色 ID + */ + private Long roleId; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsChannelDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsChannelDO.java new file mode 100644 index 0000000..d2a5ebe --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsChannelDO.java @@ -0,0 +1,62 @@ +package com.win.module.system.dal.dataobject.sms; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.system.framework.sms.core.enums.SmsChannelEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * 短信渠道 DO + * + * @author zzf + * @since 2021-01-25 + */ +@TableName(value = "system_sms_channel", autoResultMap = true) +@KeySequence("system_sms_channel_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SmsChannelDO extends BaseDO { + + /** + * 渠道编号 + */ + private Long id; + /** + * 短信签名 + */ + private String signature; + /** + * 渠道编码 + * + * 枚举 {@link SmsChannelEnum} + */ + private String code; + /** + * 启用状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 备注 + */ + private String remark; + /** + * 短信 API 的账号 + */ + private String apiKey; + /** + * 短信 API 的密钥 + */ + private String apiSecret; + /** + * 短信发送回调 URL + */ + private String callbackUrl; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsCodeDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsCodeDO.java new file mode 100644 index 0000000..6703a42 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsCodeDO.java @@ -0,0 +1,65 @@ +package com.win.module.system.dal.dataobject.sms; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.time.LocalDateTime; + +/** + * 手机验证码 DO + * + * idx_mobile 索引:基于 {@link #mobile} 字段 + * + * @author 芋道源码 + */ +@TableName("system_sms_code") +@KeySequence("system_sms_code_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SmsCodeDO extends BaseDO { + + /** + * 编号 + */ + private Long id; + /** + * 手机号 + */ + private String mobile; + /** + * 验证码 + */ + private String code; + /** + * 发送场景 + * + * 枚举 {@link SmsCodeDO} + */ + private Integer scene; + /** + * 创建 IP + */ + private String createIp; + /** + * 今日发送的第几条 + */ + private Integer todayIndex; + /** + * 是否使用 + */ + private Boolean used; + /** + * 使用时间 + */ + private LocalDateTime usedTime; + /** + * 使用 IP + */ + private String usedIp; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsLogDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsLogDO.java new file mode 100644 index 0000000..b0f1b78 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsLogDO.java @@ -0,0 +1,161 @@ +package com.win.module.system.dal.dataobject.sms; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.system.enums.sms.SmsReceiveStatusEnum; +import com.win.module.system.enums.sms.SmsSendStatusEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.*; + +import java.time.LocalDateTime; +import java.util.Map; + +/** + * 短信日志 DO + * + * @author zzf + * @since 2021-01-25 + */ +@TableName(value = "system_sms_log", autoResultMap = true) +@KeySequence("system_sms_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SmsLogDO extends BaseDO { + + /** + * 自增编号 + */ + private Long id; + + // ========= 渠道相关字段 ========= + + /** + * 短信渠道编号 + * + * 关联 {@link SmsChannelDO#getId()} + */ + private Long channelId; + /** + * 短信渠道编码 + * + * 冗余 {@link SmsChannelDO#getCode()} + */ + private String channelCode; + + // ========= 模板相关字段 ========= + + /** + * 模板编号 + * + * 关联 {@link SmsTemplateDO#getId()} + */ + private Long templateId; + /** + * 模板编码 + * + * 冗余 {@link SmsTemplateDO#getCode()} + */ + private String templateCode; + /** + * 短信类型 + * + * 冗余 {@link SmsTemplateDO#getType()} + */ + private Integer templateType; + /** + * 基于 {@link SmsTemplateDO#getContent()} 格式化后的内容 + */ + private String templateContent; + /** + * 基于 {@link SmsTemplateDO#getParams()} 输入后的参数 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private Map templateParams; + /** + * 短信 API 的模板编号 + * + * 冗余 {@link SmsTemplateDO#getApiTemplateId()} + */ + private String apiTemplateId; + + // ========= 手机相关字段 ========= + + /** + * 手机号 + */ + private String mobile; + /** + * 用户编号 + */ + private Long userId; + /** + * 用户类型 + * + * 枚举 {@link UserTypeEnum} + */ + private Integer userType; + + // ========= 发送相关字段 ========= + + /** + * 发送状态 + * + * 枚举 {@link SmsSendStatusEnum} + */ + private Integer sendStatus; + /** + * 发送时间 + */ + private LocalDateTime sendTime; + /** + * 短信 API 发送结果的编码 + * + * 由于第三方的错误码可能是字符串,所以使用 String 类型 + */ + private String apiSendCode; + /** + * 短信 API 发送失败的提示 + */ + private String apiSendMsg; + /** + * 短信 API 发送返回的唯一请求 ID + * + * 用于和短信 API 进行定位于排错 + */ + private String apiRequestId; + /** + * 短信 API 发送返回的序号 + * + * 用于和短信 API 平台的发送记录关联 + */ + private String apiSerialNo; + + // ========= 接收相关字段 ========= + + /** + * 接收状态 + * + * 枚举 {@link SmsReceiveStatusEnum} + */ + private Integer receiveStatus; + /** + * 接收时间 + */ + private LocalDateTime receiveTime; + /** + * 短信 API 接收结果的编码 + */ + private String apiReceiveCode; + /** + * 短信 API 接收结果的提示 + */ + private String apiReceiveMsg; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsTemplateDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsTemplateDO.java new file mode 100644 index 0000000..8cac6da --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/sms/SmsTemplateDO.java @@ -0,0 +1,91 @@ +package com.win.module.system.dal.dataobject.sms; + +import com.win.module.system.enums.sms.SmsTemplateTypeEnum; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.List; + +/** + * 短信模板 DO + * + * @author zzf + * @since 2021-01-25 + */ +@TableName(value = "system_sms_template", autoResultMap = true) +@KeySequence("system_sms_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SmsTemplateDO extends BaseDO { + + /** + * 自增编号 + */ + private Long id; + + // ========= 模板相关字段 ========= + + /** + * 短信类型 + * + * 枚举 {@link SmsTemplateTypeEnum} + */ + private Integer type; + /** + * 启用状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 模板编码,保证唯一 + */ + private String code; + /** + * 模板名称 + */ + private String name; + /** + * 模板内容 + * + * 内容的参数,使用 {} 包括,例如说 {name} + */ + private String content; + /** + * 参数数组(自动根据内容生成) + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List params; + /** + * 备注 + */ + private String remark; + /** + * 短信 API 的模板编号 + */ + private String apiTemplateId; + + // ========= 渠道相关字段 ========= + + /** + * 短信渠道编号 + * + * 关联 {@link SmsChannelDO#getId()} + */ + private Long channelId; + /** + * 短信渠道编码 + * + * 冗余 {@link SmsChannelDO#getCode()} + */ + private String channelCode; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/social/SocialClientDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/social/SocialClientDO.java new file mode 100644 index 0000000..d807475 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/social/SocialClientDO.java @@ -0,0 +1,76 @@ +package com.win.module.system.dal.dataobject.social; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.tenant.core.db.TenantBaseDO; +import com.win.module.system.enums.social.SocialTypeEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xingyuv.jushauth.config.AuthConfig; +import lombok.*; + +/** + * 社交客户端 DO + * + * 对应 {@link AuthConfig} 配置,满足不同租户,有自己的客户端配置,实现社交(三方)登录 + * + * @author 芋道源码 + */ +@TableName(value = "system_social_client", autoResultMap = true) +@KeySequence("system_social_client_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SocialClientDO extends TenantBaseDO { + + /** + * 编号,自增 + */ + @TableId + private Long id; + /** + * 应用名 + */ + private String name; + /** + * 社交类型 + * + * 枚举 {@link SocialTypeEnum} + */ + private Integer socialType; + /** + * 用户类型 + * + * 目的:不同用户类型,对应不同的小程序,需要自己的配置 + * + * 枚举 {@link UserTypeEnum} + */ + private Integer userType; + /** + * 状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + + /** + * 客户端 id + */ + private String clientId; + /** + * 客户端 Secret + */ + private String clientSecret; + + /** + * 代理编号 + * + * 目前只有部分“社交类型”在使用: + * 1. 企业微信:对应授权方的网页应用 ID + */ + private String agentId; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/social/SocialUserBindDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/social/SocialUserBindDO.java new file mode 100644 index 0000000..6c862d0 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/social/SocialUserBindDO.java @@ -0,0 +1,56 @@ +package com.win.module.system.dal.dataobject.social; + +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 社交用户的绑定 + * 即 {@link SocialUserDO} 与 UserDO 的关联表 + * + * @author 芋道源码 + */ +@TableName(value = "system_social_user_bind", autoResultMap = true) +@KeySequence("system_social_user_bind_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SocialUserBindDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 关联的用户编号 + * + * 关联 UserDO 的编号 + */ + private Long userId; + /** + * 用户类型 + * + * 枚举 {@link UserTypeEnum} + */ + private Integer userType; + + /** + * 社交平台的用户编号 + * + * 关联 {@link SocialUserDO#getId()} + */ + private Long socialUserId; + /** + * 社交平台的类型 + * + * 冗余 {@link SocialUserDO#getType()} + */ + private Integer socialType; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/social/SocialUserDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/social/SocialUserDO.java new file mode 100644 index 0000000..24a92bd --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/social/SocialUserDO.java @@ -0,0 +1,73 @@ +package com.win.module.system.dal.dataobject.social; + +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.system.enums.social.SocialTypeEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 社交(三方)用户 + * + * @author weir + */ +@TableName(value = "system_social_user", autoResultMap = true) +@KeySequence("system_social_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SocialUserDO extends BaseDO { + + /** + * 自增主键 + */ + @TableId + private Long id; + /** + * 社交平台的类型 + * + * 枚举 {@link SocialTypeEnum} + */ + private Integer type; + + /** + * 社交 openid + */ + private String openid; + /** + * 社交 token + */ + private String token; + /** + * 原始 Token 数据,一般是 JSON 格式 + */ + private String rawTokenInfo; + + /** + * 用户昵称 + */ + private String nickname; + /** + * 用户头像 + */ + private String avatar; + /** + * 原始用户数据,一般是 JSON 格式 + */ + private String rawUserInfo; + + /** + * 最后一次的认证 code + */ + private String code; + /** + * 最后一次的认证 state + */ + private String state; + +} + + diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/tenant/TenantDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/tenant/TenantDO.java new file mode 100644 index 0000000..0b81f43 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/tenant/TenantDO.java @@ -0,0 +1,80 @@ +package com.win.module.system.dal.dataobject.tenant; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.time.LocalDateTime; + +/** + * 租户 DO + * + * @author 芋道源码 + */ +@TableName(value = "system_tenant", autoResultMap = true) +@KeySequence("system_tenant_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class TenantDO extends BaseDO { + + /** + * 套餐编号 - 系统 + */ + public static final Long PACKAGE_ID_SYSTEM = 0L; + + /** + * 租户编号,自增 + */ + private Long id; + /** + * 租户名,唯一 + */ + private String name; + /** + * 联系人的用户编号 + * + * 关联 {@link AdminUserDO#getId()} + */ + private Long contactUserId; + /** + * 联系人 + */ + private String contactName; + /** + * 联系手机 + */ + private String contactMobile; + /** + * 租户状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 绑定域名 + */ + private String website; + /** + * 租户套餐编号 + * + * 关联 {@link TenantPackageDO#getId()} + * 特殊逻辑:系统内置租户,不使用套餐,暂时使用 {@link #PACKAGE_ID_SYSTEM} 标识 + */ + private Long packageId; + /** + * 过期时间 + */ + private LocalDateTime expireTime; + /** + * 账号数量 + */ + private Integer accountCount; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/tenant/TenantPackageDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/tenant/TenantPackageDO.java new file mode 100644 index 0000000..1f353a5 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/tenant/TenantPackageDO.java @@ -0,0 +1,52 @@ +package com.win.module.system.dal.dataobject.tenant; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.framework.mybatis.core.type.JsonLongSetTypeHandler; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.util.Set; + +/** + * 租户套餐 DO + * + * @author 芋道源码 + */ +@TableName(value = "system_tenant_package", autoResultMap = true) +@KeySequence("system_tenant_package_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class TenantPackageDO extends BaseDO { + + /** + * 套餐编号,自增 + */ + private Long id; + /** + * 套餐名,唯一 + */ + private String name; + /** + * 租户套餐状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 备注 + */ + private String remark; + /** + * 关联的菜单编号 + */ + @TableField(typeHandler = JsonLongSetTypeHandler.class) + private Set menuIds; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/user/AdminUserDO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/user/AdminUserDO.java new file mode 100644 index 0000000..83aeb73 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/user/AdminUserDO.java @@ -0,0 +1,96 @@ +package com.win.module.system.dal.dataobject.user; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.mybatis.core.type.JsonLongSetTypeHandler; +import com.win.framework.tenant.core.db.TenantBaseDO; +import com.win.module.system.enums.common.SexEnum; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +import java.time.LocalDateTime; +import java.util.Set; + +/** + * 管理后台的用户 DO + * + * @author 芋道源码 + */ +@TableName(value = "system_users", autoResultMap = true) // 由于 SQL Server 的 system_user 是关键字,所以使用 system_users +@KeySequence("system_users_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AdminUserDO extends TenantBaseDO { + + /** + * 用户ID + */ + @TableId + private Long id; + /** + * 用户账号 + */ + private String username; + /** + * 加密后的密码 + * + * 因为目前使用 {@link BCryptPasswordEncoder} 加密器,所以无需自己处理 salt 盐 + */ + private String password; + /** + * 用户昵称 + */ + private String nickname; + /** + * 备注 + */ + private String remark; + /** + * 部门 ID + */ + private Long deptId; + /** + * 岗位编号数组 + */ + @TableField(typeHandler = JsonLongSetTypeHandler.class) + private Set postIds; + /** + * 用户邮箱 + */ + private String email; + /** + * 手机号码 + */ + private String mobile; + /** + * 用户性别 + * + * 枚举类 {@link SexEnum} + */ + private Integer sex; + /** + * 用户头像 + */ + private String avatar; + /** + * 帐号状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 最后登录IP + */ + private String loginIp; + /** + * 最后登录时间 + */ + private LocalDateTime loginDate; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dept/DeptMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dept/DeptMapper.java new file mode 100644 index 0000000..92c313b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dept/DeptMapper.java @@ -0,0 +1,33 @@ +package com.win.module.system.dal.mysql.dept; + +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.dept.vo.dept.DeptListReqVO; +import com.win.module.system.dal.dataobject.dept.DeptDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface DeptMapper extends BaseMapperX { + + default List selectList(DeptListReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .likeIfPresent(DeptDO::getName, reqVO.getName()) + .eqIfPresent(DeptDO::getStatus, reqVO.getStatus())); + } + + default DeptDO selectByParentIdAndName(Long parentId, String name) { + return selectOne(DeptDO::getParentId, parentId, DeptDO::getName, name); + } + + default Long selectCountByParentId(Long parentId) { + return selectCount(DeptDO::getParentId, parentId); + } + + default List selectListByParentId(Collection parentIds) { + return selectList(DeptDO::getParentId, parentIds); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dept/PostMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dept/PostMapper.java new file mode 100644 index 0000000..c9c8b33 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dept/PostMapper.java @@ -0,0 +1,38 @@ +package com.win.module.system.dal.mysql.dept; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.dept.vo.post.PostPageReqVO; +import com.win.module.system.dal.dataobject.dept.PostDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface PostMapper extends BaseMapperX { + + default List selectList(Collection ids, Collection statuses) { + return selectList(new LambdaQueryWrapperX() + .inIfPresent(PostDO::getId, ids) + .inIfPresent(PostDO::getStatus, statuses)); + } + + default PageResult selectPage(PostPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(PostDO::getCode, reqVO.getCode()) + .likeIfPresent(PostDO::getName, reqVO.getName()) + .eqIfPresent(PostDO::getStatus, reqVO.getStatus()) + .orderByDesc(PostDO::getId)); + } + + default PostDO selectByName(String name) { + return selectOne(PostDO::getName, name); + } + + default PostDO selectByCode(String code) { + return selectOne(PostDO::getCode, code); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dept/UserPostMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dept/UserPostMapper.java new file mode 100644 index 0000000..bf64f77 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dept/UserPostMapper.java @@ -0,0 +1,32 @@ +package com.win.module.system.dal.mysql.dept; + +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.dal.dataobject.dept.UserPostDO; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface UserPostMapper extends BaseMapperX { + + default List selectListByUserId(Long userId) { + return selectList(UserPostDO::getUserId, userId); + } + + default void deleteByUserIdAndPostId(Long userId, Collection postIds) { + delete(new LambdaQueryWrapperX() + .eq(UserPostDO::getUserId, userId) + .in(UserPostDO::getPostId, postIds)); + } + + default List selectListByPostIds(Collection postIds) { + return selectList(UserPostDO::getPostId, postIds); + } + + default void deleteByUserId(Long userId) { + delete(Wrappers.lambdaUpdate(UserPostDO.class).eq(UserPostDO::getUserId, userId)); + } +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dict/DictDataMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dict/DictDataMapper.java new file mode 100644 index 0000000..6a5c69b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dict/DictDataMapper.java @@ -0,0 +1,49 @@ +package com.win.module.system.dal.mysql.dict; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; +import com.win.module.system.dal.dataobject.dict.DictDataDO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +@Mapper +public interface DictDataMapper extends BaseMapperX { + + default DictDataDO selectByDictTypeAndValue(String dictType, String value) { + return selectOne(DictDataDO::getDictType, dictType, DictDataDO::getValue, value); + } + + default DictDataDO selectByDictTypeAndLabel(String dictType, String label) { + return selectOne(DictDataDO::getDictType, dictType, DictDataDO::getLabel, label); + } + + default List selectByDictTypeAndValues(String dictType, Collection values) { + return selectList(new LambdaQueryWrapper().eq(DictDataDO::getDictType, dictType) + .in(DictDataDO::getValue, values)); + } + + default long selectCountByDictType(String dictType) { + return selectCount(DictDataDO::getDictType, dictType); + } + + default PageResult selectPage(DictDataPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(DictDataDO::getLabel, reqVO.getLabel()) + .eqIfPresent(DictDataDO::getDictType, reqVO.getDictType()) + .eqIfPresent(DictDataDO::getStatus, reqVO.getStatus()) + .orderByDesc(Arrays.asList(DictDataDO::getDictType, DictDataDO::getSort))); + } + + default List selectListByStatusAndDictType(Integer status, String dictType) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(DictDataDO::getStatus, status) + .eqIfPresent(DictDataDO::getDictType, dictType)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dict/DictTypeMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dict/DictTypeMapper.java new file mode 100644 index 0000000..e252018 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/dict/DictTypeMapper.java @@ -0,0 +1,37 @@ +package com.win.module.system.dal.mysql.dict; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.dict.vo.type.DictTypePageReqVO; +import com.win.module.system.dal.dataobject.dict.DictTypeDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; + +import java.time.LocalDateTime; + +@Mapper +public interface DictTypeMapper extends BaseMapperX { + + default PageResult selectPage(DictTypePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(DictTypeDO::getName, reqVO.getName()) + .likeIfPresent(DictTypeDO::getType, reqVO.getType()) + .eqIfPresent(DictTypeDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(DictTypeDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(DictTypeDO::getId)); + } + + default DictTypeDO selectByType(String type) { + return selectOne(DictTypeDO::getType, type); + } + + default DictTypeDO selectByName(String name) { + return selectOne(DictTypeDO::getName, name); + } + + @Update("UPDATE system_dict_type SET deleted = 1, deleted_time = #{deletedTime} WHERE id = #{id}") + void updateToDelete(@Param("id") Long id, @Param("deletedTime") LocalDateTime deletedTime); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/logger/LoginLogMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/logger/LoginLogMapper.java new file mode 100644 index 0000000..e92b908 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/logger/LoginLogMapper.java @@ -0,0 +1,28 @@ +package com.win.module.system.dal.mysql.logger; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; +import com.win.module.system.dal.dataobject.logger.LoginLogDO; +import com.win.module.system.enums.logger.LoginResultEnum; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface LoginLogMapper extends BaseMapperX { + + default PageResult selectPage(LoginLogPageReqVO reqVO) { + LambdaQueryWrapperX query = new LambdaQueryWrapperX() + .likeIfPresent(LoginLogDO::getUserIp, reqVO.getUserIp()) + .likeIfPresent(LoginLogDO::getUsername, reqVO.getUsername()) + .betweenIfPresent(LoginLogDO::getCreateTime, reqVO.getCreateTime()); + if (Boolean.TRUE.equals(reqVO.getStatus())) { + query.eq(LoginLogDO::getResult, LoginResultEnum.SUCCESS.getResult()); + } else if (Boolean.FALSE.equals(reqVO.getStatus())) { + query.gt(LoginLogDO::getResult, LoginResultEnum.SUCCESS.getResult()); + } + query.orderByDesc(LoginLogDO::getId); // 降序 + return selectPage(reqVO, query); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/logger/OperateLogMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/logger/OperateLogMapper.java new file mode 100644 index 0000000..9bb51da --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/logger/OperateLogMapper.java @@ -0,0 +1,33 @@ +package com.win.module.system.dal.mysql.logger; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.api.logger.dto.OperateLogPageReqDTO; +import com.win.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; +import com.win.module.system.dal.dataobject.logger.OperateLogDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface OperateLogMapper extends BaseMapperX { + + default PageResult selectPage(OperateLogPageReqVO pageReqDTO) { + return selectPage(pageReqDTO, new LambdaQueryWrapperX() + .eqIfPresent(OperateLogDO::getUserId, pageReqDTO.getUserId()) + .eqIfPresent(OperateLogDO::getBizId, pageReqDTO.getBizId()) + .likeIfPresent(OperateLogDO::getType, pageReqDTO.getType()) + .likeIfPresent(OperateLogDO::getSubType, pageReqDTO.getSubType()) + .likeIfPresent(OperateLogDO::getAction, pageReqDTO.getAction()) + .betweenIfPresent(OperateLogDO::getCreateTime, pageReqDTO.getCreateTime()) + .orderByDesc(OperateLogDO::getId)); + } + + default PageResult selectPage(OperateLogPageReqDTO pageReqDTO) { + return selectPage(pageReqDTO, new LambdaQueryWrapperX() + .eqIfPresent(OperateLogDO::getType, pageReqDTO.getType()) + .eqIfPresent(OperateLogDO::getBizId, pageReqDTO.getBizId()) + .eqIfPresent(OperateLogDO::getUserId, pageReqDTO.getUserId()) + .orderByDesc(OperateLogDO::getId)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/mail/MailAccountMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/mail/MailAccountMapper.java new file mode 100644 index 0000000..aed1061 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/mail/MailAccountMapper.java @@ -0,0 +1,19 @@ +package com.win.module.system.dal.mysql.mail; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; +import com.win.module.system.dal.dataobject.mail.MailAccountDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface MailAccountMapper extends BaseMapperX { + + default PageResult selectPage(MailAccountPageReqVO pageReqVO) { + return selectPage(pageReqVO, new LambdaQueryWrapperX() + .likeIfPresent(MailAccountDO::getMail, pageReqVO.getMail()) + .likeIfPresent(MailAccountDO::getUsername , pageReqVO.getUsername())); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/mail/MailLogMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/mail/MailLogMapper.java new file mode 100644 index 0000000..df2052f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/mail/MailLogMapper.java @@ -0,0 +1,25 @@ +package com.win.module.system.dal.mysql.mail; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.mail.vo.log.MailLogPageReqVO; +import com.win.module.system.dal.dataobject.mail.MailLogDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface MailLogMapper extends BaseMapperX { + + default PageResult selectPage(MailLogPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(MailLogDO::getUserId, reqVO.getUserId()) + .eqIfPresent(MailLogDO::getUserType, reqVO.getUserType()) + .likeIfPresent(MailLogDO::getToMail, reqVO.getToMail()) + .eqIfPresent(MailLogDO::getAccountId, reqVO.getAccountId()) + .eqIfPresent(MailLogDO::getTemplateId, reqVO.getTemplateId()) + .eqIfPresent(MailLogDO::getSendStatus, reqVO.getSendStatus()) + .betweenIfPresent(MailLogDO::getSendTime, reqVO.getSendTime()) + .orderByDesc(MailLogDO::getId)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/mail/MailTemplateMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/mail/MailTemplateMapper.java new file mode 100644 index 0000000..b346dd3 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/mail/MailTemplateMapper.java @@ -0,0 +1,30 @@ +package com.win.module.system.dal.mysql.mail; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO; +import com.win.module.system.dal.dataobject.mail.MailTemplateDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface MailTemplateMapper extends BaseMapperX { + + default PageResult selectPage(MailTemplatePageReqVO pageReqVO){ + return selectPage(pageReqVO , new LambdaQueryWrapperX() + .eqIfPresent(MailTemplateDO::getStatus, pageReqVO.getStatus()) + .likeIfPresent(MailTemplateDO::getCode, pageReqVO.getCode()) + .likeIfPresent(MailTemplateDO::getName, pageReqVO.getName()) + .eqIfPresent(MailTemplateDO::getAccountId, pageReqVO.getAccountId()) + .betweenIfPresent(MailTemplateDO::getCreateTime, pageReqVO.getCreateTime())); + } + + default Long selectCountByAccountId(Long accountId) { + return selectCount(MailTemplateDO::getAccountId, accountId); + } + + default MailTemplateDO selectByCode(String code) { + return selectOne(MailTemplateDO::getCode, code); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/notice/NoticeMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/notice/NoticeMapper.java new file mode 100644 index 0000000..7906976 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/notice/NoticeMapper.java @@ -0,0 +1,20 @@ +package com.win.module.system.dal.mysql.notice; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.notice.vo.NoticePageReqVO; +import com.win.module.system.dal.dataobject.notice.NoticeDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface NoticeMapper extends BaseMapperX { + + default PageResult selectPage(NoticePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(NoticeDO::getTitle, reqVO.getTitle()) + .eqIfPresent(NoticeDO::getStatus, reqVO.getStatus()) + .orderByDesc(NoticeDO::getId)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/notify/NotifyMessageMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/notify/NotifyMessageMapper.java new file mode 100644 index 0000000..fb22811 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/notify/NotifyMessageMapper.java @@ -0,0 +1,70 @@ +package com.win.module.system.dal.mysql.notify; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.framework.mybatis.core.query.QueryWrapperX; +import com.win.module.system.controller.admin.notify.vo.message.NotifyMessageMyPageReqVO; +import com.win.module.system.controller.admin.notify.vo.message.NotifyMessagePageReqVO; +import com.win.module.system.dal.dataobject.notify.NotifyMessageDO; +import org.apache.ibatis.annotations.Mapper; + +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; + +@Mapper +public interface NotifyMessageMapper extends BaseMapperX { + + default PageResult selectPage(NotifyMessagePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(NotifyMessageDO::getUserId, reqVO.getUserId()) + .eqIfPresent(NotifyMessageDO::getUserType, reqVO.getUserType()) + .likeIfPresent(NotifyMessageDO::getTemplateCode, reqVO.getTemplateCode()) + .eqIfPresent(NotifyMessageDO::getTemplateType, reqVO.getTemplateType()) + .betweenIfPresent(NotifyMessageDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(NotifyMessageDO::getId)); + } + + default PageResult selectPage(NotifyMessageMyPageReqVO reqVO, Long userId, Integer userType) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(NotifyMessageDO::getReadStatus, reqVO.getReadStatus()) + .betweenIfPresent(NotifyMessageDO::getCreateTime, reqVO.getCreateTime()) + .eq(NotifyMessageDO::getUserId, userId) + .eq(NotifyMessageDO::getUserType, userType) + .orderByDesc(NotifyMessageDO::getId)); + } + + default int updateListRead(Collection ids, Long userId, Integer userType) { + return update(new NotifyMessageDO().setReadStatus(true).setReadTime(LocalDateTime.now()), + new LambdaQueryWrapperX() + .in(NotifyMessageDO::getId, ids) + .eq(NotifyMessageDO::getUserId, userId) + .eq(NotifyMessageDO::getUserType, userType) + .eq(NotifyMessageDO::getReadStatus, false)); + } + + default int updateListRead(Long userId, Integer userType) { + return update(new NotifyMessageDO().setReadStatus(true).setReadTime(LocalDateTime.now()), + new LambdaQueryWrapperX() + .eq(NotifyMessageDO::getUserId, userId) + .eq(NotifyMessageDO::getUserType, userType) + .eq(NotifyMessageDO::getReadStatus, false)); + } + + default List selectUnreadListByUserIdAndUserType(Long userId, Integer userType, Integer size) { + return selectList(new QueryWrapperX() // 由于要使用 limitN 语句,所以只能用 QueryWrapperX + .eq("user_id", userId) + .eq("user_type", userType) + .eq("read_status", false) + .orderByDesc("id").limitN(size)); + } + + default Long selectUnreadCountByUserIdAndUserType(Long userId, Integer userType) { + return selectCount(new LambdaQueryWrapperX() + .eq(NotifyMessageDO::getReadStatus, false) + .eq(NotifyMessageDO::getUserId, userId) + .eq(NotifyMessageDO::getUserType, userType)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/notify/NotifyTemplateMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/notify/NotifyTemplateMapper.java new file mode 100644 index 0000000..745e704 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/notify/NotifyTemplateMapper.java @@ -0,0 +1,26 @@ +package com.win.module.system.dal.mysql.notify; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.notify.vo.template.NotifyTemplatePageReqVO; +import com.win.module.system.dal.dataobject.notify.NotifyTemplateDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface NotifyTemplateMapper extends BaseMapperX { + + default NotifyTemplateDO selectByCode(String code) { + return selectOne(NotifyTemplateDO::getCode, code); + } + + default PageResult selectPage(NotifyTemplatePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(NotifyTemplateDO::getCode, reqVO.getCode()) + .likeIfPresent(NotifyTemplateDO::getName, reqVO.getName()) + .eqIfPresent(NotifyTemplateDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(NotifyTemplateDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(NotifyTemplateDO::getId)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2AccessTokenMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2AccessTokenMapper.java new file mode 100644 index 0000000..967ec5e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2AccessTokenMapper.java @@ -0,0 +1,35 @@ +package com.win.module.system.dal.mysql.oauth2; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.framework.tenant.core.aop.TenantIgnore; +import com.win.module.system.controller.admin.oauth2.vo.token.OAuth2AccessTokenPageReqVO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; +import org.apache.ibatis.annotations.Mapper; + +import java.time.LocalDateTime; +import java.util.List; + +@Mapper +public interface OAuth2AccessTokenMapper extends BaseMapperX { + + @TenantIgnore // 获取 token 的时候,需要忽略租户编号。原因是:一些场景下,可能不会传递 tenant-id 请求头,例如说文件上传、积木报表等等 + default OAuth2AccessTokenDO selectByAccessToken(String accessToken) { + return selectOne(OAuth2AccessTokenDO::getAccessToken, accessToken); + } + + default List selectListByRefreshToken(String refreshToken) { + return selectList(OAuth2AccessTokenDO::getRefreshToken, refreshToken); + } + + default PageResult selectPage(OAuth2AccessTokenPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(OAuth2AccessTokenDO::getUserId, reqVO.getUserId()) + .eqIfPresent(OAuth2AccessTokenDO::getUserType, reqVO.getUserType()) + .likeIfPresent(OAuth2AccessTokenDO::getClientId, reqVO.getClientId()) + .gt(OAuth2AccessTokenDO::getExpiresTime, LocalDateTime.now()) + .orderByDesc(OAuth2AccessTokenDO::getId)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2ApproveMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2ApproveMapper.java new file mode 100644 index 0000000..12be49f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2ApproveMapper.java @@ -0,0 +1,28 @@ +package com.win.module.system.dal.mysql.oauth2; + +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.dal.dataobject.oauth2.OAuth2ApproveDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface OAuth2ApproveMapper extends BaseMapperX { + + default int update(OAuth2ApproveDO updateObj) { + return update(updateObj, new LambdaQueryWrapperX() + .eq(OAuth2ApproveDO::getUserId, updateObj.getUserId()) + .eq(OAuth2ApproveDO::getUserType, updateObj.getUserType()) + .eq(OAuth2ApproveDO::getClientId, updateObj.getClientId()) + .eq(OAuth2ApproveDO::getScope, updateObj.getScope())); + } + + default List selectListByUserIdAndUserTypeAndClientId(Long userId, Integer userType, String clientId) { + return selectList(new LambdaQueryWrapperX() + .eq(OAuth2ApproveDO::getUserId, userId) + .eq(OAuth2ApproveDO::getUserType, userType) + .eq(OAuth2ApproveDO::getClientId, clientId)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2ClientMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2ClientMapper.java new file mode 100644 index 0000000..6b8b224 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2ClientMapper.java @@ -0,0 +1,30 @@ +package com.win.module.system.dal.mysql.oauth2; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.oauth2.vo.client.OAuth2ClientPageReqVO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2ClientDO; +import org.apache.ibatis.annotations.Mapper; + + +/** + * OAuth2 客户端 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface OAuth2ClientMapper extends BaseMapperX { + + default PageResult selectPage(OAuth2ClientPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(OAuth2ClientDO::getName, reqVO.getName()) + .eqIfPresent(OAuth2ClientDO::getStatus, reqVO.getStatus()) + .orderByDesc(OAuth2ClientDO::getId)); + } + + default OAuth2ClientDO selectByClientId(String clientId) { + return selectOne(OAuth2ClientDO::getClientId, clientId); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2CodeMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2CodeMapper.java new file mode 100644 index 0000000..3e3fa07 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2CodeMapper.java @@ -0,0 +1,14 @@ +package com.win.module.system.dal.mysql.oauth2; + +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.module.system.dal.dataobject.oauth2.OAuth2CodeDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface OAuth2CodeMapper extends BaseMapperX { + + default OAuth2CodeDO selectByCode(String code) { + return selectOne(OAuth2CodeDO::getCode, code); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2RefreshTokenMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2RefreshTokenMapper.java new file mode 100644 index 0000000..ce335ac --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/oauth2/OAuth2RefreshTokenMapper.java @@ -0,0 +1,20 @@ +package com.win.module.system.dal.mysql.oauth2; + +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.dal.dataobject.oauth2.OAuth2RefreshTokenDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface OAuth2RefreshTokenMapper extends BaseMapperX { + + default int deleteByRefreshToken(String refreshToken) { + return delete(new LambdaQueryWrapperX() + .eq(OAuth2RefreshTokenDO::getRefreshToken, refreshToken)); + } + + default OAuth2RefreshTokenDO selectByRefreshToken(String refreshToken) { + return selectOne(OAuth2RefreshTokenDO::getRefreshToken, refreshToken); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/package-info.java new file mode 100644 index 0000000..e42d8a5 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/package-info.java @@ -0,0 +1,9 @@ +/** + * DAL = Data Access Layer 数据访问层 + * 1. data object:数据对象 + * 2. redis:Redis 的 CRUD 操作 + * 3. mysql:MySQL 的 CRUD 操作 + * + * 其中,MySQL 的表以 system_ 作为前缀 + */ +package com.win.module.system.dal.mysql; diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/MenuMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/MenuMapper.java new file mode 100644 index 0000000..a7539d9 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/MenuMapper.java @@ -0,0 +1,31 @@ +package com.win.module.system.dal.mysql.permission; + +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.permission.vo.menu.MenuListReqVO; +import com.win.module.system.dal.dataobject.permission.MenuDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface MenuMapper extends BaseMapperX { + + default MenuDO selectByParentIdAndName(Long parentId, String name) { + return selectOne(MenuDO::getParentId, parentId, MenuDO::getName, name); + } + + default Long selectCountByParentId(Long parentId) { + return selectCount(MenuDO::getParentId, parentId); + } + + default List selectList(MenuListReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .likeIfPresent(MenuDO::getName, reqVO.getName()) + .eqIfPresent(MenuDO::getStatus, reqVO.getStatus())); + } + + default List selectListByPermission(String permission) { + return selectList(MenuDO::getPermission, permission); + } +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/RoleMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/RoleMapper.java new file mode 100644 index 0000000..64a6709 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/RoleMapper.java @@ -0,0 +1,39 @@ +package com.win.module.system.dal.mysql.permission; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.dataobject.BaseDO; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.permission.vo.role.RolePageReqVO; +import com.win.module.system.dal.dataobject.permission.RoleDO; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.lang.Nullable; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface RoleMapper extends BaseMapperX { + + default PageResult selectPage(RolePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(RoleDO::getName, reqVO.getName()) + .likeIfPresent(RoleDO::getCode, reqVO.getCode()) + .eqIfPresent(RoleDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(BaseDO::getCreateTime, reqVO.getCreateTime()) + .orderByAsc(RoleDO::getSort)); + } + + default RoleDO selectByName(String name) { + return selectOne(RoleDO::getName, name); + } + + default RoleDO selectByCode(String code) { + return selectOne(RoleDO::getCode, code); + } + + default List selectListByStatus(@Nullable Collection statuses) { + return selectList(RoleDO::getStatus, statuses); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/RoleMenuMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/RoleMenuMapper.java new file mode 100644 index 0000000..b665d89 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/RoleMenuMapper.java @@ -0,0 +1,40 @@ +package com.win.module.system.dal.mysql.permission; + +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.module.system.dal.dataobject.permission.RoleMenuDO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface RoleMenuMapper extends BaseMapperX { + + default List selectListByRoleId(Long roleId) { + return selectList(RoleMenuDO::getRoleId, roleId); + } + + default List selectListByRoleId(Collection roleIds) { + return selectList(RoleMenuDO::getRoleId, roleIds); + } + + default List selectListByMenuId(Long menuId) { + return selectList(RoleMenuDO::getMenuId, menuId); + } + + default void deleteListByRoleIdAndMenuIds(Long roleId, Collection menuIds) { + delete(new LambdaQueryWrapper() + .eq(RoleMenuDO::getRoleId, roleId) + .in(RoleMenuDO::getMenuId, menuIds)); + } + + default void deleteListByMenuId(Long menuId) { + delete(new LambdaQueryWrapper().eq(RoleMenuDO::getMenuId, menuId)); + } + + default void deleteListByRoleId(Long roleId) { + delete(new LambdaQueryWrapper().eq(RoleMenuDO::getRoleId, roleId)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/UserRoleMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/UserRoleMapper.java new file mode 100644 index 0000000..3be1519 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/permission/UserRoleMapper.java @@ -0,0 +1,36 @@ +package com.win.module.system.dal.mysql.permission; + +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.module.system.dal.dataobject.permission.UserRoleDO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface UserRoleMapper extends BaseMapperX { + + default List selectListByUserId(Long userId) { + return selectList(UserRoleDO::getUserId, userId); + } + + default void deleteListByUserIdAndRoleIdIds(Long userId, Collection roleIds) { + delete(new LambdaQueryWrapper() + .eq(UserRoleDO::getUserId, userId) + .in(UserRoleDO::getRoleId, roleIds)); + } + + default void deleteListByUserId(Long userId) { + delete(new LambdaQueryWrapper().eq(UserRoleDO::getUserId, userId)); + } + + default void deleteListByRoleId(Long roleId) { + delete(new LambdaQueryWrapper().eq(UserRoleDO::getRoleId, roleId)); + } + + default List selectListByRoleIds(Collection roleIds) { + return selectList(UserRoleDO::getRoleId, roleIds); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsChannelMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsChannelMapper.java new file mode 100644 index 0000000..6e55fcd --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsChannelMapper.java @@ -0,0 +1,25 @@ +package com.win.module.system.dal.mysql.sms; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; +import com.win.module.system.dal.dataobject.sms.SmsChannelDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SmsChannelMapper extends BaseMapperX { + + default PageResult selectPage(SmsChannelPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(SmsChannelDO::getSignature, reqVO.getSignature()) + .eqIfPresent(SmsChannelDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(SmsChannelDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(SmsChannelDO::getId)); + } + + default SmsChannelDO selectByCode(String code) { + return selectOne(SmsChannelDO::getCode, code); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsCodeMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsCodeMapper.java new file mode 100644 index 0000000..8bbcd1f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsCodeMapper.java @@ -0,0 +1,28 @@ +package com.win.module.system.dal.mysql.sms; + +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.QueryWrapperX; +import com.win.module.system.dal.dataobject.sms.SmsCodeDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SmsCodeMapper extends BaseMapperX { + + /** + * 获得手机号的最后一个手机验证码 + * + * @param mobile 手机号 + * @param scene 发送场景,选填 + * @param code 验证码 选填 + * @return 手机验证码 + */ + default SmsCodeDO selectLastByMobile(String mobile, String code, Integer scene) { + return selectOne(new QueryWrapperX() + .eq("mobile", mobile) + .eqIfPresent("scene", scene) + .eqIfPresent("code", code) + .orderByDesc("id") + .limitN(1)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsLogMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsLogMapper.java new file mode 100644 index 0000000..06692d0 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsLogMapper.java @@ -0,0 +1,25 @@ +package com.win.module.system.dal.mysql.sms; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; +import com.win.module.system.dal.dataobject.sms.SmsLogDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SmsLogMapper extends BaseMapperX { + + default PageResult selectPage(SmsLogPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(SmsLogDO::getChannelId, reqVO.getChannelId()) + .eqIfPresent(SmsLogDO::getTemplateId, reqVO.getTemplateId()) + .likeIfPresent(SmsLogDO::getMobile, reqVO.getMobile()) + .eqIfPresent(SmsLogDO::getSendStatus, reqVO.getSendStatus()) + .betweenIfPresent(SmsLogDO::getSendTime, reqVO.getSendTime()) + .eqIfPresent(SmsLogDO::getReceiveStatus, reqVO.getReceiveStatus()) + .betweenIfPresent(SmsLogDO::getReceiveTime, reqVO.getReceiveTime()) + .orderByDesc(SmsLogDO::getId)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsTemplateMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsTemplateMapper.java new file mode 100644 index 0000000..c8117f6 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/sms/SmsTemplateMapper.java @@ -0,0 +1,33 @@ +package com.win.module.system.dal.mysql.sms; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; +import com.win.module.system.dal.dataobject.sms.SmsTemplateDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SmsTemplateMapper extends BaseMapperX { + + default SmsTemplateDO selectByCode(String code) { + return selectOne(SmsTemplateDO::getCode, code); + } + + default PageResult selectPage(SmsTemplatePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(SmsTemplateDO::getType, reqVO.getType()) + .eqIfPresent(SmsTemplateDO::getStatus, reqVO.getStatus()) + .likeIfPresent(SmsTemplateDO::getCode, reqVO.getCode()) + .likeIfPresent(SmsTemplateDO::getContent, reqVO.getContent()) + .likeIfPresent(SmsTemplateDO::getApiTemplateId, reqVO.getApiTemplateId()) + .eqIfPresent(SmsTemplateDO::getChannelId, reqVO.getChannelId()) + .betweenIfPresent(SmsTemplateDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(SmsTemplateDO::getId)); + } + + default Long selectCountByChannelId(Long channelId) { + return selectCount(SmsTemplateDO::getChannelId, channelId); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/social/SocialClientMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/social/SocialClientMapper.java new file mode 100644 index 0000000..595dc80 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/social/SocialClientMapper.java @@ -0,0 +1,28 @@ +package com.win.module.system.dal.mysql.social; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; +import com.win.module.system.dal.dataobject.social.SocialClientDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SocialClientMapper extends BaseMapperX { + + default SocialClientDO selectBySocialTypeAndUserType(Integer socialType, Integer userType) { + return selectOne(SocialClientDO::getSocialType, socialType, + SocialClientDO::getUserType, userType); + } + + default PageResult selectPage(SocialClientPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(SocialClientDO::getName, reqVO.getName()) + .eqIfPresent(SocialClientDO::getSocialType, reqVO.getSocialType()) + .eqIfPresent(SocialClientDO::getUserType, reqVO.getUserType()) + .likeIfPresent(SocialClientDO::getClientId, reqVO.getClientId()) + .eqIfPresent(SocialClientDO::getStatus, reqVO.getStatus()) + .orderByDesc(SocialClientDO::getId)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/social/SocialUserBindMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/social/SocialUserBindMapper.java new file mode 100644 index 0000000..554ae8e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/social/SocialUserBindMapper.java @@ -0,0 +1,44 @@ +package com.win.module.system.dal.mysql.social; + +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.dal.dataobject.social.SocialUserBindDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface SocialUserBindMapper extends BaseMapperX { + + default void deleteByUserTypeAndUserIdAndSocialType(Integer userType, Long userId, Integer socialType) { + delete(new LambdaQueryWrapperX() + .eq(SocialUserBindDO::getUserType, userType) + .eq(SocialUserBindDO::getUserId, userId) + .eq(SocialUserBindDO::getSocialType, socialType)); + } + + default void deleteByUserTypeAndSocialUserId(Integer userType, Long socialUserId) { + delete(new LambdaQueryWrapperX() + .eq(SocialUserBindDO::getUserType, userType) + .eq(SocialUserBindDO::getSocialUserId, socialUserId)); + } + + default SocialUserBindDO selectByUserTypeAndSocialUserId(Integer userType, Long socialUserId) { + return selectOne(SocialUserBindDO::getUserType, userType, + SocialUserBindDO::getSocialUserId, socialUserId); + } + + default List selectListByUserIdAndUserType(Long userId, Integer userType) { + return selectList(new LambdaQueryWrapperX() + .eq(SocialUserBindDO::getUserId, userId) + .eq(SocialUserBindDO::getUserType, userType)); + } + + default SocialUserBindDO selectByUserIdAndUserTypeAndSocialType(Long userId, Integer userType, Integer socialType) { + return selectOne(new LambdaQueryWrapperX() + .eq(SocialUserBindDO::getUserId, userId) + .eq(SocialUserBindDO::getUserType, userType) + .eq(SocialUserBindDO::getSocialType, socialType)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/social/SocialUserMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/social/SocialUserMapper.java new file mode 100644 index 0000000..190709a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/social/SocialUserMapper.java @@ -0,0 +1,36 @@ +package com.win.module.system.dal.mysql.social; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO; +import com.win.module.system.dal.dataobject.social.SocialUserDO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SocialUserMapper extends BaseMapperX { + + default SocialUserDO selectByTypeAndCodeAnState(Integer type, String code, String state) { + return selectOne(new LambdaQueryWrapper() + .eq(SocialUserDO::getType, type) + .eq(SocialUserDO::getCode, code) + .eq(SocialUserDO::getState, state)); + } + + default SocialUserDO selectByTypeAndOpenid(Integer type, String openid) { + return selectOne(new LambdaQueryWrapper() + .eq(SocialUserDO::getType, type) + .eq(SocialUserDO::getOpenid, openid)); + } + + default PageResult selectPage(SocialUserPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(SocialUserDO::getType, reqVO.getType()) + .likeIfPresent(SocialUserDO::getNickname, reqVO.getNickname()) + .likeIfPresent(SocialUserDO::getOpenid, reqVO.getOpenid()) + .betweenIfPresent(SocialUserDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(SocialUserDO::getId)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/tenant/TenantMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/tenant/TenantMapper.java new file mode 100644 index 0000000..7d7325d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/tenant/TenantMapper.java @@ -0,0 +1,46 @@ +package com.win.module.system.dal.mysql.tenant; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO; +import com.win.module.system.dal.dataobject.tenant.TenantDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 租户 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface TenantMapper extends BaseMapperX { + + default PageResult selectPage(TenantPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(TenantDO::getName, reqVO.getName()) + .likeIfPresent(TenantDO::getContactName, reqVO.getContactName()) + .likeIfPresent(TenantDO::getContactMobile, reqVO.getContactMobile()) + .eqIfPresent(TenantDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(TenantDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(TenantDO::getId)); + } + + default TenantDO selectByName(String name) { + return selectOne(TenantDO::getName, name); + } + + default TenantDO selectByWebsite(String website) { + return selectOne(TenantDO::getWebsite, website); + } + + default Long selectCountByPackageId(Long packageId) { + return selectCount(TenantDO::getPackageId, packageId); + } + + default List selectListByPackageId(Long packageId) { + return selectList(TenantDO::getPackageId, packageId); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/tenant/TenantPackageMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/tenant/TenantPackageMapper.java new file mode 100644 index 0000000..4e59c33 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/tenant/TenantPackageMapper.java @@ -0,0 +1,32 @@ +package com.win.module.system.dal.mysql.tenant; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.tenant.vo.packages.TenantPackagePageReqVO; +import com.win.module.system.dal.dataobject.tenant.TenantPackageDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 租户套餐 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface TenantPackageMapper extends BaseMapperX { + + default PageResult selectPage(TenantPackagePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(TenantPackageDO::getName, reqVO.getName()) + .eqIfPresent(TenantPackageDO::getStatus, reqVO.getStatus()) + .likeIfPresent(TenantPackageDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(TenantPackageDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(TenantPackageDO::getId)); + } + + default List selectListByStatus(Integer status) { + return selectList(TenantPackageDO::getStatus, status); + } +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/user/AdminUserMapper.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/user/AdminUserMapper.java new file mode 100644 index 0000000..6167c99 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/user/AdminUserMapper.java @@ -0,0 +1,50 @@ +package com.win.module.system.dal.mysql.user; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.module.system.controller.admin.user.vo.user.UserPageReqVO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface AdminUserMapper extends BaseMapperX { + + default AdminUserDO selectByUsername(String username) { + return selectOne(AdminUserDO::getUsername, username); + } + + default AdminUserDO selectByEmail(String email) { + return selectOne(AdminUserDO::getEmail, email); + } + + default AdminUserDO selectByMobile(String mobile) { + return selectOne(AdminUserDO::getMobile, mobile); + } + + default PageResult selectPage(UserPageReqVO reqVO, Collection deptIds) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(AdminUserDO::getUsername, reqVO.getUsername()) + .likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile()) + .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getCreateTime()) + .inIfPresent(AdminUserDO::getDeptId, deptIds) + .orderByDesc(AdminUserDO::getId)); + } + + default List selectListByNickname(String nickname) { + return selectList(new LambdaQueryWrapperX().like(AdminUserDO::getNickname, nickname)); + } + + default List selectListByStatus(Integer status) { + return selectList(AdminUserDO::getStatus, status); + } + + default List selectListByDeptIds(Collection deptIds) { + return selectList(AdminUserDO::getDeptId, deptIds); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/redis/RedisKeyConstants.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/redis/RedisKeyConstants.java new file mode 100644 index 0000000..ab6b6d1 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/redis/RedisKeyConstants.java @@ -0,0 +1,101 @@ +package com.win.module.system.dal.redis; + +import com.win.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; + +/** + * System Redis Key 枚举类 + * + * @author 芋道源码 + */ +public interface RedisKeyConstants { + + /** + * 指定部门的所有子部门编号数组的缓存 + *

    + * KEY 格式:dept_children_ids:{id} + * VALUE 数据类型:String 子部门编号集合 + */ + String DEPT_CHILDREN_ID_LIST = "dept_children_ids"; + + /** + * 角色的缓存 + *

    + * KEY 格式:role:{id} + * VALUE 数据类型:String 角色信息 + */ + String ROLE = "role"; + + /** + * 用户拥有的角色编号的缓存 + *

    + * KEY 格式:user_role_ids:{userId} + * VALUE 数据类型:String 角色编号集合 + */ + String USER_ROLE_ID_LIST = "user_role_ids"; + + /** + * 拥有指定菜单的角色编号的缓存 + *

    + * KEY 格式:user_role_ids:{menuId} + * VALUE 数据类型:String 角色编号集合 + */ + String MENU_ROLE_ID_LIST = "menu_role_ids"; + + /** + * 拥有权限对应的菜单编号数组的缓存 + *

    + * KEY 格式:permission_menu_ids:{permission} + * VALUE 数据类型:String 菜单编号数组 + */ + String PERMISSION_MENU_ID_LIST = "permission_menu_ids"; + + /** + * OAuth2 客户端的缓存 + *

    + * KEY 格式:oauth_client:{id} + * VALUE 数据类型:String 客户端信息 + */ + String OAUTH_CLIENT = "oauth_client"; + + /** + * 访问令牌的缓存 + *

    + * KEY 格式:oauth2_access_token:{token} + * VALUE 数据类型:String 访问令牌信息 {@link OAuth2AccessTokenDO} + *

    + * 由于动态过期时间,使用 RedisTemplate 操作 + */ + String OAUTH2_ACCESS_TOKEN = "oauth2_access_token:%s"; + + /** + * 站内信模版的缓存 + *

    + * KEY 格式:notify_template:{code} + * VALUE 数据格式:String 模版信息 + */ + String NOTIFY_TEMPLATE = "notify_template"; + + /** + * 邮件账号的缓存 + *

    + * KEY 格式:mail_account:{id} + * VALUE 数据格式:String 账号信息 + */ + String MAIL_ACCOUNT = "mail_account"; + + /** + * 邮件模版的缓存 + *

    + * KEY 格式:mail_template:{code} + * VALUE 数据格式:String 模版信息 + */ + String MAIL_TEMPLATE = "mail_template"; + + /** + * 短信模版的缓存 + *

    + * KEY 格式:sms_template:{id} + * VALUE 数据格式:String 模版信息 + */ + String SMS_TEMPLATE = "sms_template"; +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/redis/oauth2/OAuth2AccessTokenRedisDAO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/redis/oauth2/OAuth2AccessTokenRedisDAO.java new file mode 100644 index 0000000..816c532 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/redis/oauth2/OAuth2AccessTokenRedisDAO.java @@ -0,0 +1,59 @@ +package com.win.module.system.dal.redis.oauth2; + +import cn.hutool.core.date.LocalDateTimeUtil; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.common.util.json.JsonUtils; +import com.win.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Repository; + +import jakarta.annotation.Resource; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import static com.win.module.system.dal.redis.RedisKeyConstants.OAUTH2_ACCESS_TOKEN; + +/** + * {@link OAuth2AccessTokenDO} 的 RedisDAO + * + * @author 芋道源码 + */ +@Repository +public class OAuth2AccessTokenRedisDAO { + + @Resource + private StringRedisTemplate stringRedisTemplate; + + public OAuth2AccessTokenDO get(String accessToken) { + String redisKey = formatKey(accessToken); + return JsonUtils.parseObject(stringRedisTemplate.opsForValue().get(redisKey), OAuth2AccessTokenDO.class); + } + + public void set(OAuth2AccessTokenDO accessTokenDO) { + String redisKey = formatKey(accessTokenDO.getAccessToken()); + // 清理多余字段,避免缓存 + accessTokenDO.setUpdater(null).setUpdateTime(null).setCreateTime(null).setCreator(null).setDeleted(null); + long time = LocalDateTimeUtil.between(LocalDateTime.now(), accessTokenDO.getExpiresTime(), ChronoUnit.SECONDS); + if (time > 0) { + stringRedisTemplate.opsForValue().set(redisKey, JsonUtils.toJsonString(accessTokenDO), time, TimeUnit.SECONDS); + } + } + + public void delete(String accessToken) { + String redisKey = formatKey(accessToken); + stringRedisTemplate.delete(redisKey); + } + + public void deleteList(Collection accessTokens) { + List redisKeys = CollectionUtils.convertList(accessTokens, OAuth2AccessTokenRedisDAO::formatKey); + stringRedisTemplate.delete(redisKeys); + } + + private static String formatKey(String accessToken) { + return String.format(OAUTH2_ACCESS_TOKEN, accessToken); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/captcha/config/WinCaptchaConfiguration.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/captcha/config/WinCaptchaConfiguration.java new file mode 100644 index 0000000..69f20f8 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/captcha/config/WinCaptchaConfiguration.java @@ -0,0 +1,29 @@ +package com.win.module.system.framework.captcha.config; + +import com.win.module.system.framework.captcha.core.RedisCaptchaServiceImpl; +import com.xingyuv.captcha.properties.AjCaptchaProperties; +import com.xingyuv.captcha.service.CaptchaCacheService; +import com.xingyuv.captcha.service.impl.CaptchaServiceFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.core.StringRedisTemplate; + +/** + * 验证码的配置类 + * + * @author 芋道源码 + */ +@Configuration(proxyBeanMethods = false) +public class WinCaptchaConfiguration { + + @Bean + public CaptchaCacheService captchaCacheService(AjCaptchaProperties config, + StringRedisTemplate stringRedisTemplate) { + CaptchaCacheService captchaCacheService = CaptchaServiceFactory.getCache(config.getCacheType().name()); + if (captchaCacheService instanceof RedisCaptchaServiceImpl) { + ((RedisCaptchaServiceImpl) captchaCacheService).setStringRedisTemplate(stringRedisTemplate); + } + return captchaCacheService; + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/captcha/core/RedisCaptchaServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/captcha/core/RedisCaptchaServiceImpl.java new file mode 100644 index 0000000..cb04659 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/captcha/core/RedisCaptchaServiceImpl.java @@ -0,0 +1,49 @@ +package com.win.module.system.framework.captcha.core; + +import com.xingyuv.captcha.service.CaptchaCacheService; +import lombok.Setter; +import org.springframework.data.redis.core.StringRedisTemplate; + +import java.util.concurrent.TimeUnit; + +/** + * 基于 Redis 实现验证码的存储 + * + * @author 星语 + */ +@Setter +public class RedisCaptchaServiceImpl implements CaptchaCacheService { + + private StringRedisTemplate stringRedisTemplate; + + @Override + public String type() { + return "redis"; + } + + @Override + public void set(String key, String value, long expiresInSeconds) { + stringRedisTemplate.opsForValue().set(key, value, expiresInSeconds, TimeUnit.SECONDS); + } + + @Override + public boolean exists(String key) { + return Boolean.TRUE.equals(stringRedisTemplate.hasKey(key)); + } + + @Override + public void delete(String key) { + stringRedisTemplate.delete(key); + } + + @Override + public String get(String key) { + return stringRedisTemplate.opsForValue().get(key); + } + + @Override + public Long increment(String key, long val) { + return stringRedisTemplate.opsForValue().increment(key,val); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/captcha/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/captcha/package-info.java new file mode 100644 index 0000000..e7d6c61 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/captcha/package-info.java @@ -0,0 +1,8 @@ +/** + * 验证码拓展 + * + * 基于 aj-captcha 实现滑块验证码,文档:https://ajcaptcha.beliefteam.cn/captcha-doc/ + * + * @author 星语 + */ +package com.win.module.system.framework.captcha; \ No newline at end of file diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/datapermission/config/DataPermissionConfiguration.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/datapermission/config/DataPermissionConfiguration.java new file mode 100644 index 0000000..bdec87b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/datapermission/config/DataPermissionConfiguration.java @@ -0,0 +1,28 @@ +package com.win.module.system.framework.datapermission.config; + +import com.win.module.system.dal.dataobject.dept.DeptDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.framework.datapermission.core.rule.dept.DeptDataPermissionRuleCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * system 模块的数据权限 Configuration + * + * @author 芋道源码 + */ +@Configuration(proxyBeanMethods = false) +public class DataPermissionConfiguration { + + @Bean + public DeptDataPermissionRuleCustomizer sysDeptDataPermissionRuleCustomizer() { + return rule -> { + // dept + rule.addDeptColumn(AdminUserDO.class); + rule.addDeptColumn(DeptDO.class, "id"); + // user + rule.addUserColumn(AdminUserDO.class, "id"); + }; + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/datapermission/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/datapermission/package-info.java new file mode 100644 index 0000000..a3670cd --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/datapermission/package-info.java @@ -0,0 +1,4 @@ +/** + * system 模块的数据权限配置 + */ +package com.win.module.system.framework.datapermission; diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/AdminUserParseFunction.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/AdminUserParseFunction.java new file mode 100644 index 0000000..11d3c25 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/AdminUserParseFunction.java @@ -0,0 +1,51 @@ +package com.win.module.system.framework.operatelog.core; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.module.system.service.user.AdminUserService; +import com.mzt.logapi.service.IParseFunction; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 管理员名字的 {@link IParseFunction} 实现类 + * + * @author HUIHUI + */ +@Slf4j +@Component +public class AdminUserParseFunction implements IParseFunction { + + public static final String NAME = "getAdminUserById"; + + @Resource + private AdminUserService adminUserService; + + @Override + public String functionName() { + return NAME; + } + + @Override + public String apply(Object value) { + if (StrUtil.isEmptyIfStr(value)) { + return ""; + } + + // 获取用户信息 + AdminUserDO user = adminUserService.getUser(Convert.toLong(value)); + if (user == null) { + log.warn("[apply][获取用户{{}}为空", value); + return ""; + } + // 返回格式 芋道源码(13888888888) + String nickname = user.getNickname(); + if (StrUtil.isEmpty(user.getMobile())) { + return nickname; + } + return StrUtil.format("{}({})", nickname, user.getMobile()); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/AreaParseFunction.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/AreaParseFunction.java new file mode 100644 index 0000000..ebbb768 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/AreaParseFunction.java @@ -0,0 +1,39 @@ +package com.win.module.system.framework.operatelog.core; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import com.win.framework.ip.core.utils.AreaUtils; +import com.mzt.logapi.service.IParseFunction; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 地名的 {@link IParseFunction} 实现类 + * + * @author HUIHUI + */ +@Slf4j +@Component +public class AreaParseFunction implements IParseFunction { + + public static final String NAME = "getArea"; + + @Override + public boolean executeBefore() { + return true; // 先转换值后对比 + } + + @Override + public String functionName() { + return NAME; + } + + @Override + public String apply(Object value) { + if (StrUtil.isEmptyIfStr(value)) { + return ""; + } + return AreaUtils.format(Convert.toInt(value)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/BooleanParseFunction.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/BooleanParseFunction.java new file mode 100644 index 0000000..30b5fcb --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/BooleanParseFunction.java @@ -0,0 +1,39 @@ +package com.win.module.system.framework.operatelog.core; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.dict.core.DictFrameworkUtils; +import com.win.module.infra.enums.DictTypeConstants; +import com.mzt.logapi.service.IParseFunction; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 是否类型的 {@link IParseFunction} 实现类 + * + * @author HUIHUI + */ +@Component +@Slf4j +public class BooleanParseFunction implements IParseFunction { + + public static final String NAME = "getBoolean"; + + @Override + public boolean executeBefore() { + return true; // 先转换值后对比 + } + + @Override + public String functionName() { + return NAME; + } + + @Override + public String apply(Object value) { + if (StrUtil.isEmptyIfStr(value)) { + return ""; + } + return DictFrameworkUtils.getDictDataLabel(DictTypeConstants.BOOLEAN_STRING, value.toString()); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/DeptParseFunction.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/DeptParseFunction.java new file mode 100644 index 0000000..9d58845 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/DeptParseFunction.java @@ -0,0 +1,46 @@ +package com.win.module.system.framework.operatelog.core; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import com.win.module.system.dal.dataobject.dept.DeptDO; +import com.win.module.system.service.dept.DeptService; +import com.mzt.logapi.service.IParseFunction; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 部门名字的 {@link IParseFunction} 实现类 + * + * @author HUIHUI + */ +@Slf4j +@Component +public class DeptParseFunction implements IParseFunction { + + public static final String NAME = "getDeptById"; + + @Resource + private DeptService deptService; + + @Override + public String functionName() { + return NAME; + } + + @Override + public String apply(Object value) { + if (StrUtil.isEmptyIfStr(value)) { + return ""; + } + + // 获取部门信息 + DeptDO dept = deptService.getDept(Convert.toLong(value)); + if (dept == null) { + log.warn("[apply][获取部门{{}}为空", value); + return ""; + } + return dept.getName(); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/PostParseFunction.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/PostParseFunction.java new file mode 100644 index 0000000..284fa74 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/PostParseFunction.java @@ -0,0 +1,46 @@ +package com.win.module.system.framework.operatelog.core; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import com.win.module.system.dal.dataobject.dept.PostDO; +import com.win.module.system.service.dept.PostService; +import com.mzt.logapi.service.IParseFunction; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 岗位名字的 {@link IParseFunction} 实现类 + * + * @author HUIHUI + */ +@Slf4j +@Component +public class PostParseFunction implements IParseFunction { + + public static final String NAME = "getPostById"; + + @Resource + private PostService postService; + + @Override + public String functionName() { + return NAME; + } + + @Override + public String apply(Object value) { + if (StrUtil.isEmptyIfStr(value)) { + return ""; + } + + // 获取岗位信息 + PostDO post = postService.getPost(Convert.toLong(value)); + if (post == null) { + log.warn("[apply][获取岗位{{}}为空", value); + return ""; + } + return post.getName(); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/SexParseFunction.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/SexParseFunction.java new file mode 100644 index 0000000..00babc3 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/core/SexParseFunction.java @@ -0,0 +1,39 @@ +package com.win.module.system.framework.operatelog.core; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.dict.core.DictFrameworkUtils; +import com.win.module.system.enums.DictTypeConstants; +import com.mzt.logapi.service.IParseFunction; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 行业的 {@link IParseFunction} 实现类 + * + * @author HUIHUI + */ +@Component +@Slf4j +public class SexParseFunction implements IParseFunction { + + public static final String NAME = "getSex"; + + @Override + public boolean executeBefore() { + return true; // 先转换值后对比 + } + + @Override + public String functionName() { + return NAME; + } + + @Override + public String apply(Object value) { + if (StrUtil.isEmptyIfStr(value)) { + return ""; + } + return DictFrameworkUtils.getDictDataLabel(DictTypeConstants.USER_SEX, value.toString()); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/package-info.java new file mode 100644 index 0000000..5c78144 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/operatelog/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位文件,避免文件夹缩进 + */ +package com.win.module.system.framework.operatelog; \ No newline at end of file diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/package-info.java new file mode 100644 index 0000000..e12eb51 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/package-info.java @@ -0,0 +1,6 @@ +/** + * 属于 system 模块的 framework 封装 + * + * @author 芋道源码 + */ +package com.win.module.system.framework; diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/rpc/config/RpcConfiguration.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/rpc/config/RpcConfiguration.java new file mode 100644 index 0000000..527f8bf --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/rpc/config/RpcConfiguration.java @@ -0,0 +1,11 @@ +package com.win.module.system.framework.rpc.config; + +import com.win.module.infra.api.file.FileApi; +import com.win.module.infra.api.websocket.WebSocketSenderApi; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; + +@Configuration(proxyBeanMethods = false) +@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class}) +public class RpcConfiguration { +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/rpc/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/rpc/package-info.java new file mode 100644 index 0000000..e6f1794 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/rpc/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package com.win.module.system.framework.rpc; diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/security/config/SecurityConfiguration.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/security/config/SecurityConfiguration.java new file mode 100644 index 0000000..b16fa84 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/security/config/SecurityConfiguration.java @@ -0,0 +1,39 @@ +package com.win.module.system.framework.security.config; + +import com.win.framework.security.config.AuthorizeRequestsCustomizer; +import com.win.module.system.enums.ApiConstants; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer; +import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; + +/** + * System 模块的 Security 配置 + */ +@Configuration(proxyBeanMethods = false, value = "systemSecurityConfiguration") +public class SecurityConfiguration { + + @Bean("systemAuthorizeRequestsCustomizer") + public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { + return new AuthorizeRequestsCustomizer() { + + @Override + public void customize(AuthorizeHttpRequestsConfigurer.AuthorizationManagerRequestMatcherRegistry registry) { + // TODO 芋艿:这个每个项目都需要重复配置,得捉摸有没通用的方案 + // Swagger 接口文档 + registry.requestMatchers("/v3/api-docs/**").permitAll() // 元数据 + .requestMatchers("/swagger-ui.html").permitAll(); // Swagger UI + // Druid 监控 + registry.requestMatchers("/druid/**").permitAll(); + // Spring Boot Actuator 的安全配置 + registry.requestMatchers("/actuator").permitAll() + .requestMatchers("/actuator/**").permitAll(); + // RPC 服务的安全配置 + registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll(); + } + + }; + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/security/core/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/security/core/package-info.java new file mode 100644 index 0000000..a059210 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/security/core/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package com.win.module.system.framework.security.core; diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/config/SmsCodeProperties.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/config/SmsCodeProperties.java new file mode 100644 index 0000000..ea1950f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/config/SmsCodeProperties.java @@ -0,0 +1,41 @@ +package com.win.module.system.framework.sms.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; + +import jakarta.validation.constraints.NotNull; +import java.time.Duration; + +@ConfigurationProperties(prefix = "win.sms-code") +@Validated +@Data +public class SmsCodeProperties { + + /** + * 过期时间 + */ + @NotNull(message = "过期时间不能为空") + private Duration expireTimes; + /** + * 短信发送频率 + */ + @NotNull(message = "短信发送频率不能为空") + private Duration sendFrequency; + /** + * 每日发送最大数量 + */ + @NotNull(message = "每日发送最大数量不能为空") + private Integer sendMaximumQuantityPerDay; + /** + * 验证码最小值 + */ + @NotNull(message = "验证码最小值不能为空") + private Integer beginCode; + /** + * 验证码最大值 + */ + @NotNull(message = "验证码最大值不能为空") + private Integer endCode; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/config/SmsConfiguration.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/config/SmsConfiguration.java new file mode 100644 index 0000000..951eb14 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/config/SmsConfiguration.java @@ -0,0 +1,23 @@ +package com.win.module.system.framework.sms.config; + +import com.win.module.system.framework.sms.core.client.SmsClientFactory; +import com.win.module.system.framework.sms.core.client.impl.SmsClientFactoryImpl; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 短信配置类,包括短信客户端、短信验证码两部分 + * + * @author 芋道源码 + */ +@Configuration(proxyBeanMethods = false) +@EnableConfigurationProperties(SmsCodeProperties.class) +public class SmsConfiguration { + + @Bean + public SmsClientFactory smsClientFactory() { + return new SmsClientFactoryImpl(); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/SmsClient.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/SmsClient.java new file mode 100644 index 0000000..667b648 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/SmsClient.java @@ -0,0 +1,54 @@ +package com.win.module.system.framework.sms.core.client; + +import com.win.framework.common.core.KeyValue; +import com.win.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO; +import com.win.module.system.framework.sms.core.client.dto.SmsSendRespDTO; +import com.win.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO; + +import java.util.List; + +/** + * 短信客户端,用于对接各短信平台的 SDK,实现短信发送等功能 + * + * @author zzf + * @since 2021/1/25 14:14 + */ +public interface SmsClient { + + /** + * 获得渠道编号 + * + * @return 渠道编号 + */ + Long getId(); + + /** + * 发送消息 + * + * @param logId 日志编号 + * @param mobile 手机号 + * @param apiTemplateId 短信 API 的模板编号 + * @param templateParams 短信模板参数。通过 List 数组,保证参数的顺序 + * @return 短信发送结果 + */ + SmsSendRespDTO sendSms(Long logId, String mobile, String apiTemplateId, + List> templateParams) throws Throwable; + + /** + * 解析接收短信的接收结果 + * + * @param text 结果 + * @return 结果内容 + * @throws Throwable 当解析 text 发生异常时,则会抛出异常 + */ + List parseSmsReceiveStatus(String text) throws Throwable; + + /** + * 查询指定的短信模板 + * + * @param apiTemplateId 短信 API 的模板编号 + * @return 短信模板 + */ + SmsTemplateRespDTO getSmsTemplate(String apiTemplateId) throws Throwable; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/SmsClientFactory.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/SmsClientFactory.java new file mode 100644 index 0000000..d2b0fff --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/SmsClientFactory.java @@ -0,0 +1,36 @@ +package com.win.module.system.framework.sms.core.client; + +import com.win.module.system.framework.sms.core.property.SmsChannelProperties; + +/** + * 短信客户端的工厂接口 + * + * @author zzf + * @since 2021/1/28 14:01 + */ +public interface SmsClientFactory { + + /** + * 获得短信 Client + * + * @param channelId 渠道编号 + * @return 短信 Client + */ + SmsClient getSmsClient(Long channelId); + + /** + * 获得短信 Client + * + * @param channelCode 渠道编码 + * @return 短信 Client + */ + SmsClient getSmsClient(String channelCode); + + /** + * 创建短信 Client + * + * @param properties 配置对象 + */ + void createOrUpdateSmsClient(SmsChannelProperties properties); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/dto/SmsReceiveRespDTO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/dto/SmsReceiveRespDTO.java new file mode 100644 index 0000000..fe5b3fb --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/dto/SmsReceiveRespDTO.java @@ -0,0 +1,48 @@ +package com.win.module.system.framework.sms.core.client.dto; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 消息接收 Response DTO + * + * @author 芋道源码 + */ +@Data +public class SmsReceiveRespDTO { + + /** + * 是否接收成功 + */ + private Boolean success; + /** + * API 接收结果的编码 + */ + private String errorCode; + /** + * API 接收结果的说明 + */ + private String errorMsg; + + /** + * 手机号 + */ + private String mobile; + /** + * 用户接收时间 + */ + private LocalDateTime receiveTime; + + /** + * 短信 API 发送返回的序号 + */ + private String serialNo; + /** + * 短信日志编号 + * + * 对应 SysSmsLogDO 的编号 + */ + private Long logId; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/dto/SmsSendRespDTO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/dto/SmsSendRespDTO.java new file mode 100644 index 0000000..91ead91 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/dto/SmsSendRespDTO.java @@ -0,0 +1,43 @@ +package com.win.module.system.framework.sms.core.client.dto; + +import lombok.Data; + +/** + * 短信发送 Response DTO + * + * @author 芋道源码 + */ +@Data +public class SmsSendRespDTO { + + /** + * 是否成功 + */ + private Boolean success; + + /** + * API 请求编号 + */ + private String apiRequestId; + + // ==================== 成功时字段 ==================== + + /** + * 短信 API 发送返回的序号 + */ + private String serialNo; + + // ==================== 失败时字段 ==================== + + /** + * API 返回错误码 + * + * 由于第三方的错误码可能是字符串,所以使用 String 类型 + */ + private String apiCode; + /** + * API 返回提示 + */ + private String apiMsg; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/dto/SmsTemplateRespDTO.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/dto/SmsTemplateRespDTO.java new file mode 100644 index 0000000..b9cd961 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/dto/SmsTemplateRespDTO.java @@ -0,0 +1,33 @@ +package com.win.module.system.framework.sms.core.client.dto; + +import com.win.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum; +import lombok.Data; + +/** + * 短信模板 Response DTO + * + * @author 芋道源码 + */ +@Data +public class SmsTemplateRespDTO { + + /** + * 模板编号 + */ + private String id; + /** + * 短信内容 + */ + private String content; + /** + * 审核状态 + * + * 枚举 {@link SmsTemplateAuditStatusEnum} + */ + private Integer auditStatus; + /** + * 审核未通过的理由 + */ + private String auditReason; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/AbstractSmsClient.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/AbstractSmsClient.java new file mode 100644 index 0000000..0332cdd --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/AbstractSmsClient.java @@ -0,0 +1,54 @@ +package com.win.module.system.framework.sms.core.client.impl; + +import com.win.module.system.framework.sms.core.client.SmsClient; +import com.win.module.system.framework.sms.core.property.SmsChannelProperties; +import lombok.extern.slf4j.Slf4j; + +/** + * 短信客户端的抽象类,提供模板方法,减少子类的冗余代码 + * + * @author zzf + * @since 2021/2/1 9:28 + */ +@Slf4j +public abstract class AbstractSmsClient implements SmsClient { + + /** + * 短信渠道配置 + */ + protected volatile SmsChannelProperties properties; + + public AbstractSmsClient(SmsChannelProperties properties) { + this.properties = properties; + } + + /** + * 初始化 + */ + public final void init() { + doInit(); + log.debug("[init][配置({}) 初始化完成]", properties); + } + + /** + * 自定义初始化 + */ + protected abstract void doInit(); + + public final void refresh(SmsChannelProperties properties) { + // 判断是否更新 + if (properties.equals(this.properties)) { + return; + } + log.info("[refresh][配置({})发生变化,重新初始化]", properties); + this.properties = properties; + // 初始化 + this.init(); + } + + @Override + public Long getId() { + return properties.getId(); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/AliyunSmsClient.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/AliyunSmsClient.java new file mode 100644 index 0000000..2e9ea73 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/AliyunSmsClient.java @@ -0,0 +1,183 @@ +package com.win.module.system.framework.sms.core.client.impl; + +import cn.hutool.core.lang.Assert; +import com.win.framework.common.core.KeyValue; +import com.win.framework.common.util.collection.MapUtils; +import com.win.framework.common.util.json.JsonUtils; +import com.win.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO; +import com.win.module.system.framework.sms.core.client.dto.SmsSendRespDTO; +import com.win.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO; +import com.win.module.system.framework.sms.core.client.impl.AbstractSmsClient; +import com.win.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum; +import com.win.module.system.framework.sms.core.property.SmsChannelProperties; +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.IAcsClient; +import com.aliyuncs.dysmsapi.model.v20170525.QuerySmsTemplateRequest; +import com.aliyuncs.dysmsapi.model.v20170525.QuerySmsTemplateResponse; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; +import com.aliyuncs.profile.DefaultProfile; +import com.aliyuncs.profile.IClientProfile; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.common.annotations.VisibleForTesting; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; + +import static com.win.framework.common.util.collection.CollectionUtils.convertList; +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import static com.win.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT; + +/** + * 阿里短信客户端的实现类 + * + * @author zzf + * @since 2021/1/25 14:17 + */ +@Slf4j +public class AliyunSmsClient extends AbstractSmsClient { + + /** + * 调用成功 code + */ + public static final String API_CODE_SUCCESS = "OK"; + + /** + * REGION, 使用杭州 + */ + private static final String ENDPOINT = "cn-hangzhou"; + + /** + * 阿里云客户端 + */ + private volatile IAcsClient client; + + public AliyunSmsClient(SmsChannelProperties properties) { + super(properties); + Assert.notEmpty(properties.getApiKey(), "apiKey 不能为空"); + Assert.notEmpty(properties.getApiSecret(), "apiSecret 不能为空"); + } + + @Override + protected void doInit() { + IClientProfile profile = DefaultProfile.getProfile(ENDPOINT, properties.getApiKey(), properties.getApiSecret()); + client = new DefaultAcsClient(profile); + } + + @Override + public SmsSendRespDTO sendSms(Long sendLogId, String mobile, String apiTemplateId, + List> templateParams) throws Throwable { + // 构建请求 + SendSmsRequest request = new SendSmsRequest(); + request.setPhoneNumbers(mobile); + request.setSignName(properties.getSignature()); + request.setTemplateCode(apiTemplateId); + request.setTemplateParam(JsonUtils.toJsonString(MapUtils.convertMap(templateParams))); + request.setOutId(String.valueOf(sendLogId)); + // 执行请求 + SendSmsResponse response = client.getAcsResponse(request); + return new SmsSendRespDTO().setSuccess(Objects.equals(response.getCode(), API_CODE_SUCCESS)).setSerialNo(response.getBizId()) + .setApiRequestId(response.getRequestId()).setApiCode(response.getCode()).setApiMsg(response.getMessage()); + } + + @Override + public List parseSmsReceiveStatus(String text) { + List statuses = JsonUtils.parseArray(text, SmsReceiveStatus.class); + return convertList(statuses, status -> new SmsReceiveRespDTO().setSuccess(status.getSuccess()) + .setErrorCode(status.getErrCode()).setErrorMsg(status.getErrMsg()) + .setMobile(status.getPhoneNumber()).setReceiveTime(status.getReportTime()) + .setSerialNo(status.getBizId()).setLogId(Long.valueOf(status.getOutId()))); + } + + @Override + public SmsTemplateRespDTO getSmsTemplate(String apiTemplateId) throws Throwable { + // 构建请求 + QuerySmsTemplateRequest request = new QuerySmsTemplateRequest(); + request.setTemplateCode(apiTemplateId); + // 执行请求 + QuerySmsTemplateResponse response = client.getAcsResponse(request); + if (response.getTemplateStatus() == null) { + return null; + } + return new SmsTemplateRespDTO().setId(response.getTemplateCode()).setContent(response.getTemplateContent()) + .setAuditStatus(convertSmsTemplateAuditStatus(response.getTemplateStatus())).setAuditReason(response.getReason()); + } + + @VisibleForTesting + Integer convertSmsTemplateAuditStatus(Integer templateStatus) { + switch (templateStatus) { + case 0: return SmsTemplateAuditStatusEnum.CHECKING.getStatus(); + case 1: return SmsTemplateAuditStatusEnum.SUCCESS.getStatus(); + case 2: return SmsTemplateAuditStatusEnum.FAIL.getStatus(); + default: throw new IllegalArgumentException(String.format("未知审核状态(%d)", templateStatus)); + } + } + + /** + * 短信接收状态 + * + * 参见 文档 + * + * @author 芋道源码 + */ + @Data + public static class SmsReceiveStatus { + + /** + * 手机号 + */ + @JsonProperty("phone_number") + private String phoneNumber; + /** + * 发送时间 + */ + @JsonProperty("send_time") + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT) + private LocalDateTime sendTime; + /** + * 状态报告时间 + */ + @JsonProperty("report_time") + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT) + private LocalDateTime reportTime; + /** + * 是否接收成功 + */ + private Boolean success; + /** + * 状态报告说明 + */ + @JsonProperty("err_msg") + private String errMsg; + /** + * 状态报告编码 + */ + @JsonProperty("err_code") + private String errCode; + /** + * 发送序列号 + */ + @JsonProperty("biz_id") + private String bizId; + /** + * 用户序列号 + * + * 这里我们传递的是 SysSmsLogDO 的日志编号 + */ + @JsonProperty("out_id") + private String outId; + /** + * 短信长度,例如说 1、2、3 + * + * 140 字节算一条短信,短信长度超过 140 字节时会拆分成多条短信发送 + */ + @JsonProperty("sms_size") + private Integer smsSize; + + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/DebugDingTalkSmsClient.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/DebugDingTalkSmsClient.java new file mode 100644 index 0000000..d1c1be8 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/DebugDingTalkSmsClient.java @@ -0,0 +1,96 @@ +package com.win.module.system.framework.sms.core.client.impl; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.digest.DigestUtil; +import cn.hutool.crypto.digest.HmacAlgorithm; +import cn.hutool.http.HttpUtil; +import com.win.framework.common.core.KeyValue; +import com.win.framework.common.util.collection.MapUtils; +import com.win.framework.common.util.json.JsonUtils; +import com.win.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO; +import com.win.module.system.framework.sms.core.client.dto.SmsSendRespDTO; +import com.win.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO; +import com.win.module.system.framework.sms.core.client.impl.AbstractSmsClient; +import com.win.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum; +import com.win.module.system.framework.sms.core.property.SmsChannelProperties; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * 基于钉钉 WebHook 实现的调试的短信客户端实现类 + * + * 考虑到省钱,我们使用钉钉 WebHook 模拟发送短信,方便调试。 + * + * @author 芋道源码 + */ +public class DebugDingTalkSmsClient extends AbstractSmsClient { + + public DebugDingTalkSmsClient(SmsChannelProperties properties) { + super(properties); + Assert.notEmpty(properties.getApiKey(), "apiKey 不能为空"); + Assert.notEmpty(properties.getApiSecret(), "apiSecret 不能为空"); + } + + @Override + protected void doInit() { + } + + @Override + public SmsSendRespDTO sendSms(Long sendLogId, String mobile, + String apiTemplateId, List> templateParams) throws Throwable { + // 构建请求 + String url = buildUrl("robot/send"); + Map params = new HashMap<>(); + params.put("msgtype", "text"); + String content = String.format("【模拟短信】\n手机号:%s\n短信日志编号:%d\n模板参数:%s", + mobile, sendLogId, MapUtils.convertMap(templateParams)); + params.put("text", MapUtil.builder().put("content", content).build()); + // 执行请求 + String responseText = HttpUtil.post(url, JsonUtils.toJsonString(params)); + // 解析结果 + Map responseObj = JsonUtils.parseObject(responseText, Map.class); + String errorCode = MapUtil.getStr(responseObj, "errcode"); + return new SmsSendRespDTO().setSuccess(Objects.equals(errorCode, "0")).setSerialNo(StrUtil.uuid()) + .setApiCode(errorCode).setApiMsg(MapUtil.getStr(responseObj, "errorMsg")); + } + + /** + * 构建请求地址 + * + * 参见 文档 + * + * @param path 请求路径 + * @return 请求地址 + */ + @SuppressWarnings("SameParameterValue") + private String buildUrl(String path) { + // 生成 timestamp + long timestamp = System.currentTimeMillis(); + // 生成 sign + String secret = properties.getApiSecret(); + String stringToSign = timestamp + "\n" + secret; + byte[] signData = DigestUtil.hmac(HmacAlgorithm.HmacSHA256, StrUtil.bytes(secret)).digest(stringToSign); + String sign = Base64.encode(signData); + // 构建最终 URL + return String.format("https://oapi.dingtalk.com/%s?access_token=%s×tamp=%d&sign=%s", + path, properties.getApiKey(), timestamp, sign); + } + + @Override + public List parseSmsReceiveStatus(String text) { + throw new UnsupportedOperationException("模拟短信客户端,暂时无需解析回调"); + } + + @Override + public SmsTemplateRespDTO getSmsTemplate(String apiTemplateId) { + return new SmsTemplateRespDTO().setId(apiTemplateId).setContent("") + .setAuditStatus(SmsTemplateAuditStatusEnum.SUCCESS.getStatus()).setAuditReason(""); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/SmsClientFactoryImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/SmsClientFactoryImpl.java new file mode 100644 index 0000000..79c2ef5 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/SmsClientFactoryImpl.java @@ -0,0 +1,87 @@ +package com.win.module.system.framework.sms.core.client.impl; + +import com.win.module.system.framework.sms.core.client.SmsClient; +import com.win.module.system.framework.sms.core.client.SmsClientFactory; +import com.win.module.system.framework.sms.core.enums.SmsChannelEnum; +import com.win.module.system.framework.sms.core.property.SmsChannelProperties; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.Assert; +import org.springframework.validation.annotation.Validated; + +import java.util.Arrays; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +/** + * 短信客户端工厂接口 + * + * @author zzf + */ +@Validated +@Slf4j +public class SmsClientFactoryImpl implements SmsClientFactory { + + /** + * 短信客户端 Map + * key:渠道编号,使用 {@link SmsChannelProperties#getId()} + */ + private final ConcurrentMap channelIdClients = new ConcurrentHashMap<>(); + + /** + * 短信客户端 Map + * key:渠道编码,使用 {@link SmsChannelProperties#getCode()} ()} + * + * 注意,一些场景下,需要获得某个渠道类型的客户端,所以需要使用它。 + * 例如说,解析短信接收结果,是相对通用的,不需要使用某个渠道编号的 {@link #channelIdClients} + */ + private final ConcurrentMap channelCodeClients = new ConcurrentHashMap<>(); + + public SmsClientFactoryImpl() { + // 初始化 channelCodeClients 集合 + Arrays.stream(SmsChannelEnum.values()).forEach(channel -> { + // 创建一个空的 SmsChannelProperties 对象 + SmsChannelProperties properties = new SmsChannelProperties().setCode(channel.getCode()) + .setApiKey("default default").setApiSecret("default"); + // 创建 Sms 客户端 + AbstractSmsClient smsClient = createSmsClient(properties); + channelCodeClients.put(channel.getCode(), smsClient); + }); + } + + @Override + public SmsClient getSmsClient(Long channelId) { + return channelIdClients.get(channelId); + } + + @Override + public SmsClient getSmsClient(String channelCode) { + return channelCodeClients.get(channelCode); + } + + @Override + public void createOrUpdateSmsClient(SmsChannelProperties properties) { + AbstractSmsClient client = channelIdClients.get(properties.getId()); + if (client == null) { + client = this.createSmsClient(properties); + client.init(); + channelIdClients.put(client.getId(), client); + } else { + client.refresh(properties); + } + } + + private AbstractSmsClient createSmsClient(SmsChannelProperties properties) { + SmsChannelEnum channelEnum = SmsChannelEnum.getByCode(properties.getCode()); + Assert.notNull(channelEnum, String.format("渠道类型(%s) 为空", channelEnum)); + // 创建客户端 + switch (channelEnum) { + case ALIYUN: return new AliyunSmsClient(properties); + case DEBUG_DING_TALK: return new DebugDingTalkSmsClient(properties); + case TENCENT: return new TencentSmsClient(properties); + } + // 创建失败,错误日志 + 抛出异常 + log.error("[createSmsClient][配置({}) 找不到合适的客户端实现]", properties); + throw new IllegalArgumentException(String.format("配置(%s) 找不到合适的客户端实现", properties)); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/TencentSmsClient.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/TencentSmsClient.java new file mode 100644 index 0000000..b6cda03 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/client/impl/TencentSmsClient.java @@ -0,0 +1,219 @@ +package com.win.module.system.framework.sms.core.client.impl; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.core.KeyValue; +import com.win.framework.common.util.collection.ArrayUtils; +import com.win.framework.common.util.json.JsonUtils; +import com.win.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO; +import com.win.module.system.framework.sms.core.client.dto.SmsSendRespDTO; +import com.win.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO; +import com.win.module.system.framework.sms.core.client.impl.AbstractSmsClient; +import com.win.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum; +import com.win.module.system.framework.sms.core.property.SmsChannelProperties; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.common.annotations.VisibleForTesting; +import com.tencentcloudapi.common.Credential; +import com.tencentcloudapi.sms.v20210111.SmsClient; +import com.tencentcloudapi.sms.v20210111.models.*; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; + +import static com.win.framework.common.util.collection.CollectionUtils.convertList; +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import static com.win.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT; + +/** + * 腾讯云短信功能实现 + * + * 参见 文档 + * + * @author shiwp + */ +public class TencentSmsClient extends AbstractSmsClient { + + /** + * 调用成功 code + */ + public static final String API_CODE_SUCCESS = "Ok"; + + /** + * REGION,使用南京 + */ + private static final String ENDPOINT = "ap-nanjing"; + + /** + * 是否国际/港澳台短信: + * + * 0:表示国内短信。 + * 1:表示国际/港澳台短信。 + */ + private static final long INTERNATIONAL_CHINA = 0L; + + private SmsClient client; + + public TencentSmsClient(SmsChannelProperties properties) { + super(properties); + Assert.notEmpty(properties.getApiSecret(), "apiSecret 不能为空"); + validateSdkAppId(properties); + } + + @Override + protected void doInit() { + // 实例化一个认证对象,入参需要传入腾讯云账户密钥对 secretId,secretKey + Credential credential = new Credential(getApiKey(), properties.getApiSecret()); + client = new SmsClient(credential, ENDPOINT); + } + + /** + * 参数校验腾讯云的 SDK AppId + * + * 原因是:腾讯云发放短信的时候,需要额外的参数 sdkAppId + * + * 解决方案:考虑到不破坏原有的 apiKey + apiSecret 的结构,所以将 secretId 拼接到 apiKey 字段中,格式为 "secretId sdkAppId"。 + * + * @param properties 配置 + */ + private static void validateSdkAppId(SmsChannelProperties properties) { + String combineKey = properties.getApiKey(); + Assert.notEmpty(combineKey, "apiKey 不能为空"); + String[] keys = combineKey.trim().split(" "); + Assert.isTrue(keys.length == 2, "腾讯云短信 apiKey 配置格式错误,请配置 为[secretId sdkAppId]"); + } + + private String getSdkAppId() { + return StrUtil.subAfter(properties.getApiKey(), " ", true); + } + + private String getApiKey() { + return StrUtil.subBefore(properties.getApiKey(), " ", true); + } + + @Override + public SmsSendRespDTO sendSms(Long sendLogId, String mobile, + String apiTemplateId, List> templateParams) throws Throwable { + // 构建请求 + SendSmsRequest request = new SendSmsRequest(); + request.setSmsSdkAppId(getSdkAppId()); + request.setPhoneNumberSet(new String[]{mobile}); + request.setSignName(properties.getSignature()); + request.setTemplateId(apiTemplateId); + request.setTemplateParamSet(ArrayUtils.toArray(templateParams, e -> String.valueOf(e.getValue()))); + request.setSessionContext(JsonUtils.toJsonString(new SessionContext().setLogId(sendLogId))); + // 执行请求 + SendSmsResponse response = client.SendSms(request); + SendStatus status = response.getSendStatusSet()[0]; + return new SmsSendRespDTO().setSuccess(Objects.equals(status.getCode(), API_CODE_SUCCESS)).setSerialNo(status.getSerialNo()) + .setApiRequestId(response.getRequestId()).setApiCode(status.getCode()).setApiMsg(status.getMessage()); + } + + @Override + public List parseSmsReceiveStatus(String text) { + List callback = JsonUtils.parseArray(text, SmsReceiveStatus.class); + return convertList(callback, status -> new SmsReceiveRespDTO() + .setSuccess(SmsReceiveStatus.SUCCESS_CODE.equalsIgnoreCase(status.getStatus())) + .setErrorCode(status.getErrCode()).setErrorMsg(status.getDescription()) + .setMobile(status.getMobile()).setReceiveTime(status.getReceiveTime()) + .setSerialNo(status.getSerialNo()).setLogId(status.getSessionContext().getLogId())); + } + + @Override + public SmsTemplateRespDTO getSmsTemplate(String apiTemplateId) throws Throwable { + // 构建请求 + DescribeSmsTemplateListRequest request = new DescribeSmsTemplateListRequest(); + request.setTemplateIdSet(new Long[]{Long.parseLong(apiTemplateId)}); + request.setInternational(INTERNATIONAL_CHINA); + // 执行请求 + DescribeSmsTemplateListResponse response = client.DescribeSmsTemplateList(request); + DescribeTemplateListStatus status = response.getDescribeTemplateStatusSet()[0]; + if (status == null || status.getStatusCode() == null) { + return null; + } + return new SmsTemplateRespDTO().setId(status.getTemplateId().toString()).setContent(status.getTemplateContent()) + .setAuditStatus(convertSmsTemplateAuditStatus(status.getStatusCode().intValue())).setAuditReason(status.getReviewReply()); + } + + @VisibleForTesting + Integer convertSmsTemplateAuditStatus(int templateStatus) { + switch (templateStatus) { + case 1: return SmsTemplateAuditStatusEnum.CHECKING.getStatus(); + case 0: return SmsTemplateAuditStatusEnum.SUCCESS.getStatus(); + case -1: return SmsTemplateAuditStatusEnum.FAIL.getStatus(); + default: throw new IllegalArgumentException(String.format("未知审核状态(%d)", templateStatus)); + } + } + + @Data + private static class SmsReceiveStatus { + + /** + * 短信接受成功 code + */ + public static final String SUCCESS_CODE = "SUCCESS"; + + /** + * 用户实际接收到短信的时间 + */ + @JsonProperty("user_receive_time") + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT) + private LocalDateTime receiveTime; + + /** + * 国家(或地区)码 + */ + @JsonProperty("nationcode") + private String nationCode; + + /** + * 手机号码 + */ + private String mobile; + + /** + * 实际是否收到短信接收状态,SUCCESS(成功)、FAIL(失败) + */ + @JsonProperty("report_status") + private String status; + + /** + * 用户接收短信状态码错误信息 + */ + @JsonProperty("errmsg") + private String errCode; + + /** + * 用户接收短信状态描述 + */ + @JsonProperty("description") + private String description; + + /** + * 本次发送标识 ID(与发送接口返回的SerialNo对应) + */ + @JsonProperty("sid") + private String serialNo; + + /** + * 用户的 session 内容(与发送接口的请求参数 SessionContext 一致) + */ + @JsonProperty("ext") + private SessionContext sessionContext; + + } + + @VisibleForTesting + @Data + static class SessionContext { + + /** + * 发送短信记录id + */ + private Long logId; + + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/enums/SmsChannelEnum.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/enums/SmsChannelEnum.java new file mode 100644 index 0000000..d1c914f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/enums/SmsChannelEnum.java @@ -0,0 +1,36 @@ +package com.win.module.system.framework.sms.core.enums; + +import cn.hutool.core.util.ArrayUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 短信渠道枚举 + * + * @author zzf + * @since 2021/1/25 10:56 + */ +@Getter +@AllArgsConstructor +public enum SmsChannelEnum { + + DEBUG_DING_TALK("DEBUG_DING_TALK", "调试(钉钉)"), + ALIYUN("ALIYUN", "阿里云"), + TENCENT("TENCENT", "腾讯云"), +// HUA_WEI("HUA_WEI", "华为云"), + ; + + /** + * 编码 + */ + private final String code; + /** + * 名字 + */ + private final String name; + + public static SmsChannelEnum getByCode(String code) { + return ArrayUtil.firstMatch(o -> o.getCode().equals(code), values()); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/enums/SmsTemplateAuditStatusEnum.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/enums/SmsTemplateAuditStatusEnum.java new file mode 100644 index 0000000..a3493a0 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/enums/SmsTemplateAuditStatusEnum.java @@ -0,0 +1,21 @@ +package com.win.module.system.framework.sms.core.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 短信模板的审核状态枚举 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum SmsTemplateAuditStatusEnum { + + CHECKING(1), + SUCCESS(2), + FAIL(3); + + private final Integer status; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/property/SmsChannelProperties.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/property/SmsChannelProperties.java new file mode 100644 index 0000000..7eba25e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/framework/sms/core/property/SmsChannelProperties.java @@ -0,0 +1,52 @@ +package com.win.module.system.framework.sms.core.property; + +import com.win.module.system.framework.sms.core.enums.SmsChannelEnum; +import lombok.Data; +import org.springframework.validation.annotation.Validated; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +/** + * 短信渠道配置类 + * + * @author zzf + * @since 2021/1/25 17:01 + */ +@Data +@Validated +public class SmsChannelProperties { + + /** + * 渠道编号 + */ + @NotNull(message = "短信渠道 ID 不能为空") + private Long id; + /** + * 短信签名 + */ + @NotEmpty(message = "短信签名不能为空") + private String signature; + /** + * 渠道编码 + * + * 枚举 {@link SmsChannelEnum} + */ + @NotEmpty(message = "渠道编码不能为空") + private String code; + /** + * 短信 API 的账号 + */ + @NotEmpty(message = "短信 API 的账号不能为空") + private String apiKey; + /** + * 短信 API 的密钥 + */ + @NotEmpty(message = "短信 API 的密钥不能为空") + private String apiSecret; + /** + * 短信发送回调 URL + */ + private String callbackUrl; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/job/demo/DemoJob.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/job/demo/DemoJob.java new file mode 100644 index 0000000..cf8125d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/job/demo/DemoJob.java @@ -0,0 +1,16 @@ +package com.win.module.system.job.demo; + +import com.win.framework.tenant.core.job.TenantJob; +import com.xxl.job.core.handler.annotation.XxlJob; +import org.springframework.stereotype.Component; + +@Component +public class DemoJob { + + @XxlJob("demoJob") + @TenantJob + public void execute() { + System.out.println("美滋滋"); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/job/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/job/package-info.java new file mode 100644 index 0000000..0621269 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/job/package-info.java @@ -0,0 +1 @@ +package com.win.module.system.job; diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/consumer/mail/MailSendConsumer.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/consumer/mail/MailSendConsumer.java new file mode 100644 index 0000000..aedd407 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/consumer/mail/MailSendConsumer.java @@ -0,0 +1,31 @@ +package com.win.module.system.mq.consumer.mail; + +import com.win.module.system.mq.message.mail.MailSendMessage; +import com.win.module.system.service.mail.MailSendService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import jakarta.annotation.Resource; + +/** + * 针对 {@link MailSendMessage} 的消费者 + * + * @author 芋道源码 + */ +@Component +@Slf4j +public class MailSendConsumer { + + @Resource + private MailSendService mailSendService; + + @EventListener + @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步 + public void onMessage(MailSendMessage message) { + log.info("[onMessage][消息内容({})]", message); + mailSendService.doSendMail(message); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/consumer/sms/SmsSendConsumer.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/consumer/sms/SmsSendConsumer.java new file mode 100644 index 0000000..d25c37b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/consumer/sms/SmsSendConsumer.java @@ -0,0 +1,31 @@ +package com.win.module.system.mq.consumer.sms; + +import com.win.module.system.mq.message.sms.SmsSendMessage; +import com.win.module.system.service.sms.SmsSendService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import jakarta.annotation.Resource; + +/** + * 针对 {@link SmsSendMessage} 的消费者 + * + * @author zzf + */ +@Component +@Slf4j +public class SmsSendConsumer { + + @Resource + private SmsSendService smsSendService; + + @EventListener + @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步 + public void onMessage(SmsSendMessage message) { + log.info("[onMessage][消息内容({})]", message); + smsSendService.doSendSms(message); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/message/mail/MailSendMessage.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/message/mail/MailSendMessage.java new file mode 100644 index 0000000..daf17cb --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/message/mail/MailSendMessage.java @@ -0,0 +1,47 @@ +package com.win.module.system.mq.message.mail; + +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +/** + * 邮箱发送消息 + * + * @author 芋道源码 + */ +@Data +public class MailSendMessage { + + /** + * 邮件日志编号 + */ + @NotNull(message = "邮件日志编号不能为空") + private Long logId; + /** + * 接收邮件地址 + */ + @NotNull(message = "接收邮件地址不能为空") + private String mail; + /** + * 邮件账号编号 + */ + @NotNull(message = "邮件账号编号不能为空") + private Long accountId; + + /** + * 邮件发件人 + */ + private String nickname; + /** + * 邮件标题 + */ + @NotEmpty(message = "邮件标题不能为空") + private String title; + /** + * 邮件内容 + */ + @NotEmpty(message = "邮件内容不能为空") + private String content; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/message/sms/SmsSendMessage.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/message/sms/SmsSendMessage.java new file mode 100644 index 0000000..ca7379c --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/message/sms/SmsSendMessage.java @@ -0,0 +1,42 @@ +package com.win.module.system.mq.message.sms; + +import com.win.framework.common.core.KeyValue; +import lombok.Data; + +import jakarta.validation.constraints.NotNull; +import java.util.List; + +/** + * 短信发送消息 + * + * @author 芋道源码 + */ +@Data +public class SmsSendMessage { + + /** + * 短信日志编号 + */ + @NotNull(message = "短信日志编号不能为空") + private Long logId; + /** + * 手机号 + */ + @NotNull(message = "手机号不能为空") + private String mobile; + /** + * 短信渠道编号 + */ + @NotNull(message = "短信渠道编号不能为空") + private Long channelId; + /** + * 短信 API 的模板编号 + */ + @NotNull(message = "短信 API 的模板编号不能为空") + private String apiTemplateId; + /** + * 短信模板参数 + */ + private List> templateParams; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/producer/mail/MailProducer.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/producer/mail/MailProducer.java new file mode 100644 index 0000000..410692c --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/producer/mail/MailProducer.java @@ -0,0 +1,41 @@ +package com.win.module.system.mq.producer.mail; + +import com.win.module.system.mq.message.mail.MailSendMessage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; + +import jakarta.annotation.Resource; + +/** + * Mail 邮件相关消息的 Producer + * + * @author wangjingyi + * @since 2021/4/19 13:33 + */ +@Slf4j +@Component +public class MailProducer { + + @Resource + private ApplicationContext applicationContext; + + /** + * 发送 {@link MailSendMessage} 消息 + * + * @param sendLogId 发送日志编码 + * @param mail 接收邮件地址 + * @param accountId 邮件账号编号 + * @param nickname 邮件发件人 + * @param title 邮件标题 + * @param content 邮件内容 + */ + public void sendMailSendMessage(Long sendLogId, String mail, Long accountId, + String nickname, String title, String content) { + MailSendMessage message = new MailSendMessage() + .setLogId(sendLogId).setMail(mail).setAccountId(accountId) + .setNickname(nickname).setTitle(title).setContent(content); + applicationContext.publishEvent(message); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/producer/sms/SmsProducer.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/producer/sms/SmsProducer.java new file mode 100644 index 0000000..5d4ccbd --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/mq/producer/sms/SmsProducer.java @@ -0,0 +1,41 @@ +package com.win.module.system.mq.producer.sms; + +import com.win.framework.common.core.KeyValue; +import com.win.module.system.mq.message.sms.SmsSendMessage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; + +import jakarta.annotation.Resource; +import java.util.List; + +/** + * Sms 短信相关消息的 Producer + * + * @author zzf + * @since 2021/3/9 16:35 + */ +@Slf4j +@Component +public class SmsProducer { + + @Resource + private ApplicationContext applicationContext; + + /** + * 发送 {@link SmsSendMessage} 消息 + * + * @param logId 短信日志编号 + * @param mobile 手机号 + * @param channelId 渠道编号 + * @param apiTemplateId 短信模板编号 + * @param templateParams 短信模板参数 + */ + public void sendSmsSendMessage(Long logId, String mobile, + Long channelId, String apiTemplateId, List> templateParams) { + SmsSendMessage message = new SmsSendMessage().setLogId(logId).setMobile(mobile); + message.setChannelId(channelId).setApiTemplateId(apiTemplateId).setTemplateParams(templateParams); + applicationContext.publishEvent(message); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/package-info.java new file mode 100644 index 0000000..7789e98 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/package-info.java @@ -0,0 +1,8 @@ +/** + * system 模块下,我们放通用业务,支撑上层的核心业务。 + * 例如说:用户、部门、权限、数据字典等等 + * + * 1. Controller URL:以 /system/ 开头,避免和其它 Module 冲突 + * 2. DataObject 表名:以 system_ 开头,方便在数据库中区分 + */ +package com.win.module.system; diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/auth/AdminAuthService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/auth/AdminAuthService.java new file mode 100644 index 0000000..c7eff9a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/auth/AdminAuthService.java @@ -0,0 +1,73 @@ +package com.win.module.system.service.auth; + +import com.win.module.system.controller.admin.auth.vo.*; +import com.win.module.system.dal.dataobject.user.AdminUserDO; + +import jakarta.validation.Valid; + +/** + * 管理后台的认证 Service 接口 + * + * 提供用户的登录、登出的能力 + * + * @author 芋道源码 + */ +public interface AdminAuthService { + + /** + * 验证账号 + 密码。如果通过,则返回用户 + * + * @param username 账号 + * @param password 密码 + * @return 用户 + */ + AdminUserDO authenticate(String username, String password); + + /** + * 账号登录 + * + * @param reqVO 登录信息 + * @return 登录结果 + */ + AuthLoginRespVO login(@Valid AuthLoginReqVO reqVO); + + /** + * 基于 token 退出登录 + * + * @param token token + * @param logType 登出类型 + */ + void logout(String token, Integer logType); + + /** + * 短信验证码发送 + * + * @param reqVO 发送请求 + */ + void sendSmsCode(AuthSmsSendReqVO reqVO); + + /** + * 短信登录 + * + * @param reqVO 登录信息 + * @return 登录结果 + */ + AuthLoginRespVO smsLogin(AuthSmsLoginReqVO reqVO) ; + + /** + * 社交快捷登录,使用 code 授权码 + * + * @param reqVO 登录信息 + * @return 登录结果 + */ + AuthLoginRespVO socialLogin(@Valid AuthSocialLoginReqVO reqVO); + + /** + * 刷新访问令牌 + * + * @param refreshToken 刷新令牌 + * @return 登录结果 + */ + AuthLoginRespVO refreshToken(String refreshToken); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/auth/AdminAuthServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/auth/AdminAuthServiceImpl.java new file mode 100644 index 0000000..86fc7b8 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/auth/AdminAuthServiceImpl.java @@ -0,0 +1,250 @@ +package com.win.module.system.service.auth; + +import cn.hutool.core.util.ObjectUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.util.monitor.TracerUtils; +import com.win.framework.common.util.servlet.ServletUtils; +import com.win.framework.common.util.validation.ValidationUtils; +import com.win.module.system.api.logger.dto.LoginLogCreateReqDTO; +import com.win.module.system.api.sms.SmsCodeApi; +import com.win.module.system.api.social.dto.SocialUserBindReqDTO; +import com.win.module.system.api.social.dto.SocialUserRespDTO; +import com.win.module.system.controller.admin.auth.vo.*; +import com.win.module.system.convert.auth.AuthConvert; +import com.win.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.module.system.enums.logger.LoginLogTypeEnum; +import com.win.module.system.enums.logger.LoginResultEnum; +import com.win.module.system.enums.oauth2.OAuth2ClientConstants; +import com.win.module.system.enums.sms.SmsSceneEnum; +import com.win.module.system.service.logger.LoginLogService; +import com.win.module.system.service.member.MemberService; +import com.win.module.system.service.oauth2.OAuth2TokenService; +import com.win.module.system.service.social.SocialUserService; +import com.win.module.system.service.user.AdminUserService; +import com.google.common.annotations.VisibleForTesting; +import com.xingyuv.captcha.model.common.ResponseModel; +import com.xingyuv.captcha.model.vo.CaptchaVO; +import com.xingyuv.captcha.service.CaptchaService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import jakarta.validation.Validator; +import java.util.Objects; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.servlet.ServletUtils.getClientIP; +import static com.win.module.system.enums.ErrorCodeConstants.*; + +/** + * Auth Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Slf4j +public class AdminAuthServiceImpl implements AdminAuthService { + + @Resource + private AdminUserService userService; + @Resource + private LoginLogService loginLogService; + @Resource + private OAuth2TokenService oauth2TokenService; + @Resource + private SocialUserService socialUserService; + @Resource + private MemberService memberService; + @Resource + private Validator validator; + @Resource + private CaptchaService captchaService; + @Resource + private SmsCodeApi smsCodeApi; + + /** + * 验证码的开关,默认为 true + */ + @Value("${win.captcha.enable:true}") + private Boolean captchaEnable; + + @Override + public AdminUserDO authenticate(String username, String password) { + final LoginLogTypeEnum logTypeEnum = LoginLogTypeEnum.LOGIN_USERNAME; + // 校验账号是否存在 + AdminUserDO user = userService.getUserByUsername(username); + if (user == null) { + createLoginLog(null, username, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS); + throw exception(AUTH_LOGIN_BAD_CREDENTIALS); + } + if (!userService.isPasswordMatch(password, user.getPassword())) { + createLoginLog(user.getId(), username, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS); + throw exception(AUTH_LOGIN_BAD_CREDENTIALS); + } + // 校验是否禁用 + if (CommonStatusEnum.isDisable(user.getStatus())) { + createLoginLog(user.getId(), username, logTypeEnum, LoginResultEnum.USER_DISABLED); + throw exception(AUTH_LOGIN_USER_DISABLED); + } + return user; + } + + @Override + public AuthLoginRespVO login(AuthLoginReqVO reqVO) { + // 校验验证码 + validateCaptcha(reqVO); + + // 使用账号密码,进行登录 + AdminUserDO user = authenticate(reqVO.getUsername(), reqVO.getPassword()); + + // 如果 socialType 非空,说明需要绑定社交用户 + if (reqVO.getSocialType() != null) { + socialUserService.bindSocialUser(new SocialUserBindReqDTO(user.getId(), getUserType().getValue(), + reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState())); + } + // 创建 Token 令牌,记录登录日志 + return createTokenAfterLoginSuccess(user.getId(), reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME); + } + + @Override + public void sendSmsCode(AuthSmsSendReqVO reqVO) { + // 登录场景,验证是否存在 + if (userService.getUserByMobile(reqVO.getMobile()) == null) { + throw exception(AUTH_MOBILE_NOT_EXISTS); + } + // 发送验证码 + smsCodeApi.sendSmsCode(AuthConvert.INSTANCE.convert(reqVO).setCreateIp(getClientIP())); + } + + @Override + public AuthLoginRespVO smsLogin(AuthSmsLoginReqVO reqVO) { + // 校验验证码 + smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.ADMIN_MEMBER_LOGIN.getScene(), getClientIP())).getCheckedData(); + + // 获得用户信息 + AdminUserDO user = userService.getUserByMobile(reqVO.getMobile()); + if (user == null) { + throw exception(USER_NOT_EXISTS); + } + + // 创建 Token 令牌,记录登录日志 + return createTokenAfterLoginSuccess(user.getId(), reqVO.getMobile(), LoginLogTypeEnum.LOGIN_MOBILE); + } + + private void createLoginLog(Long userId, String username, + LoginLogTypeEnum logTypeEnum, LoginResultEnum loginResult) { + // 插入登录日志 + LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO(); + reqDTO.setLogType(logTypeEnum.getType()); + reqDTO.setTraceId(TracerUtils.getTraceId()); + reqDTO.setUserId(userId); + reqDTO.setUserType(getUserType().getValue()); + reqDTO.setUsername(username); + reqDTO.setUserAgent(ServletUtils.getUserAgent()); + reqDTO.setUserIp(ServletUtils.getClientIP()); + reqDTO.setResult(loginResult.getResult()); + loginLogService.createLoginLog(reqDTO); + // 更新最后登录时间 + if (userId != null && Objects.equals(LoginResultEnum.SUCCESS.getResult(), loginResult.getResult())) { + userService.updateUserLogin(userId, ServletUtils.getClientIP()); + } + } + + @Override + public AuthLoginRespVO socialLogin(AuthSocialLoginReqVO reqVO) { + // 使用 code 授权码,进行登录。然后,获得到绑定的用户编号 + SocialUserRespDTO socialUser = socialUserService.getSocialUserByCode(UserTypeEnum.ADMIN.getValue(), reqVO.getType(), + reqVO.getCode(), reqVO.getState()); + if (socialUser == null || socialUser.getUserId() == null) { + throw exception(AUTH_THIRD_LOGIN_NOT_BIND); + } + + // 获得用户 + AdminUserDO user = userService.getUser(socialUser.getUserId()); + if (user == null) { + throw exception(USER_NOT_EXISTS); + } + + // 创建 Token 令牌,记录登录日志 + return createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL); + } + + @VisibleForTesting + void validateCaptcha(AuthLoginReqVO reqVO) { + // 如果验证码关闭,则不进行校验 + if (!captchaEnable) { + return; + } + // 校验验证码 + ValidationUtils.validate(validator, reqVO, AuthLoginReqVO.CodeEnableGroup.class); + CaptchaVO captchaVO = new CaptchaVO(); + captchaVO.setCaptchaVerification(reqVO.getCaptchaVerification()); + ResponseModel response = captchaService.verification(captchaVO); + // 验证不通过 + if (!response.isSuccess()) { + // 创建登录失败日志(验证码不正确) + createLoginLog(null, reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME, LoginResultEnum.CAPTCHA_CODE_ERROR); + throw exception(AUTH_LOGIN_CAPTCHA_CODE_ERROR, response.getRepMsg()); + } + } + + private AuthLoginRespVO createTokenAfterLoginSuccess(Long userId, String username, LoginLogTypeEnum logType) { + // 插入登陆日志 + createLoginLog(userId, username, logType, LoginResultEnum.SUCCESS); + // 创建访问令牌 + OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.createAccessToken(userId, getUserType().getValue(), + OAuth2ClientConstants.CLIENT_ID_DEFAULT, null); + // 构建返回结果 + return AuthConvert.INSTANCE.convert(accessTokenDO); + } + + @Override + public AuthLoginRespVO refreshToken(String refreshToken) { + OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.refreshAccessToken(refreshToken, OAuth2ClientConstants.CLIENT_ID_DEFAULT); + return AuthConvert.INSTANCE.convert(accessTokenDO); + } + + @Override + public void logout(String token, Integer logType) { + // 删除访问令牌 + OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.removeAccessToken(token); + if (accessTokenDO == null) { + return; + } + // 删除成功,则记录登出日志 + createLogoutLog(accessTokenDO.getUserId(), accessTokenDO.getUserType(), logType); + } + + private void createLogoutLog(Long userId, Integer userType, Integer logType) { + LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO(); + reqDTO.setLogType(logType); + reqDTO.setTraceId(TracerUtils.getTraceId()); + reqDTO.setUserId(userId); + reqDTO.setUserType(userType); + if (ObjectUtil.equal(getUserType().getValue(), userType)) { + reqDTO.setUsername(getUsername(userId)); + } else { + reqDTO.setUsername(memberService.getMemberUserMobile(userId)); + } + reqDTO.setUserAgent(ServletUtils.getUserAgent()); + reqDTO.setUserIp(ServletUtils.getClientIP()); + reqDTO.setResult(LoginResultEnum.SUCCESS.getResult()); + loginLogService.createLoginLog(reqDTO); + } + + private String getUsername(Long userId) { + if (userId == null) { + return null; + } + AdminUserDO user = userService.getUser(userId); + return user != null ? user.getUsername() : null; + } + + private UserTypeEnum getUserType() { + return UserTypeEnum.ADMIN; + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/DeptService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/DeptService.java new file mode 100644 index 0000000..0a06cd4 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/DeptService.java @@ -0,0 +1,102 @@ +package com.win.module.system.service.dept; + +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.module.system.controller.admin.dept.vo.dept.DeptListReqVO; +import com.win.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO; +import com.win.module.system.dal.dataobject.dept.DeptDO; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 部门 Service 接口 + * + * @author 芋道源码 + */ +public interface DeptService { + + /** + * 创建部门 + * + * @param createReqVO 部门信息 + * @return 部门编号 + */ + Long createDept(DeptSaveReqVO createReqVO); + + /** + * 更新部门 + * + * @param updateReqVO 部门信息 + */ + void updateDept(DeptSaveReqVO updateReqVO); + + /** + * 删除部门 + * + * @param id 部门编号 + */ + void deleteDept(Long id); + + /** + * 获得部门信息 + * + * @param id 部门编号 + * @return 部门信息 + */ + DeptDO getDept(Long id); + + /** + * 获得部门信息数组 + * + * @param ids 部门编号数组 + * @return 部门信息数组 + */ + List getDeptList(Collection ids); + + /** + * 筛选部门列表 + * + * @param reqVO 筛选条件请求 VO + * @return 部门列表 + */ + List getDeptList(DeptListReqVO reqVO); + + /** + * 获得指定编号的部门 Map + * + * @param ids 部门编号数组 + * @return 部门 Map + */ + default Map getDeptMap(Collection ids) { + List list = getDeptList(ids); + return CollectionUtils.convertMap(list, DeptDO::getId); + } + + /** + * 获得指定部门的所有子部门 + * + * @param id 部门编号 + * @return 子部门列表 + */ + List getChildDeptList(Long id); + + /** + * 获得所有子部门,从缓存中 + * + * @param id 父部门编号 + * @return 子部门列表 + */ + Set getChildDeptIdListFromCache(Long id); + + /** + * 校验部门们是否有效。如下情况,视为无效: + * 1. 部门编号不存在 + * 2. 部门被禁用 + * + * @param ids 角色编号数组 + */ + void validateDeptList(Collection ids); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/DeptServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/DeptServiceImpl.java new file mode 100644 index 0000000..3f48f56 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/DeptServiceImpl.java @@ -0,0 +1,218 @@ +package com.win.module.system.service.dept; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.datapermission.core.annotation.DataPermission; +import com.win.module.system.controller.admin.dept.vo.dept.DeptListReqVO; +import com.win.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO; +import com.win.module.system.dal.dataobject.dept.DeptDO; +import com.win.module.system.dal.mysql.dept.DeptMapper; +import com.win.module.system.dal.redis.RedisKeyConstants; +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.util.*; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; +import static com.win.module.system.enums.ErrorCodeConstants.*; + +/** + * 部门 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +@Slf4j +public class DeptServiceImpl implements DeptService { + + @Resource + private DeptMapper deptMapper; + + @Override + @CacheEvict(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST, + allEntries = true) // allEntries 清空所有缓存,因为操作一个部门,涉及到多个缓存 + public Long createDept(DeptSaveReqVO createReqVO) { + if (createReqVO.getParentId() == null) { + createReqVO.setParentId(DeptDO.PARENT_ID_ROOT); + } + // 校验父部门的有效性 + validateParentDept(null, createReqVO.getParentId()); + // 校验部门名的唯一性 + validateDeptNameUnique(null, createReqVO.getParentId(), createReqVO.getName()); + + // 插入部门 + DeptDO dept = BeanUtils.toBean(createReqVO, DeptDO.class); + deptMapper.insert(dept); + return dept.getId(); + } + + @Override + @CacheEvict(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST, + allEntries = true) // allEntries 清空所有缓存,因为操作一个部门,涉及到多个缓存 + public void updateDept(DeptSaveReqVO updateReqVO) { + if (updateReqVO.getParentId() == null) { + updateReqVO.setParentId(DeptDO.PARENT_ID_ROOT); + } + // 校验自己存在 + validateDeptExists(updateReqVO.getId()); + // 校验父部门的有效性 + validateParentDept(updateReqVO.getId(), updateReqVO.getParentId()); + // 校验部门名的唯一性 + validateDeptNameUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getName()); + + // 更新部门 + DeptDO updateObj = BeanUtils.toBean(updateReqVO, DeptDO.class); + deptMapper.updateById(updateObj); + } + + @Override + @CacheEvict(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST, + allEntries = true) // allEntries 清空所有缓存,因为操作一个部门,涉及到多个缓存 + public void deleteDept(Long id) { + // 校验是否存在 + validateDeptExists(id); + // 校验是否有子部门 + if (deptMapper.selectCountByParentId(id) > 0) { + throw exception(DEPT_EXITS_CHILDREN); + } + // 删除部门 + deptMapper.deleteById(id); + } + + @VisibleForTesting + void validateDeptExists(Long id) { + if (id == null) { + return; + } + DeptDO dept = deptMapper.selectById(id); + if (dept == null) { + throw exception(DEPT_NOT_FOUND); + } + } + + @VisibleForTesting + void validateParentDept(Long id, Long parentId) { + if (parentId == null || DeptDO.PARENT_ID_ROOT.equals(parentId)) { + return; + } + // 1. 不能设置自己为父部门 + if (Objects.equals(id, parentId)) { + throw exception(DEPT_PARENT_ERROR); + } + // 2. 父部门不存在 + DeptDO parentDept = deptMapper.selectById(parentId); + if (parentDept == null) { + throw exception(DEPT_PARENT_NOT_EXITS); + } + // 3. 递归校验父部门,如果父部门是自己的子部门,则报错,避免形成环路 + if (id == null) { // id 为空,说明新增,不需要考虑环路 + return; + } + for (int i = 0; i < Short.MAX_VALUE; i++) { + // 3.1 校验环路 + parentId = parentDept.getParentId(); + if (Objects.equals(id, parentId)) { + throw exception(DEPT_PARENT_IS_CHILD); + } + // 3.2 继续递归下一级父部门 + if (parentId == null || DeptDO.PARENT_ID_ROOT.equals(parentId)) { + break; + } + parentDept = deptMapper.selectById(parentId); + if (parentDept == null) { + break; + } + } + } + + @VisibleForTesting + void validateDeptNameUnique(Long id, Long parentId, String name) { + DeptDO dept = deptMapper.selectByParentIdAndName(parentId, name); + if (dept == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的部门 + if (id == null) { + throw exception(DEPT_NAME_DUPLICATE); + } + if (ObjectUtil.notEqual(dept.getId(), id)) { + throw exception(DEPT_NAME_DUPLICATE); + } + } + + @Override + public DeptDO getDept(Long id) { + return deptMapper.selectById(id); + } + + @Override + public List getDeptList(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return Collections.emptyList(); + } + return deptMapper.selectBatchIds(ids); + } + + @Override + public List getDeptList(DeptListReqVO reqVO) { + List list = deptMapper.selectList(reqVO); + list.sort(Comparator.comparing(DeptDO::getSort)); + return list; + } + + @Override + public List getChildDeptList(Long id) { + List children = new LinkedList<>(); + // 遍历每一层 + Collection parentIds = Collections.singleton(id); + for (int i = 0; i < Short.MAX_VALUE; i++) { // 使用 Short.MAX_VALUE 避免 bug 场景下,存在死循环 + // 查询当前层,所有的子部门 + List depts = deptMapper.selectListByParentId(parentIds); + // 1. 如果没有子部门,则结束遍历 + if (CollUtil.isEmpty(depts)) { + break; + } + // 2. 如果有子部门,继续遍历 + children.addAll(depts); + parentIds = convertSet(depts, DeptDO::getId); + } + return children; + } + + @Override + @DataPermission(enable = false) // 禁用数据权限,避免建立不正确的缓存 + @Cacheable(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST, key = "#id") + public Set getChildDeptIdListFromCache(Long id) { + List children = getChildDeptList(id); + return convertSet(children, DeptDO::getId); + } + + @Override + public void validateDeptList(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 获得科室信息 + Map deptMap = getDeptMap(ids); + // 校验 + ids.forEach(id -> { + DeptDO dept = deptMap.get(id); + if (dept == null) { + throw exception(DEPT_NOT_FOUND); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(dept.getStatus())) { + throw exception(DEPT_NOT_ENABLE, dept.getName()); + } + }); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/PostService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/PostService.java new file mode 100644 index 0000000..0eca3d7 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/PostService.java @@ -0,0 +1,84 @@ +package com.win.module.system.service.dept; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.dept.vo.post.PostPageReqVO; +import com.win.module.system.controller.admin.dept.vo.post.PostSaveReqVO; +import com.win.module.system.dal.dataobject.dept.PostDO; +import org.springframework.lang.Nullable; + +import java.util.Collection; +import java.util.List; + +/** + * 岗位 Service 接口 + * + * @author 芋道源码 + */ +public interface PostService { + + /** + * 创建岗位 + * + * @param createReqVO 岗位信息 + * @return 岗位编号 + */ + Long createPost(PostSaveReqVO createReqVO); + + /** + * 更新岗位 + * + * @param updateReqVO 岗位信息 + */ + void updatePost(PostSaveReqVO updateReqVO); + + /** + * 删除岗位信息 + * + * @param id 岗位编号 + */ + void deletePost(Long id); + + /** + * 获得岗位列表 + * + * @param ids 岗位编号数组 + * @return 部门列表 + */ + List getPostList(@Nullable Collection ids); + + /** + * 获得符合条件的岗位列表 + * + * @param ids 岗位编号数组。如果为空,不进行筛选 + * @param statuses 状态数组。如果为空,不进行筛选 + * @return 部门列表 + */ + List getPostList(@Nullable Collection ids, + @Nullable Collection statuses); + + /** + * 获得岗位分页列表 + * + * @param reqVO 分页条件 + * @return 部门分页列表 + */ + PageResult getPostPage(PostPageReqVO reqVO); + + /** + * 获得岗位信息 + * + * @param id 岗位编号 + * @return 岗位信息 + */ + PostDO getPost(Long id); + + /** + * 校验岗位们是否有效。如下情况,视为无效: + * 1. 岗位编号不存在 + * 2. 岗位被禁用 + * + * @param ids 岗位编号数组 + */ + void validatePostList(Collection ids); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/PostServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/PostServiceImpl.java new file mode 100644 index 0000000..e8fd3c8 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dept/PostServiceImpl.java @@ -0,0 +1,153 @@ +package com.win.module.system.service.dept; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.dept.vo.post.PostPageReqVO; +import com.win.module.system.controller.admin.dept.vo.post.PostSaveReqVO; +import com.win.module.system.dal.dataobject.dept.PostDO; +import com.win.module.system.dal.mysql.dept.PostMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.collection.CollectionUtils.convertMap; +import static com.win.module.system.enums.ErrorCodeConstants.*; + +/** + * 岗位 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class PostServiceImpl implements PostService { + + @Resource + private PostMapper postMapper; + + @Override + public Long createPost(PostSaveReqVO createReqVO) { + // 校验正确性 + validatePostForCreateOrUpdate(null, createReqVO.getName(), createReqVO.getCode()); + + // 插入岗位 + PostDO post = BeanUtils.toBean(createReqVO, PostDO.class); + postMapper.insert(post); + return post.getId(); + } + + @Override + public void updatePost(PostSaveReqVO updateReqVO) { + // 校验正确性 + validatePostForCreateOrUpdate(updateReqVO.getId(), updateReqVO.getName(), updateReqVO.getCode()); + + // 更新岗位 + PostDO updateObj = BeanUtils.toBean(updateReqVO, PostDO.class); + postMapper.updateById(updateObj); + } + + @Override + public void deletePost(Long id) { + // 校验是否存在 + validatePostExists(id); + // 删除部门 + postMapper.deleteById(id); + } + + private void validatePostForCreateOrUpdate(Long id, String name, String code) { + // 校验自己存在 + validatePostExists(id); + // 校验岗位名的唯一性 + validatePostNameUnique(id, name); + // 校验岗位编码的唯一性 + validatePostCodeUnique(id, code); + } + + private void validatePostNameUnique(Long id, String name) { + PostDO post = postMapper.selectByName(name); + if (post == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的岗位 + if (id == null) { + throw exception(POST_NAME_DUPLICATE); + } + if (!post.getId().equals(id)) { + throw exception(POST_NAME_DUPLICATE); + } + } + + private void validatePostCodeUnique(Long id, String code) { + PostDO post = postMapper.selectByCode(code); + if (post == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的岗位 + if (id == null) { + throw exception(POST_CODE_DUPLICATE); + } + if (!post.getId().equals(id)) { + throw exception(POST_CODE_DUPLICATE); + } + } + + private void validatePostExists(Long id) { + if (id == null) { + return; + } + if (postMapper.selectById(id) == null) { + throw exception(POST_NOT_FOUND); + } + } + + @Override + public List getPostList(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return Collections.emptyList(); + } + return postMapper.selectBatchIds(ids); + } + + @Override + public List getPostList(Collection ids, Collection statuses) { + return postMapper.selectList(ids, statuses); + } + + @Override + public PageResult getPostPage(PostPageReqVO reqVO) { + return postMapper.selectPage(reqVO); + } + + @Override + public PostDO getPost(Long id) { + return postMapper.selectById(id); + } + + @Override + public void validatePostList(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 获得岗位信息 + List posts = postMapper.selectBatchIds(ids); + Map postMap = convertMap(posts, PostDO::getId); + // 校验 + ids.forEach(id -> { + PostDO post = postMap.get(id); + if (post == null) { + throw exception(POST_NOT_FOUND); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(post.getStatus())) { + throw exception(POST_NOT_ENABLE, post.getName()); + } + }); + } +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictDataService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictDataService.java new file mode 100644 index 0000000..1c09b00 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictDataService.java @@ -0,0 +1,110 @@ +package com.win.module.system.service.dict; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; +import com.win.module.system.controller.admin.dict.vo.data.DictDataSaveReqVO; +import com.win.module.system.dal.dataobject.dict.DictDataDO; +import org.springframework.lang.Nullable; + +import java.util.Collection; +import java.util.List; + +/** + * 字典数据 Service 接口 + * + * @author ruoyi + */ +public interface DictDataService { + + /** + * 创建字典数据 + * + * @param createReqVO 字典数据信息 + * @return 字典数据编号 + */ + Long createDictData(DictDataSaveReqVO createReqVO); + + /** + * 更新字典数据 + * + * @param updateReqVO 字典数据信息 + */ + void updateDictData(DictDataSaveReqVO updateReqVO); + + /** + * 删除字典数据 + * + * @param id 字典数据编号 + */ + void deleteDictData(Long id); + + /** + * 获得字典数据列表 + * + * @param status 状态 + * @param dictType 字典类型 + * @return 字典数据全列表 + */ + List getDictDataList(@Nullable Integer status, @Nullable String dictType); + + /** + * 获得字典数据分页列表 + * + * @param pageReqVO 分页请求 + * @return 字典数据分页列表 + */ + PageResult getDictDataPage(DictDataPageReqVO pageReqVO); + + /** + * 获得字典数据详情 + * + * @param id 字典数据编号 + * @return 字典数据 + */ + DictDataDO getDictData(Long id); + + /** + * 获得指定字典类型的数据数量 + * + * @param dictType 字典类型 + * @return 数据数量 + */ + long getDictDataCountByDictType(String dictType); + + /** + * 校验字典数据们是否有效。如下情况,视为无效: + * 1. 字典数据不存在 + * 2. 字典数据被禁用 + * + * @param dictType 字典类型 + * @param values 字典数据值的数组 + */ + void validateDictDataList(String dictType, Collection values); + + /** + * 获得指定的字典数据 + * + * @param dictType 字典类型 + * @param value 字典数据值 + * @return 字典数据 + */ + DictDataDO getDictData(String dictType, String value); + + /** + * 解析获得指定的字典数据,从缓存中 + * + * @param dictType 字典类型 + * @param label 字典数据标签 + * @return 字典数据 + */ + DictDataDO parseDictData(String dictType, String label); + + /** + * 获得指定数据类型的字典数据列表 + * + * @param dictType 字典类型 + * @return 字典数据列表 + */ + List getDictDataListByDictType(String dictType); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictDataServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictDataServiceImpl.java new file mode 100644 index 0000000..ed94741 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictDataServiceImpl.java @@ -0,0 +1,179 @@ +package com.win.module.system.service.dict; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.dict.vo.data.DictDataPageReqVO; +import com.win.module.system.controller.admin.dict.vo.data.DictDataSaveReqVO; +import com.win.module.system.dal.dataobject.dict.DictDataDO; +import com.win.module.system.dal.dataobject.dict.DictTypeDO; +import com.win.module.system.dal.mysql.dict.DictDataMapper; +import com.google.common.annotations.VisibleForTesting; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.Comparator; +import java.util.List; +import java.util.Map; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.system.enums.ErrorCodeConstants.*; + +/** + * 字典数据 Service 实现类 + * + * @author ruoyi + */ +@Service +@Slf4j +public class DictDataServiceImpl implements DictDataService { + + /** + * 排序 dictType > sort + */ + private static final Comparator COMPARATOR_TYPE_AND_SORT = Comparator + .comparing(DictDataDO::getDictType) + .thenComparingInt(DictDataDO::getSort); + + @Resource + private DictTypeService dictTypeService; + + @Resource + private DictDataMapper dictDataMapper; + + @Override + public List getDictDataList(Integer status, String dictType) { + List list = dictDataMapper.selectListByStatusAndDictType(status, dictType); + list.sort(COMPARATOR_TYPE_AND_SORT); + return list; + } + + @Override + public PageResult getDictDataPage(DictDataPageReqVO pageReqVO) { + return dictDataMapper.selectPage(pageReqVO); + } + + @Override + public DictDataDO getDictData(Long id) { + return dictDataMapper.selectById(id); + } + + @Override + public Long createDictData(DictDataSaveReqVO createReqVO) { + // 校验字典类型有效 + validateDictTypeExists(createReqVO.getDictType()); + // 校验字典数据的值的唯一性 + validateDictDataValueUnique(null, createReqVO.getDictType(), createReqVO.getValue()); + + // 插入字典类型 + DictDataDO dictData = BeanUtils.toBean(createReqVO, DictDataDO.class); + dictDataMapper.insert(dictData); + return dictData.getId(); + } + + @Override + public void updateDictData(DictDataSaveReqVO updateReqVO) { + // 校验自己存在 + validateDictDataExists(updateReqVO.getId()); + // 校验字典类型有效 + validateDictTypeExists(updateReqVO.getDictType()); + // 校验字典数据的值的唯一性 + validateDictDataValueUnique(updateReqVO.getId(), updateReqVO.getDictType(), updateReqVO.getValue()); + + // 更新字典类型 + DictDataDO updateObj = BeanUtils.toBean(updateReqVO, DictDataDO.class); + dictDataMapper.updateById(updateObj); + } + + @Override + public void deleteDictData(Long id) { + // 校验是否存在 + validateDictDataExists(id); + + // 删除字典数据 + dictDataMapper.deleteById(id); + } + + @Override + public long getDictDataCountByDictType(String dictType) { + return dictDataMapper.selectCountByDictType(dictType); + } + + @VisibleForTesting + public void validateDictDataValueUnique(Long id, String dictType, String value) { + DictDataDO dictData = dictDataMapper.selectByDictTypeAndValue(dictType, value); + if (dictData == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的字典数据 + if (id == null) { + throw exception(DICT_DATA_VALUE_DUPLICATE); + } + if (!dictData.getId().equals(id)) { + throw exception(DICT_DATA_VALUE_DUPLICATE); + } + } + + @VisibleForTesting + public void validateDictDataExists(Long id) { + if (id == null) { + return; + } + DictDataDO dictData = dictDataMapper.selectById(id); + if (dictData == null) { + throw exception(DICT_DATA_NOT_EXISTS); + } + } + + @VisibleForTesting + public void validateDictTypeExists(String type) { + DictTypeDO dictType = dictTypeService.getDictType(type); + if (dictType == null) { + throw exception(DICT_TYPE_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(dictType.getStatus())) { + throw exception(DICT_TYPE_NOT_ENABLE); + } + } + + @Override + public void validateDictDataList(String dictType, Collection values) { + if (CollUtil.isEmpty(values)) { + return; + } + Map dictDataMap = CollectionUtils.convertMap( + dictDataMapper.selectByDictTypeAndValues(dictType, values), DictDataDO::getValue); + // 校验 + values.forEach(value -> { + DictDataDO dictData = dictDataMap.get(value); + if (dictData == null) { + throw exception(DICT_DATA_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(dictData.getStatus())) { + throw exception(DICT_DATA_NOT_ENABLE, dictData.getLabel()); + } + }); + } + + @Override + public DictDataDO getDictData(String dictType, String value) { + return dictDataMapper.selectByDictTypeAndValue(dictType, value); + } + + @Override + public DictDataDO parseDictData(String dictType, String label) { + return dictDataMapper.selectByDictTypeAndLabel(dictType, label); + } + + @Override + public List getDictDataListByDictType(String dictType) { + List list = dictDataMapper.selectList(DictDataDO::getDictType, dictType); + list.sort(Comparator.comparing(DictDataDO::getSort)); + return list; + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictTypeService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictTypeService.java new file mode 100644 index 0000000..a35a046 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictTypeService.java @@ -0,0 +1,70 @@ +package com.win.module.system.service.dict; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.dict.vo.type.DictTypePageReqVO; +import com.win.module.system.controller.admin.dict.vo.type.DictTypeSaveReqVO; +import com.win.module.system.dal.dataobject.dict.DictTypeDO; + +import java.util.List; + +/** + * 字典类型 Service 接口 + * + * @author 芋道源码 + */ +public interface DictTypeService { + + /** + * 创建字典类型 + * + * @param createReqVO 字典类型信息 + * @return 字典类型编号 + */ + Long createDictType(DictTypeSaveReqVO createReqVO); + + /** + * 更新字典类型 + * + * @param updateReqVO 字典类型信息 + */ + void updateDictType(DictTypeSaveReqVO updateReqVO); + + /** + * 删除字典类型 + * + * @param id 字典类型编号 + */ + void deleteDictType(Long id); + + /** + * 获得字典类型分页列表 + * + * @param pageReqVO 分页请求 + * @return 字典类型分页列表 + */ + PageResult getDictTypePage(DictTypePageReqVO pageReqVO); + + /** + * 获得字典类型详情 + * + * @param id 字典类型编号 + * @return 字典类型 + */ + DictTypeDO getDictType(Long id); + + /** + * 获得字典类型详情 + * + * @param type 字典类型 + * @return 字典类型详情 + */ + DictTypeDO getDictType(String type); + + /** + * 获得全部字典类型列表 + * + * @return 字典类型列表 + */ + List getDictTypeList(); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictTypeServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictTypeServiceImpl.java new file mode 100644 index 0000000..047c266 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/dict/DictTypeServiceImpl.java @@ -0,0 +1,140 @@ +package com.win.module.system.service.dict; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.date.LocalDateTimeUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.dict.vo.type.DictTypePageReqVO; +import com.win.module.system.controller.admin.dict.vo.type.DictTypeSaveReqVO; +import com.win.module.system.dal.dataobject.dict.DictTypeDO; +import com.win.module.system.dal.mysql.dict.DictTypeMapper; +import com.google.common.annotations.VisibleForTesting; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.system.enums.ErrorCodeConstants.*; + +/** + * 字典类型 Service 实现类 + * + * @author 芋道源码 + */ +@Service +public class DictTypeServiceImpl implements DictTypeService { + + @Resource + private DictDataService dictDataService; + + @Resource + private DictTypeMapper dictTypeMapper; + + @Override + public PageResult getDictTypePage(DictTypePageReqVO pageReqVO) { + return dictTypeMapper.selectPage(pageReqVO); + } + + @Override + public DictTypeDO getDictType(Long id) { + return dictTypeMapper.selectById(id); + } + + @Override + public DictTypeDO getDictType(String type) { + return dictTypeMapper.selectByType(type); + } + + @Override + public Long createDictType(DictTypeSaveReqVO createReqVO) { + // 校验字典类型的名字的唯一性 + validateDictTypeNameUnique(null, createReqVO.getName()); + // 校验字典类型的类型的唯一性 + validateDictTypeUnique(null, createReqVO.getType()); + + // 插入字典类型 + DictTypeDO dictType = BeanUtils.toBean(createReqVO, DictTypeDO.class); + dictType.setDeletedTime(LocalDateTimeUtils.EMPTY); // 唯一索引,避免 null 值 + dictTypeMapper.insert(dictType); + return dictType.getId(); + } + + @Override + public void updateDictType(DictTypeSaveReqVO updateReqVO) { + // 校验自己存在 + validateDictTypeExists(updateReqVO.getId()); + // 校验字典类型的名字的唯一性 + validateDictTypeNameUnique(updateReqVO.getId(), updateReqVO.getName()); + // 校验字典类型的类型的唯一性 + validateDictTypeUnique(updateReqVO.getId(), updateReqVO.getType()); + + // 更新字典类型 + DictTypeDO updateObj = BeanUtils.toBean(updateReqVO, DictTypeDO.class); + dictTypeMapper.updateById(updateObj); + } + + @Override + public void deleteDictType(Long id) { + // 校验是否存在 + DictTypeDO dictType = validateDictTypeExists(id); + // 校验是否有字典数据 + if (dictDataService.getDictDataCountByDictType(dictType.getType()) > 0) { + throw exception(DICT_TYPE_HAS_CHILDREN); + } + // 删除字典类型 + dictTypeMapper.updateToDelete(id, LocalDateTime.now()); + } + + @Override + public List getDictTypeList() { + return dictTypeMapper.selectList(); + } + + @VisibleForTesting + void validateDictTypeNameUnique(Long id, String name) { + DictTypeDO dictType = dictTypeMapper.selectByName(name); + if (dictType == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的字典类型 + if (id == null) { + throw exception(DICT_TYPE_NAME_DUPLICATE); + } + if (!dictType.getId().equals(id)) { + throw exception(DICT_TYPE_NAME_DUPLICATE); + } + } + + @VisibleForTesting + void validateDictTypeUnique(Long id, String type) { + if (StrUtil.isEmpty(type)) { + return; + } + DictTypeDO dictType = dictTypeMapper.selectByType(type); + if (dictType == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的字典类型 + if (id == null) { + throw exception(DICT_TYPE_TYPE_DUPLICATE); + } + if (!dictType.getId().equals(id)) { + throw exception(DICT_TYPE_TYPE_DUPLICATE); + } + } + + @VisibleForTesting + DictTypeDO validateDictTypeExists(Long id) { + if (id == null) { + return null; + } + DictTypeDO dictType = dictTypeMapper.selectById(id); + if (dictType == null) { + throw exception(DICT_TYPE_NOT_EXISTS); + } + return dictType; + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/LoginLogService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/LoginLogService.java new file mode 100644 index 0000000..78e66c7 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/LoginLogService.java @@ -0,0 +1,30 @@ +package com.win.module.system.service.logger; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.api.logger.dto.LoginLogCreateReqDTO; +import com.win.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; +import com.win.module.system.dal.dataobject.logger.LoginLogDO; + +import jakarta.validation.Valid; + +/** + * 登录日志 Service 接口 + */ +public interface LoginLogService { + + /** + * 获得登录日志分页 + * + * @param pageReqVO 分页条件 + * @return 登录日志分页 + */ + PageResult getLoginLogPage(LoginLogPageReqVO pageReqVO); + + /** + * 创建登录日志 + * + * @param reqDTO 日志信息 + */ + void createLoginLog(@Valid LoginLogCreateReqDTO reqDTO); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/LoginLogServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/LoginLogServiceImpl.java new file mode 100644 index 0000000..f9bec2a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/LoginLogServiceImpl.java @@ -0,0 +1,35 @@ +package com.win.module.system.service.logger; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.api.logger.dto.LoginLogCreateReqDTO; +import com.win.module.system.controller.admin.logger.vo.loginlog.LoginLogPageReqVO; +import com.win.module.system.dal.dataobject.logger.LoginLogDO; +import com.win.module.system.dal.mysql.logger.LoginLogMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; + +/** + * 登录日志 Service 实现 + */ +@Service +@Validated +public class LoginLogServiceImpl implements LoginLogService { + + @Resource + private LoginLogMapper loginLogMapper; + + @Override + public PageResult getLoginLogPage(LoginLogPageReqVO pageReqVO) { + return loginLogMapper.selectPage(pageReqVO); + } + + @Override + public void createLoginLog(LoginLogCreateReqDTO reqDTO) { + LoginLogDO loginLog = BeanUtils.toBean(reqDTO, LoginLogDO.class); + loginLogMapper.insert(loginLog); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/OperateLogService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/OperateLogService.java new file mode 100644 index 0000000..5006a47 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/OperateLogService.java @@ -0,0 +1,39 @@ +package com.win.module.system.service.logger; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.api.logger.dto.OperateLogCreateReqDTO; +import com.win.module.system.api.logger.dto.OperateLogPageReqDTO; +import com.win.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; +import com.win.module.system.dal.dataobject.logger.OperateLogDO; + +/** + * 操作日志 Service 接口 + * + * @author 芋道源码 + */ +public interface OperateLogService { + + /** + * 记录操作日志 + * + * @param createReqDTO 创建请求 + */ + void createOperateLog(OperateLogCreateReqDTO createReqDTO); + + /** + * 获得操作日志分页列表 + * + * @param pageReqVO 分页条件 + * @return 操作日志分页列表 + */ + PageResult getOperateLogPage(OperateLogPageReqVO pageReqVO); + + /** + * 获得操作日志分页列表 + * + * @param pageReqVO 分页条件 + * @return 操作日志分页列表 + */ + PageResult getOperateLogPage(OperateLogPageReqDTO pageReqVO); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/OperateLogServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/OperateLogServiceImpl.java new file mode 100644 index 0000000..0a4f68d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/logger/OperateLogServiceImpl.java @@ -0,0 +1,44 @@ +package com.win.module.system.service.logger; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.api.logger.dto.OperateLogCreateReqDTO; +import com.win.module.system.api.logger.dto.OperateLogPageReqDTO; +import com.win.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; +import com.win.module.system.dal.dataobject.logger.OperateLogDO; +import com.win.module.system.dal.mysql.logger.OperateLogMapper; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +/** + * 操作日志 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +@Slf4j +public class OperateLogServiceImpl implements OperateLogService { + + @Resource + private OperateLogMapper operateLogMapper; + + @Override + public void createOperateLog(OperateLogCreateReqDTO createReqDTO) { + OperateLogDO log = BeanUtils.toBean(createReqDTO, OperateLogDO.class); + operateLogMapper.insert(log); + } + + @Override + public PageResult getOperateLogPage(OperateLogPageReqVO pageReqVO) { + return operateLogMapper.selectPage(pageReqVO); + } + + @Override + public PageResult getOperateLogPage(OperateLogPageReqDTO pageReqDTO) { + return operateLogMapper.selectPage(pageReqDTO); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailAccountService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailAccountService.java new file mode 100644 index 0000000..32e9205 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailAccountService.java @@ -0,0 +1,72 @@ +package com.win.module.system.service.mail; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; +import com.win.module.system.controller.admin.mail.vo.account.MailAccountSaveReqVO; +import com.win.module.system.dal.dataobject.mail.MailAccountDO; + +import jakarta.validation.Valid; +import java.util.List; + +/** + * 邮箱账号 Service 接口 + * + * @author wangjingyi + * @since 2022-03-21 + */ +public interface MailAccountService { + + /** + * 创建邮箱账号 + * + * @param createReqVO 邮箱账号信息 + * @return 编号 + */ + Long createMailAccount(@Valid MailAccountSaveReqVO createReqVO); + + /** + * 修改邮箱账号 + * + * @param updateReqVO 邮箱账号信息 + */ + void updateMailAccount(@Valid MailAccountSaveReqVO updateReqVO); + + /** + * 删除邮箱账号 + * + * @param id 编号 + */ + void deleteMailAccount(Long id); + + /** + * 获取邮箱账号信息 + * + * @param id 编号 + * @return 邮箱账号信息 + */ + MailAccountDO getMailAccount(Long id); + + /** + * 从缓存中获取邮箱账号 + * + * @param id 编号 + * @return 邮箱账号 + */ + MailAccountDO getMailAccountFromCache(Long id); + + /** + * 获取邮箱账号分页信息 + * + * @param pageReqVO 邮箱账号分页参数 + * @return 邮箱账号分页信息 + */ + PageResult getMailAccountPage(MailAccountPageReqVO pageReqVO); + + /** + * 获取邮箱数组信息 + * + * @return 邮箱账号信息数组 + */ + List getMailAccountList(); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailAccountServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailAccountServiceImpl.java new file mode 100644 index 0000000..f4f6e29 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailAccountServiceImpl.java @@ -0,0 +1,99 @@ +package com.win.module.system.service.mail; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; +import com.win.module.system.controller.admin.mail.vo.account.MailAccountSaveReqVO; +import com.win.module.system.dal.dataobject.mail.MailAccountDO; +import com.win.module.system.dal.mysql.mail.MailAccountMapper; +import com.win.module.system.dal.redis.RedisKeyConstants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.util.List; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.system.enums.ErrorCodeConstants.MAIL_ACCOUNT_NOT_EXISTS; +import static com.win.module.system.enums.ErrorCodeConstants.MAIL_ACCOUNT_RELATE_TEMPLATE_EXISTS; + +/** + * 邮箱账号 Service 实现类 + * + * @author wangjingyi + * @since 2022-03-21 + */ +@Service +@Validated +@Slf4j +public class MailAccountServiceImpl implements MailAccountService { + + @Resource + private MailAccountMapper mailAccountMapper; + + @Resource + private MailTemplateService mailTemplateService; + + @Override + public Long createMailAccount(MailAccountSaveReqVO createReqVO) { + MailAccountDO account = BeanUtils.toBean(createReqVO, MailAccountDO.class); + mailAccountMapper.insert(account); + return account.getId(); + } + + @Override + @CacheEvict(value = RedisKeyConstants.MAIL_ACCOUNT, key = "#updateReqVO.id") + public void updateMailAccount(MailAccountSaveReqVO updateReqVO) { + // 校验是否存在 + validateMailAccountExists(updateReqVO.getId()); + + // 更新 + MailAccountDO updateObj = BeanUtils.toBean(updateReqVO, MailAccountDO.class); + mailAccountMapper.updateById(updateObj); + } + + @Override + @CacheEvict(value = RedisKeyConstants.MAIL_ACCOUNT, key = "#id") + public void deleteMailAccount(Long id) { + // 校验是否存在账号 + validateMailAccountExists(id); + // 校验是否存在关联模版 + if (mailTemplateService.getMailTemplateCountByAccountId(id) > 0) { + throw exception(MAIL_ACCOUNT_RELATE_TEMPLATE_EXISTS); + } + + // 删除 + mailAccountMapper.deleteById(id); + } + + private void validateMailAccountExists(Long id) { + if (mailAccountMapper.selectById(id) == null) { + throw exception(MAIL_ACCOUNT_NOT_EXISTS); + } + } + + @Override + public MailAccountDO getMailAccount(Long id) { + return mailAccountMapper.selectById(id); + } + + @Override + @Cacheable(value = RedisKeyConstants.MAIL_ACCOUNT, key = "#id", unless = "#result == null") + public MailAccountDO getMailAccountFromCache(Long id) { + return getMailAccount(id); + } + + @Override + public PageResult getMailAccountPage(MailAccountPageReqVO pageReqVO) { + return mailAccountMapper.selectPage(pageReqVO); + } + + @Override + public List getMailAccountList() { + return mailAccountMapper.selectList(); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailLogService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailLogService.java new file mode 100644 index 0000000..52f3bb1 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailLogService.java @@ -0,0 +1,61 @@ +package com.win.module.system.service.mail; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.mail.vo.log.MailLogPageReqVO; +import com.win.module.system.dal.dataobject.mail.MailAccountDO; +import com.win.module.system.dal.dataobject.mail.MailLogDO; +import com.win.module.system.dal.dataobject.mail.MailTemplateDO; + +import java.util.Map; + +/** + * 邮件日志 Service 接口 + * + * @author wangjingyi + * @since 2022-03-21 + */ +public interface MailLogService { + + /** + * 邮件日志分页 + * + * @param pageVO 分页参数 + * @return 分页结果 + */ + PageResult getMailLogPage(MailLogPageReqVO pageVO); + + /** + * 获得指定编号的邮件日志 + * + * @param id 日志编号 + * @return 邮件日志 + */ + MailLogDO getMailLog(Long id); + + /** + * 创建邮件日志 + * + * @param userId 用户编码 + * @param userType 用户类型 + * @param toMail 收件人邮件 + * @param account 邮件账号信息 + * @param template 模版信息 + * @param templateContent 模版内容 + * @param templateParams 模版参数 + * @param isSend 是否发送成功 + * @return 日志编号 + */ + Long createMailLog(Long userId, Integer userType, String toMail, + MailAccountDO account, MailTemplateDO template , + String templateContent, Map templateParams, Boolean isSend); + + /** + * 更新邮件发送结果 + * + * @param logId 日志编号 + * @param messageId 发送后的消息编号 + * @param exception 发送异常 + */ + void updateMailSendResult(Long logId, String messageId, Exception exception); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailLogServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailLogServiceImpl.java new file mode 100644 index 0000000..1571297 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailLogServiceImpl.java @@ -0,0 +1,78 @@ +package com.win.module.system.service.mail; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.mail.vo.log.MailLogPageReqVO; +import com.win.module.system.dal.dataobject.mail.MailAccountDO; +import com.win.module.system.dal.dataobject.mail.MailLogDO; +import com.win.module.system.dal.dataobject.mail.MailTemplateDO; +import com.win.module.system.dal.mysql.mail.MailLogMapper; +import com.win.module.system.enums.mail.MailSendStatusEnum; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.time.LocalDateTime; +import java.util.Map; +import java.util.Objects; + +import static cn.hutool.core.exceptions.ExceptionUtil.getRootCauseMessage; + +/** + * 邮件日志 Service 实现类 + * + * @author wangjingyi + * @since 2022-03-21 + */ +@Service +@Validated +public class MailLogServiceImpl implements MailLogService { + + @Resource + private MailLogMapper mailLogMapper; + + @Override + public PageResult getMailLogPage(MailLogPageReqVO pageVO) { + return mailLogMapper.selectPage(pageVO); + } + + @Override + public MailLogDO getMailLog(Long id) { + return mailLogMapper.selectById(id); + } + + @Override + public Long createMailLog(Long userId, Integer userType, String toMail, + MailAccountDO account, MailTemplateDO template, + String templateContent, Map templateParams, Boolean isSend) { + MailLogDO.MailLogDOBuilder logDOBuilder = MailLogDO.builder(); + // 根据是否要发送,设置状态 + logDOBuilder.sendStatus(Objects.equals(isSend, true) ? MailSendStatusEnum.INIT.getStatus() + : MailSendStatusEnum.IGNORE.getStatus()) + // 用户信息 + .userId(userId).userType(userType).toMail(toMail) + .accountId(account.getId()).fromMail(account.getMail()) + // 模板相关字段 + .templateId(template.getId()).templateCode(template.getCode()).templateNickname(template.getNickname()) + .templateTitle(template.getTitle()).templateContent(templateContent).templateParams(templateParams); + + // 插入数据库 + MailLogDO logDO = logDOBuilder.build(); + mailLogMapper.insert(logDO); + return logDO.getId(); + } + + @Override + public void updateMailSendResult(Long logId, String messageId, Exception exception) { + // 1. 成功 + if (exception == null) { + mailLogMapper.updateById(new MailLogDO().setId(logId).setSendTime(LocalDateTime.now()) + .setSendStatus(MailSendStatusEnum.SUCCESS.getStatus()).setSendMessageId(messageId)); + return; + } + // 2. 失败 + mailLogMapper.updateById(new MailLogDO().setId(logId).setSendTime(LocalDateTime.now()) + .setSendStatus(MailSendStatusEnum.FAILURE.getStatus()).setSendException(getRootCauseMessage(exception))); + + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailSendService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailSendService.java new file mode 100644 index 0000000..f71eead --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailSendService.java @@ -0,0 +1,60 @@ +package com.win.module.system.service.mail; + +import com.win.module.system.mq.message.mail.MailSendMessage; + +import java.util.Map; + +/** + * 邮件发送 Service 接口 + * + * @author wangjingyi + * @since 2022-03-21 + */ +public interface MailSendService { + + /** + * 发送单条邮件给管理后台的用户 + * + * @param mail 邮箱 + * @param userId 用户编码 + * @param templateCode 邮件模版编码 + * @param templateParams 邮件模版参数 + * @return 发送日志编号 + */ + Long sendSingleMailToAdmin(String mail, Long userId, + String templateCode, Map templateParams); + + /** + * 发送单条邮件给用户 APP 的用户 + * + * @param mail 邮箱 + * @param userId 用户编码 + * @param templateCode 邮件模版编码 + * @param templateParams 邮件模版参数 + * @return 发送日志编号 + */ + Long sendSingleMailToMember(String mail, Long userId, + String templateCode, Map templateParams); + + /** + * 发送单条邮件给用户 + * + * @param mail 邮箱 + * @param userId 用户编码 + * @param userType 用户类型 + * @param templateCode 邮件模版编码 + * @param templateParams 邮件模版参数 + * @return 发送日志编号 + */ + Long sendSingleMail(String mail, Long userId, Integer userType, + String templateCode, Map templateParams); + + /** + * 执行真正的邮件发送 + * 注意,该方法仅仅提供给 MQ Consumer 使用 + * + * @param message 邮件 + */ + void doSendMail(MailSendMessage message); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailSendServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailSendServiceImpl.java new file mode 100644 index 0000000..adefca0 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailSendServiceImpl.java @@ -0,0 +1,173 @@ +package com.win.module.system.service.mail; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.module.system.dal.dataobject.mail.MailAccountDO; +import com.win.module.system.dal.dataobject.mail.MailTemplateDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.module.system.mq.message.mail.MailSendMessage; +import com.win.module.system.mq.producer.mail.MailProducer; +import com.win.module.system.service.member.MemberService; +import com.win.module.system.service.user.AdminUserService; +import com.google.common.annotations.VisibleForTesting; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.dromara.hutool.extra.mail.*; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.util.Map; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.system.enums.ErrorCodeConstants.*; + +/** + * 邮箱发送 Service 实现类 + * + * @author wangjingyi + * @since 2022-03-21 + */ +@Service +@Validated +@Slf4j +public class MailSendServiceImpl implements MailSendService { + + @Resource + private AdminUserService adminUserService; + @Resource + private MemberService memberService; + + @Resource + private MailAccountService mailAccountService; + @Resource + private MailTemplateService mailTemplateService; + + @Resource + private MailLogService mailLogService; + @Resource + private MailProducer mailProducer; + + @Override + public Long sendSingleMailToAdmin(String mail, Long userId, + String templateCode, Map templateParams) { + // 如果 mail 为空,则加载用户编号对应的邮箱 + if (StrUtil.isEmpty(mail)) { + AdminUserDO user = adminUserService.getUser(userId); + if (user != null) { + mail = user.getEmail(); + } + } + // 执行发送 + return sendSingleMail(mail, userId, UserTypeEnum.ADMIN.getValue(), templateCode, templateParams); + } + + @Override + public Long sendSingleMailToMember(String mail, Long userId, + String templateCode, Map templateParams) { + // 如果 mail 为空,则加载用户编号对应的邮箱 + if (StrUtil.isEmpty(mail)) { + mail = memberService.getMemberUserEmail(userId); + } + // 执行发送 + return sendSingleMail(mail, userId, UserTypeEnum.MEMBER.getValue(), templateCode, templateParams); + } + + @Override + public Long sendSingleMail(String mail, Long userId, Integer userType, + String templateCode, Map templateParams) { + // 校验邮箱模版是否合法 + MailTemplateDO template = validateMailTemplate(templateCode); + // 校验邮箱账号是否合法 + MailAccountDO account = validateMailAccount(template.getAccountId()); + + // 校验邮箱是否存在 + mail = validateMail(mail); + validateTemplateParams(template, templateParams); + + // 创建发送日志。如果模板被禁用,则不发送短信,只记录日志 + Boolean isSend = CommonStatusEnum.ENABLE.getStatus().equals(template.getStatus()); + String title = mailTemplateService.formatMailTemplateContent(template.getTitle(), templateParams); + String content = mailTemplateService.formatMailTemplateContent(template.getContent(), templateParams); + Long sendLogId = mailLogService.createMailLog(userId, userType, mail, + account, template, content, templateParams, isSend); + // 发送 MQ 消息,异步执行发送短信 + if (isSend) { + mailProducer.sendMailSendMessage(sendLogId, mail, account.getId(), + template.getNickname(), title, content); + } + return sendLogId; + } + + @Override + public void doSendMail(MailSendMessage message) { + // 1. 创建发送账号 + MailAccountDO account = validateMailAccount(message.getAccountId()); + MailAccount mailAccount = buildMailAccount(account, message.getNickname()); + // 2. 发送邮件 + try { + String messageId = MailUtil.send(mailAccount, message.getMail(), + message.getTitle(), message.getContent(), true); + // 3. 更新结果(成功) + mailLogService.updateMailSendResult(message.getLogId(), messageId, null); + } catch (Exception e) { + // 3. 更新结果(异常) + mailLogService.updateMailSendResult(message.getLogId(), null, e); + } + } + + private MailAccount buildMailAccount(MailAccountDO account, String nickname) { + String from = StrUtil.isNotEmpty(nickname) ? nickname + " <" + account.getMail() + ">" : account.getMail(); + return new MailAccount().setFrom(from).setAuth(true) + .setUser(account.getUsername()).setPass(account.getPassword().toCharArray()) + .setHost(account.getHost()).setPort(account.getPort()) + .setSslEnable(account.getSslEnable()).setStarttlsEnable(account.getStarttlsEnable()); + } + + @VisibleForTesting + MailTemplateDO validateMailTemplate(String templateCode) { + // 获得邮件模板。考虑到效率,从缓存中获取 + MailTemplateDO template = mailTemplateService.getMailTemplateByCodeFromCache(templateCode); + // 邮件模板不存在 + if (template == null) { + throw exception(MAIL_TEMPLATE_NOT_EXISTS); + } + return template; + } + + @VisibleForTesting + MailAccountDO validateMailAccount(Long accountId) { + // 获得邮箱账号。考虑到效率,从缓存中获取 + MailAccountDO account = mailAccountService.getMailAccountFromCache(accountId); + // 邮箱账号不存在 + if (account == null) { + throw exception(MAIL_ACCOUNT_NOT_EXISTS); + } + return account; + } + + @VisibleForTesting + String validateMail(String mail) { + if (StrUtil.isEmpty(mail)) { + throw exception(MAIL_SEND_MAIL_NOT_EXISTS); + } + return mail; + } + + /** + * 校验邮件参数是否确实 + * + * @param template 邮箱模板 + * @param templateParams 参数列表 + */ + @VisibleForTesting + void validateTemplateParams(MailTemplateDO template, Map templateParams) { + template.getParams().forEach(key -> { + Object value = templateParams.get(key); + if (value == null) { + throw exception(MAIL_SEND_TEMPLATE_PARAM_MISS, key); + } + }); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailTemplateService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailTemplateService.java new file mode 100644 index 0000000..29f32c1 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailTemplateService.java @@ -0,0 +1,90 @@ +package com.win.module.system.service.mail; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO; +import com.win.module.system.controller.admin.mail.vo.template.MailTemplateSaveReqVO; +import com.win.module.system.dal.dataobject.mail.MailTemplateDO; + +import jakarta.validation.Valid; +import java.util.List; +import java.util.Map; + +/** + * 邮件模版 Service 接口 + * + * @author wangjingyi + * @since 2022-03-21 + */ +public interface MailTemplateService { + + /** + * 邮件模版创建 + * + * @param createReqVO 邮件信息 + * @return 编号 + */ + Long createMailTemplate(@Valid MailTemplateSaveReqVO createReqVO); + + /** + * 邮件模版修改 + * + * @param updateReqVO 邮件信息 + */ + void updateMailTemplate(@Valid MailTemplateSaveReqVO updateReqVO); + + /** + * 邮件模版删除 + * + * @param id 编号 + */ + void deleteMailTemplate(Long id); + + /** + * 获取邮件模版 + * + * @param id 编号 + * @return 邮件模版 + */ + MailTemplateDO getMailTemplate(Long id); + + /** + * 获取邮件模版分页 + * + * @param pageReqVO 模版信息 + * @return 邮件模版分页信息 + */ + PageResult getMailTemplatePage(MailTemplatePageReqVO pageReqVO); + + /** + * 获取邮件模板数组 + * + * @return 模版数组 + */ + List getMailTemplateList(); + + /** + * 从缓存中获取邮件模版 + * + * @param code 模板编码 + * @return 邮件模板 + */ + MailTemplateDO getMailTemplateByCodeFromCache(String code); + + /** + * 邮件模版内容合成 + * + * @param content 邮件模版 + * @param params 合成参数 + * @return 格式化后的内容 + */ + String formatMailTemplateContent(String content, Map params); + + /** + * 获得指定邮件账号下的邮件模板数量 + * + * @param accountId 账号编号 + * @return 数量 + */ + long getMailTemplateCountByAccountId(Long accountId); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailTemplateServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailTemplateServiceImpl.java new file mode 100644 index 0000000..da07873 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/mail/MailTemplateServiceImpl.java @@ -0,0 +1,138 @@ +package com.win.module.system.service.mail; + +import cn.hutool.core.util.ObjUtil; +import cn.hutool.core.util.ReUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO; +import com.win.module.system.controller.admin.mail.vo.template.MailTemplateSaveReqVO; +import com.win.module.system.dal.dataobject.mail.MailTemplateDO; +import com.win.module.system.dal.mysql.mail.MailTemplateMapper; +import com.win.module.system.dal.redis.RedisKeyConstants; +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.system.enums.ErrorCodeConstants.MAIL_TEMPLATE_CODE_EXISTS; +import static com.win.module.system.enums.ErrorCodeConstants.MAIL_TEMPLATE_NOT_EXISTS; + +/** + * 邮箱模版 Service 实现类 + * + * @author wangjingyi + * @since 2022-03-21 + */ +@Service +@Validated +@Slf4j +public class MailTemplateServiceImpl implements MailTemplateService { + + /** + * 正则表达式,匹配 {} 中的变量 + */ + private static final Pattern PATTERN_PARAMS = Pattern.compile("\\{(.*?)}"); + + @Resource + private MailTemplateMapper mailTemplateMapper; + + @Override + public Long createMailTemplate(MailTemplateSaveReqVO createReqVO) { + // 校验 code 是否唯一 + validateCodeUnique(null, createReqVO.getCode()); + + // 插入 + MailTemplateDO template = BeanUtils.toBean(createReqVO, MailTemplateDO.class) + .setParams(parseTemplateContentParams(createReqVO.getContent())); + mailTemplateMapper.insert(template); + return template.getId(); + } + + @Override + @CacheEvict(cacheNames = RedisKeyConstants.MAIL_TEMPLATE, + allEntries = true) // allEntries 清空所有缓存,因为可能修改到 code 字段,不好清理 + public void updateMailTemplate(@Valid MailTemplateSaveReqVO updateReqVO) { + // 校验是否存在 + validateMailTemplateExists(updateReqVO.getId()); + // 校验 code 是否唯一 + validateCodeUnique(updateReqVO.getId(),updateReqVO.getCode()); + + // 更新 + MailTemplateDO updateObj = BeanUtils.toBean(updateReqVO, MailTemplateDO.class) + .setParams(parseTemplateContentParams(updateReqVO.getContent())); + mailTemplateMapper.updateById(updateObj); + } + + @VisibleForTesting + void validateCodeUnique(Long id, String code) { + MailTemplateDO template = mailTemplateMapper.selectByCode(code); + if (template == null) { + return; + } + // 存在 template 记录的情况下 + if (id == null // 新增时,说明重复 + || ObjUtil.notEqual(id, template.getId())) { // 更新时,如果 id 不一致,说明重复 + throw exception(MAIL_TEMPLATE_CODE_EXISTS); + } + } + + @Override + @CacheEvict(cacheNames = RedisKeyConstants.MAIL_TEMPLATE, + allEntries = true) // allEntries 清空所有缓存,因为 id 不是直接的缓存 code,不好清理 + public void deleteMailTemplate(Long id) { + // 校验是否存在 + validateMailTemplateExists(id); + + // 删除 + mailTemplateMapper.deleteById(id); + } + + private void validateMailTemplateExists(Long id) { + if (mailTemplateMapper.selectById(id) == null) { + throw exception(MAIL_TEMPLATE_NOT_EXISTS); + } + } + + @Override + public MailTemplateDO getMailTemplate(Long id) {return mailTemplateMapper.selectById(id);} + + @Override + @Cacheable(value = RedisKeyConstants.MAIL_TEMPLATE, key = "#code", unless = "#result == null") + public MailTemplateDO getMailTemplateByCodeFromCache(String code) { + return mailTemplateMapper.selectByCode(code); + } + + @Override + public PageResult getMailTemplatePage(MailTemplatePageReqVO pageReqVO) { + return mailTemplateMapper.selectPage(pageReqVO); + } + + @Override + public List getMailTemplateList() {return mailTemplateMapper.selectList();} + + @Override + public String formatMailTemplateContent(String content, Map params) { + return StrUtil.format(content, params); + } + + @VisibleForTesting + public List parseTemplateContentParams(String content) { + return ReUtil.findAllGroup1(PATTERN_PARAMS, content); + } + + @Override + public long getMailTemplateCountByAccountId(Long accountId) { + return mailTemplateMapper.selectCountByAccountId(accountId); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/member/MemberService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/member/MemberService.java new file mode 100644 index 0000000..ada6810 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/member/MemberService.java @@ -0,0 +1,26 @@ +package com.win.module.system.service.member; + +/** + * Member Service 接口 + * + * @author 芋道源码 + */ +public interface MemberService { + + /** + * 获得会员用户的手机号码 + * + * @param id 会员用户编号 + * @return 手机号码 + */ + String getMemberUserMobile(Long id); + + /** + * 获得会员用户的邮箱 + * + * @param id 会员用户编号 + * @return 邮箱 + */ + String getMemberUserEmail(Long id); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/member/MemberServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/member/MemberServiceImpl.java new file mode 100644 index 0000000..9ee84de --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/member/MemberServiceImpl.java @@ -0,0 +1,54 @@ +package com.win.module.system.service.member; + +import cn.hutool.core.util.ClassUtil; +import cn.hutool.core.util.ReflectUtil; +import cn.hutool.extra.spring.SpringUtil; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +/** + * Member Service 实现类 + * + * @author 芋道源码 + */ +@Service +public class MemberServiceImpl implements MemberService { + + @Value("${win.info.base-package}") + private String basePackage; + + private volatile Object memberUserApi; + + @Override + public String getMemberUserMobile(Long id) { + Object user = getMemberUser(id); + if (user == null) { + return null; + } + return ReflectUtil.invoke(user, "getMobile"); + } + + @Override + public String getMemberUserEmail(Long id) { + Object user = getMemberUser(id); + if (user == null) { + return null; + } + return ReflectUtil.invoke(user, "getEmail"); + } + + private Object getMemberUser(Long id) { + if (id == null) { + return null; + } + return ReflectUtil.invoke(getMemberUserApi(), "getUser", id); + } + + private Object getMemberUserApi() { + if (memberUserApi == null) { + memberUserApi = SpringUtil.getBean(ClassUtil.loadClass(String.format("%s.module.member.api.user.MemberUserApi", basePackage))); + } + return memberUserApi; + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/member/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/member/package-info.java new file mode 100644 index 0000000..20cbab3 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/member/package-info.java @@ -0,0 +1,4 @@ +/** + * win-module-member 模块的适配,解除 win-module-system 对它们的依赖 + */ +package com.win.module.system.service.member; diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notice/NoticeService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notice/NoticeService.java new file mode 100644 index 0000000..c5f686f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notice/NoticeService.java @@ -0,0 +1,51 @@ +package com.win.module.system.service.notice; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.notice.vo.NoticePageReqVO; +import com.win.module.system.controller.admin.notice.vo.NoticeSaveReqVO; +import com.win.module.system.dal.dataobject.notice.NoticeDO; + +/** + * 通知公告 Service 接口 + */ +public interface NoticeService { + + /** + * 创建通知公告 + * + * @param createReqVO 通知公告 + * @return 编号 + */ + Long createNotice(NoticeSaveReqVO createReqVO); + + /** + * 更新通知公告 + * + * @param reqVO 通知公告 + */ + void updateNotice(NoticeSaveReqVO reqVO); + + /** + * 删除通知公告 + * + * @param id 编号 + */ + void deleteNotice(Long id); + + /** + * 获得通知公告分页列表 + * + * @param reqVO 分页条件 + * @return 部门分页列表 + */ + PageResult getNoticePage(NoticePageReqVO reqVO); + + /** + * 获得通知公告 + * + * @param id 编号 + * @return 通知公告 + */ + NoticeDO getNotice(Long id); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notice/NoticeServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notice/NoticeServiceImpl.java new file mode 100644 index 0000000..df96fbf --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notice/NoticeServiceImpl.java @@ -0,0 +1,73 @@ +package com.win.module.system.service.notice; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.notice.vo.NoticePageReqVO; +import com.win.module.system.controller.admin.notice.vo.NoticeSaveReqVO; +import com.win.module.system.dal.dataobject.notice.NoticeDO; +import com.win.module.system.dal.mysql.notice.NoticeMapper; +import com.google.common.annotations.VisibleForTesting; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.system.enums.ErrorCodeConstants.NOTICE_NOT_FOUND; + +/** + * 通知公告 Service 实现类 + * + * @author 芋道源码 + */ +@Service +public class NoticeServiceImpl implements NoticeService { + + @Resource + private NoticeMapper noticeMapper; + + @Override + public Long createNotice(NoticeSaveReqVO createReqVO) { + NoticeDO notice = BeanUtils.toBean(createReqVO, NoticeDO.class); + noticeMapper.insert(notice); + return notice.getId(); + } + + @Override + public void updateNotice(NoticeSaveReqVO updateReqVO) { + // 校验是否存在 + validateNoticeExists(updateReqVO.getId()); + // 更新通知公告 + NoticeDO updateObj = BeanUtils.toBean(updateReqVO, NoticeDO.class); + noticeMapper.updateById(updateObj); + } + + @Override + public void deleteNotice(Long id) { + // 校验是否存在 + validateNoticeExists(id); + // 删除通知公告 + noticeMapper.deleteById(id); + } + + @Override + public PageResult getNoticePage(NoticePageReqVO reqVO) { + return noticeMapper.selectPage(reqVO); + } + + @Override + public NoticeDO getNotice(Long id) { + return noticeMapper.selectById(id); + } + + @VisibleForTesting + public void validateNoticeExists(Long id) { + if (id == null) { + return; + } + NoticeDO notice = noticeMapper.selectById(id); + if (notice == null) { + throw exception(NOTICE_NOT_FOUND); + } + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyMessageService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyMessageService.java new file mode 100644 index 0000000..dfabde9 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyMessageService.java @@ -0,0 +1,97 @@ +package com.win.module.system.service.notify; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.notify.vo.message.NotifyMessageMyPageReqVO; +import com.win.module.system.controller.admin.notify.vo.message.NotifyMessagePageReqVO; +import com.win.module.system.dal.dataobject.notify.NotifyMessageDO; +import com.win.module.system.dal.dataobject.notify.NotifyTemplateDO; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 站内信 Service 接口 + * + * @author xrcoder + */ +public interface NotifyMessageService { + + /** + * 创建站内信 + * + * @param userId 用户编号 + * @param userType 用户类型 + * @param template 模版信息 + * @param templateContent 模版内容 + * @param templateParams 模版参数 + * @return 站内信编号 + */ + Long createNotifyMessage(Long userId, Integer userType, + NotifyTemplateDO template, String templateContent, Map templateParams); + + /** + * 获得站内信分页 + * + * @param pageReqVO 分页查询 + * @return 站内信分页 + */ + PageResult getNotifyMessagePage(NotifyMessagePageReqVO pageReqVO); + + /** + * 获得【我的】站内信分页 + * + * @param pageReqVO 分页查询 + * @param userId 用户编号 + * @param userType 用户类型 + * @return 站内信分页 + */ + PageResult getMyMyNotifyMessagePage(NotifyMessageMyPageReqVO pageReqVO, Long userId, Integer userType); + + /** + * 获得站内信 + * + * @param id 编号 + * @return 站内信 + */ + NotifyMessageDO getNotifyMessage(Long id); + + /** + * 获得【我的】未读站内信列表 + * + * @param userId 用户编号 + * @param userType 用户类型 + * @param size 数量 + * @return 站内信列表 + */ + List getUnreadNotifyMessageList(Long userId, Integer userType, Integer size); + + /** + * 统计用户未读站内信条数 + * + * @param userId 用户编号 + * @param userType 用户类型 + * @return 返回未读站内信条数 + */ + Long getUnreadNotifyMessageCount(Long userId, Integer userType); + + /** + * 标记站内信为已读 + * + * @param ids 站内信编号集合 + * @param userId 用户编号 + * @param userType 用户类型 + * @return 更新到的条数 + */ + int updateNotifyMessageRead(Collection ids, Long userId, Integer userType); + + /** + * 标记所有站内信为已读 + * + * @param userId 用户编号 + * @param userType 用户类型 + * @return 更新到的条数 + */ + int updateAllNotifyMessageRead(Long userId, Integer userType); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyMessageServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyMessageServiceImpl.java new file mode 100644 index 0000000..2ed8ada --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyMessageServiceImpl.java @@ -0,0 +1,75 @@ +package com.win.module.system.service.notify; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.notify.vo.message.NotifyMessageMyPageReqVO; +import com.win.module.system.controller.admin.notify.vo.message.NotifyMessagePageReqVO; +import com.win.module.system.dal.dataobject.notify.NotifyMessageDO; +import com.win.module.system.dal.dataobject.notify.NotifyTemplateDO; +import com.win.module.system.dal.mysql.notify.NotifyMessageMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 站内信 Service 实现类 + * + * @author xrcoder + */ +@Service +@Validated +public class NotifyMessageServiceImpl implements NotifyMessageService { + + @Resource + private NotifyMessageMapper notifyMessageMapper; + + @Override + public Long createNotifyMessage(Long userId, Integer userType, + NotifyTemplateDO template, String templateContent, Map templateParams) { + NotifyMessageDO message = new NotifyMessageDO().setUserId(userId).setUserType(userType) + .setTemplateId(template.getId()).setTemplateCode(template.getCode()) + .setTemplateType(template.getType()).setTemplateNickname(template.getNickname()) + .setTemplateContent(templateContent).setTemplateParams(templateParams).setReadStatus(false); + notifyMessageMapper.insert(message); + return message.getId(); + } + + @Override + public PageResult getNotifyMessagePage(NotifyMessagePageReqVO pageReqVO) { + return notifyMessageMapper.selectPage(pageReqVO); + } + + @Override + public PageResult getMyMyNotifyMessagePage(NotifyMessageMyPageReqVO pageReqVO, Long userId, Integer userType) { + return notifyMessageMapper.selectPage(pageReqVO, userId, userType); + } + + @Override + public NotifyMessageDO getNotifyMessage(Long id) { + return notifyMessageMapper.selectById(id); + } + + @Override + public List getUnreadNotifyMessageList(Long userId, Integer userType, Integer size) { + return notifyMessageMapper.selectUnreadListByUserIdAndUserType(userId, userType, size); + } + + @Override + public Long getUnreadNotifyMessageCount(Long userId, Integer userType) { + return notifyMessageMapper.selectUnreadCountByUserIdAndUserType(userId, userType); + } + + @Override + public int updateNotifyMessageRead(Collection ids, Long userId, Integer userType) { + return notifyMessageMapper.updateListRead(ids, userId, userType); + } + + @Override + public int updateAllNotifyMessageRead(Long userId, Integer userType) { + return notifyMessageMapper.updateListRead(userId, userType); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifySendService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifySendService.java new file mode 100644 index 0000000..05e082a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifySendService.java @@ -0,0 +1,55 @@ +package com.win.module.system.service.notify; + +import java.util.List; +import java.util.Map; + +/** + * 站内信发送 Service 接口 + * + * @author xrcoder + */ +public interface NotifySendService { + + /** + * 发送单条站内信给管理后台的用户 + * + * 在 mobile 为空时,使用 userId 加载对应管理员的手机号 + * + * @param userId 用户编号 + * @param templateCode 短信模板编号 + * @param templateParams 短信模板参数 + * @return 发送日志编号 + */ + Long sendSingleNotifyToAdmin(Long userId, + String templateCode, Map templateParams); + /** + * 发送单条站内信给用户 APP 的用户 + * + * 在 mobile 为空时,使用 userId 加载对应会员的手机号 + * + * @param userId 用户编号 + * @param templateCode 站内信模板编号 + * @param templateParams 站内信模板参数 + * @return 发送日志编号 + */ + Long sendSingleNotifyToMember(Long userId, + String templateCode, Map templateParams); + + /** + * 发送单条站内信给用户 + * + * @param userId 用户编号 + * @param userType 用户类型 + * @param templateCode 站内信模板编号 + * @param templateParams 站内信模板参数 + * @return 发送日志编号 + */ + Long sendSingleNotify( Long userId, Integer userType, + String templateCode, Map templateParams); + + default void sendBatchNotify(List mobiles, List userIds, Integer userType, + String templateCode, Map templateParams) { + throw new UnsupportedOperationException("暂时不支持该操作,感兴趣可以实现该功能哟!"); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifySendServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifySendServiceImpl.java new file mode 100644 index 0000000..8a1cc63 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifySendServiceImpl.java @@ -0,0 +1,87 @@ +package com.win.module.system.service.notify; + +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.module.system.dal.dataobject.notify.NotifyTemplateDO; +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.util.Map; +import java.util.Objects; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.system.enums.ErrorCodeConstants.NOTICE_NOT_FOUND; +import static com.win.module.system.enums.ErrorCodeConstants.NOTIFY_SEND_TEMPLATE_PARAM_MISS; + +/** + * 站内信发送 Service 实现类 + * + * @author xrcoder + */ +@Service +@Validated +@Slf4j +public class NotifySendServiceImpl implements NotifySendService { + + @Resource + private NotifyTemplateService notifyTemplateService; + + @Resource + private NotifyMessageService notifyMessageService; + + @Override + public Long sendSingleNotifyToAdmin(Long userId, String templateCode, Map templateParams) { + return sendSingleNotify(userId, UserTypeEnum.ADMIN.getValue(), templateCode, templateParams); + } + + @Override + public Long sendSingleNotifyToMember(Long userId, String templateCode, Map templateParams) { + return sendSingleNotify(userId, UserTypeEnum.MEMBER.getValue(), templateCode, templateParams); + } + + @Override + public Long sendSingleNotify(Long userId, Integer userType, String templateCode, Map templateParams) { + // 校验模版 + NotifyTemplateDO template = validateNotifyTemplate(templateCode); + if (Objects.equals(template.getStatus(), CommonStatusEnum.DISABLE.getStatus())) { + log.info("[sendSingleNotify][模版({})已经关闭,无法给用户({}/{})发送]", templateCode, userId, userType); + return null; + } + // 校验参数 + validateTemplateParams(template, templateParams); + + // 发送站内信 + String content = notifyTemplateService.formatNotifyTemplateContent(template.getContent(), templateParams); + return notifyMessageService.createNotifyMessage(userId, userType, template, content, templateParams); + } + + @VisibleForTesting + public NotifyTemplateDO validateNotifyTemplate(String templateCode) { + // 获得站内信模板。考虑到效率,从缓存中获取 + NotifyTemplateDO template = notifyTemplateService.getNotifyTemplateByCodeFromCache(templateCode); + // 站内信模板不存在 + if (template == null) { + throw exception(NOTICE_NOT_FOUND); + } + return template; + } + + /** + * 校验站内信模版参数是否确实 + * + * @param template 邮箱模板 + * @param templateParams 参数列表 + */ + @VisibleForTesting + public void validateTemplateParams(NotifyTemplateDO template, Map templateParams) { + template.getParams().forEach(key -> { + Object value = templateParams.get(key); + if (value == null) { + throw exception(NOTIFY_SEND_TEMPLATE_PARAM_MISS, key); + } + }); + } +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyTemplateService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyTemplateService.java new file mode 100644 index 0000000..51d6cfe --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyTemplateService.java @@ -0,0 +1,73 @@ +package com.win.module.system.service.notify; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.notify.vo.template.NotifyTemplatePageReqVO; +import com.win.module.system.controller.admin.notify.vo.template.NotifyTemplateSaveReqVO; +import com.win.module.system.dal.dataobject.notify.NotifyTemplateDO; + +import jakarta.validation.Valid; +import java.util.Map; + +/** + * 站内信模版 Service 接口 + * + * @author xrcoder + */ +public interface NotifyTemplateService { + + /** + * 创建站内信模版 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createNotifyTemplate(@Valid NotifyTemplateSaveReqVO createReqVO); + + /** + * 更新站内信模版 + * + * @param updateReqVO 更新信息 + */ + void updateNotifyTemplate(@Valid NotifyTemplateSaveReqVO updateReqVO); + + /** + * 删除站内信模版 + * + * @param id 编号 + */ + void deleteNotifyTemplate(Long id); + + /** + * 获得站内信模版 + * + * @param id 编号 + * @return 站内信模版 + */ + NotifyTemplateDO getNotifyTemplate(Long id); + + /** + * 获得站内信模板,从缓存中 + * + * @param code 模板编码 + * @return 站内信模板 + */ + NotifyTemplateDO getNotifyTemplateByCodeFromCache(String code); + + /** + * 获得站内信模版分页 + * + * @param pageReqVO 分页查询 + * @return 站内信模版分页 + */ + PageResult getNotifyTemplatePage(NotifyTemplatePageReqVO pageReqVO); + + /** + * 格式化站内信内容 + * + * @param content 站内信模板的内容 + * @param params 站内信内容的参数 + * @return 格式化后的内容 + */ + String formatNotifyTemplateContent(String content, Map params); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyTemplateServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyTemplateServiceImpl.java new file mode 100644 index 0000000..f823f5d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/notify/NotifyTemplateServiceImpl.java @@ -0,0 +1,138 @@ +package com.win.module.system.service.notify; + +import cn.hutool.core.util.ReUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.notify.vo.template.NotifyTemplatePageReqVO; +import com.win.module.system.controller.admin.notify.vo.template.NotifyTemplateSaveReqVO; +import com.win.module.system.dal.dataobject.notify.NotifyTemplateDO; +import com.win.module.system.dal.mysql.notify.NotifyTemplateMapper; +import com.win.module.system.dal.redis.RedisKeyConstants; +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.system.enums.ErrorCodeConstants.NOTIFY_TEMPLATE_CODE_DUPLICATE; +import static com.win.module.system.enums.ErrorCodeConstants.NOTIFY_TEMPLATE_NOT_EXISTS; + +/** + * 站内信模版 Service 实现类 + * + * @author xrcoder + */ +@Service +@Validated +@Slf4j +public class NotifyTemplateServiceImpl implements NotifyTemplateService { + + /** + * 正则表达式,匹配 {} 中的变量 + */ + private static final Pattern PATTERN_PARAMS = Pattern.compile("\\{(.*?)}"); + + @Resource + private NotifyTemplateMapper notifyTemplateMapper; + + @Override + public Long createNotifyTemplate(NotifyTemplateSaveReqVO createReqVO) { + // 校验站内信编码是否重复 + validateNotifyTemplateCodeDuplicate(null, createReqVO.getCode()); + + // 插入 + NotifyTemplateDO notifyTemplate = BeanUtils.toBean(createReqVO, NotifyTemplateDO.class); + notifyTemplate.setParams(parseTemplateContentParams(notifyTemplate.getContent())); + notifyTemplateMapper.insert(notifyTemplate); + return notifyTemplate.getId(); + } + + @Override + @CacheEvict(cacheNames = RedisKeyConstants.NOTIFY_TEMPLATE, + allEntries = true) // allEntries 清空所有缓存,因为可能修改到 code 字段,不好清理 + public void updateNotifyTemplate(NotifyTemplateSaveReqVO updateReqVO) { + // 校验存在 + validateNotifyTemplateExists(updateReqVO.getId()); + // 校验站内信编码是否重复 + validateNotifyTemplateCodeDuplicate(updateReqVO.getId(), updateReqVO.getCode()); + + // 更新 + NotifyTemplateDO updateObj = BeanUtils.toBean(updateReqVO, NotifyTemplateDO.class); + updateObj.setParams(parseTemplateContentParams(updateObj.getContent())); + notifyTemplateMapper.updateById(updateObj); + } + + @VisibleForTesting + public List parseTemplateContentParams(String content) { + return ReUtil.findAllGroup1(PATTERN_PARAMS, content); + } + + @Override + @CacheEvict(cacheNames = RedisKeyConstants.NOTIFY_TEMPLATE, + allEntries = true) // allEntries 清空所有缓存,因为 id 不是直接的缓存 code,不好清理 + public void deleteNotifyTemplate(Long id) { + // 校验存在 + validateNotifyTemplateExists(id); + // 删除 + notifyTemplateMapper.deleteById(id); + } + + private void validateNotifyTemplateExists(Long id) { + if (notifyTemplateMapper.selectById(id) == null) { + throw exception(NOTIFY_TEMPLATE_NOT_EXISTS); + } + } + + @Override + public NotifyTemplateDO getNotifyTemplate(Long id) { + return notifyTemplateMapper.selectById(id); + } + + @Override + @Cacheable(cacheNames = RedisKeyConstants.NOTIFY_TEMPLATE, key = "#code", + unless = "#result == null") + public NotifyTemplateDO getNotifyTemplateByCodeFromCache(String code) { + return notifyTemplateMapper.selectByCode(code); + } + + @Override + public PageResult getNotifyTemplatePage(NotifyTemplatePageReqVO pageReqVO) { + return notifyTemplateMapper.selectPage(pageReqVO); + } + + @VisibleForTesting + void validateNotifyTemplateCodeDuplicate(Long id, String code) { + NotifyTemplateDO template = notifyTemplateMapper.selectByCode(code); + if (template == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的字典类型 + if (id == null) { + throw exception(NOTIFY_TEMPLATE_CODE_DUPLICATE, code); + } + if (!template.getId().equals(id)) { + throw exception(NOTIFY_TEMPLATE_CODE_DUPLICATE, code); + } + } + + /** + * 格式化站内信内容 + * + * @param content 站内信模板的内容 + * @param params 站内信内容的参数 + * @return 格式化后的内容 + */ + @Override + public String formatNotifyTemplateContent(String content, Map params) { + return StrUtil.format(content, params); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ApproveService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ApproveService.java new file mode 100644 index 0000000..cc97df6 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ApproveService.java @@ -0,0 +1,52 @@ +package com.win.module.system.service.oauth2; + +import com.win.module.system.dal.dataobject.oauth2.OAuth2ApproveDO; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * OAuth2 批准 Service 接口 + * + * 从功能上,和 Spring Security OAuth 的 ApprovalStoreUserApprovalHandler 的功能,记录用户针对指定客户端的授权,减少手动确定。 + * + * @author 芋道源码 + */ +public interface OAuth2ApproveService { + + /** + * 获得指定用户,针对指定客户端的指定授权,是否通过 + * + * 参考 ApprovalStoreUserApprovalHandler 的 checkForPreApproval 方法 + * + * @param userId 用户编号 + * @param userType 用户类型 + * @param clientId 客户端编号 + * @param requestedScopes 授权范围 + * @return 是否授权通过 + */ + boolean checkForPreApproval(Long userId, Integer userType, String clientId, Collection requestedScopes); + + /** + * 在用户发起批准时,基于 scopes 的选项,计算最终是否通过 + * + * @param userId 用户编号 + * @param userType 用户类型 + * @param clientId 客户端编号 + * @param requestedScopes 授权范围 + * @return 是否授权通过 + */ + boolean updateAfterApproval(Long userId, Integer userType, String clientId, Map requestedScopes); + + /** + * 获得用户的批准列表,排除已过期的 + * + * @param userId 用户编号 + * @param userType 用户类型 + * @param clientId 客户端编号 + * @return 是否授权通过 + */ + List getApproveList(Long userId, Integer userType, String clientId); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ApproveServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ApproveServiceImpl.java new file mode 100644 index 0000000..f5d81a9 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ApproveServiceImpl.java @@ -0,0 +1,103 @@ +package com.win.module.system.service.oauth2; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import com.win.framework.common.util.date.DateUtils; +import com.win.module.system.dal.dataobject.oauth2.OAuth2ApproveDO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2ClientDO; +import com.win.module.system.dal.mysql.oauth2.OAuth2ApproveMapper; +import com.google.common.annotations.VisibleForTesting; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.time.LocalDateTime; +import java.util.*; + +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; + +/** + * OAuth2 批准 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class OAuth2ApproveServiceImpl implements OAuth2ApproveService { + + /** + * 批准的过期时间,默认 30 天 + */ + private static final Integer TIMEOUT = 30 * 24 * 60 * 60; // 单位:秒 + + @Resource + private OAuth2ClientService oauth2ClientService; + + @Resource + private OAuth2ApproveMapper oauth2ApproveMapper; + + @Override + @Transactional + public boolean checkForPreApproval(Long userId, Integer userType, String clientId, Collection requestedScopes) { + // 第一步,基于 Client 的自动授权计算,如果 scopes 都在自动授权中,则返回 true 通过 + OAuth2ClientDO clientDO = oauth2ClientService.validOAuthClientFromCache(clientId); + Assert.notNull(clientDO, "客户端不能为空"); // 防御性编程 + if (CollUtil.containsAll(clientDO.getAutoApproveScopes(), requestedScopes)) { + // gh-877 - if all scopes are auto approved, approvals still need to be added to the approval store. + LocalDateTime expireTime = LocalDateTime.now().plusSeconds(TIMEOUT); + for (String scope : requestedScopes) { + saveApprove(userId, userType, clientId, scope, true, expireTime); + } + return true; + } + + // 第二步,算上用户已经批准的授权。如果 scopes 都包含,则返回 true + List approveDOs = getApproveList(userId, userType, clientId); + Set scopes = convertSet(approveDOs, OAuth2ApproveDO::getScope, + OAuth2ApproveDO::getApproved); // 只保留未过期的 + 同意的 + return CollUtil.containsAll(scopes, requestedScopes); + } + + @Override + @Transactional + public boolean updateAfterApproval(Long userId, Integer userType, String clientId, Map requestedScopes) { + // 如果 requestedScopes 为空,说明没有要求,则返回 true 通过 + if (CollUtil.isEmpty(requestedScopes)) { + return true; + } + + // 更新批准的信息 + boolean success = false; // 需要至少有一个同意 + LocalDateTime expireTime = LocalDateTime.now().plusSeconds(TIMEOUT); + for (Map.Entry entry : requestedScopes.entrySet()) { + if (entry.getValue()) { + success = true; + } + saveApprove(userId, userType, clientId, entry.getKey(), entry.getValue(), expireTime); + } + return success; + } + + @Override + public List getApproveList(Long userId, Integer userType, String clientId) { + List approveDOs = oauth2ApproveMapper.selectListByUserIdAndUserTypeAndClientId( + userId, userType, clientId); + approveDOs.removeIf(o -> DateUtils.isExpired(o.getExpiresTime())); + return approveDOs; + } + + @VisibleForTesting + void saveApprove(Long userId, Integer userType, String clientId, + String scope, Boolean approved, LocalDateTime expireTime) { + // 先更新 + OAuth2ApproveDO approveDO = new OAuth2ApproveDO().setUserId(userId).setUserType(userType) + .setClientId(clientId).setScope(scope).setApproved(approved).setExpiresTime(expireTime); + if (oauth2ApproveMapper.update(approveDO) == 1) { + return; + } + // 失败,则说明不存在,进行更新 + oauth2ApproveMapper.insert(approveDO); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ClientService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ClientService.java new file mode 100644 index 0000000..109831b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ClientService.java @@ -0,0 +1,90 @@ +package com.win.module.system.service.oauth2; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.oauth2.vo.client.OAuth2ClientPageReqVO; +import com.win.module.system.controller.admin.oauth2.vo.client.OAuth2ClientSaveReqVO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2ClientDO; + +import jakarta.validation.Valid; +import java.util.Collection; + +/** + * OAuth2.0 Client Service 接口 + * + * 从功能上,和 JdbcClientDetailsService 的功能,提供客户端的操作 + * + * @author 芋道源码 + */ +public interface OAuth2ClientService { + + /** + * 创建 OAuth2 客户端 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createOAuth2Client(@Valid OAuth2ClientSaveReqVO createReqVO); + + /** + * 更新 OAuth2 客户端 + * + * @param updateReqVO 更新信息 + */ + void updateOAuth2Client(@Valid OAuth2ClientSaveReqVO updateReqVO); + + /** + * 删除 OAuth2 客户端 + * + * @param id 编号 + */ + void deleteOAuth2Client(Long id); + + /** + * 获得 OAuth2 客户端 + * + * @param id 编号 + * @return OAuth2 客户端 + */ + OAuth2ClientDO getOAuth2Client(Long id); + + /** + * 获得 OAuth2 客户端,从缓存中 + * + * @param clientId 客户端编号 + * @return OAuth2 客户端 + */ + OAuth2ClientDO getOAuth2ClientFromCache(String clientId); + + /** + * 获得 OAuth2 客户端分页 + * + * @param pageReqVO 分页查询 + * @return OAuth2 客户端分页 + */ + PageResult getOAuth2ClientPage(OAuth2ClientPageReqVO pageReqVO); + + /** + * 从缓存中,校验客户端是否合法 + * + * @return 客户端 + */ + default OAuth2ClientDO validOAuthClientFromCache(String clientId) { + return validOAuthClientFromCache(clientId, null, null, null, null); + } + + /** + * 从缓存中,校验客户端是否合法 + * + * 非空时,进行校验 + * + * @param clientId 客户端编号 + * @param clientSecret 客户端密钥 + * @param authorizedGrantType 授权方式 + * @param scopes 授权范围 + * @param redirectUri 重定向地址 + * @return 客户端 + */ + OAuth2ClientDO validOAuthClientFromCache(String clientId, String clientSecret, String authorizedGrantType, + Collection scopes, String redirectUri); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ClientServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ClientServiceImpl.java new file mode 100644 index 0000000..3a3b1cb --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2ClientServiceImpl.java @@ -0,0 +1,153 @@ +package com.win.module.system.service.oauth2; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.spring.SpringUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.common.util.string.StrUtils; +import com.win.module.system.controller.admin.oauth2.vo.client.OAuth2ClientPageReqVO; +import com.win.module.system.controller.admin.oauth2.vo.client.OAuth2ClientSaveReqVO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2ClientDO; +import com.win.module.system.dal.mysql.oauth2.OAuth2ClientMapper; +import com.win.module.system.dal.redis.RedisKeyConstants; +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.util.Collection; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.system.enums.ErrorCodeConstants.*; + +/** + * OAuth2.0 Client Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +@Slf4j +public class OAuth2ClientServiceImpl implements OAuth2ClientService { + + @Resource + private OAuth2ClientMapper oauth2ClientMapper; + + @Override + public Long createOAuth2Client(OAuth2ClientSaveReqVO createReqVO) { + validateClientIdExists(null, createReqVO.getClientId()); + // 插入 + OAuth2ClientDO client = BeanUtils.toBean(createReqVO, OAuth2ClientDO.class); + oauth2ClientMapper.insert(client); + return client.getId(); + } + + @Override + @CacheEvict(cacheNames = RedisKeyConstants.OAUTH_CLIENT, + allEntries = true) // allEntries 清空所有缓存,因为可能修改到 clientId 字段,不好清理 + public void updateOAuth2Client(OAuth2ClientSaveReqVO updateReqVO) { + // 校验存在 + validateOAuth2ClientExists(updateReqVO.getId()); + // 校验 Client 未被占用 + validateClientIdExists(updateReqVO.getId(), updateReqVO.getClientId()); + + // 更新 + OAuth2ClientDO updateObj = BeanUtils.toBean(updateReqVO, OAuth2ClientDO.class); + oauth2ClientMapper.updateById(updateObj); + } + + @Override + @CacheEvict(cacheNames = RedisKeyConstants.OAUTH_CLIENT, + allEntries = true) // allEntries 清空所有缓存,因为 id 不是直接的缓存 key,不好清理 + public void deleteOAuth2Client(Long id) { + // 校验存在 + validateOAuth2ClientExists(id); + // 删除 + oauth2ClientMapper.deleteById(id); + } + + private void validateOAuth2ClientExists(Long id) { + if (oauth2ClientMapper.selectById(id) == null) { + throw exception(OAUTH2_CLIENT_NOT_EXISTS); + } + } + + @VisibleForTesting + void validateClientIdExists(Long id, String clientId) { + OAuth2ClientDO client = oauth2ClientMapper.selectByClientId(clientId); + if (client == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的客户端 + if (id == null) { + throw exception(OAUTH2_CLIENT_EXISTS); + } + if (!client.getId().equals(id)) { + throw exception(OAUTH2_CLIENT_EXISTS); + } + } + + @Override + public OAuth2ClientDO getOAuth2Client(Long id) { + return oauth2ClientMapper.selectById(id); + } + + @Override + @Cacheable(cacheNames = RedisKeyConstants.OAUTH_CLIENT, key = "#clientId", + unless = "#result == null") + public OAuth2ClientDO getOAuth2ClientFromCache(String clientId) { + return oauth2ClientMapper.selectByClientId(clientId); + } + + @Override + public PageResult getOAuth2ClientPage(OAuth2ClientPageReqVO pageReqVO) { + return oauth2ClientMapper.selectPage(pageReqVO); + } + + @Override + public OAuth2ClientDO validOAuthClientFromCache(String clientId, String clientSecret, String authorizedGrantType, + Collection scopes, String redirectUri) { + // 校验客户端存在、且开启 + OAuth2ClientDO client = getSelf().getOAuth2ClientFromCache(clientId); + if (client == null) { + throw exception(OAUTH2_CLIENT_NOT_EXISTS); + } + if (CommonStatusEnum.isDisable(client.getStatus())) { + throw exception(OAUTH2_CLIENT_DISABLE); + } + + // 校验客户端密钥 + if (StrUtil.isNotEmpty(clientSecret) && ObjectUtil.notEqual(client.getSecret(), clientSecret)) { + throw exception(OAUTH2_CLIENT_CLIENT_SECRET_ERROR); + } + // 校验授权方式 + if (StrUtil.isNotEmpty(authorizedGrantType) && !CollUtil.contains(client.getAuthorizedGrantTypes(), authorizedGrantType)) { + throw exception(OAUTH2_CLIENT_AUTHORIZED_GRANT_TYPE_NOT_EXISTS); + } + // 校验授权范围 + if (CollUtil.isNotEmpty(scopes) && !CollUtil.containsAll(client.getScopes(), scopes)) { + throw exception(OAUTH2_CLIENT_SCOPE_OVER); + } + // 校验回调地址 + if (StrUtil.isNotEmpty(redirectUri) && !StrUtils.startWithAny(redirectUri, client.getRedirectUris())) { + throw exception(OAUTH2_CLIENT_REDIRECT_URI_NOT_MATCH, redirectUri); + } + return client; + } + + /** + * 获得自身的代理对象,解决 AOP 生效问题 + * + * @return 自己 + */ + private OAuth2ClientServiceImpl getSelf() { + return SpringUtil.getBean(getClass()); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2CodeService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2CodeService.java new file mode 100644 index 0000000..ef0b173 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2CodeService.java @@ -0,0 +1,39 @@ +package com.win.module.system.service.oauth2; + +import com.win.module.system.dal.dataobject.oauth2.OAuth2CodeDO; + +import java.util.List; + +/** + * OAuth2.0 授权码 Service 接口 + * + * 从功能上,和 Spring Security OAuth 的 JdbcAuthorizationCodeServices 的功能,提供授权码的操作 + * + * @author 芋道源码 + */ +public interface OAuth2CodeService { + + /** + * 创建授权码 + * + * 参考 JdbcAuthorizationCodeServices 的 createAuthorizationCode 方法 + * + * @param userId 用户编号 + * @param userType 用户类型 + * @param clientId 客户端编号 + * @param scopes 授权范围 + * @param redirectUri 重定向 URI + * @param state 状态 + * @return 授权码的信息 + */ + OAuth2CodeDO createAuthorizationCode(Long userId, Integer userType, String clientId, + List scopes, String redirectUri, String state); + + /** + * 使用授权码 + * + * @param code 授权码 + */ + OAuth2CodeDO consumeAuthorizationCode(String code); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2CodeServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2CodeServiceImpl.java new file mode 100644 index 0000000..d5b3406 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2CodeServiceImpl.java @@ -0,0 +1,64 @@ +package com.win.module.system.service.oauth2; + +import cn.hutool.core.util.IdUtil; +import com.win.framework.common.util.date.DateUtils; +import com.win.module.system.dal.dataobject.oauth2.OAuth2CodeDO; +import com.win.module.system.dal.mysql.oauth2.OAuth2CodeMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.system.enums.ErrorCodeConstants.OAUTH2_CODE_EXPIRE; +import static com.win.module.system.enums.ErrorCodeConstants.OAUTH2_CODE_NOT_EXISTS; + +/** + * OAuth2.0 授权码 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class OAuth2CodeServiceImpl implements OAuth2CodeService { + + /** + * 授权码的过期时间,默认 5 分钟 + */ + private static final Integer TIMEOUT = 5 * 60; + + @Resource + private OAuth2CodeMapper oauth2CodeMapper; + + @Override + public OAuth2CodeDO createAuthorizationCode(Long userId, Integer userType, String clientId, + List scopes, String redirectUri, String state) { + OAuth2CodeDO codeDO = new OAuth2CodeDO().setCode(generateCode()) + .setUserId(userId).setUserType(userType) + .setClientId(clientId).setScopes(scopes) + .setExpiresTime(LocalDateTime.now().plusSeconds(TIMEOUT)) + .setRedirectUri(redirectUri).setState(state); + oauth2CodeMapper.insert(codeDO); + return codeDO; + } + + @Override + public OAuth2CodeDO consumeAuthorizationCode(String code) { + OAuth2CodeDO codeDO = oauth2CodeMapper.selectByCode(code); + if (codeDO == null) { + throw exception(OAUTH2_CODE_NOT_EXISTS); + } + if (DateUtils.isExpired(codeDO.getExpiresTime())) { + throw exception(OAUTH2_CODE_EXPIRE); + } + oauth2CodeMapper.deleteById(codeDO.getId()); + return codeDO; + } + + private static String generateCode() { + return IdUtil.fastSimpleUUID(); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2GrantService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2GrantService.java new file mode 100644 index 0000000..4d87fa0 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2GrantService.java @@ -0,0 +1,113 @@ +package com.win.module.system.service.oauth2; + +import com.win.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; + +import java.util.List; + +/** + * OAuth2 授予 Service 接口 + * + * 从功能上,和 Spring Security OAuth 的 TokenGranter 的功能,提供访问令牌、刷新令牌的操作 + * + * 将自身的 AdminUser 用户,授权给第三方应用,采用 OAuth2.0 的协议。 + * + * 问题:为什么自身也作为一个第三方应用,也走这套流程呢? + * 回复:当然可以这么做,采用 password 模式。考虑到大多数开发者使用不到这个特性,OAuth2.0 毕竟有一定学习成本,所以暂时没有采取这种方式。 + * + * @author 芋道源码 + */ +public interface OAuth2GrantService { + + /** + * 简化模式 + * + * 对应 Spring Security OAuth2 的 ImplicitTokenGranter 功能 + * + * @param userId 用户编号 + * @param userType 用户类型 + * @param clientId 客户端编号 + * @param scopes 授权范围 + * @return 访问令牌 + */ + OAuth2AccessTokenDO grantImplicit(Long userId, Integer userType, + String clientId, List scopes); + + /** + * 授权码模式,第一阶段,获得 code 授权码 + * + * 对应 Spring Security OAuth2 的 AuthorizationEndpoint 的 generateCode 方法 + * + * @param userId 用户编号 + * @param userType 用户类型 + * @param clientId 客户端编号 + * @param scopes 授权范围 + * @param redirectUri 重定向 URI + * @param state 状态 + * @return 授权码 + */ + String grantAuthorizationCodeForCode(Long userId, Integer userType, + String clientId, List scopes, + String redirectUri, String state); + + /** + * 授权码模式,第二阶段,获得 accessToken 访问令牌 + * + * 对应 Spring Security OAuth2 的 AuthorizationCodeTokenGranter 功能 + * + * @param clientId 客户端编号 + * @param code 授权码 + * @param redirectUri 重定向 URI + * @param state 状态 + * @return 访问令牌 + */ + OAuth2AccessTokenDO grantAuthorizationCodeForAccessToken(String clientId, String code, + String redirectUri, String state); + + /** + * 密码模式 + * + * 对应 Spring Security OAuth2 的 ResourceOwnerPasswordTokenGranter 功能 + * + * @param username 账号 + * @param password 密码 + * @param clientId 客户端编号 + * @param scopes 授权范围 + * @return 访问令牌 + */ + OAuth2AccessTokenDO grantPassword(String username, String password, + String clientId, List scopes); + + /** + * 刷新模式 + * + * 对应 Spring Security OAuth2 的 ResourceOwnerPasswordTokenGranter 功能 + * + * @param refreshToken 刷新令牌 + * @param clientId 客户端编号 + * @return 访问令牌 + */ + OAuth2AccessTokenDO grantRefreshToken(String refreshToken, String clientId); + + /** + * 客户端模式 + * + * 对应 Spring Security OAuth2 的 ClientCredentialsTokenGranter 功能 + * + * @param clientId 客户端编号 + * @param scopes 授权范围 + * @return 访问令牌 + */ + OAuth2AccessTokenDO grantClientCredentials(String clientId, List scopes); + + /** + * 移除访问令牌 + * + * 对应 Spring Security OAuth2 的 ConsumerTokenServices 的 revokeToken 方法 + * + * @param accessToken 访问令牌 + * @param clientId 客户端编号 + * @return 是否移除到 + */ + boolean revokeToken(String clientId, String accessToken); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2GrantServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2GrantServiceImpl.java new file mode 100644 index 0000000..f9fe20f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2GrantServiceImpl.java @@ -0,0 +1,104 @@ +package com.win.module.system.service.oauth2; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2CodeDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.module.system.enums.ErrorCodeConstants; +import com.win.module.system.service.auth.AdminAuthService; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.util.List; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; + +/** + * OAuth2 授予 Service 实现类 + * + * @author 芋道源码 + */ +@Service +public class OAuth2GrantServiceImpl implements OAuth2GrantService { + + @Resource + private OAuth2TokenService oauth2TokenService; + @Resource + private OAuth2CodeService oauth2CodeService; + @Resource + private AdminAuthService adminAuthService; + + @Override + public OAuth2AccessTokenDO grantImplicit(Long userId, Integer userType, + String clientId, List scopes) { + return oauth2TokenService.createAccessToken(userId, userType, clientId, scopes); + } + + @Override + public String grantAuthorizationCodeForCode(Long userId, Integer userType, + String clientId, List scopes, + String redirectUri, String state) { + return oauth2CodeService.createAuthorizationCode(userId, userType, clientId, scopes, + redirectUri, state).getCode(); + } + + @Override + public OAuth2AccessTokenDO grantAuthorizationCodeForAccessToken(String clientId, String code, + String redirectUri, String state) { + OAuth2CodeDO codeDO = oauth2CodeService.consumeAuthorizationCode(code); + Assert.notNull(codeDO, "授权码不能为空"); // 防御性编程 + // 校验 clientId 是否匹配 + if (!StrUtil.equals(clientId, codeDO.getClientId())) { + throw exception(ErrorCodeConstants.OAUTH2_GRANT_CLIENT_ID_MISMATCH); + } + // 校验 redirectUri 是否匹配 + if (!StrUtil.equals(redirectUri, codeDO.getRedirectUri())) { + throw exception(ErrorCodeConstants.OAUTH2_GRANT_REDIRECT_URI_MISMATCH); + } + // 校验 state 是否匹配 + state = StrUtil.nullToDefault(state, ""); // 数据库 state 为 null 时,会设置为 "" 空串 + if (!StrUtil.equals(state, codeDO.getState())) { + throw exception(ErrorCodeConstants.OAUTH2_GRANT_STATE_MISMATCH); + } + + // 创建访问令牌 + return oauth2TokenService.createAccessToken(codeDO.getUserId(), codeDO.getUserType(), + codeDO.getClientId(), codeDO.getScopes()); + } + + @Override + public OAuth2AccessTokenDO grantPassword(String username, String password, String clientId, List scopes) { + // 使用账号 + 密码进行登录 + AdminUserDO user = adminAuthService.authenticate(username, password); + Assert.notNull(user, "用户不能为空!"); // 防御性编程 + + // 创建访问令牌 + return oauth2TokenService.createAccessToken(user.getId(), UserTypeEnum.ADMIN.getValue(), clientId, scopes); + } + + @Override + public OAuth2AccessTokenDO grantRefreshToken(String refreshToken, String clientId) { + return oauth2TokenService.refreshAccessToken(refreshToken, clientId); + } + + @Override + public OAuth2AccessTokenDO grantClientCredentials(String clientId, List scopes) { + // TODO 芋艿:项目中使用 OAuth2 解决的是三方应用的授权,内部的 SSO 等问题,所以暂时不考虑 client_credentials 这个场景 + throw new UnsupportedOperationException("暂时不支持 client_credentials 授权模式"); + } + + @Override + public boolean revokeToken(String clientId, String accessToken) { + // 先查询,保证 clientId 时匹配的 + OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.getAccessToken(accessToken); + if (accessTokenDO == null || ObjectUtil.notEqual(clientId, accessTokenDO.getClientId())) { + return false; + } + // 再删除 + return oauth2TokenService.removeAccessToken(accessToken) != null; + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2TokenService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2TokenService.java new file mode 100644 index 0000000..a94005e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2TokenService.java @@ -0,0 +1,80 @@ +package com.win.module.system.service.oauth2; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.oauth2.vo.token.OAuth2AccessTokenPageReqVO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; + +import java.util.List; + +/** + * OAuth2.0 Token Service 接口 + * + * 从功能上,和 Spring Security OAuth 的 DefaultTokenServices + JdbcTokenStore 的功能,提供访问令牌、刷新令牌的操作 + * + * @author 芋道源码 + */ +public interface OAuth2TokenService { + + /** + * 创建访问令牌 + * 注意:该流程中,会包含创建刷新令牌的创建 + * + * 参考 DefaultTokenServices 的 createAccessToken 方法 + * + * @param userId 用户编号 + * @param userType 用户类型 + * @param clientId 客户端编号 + * @param scopes 授权范围 + * @return 访问令牌的信息 + */ + OAuth2AccessTokenDO createAccessToken(Long userId, Integer userType, String clientId, List scopes); + + /** + * 刷新访问令牌 + * + * 参考 DefaultTokenServices 的 refreshAccessToken 方法 + * + * @param refreshToken 刷新令牌 + * @param clientId 客户端编号 + * @return 访问令牌的信息 + */ + OAuth2AccessTokenDO refreshAccessToken(String refreshToken, String clientId); + + /** + * 获得访问令牌 + * + * 参考 DefaultTokenServices 的 getAccessToken 方法 + * + * @param accessToken 访问令牌 + * @return 访问令牌的信息 + */ + OAuth2AccessTokenDO getAccessToken(String accessToken); + + /** + * 校验访问令牌 + * + * @param accessToken 访问令牌 + * @return 访问令牌的信息 + */ + OAuth2AccessTokenDO checkAccessToken(String accessToken); + + /** + * 移除访问令牌 + * 注意:该流程中,会移除相关的刷新令牌 + * + * 参考 DefaultTokenServices 的 revokeToken 方法 + * + * @param accessToken 刷新令牌 + * @return 访问令牌的信息 + */ + OAuth2AccessTokenDO removeAccessToken(String accessToken); + + /** + * 获得访问令牌分页 + * + * @param reqVO 请求 + * @return 访问令牌分页 + */ + PageResult getAccessTokenPage(OAuth2AccessTokenPageReqVO reqVO); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2TokenServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2TokenServiceImpl.java new file mode 100644 index 0000000..bf24f1d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/oauth2/OAuth2TokenServiceImpl.java @@ -0,0 +1,197 @@ +package com.win.module.system.service.oauth2; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.common.exception.enums.GlobalErrorCodeConstants; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.date.DateUtils; +import com.win.framework.security.core.LoginUser; +import com.win.framework.tenant.core.context.TenantContextHolder; +import com.win.module.system.controller.admin.oauth2.vo.token.OAuth2AccessTokenPageReqVO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2ClientDO; +import com.win.module.system.dal.dataobject.oauth2.OAuth2RefreshTokenDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.module.system.dal.mysql.oauth2.OAuth2AccessTokenMapper; +import com.win.module.system.dal.mysql.oauth2.OAuth2RefreshTokenMapper; +import com.win.module.system.dal.redis.oauth2.OAuth2AccessTokenRedisDAO; +import com.win.module.system.service.user.AdminUserService; +import jakarta.annotation.Resource; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception0; +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; + +/** + * OAuth2.0 Token Service 实现类 + * + * @author 芋道源码 + */ +@Service +public class OAuth2TokenServiceImpl implements OAuth2TokenService { + + @Resource + private OAuth2AccessTokenMapper oauth2AccessTokenMapper; + @Resource + private OAuth2RefreshTokenMapper oauth2RefreshTokenMapper; + + @Resource + private OAuth2AccessTokenRedisDAO oauth2AccessTokenRedisDAO; + + @Resource + private OAuth2ClientService oauth2ClientService; + @Resource + @Lazy // 懒加载,避免循环依赖 + private AdminUserService adminUserService; + + @Override + @Transactional + public OAuth2AccessTokenDO createAccessToken(Long userId, Integer userType, String clientId, List scopes) { + OAuth2ClientDO clientDO = oauth2ClientService.validOAuthClientFromCache(clientId); + // 创建刷新令牌 + OAuth2RefreshTokenDO refreshTokenDO = createOAuth2RefreshToken(userId, userType, clientDO, scopes); + // 创建访问令牌 + return createOAuth2AccessToken(refreshTokenDO, clientDO); + } + + @Override + public OAuth2AccessTokenDO refreshAccessToken(String refreshToken, String clientId) { + // 查询访问令牌 + OAuth2RefreshTokenDO refreshTokenDO = oauth2RefreshTokenMapper.selectByRefreshToken(refreshToken); + if (refreshTokenDO == null) { + throw exception0(GlobalErrorCodeConstants.BAD_REQUEST.getCode(), "无效的刷新令牌"); + } + + // 校验 Client 匹配 + OAuth2ClientDO clientDO = oauth2ClientService.validOAuthClientFromCache(clientId); + if (ObjectUtil.notEqual(clientId, refreshTokenDO.getClientId())) { + throw exception0(GlobalErrorCodeConstants.BAD_REQUEST.getCode(), "刷新令牌的客户端编号不正确"); + } + + // 移除相关的访问令牌 + List accessTokenDOs = oauth2AccessTokenMapper.selectListByRefreshToken(refreshToken); + if (CollUtil.isNotEmpty(accessTokenDOs)) { + oauth2AccessTokenMapper.deleteBatchIds(convertSet(accessTokenDOs, OAuth2AccessTokenDO::getId)); + oauth2AccessTokenRedisDAO.deleteList(convertSet(accessTokenDOs, OAuth2AccessTokenDO::getAccessToken)); + } + + // 已过期的情况下,删除刷新令牌 + if (DateUtils.isExpired(refreshTokenDO.getExpiresTime())) { + oauth2RefreshTokenMapper.deleteById(refreshTokenDO.getId()); + throw exception0(GlobalErrorCodeConstants.UNAUTHORIZED.getCode(), "刷新令牌已过期"); + } + + // 创建访问令牌 + return createOAuth2AccessToken(refreshTokenDO, clientDO); + } + + @Override + public OAuth2AccessTokenDO getAccessToken(String accessToken) { + // 优先从 Redis 中获取 + OAuth2AccessTokenDO accessTokenDO = oauth2AccessTokenRedisDAO.get(accessToken); + if (accessTokenDO != null) { + return accessTokenDO; + } + + // 获取不到,从 MySQL 中获取 + accessTokenDO = oauth2AccessTokenMapper.selectByAccessToken(accessToken); + // 如果在 MySQL 存在,则往 Redis 中写入 + if (accessTokenDO != null && !DateUtils.isExpired(accessTokenDO.getExpiresTime())) { + oauth2AccessTokenRedisDAO.set(accessTokenDO); + } + return accessTokenDO; + } + + @Override + public OAuth2AccessTokenDO checkAccessToken(String accessToken) { + OAuth2AccessTokenDO accessTokenDO = getAccessToken(accessToken); + if (accessTokenDO == null) { + throw exception0(GlobalErrorCodeConstants.UNAUTHORIZED.getCode(), "访问令牌不存在"); + } + if (DateUtils.isExpired(accessTokenDO.getExpiresTime())) { + throw exception0(GlobalErrorCodeConstants.UNAUTHORIZED.getCode(), "访问令牌已过期"); + } + return accessTokenDO; + } + + @Override + public OAuth2AccessTokenDO removeAccessToken(String accessToken) { + // 删除访问令牌 + OAuth2AccessTokenDO accessTokenDO = oauth2AccessTokenMapper.selectByAccessToken(accessToken); + if (accessTokenDO == null) { + return null; + } + oauth2AccessTokenMapper.deleteById(accessTokenDO.getId()); + oauth2AccessTokenRedisDAO.delete(accessToken); + // 删除刷新令牌 + oauth2RefreshTokenMapper.deleteByRefreshToken(accessTokenDO.getRefreshToken()); + return accessTokenDO; + } + + @Override + public PageResult getAccessTokenPage(OAuth2AccessTokenPageReqVO reqVO) { + return oauth2AccessTokenMapper.selectPage(reqVO); + } + + private OAuth2AccessTokenDO createOAuth2AccessToken(OAuth2RefreshTokenDO refreshTokenDO, OAuth2ClientDO clientDO) { + OAuth2AccessTokenDO accessTokenDO = new OAuth2AccessTokenDO().setAccessToken(generateAccessToken()) + .setUserId(refreshTokenDO.getUserId()).setUserType(refreshTokenDO.getUserType()) + .setUserInfo(buildUserInfo(refreshTokenDO.getUserId(), refreshTokenDO.getUserType())) + .setClientId(clientDO.getClientId()).setScopes(refreshTokenDO.getScopes()) + .setRefreshToken(refreshTokenDO.getRefreshToken()) + .setExpiresTime(LocalDateTime.now().plusSeconds(clientDO.getAccessTokenValiditySeconds())); + accessTokenDO.setTenantId(TenantContextHolder.getTenantId()); // 手动设置租户编号,避免缓存到 Redis 的时候,无对应的租户编号 + oauth2AccessTokenMapper.insert(accessTokenDO); + // 记录到 Redis 中 + oauth2AccessTokenRedisDAO.set(accessTokenDO); + return accessTokenDO; + } + + private OAuth2RefreshTokenDO createOAuth2RefreshToken(Long userId, Integer userType, OAuth2ClientDO clientDO, List scopes) { + OAuth2RefreshTokenDO refreshToken = new OAuth2RefreshTokenDO().setRefreshToken(generateRefreshToken()) + .setUserId(userId).setUserType(userType) + .setClientId(clientDO.getClientId()).setScopes(scopes) + .setExpiresTime(LocalDateTime.now().plusSeconds(clientDO.getRefreshTokenValiditySeconds())); + oauth2RefreshTokenMapper.insert(refreshToken); + return refreshToken; + } + + /** + * 加载用户信息,方便 {@link com.win.framework.security.core.LoginUser} 获取到昵称、部门等信息 + * + * @param userId 用户编号 + * @param userType 用户类型 + * @return 用户信息 + */ + private Map buildUserInfo(Long userId, Integer userType) { + if (userType.equals(UserTypeEnum.ADMIN.getValue())) { + AdminUserDO user = adminUserService.getUser(userId); + return MapUtil.builder(LoginUser.INFO_KEY_NICKNAME, user.getNickname()) + .put(LoginUser.INFO_KEY_DEPT_ID, StrUtil.toStringOrNull(user.getDeptId())).build(); + } else if (userType.equals(UserTypeEnum.MEMBER.getValue())) { + // 注意:目前 Member 暂时不读取,可以按需实现 + return Collections.emptyMap(); + } + return null; + } + + private static String generateAccessToken() { + return IdUtil.fastSimpleUUID(); + } + + private static String generateRefreshToken() { + return IdUtil.fastSimpleUUID(); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/MenuService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/MenuService.java new file mode 100644 index 0000000..e8e4f5a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/MenuService.java @@ -0,0 +1,87 @@ +package com.win.module.system.service.permission; + +import com.win.module.system.controller.admin.permission.vo.menu.MenuListReqVO; +import com.win.module.system.controller.admin.permission.vo.menu.MenuSaveVO; +import com.win.module.system.dal.dataobject.permission.MenuDO; + +import java.util.Collection; +import java.util.List; + +/** + * 菜单 Service 接口 + * + * @author 芋道源码 + */ +public interface MenuService { + + /** + * 创建菜单 + * + * @param createReqVO 菜单信息 + * @return 创建出来的菜单编号 + */ + Long createMenu(MenuSaveVO createReqVO); + + /** + * 更新菜单 + * + * @param updateReqVO 菜单信息 + */ + void updateMenu(MenuSaveVO updateReqVO); + + /** + * 删除菜单 + * + * @param id 菜单编号 + */ + void deleteMenu(Long id); + + /** + * 获得所有菜单列表 + * + * @return 菜单列表 + */ + List getMenuList(); + + /** + * 基于租户,筛选菜单列表 + * 注意,如果是系统租户,返回的还是全菜单 + * + * @param reqVO 筛选条件请求 VO + * @return 菜单列表 + */ + List getMenuListByTenant(MenuListReqVO reqVO); + + /** + * 筛选菜单列表 + * + * @param reqVO 筛选条件请求 VO + * @return 菜单列表 + */ + List getMenuList(MenuListReqVO reqVO); + + /** + * 获得权限对应的菜单编号数组 + * + * @param permission 权限标识 + * @return 数组 + */ + List getMenuIdListByPermissionFromCache(String permission); + + /** + * 获得菜单 + * + * @param id 菜单编号 + * @return 菜单 + */ + MenuDO getMenu(Long id); + + /** + * 获得菜单数组 + * + * @param ids 菜单编号数组 + * @return 菜单数组 + */ + List getMenuList(Collection ids); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/MenuServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/MenuServiceImpl.java new file mode 100644 index 0000000..fa62b4f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/MenuServiceImpl.java @@ -0,0 +1,213 @@ +package com.win.module.system.service.permission; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.permission.vo.menu.MenuListReqVO; +import com.win.module.system.controller.admin.permission.vo.menu.MenuSaveVO; +import com.win.module.system.dal.dataobject.permission.MenuDO; +import com.win.module.system.dal.mysql.permission.MenuMapper; +import com.win.module.system.dal.redis.RedisKeyConstants; +import com.win.module.system.enums.permission.MenuTypeEnum; +import com.win.module.system.service.tenant.TenantService; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.Lists; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.collection.CollectionUtils.convertList; +import static com.win.module.system.dal.dataobject.permission.MenuDO.ID_ROOT; +import static com.win.module.system.enums.ErrorCodeConstants.*; + +/** + * 菜单 Service 实现 + * + * @author 芋道源码 + */ +@Service +@Slf4j +public class MenuServiceImpl implements MenuService { + + @Resource + private MenuMapper menuMapper; + @Resource + private PermissionService permissionService; + @Resource + @Lazy // 延迟,避免循环依赖报错 + private TenantService tenantService; + + @Override + @CacheEvict(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST, key = "#createReqVO.permission", + condition = "#createReqVO.permission != null") + public Long createMenu(MenuSaveVO createReqVO) { + // 校验父菜单存在 + validateParentMenu(createReqVO.getParentId(), null); + // 校验菜单(自己) + validateMenu(createReqVO.getParentId(), createReqVO.getName(), null); + + // 插入数据库 + MenuDO menu = BeanUtils.toBean(createReqVO, MenuDO.class); + initMenuProperty(menu); + menuMapper.insert(menu); + // 返回 + return menu.getId(); + } + + @Override + @CacheEvict(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST, + allEntries = true) // allEntries 清空所有缓存,因为 permission 如果变更,涉及到新老两个 permission。直接清理,简单有效 + public void updateMenu(MenuSaveVO updateReqVO) { + // 校验更新的菜单是否存在 + if (menuMapper.selectById(updateReqVO.getId()) == null) { + throw exception(MENU_NOT_EXISTS); + } + // 校验父菜单存在 + validateParentMenu(updateReqVO.getParentId(), updateReqVO.getId()); + // 校验菜单(自己) + validateMenu(updateReqVO.getParentId(), updateReqVO.getName(), updateReqVO.getId()); + + // 更新到数据库 + MenuDO updateObj = BeanUtils.toBean(updateReqVO, MenuDO.class); + initMenuProperty(updateObj); + menuMapper.updateById(updateObj); + } + + @Override + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST, + allEntries = true) // allEntries 清空所有缓存,因为此时不知道 id 对应的 permission 是多少。直接清理,简单有效 + public void deleteMenu(Long id) { + // 校验是否还有子菜单 + if (menuMapper.selectCountByParentId(id) > 0) { + throw exception(MENU_EXISTS_CHILDREN); + } + // 校验删除的菜单是否存在 + if (menuMapper.selectById(id) == null) { + throw exception(MENU_NOT_EXISTS); + } + // 标记删除 + menuMapper.deleteById(id); + // 删除授予给角色的权限 + permissionService.processMenuDeleted(id); + } + + @Override + public List getMenuList() { + return menuMapper.selectList(); + } + + @Override + public List getMenuListByTenant(MenuListReqVO reqVO) { + List menus = getMenuList(reqVO); + // 开启多租户的情况下,需要过滤掉未开通的菜单 + tenantService.handleTenantMenu(menuIds -> menus.removeIf(menu -> !CollUtil.contains(menuIds, menu.getId()))); + return menus; + } + + @Override + public List getMenuList(MenuListReqVO reqVO) { + return menuMapper.selectList(reqVO); + } + + @Override + @Cacheable(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST, key = "#permission") + public List getMenuIdListByPermissionFromCache(String permission) { + List menus = menuMapper.selectListByPermission(permission); + return convertList(menus, MenuDO::getId); + } + + @Override + public MenuDO getMenu(Long id) { + return menuMapper.selectById(id); + } + + @Override + public List getMenuList(Collection ids) { + // 当 ids 为空时,返回一个空的实例对象 + if (CollUtil.isEmpty(ids)) { + return Lists.newArrayList(); + } + return menuMapper.selectBatchIds(ids); + } + + /** + * 校验父菜单是否合法 + *

    + * 1. 不能设置自己为父菜单 + * 2. 父菜单不存在 + * 3. 父菜单必须是 {@link MenuTypeEnum#MENU} 菜单类型 + * + * @param parentId 父菜单编号 + * @param childId 当前菜单编号 + */ + @VisibleForTesting + void validateParentMenu(Long parentId, Long childId) { + if (parentId == null || ID_ROOT.equals(parentId)) { + return; + } + // 不能设置自己为父菜单 + if (parentId.equals(childId)) { + throw exception(MENU_PARENT_ERROR); + } + MenuDO menu = menuMapper.selectById(parentId); + // 父菜单不存在 + if (menu == null) { + throw exception(MENU_PARENT_NOT_EXISTS); + } + // 父菜单必须是目录或者菜单类型 + if (!MenuTypeEnum.DIR.getType().equals(menu.getType()) + && !MenuTypeEnum.MENU.getType().equals(menu.getType())) { + throw exception(MENU_PARENT_NOT_DIR_OR_MENU); + } + } + + /** + * 校验菜单是否合法 + *

    + * 1. 校验相同父菜单编号下,是否存在相同的菜单名 + * + * @param name 菜单名字 + * @param parentId 父菜单编号 + * @param id 菜单编号 + */ + @VisibleForTesting + void validateMenu(Long parentId, String name, Long id) { + MenuDO menu = menuMapper.selectByParentIdAndName(parentId, name); + if (menu == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的菜单 + if (id == null) { + throw exception(MENU_NAME_DUPLICATE); + } + if (!menu.getId().equals(id)) { + throw exception(MENU_NAME_DUPLICATE); + } + } + + /** + * 初始化菜单的通用属性。 + *

    + * 例如说,只有目录或者菜单类型的菜单,才设置 icon + * + * @param menu 菜单 + */ + private void initMenuProperty(MenuDO menu) { + // 菜单为按钮类型时,无需 component、icon、path 属性,进行置空 + if (MenuTypeEnum.BUTTON.getType().equals(menu.getType())) { + menu.setComponent(""); + menu.setComponentName(""); + menu.setIcon(""); + menu.setPath(""); + } + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/PermissionService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/PermissionService.java new file mode 100644 index 0000000..081b253 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/PermissionService.java @@ -0,0 +1,146 @@ +package com.win.module.system.service.permission; + +import com.win.module.system.api.permission.dto.DeptDataPermissionRespDTO; + +import java.util.Collection; +import java.util.Set; + +import static java.util.Collections.singleton; + +/** + * 权限 Service 接口 + *

    + * 提供用户-角色、角色-菜单、角色-部门的关联权限处理 + * + * @author 芋道源码 + */ +public interface PermissionService { + + /** + * 判断是否有权限,任一一个即可 + * + * @param userId 用户编号 + * @param permissions 权限 + * @return 是否 + */ + boolean hasAnyPermissions(Long userId, String... permissions); + + /** + * 判断是否有角色,任一一个即可 + * + * @param roles 角色数组 + * @return 是否 + */ + boolean hasAnyRoles(Long userId, String... roles); + + // ========== 角色-菜单的相关方法 ========== + + /** + * 设置角色菜单 + * + * @param roleId 角色编号 + * @param menuIds 菜单编号集合 + */ + void assignRoleMenu(Long roleId, Set menuIds); + + /** + * 处理角色删除时,删除关联授权数据 + * + * @param roleId 角色编号 + */ + void processRoleDeleted(Long roleId); + + /** + * 处理菜单删除时,删除关联授权数据 + * + * @param menuId 菜单编号 + */ + void processMenuDeleted(Long menuId); + + /** + * 获得角色拥有的菜单编号集合 + * + * @param roleId 角色编号 + * @return 菜单编号集合 + */ + default Set getRoleMenuListByRoleId(Long roleId) { + return getRoleMenuListByRoleId(singleton(roleId)); + } + + /** + * 获得角色们拥有的菜单编号集合 + * + * @param roleIds 角色编号数组 + * @return 菜单编号集合 + */ + Set getRoleMenuListByRoleId(Collection roleIds); + + /** + * 获得拥有指定菜单的角色编号数组,从缓存中获取 + * + * @param menuId 菜单编号 + * @return 角色编号数组 + */ + Set getMenuRoleIdListByMenuIdFromCache(Long menuId); + + // ========== 用户-角色的相关方法 ========== + + /** + * 设置用户角色 + * + * @param userId 角色编号 + * @param roleIds 角色编号集合 + */ + void assignUserRole(Long userId, Set roleIds); + + /** + * 处理用户删除时,删除关联授权数据 + * + * @param userId 用户编号 + */ + void processUserDeleted(Long userId); + + /** + * 获得拥有多个角色的用户编号集合 + * + * @param roleIds 角色编号集合 + * @return 用户编号集合 + */ + Set getUserRoleIdListByRoleId(Collection roleIds); + + /** + * 获得用户拥有的角色编号集合 + * + * @param userId 用户编号 + * @return 角色编号集合 + */ + Set getUserRoleIdListByUserId(Long userId); + + /** + * 获得用户拥有的角色编号集合,从缓存中获取 + * + * @param userId 用户编号 + * @return 角色编号集合 + */ + Set getUserRoleIdListByUserIdFromCache(Long userId); + + // ========== 用户-部门的相关方法 ========== + + /** + * 设置角色的数据权限 + * + * @param roleId 角色编号 + * @param dataScope 数据范围 + * @param dataScopeDeptIds 部门编号数组 + */ + void assignRoleDataScope(Long roleId, Integer dataScope, Set dataScopeDeptIds); + + /** + * 获得登陆用户的部门数据权限 + * + * @param userId 用户编号 + * @return 部门数据权限 + */ + DeptDataPermissionRespDTO getDeptDataPermission(Long userId); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/PermissionServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/PermissionServiceImpl.java new file mode 100644 index 0000000..5437845 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/PermissionServiceImpl.java @@ -0,0 +1,337 @@ +package com.win.module.system.service.permission; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.extra.spring.SpringUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.datapermission.core.annotation.DataPermission; +import com.win.module.system.api.permission.dto.DeptDataPermissionRespDTO; +import com.win.module.system.dal.dataobject.permission.MenuDO; +import com.win.module.system.dal.dataobject.permission.RoleDO; +import com.win.module.system.dal.dataobject.permission.RoleMenuDO; +import com.win.module.system.dal.dataobject.permission.UserRoleDO; +import com.win.module.system.dal.mysql.permission.RoleMenuMapper; +import com.win.module.system.dal.mysql.permission.UserRoleMapper; +import com.win.module.system.dal.redis.RedisKeyConstants; +import com.win.module.system.enums.permission.DataScopeEnum; +import com.win.module.system.service.dept.DeptService; +import com.win.module.system.service.user.AdminUserService; +import com.baomidou.dynamic.datasource.annotation.DSTransactional; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Suppliers; +import com.google.common.collect.Sets; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.cache.annotation.Caching; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import jakarta.annotation.Resource; +import java.util.*; +import java.util.function.Supplier; + +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; +import static com.win.framework.common.util.json.JsonUtils.toJsonString; + +/** + * 权限 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Slf4j +public class PermissionServiceImpl implements PermissionService { + + @Resource + private RoleMenuMapper roleMenuMapper; + @Resource + private UserRoleMapper userRoleMapper; + + @Resource + private RoleService roleService; + @Resource + private MenuService menuService; + @Resource + private DeptService deptService; + @Resource + private AdminUserService userService; + + @Override + public boolean hasAnyPermissions(Long userId, String... permissions) { + // 如果为空,说明已经有权限 + if (ArrayUtil.isEmpty(permissions)) { + return true; + } + + // 获得当前登录的角色。如果为空,说明没有权限 + List roles = getEnableUserRoleListByUserIdFromCache(userId); + if (CollUtil.isEmpty(roles)) { + return false; + } + + // 情况一:遍历判断每个权限,如果有一满足,说明有权限 + for (String permission : permissions) { + if (hasAnyPermission(roles, permission)) { + return true; + } + } + + // 情况二:如果是超管,也说明有权限 + return roleService.hasAnySuperAdmin(convertSet(roles, RoleDO::getId)); + } + + /** + * 判断指定角色,是否拥有该 permission 权限 + * + * @param roles 指定角色数组 + * @param permission 权限标识 + * @return 是否拥有 + */ + private boolean hasAnyPermission(List roles, String permission) { + List menuIds = menuService.getMenuIdListByPermissionFromCache(permission); + // 采用严格模式,如果权限找不到对应的 Menu 的话,也认为没有权限 + if (CollUtil.isEmpty(menuIds)) { + return false; + } + + // 判断是否有权限 + Set roleIds = convertSet(roles, RoleDO::getId); + for (Long menuId : menuIds) { + // 获得拥有该菜单的角色编号集合 + Set menuRoleIds = getSelf().getMenuRoleIdListByMenuIdFromCache(menuId); + // 如果有交集,说明有权限 + if (CollUtil.containsAny(menuRoleIds, roleIds)) { + return true; + } + } + return false; + } + + @Override + public boolean hasAnyRoles(Long userId, String... roles) { + // 如果为空,说明已经有权限 + if (ArrayUtil.isEmpty(roles)) { + return true; + } + + // 获得当前登录的角色。如果为空,说明没有权限 + List roleList = getEnableUserRoleListByUserIdFromCache(userId); + if (CollUtil.isEmpty(roleList)) { + return false; + } + + // 判断是否有角色 + Set userRoles = convertSet(roleList, RoleDO::getCode); + return CollUtil.containsAny(userRoles, Sets.newHashSet(roles)); + } + + // ========== 角色-菜单的相关方法 ========== + + @Override + @DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换 + @CacheEvict(value = RedisKeyConstants.MENU_ROLE_ID_LIST, + allEntries = true) // allEntries 清空所有缓存,主要一次更新涉及到的 menuIds 较多,反倒批量会更快 + public void assignRoleMenu(Long roleId, Set menuIds) { + // 获得角色拥有菜单编号 + Set dbMenuIds = convertSet(roleMenuMapper.selectListByRoleId(roleId), RoleMenuDO::getMenuId); + // 计算新增和删除的菜单编号 + Set menuIdList = CollUtil.emptyIfNull(menuIds); + Collection createMenuIds = CollUtil.subtract(menuIdList, dbMenuIds); + Collection deleteMenuIds = CollUtil.subtract(dbMenuIds, menuIdList); + // 执行新增和删除。对于已经授权的菜单,不用做任何处理 + if (CollUtil.isNotEmpty(createMenuIds)) { + roleMenuMapper.insertBatch(CollectionUtils.convertList(createMenuIds, menuId -> { + RoleMenuDO entity = new RoleMenuDO(); + entity.setRoleId(roleId); + entity.setMenuId(menuId); + return entity; + })); + } + if (CollUtil.isNotEmpty(deleteMenuIds)) { + roleMenuMapper.deleteListByRoleIdAndMenuIds(roleId, deleteMenuIds); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + @Caching(evict = { + @CacheEvict(value = RedisKeyConstants.MENU_ROLE_ID_LIST, + allEntries = true), // allEntries 清空所有缓存,此处无法方便获得 roleId 对应的 menu 缓存们 + @CacheEvict(value = RedisKeyConstants.USER_ROLE_ID_LIST, + allEntries = true) // allEntries 清空所有缓存,此处无法方便获得 roleId 对应的 user 缓存们 + }) + public void processRoleDeleted(Long roleId) { + // 标记删除 UserRole + userRoleMapper.deleteListByRoleId(roleId); + // 标记删除 RoleMenu + roleMenuMapper.deleteListByRoleId(roleId); + } + + @Override + @CacheEvict(value = RedisKeyConstants.MENU_ROLE_ID_LIST, key = "#menuId") + public void processMenuDeleted(Long menuId) { + roleMenuMapper.deleteListByMenuId(menuId); + } + + @Override + public Set getRoleMenuListByRoleId(Collection roleIds) { + if (CollUtil.isEmpty(roleIds)) { + return Collections.emptySet(); + } + + // 如果是管理员的情况下,获取全部菜单编号 + if (roleService.hasAnySuperAdmin(roleIds)) { + return convertSet(menuService.getMenuList(), MenuDO::getId); + } + // 如果是非管理员的情况下,获得拥有的菜单编号 + return convertSet(roleMenuMapper.selectListByRoleId(roleIds), RoleMenuDO::getMenuId); + } + + @Override + @Cacheable(value = RedisKeyConstants.MENU_ROLE_ID_LIST, key = "#menuId") + public Set getMenuRoleIdListByMenuIdFromCache(Long menuId) { + return convertSet(roleMenuMapper.selectListByMenuId(menuId), RoleMenuDO::getRoleId); + } + + // ========== 用户-角色的相关方法 ========== + + @Override + @DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换 + @CacheEvict(value = RedisKeyConstants.USER_ROLE_ID_LIST, key = "#userId") + public void assignUserRole(Long userId, Set roleIds) { + // 获得角色拥有角色编号 + Set dbRoleIds = convertSet(userRoleMapper.selectListByUserId(userId), + UserRoleDO::getRoleId); + // 计算新增和删除的角色编号 + Set roleIdList = CollUtil.emptyIfNull(roleIds); + Collection createRoleIds = CollUtil.subtract(roleIdList, dbRoleIds); + Collection deleteMenuIds = CollUtil.subtract(dbRoleIds, roleIdList); + // 执行新增和删除。对于已经授权的角色,不用做任何处理 + if (!CollectionUtil.isEmpty(createRoleIds)) { + userRoleMapper.insertBatch(CollectionUtils.convertList(createRoleIds, roleId -> { + UserRoleDO entity = new UserRoleDO(); + entity.setUserId(userId); + entity.setRoleId(roleId); + return entity; + })); + } + if (!CollectionUtil.isEmpty(deleteMenuIds)) { + userRoleMapper.deleteListByUserIdAndRoleIdIds(userId, deleteMenuIds); + } + } + + @Override + @CacheEvict(value = RedisKeyConstants.USER_ROLE_ID_LIST, key = "#userId") + public void processUserDeleted(Long userId) { + userRoleMapper.deleteListByUserId(userId); + } + + @Override + public Set getUserRoleIdListByUserId(Long userId) { + return convertSet(userRoleMapper.selectListByUserId(userId), UserRoleDO::getRoleId); + } + + @Override + @Cacheable(value = RedisKeyConstants.USER_ROLE_ID_LIST, key = "#userId") + public Set getUserRoleIdListByUserIdFromCache(Long userId) { + return getUserRoleIdListByUserId(userId); + } + + @Override + public Set getUserRoleIdListByRoleId(Collection roleIds) { + return convertSet(userRoleMapper.selectListByRoleIds(roleIds), UserRoleDO::getUserId); + } + + /** + * 获得用户拥有的角色,并且这些角色是开启状态的 + * + * @param userId 用户编号 + * @return 用户拥有的角色 + */ + @VisibleForTesting + List getEnableUserRoleListByUserIdFromCache(Long userId) { + // 获得用户拥有的角色编号 + Set roleIds = getSelf().getUserRoleIdListByUserIdFromCache(userId); + // 获得角色数组,并移除被禁用的 + List roles = roleService.getRoleListFromCache(roleIds); + roles.removeIf(role -> !CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())); + return roles; + } + + // ========== 用户-部门的相关方法 ========== + + @Override + public void assignRoleDataScope(Long roleId, Integer dataScope, Set dataScopeDeptIds) { + roleService.updateRoleDataScope(roleId, dataScope, dataScopeDeptIds); + } + + @Override + @DataPermission(enable = false) // 关闭数据权限,不然就会出现递归获取数据权限的问题 + public DeptDataPermissionRespDTO getDeptDataPermission(Long userId) { + // 获得用户的角色 + List roles = getEnableUserRoleListByUserIdFromCache(userId); + + // 如果角色为空,则只能查看自己 + DeptDataPermissionRespDTO result = new DeptDataPermissionRespDTO(); + if (CollUtil.isEmpty(roles)) { + result.setSelf(true); + return result; + } + + // 获得用户的部门编号的缓存,通过 Guava 的 Suppliers 惰性求值,即有且仅有第一次发起 DB 的查询 + Supplier userDeptId = Suppliers.memoize(() -> userService.getUser(userId).getDeptId()); + // 遍历每个角色,计算 + for (RoleDO role : roles) { + // 为空时,跳过 + if (role.getDataScope() == null) { + continue; + } + // 情况一,ALL + if (Objects.equals(role.getDataScope(), DataScopeEnum.ALL.getScope())) { + result.setAll(true); + continue; + } + // 情况二,DEPT_CUSTOM + if (Objects.equals(role.getDataScope(), DataScopeEnum.DEPT_CUSTOM.getScope())) { + CollUtil.addAll(result.getDeptIds(), role.getDataScopeDeptIds()); + // 自定义可见部门时,保证可以看到自己所在的部门。否则,一些场景下可能会有问题。 + // 例如说,登录时,基于 t_user 的 username 查询会可能被 dept_id 过滤掉 + CollUtil.addAll(result.getDeptIds(), userDeptId.get()); + continue; + } + // 情况三,DEPT_ONLY + if (Objects.equals(role.getDataScope(), DataScopeEnum.DEPT_ONLY.getScope())) { + CollectionUtils.addIfNotNull(result.getDeptIds(), userDeptId.get()); + continue; + } + // 情况四,DEPT_DEPT_AND_CHILD + if (Objects.equals(role.getDataScope(), DataScopeEnum.DEPT_AND_CHILD.getScope())) { + CollUtil.addAll(result.getDeptIds(), deptService.getChildDeptIdListFromCache(userDeptId.get())); + // 添加本身部门编号 + CollUtil.addAll(result.getDeptIds(), userDeptId.get()); + continue; + } + // 情况五,SELF + if (Objects.equals(role.getDataScope(), DataScopeEnum.SELF.getScope())) { + result.setSelf(true); + continue; + } + // 未知情况,error log 即可 + log.error("[getDeptDataPermission][LoginUser({}) role({}) 无法处理]", userId, toJsonString(result)); + } + return result; + } + + /** + * 获得自身的代理对象,解决 AOP 生效问题 + * + * @return 自己 + */ + private PermissionServiceImpl getSelf() { + return SpringUtil.getBean(getClass()); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/RoleService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/RoleService.java new file mode 100644 index 0000000..2b11896 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/RoleService.java @@ -0,0 +1,124 @@ +package com.win.module.system.service.permission; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.permission.vo.role.RolePageReqVO; +import com.win.module.system.controller.admin.permission.vo.role.RoleSaveReqVO; +import com.win.module.system.dal.dataobject.permission.RoleDO; + +import jakarta.validation.Valid; +import java.util.Collection; +import java.util.List; +import java.util.Set; + +/** + * 角色 Service 接口 + * + * @author 芋道源码 + */ +public interface RoleService { + + /** + * 创建角色 + * + * @param createReqVO 创建角色信息 + * @param type 角色类型 + * @return 角色编号 + */ + Long createRole(@Valid RoleSaveReqVO createReqVO, Integer type); + + /** + * 更新角色 + * + * @param updateReqVO 更新角色信息 + */ + void updateRole(@Valid RoleSaveReqVO updateReqVO); + + /** + * 删除角色 + * + * @param id 角色编号 + */ + void deleteRole(Long id); + + /** + * 设置角色的数据权限 + * + * @param id 角色编号 + * @param dataScope 数据范围 + * @param dataScopeDeptIds 部门编号数组 + */ + void updateRoleDataScope(Long id, Integer dataScope, Set dataScopeDeptIds); + + /** + * 获得角色 + * + * @param id 角色编号 + * @return 角色 + */ + RoleDO getRole(Long id); + + /** + * 获得角色,从缓存中 + * + * @param id 角色编号 + * @return 角色 + */ + RoleDO getRoleFromCache(Long id); + + /** + * 获得角色列表 + * + * @param ids 角色编号数组 + * @return 角色列表 + */ + List getRoleList(Collection ids); + + /** + * 获得角色数组,从缓存中 + * + * @param ids 角色编号数组 + * @return 角色数组 + */ + List getRoleListFromCache(Collection ids); + + /** + * 获得角色列表 + * + * @param statuses 筛选的状态 + * @return 角色列表 + */ + List getRoleListByStatus(Collection statuses); + + /** + * 获得所有角色列表 + * + * @return 角色列表 + */ + List getRoleList(); + + /** + * 获得角色分页 + * + * @param reqVO 角色分页查询 + * @return 角色分页结果 + */ + PageResult getRolePage(RolePageReqVO reqVO); + + /** + * 判断角色编号数组中,是否有管理员 + * + * @param ids 角色编号数组 + * @return 是否有管理员 + */ + boolean hasAnySuperAdmin(Collection ids); + + /** + * 校验角色们是否有效。如下情况,视为无效: + * 1. 角色编号不存在 + * 2. 角色被禁用 + * + * @param ids 角色编号数组 + */ + void validateRoleList(Collection ids); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/RoleServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/RoleServiceImpl.java new file mode 100644 index 0000000..6e81c6c --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/permission/RoleServiceImpl.java @@ -0,0 +1,259 @@ +package com.win.module.system.service.permission; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.extra.spring.SpringUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.permission.vo.role.RolePageReqVO; +import com.win.module.system.controller.admin.permission.vo.role.RoleSaveReqVO; +import com.win.module.system.dal.dataobject.permission.RoleDO; +import com.win.module.system.dal.mysql.permission.RoleMapper; +import com.win.module.system.dal.redis.RedisKeyConstants; +import com.win.module.system.enums.permission.DataScopeEnum; +import com.win.module.system.enums.permission.RoleCodeEnum; +import com.win.module.system.enums.permission.RoleTypeEnum; +import com.google.common.annotations.VisibleForTesting; +import com.mzt.logapi.context.LogRecordContext; +import com.mzt.logapi.starter.annotation.LogRecord; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.util.*; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.collection.CollectionUtils.convertMap; +import static com.win.module.system.enums.ErrorCodeConstants.*; +import static com.win.module.system.enums.LogRecordConstants.*; + +/** + * 角色 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Slf4j +public class RoleServiceImpl implements RoleService { + + @Resource + private PermissionService permissionService; + + @Resource + private RoleMapper roleMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + @LogRecord(type = SYSTEM_ROLE_TYPE, subType = SYSTEM_ROLE_CREATE_SUB_TYPE, bizNo = "{{#role.id}}", + success = SYSTEM_ROLE_CREATE_SUCCESS) + public Long createRole(RoleSaveReqVO createReqVO, Integer type) { + // 1. 校验角色 + validateRoleDuplicate(createReqVO.getName(), createReqVO.getCode(), null); + + // 2. 插入到数据库 + RoleDO role = BeanUtils.toBean(createReqVO, RoleDO.class) + .setType(ObjectUtil.defaultIfNull(type, RoleTypeEnum.CUSTOM.getType())) + .setStatus(CommonStatusEnum.ENABLE.getStatus()) + .setDataScope(DataScopeEnum.ALL.getScope()); // 默认可查看所有数据。原因是,可能一些项目不需要项目权限 + roleMapper.insert(role); + + // 3. 记录操作日志上下文 + LogRecordContext.putVariable("role", role); + return role.getId(); + } + + @Override + @CacheEvict(value = RedisKeyConstants.ROLE, key = "#updateReqVO.id") + @LogRecord(type = SYSTEM_ROLE_TYPE, subType = SYSTEM_ROLE_UPDATE_SUB_TYPE, bizNo = "{{#updateReqVO.id}}", + success = SYSTEM_ROLE_UPDATE_SUCCESS) + public void updateRole(RoleSaveReqVO updateReqVO) { + // 1.1 校验是否可以更新 + RoleDO role = validateRoleForUpdate(updateReqVO.getId()); + // 1.2 校验角色的唯一字段是否重复 + validateRoleDuplicate(updateReqVO.getName(), updateReqVO.getCode(), updateReqVO.getId()); + + // 2. 更新到数据库 + RoleDO updateObj = BeanUtils.toBean(updateReqVO, RoleDO.class); + roleMapper.updateById(updateObj); + + // 3. 记录操作日志上下文 + LogRecordContext.putVariable("role", role); + } + + @Override + @CacheEvict(value = RedisKeyConstants.ROLE, key = "#id") + public void updateRoleDataScope(Long id, Integer dataScope, Set dataScopeDeptIds) { + // 校验是否可以更新 + validateRoleForUpdate(id); + + // 更新数据范围 + RoleDO updateObject = new RoleDO(); + updateObject.setId(id); + updateObject.setDataScope(dataScope); + updateObject.setDataScopeDeptIds(dataScopeDeptIds); + roleMapper.updateById(updateObject); + } + + @Override + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = RedisKeyConstants.ROLE, key = "#id") + @LogRecord(type = SYSTEM_ROLE_TYPE, subType = SYSTEM_ROLE_DELETE_SUB_TYPE, bizNo = "{{#id}}", + success = SYSTEM_ROLE_DELETE_SUCCESS) + public void deleteRole(Long id) { + // 1. 校验是否可以更新 + RoleDO role = validateRoleForUpdate(id); + + // 2.1 标记删除 + roleMapper.deleteById(id); + // 2.2 删除相关数据 + permissionService.processRoleDeleted(id); + + // 3. 记录操作日志上下文 + LogRecordContext.putVariable("role", role); + } + + /** + * 校验角色的唯一字段是否重复 + * + * 1. 是否存在相同名字的角色 + * 2. 是否存在相同编码的角色 + * + * @param name 角色名字 + * @param code 角色额编码 + * @param id 角色编号 + */ + @VisibleForTesting + void validateRoleDuplicate(String name, String code, Long id) { + // 0. 超级管理员,不允许创建 + if (RoleCodeEnum.isSuperAdmin(code)) { + throw exception(ROLE_ADMIN_CODE_ERROR, code); + } + // 1. 该 name 名字被其它角色所使用 + RoleDO role = roleMapper.selectByName(name); + if (role != null && !role.getId().equals(id)) { + throw exception(ROLE_NAME_DUPLICATE, name); + } + // 2. 是否存在相同编码的角色 + if (!StringUtils.hasText(code)) { + return; + } + // 该 code 编码被其它角色所使用 + role = roleMapper.selectByCode(code); + if (role != null && !role.getId().equals(id)) { + throw exception(ROLE_CODE_DUPLICATE, code); + } + } + + /** + * 校验角色是否可以被更新 + * + * @param id 角色编号 + */ + @VisibleForTesting + RoleDO validateRoleForUpdate(Long id) { + RoleDO role = roleMapper.selectById(id); + if (role == null) { + throw exception(ROLE_NOT_EXISTS); + } + // 内置角色,不允许删除 + if (RoleTypeEnum.SYSTEM.getType().equals(role.getType())) { + throw exception(ROLE_CAN_NOT_UPDATE_SYSTEM_TYPE_ROLE); + } + return role; + } + + @Override + public RoleDO getRole(Long id) { + return roleMapper.selectById(id); + } + + @Override + @Cacheable(value = RedisKeyConstants.ROLE, key = "#id", + unless = "#result == null") + public RoleDO getRoleFromCache(Long id) { + return roleMapper.selectById(id); + } + + + @Override + public List getRoleListByStatus(Collection statuses) { + return roleMapper.selectListByStatus(statuses); + } + + @Override + public List getRoleList() { + return roleMapper.selectList(); + } + + @Override + public List getRoleList(Collection ids) { + if (CollectionUtil.isEmpty(ids)) { + return Collections.emptyList(); + } + return roleMapper.selectBatchIds(ids); + } + + @Override + public List getRoleListFromCache(Collection ids) { + if (CollectionUtil.isEmpty(ids)) { + return Collections.emptyList(); + } + // 这里采用 for 循环从缓存中获取,主要考虑 Spring CacheManager 无法批量操作的问题 + RoleServiceImpl self = getSelf(); + return CollectionUtils.convertList(ids, self::getRoleFromCache); + } + + @Override + public PageResult getRolePage(RolePageReqVO reqVO) { + return roleMapper.selectPage(reqVO); + } + + @Override + public boolean hasAnySuperAdmin(Collection ids) { + if (CollectionUtil.isEmpty(ids)) { + return false; + } + RoleServiceImpl self = getSelf(); + return ids.stream().anyMatch(id -> { + RoleDO role = self.getRoleFromCache(id); + return role != null && RoleCodeEnum.isSuperAdmin(role.getCode()); + }); + } + + @Override + public void validateRoleList(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 获得角色信息 + List roles = roleMapper.selectBatchIds(ids); + Map roleMap = convertMap(roles, RoleDO::getId); + // 校验 + ids.forEach(id -> { + RoleDO role = roleMap.get(id); + if (role == null) { + throw exception(ROLE_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())) { + throw exception(ROLE_IS_DISABLE, role.getName()); + } + }); + } + + /** + * 获得自身的代理对象,解决 AOP 生效问题 + * + * @return 自己 + */ + private RoleServiceImpl getSelf() { + return SpringUtil.getBean(getClass()); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsChannelService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsChannelService.java new file mode 100644 index 0000000..0b6912f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsChannelService.java @@ -0,0 +1,81 @@ +package com.win.module.system.service.sms; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.framework.sms.core.client.SmsClient; +import com.win.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; +import com.win.module.system.controller.admin.sms.vo.channel.SmsChannelSaveReqVO; +import com.win.module.system.dal.dataobject.sms.SmsChannelDO; + +import jakarta.validation.Valid; +import java.util.List; + +/** + * 短信渠道 Service 接口 + * + * @author zzf + * @since 2021/1/25 9:24 + */ +public interface SmsChannelService { + + /** + * 创建短信渠道 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSmsChannel(@Valid SmsChannelSaveReqVO createReqVO); + + /** + * 更新短信渠道 + * + * @param updateReqVO 更新信息 + */ + void updateSmsChannel(@Valid SmsChannelSaveReqVO updateReqVO); + + /** + * 删除短信渠道 + * + * @param id 编号 + */ + void deleteSmsChannel(Long id); + + /** + * 获得短信渠道 + * + * @param id 编号 + * @return 短信渠道 + */ + SmsChannelDO getSmsChannel(Long id); + + /** + * 获得所有短信渠道列表 + * + * @return 短信渠道列表 + */ + List getSmsChannelList(); + + /** + * 获得短信渠道分页 + * + * @param pageReqVO 分页查询 + * @return 短信渠道分页 + */ + PageResult getSmsChannelPage(SmsChannelPageReqVO pageReqVO); + + /** + * 获得短信客户端 + * + * @param id 编号 + * @return 短信客户端 + */ + SmsClient getSmsClient(Long id); + + /** + * 获得短信客户端 + * + * @param code 编码 + * @return 短信客户端 + */ + SmsClient getSmsClient(String code); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsChannelServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsChannelServiceImpl.java new file mode 100644 index 0000000..994ddf9 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsChannelServiceImpl.java @@ -0,0 +1,166 @@ +package com.win.module.system.service.sms; + +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.framework.sms.core.client.SmsClient; +import com.win.module.system.framework.sms.core.client.SmsClientFactory; +import com.win.module.system.framework.sms.core.property.SmsChannelProperties; +import com.win.module.system.controller.admin.sms.vo.channel.SmsChannelPageReqVO; +import com.win.module.system.controller.admin.sms.vo.channel.SmsChannelSaveReqVO; +import com.win.module.system.dal.dataobject.sms.SmsChannelDO; +import com.win.module.system.dal.mysql.sms.SmsChannelMapper; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.time.Duration; +import java.util.List; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.cache.CacheUtils.buildAsyncReloadingCache; +import static com.win.module.system.enums.ErrorCodeConstants.SMS_CHANNEL_HAS_CHILDREN; +import static com.win.module.system.enums.ErrorCodeConstants.SMS_CHANNEL_NOT_EXISTS; + +/** + * 短信渠道 Service 实现类 + * + * @author zzf + */ +@Service +@Slf4j +public class SmsChannelServiceImpl implements SmsChannelService { + + /** + * {@link SmsClient} 缓存,通过它异步刷新 smsClientFactory + */ + @Getter + private final LoadingCache idClientCache = buildAsyncReloadingCache(Duration.ofSeconds(10L), + new CacheLoader() { + + @Override + public SmsClient load(Long id) { + // 查询,然后尝试刷新 + SmsChannelDO channel = smsChannelMapper.selectById(id); + if (channel != null) { + SmsChannelProperties properties = BeanUtils.toBean(channel, SmsChannelProperties.class); + smsClientFactory.createOrUpdateSmsClient(properties); + } + return smsClientFactory.getSmsClient(id); + } + + }); + + /** + * {@link SmsClient} 缓存,通过它异步刷新 smsClientFactory + */ + @Getter + private final LoadingCache codeClientCache = buildAsyncReloadingCache(Duration.ofSeconds(60L), + new CacheLoader() { + + @Override + public SmsClient load(String code) { + // 查询,然后尝试刷新 + SmsChannelDO channel = smsChannelMapper.selectByCode(code); + if (channel != null) { + SmsChannelProperties properties = BeanUtils.toBean(channel, SmsChannelProperties.class); + smsClientFactory.createOrUpdateSmsClient(properties); + } + return smsClientFactory.getSmsClient(code); + } + + }); + + @Resource + private SmsClientFactory smsClientFactory; + + @Resource + private SmsChannelMapper smsChannelMapper; + + @Resource + private SmsTemplateService smsTemplateService; + + @Override + public Long createSmsChannel(SmsChannelSaveReqVO createReqVO) { + SmsChannelDO channel = BeanUtils.toBean(createReqVO, SmsChannelDO.class); + smsChannelMapper.insert(channel); + return channel.getId(); + } + + @Override + public void updateSmsChannel(SmsChannelSaveReqVO updateReqVO) { + // 校验存在 + SmsChannelDO channel = validateSmsChannelExists(updateReqVO.getId()); + // 更新 + SmsChannelDO updateObj = BeanUtils.toBean(updateReqVO, SmsChannelDO.class); + smsChannelMapper.updateById(updateObj); + + // 清空缓存 + clearCache(updateReqVO.getId(), channel.getCode()); + } + + @Override + public void deleteSmsChannel(Long id) { + // 校验存在 + SmsChannelDO channel = validateSmsChannelExists(id); + // 校验是否有在使用该账号的模版 + if (smsTemplateService.getSmsTemplateCountByChannelId(id) > 0) { + throw exception(SMS_CHANNEL_HAS_CHILDREN); + } + // 删除 + smsChannelMapper.deleteById(id); + + // 清空缓存 + clearCache(id, channel.getCode()); + } + + /** + * 清空指定渠道编号的缓存 + * + * @param id 渠道编号 + * @param code 渠道编码 + */ + private void clearCache(Long id, String code) { + idClientCache.invalidate(id); + if (StrUtil.isNotEmpty(code)) { + codeClientCache.invalidate(code); + } + } + + private SmsChannelDO validateSmsChannelExists(Long id) { + SmsChannelDO channel = smsChannelMapper.selectById(id); + if (channel == null) { + throw exception(SMS_CHANNEL_NOT_EXISTS); + } + return channel; + } + + @Override + public SmsChannelDO getSmsChannel(Long id) { + return smsChannelMapper.selectById(id); + } + + @Override + public List getSmsChannelList() { + return smsChannelMapper.selectList(); + } + + @Override + public PageResult getSmsChannelPage(SmsChannelPageReqVO pageReqVO) { + return smsChannelMapper.selectPage(pageReqVO); + } + + @Override + public SmsClient getSmsClient(Long id) { + return idClientCache.getUnchecked(id); + } + + @Override + public SmsClient getSmsClient(String code) { + return codeClientCache.getUnchecked(code); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsCodeService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsCodeService.java new file mode 100644 index 0000000..d300f64 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsCodeService.java @@ -0,0 +1,40 @@ +package com.win.module.system.service.sms; + +import com.win.framework.common.exception.ServiceException; +import com.win.module.system.api.sms.dto.code.SmsCodeSendReqDTO; +import com.win.module.system.api.sms.dto.code.SmsCodeUseReqDTO; +import com.win.module.system.api.sms.dto.code.SmsCodeValidateReqDTO; + +import jakarta.validation.Valid; + +/** + * 短信验证码 Service 接口 + * + * @author 芋道源码 + */ +public interface SmsCodeService { + + /** + * 创建短信验证码,并进行发送 + * + * @param reqDTO 发送请求 + */ + void sendSmsCode(@Valid SmsCodeSendReqDTO reqDTO); + + /** + * 验证短信验证码,并进行使用 + * 如果正确,则将验证码标记成已使用 + * 如果错误,则抛出 {@link ServiceException} 异常 + * + * @param reqDTO 使用请求 + */ + void useSmsCode(@Valid SmsCodeUseReqDTO reqDTO); + + /** + * 检查验证码是否有效 + * + * @param reqDTO 校验请求 + */ + void validateSmsCode(@Valid SmsCodeValidateReqDTO reqDTO); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsCodeServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsCodeServiceImpl.java new file mode 100644 index 0000000..0203b7b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsCodeServiceImpl.java @@ -0,0 +1,111 @@ +package com.win.module.system.service.sms; + +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.map.MapUtil; +import com.win.module.system.api.sms.dto.code.SmsCodeSendReqDTO; +import com.win.module.system.api.sms.dto.code.SmsCodeUseReqDTO; +import com.win.module.system.api.sms.dto.code.SmsCodeValidateReqDTO; +import com.win.module.system.dal.dataobject.sms.SmsCodeDO; +import com.win.module.system.dal.mysql.sms.SmsCodeMapper; +import com.win.module.system.enums.sms.SmsSceneEnum; +import com.win.module.system.framework.sms.config.SmsCodeProperties; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.randomInt; +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.date.DateUtils.isToday; +import static com.win.module.system.enums.ErrorCodeConstants.*; + +/** + * 短信验证码 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class SmsCodeServiceImpl implements SmsCodeService { + + @Resource + private SmsCodeProperties smsCodeProperties; + + @Resource + private SmsCodeMapper smsCodeMapper; + + @Resource + private SmsSendService smsSendService; + + @Override + public void sendSmsCode(SmsCodeSendReqDTO reqDTO) { + SmsSceneEnum sceneEnum = SmsSceneEnum.getCodeByScene(reqDTO.getScene()); + Assert.notNull(sceneEnum, "验证码场景({}) 查找不到配置", reqDTO.getScene()); + // 创建验证码 + String code = createSmsCode(reqDTO.getMobile(), reqDTO.getScene(), reqDTO.getCreateIp()); + // 发送验证码 + smsSendService.sendSingleSms(reqDTO.getMobile(), null, null, + sceneEnum.getTemplateCode(), MapUtil.of("code", code)); + } + + private String createSmsCode(String mobile, Integer scene, String ip) { + // 校验是否可以发送验证码,不用筛选场景 + SmsCodeDO lastSmsCode = smsCodeMapper.selectLastByMobile(mobile, null, null); + if (lastSmsCode != null) { + if (LocalDateTimeUtil.between(lastSmsCode.getCreateTime(), LocalDateTime.now()).toMillis() + < smsCodeProperties.getSendFrequency().toMillis()) { // 发送过于频繁 + throw exception(SMS_CODE_SEND_TOO_FAST); + } + if (isToday(lastSmsCode.getCreateTime()) && // 必须是今天,才能计算超过当天的上限 + lastSmsCode.getTodayIndex() >= smsCodeProperties.getSendMaximumQuantityPerDay()) { // 超过当天发送的上限。 + throw exception(SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY); + } + // TODO 芋艿:提升,每个 IP 每天可发送数量 + // TODO 芋艿:提升,每个 IP 每小时可发送数量 + } + + // 创建验证码记录 + String code = String.valueOf(randomInt(smsCodeProperties.getBeginCode(), smsCodeProperties.getEndCode() + 1)); + SmsCodeDO newSmsCode = SmsCodeDO.builder().mobile(mobile).code(code).scene(scene) + .todayIndex(lastSmsCode != null && isToday(lastSmsCode.getCreateTime()) ? lastSmsCode.getTodayIndex() + 1 : 1) + .createIp(ip).used(false).build(); + smsCodeMapper.insert(newSmsCode); + return code; + } + + @Override + public void useSmsCode(SmsCodeUseReqDTO reqDTO) { + // 检测验证码是否有效 + SmsCodeDO lastSmsCode = validateSmsCode0(reqDTO.getMobile(), reqDTO.getCode(), reqDTO.getScene()); + // 使用验证码 + smsCodeMapper.updateById(SmsCodeDO.builder().id(lastSmsCode.getId()) + .used(true).usedTime(LocalDateTime.now()).usedIp(reqDTO.getUsedIp()).build()); + } + + @Override + public void validateSmsCode(SmsCodeValidateReqDTO reqDTO) { + validateSmsCode0(reqDTO.getMobile(), reqDTO.getCode(), reqDTO.getScene()); + } + + private SmsCodeDO validateSmsCode0(String mobile, String code, Integer scene) { + // 校验验证码 + SmsCodeDO lastSmsCode = smsCodeMapper.selectLastByMobile(mobile, code, scene); + // 若验证码不存在,抛出异常 + if (lastSmsCode == null) { + throw exception(SMS_CODE_NOT_FOUND); + } + // 超过时间 + if (LocalDateTimeUtil.between(lastSmsCode.getCreateTime(), LocalDateTime.now()).toMillis() + >= smsCodeProperties.getExpireTimes().toMillis()) { // 验证码已过期 + throw exception(SMS_CODE_EXPIRED); + } + // 判断验证码是否已被使用 + if (Boolean.TRUE.equals(lastSmsCode.getUsed())) { + throw exception(SMS_CODE_USED); + } + return lastSmsCode; + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsLogService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsLogService.java new file mode 100644 index 0000000..72725f6 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsLogService.java @@ -0,0 +1,68 @@ +package com.win.module.system.service.sms; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; +import com.win.module.system.dal.dataobject.sms.SmsLogDO; +import com.win.module.system.dal.dataobject.sms.SmsTemplateDO; + +import java.time.LocalDateTime; +import java.util.Map; + +/** + * 短信日志 Service 接口 + * + * @author zzf + * @date 13:48 2021/3/2 + */ +public interface SmsLogService { + + /** + * 创建短信日志 + * + * @param mobile 手机号 + * @param userId 用户编号 + * @param userType 用户类型 + * @param isSend 是否发送 + * @param template 短信模板 + * @param templateContent 短信内容 + * @param templateParams 短信参数 + * @return 发送日志编号 + */ + Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend, + SmsTemplateDO template, String templateContent, Map templateParams); + + /** + * 更新日志的发送结果 + * + * @param id 日志编号 + * @param success 发送是否成功 + * @param apiSendCode 短信 API 发送结果的编码 + * @param apiSendMsg 短信 API 发送失败的提示 + * @param apiRequestId 短信 API 发送返回的唯一请求 ID + * @param apiSerialNo 短信 API 发送返回的序号 + */ + void updateSmsSendResult(Long id, Boolean success, + String apiSendCode, String apiSendMsg, + String apiRequestId, String apiSerialNo); + + /** + * 更新日志的接收结果 + * + * @param id 日志编号 + * @param success 是否接收成功 + * @param receiveTime 用户接收时间 + * @param apiReceiveCode API 接收结果的编码 + * @param apiReceiveMsg API 接收结果的说明 + */ + void updateSmsReceiveResult(Long id, Boolean success, + LocalDateTime receiveTime, String apiReceiveCode, String apiReceiveMsg); + + /** + * 获得短信日志分页 + * + * @param pageReqVO 分页查询 + * @return 短信日志分页 + */ + PageResult getSmsLogPage(SmsLogPageReqVO pageReqVO); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsLogServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsLogServiceImpl.java new file mode 100644 index 0000000..be08516 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsLogServiceImpl.java @@ -0,0 +1,79 @@ +package com.win.module.system.service.sms; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.sms.vo.log.SmsLogPageReqVO; +import com.win.module.system.dal.dataobject.sms.SmsLogDO; +import com.win.module.system.dal.dataobject.sms.SmsTemplateDO; +import com.win.module.system.dal.mysql.sms.SmsLogMapper; +import com.win.module.system.enums.sms.SmsReceiveStatusEnum; +import com.win.module.system.enums.sms.SmsSendStatusEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.time.LocalDateTime; +import java.util.Map; +import java.util.Objects; + +/** + * 短信日志 Service 实现类 + * + * @author zzf + */ +@Slf4j +@Service +public class SmsLogServiceImpl implements SmsLogService { + + @Resource + private SmsLogMapper smsLogMapper; + + @Override + public Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend, + SmsTemplateDO template, String templateContent, Map templateParams) { + SmsLogDO.SmsLogDOBuilder logBuilder = SmsLogDO.builder(); + // 根据是否要发送,设置状态 + logBuilder.sendStatus(Objects.equals(isSend, true) ? SmsSendStatusEnum.INIT.getStatus() + : SmsSendStatusEnum.IGNORE.getStatus()); + // 设置手机相关字段 + logBuilder.mobile(mobile).userId(userId).userType(userType); + // 设置模板相关字段 + logBuilder.templateId(template.getId()).templateCode(template.getCode()).templateType(template.getType()); + logBuilder.templateContent(templateContent).templateParams(templateParams) + .apiTemplateId(template.getApiTemplateId()); + // 设置渠道相关字段 + logBuilder.channelId(template.getChannelId()).channelCode(template.getChannelCode()); + // 设置接收相关字段 + logBuilder.receiveStatus(SmsReceiveStatusEnum.INIT.getStatus()); + + // 插入数据库 + SmsLogDO logDO = logBuilder.build(); + smsLogMapper.insert(logDO); + return logDO.getId(); + } + + @Override + public void updateSmsSendResult(Long id, Boolean success, + String apiSendCode, String apiSendMsg, + String apiRequestId, String apiSerialNo) { + SmsSendStatusEnum sendStatus = success ? SmsSendStatusEnum.SUCCESS : SmsSendStatusEnum.FAILURE; + smsLogMapper.updateById(SmsLogDO.builder().id(id) + .sendStatus(sendStatus.getStatus()).sendTime(LocalDateTime.now()) + .apiSendCode(apiSendCode).apiSendMsg(apiSendMsg) + .apiRequestId(apiRequestId).apiSerialNo(apiSerialNo).build()); + } + + @Override + public void updateSmsReceiveResult(Long id, Boolean success, LocalDateTime receiveTime, + String apiReceiveCode, String apiReceiveMsg) { + SmsReceiveStatusEnum receiveStatus = Objects.equals(success, true) ? + SmsReceiveStatusEnum.SUCCESS : SmsReceiveStatusEnum.FAILURE; + smsLogMapper.updateById(SmsLogDO.builder().id(id).receiveStatus(receiveStatus.getStatus()) + .receiveTime(receiveTime).apiReceiveCode(apiReceiveCode).apiReceiveMsg(apiReceiveMsg).build()); + } + + @Override + public PageResult getSmsLogPage(SmsLogPageReqVO pageReqVO) { + return smsLogMapper.selectPage(pageReqVO); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsSendService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsSendService.java new file mode 100644 index 0000000..521bef8 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsSendService.java @@ -0,0 +1,78 @@ +package com.win.module.system.service.sms; + +import com.win.module.system.mq.message.sms.SmsSendMessage; + +import java.util.List; +import java.util.Map; + +/** + * 短信发送 Service 接口 + * + * @author 芋道源码 + */ +public interface SmsSendService { + + /** + * 发送单条短信给管理后台的用户 + * + * 在 mobile 为空时,使用 userId 加载对应管理员的手机号 + * + * @param mobile 手机号 + * @param userId 用户编号 + * @param templateCode 短信模板编号 + * @param templateParams 短信模板参数 + * @return 发送日志编号 + */ + Long sendSingleSmsToAdmin(String mobile, Long userId, + String templateCode, Map templateParams); + + /** + * 发送单条短信给用户 APP 的用户 + * + * 在 mobile 为空时,使用 userId 加载对应会员的手机号 + * + * @param mobile 手机号 + * @param userId 用户编号 + * @param templateCode 短信模板编号 + * @param templateParams 短信模板参数 + * @return 发送日志编号 + */ + Long sendSingleSmsToMember(String mobile, Long userId, + String templateCode, Map templateParams); + + /** + * 发送单条短信给用户 + * + * @param mobile 手机号 + * @param userId 用户编号 + * @param userType 用户类型 + * @param templateCode 短信模板编号 + * @param templateParams 短信模板参数 + * @return 发送日志编号 + */ + Long sendSingleSms(String mobile, Long userId, Integer userType, + String templateCode, Map templateParams); + + default void sendBatchSms(List mobiles, List userIds, Integer userType, + String templateCode, Map templateParams) { + throw new UnsupportedOperationException("暂时不支持该操作,感兴趣可以实现该功能哟!"); + } + + /** + * 执行真正的短信发送 + * 注意,该方法仅仅提供给 MQ Consumer 使用 + * + * @param message 短信 + */ + void doSendSms(SmsSendMessage message); + + /** + * 接收短信的接收结果 + * + * @param channelCode 渠道编码 + * @param text 结果内容 + * @throws Throwable 处理失败时,抛出异常 + */ + void receiveSmsStatus(String channelCode, String text) throws Throwable; + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsSendServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsSendServiceImpl.java new file mode 100644 index 0000000..c49189e --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsSendServiceImpl.java @@ -0,0 +1,191 @@ +package com.win.module.system.service.sms; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.exceptions.ExceptionUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.core.KeyValue; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.enums.UserTypeEnum; +import com.win.framework.datapermission.core.annotation.DataPermission; +import com.win.module.system.framework.sms.core.client.SmsClient; +import com.win.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO; +import com.win.module.system.framework.sms.core.client.dto.SmsSendRespDTO; +import com.win.module.system.dal.dataobject.sms.SmsChannelDO; +import com.win.module.system.dal.dataobject.sms.SmsTemplateDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.module.system.mq.message.sms.SmsSendMessage; +import com.win.module.system.mq.producer.sms.SmsProducer; +import com.win.module.system.service.member.MemberService; +import com.win.module.system.service.user.AdminUserService; +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.system.enums.ErrorCodeConstants.*; + +/** + * 短信发送 Service 发送的实现 + * + * @author 芋道源码 + */ +@Service +@Slf4j +public class SmsSendServiceImpl implements SmsSendService { + + @Resource + private AdminUserService adminUserService; + @Resource + private MemberService memberService; + @Resource + private SmsChannelService smsChannelService; + @Resource + private SmsTemplateService smsTemplateService; + @Resource + private SmsLogService smsLogService; + + @Resource + private SmsProducer smsProducer; + + @Override + @DataPermission(enable = false) // 发送短信时,无需考虑数据权限 + public Long sendSingleSmsToAdmin(String mobile, Long userId, String templateCode, Map templateParams) { + // 如果 mobile 为空,则加载用户编号对应的手机号 + if (StrUtil.isEmpty(mobile)) { + AdminUserDO user = adminUserService.getUser(userId); + if (user != null) { + mobile = user.getMobile(); + } + } + // 执行发送 + return sendSingleSms(mobile, userId, UserTypeEnum.ADMIN.getValue(), templateCode, templateParams); + } + + @Override + public Long sendSingleSmsToMember(String mobile, Long userId, String templateCode, Map templateParams) { + // 如果 mobile 为空,则加载用户编号对应的手机号 + if (StrUtil.isEmpty(mobile)) { + mobile = memberService.getMemberUserMobile(userId); + } + // 执行发送 + return sendSingleSms(mobile, userId, UserTypeEnum.MEMBER.getValue(), templateCode, templateParams); + } + + @Override + public Long sendSingleSms(String mobile, Long userId, Integer userType, + String templateCode, Map templateParams) { + // 校验短信模板是否合法 + SmsTemplateDO template = validateSmsTemplate(templateCode); + // 校验短信渠道是否合法 + SmsChannelDO smsChannel = validateSmsChannel(template.getChannelId()); + + // 校验手机号码是否存在 + mobile = validateMobile(mobile); + // 构建有序的模板参数。为什么放在这个位置,是提前保证模板参数的正确性,而不是到了插入发送日志 + List> newTemplateParams = buildTemplateParams(template, templateParams); + + // 创建发送日志。如果模板被禁用,则不发送短信,只记录日志 + Boolean isSend = CommonStatusEnum.ENABLE.getStatus().equals(template.getStatus()) + && CommonStatusEnum.ENABLE.getStatus().equals(smsChannel.getStatus()); + String content = smsTemplateService.formatSmsTemplateContent(template.getContent(), templateParams); + Long sendLogId = smsLogService.createSmsLog(mobile, userId, userType, isSend, template, content, templateParams); + + // 发送 MQ 消息,异步执行发送短信 + if (isSend) { + smsProducer.sendSmsSendMessage(sendLogId, mobile, template.getChannelId(), + template.getApiTemplateId(), newTemplateParams); + } + return sendLogId; + } + + @VisibleForTesting + SmsChannelDO validateSmsChannel(Long channelId) { + // 获得短信模板。考虑到效率,从缓存中获取 + SmsChannelDO channelDO = smsChannelService.getSmsChannel(channelId); + // 短信模板不存在 + if (channelDO == null) { + throw exception(SMS_CHANNEL_NOT_EXISTS); + } + return channelDO; + } + + @VisibleForTesting + SmsTemplateDO validateSmsTemplate(String templateCode) { + // 获得短信模板。考虑到效率,从缓存中获取 + SmsTemplateDO template = smsTemplateService.getSmsTemplateByCodeFromCache(templateCode); + // 短信模板不存在 + if (template == null) { + throw exception(SMS_SEND_TEMPLATE_NOT_EXISTS); + } + return template; + } + + /** + * 将参数模板,处理成有序的 KeyValue 数组 + *

    + * 原因是,部分短信平台并不是使用 key 作为参数,而是数组下标,例如说 腾讯云 + * + * @param template 短信模板 + * @param templateParams 原始参数 + * @return 处理后的参数 + */ + @VisibleForTesting + List> buildTemplateParams(SmsTemplateDO template, Map templateParams) { + return template.getParams().stream().map(key -> { + Object value = templateParams.get(key); + if (value == null) { + throw exception(SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS, key); + } + return new KeyValue<>(key, value); + }).collect(Collectors.toList()); + } + + @VisibleForTesting + public String validateMobile(String mobile) { + if (StrUtil.isEmpty(mobile)) { + throw exception(SMS_SEND_MOBILE_NOT_EXISTS); + } + return mobile; + } + + @Override + public void doSendSms(SmsSendMessage message) { + // 获得渠道对应的 SmsClient 客户端 + SmsClient smsClient = smsChannelService.getSmsClient(message.getChannelId()); + Assert.notNull(smsClient, "短信客户端({}) 不存在", message.getChannelId()); + // 发送短信 + try { + SmsSendRespDTO sendResponse = smsClient.sendSms(message.getLogId(), message.getMobile(), + message.getApiTemplateId(), message.getTemplateParams()); + smsLogService.updateSmsSendResult(message.getLogId(), sendResponse.getSuccess(), + sendResponse.getApiCode(), sendResponse.getApiMsg(), + sendResponse.getApiRequestId(), sendResponse.getSerialNo()); + } catch (Throwable ex) { + log.error("[doSendSms][发送短信异常,日志编号({})]", message.getLogId(), ex); + smsLogService.updateSmsSendResult(message.getLogId(), false, + "EXCEPTION", ExceptionUtil.getRootCauseMessage(ex), null, null); + } + } + + @Override + public void receiveSmsStatus(String channelCode, String text) throws Throwable { + // 获得渠道对应的 SmsClient 客户端 + SmsClient smsClient = smsChannelService.getSmsClient(channelCode); + Assert.notNull(smsClient, "短信客户端({}) 不存在", channelCode); + // 解析内容 + List receiveResults = smsClient.parseSmsReceiveStatus(text); + if (CollUtil.isEmpty(receiveResults)) { + return; + } + // 更新短信日志的接收结果. 因为量一般不大,所以先使用 for 循环更新 + receiveResults.forEach(result -> smsLogService.updateSmsReceiveResult(result.getLogId(), + result.getSuccess(), result.getReceiveTime(), result.getErrorCode(), result.getErrorMsg())); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsTemplateService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsTemplateService.java new file mode 100644 index 0000000..a127709 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsTemplateService.java @@ -0,0 +1,82 @@ +package com.win.module.system.service.sms; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; +import com.win.module.system.controller.admin.sms.vo.template.SmsTemplateSaveReqVO; +import com.win.module.system.dal.dataobject.sms.SmsTemplateDO; + +import jakarta.validation.Valid; +import java.util.Map; + +/** + * 短信模板 Service 接口 + * + * @author zzf + * @since 2021/1/25 9:24 + */ +public interface SmsTemplateService { + + /** + * 创建短信模板 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSmsTemplate(@Valid SmsTemplateSaveReqVO createReqVO); + + /** + * 更新短信模板 + * + * @param updateReqVO 更新信息 + */ + void updateSmsTemplate(@Valid SmsTemplateSaveReqVO updateReqVO); + + /** + * 删除短信模板 + * + * @param id 编号 + */ + void deleteSmsTemplate(Long id); + + /** + * 获得短信模板 + * + * @param id 编号 + * @return 短信模板 + */ + SmsTemplateDO getSmsTemplate(Long id); + + /** + * 获得短信模板,从缓存中 + * + * @param code 模板编码 + * @return 短信模板 + */ + SmsTemplateDO getSmsTemplateByCodeFromCache(String code); + + /** + * 获得短信模板分页 + * + * @param pageReqVO 分页查询 + * @return 短信模板分页 + */ + PageResult getSmsTemplatePage(SmsTemplatePageReqVO pageReqVO); + + /** + * 获得指定短信渠道下的短信模板数量 + * + * @param channelId 短信渠道编号 + * @return 数量 + */ + Long getSmsTemplateCountByChannelId(Long channelId); + + /** + * 格式化短信内容 + * + * @param content 短信模板的内容 + * @param params 内容的参数 + * @return 格式化后的内容 + */ + String formatSmsTemplateContent(String content, Map params); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsTemplateServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsTemplateServiceImpl.java new file mode 100644 index 0000000..123392b --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/sms/SmsTemplateServiceImpl.java @@ -0,0 +1,199 @@ +package com.win.module.system.service.sms; + +import cn.hutool.core.exceptions.ExceptionUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ReUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.framework.sms.core.client.SmsClient; +import com.win.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO; +import com.win.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum; +import com.win.module.system.controller.admin.sms.vo.template.SmsTemplatePageReqVO; +import com.win.module.system.controller.admin.sms.vo.template.SmsTemplateSaveReqVO; +import com.win.module.system.dal.dataobject.sms.SmsChannelDO; +import com.win.module.system.dal.dataobject.sms.SmsTemplateDO; +import com.win.module.system.dal.mysql.sms.SmsTemplateMapper; +import com.win.module.system.dal.redis.RedisKeyConstants; +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.regex.Pattern; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.system.enums.ErrorCodeConstants.*; + +/** + * 短信模板 Service 实现类 + * + * @author zzf + * @since 2021/1/25 9:25 + */ +@Service +@Slf4j +public class SmsTemplateServiceImpl implements SmsTemplateService { + + /** + * 正则表达式,匹配 {} 中的变量 + */ + private static final Pattern PATTERN_PARAMS = Pattern.compile("\\{(.*?)}"); + + @Resource + private SmsTemplateMapper smsTemplateMapper; + + @Resource + private SmsChannelService smsChannelService; + + @Override + public Long createSmsTemplate(SmsTemplateSaveReqVO createReqVO) { + // 校验短信渠道 + SmsChannelDO channelDO = validateSmsChannel(createReqVO.getChannelId()); + // 校验短信编码是否重复 + validateSmsTemplateCodeDuplicate(null, createReqVO.getCode()); + // 校验短信模板 + validateApiTemplate(createReqVO.getChannelId(), createReqVO.getApiTemplateId()); + + // 插入 + SmsTemplateDO template = BeanUtils.toBean(createReqVO, SmsTemplateDO.class); + template.setParams(parseTemplateContentParams(template.getContent())); + template.setChannelCode(channelDO.getCode()); + smsTemplateMapper.insert(template); + // 返回 + return template.getId(); + } + + @Override + @CacheEvict(cacheNames = RedisKeyConstants.SMS_TEMPLATE, + allEntries = true) // allEntries 清空所有缓存,因为可能修改到 code 字段,不好清理 + public void updateSmsTemplate(SmsTemplateSaveReqVO updateReqVO) { + // 校验存在 + validateSmsTemplateExists(updateReqVO.getId()); + // 校验短信渠道 + SmsChannelDO channelDO = validateSmsChannel(updateReqVO.getChannelId()); + // 校验短信编码是否重复 + validateSmsTemplateCodeDuplicate(updateReqVO.getId(), updateReqVO.getCode()); + // 校验短信模板 + validateApiTemplate(updateReqVO.getChannelId(), updateReqVO.getApiTemplateId()); + + // 更新 + SmsTemplateDO updateObj = BeanUtils.toBean(updateReqVO, SmsTemplateDO.class); + updateObj.setParams(parseTemplateContentParams(updateObj.getContent())); + updateObj.setChannelCode(channelDO.getCode()); + smsTemplateMapper.updateById(updateObj); + } + + @Override + @CacheEvict(cacheNames = RedisKeyConstants.SMS_TEMPLATE, + allEntries = true) // allEntries 清空所有缓存,因为 id 不是直接的缓存 code,不好清理 + public void deleteSmsTemplate(Long id) { + // 校验存在 + validateSmsTemplateExists(id); + // 更新 + smsTemplateMapper.deleteById(id); + } + + private void validateSmsTemplateExists(Long id) { + if (smsTemplateMapper.selectById(id) == null) { + throw exception(SMS_TEMPLATE_NOT_EXISTS); + } + } + + @Override + public SmsTemplateDO getSmsTemplate(Long id) { + return smsTemplateMapper.selectById(id); + } + + @Override + @Cacheable(cacheNames = RedisKeyConstants.SMS_TEMPLATE, key = "#code", + unless = "#result == null") + public SmsTemplateDO getSmsTemplateByCodeFromCache(String code) { + return smsTemplateMapper.selectByCode(code); + } + + @Override + public PageResult getSmsTemplatePage(SmsTemplatePageReqVO pageReqVO) { + return smsTemplateMapper.selectPage(pageReqVO); + } + + @Override + public Long getSmsTemplateCountByChannelId(Long channelId) { + return smsTemplateMapper.selectCountByChannelId(channelId); + } + + @VisibleForTesting + public SmsChannelDO validateSmsChannel(Long channelId) { + SmsChannelDO channelDO = smsChannelService.getSmsChannel(channelId); + if (channelDO == null) { + throw exception(SMS_CHANNEL_NOT_EXISTS); + } + if (CommonStatusEnum.isDisable(channelDO.getStatus())) { + throw exception(SMS_CHANNEL_DISABLE); + } + return channelDO; + } + + @VisibleForTesting + public void validateSmsTemplateCodeDuplicate(Long id, String code) { + SmsTemplateDO template = smsTemplateMapper.selectByCode(code); + if (template == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的字典类型 + if (id == null) { + throw exception(SMS_TEMPLATE_CODE_DUPLICATE, code); + } + if (!template.getId().equals(id)) { + throw exception(SMS_TEMPLATE_CODE_DUPLICATE, code); + } + } + + /** + * 校验 API 短信平台的模板是否有效 + * + * @param channelId 渠道编号 + * @param apiTemplateId API 模板编号 + */ + @VisibleForTesting + void validateApiTemplate(Long channelId, String apiTemplateId) { + // 获得短信模板 + SmsClient smsClient = smsChannelService.getSmsClient(channelId); + Assert.notNull(smsClient, String.format("短信客户端(%d) 不存在", channelId)); + SmsTemplateRespDTO template; + try { + template = smsClient.getSmsTemplate(apiTemplateId); + } catch (Throwable ex) { + throw exception(SMS_TEMPLATE_API_ERROR, ExceptionUtil.getRootCauseMessage(ex)); + } + // 校验短信模版 + if (template == null) { + throw exception(SMS_TEMPLATE_API_NOT_FOUND); + } + if (Objects.equals(template.getAuditStatus(), SmsTemplateAuditStatusEnum.CHECKING.getStatus())) { + throw exception(SMS_TEMPLATE_API_AUDIT_CHECKING); + } + if (Objects.equals(template.getAuditStatus(), SmsTemplateAuditStatusEnum.FAIL.getStatus())) { + throw exception(SMS_TEMPLATE_API_AUDIT_FAIL, template.getAuditReason()); + } + Assert.equals(template.getAuditStatus(), SmsTemplateAuditStatusEnum.SUCCESS.getStatus(), + String.format("短信模板(%s) 审核状态(%d) 不正确", apiTemplateId, template.getAuditStatus())); + } + + @Override + public String formatSmsTemplateContent(String content, Map params) { + return StrUtil.format(content, params); + } + + @VisibleForTesting + List parseTemplateContentParams(String content) { + return ReUtil.findAllGroup1(PATTERN_PARAMS, content); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialClientService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialClientService.java new file mode 100644 index 0000000..0cbc65c --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialClientService.java @@ -0,0 +1,104 @@ +package com.win.module.system.service.social; + +import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; +import com.win.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO; +import com.win.module.system.dal.dataobject.social.SocialClientDO; +import com.win.module.system.enums.social.SocialTypeEnum; +import com.xingyuv.jushauth.model.AuthUser; +import me.chanjar.weixin.common.bean.WxJsapiSignature; + +import jakarta.validation.Valid; + +/** + * 社交应用 Service 接口 + * + * @author 芋道源码 + */ +public interface SocialClientService { + + /** + * 获得社交平台的授权 URL + * + * @param socialType 社交平台的类型 {@link SocialTypeEnum} + * @param userType 用户类型 + * @param redirectUri 重定向 URL + * @return 社交平台的授权 URL + */ + String getAuthorizeUrl(Integer socialType, Integer userType, String redirectUri); + + /** + * 请求社交平台,获得授权的用户 + * + * @param socialType 社交平台的类型 + * @param userType 用户类型 + * @param code 授权码 + * @param state 授权 state + * @return 授权的用户 + */ + AuthUser getAuthUser(Integer socialType, Integer userType, String code, String state); + + // =================== 微信公众号独有 =================== + + /** + * 创建微信公众号的 JS SDK 初始化所需的签名 + * + * @param userType 用户类型 + * @param url 访问的 URL 地址 + * @return 签名 + */ + WxJsapiSignature createWxMpJsapiSignature(Integer userType, String url); + + // =================== 微信小程序独有 =================== + + /** + * 获得微信小程序的手机信息 + * + * @param userType 用户类型 + * @param phoneCode 手机授权码 + * @return 手机信息 + */ + WxMaPhoneNumberInfo getWxMaPhoneNumberInfo(Integer userType, String phoneCode); + + // =================== 客户端管理 =================== + + /** + * 创建社交客户端 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSocialClient(@Valid SocialClientSaveReqVO createReqVO); + + /** + * 更新社交客户端 + * + * @param updateReqVO 更新信息 + */ + void updateSocialClient(@Valid SocialClientSaveReqVO updateReqVO); + + /** + * 删除社交客户端 + * + * @param id 编号 + */ + void deleteSocialClient(Long id); + + /** + * 获得社交客户端 + * + * @param id 编号 + * @return 社交客户端 + */ + SocialClientDO getSocialClient(Long id); + + /** + * 获得社交客户端分页 + * + * @param pageReqVO 分页查询 + * @return 社交客户端分页 + */ + PageResult getSocialClientPage(SocialClientPageReqVO pageReqVO); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialClientServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialClientServiceImpl.java new file mode 100644 index 0000000..1dc60a1 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialClientServiceImpl.java @@ -0,0 +1,340 @@ +package com.win.module.system.service.social; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; +import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; +import cn.binarywang.wx.miniapp.config.impl.WxMaRedisBetterConfigImpl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjUtil; +import cn.hutool.core.util.ReflectUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.cache.CacheUtils; +import com.win.framework.common.util.http.HttpUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; +import com.win.module.system.controller.admin.socail.vo.client.SocialClientSaveReqVO; +import com.win.module.system.dal.dataobject.social.SocialClientDO; +import com.win.module.system.dal.mysql.social.SocialClientMapper; +import com.win.module.system.enums.social.SocialTypeEnum; +import com.binarywang.spring.starter.wxjava.miniapp.properties.WxMaProperties; +import com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.xingyuv.jushauth.config.AuthConfig; +import com.xingyuv.jushauth.model.AuthCallback; +import com.xingyuv.jushauth.model.AuthResponse; +import com.xingyuv.jushauth.model.AuthUser; +import com.xingyuv.jushauth.request.AuthRequest; +import com.xingyuv.jushauth.utils.AuthStateUtils; +import com.xingyuv.justauth.AuthRequestFactory; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.bean.WxJsapiSignature; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; +import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import jakarta.annotation.Resource; +import java.time.Duration; +import java.util.Objects; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.cache.CacheUtils.buildAsyncReloadingCache; +import static com.win.framework.common.util.json.JsonUtils.toJsonString; +import static com.win.module.system.enums.ErrorCodeConstants.*; + +/** + * 社交应用 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Slf4j +public class SocialClientServiceImpl implements SocialClientService { + + @Resource + private AuthRequestFactory authRequestFactory; + + @Resource + private WxMpService wxMpService; + @Resource + private WxMpProperties wxMpProperties; + @Resource + private StringRedisTemplate stringRedisTemplate; // WxMpService 需要使用到,所以在 Service 注入了它 + /** + * 缓存 WxMpService 对象 + * + * key:使用微信公众号的 appId + secret 拼接,即 {@link SocialClientDO} 的 clientId 和 clientSecret 属性。 + * 为什么 key 使用这种格式?因为 {@link SocialClientDO} 在管理后台可以变更,通过这个 key 存储它的单例。 + * + * 为什么要做 WxMpService 缓存?因为 WxMpService 构建成本比较大,所以尽量保证它是单例。 + */ + private final LoadingCache wxMpServiceCache = buildAsyncReloadingCache( + Duration.ofSeconds(10L), + new CacheLoader() { + + @Override + public WxMpService load(String key) { + String[] keys = key.split(":"); + return buildWxMpService(keys[0], keys[1]); + } + + }); + + @Resource + private WxMaService wxMaService; + @Resource + private WxMaProperties wxMaProperties; + /** + * 缓存 WxMaService 对象 + * + * 说明同 {@link #wxMpServiceCache} 变量 + */ + private final LoadingCache wxMaServiceCache = buildAsyncReloadingCache( + Duration.ofSeconds(10L), + new CacheLoader() { + + @Override + public WxMaService load(String key) { + String[] keys = key.split(":"); + return buildWxMaService(keys[0], keys[1]); + } + + }); + + @Resource + private SocialClientMapper socialClientMapper; + + @Override + public String getAuthorizeUrl(Integer socialType, Integer userType, String redirectUri) { + // 获得对应的 AuthRequest 实现 + AuthRequest authRequest = buildAuthRequest(socialType, userType); + // 生成跳转地址 + String authorizeUri = authRequest.authorize(AuthStateUtils.createState()); + return HttpUtils.replaceUrlQuery(authorizeUri, "redirect_uri", redirectUri); + } + + @Override + public AuthUser getAuthUser(Integer socialType, Integer userType, String code, String state) { + // 构建请求 + AuthRequest authRequest = buildAuthRequest(socialType, userType); + AuthCallback authCallback = AuthCallback.builder().code(code).state(state).build(); + // 执行请求 + AuthResponse authResponse = authRequest.login(authCallback); + log.info("[getAuthUser][请求社交平台 type({}) request({}) response({})]", socialType, + toJsonString(authCallback), toJsonString(authResponse)); + if (!authResponse.ok()) { + throw exception(SOCIAL_USER_AUTH_FAILURE, authResponse.getMsg()); + } + return (AuthUser) authResponse.getData(); + } + + /** + * 构建 AuthRequest 对象,支持多租户配置 + * + * @param socialType 社交类型 + * @param userType 用户类型 + * @return AuthRequest 对象 + */ + @VisibleForTesting + AuthRequest buildAuthRequest(Integer socialType, Integer userType) { + // 1. 先查找默认的配置项,从 application-*.yaml 中读取 + AuthRequest request = authRequestFactory.get(SocialTypeEnum.valueOfType(socialType).getSource()); + Assert.notNull(request, String.format("社交平台(%d) 不存在", socialType)); + // 2. 查询 DB 的配置项,如果存在则进行覆盖 + SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType(socialType, userType); + if (client != null && Objects.equals(client.getStatus(), CommonStatusEnum.ENABLE.getStatus())) { + // 2.1 构造新的 AuthConfig 对象 + AuthConfig authConfig = (AuthConfig) ReflectUtil.getFieldValue(request, "config"); + AuthConfig newAuthConfig = ReflectUtil.newInstance(authConfig.getClass()); + BeanUtil.copyProperties(authConfig, newAuthConfig); + // 2.2 修改对应的 clientId + clientSecret 密钥 + newAuthConfig.setClientId(client.getClientId()); + newAuthConfig.setClientSecret(client.getClientSecret()); + if (client.getAgentId() != null) { // 如果有 agentId 则修改 agentId + newAuthConfig.setAgentId(client.getAgentId()); + } + // 2.3 设置会 request 里,进行后续使用 + ReflectUtil.setFieldValue(request, "config", newAuthConfig); + } + return request; + } + + // =================== 微信公众号独有 =================== + + @Override + @SneakyThrows + public WxJsapiSignature createWxMpJsapiSignature(Integer userType, String url) { + WxMpService service = getWxMpService(userType); + return service.createJsapiSignature(url); + } + + /** + * 获得 clientId + clientSecret 对应的 WxMpService 对象 + * + * @param userType 用户类型 + * @return WxMpService 对象 + */ + @VisibleForTesting + WxMpService getWxMpService(Integer userType) { + // 第一步,查询 DB 的配置项,获得对应的 WxMpService 对象 + SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType( + SocialTypeEnum.WECHAT_MP.getType(), userType); + if (client != null && Objects.equals(client.getStatus(), CommonStatusEnum.ENABLE.getStatus())) { + return wxMpServiceCache.getUnchecked(client.getClientId() + ":" + client.getClientSecret()); + } + // 第二步,不存在 DB 配置项,则使用 application-*.yaml 对应的 WxMpService 对象 + return wxMpService; + } + + /** + * 创建 clientId + clientSecret 对应的 WxMpService 对象 + * + * @param clientId 微信公众号 appId + * @param clientSecret 微信公众号 secret + * @return WxMpService 对象 + */ + public WxMpService buildWxMpService(String clientId, String clientSecret) { + // 第一步,创建 WxMpRedisConfigImpl 对象 + WxMpRedisConfigImpl configStorage = new WxMpRedisConfigImpl( + new RedisTemplateWxRedisOps(stringRedisTemplate), + wxMpProperties.getConfigStorage().getKeyPrefix()); + configStorage.setAppId(clientId); + configStorage.setSecret(clientSecret); + + // 第二步,创建 WxMpService 对象 + WxMpService service = new WxMpServiceImpl(); + service.setWxMpConfigStorage(configStorage); + return service; + } + + // =================== 微信小程序独有 =================== + + @Override + public WxMaPhoneNumberInfo getWxMaPhoneNumberInfo(Integer userType, String phoneCode) { + WxMaService service = getWxMaService(userType); + try { + return service.getUserService().getPhoneNoInfo(phoneCode); + } catch (WxErrorException e) { + log.error("[getPhoneNoInfo][userType({}) phoneCode({}) 获得手机号失败]", userType, phoneCode, e); + throw exception(SOCIAL_CLIENT_WEIXIN_MINI_APP_PHONE_CODE_ERROR); + } + } + + /** + * 获得 clientId + clientSecret 对应的 WxMpService 对象 + * + * @param userType 用户类型 + * @return WxMpService 对象 + */ + @VisibleForTesting + WxMaService getWxMaService(Integer userType) { + // 第一步,查询 DB 的配置项,获得对应的 WxMaService 对象 + SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType( + SocialTypeEnum.WECHAT_MINI_APP.getType(), userType); + if (client != null && Objects.equals(client.getStatus(), CommonStatusEnum.ENABLE.getStatus())) { + return wxMaServiceCache.getUnchecked(client.getClientId() + ":" + client.getClientSecret()); + } + // 第二步,不存在 DB 配置项,则使用 application-*.yaml 对应的 WxMaService 对象 + return wxMaService; + } + + /** + * 创建 clientId + clientSecret 对应的 WxMaService 对象 + * + * @param clientId 微信小程序 appId + * @param clientSecret 微信小程序 secret + * @return WxMaService 对象 + */ + private WxMaService buildWxMaService(String clientId, String clientSecret) { + // 第一步,创建 WxMaRedisBetterConfigImpl 对象 + WxMaRedisBetterConfigImpl configStorage = new WxMaRedisBetterConfigImpl( + new RedisTemplateWxRedisOps(stringRedisTemplate), + wxMaProperties.getConfigStorage().getKeyPrefix()); + configStorage.setAppid(clientId); + configStorage.setSecret(clientSecret); + + // 第二步,创建 WxMpService 对象 + WxMaService service = new WxMaServiceImpl(); + service.setWxMaConfig(configStorage); + return service; + } + + // =================== 客户端管理 =================== + + @Override + public Long createSocialClient(SocialClientSaveReqVO createReqVO) { + // 校验重复 + validateSocialClientUnique(null, createReqVO.getUserType(), createReqVO.getSocialType()); + + // 插入 + SocialClientDO client = BeanUtils.toBean(createReqVO, SocialClientDO.class); + socialClientMapper.insert(client); + return client.getId(); + } + + @Override + public void updateSocialClient(SocialClientSaveReqVO updateReqVO) { + // 校验存在 + validateSocialClientExists(updateReqVO.getId()); + // 校验重复 + validateSocialClientUnique(updateReqVO.getId(), updateReqVO.getUserType(), updateReqVO.getSocialType()); + + // 更新 + SocialClientDO updateObj = BeanUtils.toBean(updateReqVO, SocialClientDO.class); + socialClientMapper.updateById(updateObj); + } + + @Override + public void deleteSocialClient(Long id) { + // 校验存在 + validateSocialClientExists(id); + // 删除 + socialClientMapper.deleteById(id); + } + + private void validateSocialClientExists(Long id) { + if (socialClientMapper.selectById(id) == null) { + throw exception(SOCIAL_CLIENT_NOT_EXISTS); + } + } + + /** + * 校验社交应用是否重复,需要保证 userType + socialType 唯一 + * + * 原因是,不同端(userType)选择某个社交登录(socialType)时,需要通过 {@link #buildAuthRequest(Integer, Integer)} 构建对应的请求 + * + * @param id 编号 + * @param userType 用户类型 + * @param socialType 社交类型 + */ + private void validateSocialClientUnique(Long id, Integer userType, Integer socialType) { + SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType( + socialType, userType); + if (client == null) { + return; + } + if (id == null // 新增时,说明重复 + || ObjUtil.notEqual(id, client.getId())) { // 更新时,如果 id 不一致,说明重复 + throw exception(SOCIAL_CLIENT_UNIQUE); + } + } + + @Override + public SocialClientDO getSocialClient(Long id) { + return socialClientMapper.selectById(id); + } + + @Override + public PageResult getSocialClientPage(SocialClientPageReqVO pageReqVO) { + return socialClientMapper.selectPage(pageReqVO); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialUserService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialUserService.java new file mode 100644 index 0000000..274d35d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialUserService.java @@ -0,0 +1,89 @@ +package com.win.module.system.service.social; + +import com.win.framework.common.exception.ServiceException; +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.api.social.dto.SocialUserBindReqDTO; +import com.win.module.system.api.social.dto.SocialUserRespDTO; +import com.win.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO; +import com.win.module.system.dal.dataobject.social.SocialUserDO; +import com.win.module.system.enums.social.SocialTypeEnum; +import jakarta.validation.Valid; + +import java.util.List; + +/** + * 社交用户 Service 接口,例如说社交平台的授权登录 + * + * @author 芋道源码 + */ +public interface SocialUserService { + + /** + * 获得指定用户的社交用户列表 + * + * @param userId 用户编号 + * @param userType 用户类型 + * @return 社交用户列表 + */ + List getSocialUserList(Long userId, Integer userType); + + /** + * 绑定社交用户 + * + * @param reqDTO 绑定信息 + * @return 社交用户 openid + */ + String bindSocialUser(@Valid SocialUserBindReqDTO reqDTO); + + /** + * 取消绑定社交用户 + * + * @param userId 用户编号 + * @param userType 全局用户类型 + * @param socialType 社交平台的类型 {@link SocialTypeEnum} + * @param openid 社交平台的 openid + */ + void unbindSocialUser(Long userId, Integer userType, Integer socialType, String openid); + + /** + * 获得社交用户,基于 userId + * + * @param userType 用户类型 + * @param userId 用户编号 + * @param socialType 社交平台的类型 + * @return 社交用户 + */ + SocialUserRespDTO getSocialUserByUserId(Integer userType, Long userId, Integer socialType); + + /** + * 获得社交用户 + * + * 在认证信息不正确的情况下,也会抛出 {@link ServiceException} 业务异常 + * + * @param userType 用户类型 + * @param socialType 社交平台的类型 + * @param code 授权码 + * @param state state + * @return 社交用户 + */ + SocialUserRespDTO getSocialUserByCode(Integer userType, Integer socialType, String code, String state); + + // ==================== 社交用户 CRUD ==================== + + /** + * 获得社交用户 + * + * @param id 编号 + * @return 社交用户 + */ + SocialUserDO getSocialUser(Long id); + + /** + * 获得社交用户分页 + * + * @param pageReqVO 分页查询 + * @return 社交用户分页 + */ + PageResult getSocialUserPage(SocialUserPageReqVO pageReqVO); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialUserServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialUserServiceImpl.java new file mode 100644 index 0000000..0116d0f --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/social/SocialUserServiceImpl.java @@ -0,0 +1,173 @@ +package com.win.module.system.service.social; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import com.win.framework.common.exception.ServiceException; +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.api.social.dto.SocialUserBindReqDTO; +import com.win.module.system.api.social.dto.SocialUserRespDTO; +import com.win.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO; +import com.win.module.system.dal.dataobject.social.SocialUserBindDO; +import com.win.module.system.dal.dataobject.social.SocialUserDO; +import com.win.module.system.dal.mysql.social.SocialUserBindMapper; +import com.win.module.system.dal.mysql.social.SocialUserMapper; +import com.win.module.system.enums.social.SocialTypeEnum; +import com.xingyuv.jushauth.model.AuthUser; +import jakarta.annotation.Resource; +import jakarta.validation.constraints.NotNull; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import java.util.Collections; +import java.util.List; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; +import static com.win.framework.common.util.json.JsonUtils.toJsonString; +import static com.win.module.system.enums.ErrorCodeConstants.SOCIAL_USER_NOT_FOUND; + +/** + * 社交用户 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +@Slf4j +public class SocialUserServiceImpl implements SocialUserService { + + @Resource + private SocialUserBindMapper socialUserBindMapper; + @Resource + private SocialUserMapper socialUserMapper; + + @Resource + private SocialClientService socialClientService; + + @Override + public List getSocialUserList(Long userId, Integer userType) { + // 获得绑定 + List socialUserBinds = socialUserBindMapper.selectListByUserIdAndUserType(userId, userType); + if (CollUtil.isEmpty(socialUserBinds)) { + return Collections.emptyList(); + } + // 获得社交用户 + return socialUserMapper.selectBatchIds(convertSet(socialUserBinds, SocialUserBindDO::getSocialUserId)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String bindSocialUser(SocialUserBindReqDTO reqDTO) { + // 获得社交用户 + SocialUserDO socialUser = authSocialUser(reqDTO.getSocialType(), reqDTO.getUserType(), + reqDTO.getCode(), reqDTO.getState()); + Assert.notNull(socialUser, "社交用户不能为空"); + + // 社交用户可能之前绑定过别的用户,需要进行解绑 + socialUserBindMapper.deleteByUserTypeAndSocialUserId(reqDTO.getUserType(), socialUser.getId()); + + // 用户可能之前已经绑定过该社交类型,需要进行解绑 + socialUserBindMapper.deleteByUserTypeAndUserIdAndSocialType(reqDTO.getUserType(), reqDTO.getUserId(), + socialUser.getType()); + + // 绑定当前登录的社交用户 + SocialUserBindDO socialUserBind = SocialUserBindDO.builder() + .userId(reqDTO.getUserId()).userType(reqDTO.getUserType()) + .socialUserId(socialUser.getId()).socialType(socialUser.getType()).build(); + socialUserBindMapper.insert(socialUserBind); + return socialUser.getOpenid(); + } + + @Override + public void unbindSocialUser(Long userId, Integer userType, Integer socialType, String openid) { + // 获得 openid 对应的 SocialUserDO 社交用户 + SocialUserDO socialUser = socialUserMapper.selectByTypeAndOpenid(socialType, openid); + if (socialUser == null) { + throw exception(SOCIAL_USER_NOT_FOUND); + } + + // 获得对应的社交绑定关系 + socialUserBindMapper.deleteByUserTypeAndUserIdAndSocialType(userType, userId, socialUser.getType()); + } + + @Override + public SocialUserRespDTO getSocialUserByUserId(Integer userType, Long userId, Integer socialType) { + // 获得绑定用户 + SocialUserBindDO socialUserBind = socialUserBindMapper.selectByUserIdAndUserTypeAndSocialType(userId, userType, socialType); + if (socialUserBind == null) { + return null; + } + // 获得社交用户 + SocialUserDO socialUser = socialUserMapper.selectById(socialUserBind.getSocialUserId()); + Assert.notNull(socialUser, "社交用户不能为空"); + return new SocialUserRespDTO(socialUser.getOpenid(), socialUser.getNickname(), socialUser.getAvatar(), + socialUserBind.getUserId()); + } + + @Override + public SocialUserRespDTO getSocialUserByCode(Integer userType, Integer socialType, String code, String state) { + // 获得社交用户 + SocialUserDO socialUser = authSocialUser(socialType, userType, code, state); + Assert.notNull(socialUser, "社交用户不能为空"); + + // 获得绑定用户 + SocialUserBindDO socialUserBind = socialUserBindMapper.selectByUserTypeAndSocialUserId(userType, + socialUser.getId()); + return new SocialUserRespDTO(socialUser.getOpenid(), socialUser.getNickname(), socialUser.getAvatar(), + socialUserBind != null ? socialUserBind.getUserId() : null); + } + + /** + * 授权获得对应的社交用户 + * 如果授权失败,则会抛出 {@link ServiceException} 异常 + * + * @param socialType 社交平台的类型 {@link SocialTypeEnum} + * @param userType 用户类型 + * @param code 授权码 + * @param state state + * @return 授权用户 + */ + @NotNull + public SocialUserDO authSocialUser(Integer socialType, Integer userType, String code, String state) { + // 优先从 DB 中获取,因为 code 有且可以使用一次。 + // 在社交登录时,当未绑定 User 时,需要绑定登录,此时需要 code 使用两次 + SocialUserDO socialUser = socialUserMapper.selectByTypeAndCodeAnState(socialType, code, state); + if (socialUser != null) { + return socialUser; + } + + // 请求获取 + AuthUser authUser = socialClientService.getAuthUser(socialType, userType, code, state); + Assert.notNull(authUser, "三方用户不能为空"); + + // 保存到 DB 中 + socialUser = socialUserMapper.selectByTypeAndOpenid(socialType, authUser.getUuid()); + if (socialUser == null) { + socialUser = new SocialUserDO(); + } + socialUser.setType(socialType).setCode(code).setState(state) // 需要保存 code + state 字段,保证后续可查询 + .setOpenid(authUser.getUuid()).setToken(authUser.getToken().getAccessToken()).setRawTokenInfo((toJsonString(authUser.getToken()))) + .setNickname(authUser.getNickname()).setAvatar(authUser.getAvatar()).setRawUserInfo(toJsonString(authUser.getRawUserInfo())); + if (socialUser.getId() == null) { + socialUserMapper.insert(socialUser); + } else { + socialUserMapper.updateById(socialUser); + } + return socialUser; + } + + // ==================== 社交用户 CRUD ==================== + + @Override + public SocialUserDO getSocialUser(Long id) { + return socialUserMapper.selectById(id); + } + + @Override + public PageResult getSocialUserPage(SocialUserPageReqVO pageReqVO) { + return socialUserMapper.selectPage(pageReqVO); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantPackageService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantPackageService.java new file mode 100644 index 0000000..03c4ed4 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantPackageService.java @@ -0,0 +1,72 @@ +package com.win.module.system.service.tenant; + +import com.win.framework.common.pojo.PageResult; +import com.win.module.system.controller.admin.tenant.vo.packages.TenantPackagePageReqVO; +import com.win.module.system.controller.admin.tenant.vo.packages.TenantPackageSaveReqVO; +import com.win.module.system.dal.dataobject.tenant.TenantPackageDO; + +import jakarta.validation.Valid; +import java.util.List; + +/** + * 租户套餐 Service 接口 + * + * @author 芋道源码 + */ +public interface TenantPackageService { + + /** + * 创建租户套餐 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createTenantPackage(@Valid TenantPackageSaveReqVO createReqVO); + + /** + * 更新租户套餐 + * + * @param updateReqVO 更新信息 + */ + void updateTenantPackage(@Valid TenantPackageSaveReqVO updateReqVO); + + /** + * 删除租户套餐 + * + * @param id 编号 + */ + void deleteTenantPackage(Long id); + + /** + * 获得租户套餐 + * + * @param id 编号 + * @return 租户套餐 + */ + TenantPackageDO getTenantPackage(Long id); + + /** + * 获得租户套餐分页 + * + * @param pageReqVO 分页查询 + * @return 租户套餐分页 + */ + PageResult getTenantPackagePage(TenantPackagePageReqVO pageReqVO); + + /** + * 校验租户套餐 + * + * @param id 编号 + * @return 租户套餐 + */ + TenantPackageDO validTenantPackage(Long id); + + /** + * 获得指定状态的租户套餐列表 + * + * @param status 状态 + * @return 租户套餐 + */ + List getTenantPackageListByStatus(Integer status); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantPackageServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantPackageServiceImpl.java new file mode 100644 index 0000000..a448b11 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantPackageServiceImpl.java @@ -0,0 +1,114 @@ +package com.win.module.system.service.tenant; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.object.BeanUtils; +import com.win.module.system.controller.admin.tenant.vo.packages.TenantPackagePageReqVO; +import com.win.module.system.controller.admin.tenant.vo.packages.TenantPackageSaveReqVO; +import com.win.module.system.dal.dataobject.tenant.TenantDO; +import com.win.module.system.dal.dataobject.tenant.TenantPackageDO; +import com.win.module.system.dal.mysql.tenant.TenantPackageMapper; +import com.baomidou.dynamic.datasource.annotation.DSTransactional; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.util.List; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.system.enums.ErrorCodeConstants.*; + +/** + * 租户套餐 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class TenantPackageServiceImpl implements TenantPackageService { + + @Resource + private TenantPackageMapper tenantPackageMapper; + + @Resource + @Lazy // 避免循环依赖的报错 + private TenantService tenantService; + + @Override + public Long createTenantPackage(TenantPackageSaveReqVO createReqVO) { + // 插入 + TenantPackageDO tenantPackage = BeanUtils.toBean(createReqVO, TenantPackageDO.class); + tenantPackageMapper.insert(tenantPackage); + // 返回 + return tenantPackage.getId(); + } + + @Override + @DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换 + public void updateTenantPackage(TenantPackageSaveReqVO updateReqVO) { + // 校验存在 + TenantPackageDO tenantPackage = validateTenantPackageExists(updateReqVO.getId()); + // 更新 + TenantPackageDO updateObj = BeanUtils.toBean(updateReqVO, TenantPackageDO.class); + tenantPackageMapper.updateById(updateObj); + // 如果菜单发生变化,则修改每个租户的菜单 + if (!CollUtil.isEqualList(tenantPackage.getMenuIds(), updateReqVO.getMenuIds())) { + List tenants = tenantService.getTenantListByPackageId(tenantPackage.getId()); + tenants.forEach(tenant -> tenantService.updateTenantRoleMenu(tenant.getId(), updateReqVO.getMenuIds())); + } + } + + @Override + public void deleteTenantPackage(Long id) { + // 校验存在 + validateTenantPackageExists(id); + // 校验正在使用 + validateTenantUsed(id); + // 删除 + tenantPackageMapper.deleteById(id); + } + + private TenantPackageDO validateTenantPackageExists(Long id) { + TenantPackageDO tenantPackage = tenantPackageMapper.selectById(id); + if (tenantPackage == null) { + throw exception(TENANT_PACKAGE_NOT_EXISTS); + } + return tenantPackage; + } + + private void validateTenantUsed(Long id) { + if (tenantService.getTenantCountByPackageId(id) > 0) { + throw exception(TENANT_PACKAGE_USED); + } + } + + @Override + public TenantPackageDO getTenantPackage(Long id) { + return tenantPackageMapper.selectById(id); + } + + @Override + public PageResult getTenantPackagePage(TenantPackagePageReqVO pageReqVO) { + return tenantPackageMapper.selectPage(pageReqVO); + } + + @Override + public TenantPackageDO validTenantPackage(Long id) { + TenantPackageDO tenantPackage = tenantPackageMapper.selectById(id); + if (tenantPackage == null) { + throw exception(TENANT_PACKAGE_NOT_EXISTS); + } + if (tenantPackage.getStatus().equals(CommonStatusEnum.DISABLE.getStatus())) { + throw exception(TENANT_PACKAGE_DISABLE, tenantPackage.getName()); + } + return tenantPackage; + } + + @Override + public List getTenantPackageListByStatus(Integer status) { + return tenantPackageMapper.selectListByStatus(status); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantService.java new file mode 100644 index 0000000..71f9280 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantService.java @@ -0,0 +1,130 @@ +package com.win.module.system.service.tenant; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.tenant.core.context.TenantContextHolder; +import com.win.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO; +import com.win.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO; +import com.win.module.system.dal.dataobject.tenant.TenantDO; +import com.win.module.system.service.tenant.handler.TenantInfoHandler; +import com.win.module.system.service.tenant.handler.TenantMenuHandler; + +import jakarta.validation.Valid; +import java.util.List; +import java.util.Set; + +/** + * 租户 Service 接口 + * + * @author 芋道源码 + */ +public interface TenantService { + + /** + * 创建租户 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createTenant(@Valid TenantSaveReqVO createReqVO); + + /** + * 更新租户 + * + * @param updateReqVO 更新信息 + */ + void updateTenant(@Valid TenantSaveReqVO updateReqVO); + + /** + * 更新租户的角色菜单 + * + * @param tenantId 租户编号 + * @param menuIds 菜单编号数组 + */ + void updateTenantRoleMenu(Long tenantId, Set menuIds); + + /** + * 删除租户 + * + * @param id 编号 + */ + void deleteTenant(Long id); + + /** + * 获得租户 + * + * @param id 编号 + * @return 租户 + */ + TenantDO getTenant(Long id); + + /** + * 获得租户分页 + * + * @param pageReqVO 分页查询 + * @return 租户分页 + */ + PageResult getTenantPage(TenantPageReqVO pageReqVO); + + /** + * 获得名字对应的租户 + * + * @param name 租户名 + * @return 租户 + */ + TenantDO getTenantByName(String name); + + /** + * 获得域名对应的租户 + * + * @param website 域名 + * @return 租户 + */ + TenantDO getTenantByWebsite(String website); + + /** + * 获得使用指定套餐的租户数量 + * + * @param packageId 租户套餐编号 + * @return 租户数量 + */ + Long getTenantCountByPackageId(Long packageId); + + /** + * 获得使用指定套餐的租户数组 + * + * @param packageId 租户套餐编号 + * @return 租户数组 + */ + List getTenantListByPackageId(Long packageId); + + /** + * 进行租户的信息处理逻辑 + * 其中,租户编号从 {@link TenantContextHolder} 上下文中获取 + * + * @param handler 处理器 + */ + void handleTenantInfo(TenantInfoHandler handler); + + /** + * 进行租户的菜单处理逻辑 + * 其中,租户编号从 {@link TenantContextHolder} 上下文中获取 + * + * @param handler 处理器 + */ + void handleTenantMenu(TenantMenuHandler handler); + + /** + * 获得所有租户 + * + * @return 租户编号数组 + */ + List getTenantIdList(); + + /** + * 校验租户是否合法 + * + * @param id 租户编号 + */ + void validTenant(Long id); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantServiceImpl.java new file mode 100644 index 0000000..4605c47 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/TenantServiceImpl.java @@ -0,0 +1,306 @@ +package com.win.module.system.service.tenant; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.common.util.date.DateUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.tenant.config.TenantProperties; +import com.win.framework.tenant.core.context.TenantContextHolder; +import com.win.framework.tenant.core.util.TenantUtils; +import com.win.module.system.controller.admin.permission.vo.role.RoleSaveReqVO; +import com.win.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO; +import com.win.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO; +import com.win.module.system.convert.tenant.TenantConvert; +import com.win.module.system.dal.dataobject.permission.MenuDO; +import com.win.module.system.dal.dataobject.permission.RoleDO; +import com.win.module.system.dal.dataobject.tenant.TenantDO; +import com.win.module.system.dal.dataobject.tenant.TenantPackageDO; +import com.win.module.system.dal.mysql.tenant.TenantMapper; +import com.win.module.system.enums.permission.RoleCodeEnum; +import com.win.module.system.enums.permission.RoleTypeEnum; +import com.win.module.system.service.permission.MenuService; +import com.win.module.system.service.permission.PermissionService; +import com.win.module.system.service.permission.RoleService; +import com.win.module.system.service.tenant.handler.TenantInfoHandler; +import com.win.module.system.service.tenant.handler.TenantMenuHandler; +import com.win.module.system.service.user.AdminUserService; +import com.baomidou.dynamic.datasource.annotation.DSTransactional; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import jakarta.annotation.Resource; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.system.enums.ErrorCodeConstants.*; +import static java.util.Collections.singleton; + +/** + * 租户 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +@Slf4j +public class TenantServiceImpl implements TenantService { + + @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection") + @Autowired(required = false) // 由于 win.tenant.enable 配置项,可以关闭多租户的功能,所以这里只能不强制注入 + private TenantProperties tenantProperties; + + @Resource + private TenantMapper tenantMapper; + + @Resource + private TenantPackageService tenantPackageService; + @Resource + @Lazy // 延迟,避免循环依赖报错 + private AdminUserService userService; + @Resource + private RoleService roleService; + @Resource + private MenuService menuService; + @Resource + private PermissionService permissionService; + + @Override + public List getTenantIdList() { + List tenants = tenantMapper.selectList(); + return CollectionUtils.convertList(tenants, TenantDO::getId); + } + + @Override + public void validTenant(Long id) { + TenantDO tenant = getTenant(id); + if (tenant == null) { + throw exception(TENANT_NOT_EXISTS); + } + if (tenant.getStatus().equals(CommonStatusEnum.DISABLE.getStatus())) { + throw exception(TENANT_DISABLE, tenant.getName()); + } + if (DateUtils.isExpired(tenant.getExpireTime())) { + throw exception(TENANT_EXPIRE, tenant.getName()); + } + } + + @Override + @DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换 + public Long createTenant(TenantSaveReqVO createReqVO) { + // 校验租户名称是否重复 + validTenantNameDuplicate(createReqVO.getName(), null); + // 校验租户域名是否重复 + validTenantWebsiteDuplicate(createReqVO.getWebsite(), null); + // 校验套餐被禁用 + TenantPackageDO tenantPackage = tenantPackageService.validTenantPackage(createReqVO.getPackageId()); + + // 创建租户 + TenantDO tenant = BeanUtils.toBean(createReqVO, TenantDO.class); + tenantMapper.insert(tenant); + // 创建租户的管理员 + TenantUtils.execute(tenant.getId(), () -> { + // 创建角色 + Long roleId = createRole(tenantPackage); + // 创建用户,并分配角色 + Long userId = createUser(roleId, createReqVO); + // 修改租户的管理员 + tenantMapper.updateById(new TenantDO().setId(tenant.getId()).setContactUserId(userId)); + }); + return tenant.getId(); + } + + private Long createUser(Long roleId, TenantSaveReqVO createReqVO) { + // 创建用户 + Long userId = userService.createUser(TenantConvert.INSTANCE.convert02(createReqVO)); + // 分配角色 + permissionService.assignUserRole(userId, singleton(roleId)); + return userId; + } + + private Long createRole(TenantPackageDO tenantPackage) { + // 创建角色 + RoleSaveReqVO reqVO = new RoleSaveReqVO(); + reqVO.setName(RoleCodeEnum.TENANT_ADMIN.getName()).setCode(RoleCodeEnum.TENANT_ADMIN.getCode()) + .setSort(0).setRemark("系统自动生成"); + Long roleId = roleService.createRole(reqVO, RoleTypeEnum.SYSTEM.getType()); + // 分配权限 + permissionService.assignRoleMenu(roleId, tenantPackage.getMenuIds()); + return roleId; + } + + @Override + @DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换 + public void updateTenant(TenantSaveReqVO updateReqVO) { + // 校验存在 + TenantDO tenant = validateUpdateTenant(updateReqVO.getId()); + // 校验租户名称是否重复 + validTenantNameDuplicate(updateReqVO.getName(), updateReqVO.getId()); + // 校验租户域名是否重复 + validTenantWebsiteDuplicate(updateReqVO.getWebsite(), updateReqVO.getId()); + // 校验套餐被禁用 + TenantPackageDO tenantPackage = tenantPackageService.validTenantPackage(updateReqVO.getPackageId()); + + // 更新租户 + TenantDO updateObj = BeanUtils.toBean(updateReqVO, TenantDO.class); + tenantMapper.updateById(updateObj); + // 如果套餐发生变化,则修改其角色的权限 + if (ObjectUtil.notEqual(tenant.getPackageId(), updateReqVO.getPackageId())) { + updateTenantRoleMenu(tenant.getId(), tenantPackage.getMenuIds()); + } + } + + private void validTenantNameDuplicate(String name, Long id) { + TenantDO tenant = tenantMapper.selectByName(name); + if (tenant == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同名字的租户 + if (id == null) { + throw exception(TENANT_NAME_DUPLICATE, name); + } + if (!tenant.getId().equals(id)) { + throw exception(TENANT_NAME_DUPLICATE, name); + } + } + + private void validTenantWebsiteDuplicate(String website, Long id) { + if (StrUtil.isEmpty(website)) { + return; + } + TenantDO tenant = tenantMapper.selectByWebsite(website); + if (tenant == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同名字的租户 + if (id == null) { + throw exception(TENANT_WEBSITE_DUPLICATE, website); + } + if (!tenant.getId().equals(id)) { + throw exception(TENANT_WEBSITE_DUPLICATE, website); + } + } + + @Override + @DSTransactional + public void updateTenantRoleMenu(Long tenantId, Set menuIds) { + TenantUtils.execute(tenantId, () -> { + // 获得所有角色 + List roles = roleService.getRoleList(); + roles.forEach(role -> Assert.isTrue(tenantId.equals(role.getTenantId()), "角色({}/{}) 租户不匹配", + role.getId(), role.getTenantId(), tenantId)); // 兜底校验 + // 重新分配每个角色的权限 + roles.forEach(role -> { + // 如果是租户管理员,重新分配其权限为租户套餐的权限 + if (Objects.equals(role.getCode(), RoleCodeEnum.TENANT_ADMIN.getCode())) { + permissionService.assignRoleMenu(role.getId(), menuIds); + log.info("[updateTenantRoleMenu][租户管理员({}/{}) 的权限修改为({})]", role.getId(), role.getTenantId(), menuIds); + return; + } + // 如果是其他角色,则去掉超过套餐的权限 + Set roleMenuIds = permissionService.getRoleMenuListByRoleId(role.getId()); + roleMenuIds = CollUtil.intersectionDistinct(roleMenuIds, menuIds); + permissionService.assignRoleMenu(role.getId(), roleMenuIds); + log.info("[updateTenantRoleMenu][角色({}/{}) 的权限修改为({})]", role.getId(), role.getTenantId(), roleMenuIds); + }); + }); + } + + @Override + public void deleteTenant(Long id) { + // 校验存在 + validateUpdateTenant(id); + // 删除 + tenantMapper.deleteById(id); + } + + private TenantDO validateUpdateTenant(Long id) { + TenantDO tenant = tenantMapper.selectById(id); + if (tenant == null) { + throw exception(TENANT_NOT_EXISTS); + } + // 内置租户,不允许删除 + if (isSystemTenant(tenant)) { + throw exception(TENANT_CAN_NOT_UPDATE_SYSTEM); + } + return tenant; + } + + @Override + public TenantDO getTenant(Long id) { + return tenantMapper.selectById(id); + } + + @Override + public PageResult getTenantPage(TenantPageReqVO pageReqVO) { + return tenantMapper.selectPage(pageReqVO); + } + + @Override + public TenantDO getTenantByName(String name) { + return tenantMapper.selectByName(name); + } + + @Override + public TenantDO getTenantByWebsite(String website) { + return tenantMapper.selectByWebsite(website); + } + + @Override + public Long getTenantCountByPackageId(Long packageId) { + return tenantMapper.selectCountByPackageId(packageId); + } + + @Override + public List getTenantListByPackageId(Long packageId) { + return tenantMapper.selectListByPackageId(packageId); + } + + @Override + public void handleTenantInfo(TenantInfoHandler handler) { + // 如果禁用,则不执行逻辑 + if (isTenantDisable()) { + return; + } + // 获得租户 + TenantDO tenant = getTenant(TenantContextHolder.getRequiredTenantId()); + // 执行处理器 + handler.handle(tenant); + } + + @Override + public void handleTenantMenu(TenantMenuHandler handler) { + // 如果禁用,则不执行逻辑 + if (isTenantDisable()) { + return; + } + // 获得租户,然后获得菜单 + TenantDO tenant = getTenant(TenantContextHolder.getRequiredTenantId()); + Set menuIds; + if (isSystemTenant(tenant)) { // 系统租户,菜单是全量的 + menuIds = CollectionUtils.convertSet(menuService.getMenuList(), MenuDO::getId); + } else { + menuIds = tenantPackageService.getTenantPackage(tenant.getPackageId()).getMenuIds(); + } + // 执行处理器 + handler.handle(menuIds); + } + + private static boolean isSystemTenant(TenantDO tenant) { + return Objects.equals(tenant.getPackageId(), TenantDO.PACKAGE_ID_SYSTEM); + } + + private boolean isTenantDisable() { + return tenantProperties == null || Boolean.FALSE.equals(tenantProperties.getEnable()); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/handler/TenantInfoHandler.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/handler/TenantInfoHandler.java new file mode 100644 index 0000000..bed3017 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/handler/TenantInfoHandler.java @@ -0,0 +1,21 @@ +package com.win.module.system.service.tenant.handler; + +import com.win.module.system.dal.dataobject.tenant.TenantDO; + +/** + * 租户信息处理 + * 目的:尽量减少租户逻辑耦合到系统中 + * + * @author 芋道源码 + */ +public interface TenantInfoHandler { + + /** + * 基于传入的租户信息,进行相关逻辑的执行 + * 例如说,创建用户时,超过最大账户配额 + * + * @param tenant 租户信息 + */ + void handle(TenantDO tenant); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/handler/TenantMenuHandler.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/handler/TenantMenuHandler.java new file mode 100644 index 0000000..999040a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/tenant/handler/TenantMenuHandler.java @@ -0,0 +1,21 @@ +package com.win.module.system.service.tenant.handler; + +import java.util.Set; + +/** + * 租户菜单处理 + * 目的:尽量减少租户逻辑耦合到系统中 + * + * @author 芋道源码 + */ +public interface TenantMenuHandler { + + /** + * 基于传入的租户菜单【全】列表,进行相关逻辑的执行 + * 例如说,返回可分配菜单的时候,可以移除多余的 + * + * @param menuIds 菜单列表 + */ + void handle(Set menuIds); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserService.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserService.java new file mode 100644 index 0000000..9c99625 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserService.java @@ -0,0 +1,210 @@ +package com.win.module.system.service.user; + +import cn.hutool.core.collection.CollUtil; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import com.win.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import com.win.module.system.controller.admin.user.vo.user.UserImportExcelVO; +import com.win.module.system.controller.admin.user.vo.user.UserImportRespVO; +import com.win.module.system.controller.admin.user.vo.user.UserPageReqVO; +import com.win.module.system.controller.admin.user.vo.user.UserSaveReqVO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; + +import jakarta.validation.Valid; +import java.io.InputStream; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 后台用户 Service 接口 + * + * @author 芋道源码 + */ +public interface AdminUserService { + + /** + * 创建用户 + * + * @param createReqVO 用户信息 + * @return 用户编号 + */ + Long createUser(@Valid UserSaveReqVO createReqVO); + + /** + * 修改用户 + * + * @param updateReqVO 用户信息 + */ + void updateUser(@Valid UserSaveReqVO updateReqVO); + + /** + * 更新用户的最后登陆信息 + * + * @param id 用户编号 + * @param loginIp 登陆 IP + */ + void updateUserLogin(Long id, String loginIp); + + /** + * 修改用户个人信息 + * + * @param id 用户编号 + * @param reqVO 用户个人信息 + */ + void updateUserProfile(Long id, @Valid UserProfileUpdateReqVO reqVO); + + /** + * 修改用户个人密码 + * + * @param id 用户编号 + * @param reqVO 更新用户个人密码 + */ + void updateUserPassword(Long id, @Valid UserProfileUpdatePasswordReqVO reqVO); + + /** + * 更新用户头像 + * + * @param id 用户 id + * @param avatarFile 头像文件 + */ + String updateUserAvatar(Long id, InputStream avatarFile) throws Exception; + + /** + * 修改密码 + * + * @param id 用户编号 + * @param password 密码 + */ + void updateUserPassword(Long id, String password); + + /** + * 修改状态 + * + * @param id 用户编号 + * @param status 状态 + */ + void updateUserStatus(Long id, Integer status); + + /** + * 删除用户 + * + * @param id 用户编号 + */ + void deleteUser(Long id); + + /** + * 通过用户名查询用户 + * + * @param username 用户名 + * @return 用户对象信息 + */ + AdminUserDO getUserByUsername(String username); + + /** + * 通过手机号获取用户 + * + * @param mobile 手机号 + * @return 用户对象信息 + */ + AdminUserDO getUserByMobile(String mobile); + + /** + * 获得用户分页列表 + * + * @param reqVO 分页条件 + * @return 分页列表 + */ + PageResult getUserPage(UserPageReqVO reqVO); + + /** + * 通过用户 ID 查询用户 + * + * @param id 用户ID + * @return 用户对象信息 + */ + AdminUserDO getUser(Long id); + + /** + * 获得指定部门的用户数组 + * + * @param deptIds 部门数组 + * @return 用户数组 + */ + List getUserListByDeptIds(Collection deptIds); + + /** + * 获得指定岗位的用户数组 + * + * @param postIds 岗位数组 + * @return 用户数组 + */ + List getUserListByPostIds(Collection postIds); + + /** + * 获得用户列表 + * + * @param ids 用户编号数组 + * @return 用户列表 + */ + List getUserList(Collection ids); + + /** + * 校验用户们是否有效。如下情况,视为无效: + * 1. 用户编号不存在 + * 2. 用户被禁用 + * + * @param ids 用户编号数组 + */ + void validateUserList(Collection ids); + + /** + * 获得用户 Map + * + * @param ids 用户编号数组 + * @return 用户 Map + */ + default Map getUserMap(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return new HashMap<>(); + } + return CollectionUtils.convertMap(getUserList(ids), AdminUserDO::getId); + } + + /** + * 获得用户列表,基于昵称模糊匹配 + * + * @param nickname 昵称 + * @return 用户列表 + */ + List getUserListByNickname(String nickname); + + /** + * 批量导入用户 + * + * @param importUsers 导入用户列表 + * @param isUpdateSupport 是否支持更新 + * @return 导入结果 + */ + UserImportRespVO importUserList(List importUsers, boolean isUpdateSupport); + + /** + * 获得指定状态的用户们 + * + * @param status 状态 + * @return 用户们 + */ + List getUserListByStatus(Integer status); + + /** + * 判断密码是否匹配 + * + * @param rawPassword 未加密的密码 + * @param encodedPassword 加密后的密码 + * @return 是否匹配 + */ + boolean isPasswordMatch(String rawPassword, String encodedPassword); + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserServiceImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserServiceImpl.java new file mode 100644 index 0000000..303042d --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/user/AdminUserServiceImpl.java @@ -0,0 +1,486 @@ +package com.win.module.system.service.user; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.enums.CommonStatusEnum; +import com.win.framework.common.exception.ServiceException; +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.util.collection.CollectionUtils; +import com.win.framework.common.util.object.BeanUtils; +import com.win.framework.datapermission.core.util.DataPermissionUtils; +import com.win.module.infra.api.file.FileApi; +import com.win.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import com.win.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import com.win.module.system.controller.admin.user.vo.user.UserImportExcelVO; +import com.win.module.system.controller.admin.user.vo.user.UserImportRespVO; +import com.win.module.system.controller.admin.user.vo.user.UserPageReqVO; +import com.win.module.system.controller.admin.user.vo.user.UserSaveReqVO; +import com.win.module.system.dal.dataobject.dept.DeptDO; +import com.win.module.system.dal.dataobject.dept.UserPostDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.module.system.dal.mysql.dept.UserPostMapper; +import com.win.module.system.dal.mysql.user.AdminUserMapper; +import com.win.module.system.service.dept.DeptService; +import com.win.module.system.service.dept.PostService; +import com.win.module.system.service.permission.PermissionService; +import com.win.module.system.service.tenant.TenantService; +import com.google.common.annotations.VisibleForTesting; +import com.mzt.logapi.context.LogRecordContext; +import com.mzt.logapi.service.impl.DiffParseFunction; +import com.mzt.logapi.starter.annotation.LogRecord; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.InputStream; +import java.time.LocalDateTime; +import java.util.*; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.framework.common.util.collection.CollectionUtils.convertList; +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; +import static com.win.module.system.enums.ErrorCodeConstants.*; +import static com.win.module.system.enums.LogRecordConstants.*; + +/** + * 后台用户 Service 实现类 + * + * @author 芋道源码 + */ +@Service("adminUserService") +@Slf4j +public class AdminUserServiceImpl implements AdminUserService { + + @Value("${sys.user.init-password:winyuanma}") + private String userInitPassword; + + @Resource + private AdminUserMapper userMapper; + + @Resource + private DeptService deptService; + @Resource + private PostService postService; + @Resource + private PermissionService permissionService; + @Resource + private PasswordEncoder passwordEncoder; + @Resource + @Lazy // 延迟,避免循环依赖报错 + private TenantService tenantService; + + @Resource + private UserPostMapper userPostMapper; + + @Resource + private FileApi fileApi; + + @Override + @Transactional(rollbackFor = Exception.class) + @LogRecord(type = SYSTEM_USER_TYPE, subType = SYSTEM_USER_CREATE_SUB_TYPE, bizNo = "{{#user.id}}", + success = SYSTEM_USER_CREATE_SUCCESS) + public Long createUser(UserSaveReqVO createReqVO) { + // 1.1 校验账户配合 + tenantService.handleTenantInfo(tenant -> { + long count = userMapper.selectCount(); + if (count >= tenant.getAccountCount()) { + throw exception(USER_COUNT_MAX, tenant.getAccountCount()); + } + }); + // 1.2 校验正确性 + validateUserForCreateOrUpdate(null, createReqVO.getUsername(), + createReqVO.getMobile(), createReqVO.getEmail(), createReqVO.getDeptId(), createReqVO.getPostIds()); + // 2.1 插入用户 + AdminUserDO user = BeanUtils.toBean(createReqVO, AdminUserDO.class); + user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 + user.setPassword(encodePassword(createReqVO.getPassword())); // 加密密码 + userMapper.insert(user); + // 2.2 插入关联岗位 + if (CollectionUtil.isNotEmpty(user.getPostIds())) { + userPostMapper.insertBatch(convertList(user.getPostIds(), + postId -> new UserPostDO().setUserId(user.getId()).setPostId(postId))); + } + + // 3. 记录操作日志上下文 + LogRecordContext.putVariable("user", user); + return user.getId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + @LogRecord(type = SYSTEM_USER_TYPE, subType = SYSTEM_USER_UPDATE_SUB_TYPE, bizNo = "{{#updateReqVO.id}}", + success = SYSTEM_USER_UPDATE_SUCCESS) + public void updateUser(UserSaveReqVO updateReqVO) { + updateReqVO.setPassword(null); // 特殊:此处不更新密码 + // 1. 校验正确性 + AdminUserDO oldUser = validateUserForCreateOrUpdate(updateReqVO.getId(), updateReqVO.getUsername(), + updateReqVO.getMobile(), updateReqVO.getEmail(), updateReqVO.getDeptId(), updateReqVO.getPostIds()); + + // 2.1 更新用户 + AdminUserDO updateObj = BeanUtils.toBean(updateReqVO, AdminUserDO.class); + userMapper.updateById(updateObj); + // 2.2 更新岗位 + updateUserPost(updateReqVO, updateObj); + + // 3. 记录操作日志上下文 + LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldUser, UserSaveReqVO.class)); + LogRecordContext.putVariable("user", oldUser); + } + + private void updateUserPost(UserSaveReqVO reqVO, AdminUserDO updateObj) { + Long userId = reqVO.getId(); + Set dbPostIds = convertSet(userPostMapper.selectListByUserId(userId), UserPostDO::getPostId); + // 计算新增和删除的岗位编号 + Set postIds = CollUtil.emptyIfNull(updateObj.getPostIds()); + Collection createPostIds = CollUtil.subtract(postIds, dbPostIds); + Collection deletePostIds = CollUtil.subtract(dbPostIds, postIds); + // 执行新增和删除。对于已经授权的岗位,不用做任何处理 + if (!CollectionUtil.isEmpty(createPostIds)) { + userPostMapper.insertBatch(convertList(createPostIds, + postId -> new UserPostDO().setUserId(userId).setPostId(postId))); + } + if (!CollectionUtil.isEmpty(deletePostIds)) { + userPostMapper.deleteByUserIdAndPostId(userId, deletePostIds); + } + } + + @Override + public void updateUserLogin(Long id, String loginIp) { + userMapper.updateById(new AdminUserDO().setId(id).setLoginIp(loginIp).setLoginDate(LocalDateTime.now())); + } + + @Override + public void updateUserProfile(Long id, UserProfileUpdateReqVO reqVO) { + // 校验正确性 + validateUserExists(id); + validateEmailUnique(id, reqVO.getEmail()); + validateMobileUnique(id, reqVO.getMobile()); + // 执行更新 + userMapper.updateById(BeanUtils.toBean(reqVO, AdminUserDO.class).setId(id)); + } + + @Override + public void updateUserPassword(Long id, UserProfileUpdatePasswordReqVO reqVO) { + // 校验旧密码密码 + validateOldPassword(id, reqVO.getOldPassword()); + // 执行更新 + AdminUserDO updateObj = new AdminUserDO().setId(id); + updateObj.setPassword(encodePassword(reqVO.getNewPassword())); // 加密密码 + userMapper.updateById(updateObj); + } + + @Override + public String updateUserAvatar(Long id, InputStream avatarFile) { + validateUserExists(id); + // 存储文件 + String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile)); + // 更新路径 + AdminUserDO sysUserDO = new AdminUserDO(); + sysUserDO.setId(id); + sysUserDO.setAvatar(avatar); + userMapper.updateById(sysUserDO); + return avatar; + } + + @Override + @LogRecord(type = SYSTEM_USER_TYPE, subType = SYSTEM_USER_UPDATE_PASSWORD_SUB_TYPE, bizNo = "{{#id}}", + success = SYSTEM_USER_UPDATE_PASSWORD_SUCCESS) + public void updateUserPassword(Long id, String password) { + // 1. 校验用户存在 + AdminUserDO user = validateUserExists(id); + + // 2. 更新密码 + AdminUserDO updateObj = new AdminUserDO(); + updateObj.setId(id); + updateObj.setPassword(encodePassword(password)); // 加密密码 + userMapper.updateById(updateObj); + + // 3. 记录操作日志上下文 + LogRecordContext.putVariable("user", user); + LogRecordContext.putVariable("newPassword", updateObj.getPassword()); + } + + @Override + public void updateUserStatus(Long id, Integer status) { + // 校验用户存在 + validateUserExists(id); + // 更新状态 + AdminUserDO updateObj = new AdminUserDO(); + updateObj.setId(id); + updateObj.setStatus(status); + userMapper.updateById(updateObj); + } + + @Override + @Transactional(rollbackFor = Exception.class) + @LogRecord(type = SYSTEM_USER_TYPE, subType = SYSTEM_USER_DELETE_SUB_TYPE, bizNo = "{{#id}}", + success = SYSTEM_USER_DELETE_SUCCESS) + public void deleteUser(Long id) { + // 1. 校验用户存在 + AdminUserDO user = validateUserExists(id); + + // 2.1 删除用户 + userMapper.deleteById(id); + // 2.2 删除用户关联数据 + permissionService.processUserDeleted(id); + // 2.2 删除用户岗位 + userPostMapper.deleteByUserId(id); + + // 3. 记录操作日志上下文 + LogRecordContext.putVariable("user", user); + } + + @Override + public AdminUserDO getUserByUsername(String username) { + return userMapper.selectByUsername(username); + } + + @Override + public AdminUserDO getUserByMobile(String mobile) { + return userMapper.selectByMobile(mobile); + } + + @Override + public PageResult getUserPage(UserPageReqVO reqVO) { + return userMapper.selectPage(reqVO, getDeptCondition(reqVO.getDeptId())); + } + + @Override + public AdminUserDO getUser(Long id) { + return userMapper.selectById(id); + } + + @Override + public List getUserListByDeptIds(Collection deptIds) { + if (CollUtil.isEmpty(deptIds)) { + return Collections.emptyList(); + } + return userMapper.selectListByDeptIds(deptIds); + } + + @Override + public List getUserListByPostIds(Collection postIds) { + if (CollUtil.isEmpty(postIds)) { + return Collections.emptyList(); + } + Set userIds = convertSet(userPostMapper.selectListByPostIds(postIds), UserPostDO::getUserId); + if (CollUtil.isEmpty(userIds)) { + return Collections.emptyList(); + } + return userMapper.selectBatchIds(userIds); + } + + @Override + public List getUserList(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return Collections.emptyList(); + } + return userMapper.selectBatchIds(ids); + } + + @Override + public void validateUserList(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 获得岗位信息 + List users = userMapper.selectBatchIds(ids); + Map userMap = CollectionUtils.convertMap(users, AdminUserDO::getId); + // 校验 + ids.forEach(id -> { + AdminUserDO user = userMap.get(id); + if (user == null) { + throw exception(USER_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(user.getStatus())) { + throw exception(USER_IS_DISABLE, user.getNickname()); + } + }); + } + + @Override + public List getUserListByNickname(String nickname) { + return userMapper.selectListByNickname(nickname); + } + + /** + * 获得部门条件:查询指定部门的子部门编号们,包括自身 + * @param deptId 部门编号 + * @return 部门编号集合 + */ + private Set getDeptCondition(Long deptId) { + if (deptId == null) { + return Collections.emptySet(); + } + Set deptIds = convertSet(deptService.getChildDeptList(deptId), DeptDO::getId); + deptIds.add(deptId); // 包括自身 + return deptIds; + } + + private AdminUserDO validateUserForCreateOrUpdate(Long id, String username, String mobile, String email, + Long deptId, Set postIds) { + // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 + return DataPermissionUtils.executeIgnore(() -> { + // 校验用户存在 + AdminUserDO user = validateUserExists(id); + // 校验用户名唯一 + validateUsernameUnique(id, username); + // 校验手机号唯一 + validateMobileUnique(id, mobile); + // 校验邮箱唯一 + validateEmailUnique(id, email); + // 校验部门处于开启状态 + deptService.validateDeptList(CollectionUtils.singleton(deptId)); + // 校验岗位处于开启状态 + postService.validatePostList(postIds); + return user; + }); + } + + @VisibleForTesting + AdminUserDO validateUserExists(Long id) { + if (id == null) { + return null; + } + AdminUserDO user = userMapper.selectById(id); + if (user == null) { + throw exception(USER_NOT_EXISTS); + } + return user; + } + + @VisibleForTesting + void validateUsernameUnique(Long id, String username) { + if (StrUtil.isBlank(username)) { + return; + } + AdminUserDO user = userMapper.selectByUsername(username); + if (user == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(USER_USERNAME_EXISTS); + } + if (!user.getId().equals(id)) { + throw exception(USER_USERNAME_EXISTS); + } + } + + @VisibleForTesting + void validateEmailUnique(Long id, String email) { + if (StrUtil.isBlank(email)) { + return; + } + AdminUserDO user = userMapper.selectByEmail(email); + if (user == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(USER_EMAIL_EXISTS); + } + if (!user.getId().equals(id)) { + throw exception(USER_EMAIL_EXISTS); + } + } + + @VisibleForTesting + void validateMobileUnique(Long id, String mobile) { + if (StrUtil.isBlank(mobile)) { + return; + } + AdminUserDO user = userMapper.selectByMobile(mobile); + if (user == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(USER_MOBILE_EXISTS); + } + if (!user.getId().equals(id)) { + throw exception(USER_MOBILE_EXISTS); + } + } + + /** + * 校验旧密码 + * @param id 用户 id + * @param oldPassword 旧密码 + */ + @VisibleForTesting + void validateOldPassword(Long id, String oldPassword) { + AdminUserDO user = userMapper.selectById(id); + if (user == null) { + throw exception(USER_NOT_EXISTS); + } + if (!isPasswordMatch(oldPassword, user.getPassword())) { + throw exception(USER_PASSWORD_FAILED); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入 + public UserImportRespVO importUserList(List importUsers, boolean isUpdateSupport) { + if (CollUtil.isEmpty(importUsers)) { + throw exception(USER_IMPORT_LIST_IS_EMPTY); + } + UserImportRespVO respVO = UserImportRespVO.builder().createUsernames(new ArrayList<>()) + .updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build(); + importUsers.forEach(importUser -> { + // 校验,判断是否有不符合的原因 + try { + validateUserForCreateOrUpdate(null, null, importUser.getMobile(), importUser.getEmail(), + importUser.getDeptId(), null); + } catch (ServiceException ex) { + respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage()); + return; + } + // 判断如果不存在,在进行插入 + AdminUserDO existUser = userMapper.selectByUsername(importUser.getUsername()); + if (existUser == null) { + userMapper.insert(BeanUtils.toBean(importUser, AdminUserDO.class) + .setPassword(encodePassword(userInitPassword)).setPostIds(new HashSet<>())); // 设置默认密码及空岗位编号数组 + respVO.getCreateUsernames().add(importUser.getUsername()); + return; + } + // 如果存在,判断是否允许更新 + if (!isUpdateSupport) { + respVO.getFailureUsernames().put(importUser.getUsername(), USER_USERNAME_EXISTS.getMsg()); + return; + } + AdminUserDO updateUser = BeanUtils.toBean(importUser, AdminUserDO.class); + updateUser.setId(existUser.getId()); + userMapper.updateById(updateUser); + respVO.getUpdateUsernames().add(importUser.getUsername()); + }); + return respVO; + } + + @Override + public List getUserListByStatus(Integer status) { + return userMapper.selectListByStatus(status); + } + + @Override + public boolean isPasswordMatch(String rawPassword, String encodedPassword) { + return passwordEncoder.matches(rawPassword, encodedPassword); + } + + /** + * 对密码进行加密 + * + * @param password 密码 + * @return 加密后的密码 + */ + private String encodePassword(String password) { + return passwordEncoder.encode(password); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/util/oauth2/OAuth2Utils.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/util/oauth2/OAuth2Utils.java new file mode 100644 index 0000000..1d0c5ed --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/util/oauth2/OAuth2Utils.java @@ -0,0 +1,103 @@ +package com.win.module.system.util.oauth2; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.StrUtil; +import com.win.framework.common.util.http.HttpUtils; +import com.win.framework.security.core.util.SecurityFrameworkUtils; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.*; + +/** + * OAuth2 相关的工具类 + * + * @author 芋道源码 + */ +public class OAuth2Utils { + + /** + * 构建授权码模式下,重定向的 URI + * + * copy from Spring Security OAuth2 的 AuthorizationEndpoint 类的 getSuccessfulRedirect 方法 + * + * @param redirectUri 重定向 URI + * @param authorizationCode 授权码 + * @param state 状态 + * @return 授权码模式下的重定向 URI + */ + public static String buildAuthorizationCodeRedirectUri(String redirectUri, String authorizationCode, String state) { + Map query = new LinkedHashMap<>(); + query.put("code", authorizationCode); + if (state != null) { + query.put("state", state); + } + return HttpUtils.append(redirectUri, query, null, false); + } + + /** + * 构建简化模式下,重定向的 URI + * + * copy from Spring Security OAuth2 的 AuthorizationEndpoint 类的 appendAccessToken 方法 + * + * @param redirectUri 重定向 URI + * @param accessToken 访问令牌 + * @param state 状态 + * @param expireTime 过期时间 + * @param scopes 授权范围 + * @param additionalInformation 附加信息 + * @return 简化授权模式下的重定向 URI + */ + public static String buildImplicitRedirectUri(String redirectUri, String accessToken, String state, LocalDateTime expireTime, + Collection scopes, Map additionalInformation) { + Map vars = new LinkedHashMap(); + Map keys = new HashMap(); + vars.put("access_token", accessToken); + vars.put("token_type", SecurityFrameworkUtils.AUTHORIZATION_BEARER.toLowerCase()); + if (state != null) { + vars.put("state", state); + } + if (expireTime != null) { + vars.put("expires_in", getExpiresIn(expireTime)); + } + if (CollUtil.isNotEmpty(scopes)) { + vars.put("scope", buildScopeStr(scopes)); + } + if (CollUtil.isNotEmpty(additionalInformation)) { + for (String key : additionalInformation.keySet()) { + Object value = additionalInformation.get(key); + if (value != null) { + keys.put("extra_" + key, key); + vars.put("extra_" + key, value); + } + } + } + // Do not include the refresh token (even if there is one) + return HttpUtils.append(redirectUri, vars, keys, true); + } + + public static String buildUnsuccessfulRedirect(String redirectUri, String responseType, String state, + String error, String description) { + Map query = new LinkedHashMap(); + query.put("error", error); + query.put("error_description", description); + if (state != null) { + query.put("state", state); + } + return HttpUtils.append(redirectUri, query, null, !responseType.contains("code")); + } + + public static long getExpiresIn(LocalDateTime expireTime) { + return LocalDateTimeUtil.between(LocalDateTime.now(), expireTime, ChronoUnit.SECONDS); + } + + public static String buildScopeStr(Collection scopes) { + return CollUtil.join(scopes, " "); + } + + public static List buildScopes(String scope) { + return StrUtil.split(scope, ' '); + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/util/package-info.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/util/package-info.java new file mode 100644 index 0000000..e40187a --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/util/package-info.java @@ -0,0 +1,4 @@ +/** + * 每个模块的 util 包,放专属当前模块的 Utils 工具类 + */ +package com.win.module.system.util; diff --git a/win-module-system/win-module-system-biz/src/main/resources/META-INF/services/com.xingyuv.captcha.service.CaptchaCacheService b/win-module-system/win-module-system-biz/src/main/resources/META-INF/services/com.xingyuv.captcha.service.CaptchaCacheService new file mode 100644 index 0000000..5a16963 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/resources/META-INF/services/com.xingyuv.captcha.service.CaptchaCacheService @@ -0,0 +1 @@ +com.win.module.system.framework.captcha.core.RedisCaptchaServiceImpl diff --git a/win-module-system/win-module-system-biz/src/main/resources/application-dev.yaml b/win-module-system/win-module-system-biz/src/main/resources/application-dev.yaml new file mode 100644 index 0000000..12576d0 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/resources/application-dev.yaml @@ -0,0 +1,171 @@ +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 5 # 初始连接数 + min-idle: 10 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: 123456 + slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: 123456 + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: 400-infra.server.iocoder.cn # 地址 + port: 6379 # 端口 + database: 1 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + name-server: 127.0.0.1:9876 # RocketMQ Namesrv + +spring: + # RabbitMQ 配置项,对应 RabbitProperties 配置类 + rabbitmq: + host: 127.0.0.1 # RabbitMQ 服务的地址 + port: 5672 # RabbitMQ 服务的端口 + username: guest # RabbitMQ 服务的账号 + password: guest # RabbitMQ 服务的密码 + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 + +--- #################### 定时任务相关配置 #################### +xxl: + job: + admin: + addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + # Spring Boot Admin Server 服务端的相关配置 + context-path: /admin # 配置 Spring + +--- #################### 微信公众号、小程序相关配置 #################### +wx: + mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 + # app-id: wx041349c6f39b268b + # secret: 5abee519483bc9f8cb37ce280e814bd0 + app-id: wx5b23ba7a5589ecbb # 测试号 + secret: 2a7b3b20c537e52e74afd395eb85f61f + # 存储配置,解决 AccessToken 的跨节点的共享 + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wx # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 + # appid: wx62056c0d5e8db250 + # secret: 333ae72f41552af1e998fe1f54e1584a + appid: wx63c280fe3248a3e7 # wenhualian的接口测试号 + secret: 6f270509224a7ae1296bbf1c8cb97aed + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wa # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +win: + xss: + enable: false + exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 + - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + pay: + pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify + pay-return-url: http://niubi.natapp1.cc/api/pay/order/return + refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify + demo: true # 开启演示模式 + +justauth: + enabled: true + type: + DINGTALK: # 钉钉 + client-id: dingvrnreaje3yqvzhxg + client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI + ignore-check-redirect-uri: true + WECHAT_ENTERPRISE: # 企业微信 + client-id: wwd411c69a39ad2e54 + client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw + agent-id: 1000004 + ignore-check-redirect-uri: true + # noinspection SpringBootApplicationYaml + WECHAT_MINI_APP: # 微信小程序 + client-id: ${wx.miniapp.appid} + client-secret: ${wx.miniapp.secret} + ignore-check-redirect-uri: true + ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验 + WECHAT_MP: # 微信公众号 + client-id: ${wx.mp.app-id} + client-secret: ${wx.mp.secret} + ignore-check-redirect-uri: true + cache: + type: REDIS + prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: + timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 diff --git a/win-module-system/win-module-system-biz/src/main/resources/application-local.yaml b/win-module-system/win-module-system-biz/src/main/resources/application-local.yaml new file mode 100644 index 0000000..77f0bb3 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/resources/application-local.yaml @@ -0,0 +1,195 @@ +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT now() # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + #url: jdbc:mysql://dev.ccwin-in.com:23113/sfms_cloud_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:postgresql://localhost:5432/huaxiang-cloud-dev?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai + # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 + # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + username: postgres + password: psql123 + # username: sa # SQL Server 连接的示例 + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 + # username: SYSDBA # DM 连接的示例 + # password: SYSDBA # DM 连接的示例 + slave: # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms_cloud_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: sfms + password: Microsoft@2023 + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: dev.ccwin-in.com # 地址 + port: 23114 # 端口 + database: 12 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + name-server: 127.0.0.1:9876 # RocketMQ Namesrv + +spring: + # RabbitMQ 配置项,对应 RabbitProperties 配置类 + rabbitmq: + host: 127.0.0.1 # RabbitMQ 服务的地址 + port: 5672 # RabbitMQ 服务的端口 + username: guest # RabbitMQ 服务的账号 + password: guest # RabbitMQ 服务的密码 + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + enabled: false # 是否开启调度中心,默认为 true 开启 + admin: + addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + com.win.module.system.dal.mysql: debug + com.win.module.system.dal.mysql.sensitiveword.SensitiveWordMapper: INFO # 配置 SensitiveWordMapper 的日志级别为 info + com.win.module.system.dal.mysql.sms.SmsChannelMapper: INFO # 配置 SmsChannelMapper 的日志级别为 info + +--- #################### 微信公众号、小程序相关配置 #################### +wx: + mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 + # app-id: wx041349c6f39b268b # 测试号(牛希尧提供的) + # secret: 5abee519483bc9f8cb37ce280e814bd0 + app-id: wx5b23ba7a5589ecbb # 测试号(自己的) + secret: 2a7b3b20c537e52e74afd395eb85f61f + # app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的) + # secret: bd4f9fab889591b62aeac0d7b8d8b4a0 + # 存储配置,解决 AccessToken 的跨节点的共享 + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wx # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 + # appid: wx62056c0d5e8db250 # 测试号(牛希尧提供的) + # secret: 333ae72f41552af1e998fe1f54e1584a + appid: wx63c280fe3248a3e7 # wenhualian的接口测试号 + secret: 6f270509224a7ae1296bbf1c8cb97aed + # appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的) + # secret: 4a1a04e07f6a4a0751b39c3064a92c8b + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wa # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +win: + env: # 多环境的配置项 + tag: ${HOSTNAME} + security: + mock-enable: true + xss: + enable: false + exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 + - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + pay: + pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify + pay-return-url: http://niubi.natapp1.cc/api/pay/order/return + refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify + access-log: # 访问日志的配置项 + enable: false + demo: false # 关闭演示模式 + +justauth: + enabled: true + type: + DINGTALK: # 钉钉 + client-id: dingvrnreaje3yqvzhxg + client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI + ignore-check-redirect-uri: true + WECHAT_ENTERPRISE: # 企业微信 + client-id: wwd411c69a39ad2e54 + client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw + agent-id: 1000004 + ignore-check-redirect-uri: true + # noinspection SpringBootApplicationYaml + WECHAT_MP: # 微信公众号 + client-id: ${wx.mp.app-id} + client-secret: ${wx.mp.secret} + ignore-check-redirect-uri: true + cache: + type: REDIS + prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: + timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 diff --git a/win-module-system/win-module-system-biz/src/main/resources/application.yaml b/win-module-system/win-module-system-biz/src/main/resources/application.yaml new file mode 100644 index 0000000..e8532f0 --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/resources/application.yaml @@ -0,0 +1,184 @@ +spring: + main: + allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 + allow-bean-definition-overriding: true # 允许 Bean 覆盖,例如说 Feign 等会存在重复定义的服务 + + # Servlet 配置 + servlet: + # 文件上传相关配置项 + multipart: + max-file-size: 16MB # 单个文件大小 + max-request-size: 32MB # 设置总上传的文件大小 + mvc: + pathmatch: + matching-strategy: ANT_PATH_MATCHER # 解决 SpringFox 与 SpringBoot 2.6.x 不兼容的问题,参见 SpringFoxHandlerProviderBeanPostProcessor 类 + + # Jackson 配置项 + jackson: + serialization: + write-dates-as-timestamps: true # 设置 LocalDateTime 的格式,使用时间戳 + write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401 + write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳 + fail-on-empty-beans: false # 允许序列化无属性的 Bean + + # Cache 配置项 + cache: + type: REDIS + redis: + time-to-live: 1h # 设置过期时间为 1 小时 + +--- #################### 接口文档配置 #################### + +springdoc: + api-docs: + enabled: true # 1. 是否开启 Swagger 接文档的元数据 + path: /v3/api-docs + swagger-ui: + enabled: true # 2.1 是否开启 Swagger 文档的官方 UI 界面 + path: /swagger-ui.html + default-flat-param-object: true # 参见 https://doc.xiaominfo.com/docs/faq/v4/knife4j-parameterobject-flat-param 文档 + +knife4j: + enable: true # 2.2 是否开启 Swagger 文档的 Knife4j UI 界面 + setting: + language: zh_cn + +# MyBatis Plus 的配置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + global-config: + db-config: + id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。 + # id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库 + # id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库 + # id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解 + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + banner: false # 关闭控制台的 Banner 打印 + type-aliases-package: ${win.info.base-package}.dal.dataobject + encryptor: + password: XDV71a+xqStEA3WH # 加解密的秘钥,可使用 https://www.imaegoo.com/2020/aes-key-generator/ 网站生成 + +mybatis-plus-join: + banner: false # 关闭控制台的 Banner 打印 + +# Spring Data Redis 配置 +spring: + data: + redis: + repositories: + enabled: false # 项目未使用到 Spring Data Redis 的 Repository,所以直接禁用,保证启动速度 + +# VO 转换(数据翻译)相关 +easy-trans: + is-enable-global: true # 启用全局翻译(拦截所有 SpringMVC ResponseBody 进行自动翻译 )。如果对于性能要求很高可关闭此配置,或通过 @IgnoreTrans 忽略某个接口 + is-enable-cloud: false # 禁用 TransType.RPC 微服务模式 + +--- #################### RPC 远程调用相关配置 #################### + +--- #################### 消息队列相关 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + # Producer 配置项 + producer: + group: ${spring.application.name}_PRODUCER # 生产者分组 + +spring: + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + # Kafka Producer 配置项 + producer: + acks: 1 # 0-不应答。1-leader 应答。all-所有 leader 和 follower 应答。 + retries: 3 # 发送失败时,重试发送的次数 + value-serializer: org.springframework.kafka.support.serializer.JsonSerializer # 消息的 value 的序列化 + # Kafka Consumer 配置项 + consumer: + auto-offset-reset: earliest # 设置消费者分组最初的消费进度为 earliest 。可参考博客 https://blog.csdn.net/lishuangzhe7047/article/details/74530417 理解 + value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer + properties: + spring.json.trusted.packages: '*' + # Kafka Consumer Listener 监听器配置 + listener: + missing-topics-fatal: false # 消费监听接口监听的主题不存在时,默认会报错。所以通过设置为 false ,解决报错 + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + executor: + appname: ${spring.application.name} # 执行器 AppName + logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径 + accessToken: default_token # 执行器通讯TOKEN + +--- #################### 验证码相关配置 #################### + +aj: + captcha: + jigsaw: classpath:images/jigsaw # 滑动验证,底图路径,不配置将使用默认图片;以 classpath: 开头,取 resource 目录下路径 + pic-click: classpath:images/pic-click # 滑动验证,底图路径,不配置将使用默认图片;以 classpath: 开头,取 resource 目录下路径 + cache-type: redis # 缓存 local/redis... + cache-number: 1000 # local 缓存的阈值,达到这个值,清除缓存 + timing-clear: 180 # local定时清除过期缓存(单位秒),设置为0代表不执行 + type: blockPuzzle # 验证码类型 default两种都实例化。 blockPuzzle 滑块拼图 clickWord 文字点选 + water-mark: 芋道源码 # 右下角水印文字(我的水印),可使用 https://tool.chinaz.com/tools/unicode.aspx 中文转 Unicode,Linux 可能需要转 unicode + interference-options: 0 # 滑动干扰项(0/1/2) + req-frequency-limit-enable: false # 接口请求次数一分钟限制是否开启 true|false + req-get-lock-limit: 5 # 验证失败5次,get接口锁定 + req-get-lock-seconds: 10 # 验证失败后,锁定时间间隔 + req-get-minute-limit: 30 # get 接口一分钟内请求数限制 + req-check-minute-limit: 60 # check 接口一分钟内请求数限制 + req-verify-minute-limit: 60 # verify 接口一分钟内请求数限制 + +--- #################### 芋道相关配置 #################### + +win: + info: + version: 1.0.0 + base-package: com.win.module.system + web: + admin-ui: + url: http://dashboard.win.iocoder.cn # Admin 管理后台 UI 的地址 + swagger: + title: 管理后台 + description: 提供管理员管理的所有功能 + version: ${win.info.version} + base-package: ${win.info.base-package} + captcha: + enable: true # 验证码的开关,默认为 true; + tenant: # 多租户相关配置项 + enable: true + ignore-urls: + - /admin-api/system/tenant/get-id-by-name # 基于名字获取租户,不许带租户编号 + - /admin-api/system/tenant/get-by-website # 基于域名获取租户,不许带租户编号 + - /admin-api/system/captcha/get-image # 获取图片验证码,和租户无关 + - /admin-api/system/captcha/get # 获取图片验证码,和租户无关 + - /admin-api/system/captcha/check # 校验图片验证码,和租户无关 + - /admin-api/system/sms/callback/* # 短信回调接口,无法带上租户编号 + - /rpc-api/system/tenant/valid # 防止递归。避免调用 /rpc-api/system/tenant/valid 接口时,又去触发 /rpc-api/system/tenant/valid 去校验 + - /rpc-api/system/tenant/id-list # 获得租户列表的时候,无需传递租户编号 + - /rpc-api/system/oauth2/token/check # 访问令牌校验时,无需传递租户编号;主要解决上传文件的场景,前端不会传递 tenant-id! + ignore-tables: + - system_tenant + - system_tenant_package + - system_dict_data + - system_dict_type + - system_error_code + - system_menu + - system_sms_channel + - system_sms_template + - system_sms_log + - system_sensitive_word + - system_oauth2_client + - system_mail_account + - system_mail_template + - system_mail_log + - system_notify_template + sms-code: # 短信验证码相关的配置项 + expire-times: 10m + send-frequency: 1m + send-maximum-quantity-per-day: 10 + begin-code: 9999 # 这里配置 9999 的原因是,测试方便。 + end-code: 9999 # 这里配置 9999 的原因是,测试方便。 +debug: false diff --git a/win-module-system/win-module-system-biz/src/main/resources/bootstrap-local.yaml b/win-module-system/win-module-system-biz/src/main/resources/bootstrap-local.yaml new file mode 100644 index 0000000..e861abb --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/resources/bootstrap-local.yaml @@ -0,0 +1,23 @@ +--- #################### 注册中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.0.103:8848 + discovery: + namespace: win-cloud-dev # 命名空间。这里使用 dev 开发环境 + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + +--- #################### 配置中心相关配置 #################### + +spring: + cloud: + nacos: + # Nacos Config 配置项,对应 NacosConfigProperties 配置属性类 + config: + server-addr: 192.168.0.103:8848 # Nacos 服务器地址 + namespace: win-cloud-dev # 命名空间 dev 的ID,不能直接使用 dev 名称。创建命名空间的时候需要指定ID为 dev,这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + name: ${spring.application.name} # 使用的 Nacos 配置集的 dataId,默认为 spring.application.name + file-extension: yaml # 使用的 Nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties diff --git a/win-module-system/win-module-system-biz/src/main/resources/bootstrap.yaml b/win-module-system/win-module-system-biz/src/main/resources/bootstrap.yaml new file mode 100644 index 0000000..273749c --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/resources/bootstrap.yaml @@ -0,0 +1,14 @@ +spring: + application: + name: system-server + + profiles: + active: local + +server: + port: 48081 + +# 日志文件配置。注意,如果 logging.file.name 不放在 bootstrap.yaml 配置文件,而是放在 application.yaml 中,会导致出现 LOG_FILE_IS_UNDEFINED 文件 +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg1.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg1.png new file mode 100644 index 0000000000000000000000000000000000000000..c48145769d24b7df079039dd3ffd3ab86d8cd743 GIT binary patch literal 17827 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 literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg3.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg3.png new file mode 100644 index 0000000000000000000000000000000000000000..f871d3d1282318eb8e5c784f7d5c8606ff22e16b GIT binary patch literal 25814 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

    onDw48Xd2Y zRbzmv+9(Y~0#pW~2&RP%rbrOg73Zea%B!ijo0x{c+(nMV>9-$6t^CgC=RbeHtCjy- zQ(F|?tlZtgzWnlwz&`!M9}Jv{tvj|^N&p*j3#hSmbqOIh-3qHV>b8#xkis_;R%nQp z&K#Zi+(^VNtWovSmnyCe4MA?yF>FI%iyy;Ok(koh336;kPz4IuASFVKg#v82Wm>op z8uDX*DnP#cpL0IU%z}jQ_uu3Fz#s7!;jPslpFDf^ z>`%{~d+C*q{S5m#`?=R&=VjAN*A^G=K9Jf_sklWcA#4-aA}0;O-R=}1V7m>r1*$O; zX+9w|nFQM6LIG^la8ehS!Nv}^1fN3=jeQ|AG!%D6oD}rpKSX{^t%o z`|P1ZhmIUMe&*DvQ^x~)0ecbSqszF29S!WniPJxM`IVQ>oIH7wSO31J8pPDL*Cs@n z)SyM!bR+B&R^O-0pt{XdcHoaG&3E~pQOiI$%LCAuslPJaInYWDrG^|VC0=oWNrWIG z?AfO=gafxeHG6^*uyN2TU-Q&k! z+`M_|{42+g!|KF|qc6U2VE;2uV^7KcCa|ZTeg@kwJAeh)j*D1;FNApF^y!yT;klE? zz8^Yi*vxmZ^*U)-f~dKAA2@VY8LHd@PAP5f&o5e1I zbY7ap@xzo!y+q>RLE3xsUJ`@3Y%t6uk;-8~#y7*37B!E2O1LiqN?w{Zgk>I4)w+ud zHoTY<8!&MgIs5ucNA~aAx8I`Ffg?xu?MH404(!98dFIH!zIT6Zd3|?xeR~H`-)UQ5 zTixt;cY9^+=C6N7lstR$-gUC2;9yag&~Z|ja;MXieuTW3QbHpS9F#5%P^x;WXch9R zXi<9I4oLIMFT8N(y_Gv+6FO=it@k-33C1F(?Wl&kYD>}%p zT9#|(xMt7p3Y*NH1QffsS2iAh@%bOmpFMN@MFnu%-i+WLkXuz>mI`tqe;0`Ba4_iqKwe7D#lCl$E>TLCrI zDn6o;`)TUo1JSXZAdXMAOaJf8fR&ALML3AC{Ii_s;&`ByG1><>owM>IySdA|Lg3jqZAu5 zuVtm7GHBY$1nJ0u*IRttrEl>#XJxl zuFt24VueBqg;E;BZNy&7OC~ca=0=_TnABFlQ@L7VACEN}MToIaR=r#i!&fP7i<4Dq zj=4saue#Z2OmLOW5c8{D2CwgK?QAWdKYR4_=@Xb?d*RHbwGXcIGNMt#Mekm}zq5P) z7Q{kiz1VhEAE3cUJDXkDWMa3nVc1aK`pTs@j_%t>j6-oxri9y(lVU6{`}q=Ucr24T z8DGDM8F-Z{N5Yua_a<>*O1eD0T=%D1l~jQqy&}SS$M;!v;Qn}ih@d#`1JA)POQWc4 zYD%M!v8mXFxjEinc!%Hhbm4>FU3dp;OwPSCH#gUq?)*lvdA`5HJD3xVX-+T9y>nsW z2d}R3FIoEODXP+l+KcD6R^DCTB|H(?HkKdkuHL%4^Yz9psV(9LrL_p#=FUUiSOc3Z z!WNO^|4F^>_Qw62=l;yt`8YLorh7cw?VWZ@z3x^zwBEJFb!E%gOQGN`Ys!yS@Rp5K zKtUzu0!l(a35%Fm2x<%jQY1DIu!0dbSfp1yoe6dv zHDhBoAF=nq+K_HyMi9o5pTHeYEjXfx#|Vq>;hSJ{)PKDFZr{S=xy$wXto(dZqd-l6 z`O$w~M2x2%MX!$EpBo>KEG9IiOk%J z5h6ro!cRjT4zq2y6|bSaQpX{t)fLrv#Gv|W3l`z7s0J+(B18&L+pr!WrV5<~)ao~1 zJNNMM!!w2~KqEGCVHbe?*g0(O&jt|sU;~=0W^145rU{Tx!CdQ4OXBCndcjx@rci>SG5FR>80= z5aw^t{(y|O#;68o1xD=R$icT?+ZTR3``Ll?{K9;Z>ZJP1SOGEmNN7O#;0rJ~cxVbSt>1tB_Ba0};8rypY4x_D3{)dfAIr=` zS_RA7na7$h5Atc*2N|hwyjBxqoe5Qwj9hj)fFbg&w7gOnU!4hp-GLh(=%lSj(0yt* zmzrpfy1f-xJE;N=SOr6(Bc7;+Rh=d^Jjn8Y2z)283?t^I9ed}ccPAguA2pzr0#dmF zT(a@bqsehpG9U%XWaQyE%7eu)jqRt41Y($9c=+(PyoCChrpc#-wd0YNQM@9T_3K|q zIDF^!)xQ%Nbz@X4O(fV-rHvAOp{VXEEg)=}OwE;sqmMH(x8~VvddoZJdy@4GD zAZ^Vx_4JsF^B`2|09k1xmo^f-Jr`aIVvL9;_^8=jR7z|T*-(OX=n%@J6o5Ga8}6TS z7jaJf6tA&FJ&n@yq~#AU{ps$~^*vdIB_fp^&FzavKccE|TlBYRlwNi>Ix;%`a3MTS zO^U)IA|hMDr34!kU7;2QwsDdCCLdAyQqlY0o;je;ufH^MIV*5h1hi_d4U1W&7yokN4==qvId|De zXyp{a3AQZbtw(n!u`oWCY=RAmSOn zs%TtQShdpeJ)2&5E-pUV&^21W=@+_xKJ)NzSEq@M1u3X$*ixmRh3!H}r|7Tjr=n6h z1}S4}8Ldg6iIqv`0^(e%{0@Gp2o;W2hBXuFYk)S~)5F+ivJVfp*0t)Y8R&68258)Z zQ`JGG{H&<9RG>IGUEMeG>A%1Do6`%|4S-fI(zxXtXCK|2zCSr~l~VX1qTinG8@U_3 zIy5pmGCI1Nfgog(b$eM6c`1BcxjJ-~YJjU2Y!+A?eH9rf=cwWE2@7Le-{_&&Ui2;wb!;CF-9)J$>wxH~)0?PW`i%CZ)mU#ibvozrsvaNYDY?__>RMqU#jY zrKoR37yE{;uGWm8zBoRv*<+ukixgjhx!wFC)LXx23tH0Ac2FNaSD&^1g}4vD{c(Ck z2B8Wxa*Gaa-NueRV3Dy}0D%W6kD%BlUVs{Hg9+Q>Vw4srN+Hzn@OtXj+&pq+ZJ5kj zO{GXeVQZMib)}~jBS0`$ODFD#)foT_ZpwYp2@s>l9xHlpOTv~NhwHOYe5$oH$=Nq< zOh}N{?^m{SiD~K(Rdf6hSJtnoIgWLeu%ruMVr7?ePicfAk3QV4aS!OO_TiXfkLQ5< zoLmLb`4MoN9H+q{ZJj~mrQ2$)zwy;Ydu4Lm3+s>G|8aU;u+hPzk(t@Pt=m#DQyVHX z?=mBN!9&^D27F*bNkK`1WzxO`wrPA9BOAjYm)=C4Avpr;y2uQed)XP~I(mk6m^pgv z{0RbMR)B9ysemvK!oqUGQv5Gyd)%B3Rw8|R3Y0``Sb-)AAcDC`djowe0KIM*8jYIW*e|=!!V!JObl3KOB;(;gt%QSIFZ4l){CTy z^)wV0JjN9|L9_s1S^k<3*Ye5$s}KhlmW`2cC2X6 zhaYlb-}j^y5O-c=Oj4nD(?vx}^c$Is%?h~K-0Vykg)idgscxGgX=Bp<{d;n9a7okC zk@FcS`4?C(bo;IXbdUVo+w5pzu+Idioh)ckv1LiX*oLuz07{4)B8~A!+mI%dWt%W* zp{K6&Oj&jv3~l%d49(nng`&0Xtwvp~8g9vOCjN@;$-j)0rJ&C;J$*BK?I^9&?m0#5 zYLSC0yK(E4z88vzDCyyg7fA=7^ojE0F{v$Nz^sJa<>(xxC99^)E0UD7W6%C0M~@=R zV4M`!-2WP@KXXZ~xd#iJR5^_rU6&297S$jqdDBMx+NRCGCs&A-aszIAcJJQ)udIH& z{YS8Y?MV>}+XFqR?_v;d2D(~y0a+$G7f|AEFEV9kn>#QgtF;bSu@$AK%z`%8UAlrD zorTL)ug;3Y-z;>$hHzO@F=?! zuvmUx=)tB36_87yHf**J_lUJsVP-c18xrvAngrqbr=ha+p1ktm>&5)u3jVDcV5-SBea9a&79+Hh9qhQi&6{iYspaJRi^m=Pc zXzJFzd-opPo0=F4H6DiQ>k&?=I905li1>#Scrj>wphtZ9Iq=-)TGEP4vYrXTSXN%g;X_tgUU*WP^krZdwhlgaGx%EGk`5GNoPo_+@R>B!^*VxFyAF zS_N+{%j9xjXzbR5d!hDbr!5_(L|Ls?8)T(99@qnjj3>NfeO6MZ#FSI?OmPac@&WI? z)VDMKn8D;g#xI~>FLV2@)Wi&yqy@R`;RCA+xS_I!y4B}HWqAdaypw*l(>o>>@^z}k9rSiV9G?qdYE zHrCosAOppMT5VW1WcOQJzWn0))c4@#AhKqs)7ea^=$dTev?6OcRBOf6G$5cKIBad~ ztlyDSxvH5&w8Br58kcgkBN|!R(Vl@?&;!$N#(Ct&uekCS@{=%1Ef-dCAhrQD0U0x( z&q+#%13dVCe1+JUOkKhQbb((cA(2jJ zX+W#TLH0xe70eCTu$UIW9cwFk`Q-y&Onnc58<~kzbi%FCrc$eItSuLKmF1OsLu2D% zMsT!WZ!s>X6q1Q)_`q+ik_}m?6y_KTjg&rJi}4!G5|`Iei;H8!|E|nRU->hJERp)0 zb|!VAwc&14Qj%JTZB(sJUr6Qb*q-_>yZUmsv#`x%4whS1SB&6>8Iu%hA;Y-+6`tC9 z1m@NQYr`rQScZ%PCgGP@(2m(Wdt*kn#PvQ|;XEx)M}`0`#{G=tcSb4%?sHt>>F z90VcS0jVTb+dwE(cMl>5CAtc%KL%_Kf(^Bgix>88H~?th(c138+(OMj=25wk8ih}gRHG{7tw)N#(=+S_>iMf zvrTz2ND$d+YeimB>y=>`8a-8-jaXlk9cBqALqA3`RUwmkkDWwpLvWLY7tbB}a%yVo z`+J}UefRxfvj+k=QWI!EhLbEYS|MX0Yp+H(e3fi!4eq~e)2InymrqK#Ei@KdQG^zX1e{)= z5!g=^Ei4>hZFrPgp&lxP#l4HPm8m>){xT%+xpuhaFd-qR^`JNfHW(j`ZCKZUwG}NV z&6YMStSJ47Vr&R*7r*H-7!Mok&klYuF>x6oZpzi}@e&)U!8c3t3yoHX+ZX8X?+*k5 zeou?7(s;HIAFA2uYWMoUD&Q9d6s;ns3OgFYi6FW4A}ZDg@hAQMV2B!nLcsw){)5kp z|L=0aY@Lh{;{Iwx6$wg`QwJrIRuZJt377eCxKI3tyWe_i%a$EE24hKK7OW0^mpf8P zERzqZCS;#^=3$u-j$04)S5`)_1xR44s4}1Iu~_hxix2}GLYrXw%hBX?8P-@*tIq*3 z{P3ny!=<(nme22lysDh;rb=KVV6Q*WPhHb^54_)XK|k9x?;8_7;RK2gDM?>GyhEO}1w2d%S#EjEtglYS>oM<8dm` z8&uKuE7Sy%UqPncsbzK$|BC$0kk8xhaycC=rdU29S~Pabt1DM)AmFv;Y(beyYzgt} zkM`AkbmRW*uWt_Zo!j^RzV|=M-hFg`S|*36B2h&qUrOFPtT zGuj-$JAIR@+k1GgDWV zXQ~4r)IOLg02ptyG&{FCeB&WP8kXZZ&wL8O%|dL_J<6sY7+ZNtPBWqvuz9^G4p3#P zb@5Yq+$|2&L|D4IaH;tUPPo%X#O-{bf%>7R;+huOH1RWr`V|Ez`LMh#1LIv4o@gEm z`3EMvDqlvwb`;3?b9jn4NZ+v8nBchZ9=vW%dLd3}iaB%WrQdvn=F}PtL*Mt>i@JAi zocd@hTbI})Xf8{$lM=!i-4M)L>7f$aa6><7L)-a=j}JCr;nRi&VzU5S+iCRj<>>RJ zUXf&@^?1At$fRZq@SNO@E}9fBp%?O?%=F?Mn;b@4Gnq9@fYY$?PIhZ02UHUq6a=`5 ze44z^2oQy+;>SK>^NDzhgod-~_O**VyoOGOV_S=lI8~;B~z*gy`FSuJ!SmKo1eS>5CBCiQFNciBQP8Y8(-|hrAF*hopitIGWbM2J@ zzer=n&Cf`KieKoTz%^5U%a2RIe(>*HCKOTYeT4nx!@ z`%cxIs(I&lBs|%*6}E<9A-Q>G4630!!cRd>>}*)w13zHfxwBv=RAD+;g(Zkl;brqj z+lBL=*69s}q?Q9Cce(@{;##FEh;wRj!_NHPKxk?Ki&BWt0CsE8=j?BXTUcRm@DDmR z1iAw5SuGz`a0Pv;qx~a!1l$TcZ(yPw&qPA4n}rJs^3d4S11_+)@L*~z1h;K(sx7y| zN&^ST4axBJ=_uNZ=VDlcd_Fcm8@sWU*%f+aGSHB|%hW+^G&ynCR$wDH9BkF)?ff{8 z;II@WhA(lca0}LX2Da0`*Bej|*QZq0+E@`|Axdg6k8ZaI&gltFJzx{7rY9gbHUI~O z#W9Cfu!%?Et_nMA#8-ruH-vYt#iNQ>Onr_!x2w(0>+z4ZtNZlvZbnU5;H`y4oYRte zW=jjVCSZNdwY3hIXJZNzge=2n+Hlu^>yFUn5`yv z&)4pAHaWlzuB!T(?`b{jhS&}g3Mt8rVM)DH9te;4Q7e!dJ79D1iP*K5)B^so2OzdU zQ+urG!59iMTV+!qFwn9&Ig4rT<;iFi-gzyyG#gu7dQz2`3Ss$%JdSL(ch~_;g(uLs z%Y7Y2=0H2Kb}YIdJ}xW6YO!WBE5F;4*f6axRIoXjiZ<0cP=j@QkO25579J~F60HKa zFy-}onwo^0N8|EScC@lXB;J0xHZDzg!n=A%=qZn$wIVhcHr3f13QjPcUV(dgZ|Iba*zh6Zwuk1pc4tQbi&h4!#M(My|hYcMUK6pN5GiuWtlk>}Ki4D|X;E1+fx39n7cWcGc7BSa~)BETW zD!5x3Af)Q?Z8a42tYGdE6E+Ag2)zDBFisn!NJ_qlsRL0{mOiVSBKiQ*>` zokIv#H02-g*qZwTK`Z((v*4&mtx{5U9JODXfvd!d(H@ShewQgXZC6@$DS+8I!V(+B zM{z<=GL;k8O3G%;nHUKDvE}l>R%?MY>G#p_oj4(8`M;bTBVQF`X8v&mgeVX z5gfu{&Yp_RFRE)6J?QnS+&q5YS{oBqnlw<&uI{GhRpKE?9&y)TQkwPgPj-(vy`8>J zkJr_UMwdZ3xhIP;^bPXVs7Q2nZb7-GcLw^sO|F5!fIb=2Af=1OpwHQTli1RLEj6*I zENwdmQG!<;h?qbQX2$eNcHpGN=+G))-vft97n@+4Ri>)8q7;K6h3$HqF z>v46DwRCp-k>z)WKy861fH_GK273tS$Hxf4k=ujNfUn8ZAL!Pnt1VtiTU5DTeG^(ir?w$4+eQ+^ntmV$#K%6u$jbpMrd(7H?PmxObkA7^N2KR!png_xLP(xXVd>j zgy#@=Eh;-;bNT#83EZS6Z02TXaYkRm38Ls#jnV1=E;hHsb6bE(I#Db%a&Cakh08(& zXDU1KsN&b??aM}s_^!0HQZpB{Fcol2R~@AICpPvv-S+G+5oST&si^jwgW?~Vr!*J2qyeuzv%j0vlh`IT_-nG<3 z;)Bb?L``n&{39*1b2x;XkOMY%cPAQ@27|tCdgxM2aZiMe$PA3`+vr?O4n$)D^-gfW z(~eXYL#VRQ2Q0na$RbPf2bV0b{5}yA;)^gks|drL8P+iFh+Kr19S6A472z#*e8*ee z$vO_PY-KuucJoq$QA$urkf?yPH*|yD)MIL4F2aZwi(aegx`r=``lRMsBo=|~jYsAr z#7(t(T`h1buZ9g`daos&l9jcSp`*D8*7h_vv<%m3yKC4vpcY85g*toPZbxUZx8>Fo zI4FiY@Z9EN*A8{{;j5lby}$3~-25ym8WD2CH4O~3BSiZVekuzE+~$pOaS5A^b7e)X zCan2!#11>NA1SRxOMZ|ZwJ@r_qGA22cTjW-hUWqhx``rFrc9Co8g z)#-xidwfzS6>Ob>P)J;Kk!eX}Hayf-6UNwrCrh(8`i8n-a&TG2Q5U+sE;sDKLod}b z@a|r!n;WWMX(#Fp(3;UO1%}c{4lpXNr?iHfO0IjbyW7>`4)wdo7(8Nd16u!3-@Y4| zmihSceB{Q^@xI9X>}?GH51E9mmYq2z>G~FTkH3!#TK|^;zDeGv}UL;7KK;L!cTEY+kKuEe6DUu1z1bQ(?%N_ z(AC~9_6j%3Cr2LxIEIit_5vXdu~Rj~7N>@AHMzCedb@FbdV`&vWCCg!Sk={ z)Y1ZKNQ?6ekyGKWq50S{H-tB~K6`4LrG{|*E++cNzP@v3@z5{Vty}l%x^=%=M{!^7 z>J7(V{M9;q>9X#1*x9zkH^2-cHG*5WZj03cL}TBhE1{SDCa|_(Xu$0c4cuYyn2&;5 zxa%5L3H-VSHI8|FQE04Yc5bw520wnjO9jS zr4hX_jSyInBh)Rzj#n{55VVP&0@vHyiQgFPZJEH;nvX@pGqba!eXMiT#Bgr&PnH&H zaA;^W#xN3F#Ji@HraGGwf4Hdy$CegjGm$4x4*d$=2N8ulXyOaBEpBxgbjsI(>J@>e zzI$EbnJ>DX?Y`~+v*LiC{{r?F8VljfVD+=0Hbb9WeDb90CaQ_R_DSSPY&P=AOq8*h z6_F{oN4lm^rD{RXgI-a(BK@;68Z?y{DXX>7u?nCMd+baQ16%yRY*|`q=J32h z6)OX9^9}r7l&~li*VBG>11+%GFvG!LV z1)V1w*Z+gigdKtbl4bD>3Sr6(>)kvjw}o~drMi^lP@>y)4RaIsw$iwS9^m06(yJ`% zOV@12_qA*6-$m(S>7{^YgzZpsBtX!k{Vmb%@I6>;$ThAlUc^^A&~Yy?t-9;r*!H%! z<7yV0w6vZ>nTe}yqdK62M%Go7pD%BIf=IQrslrgFsR_cg{wiG;62QRB%u%{Eic71B zW7Ck3jiIQ;2_)Ln>>dG~-8(8F+Jq}AX6QKuq`~I&%L&KM|xYTIC zGqByFv>Oi`Kil5>9ubf)eY8pU9Tv!N0nj0L*r3T$R;7Mh-@$tvVz`-x>YiXp#rPVJ%5xPl|$P+3! zen5nlAtel9c-(P=dstj)Tm-hCtT2qmVPL!_Y`uDS`_Zq$=W#`aRkW^R99vD9unBYP zC9H!;&+q5Jc6TcX*MkJ68h0wkj#)_LBn(HgmWai~k;%!aSB~JrNfwy@;>f(yd%l6* z(VdND+L>q>mxZ1(j0Qp6>=}4mubLxdxxO2hx`U?QOjISzb=QYirn#j{AK;EN5eGJc z4qfMlcb@z4elbyt>N))4KoW_~HNj2=&A9fyYWeSBu8;?;TW>*L*yo;;XuPlGEu6kh*bz044&jlD1&SR6W zKzJMX0RbfE2|g-${uD=yI(z>0xpS|-{<;ipS@MEl=RR)1>#r?eA6`X97a`3%Mx^u; z!|w2!pX+wqa^rF@Z8h7yN}FN9MW78C=T}jdAXpOAX#5cLa33;m$pt@(Bnx*>t6ZY_ zu&x6wk|~A70l{N3yino*mXLvyL|-!-QMw&)tflR{l|OE$nW`J#F^HanDjZy5nw|+e zAx>lC3Qi2YA;T);47xRC}angDaN(A*qmO45n1zG}7F zw`HL2{TGfR>vfDuk~PZ>JAM$vY%&AaW^ClVh&KAcFxKrgFQ*msdYoVZjbnG8lYOR-G!&A7cr%078Hu z)4eU3R*ReX%t*UE@eFz_+JyLag$`ys#;@`;>)%?v^Hi@eoXXuTH`h`&RRZlab%L)h z)W^hvgZ2(^Z!4?QH|56>j^u zb{Q|KZ5aH%LH2#Hsd4%pPj^;uXs4NYNhMdOMa@fff=Id z90YW{Xf)!iuKsMTuQlqsN&NG2lHI<&OCHa5$z|)=vz`9#Zl5_>=R$rmVWEwQo9_7` z&P=a@TfA}|4F+DXgL*s-6_=;+`#C50vz3{7Hs*3_4y5Ys6{69 zL@TS%EfMxfZES477LBO?9I{m5toCGVybV!dqhg+-cdahJi@P`fb%ik=(JHuS4C)?9 zs!$VaE_hwH;(D#nfLWR+$-NN96{FBBE`JVFSiY(fqx1mHuLZ4t@zL&MJadS5&CG6*jQRw1mbcd;JaOZ(}O`T&|#o}?Yi8W z^W|#PW6!zryxe^BZ*CvhghPQ1>0>^W4UC6i8^YTJzh7_i<;z=jkB;*B1`N%tU0GVb zit58p?z2LvB2~pPIexd>YB}?N*NdB8<BXpk|rWhbH-}&if_c873@wk2U`@7JNeQ`b}Vgn%}V~k)eAw}vPJfNu?p#3)f!Jtm5wJBwwq4>*OC`1A%J1~NiqqXoZoF5o`=MHhfQ|m+ zn$^-b5V3s|A*NfR*s)l%{9yyfHlS~dYHnMnxB+w<0pWBDbv9?dnS`B=>N@qB;|6h9 zU_%9RdHM6k<)>Q5N`=8km)BqPR20))4vn)*AJ=C}hV*SBfV98D0TXt2Fz-IcEApdg z=P7)OUcr?s+^DcdY$}RtIz>6rrq$|XrDp2;#&h#+-s8Kc+fJ#XEjHSYH5bYkRb1Z*L&-5K6kw|I?O z{NVED;|Djo2#oF958Io3ujYfzO`6q%UC<~fSxq3cev07QX1(L9cK62ZkKX(A_U-pR zLoK9@klMb{?rm;%gY~;~B-g~+RA{QbEX`5XXtl!Hd|S`Yr=}F|J=%Emh{xtF#DN;K zwr^l{aB2rJQIbC#8n%!c0xyCuYvNi5h@@#8YTP!vm&YYPuD;d_O4SID{xV<>@(#c< zB%~-tH#sde*fsjIOTW0+y8Y>A{te&vZ{Sk0yd~iVoTB2vE}1`R;j+mn8$AVtBhZ zzK>Pt+&MG=&b{;LdvD>g!F#xN@Xnj>yz}OpZ%%N8sPi(OEUqbh>aRyT&l$4@&oNP> z@zkDU>LZjH6-A+wnJ`NOuU_lbPS^8fz8O|q8Gk&`1CP~5Hm;J5jqRt@-Zzo05L33o zQD|6|8|ejZ)M`Vp^>w0+Lc=c_WT@>vb*qkXDoNfvUG^&VP7V#So@*jtL$JLz?B_&0 z|KK0a%*nX_XXnsLKo&V!1sN>Q<5^seKSq)QbmHt=-{p{G@Beyz3xvptVpb$WrjI0- z5fF)DFEMSWywKEn?zm|S5y8auau6r%p7G#ecmWH4jA=}RF=73{mN6BZWKKkT$v$JS zB~n1VbDd_l(a&;3)*$TpIOg?Ar4{FclGp2H9==zbr;ki3nIT-T@M!wjm_lQxblO_tZZhS899&Gy?`+jzWD*+JIYJ~&lOZ!5vrAg zG*OQ4dWc{uGp#%i-ReRRhf)0fBh%BTrjJgct8t25X3WgY&P~tFipWp+U>nz%%H|6f zkR!(lP~r$MU&DEh(noJg}T`_YLIxUzK~NDJ&02{kG$*S$dr)_ zZOKUgKQ_@2+Q`d&V`_|(i1UVhM;;hq7kS&sAv5p86cs#&Pij#=9jt$U1}28CS!fy) z2Sk{G#X(3dz8Q;6NZRcA3ulRK69T%!!66v|9K66yfsEfq)C`Q%OLC~HbNDQswtSQV zWeky-kp_8oklGgcu}O7CUpGc;+9dwK=Sq6NIN07D6DrA{8umJ zzsbuj6DC>UD#fZ%pM6)RKiGL676)eH-k3~NGms=jxkUdb7!md5l_S&lFM(Cx8O+9S+SZT#VP45HKOu%(?rc7n|+-ej`VHlKjbZ{y% z{p67P$>30POGp{+4RAacJzrigYPUmG^#T=mo&ry$q>7M8tzrGgGjwna3`j7|6!F0# zBeS8ni8zskWukW%+%_qsBUy4odi+;oM{cwVf+%v((-wESemAJcO8JfwYL*xkix5>0 z2!qVNB#2a$62hWXp-^RqX;(T6#-+C6EhVkFSOkd3>I3Ykmt7r`w6IUD6$~!yy0u!Z)ol5d zn%|8SKC!mc$Sm6Y!-LHSGe=-+0uHeOBD<*>;uD-h0T$QD63N8xzj{Dy6c?057fHf- zSRo<3A-FiA4*?~hYC4V|f>;npg)LTAQ7BqBheg74R|Ie)c>QqbEL1dQ_ zL>8&hv3#p4=!OA43Ttd*>!G2^z=nTVZ-2G<;f!DtEaV1vCk(k|PJEp(vrdl_z)gJU z{`z+XFY;r8lzk=?mmGhS@zkm)PN`ZCU{)X$5narK6id^f7L%ANUV;F1l~gN`j2qjy z1l>+=sE1Tfrp+#939 z(AuyD6_jSNASod!Ot2gq&8kcv#W6m_6YYrps>FDQo9ACx8< zN{%EhOkPF!^&+_Icq@YFlYaNhAAe`+$mC2BL}_PaLUIC9!YZ~A7!rvSM=99m1biNB zlPKj4MHuo21FZfFZWfm@q(AgG$J(g{wKQt4!?Y+Zu`6MUg!eX(nq}6cydWF3$_1RH zyHCIk8sqj5g0@FViP$66#>pp6!j6?hyX)~<=1+^xf<`{^x;;Ex0MAf zijm7v#IPN*@6Kzt5EzsLSO0`<8AYodmGd9FlVhfy&eWlftCr>zARp(3ND%Q(< zda+)s*}2Xc*+2bRH2%)-e(`BQ-&0_3Vq|Ctd@z3Nu!l-3INNJA_1r$cqG1)m|~$c}`y z=%jIJ%H#Me`&`!`KEzg>o4WR-UpbFXQ2(!#dAuU?^7TQ@R z)R`I#&3>%!Z^8XL$L*`md44=Iu`nWIBFL=MD?GZRrDP%*N=q~Ke*g{Bh#B>49((34 znVf)glYO3`ZzHlous5dVQl(P*`H0rIcWaW{x_}!gY#y5~;NZlGh-=`4@Bm!a=7?1C lBHmCb#TA0_5nZv1{{w_QPx%vQSJ^Mf&{x?eh5W>FoR9+~Mf(qr<}N}uED3LtgW)cqoB8@r?IE1$DWrmV4|qrjSw#+Zt? zo1DFwmZ_ekpP;DBj*YdKm8_ba^nP!?l!&^NkDi;Lu#%Iuk%+&GfTfd|vy6Y1lb^AP zil>Z^oQ;;bf^?COm0_f$u7!D?h>e1btH*P2p@N01e{a=nU2KoKiieDpfsKWPouGPg zmwSR{iM6P9X0LE>Rg{v2euB(lReXGqVuP=dba{z#i*9?N(^yQLZey!vU0r;sdUbk- zZFR^}M~iD_Uv-~%Y==>ReOGm*W^k6*M?Q~aSuu!-om)|DYj%2OZMaQFRBoThMLcF` zh+AuwgaL2VqkY$VT7hfL1kZR zut7YDP)SK)mAE@Ka9CHsH8FKdeoI}8LSC7lK{~2CHBwoAb5cvmD=b)8Yh+YjxiT)W zH83J?YeHCyS5;s;Sd%|tSGy}GMO1))LOf|oN1-t-KUHs7O;)ieCTT!sHc^aAO=vn$ zgFH=pU_(HXD<@S!PcTV?Mn+gPNP9O>M>t1tYdA8X9UoUbIU80@EJAlNKx#!iNjf`E zjTspxJ8?@gIxRU}RVyhOLpe7xKp`_^DKbzqGBJ4$4?!X*FexV-DpDpVIt(-@79vI? zAtf#t7zigE5*s)~2MHJ$8x;`_2?z(PXb!vp0BO%jL_t(|+LgTrkR(}p-}g)N(pHw~ z>h9^D9=m>TZqMx95flgm)-VH z#m_9wyH9aKc{Gx6uKz(Byz3AXNkon%iZ2HsD)wmi}TUM6&%k18bcwxfM z#EV)lC#z$@5A<(*)%xN0%Xg21FTHs`M{cFLmwWht2ShO3>HBQsQF^(s$UQE?Uh(V8 z3~s-{!P(F$;~T&E$zwi$_fw9Y_R6D?dmPL;HiN@KRyuQPi@d-sVz#&E%Q$*|#3wDZ zc>m>p4<@*FZv;XLX8-kP|Ky^dlP;G4J@9Nm2(S11m+EZ_On`(KP9S-Yx62HHETN~?5bBfna}CTm3Yx#n88Uz z3sC1Gz1dJC|ImbsBjeMjZ?(DQO(54>@D*w#;SePXOQ&(D5fCOlYsB0cPFI*fIX*S% z^-etUfTpx535?~zal;_fCt}r>SAZL{*rsrb#hr(f9kj?lixLa72Lb_{;pLV_Y>6v0 zaQbu0KxoXE7z#9Ew6wS0+d39ffl}gJA~*lG!p*Sbh~docH%Vwmm7k$@uyb~u##yG9 zxEXr;WFwYLd&w2ZBEM(V6RhLu6{gmSAI2RFWKv4|>Amg0`W*4;gW`qrH_6N0S?Oz# z{EQqALT1A=@F`rtDX{9=f~vN`Ki%E2dWUhe1y|nMJGlswt;$?%;XpDnhBJC|2mB0a z`SSwTDa*qiK|L?V=N)X`pOKnuwjBr|r9S$%1(sju*p)`i>)`aP;ObzWrUXolmP@&E zLXVKMOV*TX0o2y~mCrzHGq9`S60RH$j-!g5vz>YeJa?498aErq^8i23%ADm*qBz>4 zu9xs2yAhvYhs5--6toF#J?e?y$euoCk=`;M5Vr@hLQSLEJrhT)#nh}&)IpS3JMJ=b z;wVc7<>}M@#qDqGasPT;b=R#FgtKbdTP}NNRkgzsAa$4I%4U4OoTMm^E1QU5kD%+nE5%aeY3%7(uuU4{5;(!6cf| zTlNOEpZR1tzUP#=r%$R7{{5%M4|fzM|4XL#fgN0;M)1nJf4E3)-v& z#e%xgpmow;5Q_e!wz1jZre*T_r?BZWTqJwTkVK)T$$ti3=?^U-vb4c!!$4oz(^jHT z^G8(==GoaO<49ikK~pyZYEY4$}qwyf89axWp~@8cnyP&$4Hi zPAx6<(^?a%H#$6H=9lxm;q=A>Q!aaNC6q$uK+AMbjM4;fGRP@1-z|%gTY_6)`ET8+ z72V`dp~Y5Y>t0ok$wlAwGlcBrN<$TD7FWMAN68d7jUyT^#b40xErOy%(@k5q4m;=U zjc0AB(k4jhHzC;6mJMD`+n+{mZbxx#)$~W13m0Y4_ODDCjVkg=3U=bDD5id3NrbFL zXWCenp9v1xPk0a<9HzOtY_tYO<}1YTHhhCcA85d_Yo(+NpvRcfA)`OpAklv+PHrBI0P-JG8^t^5breC6;fq^re}5L)hg+ zt{}K^GT8BB{K_VaxffpKJ-aC@6<$a$M;Z0yv*GhEeR}`+Ek=h~oV%;DGdiAa_?CNw zJR)XAZCN$FbOg@9A!Up+`PBRPv48I%S{XOU1CgU;*~6b_;4Pr=q+2NRVD-{N}K_6b$#%om6o0hiRo2U zN6|Iw9DClU->k5Wd$>!YIaGM9L4)FE-8jw)wbQt5_xktRPXfM89N%*tMfyeQ0eNPX zHCEP^ly&s-gkSYy>1u7XZ3aT9i*g)vx~qqIRLgb64MzVzy*txU5v zp^Q$8ikp<&T)C+zCO*mg<-)MaB~~xbYR9UvN>P)r82-@fd@26cL*h7>y`t0(Nc$kC z0QJJpwO81POX(=k9ZPeLV6pRE96uRfxLM*qaF+P9VY21rJ*Ct{$Gzo@We2>nAa0?< zH??3+pWf?hlVFaV3|oWNQDoyJGYg-8RH2q?uIZ;s+~}l-0%LTdfpROG3N2b&rEMsK z&J;l((mT^XemiO?BJ@u-RGh__U1v%sOoCLKALPkoo{+QoQ@)7*J!cyDQ+ z4CAUXD@el9M9U_8U-Z#Fp>T1Fg}Z=V92&DRgRA96MZp!+7i@E(aKkHpxI?XzAmw9a z*TE{3H?}MFxDQdm9h+to?fBLP3fl2U?MVvpX3#ONmu&)G!0<4tD{EMsb{kvFY# ziv&dN_>>aksr_$!_H2>)E4M3j3M{o9mHNmju{5EyQ;3N`PPSSa8dIkUMGu_RVMInm zuh^Y#Gh!JY^WYO^PDn_r9BEzmvbndp2xT$yi@2|{dgjFzfn60?3@AS!hzqS(onJ%2 z?xB5Xy78hPl^_i;ScM>TV(0dTaIj)qm7=#5-3Qv3tTEO*iv!~2vaNl2x_85$?!a65 zvS(H@uc^ac#d)s6hFU@4R8=99XRdzlcaOd`<%C+%OVCl)5U{qTwOcwHXF4O;S3D`Z zY#xHsQIHN#yVTyg_w=u=b~~64sE|ULvSf8OJ?PDWxmHi7T>W~H`6%1j>sRuv7Z{Y- zPz`Kpe}I~xCzhw5*zO|Qr*!18K`pgvbZLOP15H2ZwSCK93aJgGjV4^x*|t{Y3H^mZ zXofw~%5DrAOYvjbXR&mpVdd>JBOZ>p_ppt6ND{C@Ynj(NHAuW1PY9W`>8%^z`~mUi z^sJ%PRMQWqq($lgb1gdPC1`*UXmLuf0(Hz6`_@t@OMk)2X!seo-t(7W_u|M?t2>8* zD_N4|?!pDduflc6w+3-BKvLU_hAxN@YMUF;J2y}8FdKO4a~r$1=9Wcm>D0JS0cn7i zgm6*10!%x{Mm;*rpZvG-eQ27@3eQh<+KW28*c$*V2KvZc=O?KV+9 zywRBHl15TCi>+JtuIwGZwUFek)bTV@P+le_5=7~&$bnA7Q!kES;V*jyUSndYG0fv$lRp_HP32nIRXsCp&Y&2w5r>nLxzh2pk>k;t)7HLJQ zH(*kykk?)~9x)wdCo@^tE`_2`SjRvn1sDsbHI&MgO%~mGC_cM(sxXx8#xaX0-@EA#=W{!W4l(oo2qP@S%-0zy+Lo

    %*OsvMc#btmp6<9Y`Cx*|=ZX5v|g|d5U>f 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 bKJWhnL=8P@ya`>$00000NkvXXu0mjf!i)#m literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg6.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg6.png new file mode 100644 index 0000000000000000000000000000000000000000..5024ceb2295ae68930dd6d1186a446f15d837dbf GIT binary patch literal 19160 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

    S>ebBc{*9*Qx;q03YDm_y*;w1t7ZMelU4@B> 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 literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg8.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg8.png new file mode 100644 index 0000000000000000000000000000000000000000..2727aa32416cfcc9d40209d5907f4297d3f8101d GIT binary patch literal 30332 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 z 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 literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg9.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/original/bg9.png new file mode 100644 index 0000000000000000000000000000000000000000..4463aa2fbd82ee4ae7c3129e6c5f9b36aab05843 GIT binary patch literal 26977 zcmV(>K-j;DP)Px%vQSJ^Mf>~x{{GMN`27FGSB<>ipzk%;E0-=1%v?^xWCvwB_;b$mPD= z?bXxU``S_8%;DzF#Hr-({@OnH)MxX?x$?a3>d%y&9ncFzsK#V%K5uJ(X+|@ye5Xx&aAfAtenQI!lSv*=&(bSyWr`P)aRMB@sYXvsUl+0$ZMmBiLbkMi!`gx%WZvS zt6Pp^d!_eH3ZYk?w^4bvQf8lKIf-D2iDYZfNJE}de7Q?fZEAT|Zk>-`NS#t<=r%E} zNNwXi7Nt;9YGIL*N{*~VUD!1=cvy6RR#~7yT(mqvOJR}2Gcs0Mf}lN7gHbYsL4lD# zV@ho^&nqWjR%?+zRi8r}r8hlmPgs;WOtUR7LQ;XgB_n%0S&BACcQ6=1FaPoTumI%Z z_uv2cV|h(u@QH?lf+(t{S-V5 zn+0lw4Q>c*@Qvk3WQxYAhTxlEbGS9qw&AS=dV2c$2I61us9VE674C%MpA_W(m9||t zlj7R8=!-67PBk`Bsd(8*?c0AI_T~lwjfBhRC)As4GX$*(Xe?WGNwwBI4;zM!bnVGg z#7yDXx{Z^nO|fyP;d_M5K~fbMf1R>j^*D0S)ARf`Hc5K%{uoMA?%h)+|Ao0O=AMbh zCzqLY?b*j{m!d(o6PlX`#7O+eBeKl2K2M7VwGxE7p=v-|U#D<3%f|APCuTNqqjkfS zGHTAez@Lfe);6|=#z4-&)A6ME-yS@8;NU^ljfzG^H|)znE~sj36PSFD3UNFCIfujf{3>N@pl-$cV{5scjw$_me`YjQk}8nxl5&YOpCyxE z65=tJj{NY03)Jl37Rk}Csu?RGNkQzLY-410n z=~0YZak8Ym{QC86Y_4dh{^7yp!;8=L_6q`ALWga6h?

    P_nG7677>^8kTLjOJ%~4 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 Ef@c&sNB{r; literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/1.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/1.png new file mode 100644 index 0000000000000000000000000000000000000000..ef11324711466f3bf9d4612706c265ceb8923f91 GIT binary patch literal 2158 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 DzyN!j literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/11.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/11.png new file mode 100644 index 0000000000000000000000000000000000000000..d9b1da8d7408e930742b7a5026b399080b7f358e GIT binary patch literal 1657 zcmV-<28Q{GP)Px%sZdN*MF0Q*|Nj7hfB>qhRhi5Hwzedak|b4C9GRIKv9Tv&PCIRF65-(qFjfxwJ zjS@sb6@-KumzoJ$S_y7w1A1~EeuNl)c@TnqAd!|BkB1+Eg%D+96dLBSP3vFu~ZfXo+VHHqN0%&LyaBd82Y8-QO6L4}1 zX=@#4XChcw0!&R2V`m6bP!={X320{ySy}>HT?t@h5MyErTU!=mWfE6h16f!TP*D;~ zPYO;>3P(l_JUJ6EEDJHaHJ6G7mU65iv0dH8vS5D*-+}3^q0j zD=ZBwECVPh6*)NzFD?`y9Thn_4lphb5)cYBGYlOY0x>ZYCnyUqEe<9m3Ktj(J39;} zCK4nf2`eiJBqj$R9|a~Q6eA)7CngCYAO#y61t1;=9v=rE9|RK-3LPB_85js08wwj7 z1r`+t9v%oB83`8`2oe+n5fKFp3<47q2n-AZ3kv`X3k44k2M!Jc2nPcQ2m=fa0|WyB z2nGrW2m%8G0|*EP1_lTQ1_TEN0RsaA3=9Sd2?GWN1O){G0|Np90R#X6000040RRC2 z00RL40000200031005-kA#DHv0M&F-PE!B@0s{pH2MG!d4Gs|z5)u;>6crX07Z(>9 z8XX-UAtEIuEG;iEF)=eWH8wmxKtMo4MMXzPN=r;lPESx!QB+h_RaRG6SY2LUUtnQk zVq#)sW^8V8adLHbcXxVwdwhL>fQ5#JhK7fTiHVSqk(8B{n3$cNpP`|lp`xOvr>Lu| ztE;WEw6wOjxVX5uxw*W&zQ4b~!olt+>FMk2?d|aJ^7Hfb_V@Yu`uqF*{r&#_{{H?t@srp900Ny!L_t(|+U?Z!Q&m9} z!105iVke5-ii+Lc-Q9`Zo!H%7*xd+rpol?~^dlnkAm2Wvc#dPY?#JGA= z-}x7LoO*$#7%%m^(PLP|Osq15g-fOWE(*iSBf}(Cpg?oA)bB$fOk~4im1UqW#|=f?|;KMK4T0+M#`GoB4zr0j3-?G~p~QT(mTj_)^=T8}13w#-ngESY4mMbq?O*j9FxFN389eny00000NkvXXu0mjf Dx%6sf literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/12.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/12.png new file mode 100644 index 0000000000000000000000000000000000000000..07e7313b4f2692bd7f10ea3c0281666fcde99df0 GIT binary patch literal 1657 zcmV-<28Q{GP)Px%sZdN*MF0Q*|Nj7hfB>qhRhi5Hwzedak|b4C9GRIKv9Tv&PCIRF65-(qFjfxwJ zjS@sb6@-KumzoJ$S_y7w1A1~EeuNl)c@TnqAd!|BkB1+Eg%D+96dLBSP3vFu~ZfXo+VHHqN0%&LyaBd82Y8-QO6L4}1 zX=@#4XChcw0!&R2V`m6bP!={X320{ySy}>HT?t@h5MyErTU!=mWfE6h16f!TP*D;~ zPYO;>3P(l_JUJ6EEDJHaHJ6G7mU65iv0dH8vS5D*-+}3^q0j zD=ZBwECVPh6*)NzFD?`y9Thn_4lphb5)cYBGYlOY0x>ZYCnyUqEe<9m3Ktj(J39;} zCK4nf2`eiJBqj$R9|a~Q6eA)7CngCYAO#y61t1;=9v=rE9|RK-3LPB_85js08wwj7 z1r`+t9v%oB83`8`2oe+n5fKFp3<47q2n-AZ3kv`X3k44k2M!Jc2nPcQ2m=fa0|WyB z2nGrW2m%8G0|*EP1_lTQ1_TEN0RsaA3=9Sd2?GWN1O){G0|Np90R#X6000040RRC2 z00RL40000200031005-kA#DHv0M&F-PE!B@0s{pH2MG!d4Gs|z5)u;>6crX07Z(>9 z8XX-UAtEIuEG;iEF)=eWH8wmxKtMo4MMXzPN=r;lPESx!QB+h_RaRG6SY2LUUtnQk zVq#)sW^8V8adLHbcXxVwdwhL>fQ5#JhK7fTiHVSqk(8B{n3$cNpP`|lp`xOvr>Lu| ztE;WEw6wOjxVX5uxw*W&zQ4b~!olt+>FMk2?d|aJ^7Hfb_V@Yu`uqF*{r&#_{{H?t@srp900Ny!L_t(|+U?Z!Q&m9} z!105iVke5-ii+Lc-Q9`Zo!H%7*xd+rpol?;CpBWcXZTAVMS+tDViiSK zuK>2nK1Eg;-=91e0lwdQ#u{7kQj| zfuT+b4PWv;I*y21i*9L+txEw&&6PYY=XSq$hR2l5dauG^7vf+;3T*-bw z@xmtpgkelvY=}DnnS9fqyw9lj&hdn4>AHR70 z%9&f~gfHh$8Cwf{8IXfC7mAiI9?;+ung_w3{+aZnhj&%@G2$-pr$ZVh)CRAe0yly` z;VF10e^{n6t^|J?CW`g>%hn!T0RB|_Or!FbRo~)7@GUTGYdXy<0$$DH=;6Q;;6u=w zY;xy(XaZh)vNJ97ek0H{P17_@(=<)fG)>bq?f>u_{N7dj1p`@~00000NkvXXu0mjf DY?EtS literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/13.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/13.png new file mode 100644 index 0000000000000000000000000000000000000000..82c3dd969a5556d8933d3416fd07e720134d87b5 GIT binary patch literal 1873 zcmYk6c|6qX7ssFZ&OVG0GmK>hgAthwGG!UA?Ml}YHHsoaWgD)&abuG0UgV}ljL2Rp z2_=*tmr+q9;Yv|bp~Y5NGWvbJe*gSFuXE1(dCobn^ZavO&!4+p9Eb#E0sw&MxYN!Z zrUC3C91@P=QX>frM3lRO4XEi=ody7^+wHX19!~!J`9I@TSMzv0ke_cnI_j94s|6qW z`xQ%@6lZ4i!ouWQsu|<6>Vt#4d-nib?eEv@9}N?UKvTP>>#z8nJmAa&LLoSH3KW!V zZtcWIg@Lk54jCC5x0}7Xy3}$~9WGbUck>8YCw4yVQLU}r+ISD|$)mJ&(uxYG4z8rT zclGOP_Hir-u|mVlbk}PQ)FP4Q#VpS4R&rH2tFYKOE>88iinhT-AN1y!3Bn@A3JP#j1L|2rR`u!`}@#%9`YVu z$iqh|9v)b_4ARpReZY(E=1g~US8%YU?A(cTu*W+(AzfYcxm>EfqueiCqNyo;n?B0g z7GrC#W^YISWtWPL4P<5kak&^vE0Wm`S&ly0bQ{&k2w}WKaXSZTz^1UZ6j&^(z5!lC z3t?`7*VP7021ZYttj)w}YN1t>&{|s3bTtxPk)*Q)QlOAjRk4cHO=L1bPF9Ahgr!ih zBobCtg{+}Nkd{WOF$iP|UXhHFCJ>2I0FNhNFa#_HDMLcxP&hOO!Xhy!2&t@s+q4M~ ziI5bIfX71s2arf23W>%d&}ayt5omxy0Jsz20fa|F2na$#Kng;jkpPPVC;*`VkU>E3 z3c@Z0UjR%14}v!p2Q~^=2p|B!Y=n(jhz)KuZSWq)Pq2Y#cb7eIGZG0uj3r1(Nz0IA z<>V;}s;V@ax&}j=siS9Lz&128Ha6jGH?`ne+5P6^hm$7`XoJ2O(R>~Bk>ZHaa39BbKs z*j7w$$+*w>K32=v>;^%Mf0zf3d<=*?59;`?yb0 zozt0H?+5fNMG3r?J_H&BQ86S&lw!30~v+p-4o(fJJ7!SIv zpw6Jt5|bW%y3?8X$m52GU%}Sl9VHiR5Y&DOt|7q>gaI&eZkx6Jck$WzFJ$abALPCB0u)jayHwAHD|y9nBUKMWtN3s33R|2j{pSJ`c0GzskWq5ST1bzGeV^cOq)jwy zXr)Zarf}2Mm)0ot6?RpU^6D&E`gFUViIHtMT}%AUThgn*duL{sz%A|pF<)H&m9(*A zPGWqm%Z~~wb}N?@ix*ByafCt2zrIdLu@~e%(bW`N`Ab?278^p9{+dm&OzU0=uB;yB zh*!(jBNig>SFX^P*yW0ip)scXjBgM4rw;ot=??7pf3fX-eHK5)baKSQhaON~-Ql`i z@{0bs{IO|(WEmj1Zsn`pTu=%cg?55sl{l9(a$hZy3-oh5vqogS)t)OJVSWp9Na{GF zOYm#x?I?Qq^_u3{st=R<)?=JS?ArK-2j3Pe?7}2cK5OX-t$l2i!g!+FHUIII-PWuo z!aKh{Vyh%=tL});%?e_lN!j9Cy}!LIZU+|AtURc0-3!lYtkp+*!pE~7$CNF8+8#es z)H|sbJ>zW<_Fm?4y2ilQxk3Ntv#U*q=GrPSmvc0V46xI@?Mt1DHR7v65AWdmBWfv& zH}i!bbEF$ME|KRFmUE{v%%TwRd!_5+xQi493&sT5h zD>N=^Y-|ZxSY{bkw8V8iUSF3i6%A?QlhtwmXKS--*cTZKHLTQ>^Bez+qrHn=jg4>e Fe*w(B1^oa3 literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/14.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/14.png new file mode 100644 index 0000000000000000000000000000000000000000..0b9a866151e0c86e3415a8ba2d21f9d4a0586436 GIT binary patch literal 1872 zcmX9;dpwkB8-C_}XUxHjk!F}>W@N@Ghjkcd#)iZs=SB{#5Gy-5gjkb?PiP7$l*5E5 zirQK9MNZKHEtOQZMG;#W6zQZ@lkfHWuHSXv*YiC0^}C;c?&mq?_tl!q5kV#Sxj6&r1Ns~QP>auwovz5?+S>ogZ*1iA`JlXsm)}f4^p7j@!99rVpQxf7t!u5WT7C$F?qf5TDw6hf!5QbMq!& zzi!kb-DTxKNXazIJL-M;zqBd|yDZ=8+6~IZ3&v-wIjO1i=4ONXKQ>4&@hT;}#6G{+dqWxgfQw^Fuj*Kl@*>>MC2SHbZovYm~xl@Z0(f@W@x;@GHJTfru#R8wtLV`G|;30_MZ zW$%FBtOIme3I;k99bFt-8>8_9Mq8W6)Fd<2$a;p5DwRy9W7TLIC=`Ng%!{ctgeCEumO-r zkRpzN$3p-IV3>r4F<2A^0|5*Q1JEddH~}6&co;%K5DWoD2!(+G77fqjL;=zWnN%EDFJK{n0zhFst@lE$>$+)OyR5>6>yqr}<&T(Q7`YfrP*fx;k(E_8 zQdQ}624j;JOGj7Fz{JGV%$&oqw6eB!;QqALW5*6JU;eJ3U<4t%Lqo&D!uLi+MeP&B z#U&;sr=+H(r3n#;GBUGr#K-gU3yO-1OU|4rEiEgrs;RwDU*FIuZEm^N*4Ey6TT>kz0`Jc^h7Lw;F^O#LNg>B*t$a{J+xgb%;=bFR+5w4D7Ox;Fcu(sr1; zO9kzuj4-?MQFxnU_qS#LalOE{YWd=&aN1?n6t64QD{w>??3r7# z@KIDgbwa79Co&}@q9^ilz-3d=DFR@dqnnI;26dWxy&t zg*kZh;g)KO^@@OaGRyjmp{4rRm4&otaiWZ%hUJgX@$vhrSNbbzuJ!DHB975GF>75u z_@y{!yJ=TK5yg7p+t6_58~?~w|F(qPz0Y+Yn|*2F)uJB{nY4!3NYjV-ds#Fx6*O(~M}ZFk)A=An8%z#nd(hX?+w>F>OE6?8+*0R*rrmL1X#Q*fQ?Rhf)cdFw~ z9}lT>+TTe>;(Ka5wzobN#N1B0FZ*_#a6#2Ob}V|Jkh-m;#o?e^p6LCP32S!JbD6_e zQdP%A&cE17;ZqMuJ1h&oYr#$bRJM3Qw5aBg(14Qd70(Vi2}kd9m%9W949@XO$FGcG zr@skwU#w=cdlul$cPH+(#yX2hc3SsdUnx1*jv4zpBfo$V+-x~Er{8h*$NbYR6}v3u z+oal0^Y8ilJ>yMjd{c~NT)Uo}|TdJX>P(Cd=F~toZU-jym zALPv5lOYeW!a?M*V{Wn1>}pTOTKC0+ysS;QbvF60l3UU5rS@y5Z>@hbJXf!+Qs=O& F{{idN0%`yN literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/15.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/15.png new file mode 100644 index 0000000000000000000000000000000000000000..86b0d1cf1da19f9513972910e094de1f4dad5e9e GIT binary patch literal 1872 zcmYL}dpy+X7ssFZerL?ZjB%M^%FM`ZMD8@G8FGt>$Yoq3k}ZjqYbN1`BgBO`7>T{tOr;1=ah^_gpy^lo3;6G$t0dy?DXz>;y=5cvy2-5+xLZjz^mAd+|jjU_T$Er-RH) zP+q;g>j^e43S6&r%E?i`{~(~RPp#;zQ`HUT0Y0JNjPvtBdULa3TPNP1Pwjca5S7!M z+{x|j`mIgAYz`qY-6a2<`>lI4kx;X=fPKGIS`}*tWFX@_d12c9wEZ_O7$%*cYy_@^gWw zKU6KWtt@s-OJ?xw)iScs=L!{zidZQE#_2P}_*10Rbj8>N==(@oQleQ-w$kw^YWN{_ zfq)P%0NNT`1*a+AUK)|{xQL^;{kF0(vGVTDq{v8I_=#=D4x1c{hK_|WELp^`U@Hsrlu$}OBD+?Y-CI|)>1Ywpy?ao z)wNK&Ie1-dz|xS>)23*%aGF{e)h!q;Eh1Bm%v2%k?0}T1WI7$ILQ|kn2#WG@v@KXF z6-y>#>8ccU9RiUEt7#A@RJ;lWO(c*=vH*`K$jA_|GO!#OjYH!wG7uJ)K|}CXRh)tX zAdw(h908Aq01m(~2@PYgC=3Py7!(GeQ2?m~cmUyH2n9hf1Y{u;1_oF(Km!O3fE)@! zMi6mXWCIWaq!BWyIIx+(LI4GT%x2i^h1%q1(Iz|Dp@L1sd%Afc#W0Lqj3vm*66MJ9 zib_;vI-SATrmmsQ($Oh!Ca0%o=jP@Y{$5;M{Is&N^7+fx zRYYruq*Cen`t_hP69C{Wo`bFTsqwiNN0TUgTF)XLuZ1prl5@7suP2+aBhll@>xX`a z?R%LIbAHlTdEKnB-2;L&er5%J_wh*5cZmxlr>~an7JrUeI{sHh8CU1d?u+E)Jm_BQQJbKuqB^)I?}N{te6YSM^t0bh2v&P(wcs>L+#%Vf3Ez~{i+E+50G z>GNM1YxI+=*IbPJ1 z6Q7c{)?sp-oz6`hGJR;!a;TMmi(gthxYMof#sRQ59s|w2mrdf$-nnls)C(Un4;pP` zy8@x{Zt`Tvu`2gG;o43a=SQl8m$w$4c)84pw&?C|967Z*pJj1Rd^&9C`S>CB@hA64 z{YygE@Nd7^Y14u&d3nNw^~tHA67Wmq$-J zwnY_r-Bf;Mvo4tblu0gQekA+lHq~zLG1zwD^;BP_R}Gq5RK*$$Qx0Q0jAED1mhsL= zh9_c<k+t-p|bH-v|vX3PjB0yk=Z|z zti2DoG}$Hp5tsRWceTsDA4el29>)z$e`_byD7#0E9qlio?!DB?NpQ+f{bxjCp&9pT znzKd{J-BK16l)O1+R)S#{4#SnL~GxDTf6~AP> zaSZ$RTO{kvYL;gAM_Bi%d*dayp+&^8C!cNt-(Y-YR#S5{-DCJ;BsrZ z?@sC7CauweXI`Fv@+MT519ZJ;OZx{DRL2g!IN_bIscHJ=dW&Fu`Rc}GOiWL61w&$; z5?OhpAtAtm4p&TEwdA~>$eylEJ!oy&9{;BNuH2vR+f_@fJN`RI-C-?|z7?LI;D(N` zx^>PDm`y#KM&4sNC)LGuX1>zoZg<+oPd5{IKfArNQ78V>M5Z+uZhkX7M>mHiyO4~3 E0V*y3*#H0l literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/16.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/16.png new file mode 100644 index 0000000000000000000000000000000000000000..e90a6e292fd8419b7a23c36f4ae859c81c9260e1 GIT binary patch literal 1838 zcmV+}2hsS6P)Px%uTV@>MF0Q*|Nj60004mh0KdOL+uKQPZ2-*7Gjwzp$lFQC$P(`E5uc9$U{D~Y zrU1^)Ns@*n(cBEy)*mJu9CmFa&dy4doB-G77=U;n=8LGMv zx5pffkuQF3LzI{_uBa56o&deW2We#uvZzggfhviQ5RHlkjGh3cs1BN?Eqj3osi8|! zRRD2rBCD+wfPestjTS{b0B>{*pP~YchZ1jXI+&hKo0$o9do7EBGl-Qcd3_p|k}xVL z0F#v%pr8bei2#d!3WbXnkdOq2kvxlsLWP40c5EY0PXL;gQgCwsh=L)5fdqSoFL!+c zK|cU>fF*!?0CaK#c6cIEPb)`80D5~2ZgK*4cP4If6lrM(ac>M{VJ=Bf4}5+-c5^gu zZ~|dxM`UOYXl5i@Qvhmb7hYQ{U|}mVFA!K-0bNlPR81sNPyrH&T_iv@ z2ue)@ArTi#Q4$~)8c%<=>FVt5 z?(gvM@bU8V_xbwz`uqF){r>*`(Ills000ABNkl9!TUhuP!UfIiXbY82O1?LND?IpOLk_5nVp$TcTe}5 z_lKBJYt^zD!XH3?s`|HYzv_N)uo^N1_DWP=+3@esUP#Z5%yqm+_`A?KcL zBbnPtbf7P&sjk>BC`8OBk}T*&DuK3byHcsBdFkh^B=Lu0zgT&c`*F!<1u_gO<#Sg^ z5~^$NiSwFsxnGO@{LYA!JV=|Au|K2^te!{&EUNIVu`Unj! zXdkFt$LiS==4Qa~5hE&~=#Yveq;GGNxg3>>nCk0$dThk{p-|@N6^5Dhs1yc)GR;AikwG> z!9b^fv0aiBLPSwS)PE%N@)TyHRg)k_a?<^4vWO~lC8AWJkUoakzWJ+{rX?U&a>{cX zJNtLSnAqF%wx1dA4P=_qAm8^n8A38keRxFdduINHs%`bk7M3?mDLD5HC8Uur z;PTiWD(lw%8{jT0ECfUbqP17_@ c(=-714-@o(`8WS=*8l(j07*qoM6N<$g3U7UB>(^b literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/17.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/17.png new file mode 100644 index 0000000000000000000000000000000000000000..a82cbc7c4597a30f60381d70cd4563fc74248965 GIT binary patch literal 1839 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 aAom~G?}7OqPW}}D0000N literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/19.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/19.png new file mode 100644 index 0000000000000000000000000000000000000000..eb2855bd8c37370ce2da7f92db5f5e24da46eadd GIT binary patch literal 1838 zcmY*ZdpOkj8voAkH+N%XZFv1pZEQI-sipi_j%teZ!f+&QJ)9^P#2s$ zfvDI<6=ir>g#*G57!7!!MrD5!m5%=P9Fgc?ui)GF#-8z0^ zG&eBXp5Z1YoZ_O?$Hvs#yFo*PSMwtf9u8i;0%v_Ntxq`}-R3zN-YzbxBB3Y`q{s0N z>;tW>M;jaU8lF zTq@ripNy}sI)#WpWVq3HjWn4IWan!096&@g=|MG=lR=FLJ9@Xmv+N$>di>t(WZTRV z%eVynJB1ueb5K;GTUm+D%>vnp#I$Vf{CspqfkSqNYg#H%devAc1f?a&H3`T}VWlRc zRoPcoZa!F%6HRg@oWDBS_-FeFATdn~9E6 z$-#(gP+%}$e3^VXi2e0x5E`s=(bp;<(CUB<<=odOKOfo|PqvRYEEJ)|{$_l8+Ic@V z_b}ew6J}}ZobsVEwe`Ib3z3(;2qB72u{=CrAB5n1lH|q(?#J7va{ASx9@B@ys=NJ9fd zR0nD}Dv3nI;sFLtf?+g+j?<=6wKY*>5|*R}h&T)ZqltkCSQuac8H++gFbbdnfH5c( z2?Aso5WrvJ)Bq3!0j#P6fJ(l2)er9V1X>Mp@b?S9{y-xHWob(v;Z9!0Ak&ZSb>S%tSujX$s4tF)d%N$p5QQOgdiM_H|weU7G#h!kr|W^0tRs zTdmfKiF=HYe59H4VX8fhD>-(XTnUxUxo<;u-_U%TD|I;7tBSRUh|lU9p|4MGj6Ctl z$`j>wq42^%Qclg(9%|ZLY5bS2kFM`$5a%Ar%$>6%hKD9g%Ku59adi(s-8^EtKGeB1 zC7LsvO4z+r^Fos$`w6oM7tfq?jPLCw9k|(_NkpQ&d8Oiru%a|*kmvFFv!ml-?zT7b zaY!ru-uixW3in=+lg%^bvnTN8rSwnB%^Mzfy{amqKg+TRt6$;Pc^%PgdDVF5raclg zKa)-p-HLQNebL{>A$CKFTK(2wfN8xOflra}-6YKqJ=(%!0&ueZ2n5gmx%_RtSXSeI zb~umYx%0wT@iyw7%N$cm5&5CF2EBNuw<=jGX)0N)6leJblAI94CS`xzXFF%ut?Scd;?<1sr zwQ5687;tco#Hy!EGI@vu8<0Kc-z`dGto0M7u?IavnDXKp7Q5xQtqhay;E#;TxBqy2 zHIUa=oFWM|XXRF_z1$OzoNr%S0@CwU2FwNuXMS&K?K}8oVSM3{_l0G_ew+OhJ#9PF zgKC*n<4~i;@)DC&d-2MPB4N@~-^R}EQl3INIkR}L!gx32%y#O(#BW5OtsXb%yOTM) Y-~uCgV*~eKRP{K3fai6h$u%J5|H>Wh_W%F@ literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/8.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/8.png new file mode 100644 index 0000000000000000000000000000000000000000..3cb5ce1c82d7dc445d2abd5958a649daba70eb12 GIT binary patch literal 1657 zcmV-<28Q{GP)Px%sZdN*MF0Q*|Nj7hfB>qhRhi5Hwzedak|b4C9GRIKv9Tv&PCIRF65-(qFjfxwJ zjS@sb6@-KumzoJ$S_y7w1A1~EeuNl)c@TnqAd!|BkB1+Eg%D+96dLBSP3vFu~ZfXo+VHHqN0%&LyaBd82Y8-QO6L4}1 zX=@#4XChcw0!&R2V`m6bP!={X320{ySy}>HT?t@h5MyErTU!=mWfE6h16f!TP*D;~ zPYO;>3P(l_JUJ6EEDJHaHJ6G7mU65iv0dH8vS5D*-+}3^q0j zD=ZBwECVPh6*)NzFD?`y9Thn_4lphb5)cYBGYlOY0x>ZYCnyUqEe<9m3Ktj(J39;} zCK4nf2`eiJBqj$R9|a~Q6eA)7CngCYAO#y61t1;=9v=rE9|RK-3LPB_85js08wwj7 z1r`+t9v%oB83`8`2oe+n5fKFp3<47q2n-AZ3kv`X3k44k2M!Jc2nPcQ2m=fa0|WyB z2nGrW2m%8G0|*EP1_lTQ1_TEN0RsaA3=9Sd2?GWN1O){G0|Np90R#X6000040RRC2 z00RL40000200031005-kA#DHv0M&F-PE!B@0s{pH2MG!d4Gs|z5)u;>6crX07Z(>9 z8XX-UAtEIuEG;iEF)=eWH8wmxKtMo4MMXzPN=r;lPESx!QB+h_RaRG6SY2LUUtnQk zVq#)sW^8V8adLHbcXxVwdwhL>fQ5#JhK7fTiHVSqk(8B{n3$cNpP`|lp`xOvr>Lu| ztE;WEw6wOjxVX5uxw*W&zQ4b~!olt+>FMk2?d|aJ^7Hfb_V@Yu`uqF*{r&#_{{H?t@srp900Ny!L_t(|+U?Z!Q&m9} z!105iVke5-ii+Lc-Q9`Zo!H%7*xd+rpol?;CpBWcXZTAVMS+tDViiSK zuK>2nK1Eg;-=91e0lwdQ#u{7kQj| zfuT+b4PWv;I*y21i*9L+txEw&&6PYY=XSq$hR2l5dauG^7vf+;3T*-bw z@xmtpgkelvY=}DnnS9fqyw9lj&hdn4>AHR70 z%9&f~gfHh$8Cwf{8IXfC7mAiI9?;+ung_w3{+aZnhj&%@G2$-pr$ZVh)CRAe0yly` z;VF10e^{n6t^|J?CW`g>%hn!T0RB|_Or!FbRo~)7@GUTGYdXy<0$$DH=;6Q;;6u=w zY;xy(XaZh)vNJ97ek0H{P17_@(=<)fG)>bq?cekp-40dzGmsn600000NkvXXu0mjf Db7X4> literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/9.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/9.png new file mode 100644 index 0000000000000000000000000000000000000000..384d354157c452746047cbbf78c87038b8121728 GIT binary patch literal 1657 zcmV-<28Q{GP)Px%sZdN*MF0Q*|Nj7hfB>qhRhi5Hwzedak|b4C9GRIKv9Tv&PCIRF65-(qFjfxwJ zjS@sb6@-KumzoJ$S_y7w1A1~EeuNl)c@TnqAd!|BkB1+Eg%D+96dLBSP3vFu~ZfXo+VHHqN0%&LyaBd82Y8-QO6L4}1 zX=@#4XChcw0!&R2V`m6bP!={X320{ySy}>HT?t@h5MyErTU!=mWfE6h16f!TP*D;~ zPYO;>3P(l_JUJ6EEDJHaHJ6G7mU65iv0dH8vS5D*-+}3^q0j zD=ZBwECVPh6*)NzFD?`y9Thn_4lphb5)cYBGYlOY0x>ZYCnyUqEe<9m3Ktj(J39;} zCK4nf2`eiJBqj$R9|a~Q6eA)7CngCYAO#y61t1;=9v=rE9|RK-3LPB_85js08wwj7 z1r`+t9v%oB83`8`2oe+n5fKFp3<47q2n-AZ3kv`X3k44k2M!Jc2nPcQ2m=fa0|WyB z2nGrW2m%8G0|*EP1_lTQ1_TEN0RsaA3=9Sd2?GWN1O){G0|Np90R#X6000040RRC2 z00RL40000200031005-kA#DHv0M&F-PE!B@0s{pH2MG!d4Gs|z5)u;>6crX07Z(>9 z8XX-UAtEIuEG;iEF)=eWH8wmxKtMo4MMXzPN=r;lPESx!QB+h_RaRG6SY2LUUtnQk zVq#)sW^8V8adLHbcXxVwdwhL>fQ5#JhK7fTiHVSqk(8B{n3$cNpP`|lp`xOvr>Lu| ztE;WEw6wOjxVX5uxw*W&zQ4b~!olt+>FMk2?d|aJ^7Hfb_V@Yu`uqF*{r&#_{{H?t@srp900Ny!L_t(|+U?Z!Q&m9} z!105iVke5-ii+Lc-Q9`Zo!H%7*xd+rpol?D*F^!Wqg0~;Mj;lplVMht1Q7R+#7;Hu?msxS!m2wzUA~3)2T-jIIr&ywvYTk6{rrvC0q@E|vPbC=4r)43k)a0?pM@zYm2lkqwJgmVsiS)c5-KZ_Z~xXG-XA1^fiDDYkgNZP&6cs6*EvcJK%Tbxc!U7{YSZqJIa36=fn zRUK&6#+xewc9<+NFrhv;DRKbSKDjA4DRCBwCFE)ePC{bq?O*U4Bl1=IARcnz00000NkvXXu0mjf DvvqW& literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/2.png b/win-module-system/win-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/2.png new file mode 100644 index 0000000000000000000000000000000000000000..baf3f06d779cb60b6290f97ebe33ed0db93144e6 GIT binary patch literal 2297 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 literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg1.png b/win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg1.png new file mode 100644 index 0000000000000000000000000000000000000000..14e73454a62ca7166f659583f07a053dd3688a54 GIT binary patch literal 24041 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 literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg10.png b/win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg10.png new file mode 100644 index 0000000000000000000000000000000000000000..1ea1d6d598debdd4759e7146f773d6484241fde8 GIT binary patch literal 27872 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%0AHv@HlJIq<7qCnjD(Vbp)iyGPE=iTtsuPYF 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 RK&k)$002ovPDHLkV1gWP7{dSn literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg3.png b/win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg3.png new file mode 100644 index 0000000000000000000000000000000000000000..91679960f68d65005fc5bb3a55fdf53a82b2791d GIT binary patch literal 23407 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 Axc~qF literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg6.png b/win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg6.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0f5d8c158b4efef5f4783dd62f92f7769b073c GIT binary patch literal 23607 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 YAALpOZ}kW-nE(I)07*qoM6N<$f>@}$Gynhq literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg8.png b/win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg8.png new file mode 100644 index 0000000000000000000000000000000000000000..349681306a40ad6297c4e384b2d4158e0b308d0d GIT binary patch literal 27260 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 literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg9.png b/win-module-system/win-module-system-biz/src/main/resources/images/pic-click/bg9.png new file mode 100644 index 0000000000000000000000000000000000000000..4e7b4775298347a3420a53496bdcbb41b2b9292e GIT binary patch literal 29878 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 literal 0 HcmV?d00001 diff --git a/win-module-system/win-module-system-biz/src/main/resources/logback-spring.xml b/win-module-system/win-module-system-biz/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..ce034da --- /dev/null +++ b/win-module-system/win-module-system-biz/src/main/resources/logback-spring.xml @@ -0,0 +1,76 @@ + + + + + + + + + +       + + + ${PATTERN_DEFAULT} + + + + + + + + + + ${PATTERN_DEFAULT} + + + + ${LOG_FILE} + + + ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz} + + ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false} + + ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB} + + ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0} + + ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30} + + + + + + 0 + + 256 + + + + + + + + ${PATTERN_DEFAULT} + + + + + + + + + + + + + + + + + + + + + + diff --git a/win-ui/win-ui-admin-uniapp/README.md b/win-ui/win-ui-admin-uniapp/README.md new file mode 100644 index 0000000..fb45d3f --- /dev/null +++ b/win-ui/win-ui-admin-uniapp/README.md @@ -0,0 +1,4 @@ +基于 Vue + uni-app 实现的管理后台。仓库地址: + +* Gitee: +* GitHub: diff --git a/win-ui/win-ui-admin-vben/README.md b/win-ui/win-ui-admin-vben/README.md new file mode 100644 index 0000000..7d95814 --- /dev/null +++ b/win-ui/win-ui-admin-vben/README.md @@ -0,0 +1,4 @@ +基于 Vue3 + vben(ant-design-vue) 实现的管理后台。仓库地址: + +* Gitee: +* GitHub: diff --git a/win-ui/win-ui-admin-vue2/README.md b/win-ui/win-ui-admin-vue2/README.md new file mode 100644 index 0000000..914593b --- /dev/null +++ b/win-ui/win-ui-admin-vue2/README.md @@ -0,0 +1,4 @@ +基于 Vue2 + element-ui 实现的管理后台。仓库地址: + +* Gitee: +* GitHub: diff --git a/win-ui/win-ui-admin-vue3/README.md b/win-ui/win-ui-admin-vue3/README.md new file mode 100644 index 0000000..d6702e3 --- /dev/null +++ b/win-ui/win-ui-admin-vue3/README.md @@ -0,0 +1,4 @@ +基于 Vue3 + element-plus 实现的管理后台。仓库地址: + +* Gitee: +* GitHub: diff --git a/win-ui/win-ui-mall-uniapp/README.md b/win-ui/win-ui-mall-uniapp/README.md new file mode 100644 index 0000000..99c7171 --- /dev/null +++ b/win-ui/win-ui-mall-uniapp/README.md @@ -0,0 +1,8 @@ +仓库地址: + +* Gitee: +* GitHub: + +功能列表: +* 基于 uniapp 开发,支持微信小程序、微信公众号、H5 移动端,未来会支持支付宝小程序、抖音小程序等 +* 支持 SaaS 多租户,可满足商品、订单、支付、会员、优惠券、秒杀、拼团、砍价、分销、积分等多种经营需求

  2. N@T8b())N4zG5%t>yX=t-5WK@Cy+#Irfz6 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≷K8$VEMX*B2dbxB@dxUe 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 literal 0 HcmV?d00001 diff --git a/.image/敏感词.jpg b/.image/敏感词.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92a539747bd7754521defe1b61c05b5749eec7fe GIT binary patch literal 48020 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 G`TjrifswZW literal 0 HcmV?d00001 diff --git a/.image/数据库文档.jpg b/.image/数据库文档.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a4339d96001a76e59d8315b97c176f835d00ad97 GIT binary patch literal 99417 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

    ehEqylvJnmKV7!eum|rI$*rPh zmX|71&9c7;2~+xzmvv@xn>wkF8-$@U<+VTD{WTpt4;9pf6$5^A&x;9f@ii0K5#q&f zL&SZG;IgEtVy)^0BKzNalkd8fg=&_chjosVV%9aWg$3j?myUExHolQCiFlaOCyfcL zICx)s4`)mXj#81NIP$RDr{VK79ccjTj!1{rY`bAbH`P3vOdCb|^6M5o;jM?m?B>Ia ztg)9rLGtsVRBnN_frvyS&6oPEJ+t%V}pY66wbQ{Om%>FxYr``0K_H?6{fQzU|B;q)Jk?s9M7<|V<>EdsGfjg6|8+Z zB;-^{ySYg4Yf5?!w4POvGAG0?GhR2do~5l#Td3@<$LpI-y*c}tRBJ{jN_F0>87Ope z3_ny%wG1H&)B1!kMWf0AVl5HO2?4YUDv_pf^l2F@zVP0cOrlgFS}_Z-8w$EMUo=#i zx_wYci$0_Atn$Ypc=2^Z^(IaZRkG~E3fj8bI=qx`L7N>HUOuaRu%jM43U8z?stGY^ za>`t=Gc%c~E*3*?D60yQeo$2sZwZ_S_#KVtold4h7`dC1U7xj7P3DFLn>D#96CJAb zE9PENvYNkKx<$t2CScYs$Fg^{@W4}iNJM^CNytGUr~I<&6*YSWe=I-3uuSMF5P1cV z->#%G)&yvIc``gL`|+<1MFfRT>f1c{VFQ9%Ste!N4KNGS5N2kt%1^e@e*&+-_p13P zz%xulmS;5P?s)zLt#e964{d)UQVa5GuKZwk|GojxkR`CW&ER>${QD=Kq&(Rw@c}WE zLrRWE%?A3r_sEY73L!N8zd_EOhmFr6_IDf^S|6Un+@+~52>PgRe3IJgHULmG9?wlbIXs;fV7$853bc07^&NgN|03!qs2}nZbjJSSk(Uh<>uZ6sV!F{8IrEe* zuZGJ-rjPvkegO$tNjkS!O4;$vt_(eSDKbD~B{?ZpMN)fjhehbxyX>uw2pnqZFdA!& zQ79Ngm5G*nC%8_hWMbbIu(7ByeYita(>}wLHdq%EP4ZexiL9scc1l$x(8$T9kQ3}t zk5<0vI1)8sAj=f@TG5=m#?L}#@4#q|KX(;~rfGO?-?Z7{&zWS^SeT2abSPH3AIh8V zV8joE)29NLasp;m9uvAH#5@LaoF(}rZ^P8zq7wn^J~Q#lmD|xtCA>pcC*i?<{MQslNow8$2!|;lqc~sWEI|J*Kn0-)8cG(%1mvh>b7GEz6+)%jFdrm zZ92}$WlnF`WSRb3Q8QB_et$A6lL$QISXQ^QZW5pM7jTKDe;xEDq+Ox|`5FN$J z9G?`f$_eKyNpv?~$7AW6sGsR6=9~;C3K+CqI6pt0V1wY}cZn|L^un^M4Dp*gtp|Ef zc6biqr|m{c^4yb8(;pgtq{1_Bjoh7!j!jTA8nG-7sn)X&2$@ZE%PfIeJRamB{bXf; zULN0A80J z_8^A>b_u06Sm}9~gbN0DVrJL~YN^tka`Ohr7S`p6LN{m! z*U~-cS7sbdn#ypRWV!4~Uvb;&Aa&5mRZuP#suORyc^IlPVz78(?;%S?C!acGP>R+D zVFKas6*MC4UAlN2&_hLfO)zD(Xsi{TNE?o|R(06JMB>_|5PeIbf*&#QX& z1#|#x+KWwS^G*jpuCP3J9y!-YND=;*3MVW0DFDOCL>))NnQ$d#9v5m5$aGyKX8=t3 zrp$Lc;KGJVBRB_)^nP0r>;hh^5hoGdY?L1Lmok5aIVVJ(R8@i<<-y?p!Li`K_Av;r zx-u0r*?aS6DDsPC{qO9G&w1Wh91itK^8$1!fRPUMNgn)(nqIn}`BDG*Tn9Fl&_^I1 zIQ_+-KCi!I`%6m?Fs8arn5INApW0|KZkU?NVM3rw?$y=oHn)2_I2`6<*7YIt6tX?o zCD6mtNlou&l4-ZX>S*hm&Eks0r4hd`Dyb}`jXrF|h*$(B?K6jRAXegMv$LEHEgyHv z{(giVPX`-+c9t%;2shoOCBs}q$YeC8y&|$^tC|mN=3!!)1+_Z2LyM| z5rX%YSmj0wysR8H>-884uzIn_^%g<&_~)S7Pgd>keBJtV%&IK zZAS1HVE{BsEIVq_d2p^?Nac~3ovYW`5m{?Wq4rPqg! z=YdZ=4M)h8eZ6mth%D>=huK^1)428c-7kX;xSB}GO^G1XGN>1HObh$B;+l#rz}~O6 z`D&C*w6vJxHQUvQaBGwS6;E)!k=ydMn{2w_)f!)fce_u&wRPw{iX^Fp!QqiU0_@n%u;+#NShLQPtw_L z8p!2}Q>&3up9;9Fk2$sL_BFY-x51U@U4vW|URhyFjotV1fK*xZ-7!#ZvH^q?r4@Bg zw8Thxnd>Xk^Z+jb4!~|z=PhLxwb)Q@xP{q$+P;TgVUiMf1q2KmWNJk6nQEV$=byX1 zDdPp`@Rc(+thj2IU>+D=T*?b8FjEn~!BR!D35&IbruC5Ik3nF?4A>Efr=B*XlQEI1 zao$K|C!paGH--3P;cEgD(hepqDK11N6;)Agg@0N4f3hAhD>&r62^mbu;CbbDq7O$s zH*3Wk%zZ67k&AWMv%OL6Ei}#7s~)NBcF=sCv5zl?6WZj&8;eCL9&1y5+ND5CGwE`; zZ$T`FE9bKo7u?hnMDW;m2}1}Q+C`?~*ZWF}`1A^&DvCeTG_rDQI2-%~J)aC)f7e_z zV5Y-ap5;)^+($+S(v;ETh%&}fj=h}Z%2ekEQj(0FLA}D2k95jJnt8pNq>LG;KBU@; zE)M39%U4Lg4-=_ckvQIvA6Pu6)`;5P#c9H)_AMe`@J&*mH%jkoes3^y?5hb#N<&+w zm4~gNuzNF8P0ig`q3T1eML$96)xH&{7EwUI4MdAlWM;8L+@m@b)$h7pCWxDU8m(gG z8s!C_@IsF7qDx5)Z3j+Q=SvQ(k`t6#Uf*bB-ecX(C^Yw0e6L%C@GszX-W{36R!m;8t_rqQA<1WowR;f&6 zGb)wZ&f+R*TNaz7dcNbTn$OGQN~hy&)r02wW7np&%~il7 z2f$!iqGI$es%%}$S8-oMe}Vuf2gdJS#t0OnytDbV-Zbqirh*BZ;@$?4S|qW|p%oU) z3k05&ZeD2F#(P~_VZfh&2>$v22Z1ttGtgiaJKn~F*Wm8t5W&Y;^W_{b-jktKT{#{z z4a%>>9a!zq5QZ0Db}VI}Q!V7?FTKK>dRY)Aw<)wYauT6sqWIjXA=5dr1n4)Dklddq z;P6otQI>CazdA^WC4I{=LBF=I1Udc1{ps%8lm2L73VgsvoVVXDH zcTkcT)5#_c5;%=LSb8~cWm_lEuKlX(+gFs~p8ka(;K9ZfI>~CQvrA8rYt_W2M`wFr&UiP z$OZI5Ra=$vmWZqZIAKnW*wsu zWL5?`I-YCi4#YLZr(h`Ka1HmphUlOEpQ1kd9Rq!S-T|fm!Wy4k>+xnJRJEcBn^Wd* z>Bj5@#TYkoD`8O?2e(Z1WzdaVP(PWepP=90rEkMnKp=)?ed0g>R!~M(|1DGbr`Gn5F(aNKaeSk{A zDyZiV!MZfCHt!}`ywbKsJzu^ zZ*XA()aaz{RT){^itb)qIzq0s;bw0Q<*3~BaUf%9zevgEU!SP7R?7Z0UWq*bBQp5) zjtYhX2&sNi=spX;Px9c-w-*2~CY1o74k0S6%>Sz%mK9uNDHz5^>cbqS&~4&^iO!w~ z$E(&cbUGC_D!|HrHskJ&i5$ifESse+0J@!#9KBl?wtimD*Ebjy<47;Cwu{#ay=^Q3 z@e~2cJ99eULXWAO9K>D(VhE#Z0^ZN3jdDsQwf9b~x(sEgIz67+-P9~eK0vsD^qlrc zLqJ@@U?nO9jXopGhRm4P(}^e}WQv9jU$Vf4z>`6xE4r{)%xP5-`J{_1ApqrEwaGGB z)F&!__ml=sWYV0hx-qqH1A@?(RxK~ESvOV-G@$}84FA#wU1tUrOG993`6xd#rDH*F zWT(E$%hqMnK~OUPJpe*_YLCC-I%t%K+JB(LQY)gt_5ehXPJ#WFxdsROl(vBhsS?Zm zKsl!K>0IoOZg@6rIuGqJ9gqd5zgR-aN4#tmRrH_{g(8BxmO zHO1#Df2|)r-jy%S&D5o`H6&ua*PlIU3KcwIwt8nJR*PO*1b?qoYK69QTaP1#qAH z$|J|t2idF(J>y)gl@E)3sMr>aSJmG*S}SpiVB$Xm07+2*kQ9&5tta3fmmp6wmwG#& zva1zPU_?E(_~(*t6>uL2ZM(~7?36eMDw&dV#VvJySry`&jy~c{PurNrL_Wkr_XZKN zk;l8ABd)1A35ve1jnH41iH-FBN5*a*A#JOWK^2YrN3W_9oC_F6T~#rhtM$=$b61$#P< zowUYD`qk4+moUrJySenF;n@AXSQ=W^7(GF+;0{DHvpluvydJ z`6ToICrd6fFuE?HH|p(jMFoc+oruz>n)fXA*3VyIOb;wAW&;?5j3lerAD#+Y$n-@LfM8m*!p;}U8W77|Em`&vaXBSQ@NiByDy4`$Cerjp+*&eD z-G}n4Vd9g|i`kXA8q3ubN)<+6*Q2}@ZUF49k_M%j`b?(J z7w4K&Frj|8o?t8WF_ulSzpCso70ym;r!}Sc!kcelxKf32L`5ZBRwy}9j;yONTf(om zeuC;5f3V68i9us4RZ%jqhPni zoSJz0vw5l?9)@Lg)=7)g^afd_oe(wgQXOP_75K>JogT_}aY&@$JWSVwmpl2XU2#0L zK@a`(&fSb8*mRra=75-n1Ue5XzZ_Rl*r0M#%;v{}eLmq!7Qyn}u-3-A=EwntJ@&RF z;0*uMi}j|b2xWpSCT*Ur03A5|%pE;;trJKzcqXw^8OF|zeHlcw#DUaASrbJze{qZ# z4g?U>PV6#1IiB)ZhpIyq7l>sMC}F0QgKe6ytJ|etevSYH`%PGIX4QToth$Sbc$d#B za(3pDy`00J-qWQ2#XE|a=8E^pt|?T%1ni@X8EqG{Pij8V3BegIvv*4*bQJ5_|96a} zG-akNFB^Y|WA~yecR;xwN9W<6cd0%*jMfbmZT^7?XQ?e({W z&wona{Ewl@cR`OA|FLVpe`q1_&(449sqoK$a0u{w1pTW4)W2yG@ds;|EuxeTOS-oD zH0hGbd0$bJ$!mFNL6V7TR7`1NGj4%#TQA13ok?XFVAxNJ%@0&WyKp`e;U`LYm*AF- z#dbE-9Gb}=3-lKgfia=939S_;RTIn}*uwJ;rSiA2M>mt!+(J@Er?v7J1Yt5_ELJo& zeS1EjVG$nxmpFrfLB5WNpD=8) z@*{StS_=oF#;k=0n37@}H+sSr?gn(nwLDjecHsp)5wxkyWL!D)_;7A z+Gy7-J10u>X{59Tvxb_}NkCSEVk0LI!pI!;sFMgf4(Zy-v7S+~wZ#F-zKK8HNKVqm zp2)_9rbr8&0jbBd)|+w2vb_tJ>5PofZsYKkcgy#*5AY6vC+)aqZf+SiQ7R*Ul?*bsaHyQPR%B~j^Svd1!MP^ z5dA^)Eh;eE)7y+AJ07ea4Yhs=e0i`106Bn@_=vpPYWWLh$bNisYSHdf_< zr+~)o(UMh(r^EU90MVlc7@*<-DBo`y@D}UU@-^JopC@N&B6{CV8*~i#8|)?I|B&8r zj2aZyZvc}NGN*Em-toq=^7P+RZ)M{B5RIs&%oXv`kvvZ4b0|_DC0JNO*-KEXkm>8I z`mk4T>%Hb#aCC2Lai^&Hs_Vb&G~48Q^VU+Sj6eGtM^}nVu~-5tJ_pa`>mN^5a@RAO znMd(LSt)X+3bRc*_wV(l@lR?~^9XO__alnsOA);>dTx$HOTvPL{nb%pzcQP2g2z_sS_oTxYv`lRSYnv(=t1-Q#_L+`J#$|22w;$!=eOJ}5>FB~?9yR+yhwpu4r9O`7*SS5&mL%hM^-QxKGu1Ep# zmxxLg+ipDj;uP1J;2T!FMt)WTEG>pbep3%eRatX)G{E=G{asGPWnO+Mx ziOlpj==#Cl_3`z2`I5oW2Uz#;d*Nxl`9oNswThsHe#og5_vLh=S}1 z(C_gGY2btg-*8s_cHeHAt2P<_Mc48LOA-v$_$rfkKH3tyI?SiEC~k?1v!OEkhJ1C9 z6J{5keKXV-tQOI{YR><~YN(;KqhO*-(m?biM8)M*curVMNLxvq;!vrpE=}!B??pCZ z^cUqvtanrOZd`Rlwm$UZD|t&Q;@1lm<;)qcFJm9>yYAzVQ*~g~o9R~{MzYzF@vy&{ zIS@3dEDoV?s-HEGy}bZ7Ado@!pS?CB3qO$L&7&1nxSSg5{H#`-hHgb6WG6F6 zPdVq}vn`C-V_1!5um8?3z*NJy`B;&nsz*d(T1jfgR|tV?~Xur z{n!}+-TQB{$ni0fNg`Q~0QcKvRxn)SZvo}!=cVTL@CH?7JdWKZJ|!)?5VfmgXz4FCM zS~A9VOJB$$ZbqHV2TBh1EN;H2>{UYzbBj~r3#+=vz&9tU+)H} zDo*{a;YO535@A5i^GPT_l;M%%9d`4y2fRf#RuAW7Y&mN;PT0Z|H+z77wL_vy-pN`& zD!biWhhMTZk{LLL+u*+4q#(|XXVJJ3#=Zp9`0o2mQTm{=xPaTb z@^$Vm`%EcGHTWji~``D457{}`<@_=M3sO`%V-q(FS9quUnaQi|G+W*PgR@&mb zV0}_ETR2~=7k^wPKQdMHJ9(#+(yG7pIv0&sWcY@$o)B-AuEkc49Yev;8FjWy`9V%?_*GHUVSbsVl9{^x}MEP0juSbzGUO=gCVi2RAKACs1hC$*o>Cx2UKf z;69tM>AB?LbM`q zBSYZ|xp#yS_HmV>_PklZ$r~X^<$(O;pF7=Y$Cs+7%FCTt8!+5nSHAro$+ zUJ?CEMxiM)z-WQOTxgYkmGkD!2ev(Zm2n~MNl)(YqP1noiABaosit6uVl&}E=owsR z&ee&IYOm)l9;?rNqHaYZxnHAyUrDQ^4FAJ7`VZe6z7(wxN5i$e1)GD`B!Yst^~r;1KZBq057&D zDO0a_uRAUtTjd$x^h07Dz0;b_8?k`Kimtu~I72jo;lkORG3}L)w2K`2YUHX(xr0U% z7)-e6jAoluS&cz!r3(9V!s%#S1{N$v;cR{=plWKD5krJI*6diqk@_jdbf(57KFrIt z4e)e%5Z0`@o?WkRjAYhx`GtZNlC$k5QFZlT$913^DzoWk5Zqo!+Qy5sFfoctVD>Zx zg7>LMFWz>kza=M97j=xqF+adk=&7VK#AVIBG>q+fI`K_&uG^ZX)m)SrSxBoD)cv=( zHd)Ec1HYsU=WH3HFL!hTgScm#5>u|SkQzc!8GmTuipIKA{U1~}d@OCNCLa_IDgqPqBLb7>mQSxB2~Z&WhzP`;Un zeEJi_^hrrX*7jW!4?85zM5*+J6LwcyNd*~) zO;;*)B0JWk=Qs3(J!onBE5Ca<*Vv06G~5#|qAArP7CW$87dq@=&HGA>e8GZeMwT8; zMD?VH+$C_nTk?M9t!bR5^dusB@f3&{6w+Bfr>#NPd5gr}Lf2kI-gUz+J+tRT^@^`N_+kae>%6wgK+v*v%oT&Vk z8)^P&x~B+$yuZ3I{Y$~{JEL%L{Eu&>!T+7Enwo)sVf4THZ2iGy{H09)B{X>Pn-~Wk z{qHwVKREuoVS00W^w({~@y!E&{Dzq^V=41vFW?vU;Y{F+JB7XNJZ&n@}5`g+7Ym#I}Z`j-{lH98 z!^h8!swIxEQcfdz@uwa^OdwP=I z2g{UoZko5wb=v_p)QbJIRl?y$cjVKp6rdxmv4TNqGPQa&gRrr{DXd zKR@cce@xm{4|cbFs%PAvQSxjT$EtFw-XwY>Siza90#i7CfRb~Uy;-(QJ%s1A>_cT@ zul@dR1iOoOs-I9&Xn@zp2I)y%KM}lV#$SWD{!Ba09we{IWx^W8gY$|yeC`Hqx_6^g z)#m3}BQra_rkZ#3RT6uU9`{H(fsWt40ra)T(bdyKSX$VttnyMEH*S?yv%D*e7g?uT zs*#U-H;rXc7i-%gNq_tFk3WPiaKPxx@4ut}_1KLs3_)}|z@dNnpdwcgx*2%1^~wg! zqQi8SKfWkG537!E%XfJB8fwa%3_-KVB34@)d&Nk4{$8wY=XA z9^XH}Bb>7=5^qR*+F6;vtBAj8AX}pM)Us7u&*r+phZslv_23sqxP&rI*U&DzA%puP zJ{K6GmzCp#Efko@lQr6z(#(leZ|6@)e~6Z$xo)+drMfvGa=C0OU4Jx|Gf^WvK2!dR zk!34i+IB^zQ1j!mD{fipbQ+g{$J64UAl(Y=2`v32>D@p@^r`;0?Jp1I>YQiMD*7s` z7~{Wc|3*Z0CZ z{Q81v7g_&;ODJk0Hm#)uQ&ZDY{}=wHbv?ll0Ioo8{_GFlHMcnb>;XxTg3!^>F|e?) zus|RzEHn@Zgiek|Mk;8-Bp|O>bc6u)BSWE5fnmm~Jxd_5V zLj&Q-fPQetaTfhwaF0Lc?wZ?O!1+}1Rh&EUUR*v!(Tkpczmp_YyM08$sHFU<{5_bi zsMy=UJuYEFw~hPm9}m%5F!$RUA9LBC+*_PBc}0RIKEF@ky?Ivs*vux)-BS0;-bGK< zNPWTVrkNJ)+=g(F!u#m#_AgD)z>>V-M6u2!YNYkrmkgzT%YKHwQ=wbgBZG&cBHu;w zWd?=-#YX^TI$ukBb4%UV4y@wC0PmGo+IFP-be|h%lIP4tPw1EXU}eDb?Z2R9d=uC;=mv9D!}$@;h!`X5sPPlFGg9a^I)pA8cPBy%qEeVEs#UpnD5NWM zO|a5p4f_+XrfcaRp45uDdfuwEQId3!<7 zK2P?KC-2n80yI?-X){8`UX#v{Shh#mnKo+XBZtzI$C}elT*AUXL4^{zn=va5qaMI? z!X@0vKE@?n%Va*y3EJtFnB=FS~oa`mMg8-+|{ zCV`KJT7uqvllO`;GM~mBf-keieT8~7TSV8%NbrNx!j?}9vv+UhxAA4%VF~DB{wP{= zrTAsaL{+FqHP`4Th}oi|8rl*4;zVAZx%U}nE+!SSAmjcEIl9e~WI6UVr8nOedVnRH z`SEdJ;w_aV&h>9}b00k!SggB|FTlO0wWI5IvfuYMbNSjnPV!l@eHfd@fEUnAlP<@< zlF2K2n$=(}v_md_kB)?hKjo_we}CB3w_19Nc~zI^iVcrOi-xg)K9DE1W3DvKJ}}<7 z4c0gECJ|AS?=8FV9M16Kdh?w*b}D1hHp7&D*ng0w{E*|=g>1H6#lwOPN4+-pFJITv z@%(YoJyhe0IJJB2;g48HA^Zg`d4)@z`QPJ9W;AkMj_QsI^yiR_7Y~}rCyf`QRFEX1 zNo;Z(6^{}n=RG&OlkU5_q4DPdr$Tox@P^>1|Iu0oz2!lO~Um*(fd%F3gYQL2a>&I?Z0;_I9iu z16kWwN-LuL&O&bXo8253Ya{&YA_QT$T;27ZN$VSv$DNp@ntEIsN~QiZn5nT4?fJH# z0F_U)$zu7JPZ;f;gl{TlT@w0@-l*$!%ikQDwT1Oj(Hk>0`P(q*fm017F&NDAxo%9_otYFrM@q zzt@&eQv0HNr{dszJ5c)H?vy8QFSzojx;vAQC~3z|=&yMje18s>=J+pnzI;oMJKS{v zhFtF7-&32LNae(n0R>K*O&cZopMeePx#A_4ccMP=om zpl!XZyI-H(m>kAjc=w7}y4$U6`Tpv?1?WJF;7Q>7`?phLzKSZg*?j0Xmofdo6Eo^@ zwds^_NZTD4&0waz+pV4@I+=*FsT5tmRPM;oMo&q6n4%k`(Em&zEr%B}mBTB1)8D4UiZin{3;npqVM_oY%)5lvrq_n!nYz9)&&svcqYBusRN#Vr_A>qmN^ zMjngkAw)eC?u~BJVV@`5=kwa68nW9Bd3JBXs>ORjt^08-=GUw=Lvq{;LGqFM%}oXd zJqF#xtR#m=ijNS7urr)jtQ&Tl@m@sKLmDGex9sD3Odvb<isoo)VZ}Bp0FZz&7RoTYh9O67<+kZic^VECb5z>^81S~Bhd+6@e zPelC!nu6-(YqKmG*l+Rn_t!CdyVikN`qH#SN8nqtr)GSLZMb9|MeYAYS$ml#f5X$d zJ%QbR!Bm9^70GARbixDQGTw4ItMGyCH7xfQ^QgL3CD}s{6F8SSC~e*pt{S|~6l8Gw zn!sWx79Cxt())>VT1ElSaTAW``xQ5b||<%9$mhCPMG!8?anZ8{MHA+4>!?z&k}>dL}lvL%YjxqT7!kXkjbT0 zp2x-vTy9M)Q6IZnYWSWcQgB?!Kz_7({yL9ak1Z6&rrh-0cn!32%Z0NK0>oFgTrJlV z9|VB+3cgF)JJZ`*Wcl}fWzc2NWh_*GUv;DxxRn0;f?zw`eDG}|DSo_oY(fc$+i3+% zI{52@thXxvANJlmuBmP7``!CFmaWKUgAgSkY^sz51VT|z4lNLxh8kKhKq4WbZ;&Ru z2c(8jLqf4aLPtpGC2|BpNr(yp(nJA4L5g$%Vc+FB_j&Gfp7*_<_x^G3{o}p&^9f{S zeb$;OYpyxR_>SKgbHv^0ZBt)lYf^3#POsR>z0LeF0@Zm1xF{Jq!F_2PXYVY6ZTOq6 zs78u!=Bm+wIW6xj*QsR;ZO5!#T})+XNZLzDhI|-J9WOeoRGjjAahj@E`}KL9p7d9T z+43?LtO6Z7cdi|jm$5KD&3UJX!kglCm5XRJ?3cf!tU5`)*_J30UHkqnPT5S)az%Y( zt{?TC(Gq_os5Ua;W{<_IzY|dOU^Eiqdy9P4hNJ74rN2P1tR^A|y7k+U$`lkN&4A|; zm-oY;3}ZArzqH3N=uM4r7}`luw`Si?E$3ZN&s|UF=^diOk6#~n)Dmw0>!h#YZfNyi zj1w{TkIVGmJzkW^{4mP?wfe8gybum}CG$J4(oC&!y6YYFtyeY{w2e9>y+_LOt3DoIVF12a~e4*UIe%nS1*w(5j>rgRxO54JoU6Fgc3B{(AG56zH6StU^KT%}=6jsY2H@ zTpYN}j4Bd!6X|`)S$`Fa7T zjEg;J+*2oHYiOHcpUBPqH4in$!hQp>yY-ms!-@NqXoKlkIJf}h& zW}Z`1+-tj#A2XI~8W|;vpFq!eWWL%0pV?DSeQi)5)OX*vA61FI_DtS8qRIaoa9NRA zjS0Pcxi|SPwi?QkZ(Rhipj#bmlU}E`?!QNBtAmXzAq-)!3g0(68zn8Kg{Mj3ob+nQ9e=mv&*hujeW2CF@$aiRH}hL8KMUVx zb#Ea>f|yU9T1q+R%TaUhI;Nx_FDkVCp5>MM$M$+f_O7a*(Df^rFQU6_jf~UC#<$OMsh*fssJo>a+J_nSIlS(p_;6qQ&6l z-B$)3)9MDb&H)?$_@^B-JApJ4{rAVQG$x6YHk0tcIpfv*nl!md;#awlqI_-%!dCTA zQfKe58$kft_He*F(-ANFm4oc1!~%soj?EE%4@|eMEtVf7=AOB_9)R>&Wz+ivkCx>z zs@0tM-?ttfRWZL!dj2|aX^3&@OQ3Lo{jZX7df{Z81c>bRD%frEz5TbzclIB4QVrd` zLkqZrhox@llzxQ<7TTM+V)TNUsu))+fPSV@qUK77peQX-*xve2Y0b+awBl z+tPdBP4|5r8HwV5n%|1Jw+6eXD-G<3&29^J2j9qk#_rVJYR-cOdp#)TS(cyn1* zEg07U3|GlKHnDWw_EK-8V6NfAb0p=JSe?i8m6n-*>zn?LndHUApfCa9(38u3TRWcQ zY6cd%cHQeR-%4e{D;qsd$*IoJGq)8OI3NA;j-QTa_C8q7y`~!0u%;|&=HWpam z>@zx7V(FBT?bFdUaUspvQuDk)r1kgbPwD)En~Av|C(^d8K01xtvl7onOxx>lbUiPP zw6HFmyiksM`$fcZLqv&1Map)((QLvgYkU6n;U6M5Ds=?(qs+*nE;x`ef`a1V0|_bW zx0?1v*_Pk>pW5siT9H?+^+8F?lkfH0!YB7YBTwCkSH3xomNzK}7VJ;ep_j~iM7CW7N;NHb^s51K4@m_20k6UxiO=r{{?*skepj`g`9#Y|xG4*Jy z^)3@})uOH$?N2G%vMsjxe#c$YZc{{QxA;yeOg#4A)*Qb(7a zmG7{ZQK4tR_j}zN-!JbUpSP$eXmb5!YLct)_K_vTCA2&zKgXd1WNh{pl@;{~tdx~T zzKNk{URBD8nzf|yYTdB7Kvc0Bto5%h(xLJDJ~c~s?D zavNvtwu!v0i?ba}0yL!Byd!Yx=V$z~vmYr;g#Cb7`d#4u**X6vN}I`DYVMSl%#kLH@yyo|ZQlpp(4p8JR?QyHdrJ1|m|R0>~g$-UDre=))k za=J+OoWZXGVjI*yf2x^l?7SWH{=jlVQF}a^S%772UZ^bT**MwdKxXB8(I!t&OFtH`%fEoElRKQ~^9>T9wB zYUo*zee8j5wFt5UX&%ZM*++|K%~O*3d0qxCcdJj+H2?lAQc$VySBdDc?z>V$-gDcx z@Nh$yjg^5X5h|0=pBFBD`6V;|LuSjy8!-ukj9+HE1Ead(3LA8`C1> z8Ah%W1#?+lx#98U=jQ`?AE20?ZiJn&?bWmwt=>-3Pt$re^@{H-)ZhM!r9NG(deT3X zIcD(C^cA6@x4tO}_E)!|5@|$rwYOZFVyv5v&?y%`DZjRJ5A3KSoR zGwoE$@bP&!Z>y=ZuGK+Dss8blCIMVm{854bt}Dh`)ZN$ai)U@A074*9o%myW(h5PW z>0JBrzye_du1Gvw5i3nK5dlkR?v45e3oOcb>@UtBcRk<6oGVwl~W$mZ5u@bF5la$9(TJI;8K?r zw_@+pVV?IJL3I*s;)04U&Z|)|cp5=QR%)B4b7vStgQox`$$;i{)UIx-hK z;;ljhq%4PbH9OK4*l+VA>NcFx-A=QG3c?Uc+_Nl@pq<(c%RxWl_*ozB!Of@#Dsx&8rki;?6 zc;JlqyI0FhLNPPA>0-DmU7KQc8Aj&EBd*f5N8HEn7Bnkm+2XBEq=nuT%?Z7EB8MdH z&_uQFdQrGB_d>R&wG1Mn%vTZg6UY@Ue75@_2x0DEMuIXDi47tMzFg=Tz2y{USVKiT z4`{*al*khQnin(MZQSJw>-@9FcskR)c*c3RTh-k~4hzy3Ps4RXp_l-6GvhPFuW3(n z*L1d-{i_5Khy2*sQ8$~}lC;>;>b-`m80RrtpIvsmGV^x#ML<>B_auo^(p{>OzzL)A zW-(Z!fX?jJzEGO5 zFa(%2b;S=t(hlGsRm1BqEz&z*KMWJGmUk`;IS2sXifH`f)?fms$f&>{Vrcl$w_ZqT z9p&l_RvOL~lCSy5d@`}HQnm!qgm}S_tZH~Jl--x9w2?BLey=Z0$B_(-hOtT6Px~%D zFu!y}ank~FT{@B0V=pq4F$eD_()pCxPBvUmecf6YMh6Dsii~;Xs_&$znic3oAm(-^ zI}KsR+Pbu$?@amgr}%>VT!@FiivO+Y=3Gf&$y7Z^8louVA+xiUPS9|{aD=_WRpD}i z$>;8Is1*Vi+^kNfS``$j%vzPxkc%C?jsrk7?O~8!F#6b|;SlbM9kE-v>)TX+X{`LM zb5<)u9ir#Ih9w*lcPm=!@BrGI(K#%r!r-Ip#?s-y+V4B;uV|zo+!a1IQGrpLo)UoQ zRr`q`$Ly|#35tCs_vK{bo)r?;J@|u>YGS*XI!p6H2UyS7L744$+FeHUnZr(~yq#rE zc0poJHQl4&rMP##o2n}WN-K2Kib`i^YkgqdC)EptFYJhSsCD(3SBbS(S3fUa`QC|W zh4a)Z$vCSWNv*EzSbK##aw-Ky=kgkCj2AkJC@ZeF=tY12BvV#KA+Q3G45z{OHf58H z(N^o7=K2dx=zbDtW%rr%<4s5&R<5x%fNS^pZLXE_vgWY4-yVr+QIA5g0x+^2!yU}m z9xi6A4)1MsQQN1aO6}raM=8m{8!9;aj#sU=Kd&AC=G}<0SK*prHGBqIEeDENdY=}w zG|GKz)MWzLELBB+9>s-4R$S1pcCs#GM4rk{XTgB4MhoA7S$V9A- zS#}m~=EV&*^{vErBwaZ7W#YV+7)d#or7sxnf9^V?HEp1-+Q$$ss8Caqw7?Kt-7Q44 zvdAi4t${+&$^avmj9TTDkUEQ)+p%mBkwz6IF8-K^w-6yFC`Fj5mLoNGv%Q&h2&F zYt4(e$K=k8>D|vvK&Km0;-XqMC#zAxj2)7S#K>$%%*(Of99I%{`~y2NLxSR>BY-=~ zZ+a1HcBO2Bc3gYlQ3)$-rBPxJTw$qJ+B$ckE3i@bN)Z!pRxK?GvB$S+msq=Q;{k6&OOwMNY{oJ>z zA$jf2cQ&z{Vs^>)$jFs_qV`yuZ;)t1jc~xU;^HyqhgsFtjJ&+8j76UOZJvoZXE)-x zU*p8>ysS~QymVQAx*K7pJTJ>6Cq8~)`UOC#CrJW|{>W)HD+}AUdx3)Nja5u>$!dUS zIff4Ng{4jS>If>$jb9md*S$rQ#H$J7yqa7ENn{nVRiY~P$pW!KvS!Jn6l?-du&ALX z+#b$=CI~8Yhn;%SoAY4|2OKiqGW--h*454LJYo?7VJ)J_sHu`n)&3{ z$bF!*r$-E$^1g4u`&Ck}b|q-)y?@=z+XE>HOt*L1@wo1~SypZq)g7bpL^@g9|vvHO^8n$}eNbI7Fiz?Dp{BCgXFZ?3w*fNWF&e$+A(g$mCSkCa_tw*IU<$QSPpnIjs z6|M05<r}7uX&K z7odDc28VOSUEvF0$W%u@UXwxzl&OJF_qJXcA`ezYSK$06^{|UmwTTtnAWO7gP~2Ln z518AW^KJT7mo{}YXA7)he}6qxBfCUWFOgM1S#K84OCnqIl{NC{0mx#0`#@5zG6KE{ z9`PR}w+roDV}p&!wxB_qS=K{` z^HsQP@>&aY98>2yP&=pw;C#PLlDgxm)c2Jn;b-snW4A}^>4e5}+#uYRy)F3Wt9>n} z%O{WCE~|>vp;2QjWihvjP|G=^R`ax`$3K6pDoxWa-|qm#H26YX32>1wdz?rjf|Na+ zvvSa~+0=!FgNJ%}SOI!y)2=uQP7hibC#b){1=IQLjO#O&xES!t6pbb*mzUM|+mPvC z?}FsIDWRgEZYZflRY(mPFx|Og?+6MJgA3 zCDaF?-C-F{CXyy*=d~m#p={x2rMPZ5IKA4S)vP@PSoJpXYu+z^ADB3Qiy$i|kg6(-T9H4JuAT6xn#Sz~y_A9dru=f~36 z_XcZVWjG*cRJsF5AfP-8wpp=>{#%3B3iv`5J z@|Bw0wV?Bhc3+Shc2vf%V}Mh5GVkOIonhEHvbL-nz_6^T#Kf8EIg6g5jS(39mhz5W4%7B%0HZnLO6z;TlZu zNf1qo3aYbxJZpP@qAtWzk)dQf5->^FYjdBNKi!^+er5NFiKe6?;g}xui5#B zi>%LIOFb275upn?-R7j}E2O*dw{96t6gP(|bkS8+qCd{?*5)TV-r`}(Ue?APO$Pfj z;rO}y8!A#nU{={bHg3pGGZWj0YcaSauWKx%gRqGG+tz34Cj=J!-^?Cs*}~0V&hra5 zy;VG?iM{3xWRrpR+a-6WKRoDUiq(GK-V)!hYu6G~>T%mFA9hR`a!hvyvBC%2o-KO% ziMwv9Rktj-A*{*DN@GqPNhGy@>?*yh3PSpHO|)8nAHNHLu$p3dCu-`Fy^49D#^WM^ z`YXffW}PZz1r%8f#R(={Ch{uRu)9z5YGs#s8IBE<{^1-lmeB9Zn*Fhhdnbg61zAIj zD6ja*_ww;7ld@)b-$!|x^tg&+|8?s>D7j4ws)|H@lDBf7@4j+RI8+Ji!Q&^{BRFz$ zhZB}&IYWIaYiREzH>uLSr>*AgSKizwasnM2I(orYn+8)e`Af=|{kcxo6Gi8G?K6fp z?Nb0lm)lM&I#-&T1~=bhQAi3U8IIE(edn64+pL>}WQJqPewj#{slrF5!)W{D5))-k z^u1(N^okBZat`Il3gf=zpTy=r274~MLI(kH!gf!DIwU}QDnFuLNMV7Tl+Ijhn~{5| zOO_L!i?K~qRrxR!;MB@)2T#P8+0@^4a#x+#h zy_FJ~VPc#IF644JE2mk>J)f}H~>iZ>|TCEo}M`Lyq z_E(!Eoi9j@)(%X!OX@tA)X}S5P4L`f4YZoJHC2l8sn2)x7%OUSh(wb8i8c~Kx!grd zKpYKKxfe1qeluKziM*~DKJ)%7rdR4*n|ur+N{FQJ^>1#&ogPI^mH`Bp7-;++Xh_70 zr@#qR23!j}8*4rn;+E|E)huMOmVG+y&Bz@Fquj;atv(=7LZ}d_I=^b)B=MbV*6v-O zcW+I5$+~7fM)~66XpAn*?3MBvo=U&PiXAegwRTEn7L6pEdo`Hns%4izzg$YHw?Eg| zNCxKO8`%oWPpF>aw`|#kaNQizqMhSKB8askK$V^BDCRko!z{V7J%r|CPj*P%mMyC2 z^(uPBoV06!hwJ#0&7~GI<1@o+<}Hq*5mTC(5b$-AS3ewJ<`b4rLyPrGXhEnh`$juk z*rytn?R`G&ioy5g>oUBbO|>6C-ZXG2S%eh?Vl%&*5xFpRcJ##+bO2Egdp;frx@b+_ zFh9p&H3bAl%?)D=Y-Ibcd@mu!GQm{F*CVfB_YvrVa7fQwM@*AmpbYT##J+4$NFv*Z_1nmIm zL8;Sy1C4rfinJxDI9~17J>YC@+v_n1D=PYug(_z{P|u{jqi%p!n(J5~Ltlcf`Xrdo z+vB&sXAwA%}3>gH94C zh)nr*FYJc2hZ)I$&YFlgP%*6h3vUSNvm$>fY{nP?gu)U@<;_0nCvxdtmt8Y|p6hsB zeq4TKbM(7wj^n7Ah#wTb`-VHRuIek2yyHFRx_XFXH^K3E?fl*85}Ab zdYquQ-Z7H<^0YjhcHd9mstW?Fzbp4*>aRnIpFSn@%I!%7g(6sT$wgWGZp{>-bYj~kkHX>3{7^B(GPqyw1o!|Lydv_Yr z%&Onm%VnOhGG^u7zFKIl;|pfGZBBdH}JI*rQ5{$BYan!6|8Gr%9pbVr5HXUxjNHfQG;(xS3vfdiWPVChb=_ z*)BOm{%~O11d~hKv)3eJ-3F|u^}f2^@bk-RzM$xN4fDcxzoOE_#c5Mn$_aci7_Q3m zjv8NYzWCM&4Bty-$5pJ0y7LEJb@a|v1%|02baodcE@RMxM<={@(Eh1WmH+mF=B;1}HMJfko=xeAmlCeq3VT zR(DN3IcWrG7&U1s=8V{KKRg_g@0zICJDH)1^;k_*M|zD19o;$ewT*&^qFC@8FS=)g zA>CvJWd&59V^4bHtw?nUKHkzeV9;*oe1+-b!c?)1Jk=e7vKI>gq?`=>xlV`pUSpEj zZx&3eDzD}z#r?)q#ua)ZFkWQ9vKVTO=g*?^&Y$3%H4kh=8F~HQgfvSLA{Pq;jyFQQ*zC z+FR5+jgyuJF6&|!uyd(TZRgZ>*Xp)RWY6eCAD;1_lgCZ$8eGRdcT#fbsDXa^Up!Jj|vUQ&q8ERt($ylZPNwTd7PuZyU9aj2AgU_3KacL+=%VC} zN5kdbg~J}#tjBMr_`y;^BCGtmmSEI~JR2)VyEWt%G99UY-#5nQ0AK%cx-X|7=|4y! zLHEj#zL)Y$Ue96GADLMQP4u7+@4&13#rcrGM{435)(j&15}FpImJ5}1&>D-+{S1cw zkd}TD8@QG6cx!i6|LQ(a2yOp@lU~W{jw9bwNfYYcz<)Qz#pE+46OQxN}Eag||~-V965*l2}6$H>`@WTWe!VN`&}MeN^-)I#}IAhgfEYXZ%M-Llw!bL!%1UOM2k6RWy2oSI9=6g+zWxmrBr%2&@{(8fSS&2p<1H8}WIt8T* zV{&-q=p6p=o;MPR&pCWQeEWs!pd57;icOnEsNQCRY~tV5{R80@vJMS%Qco^YI>`iJ z{cOoaVrggnE(@)?biSQ)6cBMBZ!pQKH&Gf6tcQ+bWmot|w6der?VP5kQ6uO^5tX)1 zR;nS2=F?E20a>rMh}yNY?8Q-f=*rayWeb(em2MBTNw4eauL*zs_VC|c%Hrnob3`;n zSZ=0~sxxL@RnlR{oy!tg0l}@|u9mHZ!cr==w(FBk@NWTg)*j?Z^i3gF9H z05;w!LLW)ANUfZ7!Oa4Q_ZQ29+Zf4_MIotY2vh+zqMg;ehU_#etKM;DIMsqRX%^_! zsMoHqGd288FJ9nO=M-$p1%6;(pXKqKgl& z)KKF|mkAux1f2@6Y^Uir|JZwWCSRU{I$(U)d(ahf=H+EIF8}e3BJr%jf}`T#LRt9* zaVM|dyIPEc%vZ`64}#W8aH=pPtoP1;%MHMfSm*-DP)Sq=Egi?cMyI|o2NW-gk~VDS zrSW7$-Cx%M2n+}c(}N}N?%L(tnJMlSN!#-LRiKY=b7Li(S+K>-s}4Y(B%M((VNPnI z-2`w13vMglP_C^KP%3TfW#}I&kMr@7;&#W&!FKr?90NnQLyZE~1KqvyzLQ5w34gVy z3dD=CPquyolJ`z{FP8mW5GbwXyx-mEvGH2F^K*yuBU zpeu3gJ+p9S^5S$aR;vk9T$SeqEA|5!7f9)N%UW8)uM37^^Nz8B#35yCd+2_-=bvp2g_2yhdjH%5Q{6s3&N zJvN>n&r}uwS(&BtWr)+`pOqE8FZ);`9`LNp?ipIt4@2P9Y!s|k3y42t(_h8;2^2yBDm!X+o9N zooLZ|9f4WD2ubG``-uw^!?8gGm7dsKWVdiY@vy$6bKk8ES3HnJ>3}!`dR9qdv2JdL zH=P+Zx>k`8X*!o~GbUQ<7X4u?ukUEFIZn-68*gHGjM5PY@Rf)FU%~tSx7Z4$3Akp1 zm;BoS>p{rd0WX81B~>x&u3r7|K-`N@W;8)j{?vIyb+l%taQn%fOWB$Y_v&n!a$l4c zH6b6heI_r?QL0u-5Ye(7#r%pTkkzcJY0c>K?7;IXTw`tvgi6avJqul7l?W&jyIwda zIp8HI7MF7clz51*2NV}A9P)Nmw+bw&Jy>1CV(Iv_FDd?Ahdj*nc`#@P>DAFnhm=G# zl;g&?(3l@$X&~9}wWqiMmT=a<$Dm2X!QbJ0Wj>@<8WYKIBZ*lZzMdWe*)`Wq1VU*` zrIMPWZtAeaTqWjcln&1{wopjM=d$AoT4j81wcW;a2_ns2t>R{GM940cSPXWU7+=lDTd9g=l7tle`Cz3SZynLx07ofTFNSj+5dqh?C6TFQ^IspoJ+Ex{z*bSYLJHLI((3$}8HU8*j*RIR-b z7x-v2Nxaa+BU%>!VpAy0|8mcgCXB9ozh2^vx5ZG(Fs7F+l&G)>h+hXS`a*3zjmpk) zWd{m}v^3bK($jkQE~c{*I>=&%H*>uA$2$P;DIwXx2{cjHeGQ$W;8l7R%^Do~C#=)3 zkqCIax|25P%8-wi#`yQ~-OEJMvqzZXS8tR(R{z$X=QkuEV1sj z%mo^uyT9TmINg*BjeRxP^-_O|Y5iQX1-AgYTFn}SxRwd7-7RdU?ofHyL5O#ebCP(G zPLV)3W3UO8iMw~>FSwN9aUxTKZPkO9rU#ASs?Aun=MvjCd1}2oE!1b=`^zAmbb?GZ zAM-^8Uw))LL8u9E+I_Jln9#>fSV&LGE?8fI6a=mV9LUezP5XOT?E3e(YCG$uTniMF zKIZ$vXEma_7-B2Y_vcRttDf1EhMXDM0qVc?YSId(R1s#RU4&UqEgdyWAMBF~RM2u7 zJ~;8ERB#YhK-P;j9LTB9>gaviYNH3KLnE;=A$`+EUe8a3Pd9t9&=Vx>#f1YwJzrR= ziemX9Qnt3zjWQB6srXbub-?t#_ATzPaum38z^a^;43vhDyW{{~=v&1ZMRNT0nDsV0#Rc(uw2FRpr%;JSM+ zK0g1g8*2W!R7iB;Z!@@=_YKO4L=AS0OdC88UkYf$y^Wgm`GYaGg@REZCIVpeplP@M zx$%hp*g~;v_px2oi1*XP<~_ZV6$1c*tvr*|+*S%0GxFFD2cQs zprZ_u&;dwz>6w#maF$jRvNhIBeg&52FS7D58~Kc#tqCnIb>3x>MFEJODas~QDFc6M zS4I0bbAUYbfn<`J7|>KYFaF&WQ~`+_*Ad@O@8XaEtbaeQV*i2`IA|`lph@$AQ)W&< zeofv@h23Y@7m1ayf_jbazoglfN(N`f-1^I?7``F9U|DeDQiX;H8P(b z3&+h&w|qsT{QymsvWpfbzieL{NIwvcs^cXyBCRvyu*!fPR5we#UReN78FKm!Qz93& zj$tG{UO=lJ5(8>quM-aM>02sz8?{NC${Cpj3vzD=EQ=5)i{ccc%nbEO&Q7;*YUS*T2p?=i$u6ng$`1XHh=-g$k;Xi=)BG+DUAYHgax|o zNG0r+yPmq7CP}GR7Vb-$3C7t&R$ag@rB@P3xP?U}GyJn;UL#vYLjBRT00I`MBt za6hQM1!ID}q8rH&e%43S-G4a7nE%1-VR<1;s}VPIovPVB;m}dKI$+7m)pZo_IG{qgk*3A#@mVScCocWcxWC0T=E4M4oi8KQQJmKN->o zOf>DOKYvnxH<{VDuMMu7l`c-6Kax~*x*r@-Z$22QIm0_|R6eXN8w)J9i(1y(+*d9b ztZg5#RWFX{1+r@|@qp#!Ea;9wz8R24%SuSdhQ-Kr%343(;Z5dA#wU~O3bTXS1^(Ly zov$|@{f%**A7GzxgNv)Kd+iEOK+^q8kNl78hPB6MJ2I3^t6gjiKYcq>;t1BAVW)?y z>*`2qroM=bsv8{3%e&m=EJzn$hzbW~(4HpG-GTd}6y)M;xA zytsRF`#_v~elh6%v{h|-xdN@%K@^n+@x6TOA+YhliI#0O8n_-$3VU&~{zur^xW@$= zsF+s_&2Da}+V)5vYqhE|TUp=`TVNjz#F8mwE{sOK?5*ZXR#bg_D*Iq+Jfil#lEFkn z52NB{iJQ8bfEb9!OC|tqK}YB0%~nMLjXOS4V(j>vQnS0rN>`6v_7i5HxC5#RZiw+M zA3nSeklpoypt%>}G%;noG-H?It`zkCz0lYU=Z3l9(brPZeI@0aS*+u`qu?m(0pFuX zt$}NIW{;Z#2|eptlZJQZJDC7dFdSRRA?=3ckpBG1dMnPU3V1U407z_*B~F~;l72u& z<25ApgCd`uq+EPwlMFU7#oM2*7gF38O1RyPfRl8f!XIG{crO44!xJ!W&{Ho;AgG$p zFnG>~A&G+rLnF}NOXGlwUdr9V^r?w-@z!|K&YYE}arLqVM&wcuq+H1FtLha`!S)VHqi-%3;X(0A}k|v$n0%o$j~7vYXfI0 z?8ar*1C7)f%ry#PzdYMh+^*B+haA`FDg!=&&`kXq+oobS%28NOdFW*_s$Nc~77K_0 zLJLjh7`%*G4k@kQf}|plsMdG^Yeqf+(o_}lTlX6i&IV^ew}$1H_~403zz zuB<==6ck2h%}-`E1vU($o*@HO4>5VqAlWR^rF4!KhDrspaHfX0LE3K71<|rWQ!~ke zOgq;$44HaM6CHdnUif$Y-E?PbvNGM-~v@1dEsdiZ#A~yu11ftj<6})sJdaRn2 z{zGt!&4t`gXTu%$*w%a?B7#R08)VlikcIm8yRR0kgQRSDU^^2*xs7AMZrQy>(8q3S z3+b(+URS%+f~2h5$8>04760GYwZ8DNj4jdNTuc?44e(YJP;jwm2Pd}e_PdCK?D|xD zfzXM4`gcSJiN*NXHQ*T?GG1nX&+wehvVnKR@C~^|=7wxXofP2c3Pv?8r0kFagFm*^ zwviOUQIYU=#T~FCk-yCgTg?Vc4z|JwbhMdCYw|WT%hmX{=arMr=Cy|`ya1*TT@AMS z2&6Da4RDr3lrJx|11|Ny+1cxyhs72g) zi{U{?-s+0{1x$@nX0j;2sKt0PB@so1Lz-iIZ~W7F5vij_&wi-ECSBo0+G!kLJL~7U zI$hJ>?m39u_(K(Y(Ywh>vz9$r)xDbGw9D*~kNF3tKIF07rofYplGRO*ZWLuEde8MP z=*_S0kQBRUPXS)V!~_F9*=HPDv^3U>0hC?O(HlSXU1y??3NC+1$@Z+@1Jvt3=6~8w zXQT7VK7d`0TX2Ur!lhQGCI$ceDZ(uz)dv8rh|92~wp95=N{|Z>H38XD7s@a>?0Pb|KLrj82d!dw|>8&atMo;U(gMSqlP(*qqnBpaGX^T?i#I{qh z0m}A*C@kKJTO5ToBG#~NxKa33cMy6=^}>SIrSvgcHV}wtC#V258RjReyxS_(qCG6l z@G`{?ul+#Q4B3X~6@p%6qBh0@6&GviR;mH`*=}_J7g9RzZ*!C2fF|@Bpppz#?g^fn zu*5N!YuSQ^pAJsDM-ZL1Yq>SY-{1OuCTi9CSg+JVb3yofYS9BE%9@Bf6oAU!T?+PERfQxD;3HpK)xr|Dxy7)hnmPcjN}HMIe1jX>AT%}< zN>%JMImzisg$EARKCmx?+6tsYrB)Ub`7Ah)sJeTyX?SYI%Ae8v?h9yP(2h5suy?v` zY_l4ky)UKtCSn|~(~AQW&<`YZ9Hle>&T3Im<7f4E-n OJCsPII4G#{tN;K%s%p} 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 `lW=tLvq&bsP9 zR;nEO90>OsEc+GW0t$JGp?}bOst5t%k`}n+Qq3s`g$Wn=b(7w~#jV9gdCfx4MW${j;%L z+{H`Ahh%IpsaDq#!B$X<`gZjgE5!;JAw50Wr+$un4Ep8?bias3en<|2i`_+}Xs^7u zcgGmKqWX1lxnH`K$An0DNa8oO<7<5SiDhx?;@Z;}q~!IOqBaP!$b3=&8G=$Z>$R9% zAF-j$494UdIe9dF7cnD62p@H;J)~lCOZ+pH|BuegVP)>QV8{Y%wrMPNgRt0OtNWj5 zNkR*nI51)WQSm`ATVVpz#j?PZ5nGqM>hmh9`4KJX8jd}(qvFfwyls|gnbs$%^s9fa zpHMjD$}A9OcWstb7&H`SqH;M{IZ-U+>dRGz%|`4Q3KaXIzeHi4-y7;p=r|H!5q;!tNp_OgC%Ta}gJsDT@;niu^5 zXk0S1^W9BU5@pt)qhse9ey?R`ka$aQ5;fUuxVcH4&z#I*Cb$&A(ro4cl(TPOgMfY2 zCZ{|8-2f2jq2L#!2R&CRlZD92FIlPR@f7XcY!4!8RHMeu&v#6qYclI;qcwZlk}DrC z#VRWRCbT&j8T=UY1KFiwlg5~>-G7BgFRwJc|Cfy!#a$n!-v-zFe=^? zeP65J;OVd1pvN39u`#G%JaDZH6(>spk2C!NnySk&jBcA+D;iJyKa>zVcZJwP`L7GWuG zLphzv;r*{z3b!B9=2#xEEG3wEzYV5Z^l>zSKO~A_7i8i8%ABxo!}VLSs}p0U+{|sA z)&NFJ!Lff5kzsZ-P=HP6bxIFe;3_J6pxx_&&;W<(aOq1jLYG6o_W3yyClI;QO23K5 zqyI4s?WoFlzbcFJ7#WwwSo40@o{MFHy48dg8`aFAbqNxdmH%&9;8!7?T-8*a11s!q zbCB&FPrjzlxCt8y<3&{6wq%zWEZMglXm=3rquy2c=ksnJ`0mPEE9Z%=P`$Jz@!$bp zrUHo%LBU`|NB=dy?qczxOjQW2FlBUm;kwe?Jn5&?K2NlBIKP6EE0Jx~*M1vFS9myy zDZ~(GLkdcqc=%$|nX~7Cq7nHwRMZKn(x;^SbQU})L+XKCx51nDm@5yK-(fsx9jn*MSCL%m!btH2}Aezutnm--;#-j zcRy!Y{MR-`>qt!?IgOSDMb8z$gMBu-@0@^*g$NZTWc^bTxbA3!>A09^wybX)b3-_r z`1v1UY?d8U3%rY`Kc(5;zF)bX%xQ!9RY2X;dc$vHB^_R8E&8$y2A(Kc3AgZ`os~aLkea(KeKz0V=JpPp-BNJW3?09 zO>+^v&8l4dE<68BdwwOqDk~x#PW6%H%kS1BjgM_enOOO#CPrX?2dh zya^7P=DU8?6Bb3B#At8LNv%?ktaf<3+a~D4=|2xEBjrEEAEs!cPNTjN+7}B%3w~Fq z7m{h?fHNo^$m&Zk1Kz{I{*>-+lh20xbTkAsacfHG&S3^8VPaS*@f(Ho9)oLsl6@h@ z9R6}$GE8Ad8PjUJeYFuV0F~XsXl^ZV<5L8AUO)I{Gw|S)d^^8kGOx`nfT9;dWklHH zrd^$SY=qGbvG2>8;lx39QsX4tL@O(taBoe?KfdqQfgQQf0fYTm9C{P46Z=1q%uzF0 zN|PHJXZ0P3e~3AJ*l^f^CwmO5Y1%-T->WUHHWC{!6dt$1AcQBgUak4qT`*Xzo-`(c zdE}5Dxe(fPti1T53zBI(b@xWH7=s%Z80&eIU}X5Zy5_D5uMnzVC>C3u3hxz6eMu~c zOvsK#hy6*+ac25*GS_b87TpG#!BveGJ*{m43|y`}IQ-HzFg81Vv4WFYdT+t(g8|tZ z!v((9fGM7PhABz!GA@o~it%L=92l_F6tZh`#W5M64p~;k_&n{Oq2Pe|t>7Q%Tgvs& zqaT&FUn(6-OiTirRjLhqg?0naQ8=RdL(sm2o?@1k`;E(20EwLlt!Ous=U&diM79+> zU98<5I5pWI zM3b5_tNuIJlJmOmfh3Zay^#Pk6W>s{?ud(wYJFQPkQ9;eVdoz9@V(oip9n=0!e?*# zSbvtY@WWt3Z~=ut8O>rVd=%!-{;Hhtq4oElY-l&95^BvY3u4A)He>4Ii`YV1Dy+ni zRk;ce6Qj7kr!dBEC%<>XjI|*W%Qz?b@Yq0%kdltJ<3%&Qtq&|HPqr`flJ`#hI;>>7SC%4%8%4 zu7#o<6qO(84Nt_esNbEIjEIN&q52P~W;L7k9>c{>Ds0K#98%&XtN`OY5+cU=cX=r$zV0QezOMxbw{EU&ivMnZ3IVbyjpXU{Q$Q z^U=A8u&hS+JwxkvNqzHcu)Zu;nK5C_x<(&V^wsZd_5v6054AOjApJ1n)c5}7;0U=) zr=haKZh!m5ySMQxI%0q?vXvXlh$zUsrivN;odHYb1APc}k9R3!E^;R&%S{_fUA)`7 zx?ID*?Z@?=dX;M(mC#>X`(poOXTOCY#0cRXJv_3ffGa90uF4!2_#TnInEZZd_9Z_* zj(y|c$i*tU5n@qXCzXqto{NN-sd=WSC~}zKlV-dEBOOe<%QE;keo-8059yRyJv`SSm^i4!CMaE5FAuQ zcp6PU_hP+QuX>;kHbr`o#di3w0;uEW5y6)E7VR5)c%ul{fMx^_;%v;dNt3<@q+V&MJg@ zi~vlRL7xw`Zp}y;O&Jv7rx1twmz__)Dy<8aIfI9nc{Yr zcxHUC*P-CGEMBRT_J@GhNOB#|bH68chWlrW?R)R7sope2yVdo~ zxumtbNmgO+me-w&4tgojE3=BAC2|Wp; zobpeBz%bGqQo}!RqzuwG7H~g2gsdu<{4L`pbv;pQ{7uJ?Bvn#sw+>bmi+}xrYLC5` z7_sLFr)u+JIo4ftP{}H_Md>Zfh3}B{6Jq_K*`P3_P!SDy=ie7l7ugJllTG}I_~t8& zP|0QZbMz6FSIiuQ5(+3(g`IIw5mt;bV4J){X{Gpx(P;Z7$c;0k@dPZ@T$??Z3ktqgFgp z|GM9~wuv&SRj{VCPdOAM}?{tPH80(&c>SYaOmbEp{JU=!|Apf?JKTXKoNpq%5gB;lU7ZD}z$Re~3^6ktW;iL+aP%zl<`rr$Km~u}A1`&vK(JkXkFTem<~^ zivOi3`rv`wjaC70D6%S8$t?U*28%cO|74M?X#uCw1rb%c&HyV06&RN&$b=pu`k(}c zr7PIeD5;w$f^-8>mD<@b7PCGg$P)R)>U!a*CKVP513!j$otEOke#}BpavMycGiVTj6@gA6A<#bXv^)=dQ@;(9v0iEeXsZLo0YPI{yTa$q{6;;hU&ws^T6e2ceQ?tWW=t16_( zXG0g+YtjHPP!qtaeu}`VU~+6I1K8RS9MW#l``qOT8OO|drN8k^0;ODPnvx3}PHFXf zsmdTW?KyRUTtZc^kc@I@>Nfo`XU9{5_c{f{{Rf$V`%atV^+ElJF8~?>XD?r}Ruv7$ z=?JOx3buMeZewbf4vOA`o8x6C*eDea;!`rhLfTmTp)6CG3$ALCwC?AUAhGXQ8-tBg zKbI5nJgl_8>$GM*EHAVy08;!|;)y2heJ#wfl$2Jd?M1` z{~80x#GRc{2;N^b>SQ@Y_Q`-Ws$=y)QsWrNErlALNtum$AjacQVdHX7jC;3tVJ?CS zd;b1Y#^Sv~)S@7iw+&$%*XL4$CO#p(jE2qF839>NlS3IOUu^aMD%`VDK>cdyx0a$e z#GrHEG>afVrk&(z@&u{v1^fv2&e()a$=|y)iIp<{QQLJ8L+!_B35_)n$QS^%rq7}0 z{0<6>IQ@N6Sv6hD2fLly&HaI)&hg5#olq)KFhig)kTDa-__z&;7gZ$>(BrgBo4UgK zYvMzOVb^06H^OJcOAphLf^988Ujy2i|D-O)2g}f*^~WU}=!pF?3qXQ#J;kyx4d|N@ zSvXn-us??(Zg%n06zox?4531#bLyc;Ctz-NB=XQ?qgI+yQfanA8mfi&hl9jPs$CrP z3UlNTJ6>8f?OoLvm( z%XbSC8y~sIUcQ9ET03qV@4vl}=P&d|(b#7L6HVlq8QUj^7_X`vgL^#m8{byRwXt7~ zCP~H6>zjONJ0_2Tyv~eCS1^e&quO_w^GVFbp^f|jN@j$qL*`G?Z1+oaob)0co>KYr ze-ZgBMXS^U9GYUt>B$I_e4*t~;h10>xrciC+?1+fXg$W;P9w^9TE<4th5-(YZ_5N# zw&J)90(LI+gdzg8A7Cao@DhltJ2@DTHTD*te$HYKux@-wNRn6I~S_~*MLU> zTDIAQ7-3*SL@wJquPWp+=8ZWG+<%S|+c$M$;eJ^)Sk}U?vEGINH#eclVpL91J3W2dpTha6jO-#yAkwIQ7$xNI8|C9?942B;}1~NOp>mYtWGF9`E@SZ#{|F#0|0Hwk1xa-dU0RBDM^`3E$w4U1qFIW00CS>Bcu z)&&HM9Po6r0-I6Nb*9Xk_xMCBxWx(dd;H1)-2Smu0AtN1lkbSo$>b0}O|H34*E+za zSZMqRo1HMN$Lh`OtK#?TJ}Ql~E5of^iCn)t;Imb0OLf~fkZB!>6v(P9*mn3NUa(Kn zPARjkzH)ZxI3`~~_=!Ww+=|AeeVEfx<2nmmVW2}Nqm7gvE@&TI&7v?i_gfL9SM#^B z?2T1lO5bhW0}9yO-CFcf2^S2~8L-1z{UM;W!=ICm(LcO2c!OTcyS$2{F50nr42WgOEWnz&!~@3Gyt{<^@! zW#OXzX>DX~6sE~FQd_=$CV~-0ohMzZtY9RSexbdy*!C>6ygo##HMt&Hb)Ny)ekz16 z#DUoq9Yk!$%?+Ruc|j%MBP8GnipJOZ&jX~6Rlg-Xra2!RQFz9*DFw>PYC4%<DWsQ<4So@>#t{_bxvsS;DTh_Y}_~k*c#72L`a#gw2yw@kLauq=gKZS=K`P$C93-oI=j5F$1tA{7jXZKQIK3{A*CG-MpBhltq z$B}zjh@pMcPu-PX@J2?5^ASQLZiagX4bnmqP|TMvm|*jL^?I5DX zr1VT-1Kw548%i{|G7RmekaOA^B4r$5Uu=ul!zz_O-%}BTS#Y=RwyI(h!0a6TH*>|cPw!Y8pBjX)0ur$4_%SEIPss=a2MdD;> zl>*7ksf;AI9H^ps{<6|FaJJ_K;pa$BvYFr>Nli9PBKH<|I=y`VImbmCrMr7&gA}}- zVKBO~wxCQ~;MP;zU8u~c851P{gQed-m{pn+_csGswmiXkDX#_lli}(miJJ8DK`cbM z>Q0A&qf|N?AoIRC5gXG9yA+kD^N|Ig#r1yq`dk8CRicRZ%!{e^;C7pZd`GpkJr&lT z)C7IHU*^-qKQjJW7F-Lokc-wdJ2QW*O+^7$nOD_ae6}o*Pqr$cZZCmiM7t#5vAEGt zh>F`NFXQHE#`Qz~{X>F?^6yjl;ay#=QI8Vfw2?Sk2m7jmyv6^~@uMdciaN^G>Z8ql zY?Cs=;?ze<1$v+^D0ld0vKB)7>cYphxRRTfqG#uZVk+TapVWE<45GG`&=O{}U>H6+ ze+1h!lj|IXmFT4c)K0D(6iL1-w$x`DXeKW?+tUcL8#1ML%?wp-Fobo@|Dc&4I~9V_ zh+%`prWDv(qgsdS0~}SB$*-vIQE$$cRCaq3{ovs|iof6`0ZV~e``9i#R?J$xvEZup z1H{eM6T~uVnJFB^eYoG0+T#=IpD$x(B;kl}AKIik^C2Z^Uy$>Y&BB}mn7i5qe>;N= zAijH}6-~u~wmWlYHiCaAA?aYU4->jty3MZE+j5PkA0`W^v470e6Uw{i=dmN;>SWT( zf z<^yWq=~E~c4Xo~~2t=f{mr^vbFY?plmz2gyYi{#+$(#k&&X3avhe}5GZLXJ|^U|Pu z+$hf7LQ5{W%XCb(m&%+27Qy0!4hFJ$K2SMZyCq~$$Ls0tTzZjWE&< zargZvUm;kpkTNVkp4?YE8-dw5Lq(uudT`J*QKo-$uu$RO8X@n+#n#pqm$SR0+u4Fs zyi7r~3JQG^Jxa;Ea2%Lt*QTw2uK7MuwtZ_}=1SMIsb!zjecTzNySGDA_Q{5{ z_i9Xmf+!ohG*gxc+14%}rssR#79klXltD$A3m%tL=?pq7qk)p-T?0H=?@d3rq?8p>LHdE6BD- ziO|m}h+#?u0b!-!qcR7sm;t^%(@`(o{J1%rJHQShSjg8qt;?b1?8kRL`PVTa_U7+3 z54=Jg5B!>*qqoc9qgDiELyn4HqHl0XVG+84N& zwmy0vrU~b#;Zd}L9tW!B5K67t_|X%=q53l^%^;NNcw1ZV-J0jH=p!^_?AgrumF zY=Pi@3u>TxU0uW0iw;ZD*NMhSl}m%+1# zW*`%%*MzNjy}`6r+(`M^XD`dL{@Xqn0PvwN)hU)GO86LjV>-)#)yf2nLQUeaDPR{J zXJO+`42e`VlqW6O;m1X4?7uMbN9qRvs<64errUYfreS*=htleqyt=>G3l{Mt(W^DY zm+gr;s;%w=eyRZvx!4Hs@=2=U0cTjoW5~@lsY06j2{~=)w7Ph?VNlx!T=#s{79+Ka z`cWuO?-W-Z%{OAbj#2uT`%TN=T9vNW0D$JW?T>QTwBy2hn4pkC6tqXSTwKjw^b5SV z+AdqToB`vvy>MQd_EY*C9GZNJ8i*9MvOa&Ii5nct1OUh`Ma8U`VS|=Rs;Ra(&mSk6 zhuw?2Ls-(YL6#)k8`-Y{a;m#Jsghi2WBQp5hb@l}Z)atPA9-%ld4B`{n#_0oJa^r? zp39WVoNFE3J)CmU2pvMO_Vyg854wG=RA!j=o{k7zl^-cTHUC)IqIKU%7;*yuyfa*3 zzp`(8e?;aQiU{yCtvY{PZ96rMF@XbUqFP5h>w7LB06IA|wFPI%_ukIvt{>wiK7`vM z0RU$6PJ}COCwNCtYk>ejGRh%GLGb_N-!;bHUeuG(>8dkvNDdo7R!ElirraGt7!iTW zN*skybEtdd&*Lv`jZ4!2kwE+Kw8O^^4i?I(QMw!&DV5h`Yrb2{gN8kyQE(WGxS<3KRIQ{1qa7SdI(8 z|E2M$qv>K%v1tJzu)a={apyaO%@+F4Yeln4&GDHk;bVVk4 zYQ$91yp3v_N%?qME`Z7ZIl83fhpn(LHP ziE4+Rkhw$>V!Gp&z0j@F3ep$dA43`02E92ZerQ3v>H2cQu)E*Rq01%m6P?{`tKoYA zR|o1SRrbe>+@E0qK`6xKa%(ELlo?b`#8k$k7LIJDsRr?|2G#*9wq-$UEW97lQfH*Z z=PG7J>w=u@8!Hh%hFwF28qJby&sRK9;xc;1#1J!V+g5xQmua#FD3<%09KO8tO%=Qx z^xDQU`6f4A{*8F6Z-&(GS@O9#c{aEecd5U-yfaA+VpM3H;k5Y1LkE5KF~Odp5-GPM z8IcG&6SbPE$hMY`CU}v!)S<=hX_1o)Q*j7p(o0rHROyr-E#v*wAX5}h=&RJ!-2Nv; zn9T{uyt{g)I#^5jgAk@)_K(qIf~+x0Uunc@zjle$Yh!tz-p_U>YQ~Y59jbmj(+g|4 z&wB*oBdARje(EE$LQ%t1a>A-=mIb`9D4yWX7D@vy%rzI|u#X*919BzhL=IIK@~2N!KE zR~sB@yzu@nSkn7o6F<&}|A zZ^*OglteAmOildC-k=F6F;aVsDiqsK$z_w@HQRLkE58v@%jqEa7to|?B^>pc^T=0J z9!n%~;E2x3zCa3IFz+4eX{Ly6w05R+8(}dgclneG+8*8KpuK+^8yl6ogPaaf>-vk& z+Km1UWvFBwRZ!!laI@$X-eY;Tn$vIT?|(Iu{WV=266an_8 z0~^iGuGT{Hq}al0{Ut}v7;8E49Fox|_$2v1m!(|E-FmG^v1nSJ4mzZUU)O!dtjW?7 z!eBZ5!en)8WPX3PSCs}Y|9?DvbyOV97vy=EdvLDg$yl*<62why zHtUMMrf&A=)M)fTn??bqA%azh-h(%24^*CDeezl8=IN6}DXPRH%OJ?Y}r2L`| zJW+2TAGi^4hf~RN)Yqdi1!7H2R^fHJfWMx5R%2_w zXupPd_;1&<%QI}*n*+b{WW&3Ueh@;wMiFAj-}KiKH&N8M%r>QvYW97#9mImkfSHLi zGRP~CGllUPaBmXJPOVDeD!a5Xy=%c9kG57Lx>c1m8!@YO$?5D~83lDUM+}BUtcMt_h&;;!vHtito*B9pUjXcRri}AHq#Mx z*gRrYuR#zOcu(5p(J_!%YZbn}&I?Rq~?*k{j+S=i6%btF9E<(DjDTb#17N5GB_#I|7de{pZQ_VjBrU-%{>Pi&!OS<8NgH_WC*E@v;7qba-b2(mOerm-^TmCGouRVMOf{JGsz zYn_5h4{6qLVCWbYiu)`0*F=X(g1Eqpc5@x1i8fssUsC$mv|bor>nH9L!rFMPt$%r8 z4`ddFxgI*WQt?XdfTw z&!XH;ii62~3HsUQg)ppql}}sS($D8Q?&Y(51djn=h0+CqklAY7Z4!dO7kxyYZ%=%M z*;S}g|0+{&sCTv!sin=8v}OKbIv_23Z9D#=PVD!*@EzwpVk02y=WW&}h5$IXHYv1o zvJtO*6j@Ch0>V{}6lG>hK!t1Aa{jqlF`2!;4DvyLj6|G9V_Itf>QVP!_{r_%Qlt-o z*A==<^1el#`H(0%#YNk-p+z?(w?;!KRQWLVwl!4Lu={R{5?j?&STT(K?*3pP)j1Nk zeSV6|KQ)knoz27!W%%}h%4Dlh)td=>REIT_)^1^d&MH~7-|yDW{rll{U)Kg`rG%qM zrN3*W(K!*bxdj|0uL(iGRrRMKKXEPe_kvDa-63QSyW<(4o1oStYO17IqddZ#BN5cR+YK$d6nS8iV+D(T%uX^1?dUsZ@AOJ^w59Fz z%JD!0H?%A07j!vbxv(5zGgCcZCBMaQ}KYN%!dygA56p8q>X9;3!NGRS=<0 z26`~fj0OC)FS|2D2ssx_@TLa`9?E9EySyGe*W&eb*Cr?1Dumf|UrbKTRZuMKVaT;m zq{%FdX)+954yN+e(smLWt1mbG?L+{;{zFUCCIhaHUcX=fn?*g4sn)wv7(iHO^1pXG zE}uJO8kL5I{w0eu?)wGudINeuLi))mxDTMjxx2q-F4Kxsb$x>}$!qL$#dk&rn$e?b zD5NKH`?e~&QH2vQ4Y(IofF357y6>%KTag#@m2-VdDSM51SRt0l;Y63%O%YNE9QrJ0 zZFZ-tAc|FF06F5xFS0+NKXp?-@9_VW#Qr{9(mJ#ef~8UekkhwnN9X-DD-nkVG=0ML z)OUK&`>)KM6Tp1Af1CROL_m^b>#7z&z*T=0=^iU;pAtcnK(0ZPT&wcoJ@g5ZQy^2T z=U0P~V4&gMI}Y2o-`^cS1L6c(XORIt0r!p}4bT7wIiL&}3J^{45sgPX{R@OTinhXI z3{U>&rlaprcG&IDhG=1ESd~oVuf3tk`7`(N{hTEW_wutTpy98% zzFKyxtYAI_pgLzq4)Iyx&)ICUWktspz}N>yU{N9cl~`d#{Vqa&%)igw(+to5hy9rq zCKT26K8I%mk8VR}07%9eX(1EwuW37p?4*UvH1N$^=&8PIqHM}?a7Uzy z67O_&bT~ctJtFS4(%$*h8SKbY1=T2(3KANJeSPq`HUE*Rnll&KZ`djW&bvr4_%8yT z(Eb05@EDi(1+tx+b3#_SKTX#|(s+@X7lFkyc_&4G}9Nz zORA-$#G8m5U;c@Mq(G5Q_%s5=6~$Fh>}?{bMbJyPpg!K9|7)RN_C#3mS6?W*jNJp% zr8#7|*I(o(-9==v*CURgf(o;$yh>Ecie~vt*QKq=sIs_;>R)vUD5kM0!;oAINv|}_H zv5k^m8Q*Mr;W= z6%H`cOCBN$jxB+t;dGjDIMsI;A}No4NyxT8FSg#nN*1kbK8iZMH5Ssm8q}~IvzX-| zJ=_X@o>F)WQ;!mmBpgbHYGd{}7OYjp{e0l~x?bDvz5WAizu10%+rszR@9m$5P9AtO zFC~9`mj`=FgL;KBtHf=EE4xIwD}1)b;Uhs-JNrQknt=u*U!?~K2x}ITI#}wuG9AH^ z4fw(0wa5Tio(|GL3~02p@ak}uD+qx=B=YB$-U`F_zT>{%-uQP}AVN)B~@p>5pQDV>~e_&KaAv;`&iIGX$ zL}Jc@g1~aA^I(mT+3?re&4C>IrAUNVq@J~gz(b1(qUAZStHHyg1G68^zF8!z?QY#U zm2pY0T|X4Td1>##^kN&$l8J^JwfE9}znK)SndFW}Ee9RvZjJsOAZ%(Q1^Nz_G=bBD zBnv<;r1R3Tx~k{6YKRM}$Zr`S9ze-)0J1YJ{p+#0rV*YDcllBy~64JnqCz?j-U}Qtd zQ%!Kh4Ke6`DZs)J#%GCi;C@gYmDRG`PTplsNesc;s={5>UQxY`u{7m63H;jXy8a zu}Wa_k6TnAI$Ch53MO+)0D&md6y@VW13O2QL5Du<%`oMDF}G$OHO@)Hq@2FoZum4| zdnqnWC?#tZu2Ox7iiP~2$%Ofy>8#H?k?w6!o*>wEklEjKBXWph5$i78Jp{~lUD`al z*1*ntUuJs4S?NrA@pE{@v3{$OIm7hXyFI7jat`_A?VstOgJjF^epY>nz#7hp8_Q@r z>GZkCy`PTNu-Kx|4rHZu(MrJePZgiZga4u63D1kp!8V#$X3VdQCyp-R_W}^-urPzI zbS>g_0;hEwaT6Sx5QoAfS&>NHfPt7rMNqbCr{xXb-MAo3xmlUIg_agFSQ>(X@s!5F z`$GjGwA2tTD>z}PyO+Ls1d(9UAaj_dm0z7|G(~37w>FsL99)peNPo$GaWdWDIt^v` zL?0?OPYL>`#mbiG^In! z&jAS&ue(Cp1FhaPX&;Gs1I@lcGK;GwddExU6~1{qZimf?rwtmOTKkY!-=vFTIVl6h zIA$gS)Rc=0;VCS;Zzhuk_fme=^?aiFqi+5H++jG728`(2Am~T~>n@^{h_yrnsi@{( zFtQPRH(v=RIQ6o}!#k!1Od;==yyeI~ONwiUKtV@aCx{@_CI)3DF; zDSS--h$KR%93BXd9dRn?R@`b1+5h8Ss(vG)^oQKPl4m>_8aE_9{><6^YB8t^$c+K< z{F0{ih9HIv*EQ(t8wLP-364`a7#CC!A);cp70Oe^Hukvl(Y;hx`HOjENbO6 zYG=d7L`nr<>^qdO2Uyx#^taKn_DJm=Y7yV3M1#}kgazbgR^iq{Tp;Y!jZDPFG@OSq zcqip}$#}eOss+)E_(+Lfnffs-&QF@Wx;TYt`&-8R1;ik#lOCEmgWg6(p;kY0%M6J~ zKw(Z6d=h0ahYa`%R?AJ>(1v0F+Jf$KN$`8$_#{G?qAuiQ%TS!J!VjKUSnWQ^3S77k zv&ECF&iQhsliYi}wfL-men>jl^KKCPD`9~4YGHBKuvVvNnhKhoFTx$3xaoi2M1G*M zqEmtL4Ti)E^cx8y<_nA_dG4Imo7UgvgOH~_2)0G8*oKL+3S2b#f7|S>g{-Un0%}XH zZ(64W7=RRn9{KwwfU2J$O^j8hAvjoyCcQ$os=ZZw&Z?tD|IlTG03DA2M=iwZV#K2B zpt@(|@y|u(U9r$NG|9(}(6cyuMc`T)j}@grU-QFNFrnpA#g@kK@K#PJg4>^y3zSz| z<0tNl5vO*2+s!0U{E9&Ao(o&7#dIV$xK%M>`M)K*r4!dhLbMXJ+cp_q9)%Bi?Xa`PURtG-Cx1pn+ih&I`%-Z3_a0^sqqsWzN?e@7t zmQ@+mXl$&!zcG%;v5m?UWT1rz{;jY!EzFj4z&BmtqV2w1{j<}uPU80L)@b_>#!_;B zvfL#L4DR>bxlFRdWNHm#kJv?xD1glZku*oIX*0-2AyG0$2o5fV#>;&HjB@_r_xQy$ z+T4N9YQE?!HUh|i#>g_6umlRyWgJBJA(1J&Rlb8%QqI(s+~D%7B?Sbokp|C z`N5rpXAAeBEn2zV_XrT~T}NIWg^S~xP$e^h+rH?_fyD-KVe8_oA{)WgLSF&#v$ZXc zF#4R#sw^5(+AGLhGfIR8kb5rboPqMk&qA6YB0g%J=ht8MTz{-uZGm2W^4uA0*cL#= zsvq+a=+H)R2Ch4;xI(uTxe|UHF1e(3o7yZn_hzj`AF_#2RoGS=c!a=E(S>s7`ZJtv zUu`WZdO?;+L5)F0w34Gi>yMre%WWm=TjStsgD>dS+rA+xGpBFfBWsM5pF4xKSVFxL zvz2i7vPJ^s;p}nE;XXomzA<*Ho-G=zDD1dD`4c+Ga zkr1IrP)G>r;HV8Gv$Ij0(0I^lgR#mr6;r+PiakSqlKw`VIn;JkD4_`&0Pr)g3uza! zTFq~MAqOQB-sF9b*)ozeZOp1@(_;rS@S0T&9zU-mBdLB$$3&{sh64Bt*V_$-2_gSv z&MVCM9m`gLYJ7kPtbf>iT95!9926I+UxY_75JzKtKuf>~kEb0C%BwC0`*`%{mBH3s z5KpsB?e3jI!`7h8pfOzc5E3L_W?BXF~$FMr|4?q(PO09R6npp5BDMk8jya`?{$`3LJmO)8%btMrNqfZWyP zjP^KmLXPsrdSgZ9&OslU#>c9zA?N&Zm_;bVmX%(+QYl-OOk-&)rFR0mg1$BFH6++& zdOGrcz-kdj1^wpyhhd7h+wsS@2~u0|?DLI+y-G_U8vsB8(eB-#fC6;YS$}1~2x0|% zqd*yfI(jot&mSktR=1{@e{eZK>ylvn11eVq0{rGTAZjHbfSc7N$m+x9w~~Yal8Zrr zD{Q%sf^jpn|3)Mjir(fA7zt49JwO{4USvfBNMr84LuiEVfl7akSUj>Q$Td_{rKk@it1VIh!--LV#_Q z51rqh^RqC?M1=FvWcS@@C-(VdHoyCYjw9yzCX(CHe@4|&iZ|Wzf8O=hL(1jm>~YH9%x9-HJ$gBuDfp8tkq0k=7scj#gRrfxRoMU5gEEa6i zKQ5{@!N3AAK_U%A@Km?Hr}-8chr!{ws8SNvdH+=GD?Ly|_NXh}#7VtH(aYY--syeiD}Tm!G5f2*+rkcxO^9dsxMuO=Li~ z84SwhGAUHxE6OVpTLl(YZYj%O|0u<4LUz<8w#N24jmOx zpPkkWa1C`C{qlJGnI&b3B9X0E4#L}z*v9)kvnUz*S;RC$lJq;uEd@`u4f|WCmFYaT zBxIusH?gKaDUc7>K1pv$JqbX7-<+UV1g3!OVNy_{Dq?C{<<%`>DUZ%5bg(5u^OEW* z18cryaGbcTH$pRy41GIdBAlVllbZp1XP8QMW*J3OZ3cn>wZx%@MYV?UF?9+=1@b*Y zY(Gr6Et3;7=6-2yMS?(ztt|B_^?Vc$E_DiYBZPa85js{W&w{<1@S3SK(5xjPr5OFu z0o?l{b+jyb*P^+UaNJt_w4{Gu2(1Ud+4zLeaJrmY(yh_Z%x)Obpbj}ymHE35>+tfo zKC~h>5!nCsPz(dfEZLwIim)(njXa_OB{nMYGr&6hfnE^~76;+eck|Fj<}s9)t}*nu zD+z}}m3wEFMJ=S-mtf35dhS2_Is$mTYTV?2WN{46TO9M8$2DuX$SJ`|((ndoBexkI zOC2{TZ_g!g=-phB)vjBgB7#2-H@KaEVG2EqoipEiy0dNueqY?$(0!j!^RVjLg3;nM@Sg zJWHU?!@tJG@5O<1&Nz%co~? z61nvFIwmVtL6JV@;nHb&^MftvGXw}T3!tpCVm0w(IH7$hebz1>V7>W!!2TI(9PLpc z9G5Ty; zx3aJ_*rH5QBFWe&Bw79I?9Lm!19m@Aq_SZ(C|N=8;hTN~Wo)ZT1La=>+wI6zoy`NC z06j5>eKGQ=T#_&p#D1|}6&1E7QD{Wu)XxSUgNT@-2tKj?C0Rev$AngqgGDyY85RR} ztf59-BRQ7~z|w47MO?+|Fr3uM0bW}An9#SIZaLHF2hayzDfIoK6IaAQ)$n!ZxPN1n z?$2+P-+$UWH1(hkhm^$FhA9b-E$ULMbQ+*3t13yX(V5T&Pm-C^-5K!0L$5>OC+j5B z1iHx8S!k26lqnXqu&-)<6F=%0Q1?LG_gjj&D*KKQ&MDmab?LM+!ZvgGmK!UK$fX>%9D@IJV^MUW ztfgXg8)6e0_Fg+^vA){W6p{>`K@-11Rn}l#R9*idv?&(Ec5A|jF?4{8k&@!8PA$rR zp2K17Zc%hYJQw2*B=MV#%1WVQ?oSXhp5SnvyQYDzugmQt$7WLP9wMU z%KUyD5|LMRbIdAMo^q8Us&xL@NGoDIP<}s7Oa7fGc08ZQ8{7QUGN0Cj+tV)FXHf<& zN3TNXxmsMW;qO3BDDSG8n-qvkwFOlmv1B4dK+zYed8QE}xGabFDOqis<0Tl?&5v@lvi zzrlp5XFD)m_QdCc_uRVJ_X2`Fu)Fqjf2N!VuXUjn`}MQZq2naaP+roa&TdjM zd3xqVL*Frbc(=&n`V&s#ShRgfM0#`F>~|&?U*c4oFCE^(#$R|j+C#?qQ8B*Y6Sk~R zcZ_$35LDlse<*oM*puE#0gZ>)0 z(sHnTrpj{gByAQ$Mb0s~y9ih9qw-qsN#S;y!I#2iK?Pu?ipgqJp27^J#N&mR?2_ zu?1iA20Kh3egDeUu2p{ziBG=M9P^x7`aquN;~8qBF-VKj{UdvQR-*1W8f;7Eo1u~4 z)zlAMyKN#YOElN!`lL>IA#y4g?O>>vF9HL~y^dKZQ|KpOW+w~%1TM5sjyBPyr3TX_ z=)3gjHy^9^;=WYZ7vnZ`c#@v-1Rs4+d>2M*cdYT6pqTGmeATOP_^~S&M5Qphggil5>X*B8->~&gV_}v~ki63^hcJtz@l@bsld3S$ z`;P6udP8E_-DjH%G9wPmSsJXhO5h@72+BJ(G!8l?8=(O;ghw5Czeww<*{_R#rvHqI z`6p*Ay}~)oGQ+Tl7Ra8W;xu;Zt_uP9;(y*P-4^*PY%pjZ#_8!PcY7&tHqx=)&AL)0 z#R~5;(Px)i)YWEp5WPb24hP=d63M-H|Np~m;PxE=px^J<1Pxb$x&)vAB9{7|T7n0a zPFYr_BOj1i>Gw%Mkow0=xC&4hbE@q6V8zm3G<+Ge)l&W#{2o7^POoq)INv(+VQ!2d z5gfRgk}z4z)2He|b}(-Zhr_l3{J<=f7qkJ3>LIVW%GVEATvdt-Xet7IfZeC3^$HqZ`|t@pB~oa%6c&S_(C`1G!2<|_^T{nkwgFss z)kPdY!w!z?zvAH?9O_U%Dl~yT0>G~@tBsprD3g%Ex)unauFp*MS0nUqWd2wdZz2Ap zhgAuTfosE%1Gkm-4Vv~}>(!w_uwvie5y?2el{Fxz_~T)sG`)G)k-d&(r?(GOKvpB~ zMV~x>|M{a}W@px&X?YUIfAMIm-8$t%w$YgK9)5Rn@=yN{gZn%7IUTiLA59%YVlM{o zLcb_`_O>-4Q2G$rH}~A!J6~RI{irP5ybJT!kQ2Gbd`2!* z*_|dt#fu`vT=TuK#p0R%&_pJI4~e4#Qx_zS9-3Vo*3>m|52WUv8i;^*FiX3=n`K8- z_t{;RhbT&Q#1X&WJV+B*C(B?~!wd5o+^u<<2qzY=<2@~NYp*&@wE}m>a$^3SH|6xa z4#nvz5bmq|HW*dhlq54H3vItf@}?~dD~NRN^;$_i3ovKSuhVgyN*i`$-dEr9WY4oE z{N{l^u=E-p6IYlyo3qW-{9!jgRIX4m8hW{jDWe$94`;Vz-4H zj#ngUJAPgT*O3)(md|9<4cGd3A*Ciy9#V_d6x>jhXv8R}ElhyrOib59Z3%BAr(Iah z#Da}~Sf`eVnOdp{<=jfsAl|wT9RzZGpDF1-DA35c|NJGVYm?vS@$_nDr=RYVx|WJh6)TAoQ6;;fVR<6pw?ro)&33)uAuzL=JpW*@wZ#F}Kawxh5`o=%hcM)eY(8qf;j*O%dR022~Hop|Ej*XrC1Y7yARVDoE zSB@WViz7d#yI->tu6jl$!%H|jn4C4&!3|zw3?@b4dl<68;g?2STQhEep;R$+yrt+6 z5p2GS-)j?l-F{o4fhRNhd~1TgN01>x5Z^s0ueog<#N!b#)~Zad>rb4-EW^i-)Id8t zKDZnzs?A`%k}?htm64I#2%T~9f?)3Kl@Td~h=WMoJ1!x3z;_d@a55h=oE$YwPdqB= zdF?3=gCQ?_av#2m5-cX8M7!05+mJ+leq3T}x?gG}JnIx;c5E-#%IUx_CvRs*wO9k` z(7a&M@75F&+<>Q6}CD$Qm~Poy>W0RYz6d9Nbm|+__@6llBZ{@UjGUs8_S4L%gSk@VsgX&tNE7v(C?MWQklGG* zNldx4kD9=!j}ps{Hdg`@mw;o1F}_pgFJt`B?}^)veZ`;w*j@%I4;F^bKa|0E3z6`j zgVd5GOWAr80Jg~@nm+H}oZ~(zES(LX4UGeFy%K`cff=7xyaq^#vb$WX)PSSXLFqw= zSUAt4o3#+2#MgFCmtEb(%1@-uCzx^e@14vngnC2j|??ms;9|ym&o@6 zWCKrQvf%rM=p-FYhGT7(r0PaOzPD3?Z84_=0Jv7NQB`f9RmSr4s>{Liz=o+|s_v}x zh_AOi%2n#TBCCq(OSRdA-t6~Bwe={yBY4j#x;Z;;%Ww6-x6|G03fb*U<~O7F)4zXh z-eaLPwzU7rI`H%BAJ!sdk$q;0G=$qhIsw|cPM$0!X zFc#9vxon4o2s~bU3sQpSmRR)nwtC$a75sR;x~`Ac`Y*}BTEYSXgWUzsWGmKD5?Hn* zul6LcutrFz9Ek^!*08O9g(+>M91MKqwXkda1v8|4y7JgsD|wnGLyU>EXON)55xZv?__;kuNKI zPa6baswAwEkuXbEW*Z`;4-vr?6S>@0pk9 zX+CTIRb^&-UxmL_bfVzIlBdO4#y2i!)2zR<<`lh4wzPl zJ7{T(g1p*@BY0GLK2bhvr`9%WpXN4a@2ars>Ug0=w;0ZT{x^!wn((5o5MQ2^wAWwiURT3xsm}>L$4CU$%e1tUN_8Q-WnhXCbBSeFij(FBf70|$USd<@o(;*S5JzRP z8n&WRumz=U(J_dmfzYqnf<^;vfs8BK+)EUh1TfvgP*E^{uuH!%of2z=PqdM)tkTXm zy6=(3iT5phRe4gvWNf#RU@@XFEu7$5aR#}&Yq@)wm;d>nlkhC^^WDnc89%a4He_7} z7~!<}9P!gV^lD=o zoypAY7~_~aQzhvDa0a3NY^28LDii~%jxCR$#R>70hU0l$;8v4#j6$BpQTy3Q060%* zx&w&Nr1NWj9n-O0^U2*Jgxq6X(P$&`wBhI7@+V7~NO1l_N8uGi1R&ki&s6n$15JhAtv;^fW!-#Qr0{%rXkS*98@eW|CPj9UOlowj9fi`kyPkGh4+#g zKZ=m_sK<&uX6hX8<%9hAJn?64$zRtXjZU$9ZDVb1d3{YB?Ag%ta*XrP+(^iV+<2x%`Z>Z>JwbN%Kg z)sww@o2;d4gI}zbA+xAGQe|W1aw6R2OyQpxg4}3^#JvY>=*QukPNjy2RVfns&H2($ z_MG@^y(};wIwUz%5b`RPs;zSY-}?HHhQGT<8g!}lZn2k)PIo9n&C|$(u$KMiQOVr( z8GM8ILhN2!z|5L-nD2xhnAiy*rhY3`Gt@Rs17;Iyw^k&O*v4neyj;;5`fqkU8%wKf zww6CW)qR(Z2$Ib-Ea7EIa|gi51G#2I@sOzceF~naX(=H}kQ1^-rIef~9O1!W_^;^$ zEj)lrWb@zGna!3Vcs6-jzgli24jUi}p@onZBtpnVX;A#ePPYdd8$6 zV@_PwaXV3ur^$QVfI_}{RM0oI88+KNO5IpC{M7=2KM9F`%FYP*EY=FzNc%rQpOTPv z^DIMzs32K7tW9^Qlh=9MKGyFq`)S!aRrx7lksusW9$0(MDYeV&)2pj>_ff-h?VpUS zfsN;J!I~x>sdq(zKq|;E)fU6Ly&RvMEsPRhJ^8mLAKpxq(hCtECDXDL5oS^g>B9R? zPNlKO+!qfa#5-+$8SfidM@_dlq?HccC=&gY-f<2PqteChS*Mysr#f#t2fIa1b(uF| ztdS8WYUg*IV(?|ng2GR^((&f*A=sfiVmuSloi10nyCxV3EhP~!fd6roC?2m96 zjzyuurpUSW`s)+{*>qSgfyh-wbTH2$H@3_K8BKE{zz`?2!Vw;YJ0;On539b$fHTTj znPQUCW6e)SoH|Dql=-H(rM+axI&UbM2AS>tok4ev1rtYS7+pTzE#JcaZQ0si*pdl# zFD3jC`l^daT4h(c1iys`f{JH*NC}y$%@niR$`7$5z`VS<}V0DQ1#R?5ccTUxp1yPb2hpCL~_xLffRlIWTArLKw!MO97A2;+p z8J{hCNjx?Cv?F4jP-tlLsTPAsaI`4lyIp2vFNUZq&v=i~cK;{zE=g@pq~uxGAC2po7zd&BY3!uA5iAuX57(|4}vQF^;F?q09)#m^5-&6C&N!EA`|U>@#18!D zyRTu{60ERskk*I;DI3gPayhk!xI}7DWzX<^QXm84pEc=&-f*?Al0k|y@e}k2YE48p zdlPEn%^ci|l|FVOiyd=#IFjm;)0SBD8_=0;2*3?NA|=0Qb2^Ya2UC2!Bw9& zM*s`KCB)v&zGDDj=6$2bLZB^?gDOth8@6OTnVh1wYtM%(SetMBb(@)TI!QOSXCN=U ziBbwn_Cd-#_7^7~X2~_T(7{7c&3qqfQPQ}}^jE_e$(C9(q9U^|og;-m0ch6W`6=(4 zj28?((UTlZPIGe_Nr~s08-3B*-*I&1-i9l7SBO>oqG#LLBCv;_rTcn+NaFBnF9rNi z;+*lrsn~+mHVk>l$L+iL@}?iBJo1DMtG2wRt1n)x<=6EjUxRDs+5bpUkiz2oa&l%b z^rUF?u}A_d9gcD`be?bSPVu8P9;dhJ-fzQL{2pHxiE=jN_O@&_C4s=oD}H|W8cGJ# zV5k;r?x~swz9K|JF~$hkKg;1leR}X@J=Wdtmd5Q&?UUT+=yr23cStmpzx>`TUQqrT z`&=_M@wCo?(Bp8AR-ovO$HVWkaOpc$?)1n-Uf7^CHY+`a`o#1-RiPkkndH!a$MCqRf}XRbGw6co2}S?D!SDEII0EJJ>3AF)0W_ z=YV%(fZ~L#VeR1ov%mCmf>LL20Qhx4aT!@Y*^gcfyL^~5PL1g(e6^tXYapc(5+r4( z+npS((`}(MR{lLTE31(cwrj)O&7L#bm74h>i78E#0|oOsp05CD-0Q6_SZCu)sVzrR zihe!b;dFdimqnNh<3S=aZmVe#H$yVn+S2@wrOu%?X5|N=jfqtm|hC-Ivj8> z_o8QHCJ^wP8`IE_pe?tD&WJdJldr|PwCiu}M)(VK-NF?*SEA|-Etp??;r^l{t z@D&f3B42#QSMSl>sU0AlX*i#Bu8k=cKDD>pgtherWp?c#Khw2m(!=zyLhFV)^P#p6 zO6anB zM5*ppdLsJb`(|s!67tLUrM%4gM$i@*Wpt1{Zl}k4QO{JNQ%TQ(4NQ4+xQ(Zh$ysZ# zdPx1DJ=lN?&_pAnW7pBd-y_%_aMK=kJzYO=4`?}Di@g*;5mdOg%d_y`Qk^$pARYtLwKma{f(f5$w z7LMA=jy?p;aew(Pj5ABf`u^DjmsCpspyeu>Ymo71Yig=(`trditKoJ^!)QOR?_OY0 z9Ti0Ab7a{IdR}`D({-dF091x`2>N6_O6*+31N@8jj~%oh>ipKw^pgzvq(D^Kvj1l#s>N~Xj7 zs8W+$__0;p*PIgmUoD5sGs};Qfi2C)@go2u%?S8nzboyPRWva7(=NTF0Q*UTRjlX0NY# zXA?e?j@kYjIwV>)z^0X384X6l_KhRsZvML1bI6^^YADAzxA~tFaczy*+Hh2ZHk$1R z61QPrFjOY7wNa9M8f!65UqdsyVc+{_Y>1qPjMa{6(|;D}hxNF2<|!YtG*yOW!{ySp#U5?%CGR)5@-b<@i2B}5>&2DEFLAQXRCrka=b5YvQ9wJ$GC z7e)ic5tjA|i`x)nbVo9|mm^>7OpQH`hrqF#oMqX6mMh)BA~s2s zDNV&3Nb`kQ!|M+v4F0@~KX`moB_-dPwH9rO4-p}{p;`VL||8mpzv%bC#+2x-<=YKkbBUO3&WVY#0x9k-(XtLYsA?M3st5CsRk9(Hi+hl4EZd z`$c$NZvzlh^N`w1W^Y$rB}59fLh|R=y6@9p(|3#P2`_F_puTZlOd!2wL+sFCh~7{h z&zy4#p|oH%nu1-?$ev9F@-C$6tnCg9o+iII%J}Ses1A$ubmRE$da}}iO-d$-9Xrxd zc2$J}%D1#FVu}nq5bv0lnFeh-UoW)j-A@y!PRoixry-eP0UdXJl&P}ckyX<3VzMm1 z0(q9;G_z`k{k63dRA)^XX9)S$Du}Y4h;B^#(!(mDUR45|S3`s-qO8=EGj;B0X*F)^ z`a&5y6-?_|SQk1uV!Cw;=W|C-iU5vt!ze+&xVS{vH%%Nqdz$HT$u=4|q8u!WiAE+q zG@0<_y}c5>PVZJieffbNZ_VrtZxb87yL~WKz1ivITH}0u_;@h2WbfYe@I~(u@S)k= z(AnBr>)wV3`JO%G{C@z}Kqqb@PlV?4E@Yj6mWw-ai&E zwMnU}nstp}Jc*#Y3*X&|!7&JOF)bl#fMAiY{Z^9~Gm1Po#3_!J%z8Bp%S;|5V^hQ# z+LXe$B1uA&=_TCGovm6^hA~q$=_s02?BidftEFiv^r9q;sv#sn`%{BoeRp~J>C@%q z(d`WbeE4v;&-v~V2VS{4x&83* zXj@`I&jzG8cDjxcC>jWfk#rb~&)h6aeUDN|D-$!(C`M>4yVsF=JyiS6pp{wQ;3&sI ziE4tCQnxM-k~Z~+s3S`fwlYE5o<=!bdxDI$@NvFaMRR8T8YzJqPC9kYW=64j>RT*K zOHYq|PN$C_;Bfxw_T%p1;dlF=sElak%h7t@f=yq7jX?Y$4MqmT866HC?~3xa^Tcx4HreGTE9LoKw^PWnBc@K{FH~YAZ6ETS>bP}H)?K{PEvkC z(N=41izZ^y!G$CR#6X$N8k2IUkGwLd!x1N~)=pw^LZ+0iXmlr7x@ADdl9Gz}XVD?q zc^87XYSg@4Cvw}NMM4_IZRV}%1bWfvf+gVEjOB3cN1}u$b0Ad5y+jG^WbsyHJnngw zY()0UaT(gBP}$P#60N++!9zR?Mhz;NG6GarLn4#*D#tz$S|#L}=(Kjqb8AKP?H|jV zD#@`oc>%W6L;s>c3%`5HgNzkmDVo+TnB4-Oo&)Gw^X#;8u=ncK4*b7&u(|ODY31Tz z@24H8d2>qGTx)M7iu{U0nwUC>@zrWVaO(M$9QDB5P*mYmJ78gbWf1o|7qqI&QB*R9 z|LGx+%T%^=)FR+u^I2Z8Q2PjzGc;MzSVuK6si9S2pp}70T8a-JTcP`qR?;-cc&}>{ zQ8bhL5tb-ZDdZioY5_SWS)p6B;mN`G&py9D`@%lHM~b<+Ir)5kb$fnycJ}4+^V#hs zyaYR3FI$|qPA$K0J-={W^TG+>nFONRXRdod7zJL+{zfT5TgJwbq&vTO3*lAL*b16%V#dR z{ZT>vJ6pD*GBwx+&&h@sFD#}loIMlxv(w7)-rJuD$2)J14}RG>-Pw5c4qk!*#q1Gw zwjWO`VTn&2NUMXe1VQA1KV<0UkdzR-q$?ka6RnJU6h@Hsft+b)o7EcMfrPP9sQp%8 zeEL@nw5lLAU4%cxh*tcZ5u?olLMLGXL@TbKjtt_FEBx{Y2`hMqxi+D1BIc3Ms3J=J zhiHZ0d^$Pwv~sx180_DF_vQAE-CVvuJGy&+b94UKTxH5ueve8^4CsMYd;+Rsru2+` zMJq6QiXpvTAUk9@L6!^}P-4husbIpT_YypFS>_5(SqIUI(ymOMshMAR>6Z1Dc1*I~ zImgO|CR9$bDl5hppr8Q-8C5i_e@H77c2NSR6vz=d%MC?8ahNoTlDXlYR`LcFEHVd1 z_ABw&VK%f>kEE4s;d)NA;)xb$rE?Wi!vo34nF0bC)@+qz#I=D|3MZAc3rqsS+>w|B z+b3p3E6Uj{ZRYp$4fT*n=(PgPPh(o~gR_FtG>e$j8QebyvzCf_FiPN&O$NS414n== zn{!qz6F-S10%-;MH}Z`eD;9AfQyXZ7%=&Bmn`veH&C6GBPfy>%)(UXUk8j@W?EQRz zTlTMaHn)$Dx8EFWu1PDxWjOhUce=>*5!KAGMXRDHN-oVTOw@BNaIitS!jTksrUvm5 zt#Inm;d2v(f!snM_nl;swZ0Wo8hZVG?KeU;1sUsU#j7zTi!j%4`O0Q*?ab54!a?B8 zuw1NYrGG#xyt6#e3Oeh@>1?2tmdXf;A61o>|0J#K6Rq&WqoWV|ySs<%@{X|&@6QhT zm&>b5zE-v}{VDqqxXYwWOcD*WQdmalIw@zS7UNCy2;!|aGby1G*3HsS@zOT7(J1KS z&`YF}mRIz0e&M8)x)ik1FO;eLcoA^XTe>Svlfr^BdKzCnuv{s~I;t2lk2LkP64pBT zmhkC7>HGo;2`gSY3y2ajt*}rYle_og1eARw$R!(y~D?a=7Tw1U|bMUCKQ?g^vPQP{FaniJXo#7D_T*Rnmqz4 zC!2a!*TdV37WL1TLK#U9B;V91TS2eM@{p}qhEc~_6L}RZ)-6q^dT4Ya8M#z`boS1V z@+kJVBu0#B1uje96}(Vhd{+2*CL$`0DG&743|uA)PHpZHT*( zR6a}%cJc5f7)4xc)L^j_%nM-+XXSz^RA;u(ueo38C@Wb#_xX$n)6&y|_Et`A_&L%F z;=|S1$=%WJ75MP}YWKUtqut%3n<-oQ+j}blP??H{y_J$H-BYnL^Jt(Ip|gnNizAK| zv?#Gw@_Jb_2t(0<$U-Z)v$&U-FKf>8WyP>{>Eo;%o`WeiJw-MdLs~)If|o|(t^`+p zZzU48WA#cwv4s@{Ju}L*7-)qy98$;0ly;fG-b&AkRy~ zICB(2O2H@y@sq2xL7keD0?cHnNjlnFiGH`YLblAIotSl!dPzb1@*bS-tcWs4p7Lbb zGGbYPFwmd5nXytUILm0&zwxq$b1gtt=?>TzG!|O?A7}+|@gx07m3Q!W=D)gt!^WHI z7pDiur<)h+ZP{BVg`{t2V@^x*-o!#m41pfbVJ%)$H`nNT&jM)FN!u|HFTHr6l?r*Bq@aunEm>g{mkm^xHHA6FPN@AB2y4B`y;dCGO>qZm64Uxo+?3)zr>H2lr70k` z#{t}@#=6vqzAi&b3Hhg{ZZQ$n@T zws3;J2r~;lk|;GGXC6(B@ny8mh{1-ZlonTRjnPd-k*ZzcBL5kZyjM_k3okCM*3Aqg zM_+=e!4#0oZ3Z_AdYG?_hcDFS4tdXp z3=@zH4HlD4WJvgSEym1f)g`U(UnFj_4bHu3(yYU2#*l(YKO?QUnyrcTX=Uf)`uh5( zAAw2Uym)bX4PSy?T)*CUefsjpdvA`tEQjaf!WNCc& zVA?-I+)#iF;u-VEQr}NB{0J1tmG4cH4l1N2rJ?qlkdw)c41p2U5M0gz3gZo^FqGgT zz)~rg*9q?h>7*|leRu}U=mX;|tSy34990CV6?=MI9vvc%?%?`v|Mv6c(f85s_15+)96}yncLO zXhA+SjtJLmR4V;1?~afN5gID!q&Ad6IeCcZAQ#$Uwwg=6_AJ;Gi*T2J^l$9lO>5gQ z7zgk^o*5at?^<*i7Dh}+e!*CNLDUS!t~)d{YY#i*n)ANLzV99-nFu5utn;({5(LhA&EykddZKo6)&TBBE-$($#rx@j}Lb|!Jhp!Umd^XRs1uj zM<%|fFYV5&*LwH3@@41gJo;V(;;?g`e*>cG(x1TlTK{S>klfL}pa zfq&F;*^2wVKJel+aAe$OEU#rLG1GCIooJ`1NC+xqSds|toXedv0@(_{6A)J5U$pGC z6}KM8D$nhDtxm&1U#6t*N=@3<#M(*|4TUDw``MRerg*9HRQZiBRNKyNqXe=QfTtj= zz`rM1wkKGz8Am13c|03deA{)y+;!ci;OgW}XFKIPYbR>$}K!uT|FPc~7K^ zM)#h>Pi2v<09?$c+jq~3Dz`YR;3T?yTI$-$c3gYW%k$Zaj0|tO?sR{rxxMZ=#;B%k zo1tymW|I+xu%e{g$Vwqw0l1h??{1&r-KQIXgAhv=?Fr__ac#L!=fcY5Wl=L(mz7R^ z*=ZBDO8rEna#QT3KBG!)tSS3miK#@k0swGr7V8OSW;L!IQL#N6R!UK1T4#f(D?R14 z)xu}IlM3-DRkjXh<5DtK<&!VV?NB0H0RXrr%gzZV>Uo?~(q?=jtT-=IUu#(rX=y`0 zFru1ErYaX~jNV^cp)||A$x@740RXr*%k>0v>v3C)-aZvpbU%z%ldQNZE&sMejica@ ztrR`6qM_ax=W~N`D*ymjBw2XeO0j11%nN@$tYm6XcRGd@qbOA=1*)lnPV$bTnuoj@ z%5B*+DY6v+fGe|HwlcNNfjskIIdwj#+-LRAu+mo|A81F_Sx_j!k)|moBAu#UV@@yt zfNOHe`>kZ9=~6C@X(bo3%bK=ry>FYEtE!cORf0s%^}MdDS=RCn*$M!_l}Qdie|H9B zJy}6Pp@u0GRqtHx^4vMY)ut0S^;28^#2vFu30OqFvb{@Ge@!6zW;lzs1<;- z#Ou?4T&`9C$P%9`My&vlkt}KjfQ*HrRsc9*yQmcaQeHc(Rscx6*t@L&kRpoP3eYX} zd(%?jUAV0Po7#rd0{d9;+zRkiTOHD-0-jp|j#?cv&jr*9khNB7E8w;QSSxJQiduor zTH!~ztpL^vYDKL)*tOc0$dMr2w9uqOce+D5n@D3>dX)@3Wkswp4KQhyan0wy)J zlX;npjq67>5*m)liV>)$zpn5Xx}cUZ_265?Yz@`eVI^@D2~~YmBdW1OIpx^6{Rd6xlhU>Z zBr7+v09hj<>Zu)#=dCq~SF<5sl23zM{E(G5CL@H|yb2;%<||-bRt|Qywl=nQHaE85 zOE193Q@|(u;TUnc`8-)6I(wH@kBk_3mj;AL2{aD`=<0sC zyxmfw84sqiJnz{jaHXvrKVGcL#Q=qJzX$_S+*7dgcSQt{m<$r@=~~2#aqvw1P&9kRuWSU z(vM{$jR3KptpvkQN*C)>@rZD>BMtkRVjiv55+@3sx<~wsp;XP1&?nd;df1X)8vOon z@&54g>vC~;%h>tJ{g>NI&Ucp_H0ATj@@{wc`||DG%FARcs#>u#VUZocsToozWmBZW zU>PCSF`JA#Vvv;r1;lj7Ey<)RsiJaN8cG7V8L*wyw6Vu5vjRw%h2PV8<(uVpY@qsa zBJ&vdZD4ktGuT6mwP8NGLdJ^Fg;{ad=1>b7O)%U_6>4y7QK*tuhC@GJR-BR$g-}>Q zpOMXcAUhn@bR6bAg{et0Po$HvjRn?$i64vYl;M2%U^&jvI&_FceQlKlD@9Nx2aA;Nlu?_K!CAx8Hp@-XvMs**rMd+|I5Yes)Z7O7Gu9(azlZkQj6FPyw5^#q-R6~|? zh)Y{?mJTkqc{I$S)1jknmyKg^H}7heO9^di)%5%y$;!kHz<*p&Az^_yscJ6KGPDi~ zWD>I;*V~jVZE@Ka7m{Zs%mTLrKc_l#)!45E(-*XNCuGftq|eaAVNHpb%V~m^AR|$e zKK4#Rg4>zS9 zne-I2<6L7s@w8)h%J_>qYgH7-SBjl{=@fjOlQ{A{H_ zS*c1ExGtKQetUWF#rgRzyJO$Kz|H0I@P^-Bz5n%w@!eg1vb?>y`LcX_xAG#{ifnq* zWYX_ZfglzAjbv);kgTxU_O=1aa%Ho=v7E)GOj?@~!Bt@52nF9w7S(SDLgLGzqPCzMu ztM%L!M(0s6cNH^zNi)VV20i6HYK@now6Xa=;cf}D8s;EP#+F?p{JxORQqmVvIW|=? z1lVM}zX*A@v~pqn_-NoT8-yI4gIBPAcWWv zLe&m9$<_g7tWp(tGHmEWwu*qkcjXL?R4~dMRvmm2lWG$2Of>#YKkvq?yv6!1b^ty*&7W-~4v6VBbH( z&0?3atHtvD<>B4=<<~FgUl*5`i>tS68)-tl84(>1^Oc8rrPsu{c%Yp@f&1y5uAaBrBaZ)2VGDR_KaXc2==`LXYtAycaT? zWiZSHNy(YCbFHVVVTYlvuC zKEt6{csj}%Gv>e9L~+#gpD4@ZwB^pNq@0|7(iIHP#x-N@>cti+XV6Q?Jm9Ge1z zUC%8pTt}3fN-ZCJiiqiKg^nS|CKe}aBB`B}#r%INEBhDM+h;pFXWPfuoBJQW?R-3f z++}AQ55%q!XGfdQl$BCR|FA`gH6R_;BtpY-0q~4LUr4Q7m20p%mUFU&>5v>YuiQKh zva%KdAv9SxQ1TFDCEOT=@n$3TRAd+~YD{#6vUQc=>6`&(qO9O<8PTc6D3%kYZR}S= zaqmS3{*V74E8H3x0_T}^W;rZ3g z$vuC2xAGF%ibyGkZvFNs$A7yAm8=M_N!)2|OUi-@r#d95R?awVa<&!Eu6L7 zf30V-hioO)wUAB;Uy@te&_)7Amzbz{pzwGRt!Utd5 z7r$)4A=tZ(j~};pK7ImO*?#xS@kh3?{Y+WO^KC?hfDo`j)M{NVXD5=J!17Mj^l#>9lV}v?s^@h!-G*PjiE;pyw&KRXLH2 z$Ft5kqqCT=N~AJnt4h`==LQWtca{O@Kv_thAOUUPnvT+Gftz&R5Hq7%^Hq+IArvZd!yqf1 z{-&Bg$Vy>XUWf!5w!tn;?ROC}E6+?6K9oSSl23w@C|Ox|qfNRy!GF#Y56U{~G^wS$Vg!cY)a7Kv~(}KRw<4aC(Zevhi;3_?N9` z%1W!NkpK5S%g$GuXGAUofJ<8+DUr@sDL()!I4dwD(c47&AS)pPcp6c-5HXB)&S_iH zBSyFxe7xoCX(*KRboNot<(LpP$V_co<~K^I6CazA@ZmhJMyQ%7$tvWL(L)?$Wn@ud zNKyhnM_G{-3tSIeesS={`Q6p|CCUoo`_-@am+$WvCnzf?U%y}7!S&m_m6ym?DjoZW z=3EJSC<>ov6`g+<9S-q(%l(&Es`CklD(C}7Iey~gm@EqCIv`UhL2cl=WO;!!H?1Ep zo~NwnJz?d1Lf=bOouF?@R)=8pU6NOZS|w|nd#(lUJ_Rcpj`PS-Sy)f95)Q#AKK+`e zb4eSq{dckw4#E7J<+2zxuZ7M~;dlv4qz?sn*ReHK35Q^42b@0lhhPO2QoUicE_Okm z71Y>ig=yAcID3$lhAcjp5ppE(<*fa{dPKq1F~W z)Q5s#=^+));@xw7^p`s`yIm{3RH^#n2X{@T+nLGEOsA8XtY6ItFXz<0|MYo&wO+5D zuh&nxT6w%$-uu03B|5FOY$QC&D!?X<2$2#BlD3HNwbdxj=qU{`tw;oTIy+KUUii4_ z+mK1>BA#%2Ea#to-HBd4$-EJ~bMhZ+ALBO`J*1CJZFNPs`49lwe>#hP6w}Jc`hgH0 z>ycMFXb))xxf(KB#hxKcK0DMx1RT=J^$iV&y{244Z!EsN-ruQYyZc|QoTFM%wm??^ zXOjwnf416ZgE3}IVPKoKY=aMp{WY4hk(NF3?b^PC#_)=4qEQ#wAyKJFA%6nmiito< zaZ@-~0#9H9T3V4-6`DfxLonD9_XIDsGv$~ybEwJ1>Sq=CXq)<9eX6#zew0dF)T^KD3GZJ-an5oiav!YG@22}A6 zs+HN2aJ72+;Qe~ZgqOZczg*5|SMv{Vf2U>NJ(;laM;t~JEIh?h8bTgS8n03!Ws-SQ zz~wkP+#^lPkc|KmN*-X3A|N6AvZdP+zmL{?YCIVV*On*xdhgNQReL7YTJn zY}w0KKVYR(@&2$Nen)7Z4}ZD|W{B6sD$-A})&~7ET$wohh-3v{SHSKDDmgQxpK{H3 zy_M(f-)uHFA0I9r-X$ORH;e74IhN0iigW?hpLMKlB9 z(Xm2AJf zg7GN84F=%}#%2~!VB^ffI0(ULZ)Fq!*t>(&h(Ra}z$5hx-Iljf!lNP0GYm1YNW4Vx z0NKv{S5-2bfrLVtmMs2{@Sb({I`n-!l9iWE|)o(-h`3P+V;22^B z&gZ#pg$MDb>$-)ls2y$LY+G#y!L(zyt$SA!rnhC1qH6KJ@qQt+6@Vj%6*#A--K|K> z914lMv9efehikU=H!G!$iC*)N5-Byu97PPTk-5>luCeEF%pX@Kv=x8@r-_yK3&7vB z6(1U%QZoB(MZ`^$b5n6MWy^BokYmW5Qsbm!GrMt?zP6PikQO2?6Kw_Hzr6f1SKeMP z0N?E0%ZltE5C-6p@fpr`aAgsSBVH23Xh8H4W;5ggvd#Oij%Iq*(`PfJ8v^yAZ8gch z_+u_l*;{ezzU5}y9=DZ2iLRBX`|M*Gm@ACUlG_1L@?l7VDeG0rF|MPbv_i=1ynp=t zg^%|)LY|mbn*XE~kTzqpVuE_tRs#AE{1SZdn`ErF6$ID-kkSevuk+{q7e3zzx$iBX zC+)55`+A5vvPVQpqDCyN!;Jg)=+R{;(`0R%JWDp_HE5SOis~q>5JJdxoSRnM?FM6O zJjTTCsXmhfp^g%ZXv59oxCqA4*r{3dkeD`DDmu3>j?xMtgj~*Pdn-p<`N~s<;b&hF zx|E`)JoJ?_g;F`Gd{K)&x=fs{we!~hDC-sDwPam6J-0##A=mMYwDM)ZDP@1e3}KcA z_oZc_(a!2U3Z`)# z0ScuRLI}BxSATD%I)qzkg1l97>6IUC2VStl6k{A?G&7|YLjJLLFDDSfP!vGnE`pFM ztYG@@ZhQ=k=u*u>a!$S^6+-{6GBCqhjUZfScT*e`Bg{{BOB^Y3> zP{*HOJnWp`YveW%#|H(BBu18u?YP*MF$-Q;mc75B3nD|FC3c2nqW5n3l^L`%ti9Wu*Z1Mm6?qnn@$J^W6TgO}BvbFuo z_Dji%5W~&a!&8W_wT}}@$iF$#aWXRE8)I#}#AgCP{9SB`$J?*woBZ+&V_&^Icl-PM z?}50zJ9~e67Pt=gKZ3aB`?XSX^Lr~_Aj%MJ2TXwth}H#s37}F8p8~lOBfR}Q)G z#&*m7v^w9oCnX z?GL|QTzvTHw@()r2gfI$KE2)9-PzgMqX#>?ft};+HDranoGOmCKBz^xOdZ{y3&X*U zz7X7zMvS5~lK`;`kWQ_R>rhvzniQ zha-TqqtEYe9X<~p3r*XQ_ zup&3LYD^7~EJ~dj1u$_*7#zV9QltkA)}d#i8=9pFLvqsqxDuEM+paM=5ZtP)UnBsP zM-vPtCiI_|@OPw`#Hmprtg9-E5}p$C5*XoZr&E;h@0qm#E>-YIVz7We6QPYOX9cXt zFwrSSz@#ZWA}oe>fz9|?=lo*XJYWk@i(C$eqgq_lVaN;^ZDw79VSE)FUYi1-L3Cu( zSE?`?z-Ljg&`5RsfBF{QMq!@L@vg~O7}^HQc1F$#wO5YD53 z6|Ji{wqjGN#1v00RL%mC;Ho|3beEzcu~?JL}!C;Ff27Bq(O2*ZCVT9{<1?w z9W^yBc)u|%F^<-VAFY8<8nP6W$)m@aBFx(Y9xV?WqZ#W}yTmG7Owt>frB7B;x`bt= z7CHjf2)2-x+B|7y2iXbKrjzuUoij-zBw5M&A(Tui#cf1M4~ZT z0ti>mSXO8~FnCy@fY+r=m3wVj`RQWo;_b=ao8xyuN!}c89sK(4aPJez%Eit};PCAl zvZ7Fh%R&!9EvR%5*pQQ{0hUaS0!WNn2FWCXo&*K8%W$l)Lb_>hqv~@=K!bw&Rv3fe z0%HG^=3jE#oc3wEcz^1jX=;O5yTjU2RhDc z!E5zcK4`6S>HN6ILw}ko-zxH*1W+&au#JffksutYjXo z8ay0(MV@>`A^`vDvhwTh-rg>K{CW^dmp6l~Y#n?c-X5&;vlYp2U)2Y7L^;Ht6A)tb zCZ1X7rNS0bo~zMMIaq44tjlW )KTY~PClI>HzvPDx@GnqO}|r&u*A{Gq=1&(_T8 z&a%YjH~#GGHBem=XpIXgQ&eYm_ny}7)<-~V|Hqnm1FM21R~R0pWcx{5*) z)k;>T)XqTw*Z@I23um1*nSjzOkz+(QEWdz^;_(q!v@O~QYSf~pfNE3F^wio&X7eee zROe5=Z@{*+hVNr=rV_~_0SZ%oHKtz4VoqPlUiK;^X-S<$r-HSq(58mcDUmr!Dxt81 zjMqkD7(QE5Qe?}}K`1j3%9#k-Ohi;7Y403%RENd9#BW0SOhzt++;pOzry#Kr!nTo2 zEq~X^$;1zh6226XD_}~K#B&}r%t-x9qeU~HL4sQ3Mshw?T&-YO+M45F2jp zxH&^5%Xvx3E`Z>(VBduywdhO^e6r2=1!Uy#@_TY8%SvRurH)bXBd?eXJ(iVuA(f*F ztQH!Z@Q^&&z-uC2T~?0w-u`eB_~Cf>;P~+Ooew*2_AY+f*$QRLF0pg?W(`>h2$yjV z^|C?GQ4kcq44*h~FPA#&#?Iz%fLcl@r(i{9$woB`F*me;!k9}EI{vC3ny^N65q}%v zjf8*3%nA-+R*iaLtur;3v+$%^Nz*|-n$*o6<;Jd_R?AFaMT%H4M8D4^N$OGwFfq1u z7z3lQhKXH<=-{Fkl@)P)|9-!hm7hNg*uT8|?&{_it}o9|kFGyne?D8IS^=^7AB>j_ zv0h04HOXuyLDGBOPKIKI3X7o_t*O4v=Ak8C)Zj9$V>5-sr$y>2s0LX{3jqoA-cp5K6aH8n~ix=`wp_1>ZzMNfO08m=hVNy==+~ zgv)^+@WU#qOr>?99z{2RWQ>nw6}SJ}WHMTP6XvAZS@ED@M=;AxEus+d^eKYECL?%dtG{}^faRXJyu5Lj8%ID&4&%Bq~oomW9ySsHFJB^jftCuid(awuDo zfQo+fHLTQFaVe@8e)T%DOKwRzbhnJkQ96?laSMGbS1>_-KEO&pTStPt z705-ez)Fn|(4u$EEKX=ZAg#dF!rDcd`FCK2+RL}E9^CtQpk7~K{r<)20epV_`2*Z! zE5DbmXg|7qFq+WYB$k$)K#Sk3sxCQScXr+o8xf!hA;cUUxk=T4^;tTRAfXpVMcZ6g~cndGT+X{J1ZZMDwV}1G!2GLKq^(` zKvbSZ0YmL0^;lGfLQbo;iNP1DB~7%OPDD*#(X znW1XJm+;M2Z=0f^YI}$aYg}hD%%O}LI_RI=Eefm%y9eHq(D75PHYdSKKTLs1QQ2lJ z2DiQ*U}etR9twe#+8fH+2&XM|(?X_Oh=rL5})xa`I>oY5(yPM2$y?Ggz`G zK4vUW?!SDpv%49r^pRsooH|#W!%D2hp8hY8Mzq7?2r($BY;?$PsU2o1gi~aV*V%O~ zO+bgsYTs%JD2lTLWPIMK%OW2)zgXKMw;b+I-Bftm*V>P5Hg*}95|zs-SQAE&P6jIE zPn9eaN{$2@d#hGTFfgSl>#|b1CgT|0%52H^5tr≥QT}BwGP^_4)O3`RT#iHw-Jw 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%0DCH99Cm`+jQKh4#u%HNnm8*KE-OLdvrs5WUKFT^ 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 MEUzI~jRF)ZBoQVy&Rp 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 r9+bZ(*ipTGJyboRqm literal 0 HcmV?d00001 diff --git a/.image/common/bpm-feature.png b/.image/common/bpm-feature.png new file mode 100644 index 0000000000000000000000000000000000000000..23787fb4f090154f2d914100ca91174c1e60cafc GIT binary patch literal 16260 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 K$W_Xkef=LKHG>cU literal 0 HcmV?d00001 diff --git a/.image/common/crm-feature.png b/.image/common/crm-feature.png new file mode 100644 index 0000000000000000000000000000000000000000..e1c9670c6f75efea1fbd265dea410a60ad672cf9 GIT binary patch literal 15610 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 C!4`x7 literal 0 HcmV?d00001 diff --git a/.image/common/erp-feature.png b/.image/common/erp-feature.png new file mode 100644 index 0000000000000000000000000000000000000000..d30b30eed9d4e072c61ebf3bb63809b2b5593078 GIT binary patch literal 47016 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 literal 0 HcmV?d00001 diff --git a/.image/common/infra-feature.png b/.image/common/infra-feature.png new file mode 100644 index 0000000000000000000000000000000000000000..f5cef50c56ff3a4acccbfbb4f5f3e453dda5e12b GIT binary patch literal 16920 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 W#wNR7sLindBg@OENLNXk2LB%-C!B`> literal 0 HcmV?d00001 diff --git a/.image/common/mall-feature.png b/.image/common/mall-feature.png new file mode 100644 index 0000000000000000000000000000000000000000..cca05c0e69f38bdc7f80f1d23c34b31df4e7bf1b GIT binary patch literal 27721 zcmc$_1yq|swD^e>D_-2)-8Dcxi>TUefOLAw^}Or lIprGKZzIpu)1qB`c^nQbl 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 literal 0 HcmV?d00001 diff --git a/.image/common/mall-preview.png b/.image/common/mall-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..e164cd2a15c12bdc90b3656d776612cfc9ccc0f8 GIT binary patch literal 209292 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ΠwS~zZfA%J;A45ibIvwev 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 literal 0 HcmV?d00001 diff --git a/.image/common/ruoyi-vue-pro-biz.png b/.image/common/ruoyi-vue-pro-biz.png new file mode 100644 index 0000000000000000000000000000000000000000..24a385abe2ad0a8e9546ce8f90ec1383089fd867 GIT binary patch literal 32992 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 TxX3il0Dz*bnoOnC8`%E>Oe*}# literal 0 HcmV?d00001 diff --git a/.image/common/system-feature.png b/.image/common/system-feature.png new file mode 100644 index 0000000000000000000000000000000000000000..366087ce0c9061c34e60feaa30af099f99694cdd GIT binary patch literal 13584 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 literal 0 HcmV?d00001 diff --git a/.image/common/win-cloud-architecture.png b/.image/common/win-cloud-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..59416d8068149b31b7ac24bc4833301504fadc82 GIT binary patch literal 206171 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